Skip to content

Latest commit

 

History

History
225 lines (152 loc) · 10.7 KB

File metadata and controls

225 lines (152 loc) · 10.7 KB

whatsapp-api-webhook-server-python-v2

Поддержка

Support Support Support

Руководства и новости

Guides News News

whatsapp-api-webhook-server-python-v2 - библиотека для получения и обработки вебхуков из мессенджера WhatsApp через API сервиса green-api.com, в основе которой лежит FastAPI сервер.

Чтобы воспользоваться библиотекой, нужно получить регистрационный токен и ID аккаунта в личном кабинете. Для разработки можно воспользоваться бесплатным аккаунтом с тарифом "Разработчик".

API

Документация к REST API находится по ссылке. Библиотека является оберткой к REST API, поэтому документация по ссылке выше применима и к самой библиотеке.

Авторизация

Чтобы отправить сообщение или выполнить другие методы Green API, аккаунт WhatsApp в приложении телефона должен быть в авторизованном состоянии. Для авторизации аккаунта перейдите в личный кабинет и сканируйте QR-код с использованием приложения WhatsApp.

Примеры подготовки среды

Пример подготовки среды для Ubuntu Server

Обновление системы

Обновим систему:

sudo apt update
sudo apt upgrade -y

Брандмауэр

Настроим брандмауэр:

Разрешим соединение по SSH:

sudo ufw allow ssh

Базовые правила:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Разрешаем соединения по HTTP и HTTPS:

sudo ufw allow http
sudo ufw allow https

Активируем брандмауэр:

sudo ufw enable

Установка

Необходимо установить систему управления пакетами:

sudo apt install python3-pip

Установка библиотеки:

python3 -m pip install whatsapp-api-webhook-server-python-v2

В качестве примера вы можете скачать и запустить наш скрипт. Скрипт отправляет в консоль все входящие уведомления.

wget https://raw.githubusercontent.com/green-api/whatsapp-api-webhook-server-python-v2/master/examples/receive_all_with_counter.py
python3 -m receive_all_with_counter.py

Пример подготовки среды для Windows Server

Установка Python

На сервере должен быть установлен Python. Инструкция по установке Python.

Как настроить конфигурацию веб-сервера

Для использования IIS (Internet Information Services) в качестве веб-сервера требуется настроить файл конфигурации web.config, чтобы служба IIS могла правильно выполнять код Python. Этот файл располагается в папке публикации вашего веб-сервера.

После установки интерпретатора следует указать обработчик HttpPlatform в файле web.config. Этот обработчик будет передавать подключения в автономный процесс Python.

Пример конфигурационного файла:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
        </handlers>
        <httpPlatform arguments="<Path-to-server-file>\receive_all_with_counter.py.py"
                      processesPerApplication="16"
                      processPath="<Path-to-python>\python.exe"
                      startupTimeLimit="60"
                      stdoutLogEnabled="true"
                      stdoutLogFile="<Path-to-log-file>\python.log">
            <environmentVariables>
                <environmentVariable name="SOME_VARIABLE" value="%SOME_VAR%"/>
            </environmentVariables>
        </httpPlatform>
    </system.webServer>
</configuration>
  • <Path-to-python> - путь к исполняемому файлу интерпретатора Python;
  • <Path-to-server-file> - путь к исполняемому файлу сервера (например, receive_all_with_counter.py из примера);
  • <Path-to-log-file> - путь к файлу логов.

Также потребуется открыть соответствующий порт во внешнюю сеть, установив настройки брандмауэра (дополнительные параметры -> Правила для входящих подключений -> Создать правило -> Тип правила = Порт, Протоколы и порт -> TCP, указать порт, Действие -> Разрешить соединение).

Запуск примера сервера с помощью Docker

На машине должен быть установлен Docker.

Чтобы получить образ из Docker Hub, нужно написать команду:

sudo docker pull greenapi/whatsapp-api-webhook-server-python-v2

Запустим образ в контейнере с указанием порта и отображением консоли:

sudo docker run -it -e PORT=8000 -p 80:8000 greenapi/whatsapp-api-webhook-server-python-v2

В данном случае webhook-сервер запускается на 8000 порту внутри контейнера и проксируется на 80 порт машины, на которой запускается контейнер

В личном кабинете необходимо необходимо указать IP (или домен) с этим (80) портом.

После старта контейнера в консоли будут доступны данные входящих вебхуков

Также можно запустить пример с помощью docker compose (из корневой директории репозитория):

docker compose up --build

Запуск сервера

Для использования в ваших решениях, импортируйте GreenAPIWebhookServer класс и иницализируйте объект сервера:

from whatsapp_api_webhook_server_python_v2 import GreenAPIWebhookServer

def event_handler(webhook_type: str, webhook_data: dict):
    # Пример функции, в которой необходимо
    # разместить вашу логику обработки
    ...

handler = GreenAPIWebhookServer(
    event_handler=event_handler,    # Функция обработки вебхуков (см. examples)
    host="0.0.0.0",                 # Ваш хост
    port=8080,                      # Ваш порт
    webhook_auth_header=None,       # Ожидаемый заголовок авторизации (см. личный кабинет)
)

if __name__ == "__main__":
    handler.start()

Параметр event_handler это ваша функция, которая должна обрабатывать входящие вебхуки.

Аргументы, которые должны быть реализованы в функции:

Аргумент Описание
webhook_type: str Тип входящего вебхука
webhook_data: dict Данные вебхука

Пример: receive_all_with_counter.py.

Также, если есть необходимость реализовать обарботку входящих данных самостоятельно, вы можете использовать Pydantic v2 модели, которые находятся в файле webhook_dto.py

Как перенаправить входящие уведомления на веб-сервер

Чтобы перенаправить входящие уведомления, нужно в личном кабинете установить адрес отправки уведомлений (URL).

Документация по методам сервиса

Документация по методам сервиса

Лицензия

Лицензировано на условиях Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0) . LICENSE.