Своя CRM: вебхуки и открытое API

1. Вебхуки: события из сервиса в вашу CRM

⚙ Настройки → CRM → «Своя CRM» → укажите адрес. Сервис создаст секрет подписи и будет отправлять POST-запросы с JSON. Подпись — заголовок X-Signature = hex(HMAC-SHA256(секрет, тело запроса)), тип события — заголовок X-Event.

contact.lookup  {"phone":"79001234567"}                       → ответьте {"id":"…","name":"…","url":"…"} или {}
contact.create  {"name":"Мария","phone":"7900…","channel":"whatsapp"} → ответьте {"id":"…"}
deal.create     {"contactId":"…","title":"…","channel":"WhatsApp"} → ответьте {"id":"…","url":"…"} или {}
messages        {"contactId":"…","dealId":"…","messages":[{"direction":"in","text":"…","author":"Мария","channel":"WhatsApp","at":"2026-11-01T10:00:00Z","url":"https://…/#15"}]}
ping            {}  (проверка при подключении)

Отвечайте кодом 200 в течение 15 секунд.

2. Открытое API: из CRM в сервис

Ключ создаётся в ⚙ Настройки → CRM → «Открытое API». Передавайте его в заголовке Authorization: Bearer <ключ>. До 600 запросов в минуту.

GET  /api/v1/conversations?status=open&channel=whatsapp&q=поиск&limit=100   — диалоги
GET  /api/v1/conversations/{id}/messages?limit=50&before={id сообщения}       — история
POST /api/v1/conversations/{id}/messages   {"text":"…","author":"Анна"}     — отправить ответ
POST /api/v1/conversations   {"channel":"whatsapp","phone":"79001234567","text":"…"} — написать первым
GET  /api/v1/contacts/{id}                                                   — клиент

Пример:

curl -H "Authorization: Bearer hub_…" https://адрес-сервиса/api/v1/conversations

Если подписка компании закончилась, API отвечает кодом 402.