Создание GIF бота для Facebook Messenger используя Flask

автор

Создание Facebook ботов — это действительно круто. В отличие от хорошо документированного API, у Facebook много пользователей. По состоянию на третий квартал 2017 года у Facebook было 2.07 миллиарда активных пользователей в месяц.

Это означает, что ваш Facebook бот может быть доступен более чем 2 миллиардам пользователей после его публикации. Представьте, как это круто. В этой статье мы создадим GIF-Бота для Facebook Messenger. Бот будет отвечать пользователям GIF изображениями, которые относятся к любому тексту, который он получает от пользователей. Мы будем использовать следующее:

Таким образом, чтобы построить бота нужно:

    1. Создать страницу и приложение Facebook для бота.
    2. Настроить локальный сервер Flask для обработки сообщений от бота.
    3. Ввести ngrok для туннелирования локального сервера в Интернете.
    4. Сделать простой эхо-бот, чтобы проверить, работает ли наша установка.
    5. Внести GIPHY API и создать нашу развлекательную программу Gif Bot.

Создать страницу / приложение Facebook

Чтобы настроить бот-мессенджер, вам нужно создать страницу Facebook и создать приложение Facebook через свою учетную запись разработчика. Мы можем назвать его GIPHY Bot.

Выберите продукт «Messenger«, так как мы строим платформу для обмена сообщениями.

Затем выберите страницу Facebook, которую вы создали ранее, так как она просто необходима для бота.

Обратите внимание на Token доступа к странице (он должен храниться в секрете), поскольку это потребуется в приложении Flask для доступа к API-интерфейса Messenger. Также должен быть создан обработчик событий (webhook) для обработки сообщений ботом. Мы настроим это, как только настроим Flask Server.

Установка Flask Server

Flask сервер предоставит webhook (обработчик запросов), который позволит получать и отвечать на сообщения от бот-мессенджера. Нам нужно будет установить Flask и библиотеку Requests.

Flask будет использоваться для запуска сервера, в то время как Requests помогут в создании вызовов API.
Создайте файл python bot.py и добавьте следующий код:

При настройке WebHook (Обработка событий) для бот-мессенджера, Facebook отправляет запрос GET на конечную точку (в этом случае flask сервер), предоставляя токен, который устанавливается при добавлении webhook для приложения-мессенджера и значения «вызов» для возврата. Это необходимо для правильной работы webhook.
Вы можете запустить сервер, просто набрав:

Приложение Flask запускает локальный сервер («127.0.01: 5000» по умолчанию), но мы не можем установить это как WebHook (обработчик событий) для бот-мессенджера, так как он не подключен к сети и, таким образом, не может быть доступен на Facebook. Именно здесь ngrok вступает в игру.

Ngrok

Предполагая, что у вас установлен ngrok, все, что вам нужно сделать (для Linux-систем):

Это обеспечивает доступный URL-адрес, который позволит Facebook получить доступ к Flask-приложению, запущенному в нашей системе.

Поскольку наш обработчик событий (WebHook) работает и он онлайн, мы обновляем настройки мессенджер-приложения с URL-адресом, полученным от ngrok (‘https://af6313bd.ngrok.io‘), и проверяем токен, который мы установили в файле bot.py.

Затем мы подписываем webhook на страницу Facebook, которую мы создали. В этом случае «GIPHY Bot».

На данном этапе данные от бот-мессенджера будут отображаться на сервере. Если вы попытаетесь отправить сообщение боту, то увидите POST-запросы в консоли.

Сообщения, полученные ботом, отправляются в виде запросов POST к обработчику событий (webhook), который мы установили. В приведенном выше методе handle_messages помогает извлечь необходимые данные из каждого сообщения, полученного ботом, которые включают:

  • Само сообщение
  • Идентификатор отправителя

Сообщение send_text_message будет определено позже; его функция — отправить сообщение пользователю.

Создаем простой Echo Bot

Функция send_text_message делает API-вызов с определенным текстом и получает тот же текст обратно (Echo Bot). Токен доступа к странице, полученный ранее, требуется для отправки сообщений пользователю.

Внедрение API GIPHY

Ну, мы здесь не для создания Echo Bot. Мы хотим, чтобы бот ответил нам gif-изображением, которое соответствует тексту, полученному от пользователя. Для этого мы будем использовать API-интерфейс GIPHY Translate.

Перейдите на страницу https://developers.giphy.com/, зарегистрируйтесь и создайте новое приложение. Вам будет предоставлен ключ API, необходимый для доступа к API GIPHY.

Функция search_gif просто делает GET-запрос к API GIPHY Translate, передавая текст пользователя, и API ключ разработчика в качестве параметров.

Затем он возвращает URL-адрес гифки.

Функция send_gif_message — это простая модификация ранее созданной функции send_text_message. На этот раз сообщение, полученное ботом от пользователя, передается в качестве аргумента функции send_gif и возвращается URL от gif-изображения. Этот URL-адрес затем передается в виде изображения пользователю.

Подведем итоги

Фух! Теперь у нас есть наш рабочий GIF-бот. Но нужно знать еще несколько основных вещей, которые вам могут понадобиться.

  • Тестовый период Ngrok является ограничительным. Переадресованный URL не является фиксированным и, таким образом, изменяется при каждом перезапуске Ngrok. Возможно, вам понадобится разместить Flask-приложение на выделенный сервере, таком как DigitalOcean, если вы хотите, чтобы ваш бот всегда был в сети.
  • Бот по-прежнему находится в режиме разработки и, следовательно, может быть недоступен другим пользователям. Возможно, вам придется заполнить некоторые требования к Facebook до того, как бот станет публичным.
  • API Facebook Messenger действительно классный и предоставляет множество способов создания сообщений, отправленных пользователям. Проверьте это!

Полный код доступен здесь:

Github: https://github.com/teenoh/GIF-Bot

Если у вас возникнут какие-либо проблемы при создании ваших ботов, не стесняйтесь публиковать их в комментариях ниже. Мы будем очень рады помочь.