Skip to content

通道概览

GolemBot 的 Gateway 将你的助手接入 IM 平台。每个平台由一个通道适配器处理,在 IM SDK 和 GolemBot 的 assistant.chat() API 之间转换。

支持的通道

通道传输方式需要公网 IPSDK
飞书WebSocket@larksuiteoapi/node-sdk
钉钉Stream(WebSocket)dingtalk-stream
企业微信WebSocket@wecom/aibot-node-sdk
SlackSocket Mode(WebSocket)@slack/bolt
TelegramLong-pollinggrammy
DiscordGateway WebSocketdiscord.js
微信Long-Polling无(内置 fetch)
自定义任意视实现而定你自己的 Adapter 类

所有通道都可在 NAT 后运行

全部 7 个内置通道都使用 WebSocket、长轮询或 Socket Mode——无需公网 IP 或端口映射。

架构

IM 平台 → 通道 Adapter → assistant.chat() → 文本回复 → adapter.reply()

Gateway 流程:

  1. golem.yaml 读取 channels 配置
  2. 动态 import 每个已配置通道的 SDK
  3. 所有 Adapter 与 HTTP 服务并行启动
  4. 对每条入站消息:解析 session key → 构建上下文 → assistant.chat()
  5. 累积完整文本回复,按平台字数限制拆分后逐段发送

消息长度限制

每个平台有最大消息长度。GolemBot 自动拆分长回复:

通道最大长度拆分方式
飞书4,000 字符多条消息
钉钉4,000 字符多条消息
企业微信2,048 字符多条消息
Slack4,000 字符多条消息
Telegram4,096 字符多条消息
Discord2,000 字符多条消息
微信2,000 字符多条消息
自定义可通过 maxMessageLength 配置多条消息

消息格式转换

GolemBot 自动将标准 Markdown 转换为各平台的原生格式:

通道输出格式转换方式
飞书卡片 v2(interactive)原生 Markdown 渲染 — 标题、列表、代码块、表格
Slackmrkdwn**bold***bold**italic*_italic_、链接重写
TelegramHTML**bold**<b>、代码块 → <pre><code>、引用 → <blockquote>
DiscordMarkdown(原生)无需转换 — Discord 原生渲染 Markdown
钉钉Markdown(原生)直接透传
企业微信纯文本Markdown 被去除(企业微信文本 API 格式支持有限)

AI agent 被鼓励使用标准 Markdown 语法(标题、列表、加粗、代码块等),各适配器自动处理平台特定的格式转换。

群聊、Mention 与引用回复

GolemBot 支持群聊响应策略(mention-only / smart / always)、入站和出站 @mention 解析,以及支持平台的引用回复。

详见群聊

消息队列与离线追回

开启后,消息持久化入队,Bot 重启后通过智能分诊追回离线消息。

详见消息队列与离线追回,了解完整指南和平台支持表。

自定义 Adapter

通过编写 Adapter 类并在 golem.yaml 中用 _adapter 引用,可以接入任意平台:

yaml
channels:
  my-platform:
    _adapter: ./adapters/my-platform.mjs   # 或 npm 包名
    token: ${MY_PLATFORM_TOKEN}

详见 Channel Adapter API,了解完整接口、实现指南和示例。

图片支持(多模态)

GolemBot 支持全部 6 个内置通道的图片消息。当用户发送图片(照片、截图、文件附件),Adapter 会下载图片并通过完整管线处理:

用户发送图片 → Adapter 下载为 Buffer → gateway 传递给 assistant.chat()
→ 图片保存到 .golem/images/ → 文件路径追加到 prompt → Agent 读取文件
→ 回复后自动清理
通道图片来源文本/标题
飞书image 消息 + post(富文本)中的内联图片提取富文本中的文本内容
Slack图片类型的文件附件保留消息文本
Telegrammessage.photo(选取最大尺寸)使用 message.caption 作为文本
Discord图片类型的 message.attachments保留消息文本
钉钉picture 消息 + richText 中的图片提取富文本内容
企业微信通过 media API 下载的 image 消息文本设为 (image)
微信CDN 下载 + AES-128-ECB 解密文本设为 (image)

工作原理: 图片保存为 .golem/images/ 下的临时文件,通过绝对路径引用注入 prompt。这种方式兼容所有引擎(Cursor、Claude Code、OpenCode、Codex),因为每个编码 CLI 都能读取本地文件。对于 Codex,GolemBot 还会额外通过 --image <path> 原生转发图片附件。Agent 回复后文件自动清理。

HTTP API: POST /chat 端点同样支持 base64 编码的图片 —— 详见 HTTP API

主动消息(定时任务)

除了响应入站消息,GolemBot 还支持按计划主动推送消息到 IM 通道。在 golem.yaml 中定义任务,Agent 会自动执行 prompt 并推送结果。

详见定时任务,了解完整配置、管理命令和使用场景。

启动 Gateway

bash
golembot gateway --verbose

--verbose 参数开启每通道的详细日志,便于调试。

SDK 依赖

通道 SDK 是可选的 peer 依赖。只安装你需要的:

bash
# 飞书
pnpm add @larksuiteoapi/node-sdk

# 钉钉
pnpm add dingtalk-stream

# 企业微信
pnpm add @wecom/aibot-node-sdk

# Slack
pnpm add @slack/bolt

# Telegram
pnpm add grammy

# Discord
pnpm add discord.js

如果已配置的通道 SDK 未安装,Gateway 会打印错误信息和安装指引。

下一步

基于 MIT 协议 发布。