Входящие вебхуки инициируются из вне, с вашего ПК, виртуальной машины, хостинга... Поступают на портал Битрикс24 в виде http-запроса с некоторыми параметрами и возвращают определенный ответ. Как их создавать и отличия от исходящих описал ранее. Некоторая сложность возникает с тем, что сам продукт написан на php преимущественно и дока ориентирована на этот язык. Поэтому стоит немного углубиться в суть взаимодействия между порталом и вашим обработчиком, чтобы относительно корректно написать универсальный метод на python.
1. Методы работы в доке на php.
2. Универсальная функция для входящих вебхуков, написанная на питоне.
3. Примеры работы функции с разными методами Б24.
1. Методы работы в доке на php
Курс по ресту от вендора тут>. Для php есть хорошее описание, как использовать примеры и код класса Crest. Можно код класса скачать к себе, в своих примерах, обращаясь к нему уже начать его применять на php. Но мы то этот язык не очень любим, будем пробовать все сразу на питоне.
Выглядит все относительно просто, находишь слева нужную тебе сущность, например, CRM-Контакты. И смотришь, какие методы для работы с контактами есть. Скажем, создать контакт - crm.contact.add.
Задача сводится к тому, чтобы сформировать корректный url-запроса с вебхуком, указать в нем нужный метод, POSTом передать нужные параметры, чтобы создался контакт или случилось иное)
2. Универсальная функция для входящих вебхуков, написанная на питоне
Функция будет принимать на входе:
- Адрес вебхука;
- Метод, который нам нужен;
- Параметры метода.
Адрес хука получаем в виде
https://<url_your_bitrix24>/rest/<id_user>/<secret_token>/
как описано в предыдущей статье. Там же пробовали работать и с генератором запросов. Из него полный адрес хука выглядит:
https://<url_your_bitrix24>/rest/<id_user>/<secret_token>/<method>.json
На питоне эту строку мы можем собрать простой конструкцией:
method="crm.contact.add"
url = url_webhook + method + '.json?'
А дальше собираем Словарь dict с нужными параметрами для метода. Для добавления контактов в словаре нужно отдать 2 ключа:
- fields - в нем идентификатор поля - значение;
- params - не помню уже, что он значит, но чаще ставлю { "REGISTER_SONET_EVENT": "N" }.
Пример такого словаря:
parametr = {"fields": {
"NAME": "Семён",
"SECOND_NAME": "Васильевич",
"LAST_NAME": "Питонов",
"OPENED": "Y",
"ASSIGNED_BY_ID": 1, # id ответственного
"PHONE": [{"VALUE": "555888", "VALUE_TYPE": "WORK"}]},
"params": {"REGISTER_SONET_EVENT": "Y"}}
А теперь остается только отправить этот запрос в виде:
response = requests.post(url, json=parameters)
Функция в самом упрощенном виде может иметь вид:
def b24rest_request(url_webhook: str, method: str, parametr: dict) -> dict:
"""Рест-запрос в Битрикс24"""
url = url_webhook + method + '.json?'
response = requests.post(url, json=parametr) # timeout=60
return response.json()
Что в нее стоит добавить, как минимум:
- обработку исключений try-except;
- логирование, что посылаем, что получаем.
Тем не менее, это вполне уже рабочий вариант на попробовать:
3. Примеры работы функции с разными методами Б24
Для других методов в нашей относительно универсальной функции менять уже ничего не нужно. На вход только подаем иной метод, в словарь parametr параметры нового Битрикс24-метода, запускаем на исполнение, наслаждаемся результатом.
Для получения данных наиболее распространены методы get для одной записи и get.list для списка (50 записей возвращается).
crm.deal.get на python в нашем случае будет выглядеть таким образом:
responce = b24rest_request(url_webhook, "crm.deal.get", {"id": 22294})
Вернем список задач, отвечающих условию.
Это метод tasks.task.list. Только вот массив параметров у него будет уже чуть сложнее, например:
parametr = {"filter": {"?TITLE": 'runpython'},#В фильтре указываем, содержит runpython в названии
"select": ['ID', 'TITLE', 'DESCRIPTION'],#какие поля выбираем
"order": {"ID": 'asc'}} #сортировка
Как работает: