Skip to Content
ДизайнОбщий обзор статуса жизненного цикла каналов

Общий обзор статуса жизненного цикла каналов

Дата: 2026-07-01

Цель

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

Скоуп

  • Telegram
  • Weixin
  • DingTalk
  • Feishu

Явные задачи вне скоупа

  • Slack остается вне скоупа.
  • QQ Bot остается вне скоупа для UI статуса жизненного цикла.
  • Пример плагина остается вне скоупа для UI статуса жизненного цикла.
  • Терминальные эмодзи DingTalk остаются вне скоупа.

Матрица ревью

КаналПоддерживаемые события жизненного циклаНативный интерфейсПоведение startedПоведение text_chunkПоведение при завершенииПричина отсутствия поддержки / no-opТочные тестовые файлы
Telegramstarted, completed, cancelled, failedИндикатор набора текстаЗапускает существующий цикл набора текста для каждого чата один раз. Дублирующиеся события started не добавляют новый цикл.Игнорируется хуком жизненного цикла. Контент ответа продолжает поступать через обычный путь ответа.Останавливает цикл набора текста при любом терминальном событии и не оставляет активных интервалов.tool_call не имеет нативного интерфейса статуса и не нуждается в UI адаптера.packages/channels/telegram/src/TelegramAdapter.test.ts
Weixinstarted, completed, cancelled, failedИндикатор набора текстаВызывает setTyping(chatId, true) один раз для активного чата. Дублирующиеся события started не перезапускают состояние набора текста.Игнорируется хуком жизненного цикла. Контент ответа продолжает поступать через обычный путь отправки.Вызывает setTyping(chatId, false) при терминальных событиях. Неудачные попытки запуска очищают локальное состояние, чтобы последующее событие started могло повторить попытку.tool_call не имеет отдельного интерфейса статуса, и дополнительные сообщения отправлять не нужно.packages/channels/weixin/src/WeixinAdapter.test.ts
DingTalkstarted, completed, cancelled, failedРеакция «глаз» на входящее сообщениеДобавляет существующую реакцию «глаз» один раз, когда становится доступен id беседы.Игнорируется хуком жизненного цикла. Контент ответа продолжает поступать через обычный путь отправки.Отзывает реакцию «глаз» при терминальных событиях, включая состояния гонки при позднем добавлении после отмены.Прямые чаты вебхуков роботов не предоставляют id беседы, необходимый для реакций, поэтому статус жизненного цикла там является no-op. Для tool_call UI также не предусмотрен в рамках скоупа.packages/channels/dingtalk/src/DingtalkAdapter.test.ts
Feishustarted, completed, cancelled, failedСтатусная метка стриминговой карточкиУдерживает карточку в состоянии выполнения и резервирует место для метки выполнения, пока активна существующая потоковая передача карточки.Не потребляется напрямую хуком жизненного цикла. Потоковая передача контента по-прежнему обрабатывается существующим хуком потока ответа/карточки.Завершает статусную метку карточки как выполненную, отмененную или завершенную с ошибкой, не перезаписывая тело потокового ответа.tool_call остается скрытым, так как карточка использует только поток ответа и терминальные статусные метки.packages/channels/feishu/src/adapter.test.ts, packages/channels/feishu/src/markdown.test.ts
QQ BotНетНетNo-op.No-op. QQ Bot по-прежнему передает фрагменты ответов через отправку исходящих сообщений, но не через обновления статуса жизненного цикла.No-op.Канал не имеет эндпоинта для набора текста или статуса задачи, и QQChannel намеренно оставляет onPromptStart, onPromptEnd и onTaskLifecycle пустыми.packages/channels/qqbot/src/send.test.ts, packages/channels/qqbot/src/api.test.ts
Plugin exampleНетТолько сообщения протокола WebSocketNo-op для статуса жизненного цикла.Передает фрагменты ответа через тип сообщения chunk мок-протокола из onResponseChunk, вне обработки статуса жизненного цикла.Отправляет финальное исходящее сообщение при завершении ответа, вне обработки статуса жизненного цикла.Мок-канал демонстрирует только настройку транспорта; у него нет нативного индикатора набора, реакций или интерфейса статуса.integration-tests/channel-plugin.test.ts

Заметки для ревью

  • text_chunk жизненного цикла Feishu остается no-op в хуке жизненного цикла. Он не добавляет и не обновляет контент ответа в этом месте.
  • Slack намеренно исключен из этой матрицы, так как находится вне скоупа.
  • Терминальные события DingTalk в рамках данного скоупа только отзывают существующую реакцию «глаз». Терминальные эмодзи не добавляются.
Last updated on