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

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

27 мая 2022 г.

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


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


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



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


Шаг 1. Установите виртуальную среду


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


```javascript


sudo apt установить python-virtualenv


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


```javascript


sudo python2 -m pip установить virtualenv


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


```javascript


py -2 -m pip установить virtualenv



Шаг 2. Создание среды


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


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


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


```javascript


python3 -m venv whatsappbot


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


```javascript


py -3 -m venv whatsappbot


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


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


```javascript


. whatsappbot/bin/активировать


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


```javascript


whatsappbot\скрипты\активировать


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


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


```javascript


pip install Flask messagebird запрашивает gunicorn jinja2 werkzeug urllib3


Откройте вашу папку с помощью редактора кода, у меня есть vscode, папка вашего проекта теперь должна иметь папку venv, у меня есть whatsappbot, создайте файл bot.py в корневой папке вне каталога venv.



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


```javascript


из фляги импорт фляги


приложение = фляга (имя)


@app.route('/bot', методы=['POST'])


деф бот():


логика вебхука


если name == ‘main’:


app.run()


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


На Mac и Linux


```javascript


экспортировать FLASK_APP=bot.py


В Windows


```javascript


setx FLASK_APP «bot.py»


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


```питон


импортировать JSON из фляги


импортировать Flask, jsonify, запрос


запросы на импорт


приложение = фляга (имя)


@app.route («/»)


привет ():


вернуть «Бот жив!»


@app.route('/webhook', методы=['POST'])


деф бот():


данные = запрос.json


сообщение = данные["сообщение"]["контент"]["текст"].lower()


если (сообщение == «привет»):


вернуть разговор_ответ(


данные["разговор"]["id"]"Как дела"


) если (сообщение == «пока»):


вернуть разговор_ответ(данные["разговор"]["идентификатор"]"До свидания!")


def разговор_ответ (диалог_разговора, текст_сообщения):


ЗапросУрл = (


«https://conversations.messagebird.com/v1/conversations/»


  • идентификатор_беседы

  • «/ сообщения»

список заголовков = {


«Авторизация»: «Ключ доступа MESSAGEBIRD_ACCESS_KEY»,


«Тип контента»: «приложение/json»,


полезная нагрузка = json.dumps({"тип": "текст", "контент": {"текст": текст_сообщения}})


ответ = запросы.запрос («POST», reqUrl, данные = полезная нагрузка, заголовки = список заголовков)


return jsonify({«статус»: «ок», «ответ»: response.text})


если name == ‘main’:


app.run()


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


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


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


```javascript


прогон фляги


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


```javascript


нгрок http 5000


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


```питон


запросы на импорт


reqUrl = "https://conversations.messagebird.com/v1/webhooks"headersList = {


«Авторизация»: «Ключ доступа MESSAGEBIRD_ACCESS_KEY»,


«Тип контента»: «application/json»


полезная нагрузка = json.dumps({


«события»: [«сообщение.создано», «сообщение.обновлено»],


«channelId»: «YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX»,


«url»: «https://ваш-домен.ngrok.io/webhook»


ответ = запросы.запрос («POST», reqUrl, данные = полезная нагрузка, заголовки = список заголовков)


печать (ответ.текст)


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


Развертывание бота WhatsApp на Heroku


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



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


```javascript


web: gunicorn — привязать 0.0.0.0:$PORT приложение:приложение


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


```питон


колба==2.0.2


Джинджа2==3.0.3


оружейный рог == 20.1.0


запросы == 2.27.1


urllib3==1.26.8


Веркцеуг == 2.0.3


сообщение == 2.0.0


время выполнения.текст


```javascript


питон-3.9.10


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


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


```питон


импортировать json


из фляги импорт фляги, jsonify, запрос


запросы на импорт


из среды импорта ОС


MESSAGEBIRD_ACCESS_KEY = среда["MESSAGEBIRD_ACCESS_KEY"]


приложение = фляга (имя)


@app.route («/»)


привет ():


вернуть «Бот жив!»


@app.route('/webhook', методы=['POST'])


деф бот():


данные = запрос.json


сообщение = данные["сообщение"]["контент"]["текст"].lower()


если (сообщение == «привет»):


вернуть разговор_ответ (данные [«разговор»] [«идентификатор»]», «Как дела»)


если (сообщение == «пока»):


вернуть разговор_ответ(данные["разговор"]["идентификатор"]"До свидания!")


def разговор_ответ (диалог_разговора, текст_сообщения):


reqUrl = ("https://conversations.messagebird.com/v1/conversations/" + chat_id + "/messages") headersList = {"Авторизация": "AccessKey" + MESSAGEBIRD_ACCESS_KEY, "Content-Type": "application/json ”,}


полезная нагрузка = json.dumps({"тип": "текст", "контент": {"текст": текст_сообщения}})


ответ = запросы.запрос («POST», reqUrl, данные = полезная нагрузка, заголовки = список заголовков)


return jsonify({«статус»: «ок», «ответ»: response.text})


если name == ‘main’:


app.run()


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


```javascript


логин героку


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


```javascript


героку создать


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


```javascript


Конфигурация heroku: установите MESSAGEBIRD_ACCESS_KEY=ваш-фактический-api-key-from-the-messagebird-dashboard


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


```javascript


git push главный герой


После этого


```javascript


геройку пс:масштаб сети=1


Теперь, если вы получите доступ к URL-адресу Heroku, вы должны увидеть текст, в котором ваш бот жив. Осталось только создать веб-хук с URL-адресом Heroku вашего бота.


```javascript


запросы на импорт


reqUrl = "https://conversations.messagebird.com/v1/webhooks"


список заголовков = {


«Авторизация»: «Ключ доступа MESSAGEBIRD_ACCESS_KEY»,


«Тип контента»: «application/json»


полезная нагрузка = json.dumps({


«события»: [«сообщение.создано», «сообщение.обновлено»],


«channelId»: «YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX»,


«url»: «https://ваш-домен.herokuapp.com/webhook»


ответ = запросы.запрос («POST», reqUrl, данные = полезная нагрузка, заголовки = список заголовков)


печать (ответ.текст)


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


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


Ранее опубликовано здесь



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE