Для разработчиков

API и вебхуки WidgetChat

Переписка с посетителями сайта доступна сторонней программе: своей CRM, связке в конструкторе интеграций или скрипту на сервере. Читать обращения, отвечать и получать события — по ключу, который выдаётся в кабинете.

Что можно сделать

  • Прочитать обращения — Список разговоров сайта с фильтром по состоянию и времени, карточка разговора и вся переписка постранично.
  • Ответить посетителю — Ответ появляется в окне чата на сайте так же, как ответ из Telegram, и попадает в общую историю.
  • Закрыть обращение — Разговор помечается закрытым; новое сообщение посетителя заведёт следующий.
  • Забрать вложение — Файлы посетителя скачиваются по ключу, а в событиях приходят временной подписанной ссылкой — её открывает чужой сервер, у которого нашего ключа нет.
  • Получать события — Новое обращение, новое сообщение, закрытие разговора и сведения о посетителе уходят запросом на ваш адрес.

Ключ доступа

Ключ выдаётся в кабинете на конкретный сайт: раздел «API и вебхуки» в карточке подключения. Значение показывается один раз — у нас хранится только его отпечаток, восстановить ключ нельзя, потерянный отзывается и выдаётся заново.

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

Ключ серверный. В код страницы сайта его класть нельзя: оттуда его прочитает любой посетитель и получит доступ ко всей переписке.

curl https://api.widgetchat.ru/api/v1/conversations \
  -H "Authorization: Bearer wck_ваш_ключ"

Ответ посетителю

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

curl -X POST https://api.widgetchat.ru/api/v1/conversations/<id>/messages \
  -H "Authorization: Bearer wck_ваш_ключ" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: reply-4417" \
  -d '{"content": "Заказ уже в пути, доставим завтра до 14:00"}'

События на ваш адрес

Адрес и набор событий задаются в кабинете там же, где ключи. Имена событий: conversation.started, message.created, conversation.closed, visitor.identified. Событие message.created приходит на сообщения в обе стороны, поэтому у сообщения есть поле origin — по нему видно, что ответ написан вашей же программой, и его не нужно отправлять второй раз.

Ответ 2xx означает «принято». На 4xx повтора не будет: получатель не изменит мнение. Всё остальное — обрыв связи, 500, таймаут — повторяется трижды с растущей паузой, после чего попытки видны в журнале доставок в кабинете.

POST /ваш-обработчик HTTP/1.1
Content-Type: application/json
X-WidgetChat-Event: message.created
X-WidgetChat-Delivery: message.created:8f1c…
X-WidgetChat-Attempt: 1
X-WidgetChat-Timestamp: 1755878400
X-WidgetChat-Signature: sha256=6b2f…

{"id":"message.created:8f1c…","event":"message.created","createdAt":"2026-08-22T12:00:00Z",
 "workspaceKey":"example-ru","data":{"conversation":{…},"message":{…}}}

Проверка подписи

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

Проверяйте три вещи: подпись совпала, метка времени отличается от ваших часов не больше чем на пять минут, а номер доставки из заголовка X-WidgetChat-Delivery ещё не встречался. Повторная попытка приходит с тем же номером — по нему событие, уже принятое в работу, отбрасывается.

# Go
mac := hmac.New(sha256.New, []byte(secret))
mac.Write([]byte(timestampHeader + "." + string(body)))
expected := "sha256=" + hex.EncodeToString(mac.Sum(nil))

Секрет подписи показывается один раз при создании адреса. Забыли — смените его кнопкой в кабинете и пропишите новый в обработчике.

Пределы и правила

  • Только HTTPS — И для запросов к API, и для адреса, на который приходят события.
  • 300 запросов в минуту на ключ — Сверх предела ответ 429 с заголовком Retry-After.
  • Один конверт ответа — Удачный ответ содержит поле data, отказ — поле error с кодом и пояснением.
  • Изоляция сайтов — Ключ открывает переписку только того сайта, на который выдан. Разговор соседнего подключения по нему не найдётся.

Частые вопросы

Где взять ключ доступа?

В кабинете, в карточке подключённого сайта — кнопка «API и вебхуки». Ключ показывается один раз при создании: у нас хранится только его отпечаток.

Чем вебхук отличается от опроса API?

Вебхук приходит сам в момент события, опрос требует спрашивать нас по расписанию. Для CRM и уведомлений подходит вебхук, для выгрузки истории — обычные запросы к API.

Что будет, если мой сервер не ответил?

Событие повторится трижды с растущей паузой. Если и это не помогло, попытки останутся в журнале доставок в кабинете — там видно код ответа и текст ошибки.

Можно подключить WidgetChat к своей CRM?

Да, через это API: обращения читаются запросами, ответы отправляются запросом, а события приходят на ваш адрес. Полный список методов, полей и кодов отказов — в разделе документации /docs/.

Виден ли по API чат из Telegram?

API работает с обращениями, пришедшими из виджета на сайте. Ответы операторов из Telegram в этой переписке видны — они часть той же истории.

Читайте также

Онлайн-чат для сайта Чат для сайта: посетитель пишет в окно, обращение приходит вам в Telegram отдельной темой, ответ возвращается в чат на сайте. Без программиста, бесплатно на время запуска.Установка на сайт Пошагово: зарегистрироваться, настроить виджет, скопировать строку кода и вставить её в шаблон сайта перед закрывающим тегом body. Инструкции для Тильды, WordPress и Битрикса.Обращения в одном окне Сообщения из чата на сайте и из мессенджеров собираются в один поток: одна история на клиента, ничего не теряется, переписка остаётся у компании.Документация: Быстрый старт Ключ, первый запрос, первый ответ посетителю и первое событие на ваш адрес — за пять шагов.Документация: Разговоры Список обращений, карточка разговора, закрытие. Поля объекта conversation.Документация: Вебхуки События на ваш адрес: список, заголовки, проверка подписи HMAC, повторы и защита от петли.

Подключите чат к своему сайту

Регистрация по почте или через Telegram, настройка в кабинете, одна строка кода на сайте. Сейчас бесплатно.