Создание чат-бота для WhatsApp с помощью Python, Flask и Messagebird

В этом руководстве я собираюсь создать чат-бота, используя API Messagebird для WhatsApp и фреймворк Flask для Python.

Первым шагом будет получение доступа к использованию API WhatsApp по этой ссылке. После регистрации и входа в панель управления перейдите в WhatsApp и следуйте инструкциям по настройке собственного номера для работы с API. На данный момент мы можем использовать песочницу Messagebird для тестирования нашего бота, поэтому давайте погрузимся в нее.

Подключите свой телефон к песочнице на приборной панели Messagebird, нажмите на WhatsApp, затем WhatsApp sandbox.

Когда вы отправите свое первое сообщение на этот номер, вам будет присвоен уникальный идентификатор канала, но когда вы пройдете верификацию для использования своего собственного номера, вы также получите свой собственный идентификатор канала, который мы будем использовать для общения с нашим ботом. Если вы уже установили виртуальную среду, пропустите шаг 1.

Шаг 1: Установка виртуальной среды

Для установки на Linux

sudo apt install python-virtualenv

Для установки на Mac

sudo python2 -m pip install virtualenv

Для установки на Windows

py -2 -m pip install virtualenv

Шаг 2: Создайте среду

Создайте каталог или папку, в которой вы будете создавать среду, используйте версию python на вашей машине, я собираюсь использовать python3 в этом уроке.

Создание среды в Linux и MacOS
В терминале перейдите в каталог, который вы создали в шаге 2, и введите следующую команду, заменив whatsappbot на свое имя.

python3 -m venv whatsappbot

Создание среды в Windows

py -3 -m venv whatsappbot

Шаг 3: Активируйте среду

Активируйте виртуальную среду в Linux и MacOS, заменив whatsappbot на имя среды, которую вы создали в шаге 2:

. whatsappbot/bin/activate

Для Windows активируйте виртуальную среду с, замените whatsappbot на имя среды, которую вы создали в шаге 2:

whatsappbotScriptsactivate

Шаг 4: Установите Flask

Введите следующую команду

pip install Flask messagebird requests gunicorn jinja2 werkzeug urllib3

Откройте вашу папку редактором кода, мой — vscode В папке проекта теперь должна быть папка venv, мой — whatsappbot, создайте файл bot.py в корневой папке вне каталога venv.

Добавьте следующий код в файл bot.py, чтобы сделать приложение, которое печатает «Hello bot», сохраните файл и закройте его:

from flask import Flask
app = Flask(__name__)
@app.route(/bot, methods=[POST])
def bot():
   #webhook logic
if __name__ == __main__:
   app.run()
Вход в полноэкранный режим Выйти из полноэкранного режима

Установите переменную окружения FLASK_APP с помощью следующей команды в терминале.

На mac и linux

export FLASK_APP=bot.py

На windows

setx FLASK_APP “bot.py”

Первое, что нам нужно сделать в нашем чатботе, это получить сообщение, введенное пользователем. Это сообщение приходит в полезной нагрузке POST-запроса, отредактируйте ваш файл bot.py со следующим кодом, и я объясню, как это работает.

import json
from flask import Flask, jsonify, request
import requests
app = Flask(__name__)
@app.route(/)
def hello():
  return Bot is alive!”
@app.route(/webhook, methods=[POST])
def bot():
   data = request.json
   message = data[message][content][text].lower()
   if (message == hello):
       return conversation_reply(
          data[conversation][id],How are you
       )
   if (message == bye):
       return conversation_reply(data[conversation[id],Good    bye!”)

def conversation_reply(conversation_id, message_text):
   reqUrl = ("https://conversations.messagebird.com/v1/conversations/"+conversation_id+ "/messages")
headersList = {
      Authorization: AccessKey MESSAGEBIRD_ACCESS_KEY,
      Content-Type: application/json,
   }
   payload = json.dumps({type: text, content: {text:  message_text}})
   response = requests.request(POST, reqUrl, data=payload,    headers=headersList)
   return jsonify({status: ok, response: response.text})

if __name__ == __main__:
   app.run()
Вход в полноэкранный режим Выйти из полноэкранного режима

В request.json содержится информация от отправителя, поэтому нам нужно содержимое сообщения, и мы используем его в нашем операторе if. Я создал еще одну функцию, которая обрабатывает почтовые запросы к API бесед с ответом. Для тестирования бота добавьте ключ доступа к Messagebird из приборной панели.

Для тестирования на локальном хосте используйте ngrok

Если у вас нет ngrok на вашей машине, установите его отсюда. Если он у вас уже есть, запустите ваше приложение flask:

flask run

Затем откройте другое окно терминала и запустите

ngrok http 5000

Создайте веб-хук с помощью следующей команды, вы можете создать отдельный файл, который вы будете запускать один раз, замените accesskey, channelid и url на те, которые вы получили при запуске ngrok, не забудьте добавить /webhook

import requests
reqUrl = "https://conversations.messagebird.com/v1/webhooks"
headersList = {
 Authorization: AccessKey MESSAGEBIRD_ACCESS_KEY,
 Content-Type: application/json 
}
payload = json.dumps({
events:[message.created, message.updated],
channelId: YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX,
url:"https://your-domain.ngrok.io/webhook"
})
response = requests.request(POST, reqUrl, data=payload, headers=headersList)

print(response.text)
Вход в полноэкранный режим Выйти из полноэкранного режима

Вот и все, вы можете протестировать своего бота, отправляя сообщения на номер песочницы.

Развертывание бота WhatsApp на Heroku
Добавьте файлы Procfile, requirements.txt и runtime.txt в корневую папку.

Внутри Procfile добавьте

web: gunicorn — bind 0.0.0.0:$PORT app:app

Requirements.txt добавьте следующие требования, заменив их фактическими версиями, которые вы используете

flask==2.0.2
Jinja2==3.0.3
gunicorn==20.1.0
requests==2.27.1
urllib3==1.26.8
werkzeug==2.0.3
messagebird==2.0.0
runtime.text

python-3.9.10
Войти в полноэкранный режим Выйти из полноэкранного режима

Я использовал версию python, которую я использую, она может отличаться от вашей.

Создайте переменные окружения, чтобы скрыть ваш ключ API MESSAGEBIRD в производственной среде, обновите ваш код внутри bot.py.

import json
from flask import Flask, jsonify, request
import requests
from os import environ

MESSAGEBIRD_ACCESS_KEY = environ[MESSAGEBIRD_ACCESS_KEY]

app = Flask(__name__)
@app.route(/)
def hello():
  return Bot is alive!”
@app.route(/webhook, methods=[POST])
def bot():
data = request.json
message = data[message][content][text].lower()
if (message == hello):
return conversation_reply(data[conversation][id],How are you)
if (message == bye):
return conversation_reply(data[conversation][id],Good bye!”)
def conversation_reply(conversation_id, message_text):
reqUrl = ("https://conversations.messagebird.com/v1/conversations/" + conversation_id + /messages)
headersList = {
Authorization: AccessKey  + MESSAGEBIRD_ACCESS_KEY, Content-Type: application/json,
}
payload = json.dumps({type: text, content: {text: message_text}})
response = requests.request(POST, reqUrl, data=payload, headers=headersList)
return jsonify({status: ok, response: response.text})

if __name__ == __main__:
app.run()
Вход в полноэкранный режим Выйдите из полноэкранного режима

После этого выполните следующие команды Heroku в терминале.

heroku login

После входа в систему запустите

heroku create

После создания приложения Heroku добавьте ключ API Messagebird с помощью этой команды.

heroku config:set MESSAGEBIRD_ACCESS_KEY=your-actual-api-key-from-the-messagebird-dashboard

Затем зафиксируйте свои изменения с помощью git add . и git commit -m «first commit», теперь вы должны быть в состоянии выполнить следующую команду для развертывания вашего бота WhatsApp онлайн.

git push heroku main

После этого

heroku ps:scale web=1

Теперь, если вы зайдете на ваш Heroku URL, вы должны увидеть текст «Ваш бот жив». Осталось только создать webhook, содержащий URL вашего бота на Heroku.

import requests
reqUrl = "https://conversations.messagebird.com/v1/webhooks"
headersList = {
 Authorization: AccessKey MESSAGEBIRD_ACCESS_KEY,
 Content-Type: application/json 
}
payload = json.dumps({
events:[message.created, message.updated],
channelId: YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX,
url:"https://your-domain.herokuapp.com/webhook"
})
response = requests.request(POST, reqUrl, data=payload, headers=headersList)

print(response.text)
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Вот и все, теперь у вас есть бот WhatsApp. Для получения дополнительной информации и улучшения вашего бота читайте документацию.

Найдите меня в Twitter, если у вас возникнут проблемы.

Оцените статью
Procodings.ru
Добавить комментарий