Meta Tech Provider

Отправка и получение WhatsApp из Python

Получение выполняет маршрут вашего веб-фреймворка: он отвечает на GET для проверки Meta и принимает POST-запросы. Отправка выполняется HTTPS-запросом к Cloud API с phone number id и токеном номера. Наш SDK не нужен, устанавливать тоже ничего не нужно.

2 handlers

GET для проверки Meta и POST для событий. Это сторона получения.

24 hours

Окно после сообщения клиента, когда можно отправлять свободный текст.

131047

Ошибка при отправке свободного текста вне этого окна.

Как получать сообщения в Python?

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

Обработчик GET отвечает на проверку Meta. Он считывает hub.mode, hub.verify_token и hub.challenge из строки запроса, сверяет токен со своим и возвращает challenge как необработанное тело ответа. Возврат JSON здесь является самой частой ошибкой и завершается без понятного сообщения.

Обработчик POST получает события. Быстро верните 200, а работу выполните после этого, потому что Meta считает медленный ответ ошибкой и повторяет запрос. Так одно сообщение может быть обработано дважды. Поставьте его в очередь или передайте фоновой задаче вместо обработки внутри запроса.

Сообщения приходят с идентификатором wamid. Дедупликацию по нему стоит добавить сразу, поскольку повторные запросы являются нормой.

Как отправлять сообщения?

Отправьте один POST на эндпоинт сообщений Cloud API для phone number id, используя bearer-токен.

Оба значения берутся из подключения: панель управления показывает их, а get_api_credentials возвращает их, если вы хотите получать данные через помощника. В этом запросе нет ничего специфичного для нас, поэтому подойдёт любая HTTP-библиотека, а сам запрос выглядит как в документации Meta.

При выборе тела важен срок. В течение 24 часов после последнего сообщения клиента отправляйте объект `text`. После этого отправляйте объект `template` с названием одобренного шаблона и его языком. Клиент, знающий только первую структуру, отлично работает при тестировании, но ломается на первом ночном сообщении и возвращает ошибку 131047.

Что ещё нужно обработчику для работы в продакшене?

Три вещи, которые легко пропустить и дорого добавлять позже.

Делайте дедупликацию по идентификатору сообщения, потому что Meta повторяет запросы. Проверяйте подпись запроса, если обработчик открыт в интернете: иначе отправить запрос на ваш URL сможет любой, кто его узнает. И учитывайте, сколько времени прошло с последнего сообщения контакта, чтобы путь отправки сам выбирал `text` или `template`.

Для этого не нужны фреймворк или библиотека. Нужны набор, проверка и сравнение. Если добавить их до первого клиента, интеграция будет работать спокойно, а не требовать постоянного внимания.

Распространённые ошибки

  • Возврат JSON вместо необработанного значения challenge в GET для проверки.
  • Обработка до возврата 200. Meta повторяет медленные запросы, и сообщение обрабатывается дважды.
  • Отправка свободного текста без проверки окна. Возвращается 131047, и кажется, что ничего не произошло.
Настройка с EasyCoexistence

Подключите номер на easycoexistence.com, укажите адрес вебхука для своего маршрута и возьмите phone number id и токен из панели управления. От US$ 9 за номер в месяц, до US$ 2 при большом объёме, первые 7 дней бесплатно.

Часто задаваемые вопросы

Есть ли SDK для Python?

Не от нас, и он вам не нужен. API принадлежит Meta, документацию предоставляет Meta, а доступ возможен через любую HTTP-библиотеку.

Какой фреймворк выбрать?

Любой. Нужен маршрут, который отвечает на GET и принимает POST, а это умеет каждый веб-фреймворк Python.

Как не обработать сообщение дважды?

Делайте дедупликацию по идентификатору wamid в полезной нагрузке. Meta повторяет запросы по задумке, поэтому это ожидаемая ситуация, а не редкий случай.

Команда сможет продолжать пользоваться телефоном?

Да. Coexistence сохраняет работу WhatsApp Business на том же номере, а ваш обработчик получает отправленные командой сообщения как события-эхо.

Читайте дальше

Готовы начать?

Настройте WhatsApp Coexistence за несколько минут, а не месяцев. Приложение продолжит работать на телефоне.

Начать бесплатный пробный период

Проверено по состоянию на

Отправка WhatsApp из Python