Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
4.7 KiB
4.7 KiB
title, tags, aliases, source
| title | tags | aliases | source | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| IM集成开发 |
|
|
IM集成开发文档.md |
IM 集成开发
WeKnora 的 IM 集成模块将企业即时通讯平台(企业微信、飞书、Lark、Slack、Telegram、钉钉、Mattermost)接入 WeKnora 知识问答管道,支持在 IM 中直接向 AI 提问并获得实时流式回答。
IM 渠道绑定到 Agent,一个 Agent 可接入多个 IM 渠道。
支持的平台
| 平台 | WebSocket 模式 | Webhook 模式 | 流式输出 |
|---|---|---|---|
| 企业微信 | ✅ | ✅ | ✅ |
| 飞书 | ✅ | ✅ | ✅ (CardKit) |
| Lark(飞书国际版) | ✅ | ✅ | ✅ (CardKit) |
| Slack | ✅ (Socket Mode) | ✅ (Events API) | ✅ |
| Telegram | ✅ (长轮询) | ✅ | ✅ |
| 钉钉 | ✅ (Stream) | ✅ | ✅ (AI 卡片) |
| Mattermost | — | ✅ | ✅ |
快速接入指南
前置条件
- WeKnora 已部署并运行
- 已创建至少一个 Agent(自定义智能体)
- Agent 已配置好模型和知识库
Agent 配置模型参见 内置模型管理
企业微信接入
提供两种模式:
- WebSocket 模式(智能机器人,推荐)— 无需公网域名
- Webhook 模式(自建应用)— 需要公网回调地址
飞书接入
- WebSocket 模式(推荐)— 无需公网域名
- Webhook 模式 — 需要公网回调地址
飞书同时也是数据源导入的支持平台,参见 数据源导入开发
Lark 接入
Lark 是飞书的国际版,IM 接口一致,与飞书共用同一套适配器。接入步骤基本相同,但开放平台 与权限清单不同:
权限不可套用飞书的清单:飞书清单混入了数据源连接器(Wiki 同步)用的权限,其中部分在 Lark 并不存在,整份导入会失败。Lark 只需 IM 相关的 6 项,见 IM集成开发文档 — Lark 权限配置。
两朵云的应用互不通用,凭证只在创建它的那朵云上有效。
Slack 接入
- Socket Mode(推荐)— 无需公网域名
- Events API — 需要公网回调地址
Telegram 接入
- 长轮询模式(推荐)— 无需公网域名
- Webhook 模式 — 需要 HTTPS 公网回调
钉钉接入
- Stream 模式(推荐)— 无需公网域名
- Webhook 模式 — 需要公网回调地址
Mattermost 接入
- 仅支持 Webhook 模式(出站 Webhook + REST API v4)
架构设计
系统采用 Adapter Pattern,每个平台实现 im.Adapter 接口,通过 AdapterFactory 动态创建。核心设计模式包括:
| 模式 | 用途 |
|---|---|
| Adapter Pattern | 统一不同 IM 平台的差异 |
| Factory Pattern | 从数据库渠道配置动态创建 Adapter |
| Command Pattern | 可插拔的斜杠指令系统 |
| Producer-Consumer | QA 队列 + Worker Pool |
斜杠指令系统
| 指令 | 说明 |
|---|---|
/help |
显示所有可用指令 |
/info |
查看当前绑定智能体信息 |
/search |
对知识库执行混合检索 |
/stop |
取消当前 QA 请求 |
/clear |
清空当前对话记忆 |
扩展新平台
接入新的 IM 平台只需 3 步:
- 实现
im.Adapter接口(可选StreamSender、FileDownloader) - 注册适配器工厂
- 前端添加平台选项
相关主题
- 数据源导入开发 — 飞书数据源同步(共享飞书应用凭证)
- MCP功能使用说明 — Agent 可调用 MCP 工具
- Agent技能系统 — Agent 可使用 Skills 技能
- 开发指南 — 开发环境搭建