Как создать гостеприимного Slack-бота на Python
Создайте этого слабого бота и придайте своему каналу более дружелюбную атмосферу.
Приветствуя новых пользователей на вашем канале, они чувствуют себя как дома, но отслеживать каждого присоединившегося пользователя может оказаться утомительной задачей. Именно здесь на помощь приходит приветственный бот Slack. Бот отправляет персонализированное приветственное сообщение каждому новому пользователю канала. Он всегда онлайн, поэтому не будет поздних приветственных сообщений.
Вы узнаете, как настроить учетные данные своего бота, прослушивать события в Slack и отправлять сообщения обратно пользователям.
Создание бота Slack и получение его токена API
Создайте учетную запись Slack или войдите в уже существующую. Затем создайте новое рабочее пространство Slack, чтобы протестировать своего бота, прежде чем устанавливать его в активное рабочее пространство.
Войдите в новое рабочее пространство. Slack автоматически создает для вас случайный общий канал.
Обратите внимание на раздел «Приложение» в левом нижнем углу рабочей области. Здесь появится наш бот, когда вы его создадите. Перейдите на веб-сайт Slack API.
Нажмите Создать приложение. Создайте приложение С нуля в появившемся окне.
Назовите свое приложение и выберите рабочую область, в которой вы хотите его разработать.
Затем нажмите кнопку Создать приложение. Нажатие перенаправит вас на страницу, содержащую основную информацию о вашем приложении. Обратите внимание на секрет подписи под учетными данными приложения. Ваш бот будет использовать секрет подписи, чтобы убедиться, что событие пришло из Slack и не было подделано во время передачи.
Перейдите к функции OAuth и разрешения.
В разделе OAuth и разрешения перейдите к разделу Области токенов бота. Здесь вы добавите разрешения на то, что ваш бот может делать в вашем рабочем пространстве. Добавьте область users:read. Эта область позволит вашему боту видеть людей в вашем рабочем пространстве. Также добавьте область chat:write, которая позволит вашему боту отправлять сообщения в рабочую область.
Вернитесь к основной информации о своем боте и нажмите Установить в Workspace.
Нажмите «Разрешить» на следующей появившейся странице. Теперь вы закончили установку бота в свое рабочее пространство. Перейдите к функции OAuth и разрешения. Обратите внимание на токен OAuth пользователя бота, который Slack генерирует после установки. Бот будет виден в разделе приложений вашего рабочего пространства.
Теперь вы установили бота на свое рабочее место и можете написать код для его управления.
Подготовка среды
Чтобы следовать этим примерам кода, вам необходимо знать основы Python.
Создайте новую виртуальную среду и файл .env. Вы будете использовать файл .env для хранения вашего токена и секрета подписи, который вам необходимо хранить в тайне. Не следует загружать файл .env на какую-либо общедоступную платформу.
Запустите следующую команду в терминале, чтобы установить необходимые библиотеки:
pip install slack-sdk pathlib dotenv flask slackeventsapi
Библиотека slack-sdk предоставит вам инструменты для создания приложений и интеграции Slack, включая методы API, клиенты веб-API и OAuth. pathlib и dotenv помогут вам загрузить переменные среды. flask поможет вам обрабатывать HTTP-запросы и ответы. slackeventsapi предоставит вам прослушиватель событий, который будет получать и обрабатывать события из Slack.
Полный исходный код доступен в репозитории GitHub.
Импорт необходимых библиотек
Создайте новый файл Python и начните с импорта ранее установленных библиотек, чтобы вы могли использовать их функциональность в своем коде.
import slack_sdk as slack
import os
from pathlib import Path
from dotenv import load_dotenv
from flask import Flask
from slackeventsapi import SlackEventAdapter
Модуль Python os поставляется вместе с языком, поэтому вам не нужно его устанавливать. SlackEventAdapter — это класс модуля slackeventsapi, который обрабатывает события из Slack API.
Настройка Slack-бота
Создайте две переменные в файле .env. Назовите один SLACK_BOT_TOKEN и назначьте ему токен OAuth пользователя бота. Назовите другой SLACK_SIGNING_SECRET и назначьте ему секрет подписи. Вернитесь к файлу Python и создайте объект Flask. Затем загрузите переменные среды из файла .env, используя функцию load_dotenv из модуля dotenv.
app = Flask(__name__)
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
Создайте экземпляр slack_event_adapter. Он будет обрабатывать события из Slack API, используя переменную среды SLACK_SIGNING_SECRET для аутентификации запросов.
slack_event_adapter = SlackEventAdapter(os.environ['SLACK_SIGNING_SECRET'],
'/slack/events', app)
/slack/events — это конечная точка, которую Slack API будет использовать для отправки событий.
Создайте экземпляр WebClient, который будет отправлять сообщения в Slack API. Вызовите API, чтобы получить идентификатор бота.
client = slack.WebClient(token=os.environ['SLACK_BOT_TOKEN'])
BOT_ID = client.api_call("auth.test")['user_id']
Настройте сообщение, которое вы будете отправлять новым пользователям, которые присоединятся к каналу. Инициализируйте пустой набор, который будет отслеживать приветствуемых пользователей.
GREETING_MESSAGE = "Hello {user_name}, welcome to the {channel_name} " \
"channel! We're excited to have you here."
welcomed_users = set()
Вы можете настроить поздравление по своему вкусу.
Создание функции для обработки события «Член присоединился к каналу»
Настройте прослушиватель событий. Он будет прослушивать событиеmember_joined_channel.
@slack_event_adapter.on('member_joined_channel')
Определите функцию, которую вы будете вызывать, когда пользователь присоединяется к каналу. Используйте эту функцию для извлечения идентификатора пользователя и идентификатора канала из данных о событии. Проверьте, является ли пользователь новичком на канале. Если нет, получите информацию о пользователе и канале с помощью класса WebClient. Создайте персонализированное приветственное сообщение. Отправьте поздравление на канал
def handle_member_joined_channel(event_data):
user_id = event_data['event']['user']
channel_id = event_data['event']['channel']
# Only send a welcome message if the user is new
if user_id not in welcomed_users:
welcomed_users.add(user_id)
user_info = client.users_info(user=user_id)
user_name = user_info['user']['name']
channel_info = client.conversations_info(channel=channel_id)
channel_name = channel_info['channel']['name']
greeting = GREETING_MESSAGE.format(user_name=user_name,
channel_name=channel_name)
client.chat_postMessage(channel=channel_id, text=greeting)
Event_data содержит всю информацию о событии, в котором пользователь присоединился к каналу.
Запустите приложение Flask и запустите скрипт. Если запускается как основная программа (не импортируется как модуль), запустите в режиме отладки и прослушивайте порт 5000.
if __name__ == "__main__":
app.run(debug=True, port=5000)
Режим отладки автоматически перезагружает приложение при внесении изменений в код. Не используйте режим отладки в производственной среде: он может раскрыть конфиденциальную информацию и сделать ваше приложение уязвимым для атак. Запустите свое приложение. Он будет работать как локальный сервер на порту 5000.
Соединение логики с вашим ботом
Создав логику, теперь вам нужно подключиться к боту в вашем рабочем пространстве. Это позволит ему использовать эту логику для выполнения операций в вашей рабочей области. Начните с загрузки и запуска Ngrok. Ngrok поможет вам открыть доступ к вашему локальному веб-серверу из Интернета.
После запуска используйте следующую команду, чтобы сопоставить адрес вашего локального сервера с адресом Ngrok.
ngrok http 500
Скопируйте адрес Ngrok, который соответствует вашему локальному хосту.
Перейдите на веб-сайт Slack API. В разделе Подписки на события включите события. В разделе URL-адрес запроса введите адрес Ngrok, а затем /slack/events. Это укажет на вашу конечную точку.
Затем подпишитесь на событиеmember_joined_channel. Это будет уведомлять вашего бота каждый раз, когда пользователь присоединяется к каналу. Нажмите Сохранить изменения. Slack автоматически добавит области, необходимые для подписки на это событие. Каждый раз, когда вы меняете область действия, вам придется переустанавливать приложение в рабочей области.
Нажмите «Переустановить приложение».
Тестирование вашего бота
Идите на свое рабочее место. Перейдите на канал, на котором хотите использовать бота. Отправьте прямое сообщение боту. Например, @Welcoming Bot. Появится приглашение добавить бота на канал. Нажмите «Добавить».
Теперь каждый раз, когда к каналу присоединяется новый пользователь, бот будет отправлять приветственное сообщение.
На изображении выше показано, как бот приветствует нового пользователя на канале.
Максимально эффективно использовать рабочее пространство Slack
Боты Slack — не единственный способ расширить функциональность платформы обмена сообщениями Slack. Другой метод — интегрировать сторонние инструменты со Slack. Они предоставляют дополнительные функции внутри платформы.
Ознакомьтесь с этими интеграциями, поскольку они повысят вашу производительность в Slack.