Привет! 👋
Ты когда-нибудь мечтал, чтобы твой бот не только отправлял сообщения, но и мог отвечать на входящие сообщения через WhatsApp? А может, ты хочешь, чтобы бот умел запрашивать данные через API, например, получать погоду или новости? Сегодня я покажу, как сделать всё это с использованием Twilio API и Python. 🔥
Мы не просто создадим бота, который будет отвечать на сообщения, но и добавим взаимодействие с внешними API. Будет интересно! 😉
Шаг 1: Установка необходимых библиотек
Для начала, как и раньше, нам нужно установить библиотеку Twilio, которая позволяет работать с WhatsApp API.
Открой терминал и выполни команду:
pip install twilio
pip install flask # Flask нам нужен для создания сервера, который будет слушать входящие сообщения
Кроме того, мы будем использовать Flask для того, чтобы принимать входящие сообщения от Twilio и отвечать на них.
Шаг 2: Регистрация и настройка Twilio
Ты уже знаешь, как зарегистрировать бота в Twilio Developer Console и получить Account SID и Auth Token. Также нужно создать номер, поддерживающий WhatsApp.
- Перейди в раздел Messaging в Twilio Console, создай новый номер для WhatsApp (формат: whatsapp:+1415XXXXXXX).
- Внеси в настройки свой Account SID, Auth Token и номер для отправки сообщений.
Шаг 3: Напишем код для бота
Теперь давай создадим Python-скрипт, который будет не только отправлять сообщения, но и отвечать на входящие запросы. Мы будем использовать Flask для создания веб-сервера, который будет получать данные о входящих сообщениях через Webhook.
Код бота:
from twilio.rest import Client
from flask import Flask, request, redirect
from twilio.twiml.messaging_response import MessagingResponse
import requests
# Вставь сюда свой SID и Auth Token из консоли Twilio
account_sid = 'YOUR_ACCOUNT_SID' # Здесь вставляем свой SID
auth_token = 'YOUR_AUTH_TOKEN' # Здесь вставляем свой Auth Token
# Создаем клиент Twilio с помощью нашего SID и Auth Token
client = Client(account_sid, auth_token)
# Создаем Flask приложение
app = Flask(__name__)
# Функция для отправки сообщения через WhatsApp
def send_message(to, body):
message = client.messages.create(
body=body, # Текст сообщения
from_='whatsapp:+1415XXXXXXX', # Номер, с которого отправляется сообщение (номер Twilio)
to=to # Номер получателя в формате whatsapp:+номер
)
print(f"Сообщение отправлено: {message.sid}") # Выводим SID сообщения для отслеживания
# Функция для отправки погоды через API
def get_weather():
api_key = 'YOUR_OPENWEATHER_API_KEY' # Ключ API для OpenWeather
city = 'Moscow' # Город для получения прогноза
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric'
response = requests.get(url).json()
if response.get('weather'):
weather = response['weather'][0]['description']
temperature = response['main']['temp']
return f'Погода в {city}: {weather}, температура: {temperature}°C'
return 'Не удалось получить данные о погоде.'
# Обрабатываем входящие сообщения от пользователей
@app.route('/sms', methods=['POST'])
def sms_reply():
"""Ответ на входящее сообщение"""
msg = request.form.get('Body') # Получаем текст входящего сообщения
from_number = request.form.get('From') # Получаем номер отправителя
# Создаем объект ответа
resp = MessagingResponse()
# Проверяем сообщение пользователя
if 'погода' in msg.lower(): # Если в сообщении есть слово "погода"
weather_info = get_weather() # Получаем информацию о погоде
resp.message(weather_info) # Отправляем ответ с прогнозом
else:
resp.message(f'Привет! Ты написал: {msg}. Напиши "погода", чтобы узнать текущую погоду.') # Ответ на обычное сообщение
return str(resp) # Возвращаем ответ Twilio
# Функция для отправки приветственного сообщения
def send_welcome_message(to):
send_message(to, 'Привет, я бот! Напиши "погода", чтобы узнать текущую погоду.')
# Функция для запуска бота
def whatsapp_bot():
print("Бот WhatsApp запущен...")
# Здесь можно добавить логику, чтобы бот периодически отправлял приветственное сообщение
# send_welcome_message('whatsapp:+1234567890') # Укажи свой номер
# Запускаем Flask приложение
if __name__ == "__main__":
whatsapp_bot()
app.run(debug=True, host='0.0.0.0', port=5000) # Flask сервер слушает входящие запросы на порту 5000
Пояснение к коду:
- Импорт библиотек:from twilio.rest import Client
from flask import Flask, request, redirect
from twilio.twiml.messaging_response import MessagingResponse
import requests
twilio.rest — библиотека для работы с Twilio API.
flask — микрофреймворк для создания веб-сервера.
twilio.twiml.messaging_response — класс для создания ответов на сообщения в Twilio.
requests — библиотека для работы с HTTP-запросами (для получения данных о погоде). - Конфигурация клиента Twilio:account_sid = 'YOUR_ACCOUNT_SID'
auth_token = 'YOUR_AUTH_TOKEN'
client = Client(account_sid, auth_token)
Здесь мы используем SID и Auth Token, чтобы аутентифицировать наш бот. - Функция для отправки сообщений:def send_message(to, body):
message = client.messages.create(
body=body,
from_='whatsapp:+1415XXXXXXX',
to=to
)
print(f"Сообщение отправлено: {message.sid}")
Эта функция отправляет сообщение на номер, который ты укажешь. - Функция для получения погоды:def get_weather():
api_key = 'YOUR_OPENWEATHER_API_KEY'
city = 'Moscow'
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric'
response = requests.get(url).json()
if response.get('weather'):
weather = response['weather'][0]['description']
temperature = response['main']['temp']
return f'Погода в {city}: {weather}, температура: {temperature}°C'
return 'Не удалось получить данные о погоде.'
Здесь мы используем API OpenWeather для получения прогноза погоды по городу. - Обработка входящих сообщений:@app.route('/sms', methods=['POST'])
def sms_reply():
msg = request.form.get('Body')
from_number = request.form.get('From')
resp = MessagingResponse()
if 'погода' in msg.lower():
weather_info = get_weather()
resp.message(weather_info)
else:
resp.message(f'Привет! Ты написал: {msg}. Напиши "погода", чтобы узнать текущую погоду.')
return str(resp)
Это основной обработчик входящих сообщений. Если сообщение содержит слово "погода", бот отвечает с прогнозом, иначе — просто повторяет текст. - Запуск Flask приложения:app.run(debug=True, host='0.0.0.0', port=5000)
Здесь мы запускаем сервер Flask, который будет слушать входящие запросы от Twilio.
Шаг 4: Настройка Webhook в Twilio
Теперь, когда у нас есть сервер, который слушает входящие сообщения, нужно настроить Webhook в Twilio. Для этого:
- В консоли Twilio, в разделе Messaging для твоего WhatsApp номера, найди поле "A MESSAGE COMES IN".
- Укажи URL, по которому будет доступен твой сервер Flask. Например, если ты запускаешь сервер локально, тебе нужно использовать ngrok, чтобы создать публичный URL для локального сервера.
- В поле "A MESSAGE COMES IN" укажи URL, например: http://your-ngrok-url/sms.
Шаг 5: Запуск бота
Теперь ты готов запустить бота! Просто запусти свой скрипт:
python whatsapp_bot.py
После этого, когда кто-то напишет боту, он будет отвечать, например, предоставлять информацию о текущей погоде, если пользователь попросит об этом.
Заключение
Поздравляю, теперь у тебя есть бот для WhatsApp, который может отвечать на входящие сообщения и взаимодействовать с внешними API! 🎉 Ты можешь настроить его под свои нужды, добавляя новые команды и расширяя функционал.
Не забывай, что возможности Twilio и Python безграничны, и ты можешь создавать даже более сложных и умных ботов. Удачи в программировании! 🚀