Разделы документации
Разработчикам

Хуки расширения

Расширение конвейеров Charo внешними API — точки подключения, контракт каждой точки, регистрация хука и обработка ошибок.

Что такое хуки

Хуки позволяют подключить ваши внешние API как колбэки в предопределённых точках конвейеров Charo: обработка запросов пользователей, приём документов перед индексацией и отправка документов после индексации. Управление — на странице Админка → Хуки-расширения; хуки также должны быть включены в конфигурации установки.

На каждую точку подключается один хук.

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

Charo отправляет HTTP POST с JSON-телом на указанный вами URL:

  • если задан API-ключ, он передаётся в заголовке Authorization: Bearer <ключ>;
  • успешным считается ответ со статусом 2xx и валидным JSON по схеме точки;
  • повторных попыток нет — при сбое применяется выбранная стратегия;
  • успешные вызовы не журналируются, ошибки видны в журнале хука.

Регистрация хука

  1. На странице «Хуки-расширения» нажмите «Подключить» у нужной точки.

  2. Заполните форму «Настройка хука»:

    ПолеЧто указать
    Отображаемое имякак хук будет виден в списке
    URL внешнего APIадрес вашего эндпоинта (должен быть доступен с сервера Charo)
    API-ключнеобязательно; передаётся как Bearer-токен
    Тайм-аутмаксимум ожидания ответа: больше 0 и не более 600 секунд
    Стратегия при сбое«Записать ошибку и продолжить» (soft) или «Останавливать конвейер при сбое» (hard)
  3. После сохранения Charo проверит соединение — статус хука станет «Подключено» либо «Соединение потеряно».

Журнал «Недавние ошибки» на карточке хука показывает ошибки за последние 30 дней; их можно скопировать или скачать файлом.

Точка «Обработка запросов»

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

Тело запроса (payload):

ПолеТипОписание
querystringзапрос ровно в том виде, как его ввёл пользователь
user_emailstring | nullпочта пользователя; null для неаутентифицированных
chat_session_idstringUUID чата

Ожидаемый ответ:

ПолеТипОписание
querystring | nullзапрос для дальнейшей обработки; null или пустая строка — отклонить запрос
rejection_messagestring | nullсообщение пользователю при отклонении (иначе — стандартное)

Тайм-аут по умолчанию — 5 секунд: пользователь ждёт ответа. Стратегия по умолчанию — hard: при сбое хука запрос блокируется с сообщением об ошибке.

Точка «Приём документов»

Выполняется для каждого документа перед конвейером индексации — до чанкования и записи. Позволяет фильтровать документы, редактировать содержимое (например, вычищать персональные данные) или отбрасывать документы целиком.

Тело запроса (payload):

ПолеТипОписание
document_idstringидентификатор документа (только чтение)
titlestring | nullзаголовок
semantic_identifierstringчеловекочитаемое имя (имя файла, заголовок страницы)
sourcestringтип источника: confluence, google_drive и т.д. (только чтение)
sectionsarrayсекции документа: текстовые (text) и изображения (image_file_id); у секции может быть link
metadataobjectметаданные; значения — массивы строк
doc_updated_atstring | nullвремя изменения в источнике, ISO 8601 UTC
primary_owners, secondary_ownersarray | nullвладельцы: display_name, email

Ожидаемый ответ:

ПолеТипОписание
sectionsarray | nullсекции для индексации в нужном порядке — можно менять, переставлять и удалять; null или пустой список — документ не индексируется
rejection_reasonstring | nullпричина отклонения для журнала

Содержимое изображений в хук не передаётся: секцию-изображение можно удалить или переставить, но не прочитать.

Тайм-аут по умолчанию — 30 секунд. Стратегия по умолчанию — hard: при сбое хука документ не индексируется.

Точка «Отправка документов»

Срабатывает после успешной индексации каждого документа. Работает по принципу fire-and-forget: тело ответа игнорируется, любой ответ 2xx — успех. Подходит для выгрузки проиндексированных документов во внешние системы: хранилище аналитики, журнал аудита, внутреннюю вики.

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

Тело запроса (payload):

ПолеТипОписание
document_idstringидентификатор документа
titlestring | nullзаголовок
contentstringполный текст документа (все текстовые секции)
sourcestringтип источника
urlstring | nullссылка на документ в источнике
doc_updated_atstring | nullвремя изменения в источнике, ISO 8601 UTC
metadataobjectметаданные; значения — массивы строк

Тайм-аут по умолчанию — 30 секунд. Стратегия по умолчанию — soft: ошибки записываются в журнал, индексация продолжается. При стратегии hard сбой хука останавливает текущий батч индексации.

Обработка ошибок

  • «Записать ошибку и продолжить» (soft) — сбой хука не останавливает конвейер: ошибка попадает в журнал, обработка идёт дальше.
  • «Останавливать конвейер при сбое» (hard) — сбой останавливает операцию: запрос блокируется / документ не индексируется / батч индексации падает.
  • Статус «Соединение потеряно» выставляется при сетевых ошибках и ответах 401/403 — проверьте доступность эндпоинта с сервера Charo и API-ключ.
  • Тайм-аут — тоже сбой: следите, чтобы эндпоинт отвечал быстрее лимита, особенно у точки «Обработка запросов», где ждёт живой пользователь.