Внешний API

Своя CRM, 1С или сайт: подключение через внешний API Charon

Charon держит подключения к WhatsApp, Telegram, WeChat, Matrix и Max и открывает их вашей системе по HTTP. Входящие приходят подписанным вебхуком на ваш адрес, ответы уходят вызовом REST API. Что делать с сообщением дальше, решаете вы.

Автор: Команда документации Charon Время чтения: 7 мин

Как идут сообщения

Два направления, и в каждом Charon отвечает за мессенджер, а ваша система — за то, что происходит в CRM.

Клиент пишет вам

  1. Мессенджер

    Клиент отправляет сообщение на подключённый номер или аккаунт.

  2. Charon

    Принимает сообщение, сохраняет в историю и подписывает событие.

  3. Ваш обработчик

    Получает POST на свой адрес, проверяет подпись, отвечает 2xx.

  4. Ваша CRM

    Заводит контакт или сделку по своим правилам и показывает переписку менеджеру.

Вы отвечаете клиенту

  1. Ваша CRM

    Менеджер пишет ответ в привычном для него окне.

  2. Вызов API

    Ваша система вызывает POST /api/v1/messages с ключом и текстом.

  3. Charon

    Отправляет сообщение через нужное подключение и записывает его в историю.

  4. Мессенджер

    Клиент получает ответ в том же диалоге, где написал.

Вебхук — не единственный путь: историю и статусы можно читать запросами к API по расписанию. Но опрос коротким интервалом даёт задержку и лишние запросы, поэтому для входящих лучше поднять обработчик.

Что делает Charon, а что ваша сторона

Граница проходит по CRM: до неё работает Charon, внутри неё — ваш разработчик.

Charon берёт на себя

  • Подключение и авторизацию аккаунтов WhatsApp, Telegram, WeChat, Matrix и Max.
  • Переподключение и статусы каналов — их видно и в панели, и в API.
  • Приём входящих, отправку исходящих и хранение истории переписки.
  • Медиафайлы: приём, хранение и выдачу по ссылке через API.
  • Доставку событий на ваш адрес с подписью и повторами при сбое.
  • Ключи, права и журнал доставок вебхуков.

Пишет ваш разработчик

  • Обработчик по адресу HTTPS, который принимает вебхуки и отвечает 2xx.
  • Проверку подписи HMAC-SHA256 по сырому телу запроса.
  • Правила поиска клиента в вашей базе и дедупликацию контактов.
  • Создание сущностей: сделка, контакт, задача, обращение — по вашим воронкам.
  • Показ переписки менеджеру и отправку ответов вызовом API.
  • Разбор ошибок 401, 403, 409, 429 и 5xx.

С Битрикс24 этой работы нет: там сообщения попадают в Открытые линии без программирования. Внешний API нужен там, где готовой интеграции нет — своя CRM, 1С, сайт, система отчётности. Для amoCRM тот же путь описан на отдельной странице.

Что доступно в API

Методы, из которых обычно собирается интеграция. Полное описание отдаёт сама установка — про это ниже.

Задача Метод
Проверить, что ключ работает GET /api/v1
Получить подключения и их статусы GET /api/v1/connections
Отправить сообщение в мессенджер POST /api/v1/messages
Прочитать историю переписки GET /api/v1/messages, GET /api/v1/connections/{id}/messages
Получать входящие без опроса POST /api/v1/webhooks
Посмотреть, дошло ли событие GET /api/v1/webhooks/{id}/deliveries
Забрать отчёты в свою систему GET /api/v1/analytics/…
Выдать отдельный ключ интеграции POST /api/v1/api-keys

Отправка сообщения выглядит так — один запрос с ключом в заголовке:

curl -X POST https://charon.example.com/api/v1/messages \ -H "X-API-Key: ваш_ключ" \ -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \ -H "Content-Type: application/json" \ -d '{"connectionId": "…", "conversationId": "79001234567@c.us", "text": "Здравствуйте! Пишу по вашей заявке."}'

Idempotency-Key защищает от двойной отправки: если запрос повторится из-за обрыва связи, Charon вернёт результат первого вызова, а клиент не получит сообщение дважды. Ставьте его на все запросы, которые нельзя выполнить второй раз.

События и подпись

Какие события приходят
message.received — пришло входящее, message.sent — ушло исходящее, connection.status — подключение сменило статус.
В каком виде
Формат universal — для новой интеграции. Формат bitrix_open_lines нужен только там, где код уже ждёт структуру Открытых линий.
Подпись
Тело подписывается HMAC-SHA256 на секрете адреса. Подпись приходит в X-Signature, метка времени — в X-Signature-Timestamp; подписывается строка «метка времени, точка, тело». Проверяйте по сырому телу, иначе подпись не сойдётся.
Если обработчик не ответил
Charon ждёт ответа около десяти секунд и повторяет доставку — до пяти попыток с нарастающей паузой.
Журнал доставок
Что дошло, а что нет, видно в GET /api/v1/webhooks/{id}/deliveries — по нему разбираются пропавшие сообщения.
Отключение адреса
После пятидесяти неудач подряд адрес отключается, и включить его нужно вручную: сломанный обработчик не копит бесконечную очередь.

Ключи и права

У ключа ровно те права, которые вы ему дали. Заводите отдельный ключ на каждую внешнюю систему — тогда его можно отозвать, не трогая остальные.

Право Что открывает
messages:read Читать сообщения, чаты и контакты
messages:send Отправлять сообщения
connections:manage Читать и настраивать подключения
media:read Скачивать вложения
analytics:read Читать отчёты аналитики
webhooks:manage Заводить адреса вебхуков и смотреть журнал доставок
api_keys:manage Управлять ключами. Давайте только доверенной админ-интеграции

Ключ создаётся в панели Charon и показывается один раз — сохраните его сразу в хранилище секретов. Для административных сценариев, где ваша система входит под учётной записью Charon, подойдёт вход по токену: Authorization: Bearer.

С чего начать разработчику

Порядок, при котором связка проверяется по частям, а не целиком в последний день.

  1. 1

    Создайте ключ с минимальными правами

    В панели Charon, в разделе API-ключей. Для типовой связки хватает messages:read, messages:send и webhooks:manage. Проверьте ключ запросом GET /api/v1 — так сразу видно, что домен, права и заголовок в порядке.

  2. 2

    Отправьте одно сообщение вручную

    Возьмите идентификатор подключения из GET /api/v1/connections и отправьте себе тестовое сообщение. Это отделяет проблемы доступа от проблем вашего кода: если ручной запрос прошёл, дальше дело в интеграции.

  3. 3

    Поднимите обработчик и проверьте подпись

    Адрес должен быть доступен по HTTPS снаружи и отвечать 2xx после того, как событие принято. Проверку подписи считайте по сырому телу запроса. Пока подпись не сходится, не переходите к логике CRM.

  4. 4

    Свяжите с сущностями своей системы

    Теперь пишется то, ради чего всё затевалось: поиск клиента, создание сделки, показ переписки менеджеру. Ошибки 401, 403, 409, 429 и 5xx обработайте по отдельности — они означают разное.

Описание методов отдаёт сама установка Charon: /api/openapi.yaml и /api/openapi.json на вашем домене. Это спецификация той версии, которая у вас стоит, поэтому она не расходится с работающими методами.

Частые вопросы про внешний API

Что именно даёт внешний API Charon?

Charon держит подключения к WhatsApp, Telegram, WeChat, Matrix и Max и открывает их вашей системе по HTTP. Входящие сообщения он отправляет подписанным вебхуком на ваш адрес, а ответы вы отправляете вызовом REST API. Тем же API читается история переписки, список подключений и их статусы, скачиваются вложения и забираются отчёты. Что делать с сообщением дальше — создавать сделку, контакт или задачу — решает ваша система.

Что нужно написать на своей стороне?

Нужен обработчик по адресу HTTPS, который принимает вебхуки Charon, проверяет подпись HMAC-SHA256 по сырому телу запроса и отвечает кодом 2xx. Дальше он вызывает методы вашей CRM, а обратные сообщения отправляет вызовом POST /api/v1/messages. Объём работ зависит от того, какие сущности и сценарии вы используете: связку с воронками, дедупликацию контактов и правила автосоздания сделок пишет ваш разработчик.

Как Charon подписывает вебхуки?

Charon подписывает тело вебхука HMAC-SHA256 на секрете, который выдаётся при регистрации адреса. Подпись приходит в заголовке X-Signature, метка времени — в X-Signature-Timestamp; подписывается строка из метки времени, точки и тела запроса. Проверять подпись нужно по сырому телу, а не по повторно собранному JSON, иначе она не сойдётся.

Что будет, если наш обработчик недоступен?

Charon повторит доставку — до пяти попыток с нарастающей паузой. Результат каждой попытки виден в журнале доставок: GET /api/v1/webhooks/{id}/deliveries. После пятидесяти неудач подряд адрес отключается, и включить его снова нужно вручную — так сломанный обработчик не копит бесконечную очередь.

Где взять описание методов?

Описание отдаёт сама установка Charon: /api/openapi.yaml и /api/openapi.json на вашем домене. Это спецификация OpenAPI той версии, которая у вас стоит, поэтому она не расходится с работающими методами. Ключи создаются в панели в разделе API-ключей; полный ключ показывается один раз при создании.

Входит ли внешний API в тариф?

Полный доступ к внешнему API входит в платный тариф Charon. Если API и CRM вам не нужны и достаточно встроенного мессенджера, в калькуляторе на главной странице есть режим «Без CRM и API» — он вдвое дешевле. Внешний API работает одинаково и в облаке, и при установке на свой сервер.

Разберём вашу связку до начала работ

Расскажите, какая у вас система, какие сущности заводятся по обращению и сколько каналов нужно. Подскажем, какие методы и события закроют сценарий, и что придётся написать на вашей стороне.

Оставить заявку