Найти в Дзене
automatization24

Входящий вебхук Битрикс24 на python

Оглавление

Входящие вебхуки инициируются из вне, с вашего ПК, виртуальной машины, хостинга... Поступают на портал Битрикс24 в виде http-запроса с некоторыми параметрами и возвращают определенный ответ. Как их создавать и отличия от исходящих описал ранее. Некоторая сложность возникает с тем, что сам продукт написан на php преимущественно и дока ориентирована на этот язык. Поэтому стоит немного углубиться в суть взаимодействия между порталом и вашим обработчиком, чтобы относительно корректно написать универсальный метод на python.

1. Методы работы в доке на php.

2. Универсальная функция для входящих вебхуков, написанная на питоне.

3. Примеры работы функции с разными методами Б24.

1. Методы работы в доке на php

Курс по ресту от вендора тут>. Для php есть хорошее описание, как использовать примеры и код класса Crest. Можно код класса скачать к себе, в своих примерах, обращаясь к нему уже начать его применять на php. Но мы то этот язык не очень любим, будем пробовать все сразу на питоне.

-3

Выглядит все относительно просто, находишь слева нужную тебе сущность, например, CRM-Контакты. И смотришь, какие методы для работы с контактами есть. Скажем, создать контакт - crm.contact.add.

-4

Задача сводится к тому, чтобы сформировать корректный 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})

-6

Вернем список задач, отвечающих условию.

Это метод tasks.task.list. Только вот массив параметров у него будет уже чуть сложнее, например:

parametr = {"filter": {"?TITLE": 'runpython'},#В фильтре указываем, содержит runpython в названии
"select": ['ID', 'TITLE', 'DESCRIPTION'],#какие поля выбираем
"order": {"ID": 'asc'}} #сортировка

Как работает: