REST API и вебхуки Битрикс24: как искать ошибки интеграции
Интеграции с Битрикс24 часто делают через REST API и вебхуки: сайт создаёт лиды, сервис обновляет сделки, склад отправляет остатки, телефония добавляет дела. Когда такая интеграция ломается, ошибка может быть не в одном месте. Нужно проверить портал, вебхук, права, метод API, структуру полей, лимиты и обработку ответа.
Главное правило: интеграция не должна считать, что запрос успешен только потому, что curl не упал. Нужно читать HTTP-код и JSON-ответ Битрикс24.
Проверить вебхук и портал
Вебхук привязан к конкретному порталу и конкретному пользователю. Если пользователь уволен, отключён или потерял права, интеграция может перестать работать.
Нужно проверить:
- домен портала;
- активен ли пользователь вебхука;
- есть ли у вебхука права на CRM;
- не был ли вебхук пересоздан;
- не используется ли тестовый портал вместо рабочего.
URL вебхука нельзя публиковать в открытом коде или логах. По нему можно выполнять действия от имени пользователя.
Проверить простой метод
Для диагностики удобно начать с простого метода, который не меняет данные. Например, получить информацию о текущем пользователе или список полей CRM.
curl -X POST \
https://example.bitrix24.ru/rest/1/webhook/crm.lead.fields.json
Если простой метод не работает, не нужно сразу разбирать создание сделки. Сначала права, вебхук, домен, SSL и доступность портала.
Читать JSON-ответ
Битрикс24 может вернуть HTTP 200, но внутри JSON будет error. Код интеграции должен это учитывать.
{
"error": "ERROR_METHOD_NOT_FOUND",
"error_description": "Method not found"
}
Типовые ошибки:
- метод написан неверно;
- нет прав на метод;
- поле CRM указано неправильно;
- значение списка не существует;
- превышен лимит запросов;
- портал недоступен.
Поля CRM
При создании лида или сделки важно отправлять реальные коды полей. Пользовательские поля имеют вид UF_CRM_*. Их лучше получать через методы fields, а не переписывать вручную из памяти.
crm.deal.fields
crm.lead.fields
crm.contact.fields
Если поле типа список, нужно отправлять допустимое значение. Если поле множественное, формат данных должен соответствовать API.
Телефоны и email
Для контактов и лидов телефон и email часто передаются как множественные поля. Формат должен быть корректным.
{
"fields": {
"TITLE": "Заявка с сайта",
"PHONE": [
{
"VALUE": "+79990000000",
"VALUE_TYPE": "WORK"
}
],
"EMAIL": [
{
"VALUE": "client@example.ru",
"VALUE_TYPE": "WORK"
}
]
}
}
Если отправить телефон простой строкой туда, где ожидается массив, API может вернуть ошибку или сохранить данные не так, как нужно.
Лимиты и повторные запросы
У REST API есть ограничения по частоте запросов. Если интеграция отправляет много запросов подряд, часть может отклоняться. Нужны очереди, паузы и обработка retry.
if (isset($response['error']) && $response['error'] === 'QUERY_LIMIT_EXCEEDED') {
sleep(2);
// повторить позже
}
Повторные запросы лучше делать аккуратно. Для создания сущностей нужно учитывать риск дублей: если первый запрос создал сделку, но ответ потерялся, повтор может создать вторую.
Логирование
В лог нужно писать метод, ID локальной сущности, HTTP-код, краткую ошибку и ID созданной сущности. Не нужно писать вебхук целиком и персональные данные без необходимости.
[
'method' => 'crm.lead.add',
'local_id' => 123,
'http_code' => 200,
'bitrix_id' => 456,
'error' => null,
]
Идемпотентность
Для важных интеграций лучше хранить связь между локальной сущностью и ID в Битрикс24. Тогда повторная отправка обновит существующую карточку, а не создаст дубль.
local_order_id = 123
bitrix_deal_id = 456
Это особенно важно для заказов, оплат, доставок и заявок с сайта.
Чек-лист
- Проверить правильный домен портала.
- Проверить пользователя и права вебхука.
- Проверить простой REST-метод.
- Читать JSON-ответ, а не только HTTP-код.
- Получить реальные поля через *.fields.
- Проверить формат телефонов, email и списков.
- Обработать лимиты и временные ошибки.
- Логировать без публикации вебхука.
- Хранить связь локальной сущности и ID Битрикс24.
Интеграция с Битрикс24 должна быть наблюдаемой. Если в логах видно, какой метод вызван, что отправлено в общих чертах и какой ответ вернулся, большинство ошибок находится без долгих догадок.
Комментарии (0)
Пока нет комментариев. Будьте первым!