跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

渠道 Webhook 与已观察联系人

用独立秘密触发无人值守任务,核对目标身份与投递完成。

Daemon-managed 渠道可接收认证 webhook,把事件作为上下文交 agent 分析,再发最终结果。它不是原样转发器;任务要求 approvalMode:yolo,而且作用于整个渠道,因此通常使用专用渠道或严格限制普通发送者。

来源与目标

每个 channels..webhooks.sources. 配置 secretEnv 和 targets。secretEnv 指环境变量名,targets 以本地 targetRef 映射真实平台目标,不让调用方随意换聊天地址。

DingTalk 每目标明确 isGroup:私聊 chatId 是用户 ID、false;群是 openConversationId、true。senderId 可标来源身份。其他平台按其主动投递契约配置,不通用猜测线程字段。

curl -X POST "http://127.0.0.1:4170/channels/team-bot/webhooks/build" \
  -H "x-qwen-webhook-secret: $QWEN_CHANNEL_BUILD_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"eventType":"build","targetRef":"operator","title":"Build finished","payload":{"status":"success"}}'

此调用假设已配置同名渠道、build 来源与 operator 目标。认证使用 x-qwen-webhook-secret,即使 daemon 自身启用 bearer auth 也一样;不要把 daemon token 交外部 webhook 提供商。

配置和秘密在 daemon 启动读取,变更来源或轮换秘密需重启。202 accepted 只说明 worker 接管,不代表聊天消息已经送达;通过 daemon/worker 日志和 /daemon/status 追踪。

发现最近联系目标

Daemon 的 DingTalk、Feishu、Telegram、WeCom 可从已授权消息观察联系人:

curl -H "Authorization: Bearer $QWEN_SERVER_TOKEN" \
  http://127.0.0.1:4170/workspace/channel/observed-contacts

/workspaces/:workspace/channel/observed-contacts 选择其他已注册可信工作区。freshWithinSeconds 默认七天,可选一秒到365天;能力标识 workspace_channel_observed_contacts。

返回顶层 users 为私聊用户,groups 中包含群内观察用户,Feishu/Telegram 可带 topics 和其参与者。ID 完整,lastObservedAt 是带毫秒 UTC 时间,不应按本地时区直接解析无偏移字符串。

观察不是组织目录

只记录通过私聊/群、mention、sender、pairing 门槛的消息,不存正文。标签可来自已接收消息,缺少名称则显示完整 ID;不能把观察成员列表当当前权威群成员或访问资格。

重复观察刷新时间与标签,用户离群或删除只能等关系变旧,不能即时检测。记录在 QWEN_HOME/channels/daemon//observed-contacts.json,工作区共用五百条观察额度,下次接受写入时清理超过365天项。

损坏或不支持版本时,可重置这个观察缓存文件等待新消息重建;这仅适用于联系人缓存,不是会话锁、配对或任务状态的通用删除办法。