Создайте чат-бота 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 , если у вас возникнут проблемы.
Ранее опубликовано здесь
Оригинал