LangChat Team 维护的微信 OpenClaw Java SDK 仓库(SDK + CLI + Examples + Web Terminal)。
English version: README.en.md
LangChat Pro 是基于Java生态构建的企业级AIGC应用开发平台商业版,为企业提供完整的AI大模型集成解决方案。基于Spring Boot 3和Vue 3构建,支持快速构建智能知识库、多模态AI应用和智能工作流,助力企业实现AI驱动的数字化转型。
产品官网: http://langchat.cn/
开源版地址: https://github.com/tycoding/langchat (基础功能体验)
商业版咨询: 添加微信 LangchainChat (备注:公司名称 + [具体咨询内容])
本仓库围绕 微信 OpenClaw 插件(iLinkAI 协议) 构建,目标是:
- 用 Java(JDK 17+)实现可复用的协议 SDK
- 提供独立 CLI/TUI 工具用于实战接入
- 提供 examples 模块用于快速上手与测试
- 提供前后端分离的 Web Terminal 方案(Spring Boot + Vue3 + xterm.js)
openclaw-weixin-sdk/
├─ README.md # 中文主文档
├─ README.en.md # English documentation
├─ pom.xml # 父工程(聚合构建)
├─ bin/
│ ├─ openclaw-weixin # CLI 启动脚本
├─ openclaw-weixin-sdk/ # SDK 模块(发布到 Maven)
│ ├─ README.md
│ ├─ README.zh-CN.md
│ └─ docs/
├─ openclaw-weixin-cli/ # 独立 TUI CLI 项目
│ ├─ README.md
│ └─ README.zh-CN.md
├─ openclaw-weixin-examples/ # SDK 示例与测试
├─ openclaw-weixin-web-backend/ # Web Terminal 后端(Spring Boot 3)
└─ openclaw-weixin-web-frontend/ # Web Terminal 前端(Vue3 + Tailwind + xterm.js)
├─ README.md
└─ src/*
该 SDK 对接的是微信 OpenClaw 插件相关的 iLinkAI HTTP 协议能力,核心是:
- 登录:二维码申请与状态轮询
- 收消息:
getupdates长轮询 - 发消息:
sendmessage - 输入中状态:
sendtyping - 媒体链路:
getuploadurl+ CDN 上传/下载 - 协议配置:
getconfig
https://ilinkai.weixin.qq.com/ilink/bot/get_bot_qrcode
https://ilinkai.weixin.qq.com/ilink/bot/get_qrcode_status
https://ilinkai.weixin.qq.com/ilink/bot/getupdates
https://ilinkai.weixin.qq.com/ilink/bot/sendmessage
https://ilinkai.weixin.qq.com/ilink/bot/sendtyping
https://ilinkai.weixin.qq.com/ilink/bot/getuploadurl
https://ilinkai.weixin.qq.com/ilink/bot/getconfig
+------------------------------------------------------------------------------------+
| 应用层(Agent / CLI / 业务服务) |
| 调用: login / sendText / sendTyping / monitorStream |
+-----------------------------------------------+------------------------------------+
|
v
+------------------------------------------------------------------------------------+
| OpenClawWeixinSdk(统一门面) |
|------------------------------------------------------------------------------------|
| 认证: QrLoginFlowService |
| 通信: WeixinApiClient (JDK HttpClient) |
| 监听: WeixinLongPollMonitor + WeixinSessionGuard |
| 媒体: MediaUploadService + CdnUploader/CdnMediaDownloader |
| 状态: FileAccountStore / FileContextTokenStore / FileSyncCursorStore |
+-------------------------------+-------------------------------+--------------------+
| |
| HTTPS(JSON) | 本地持久化
v v
+--------------------------------------------------+ +--------------------------+
| Weixin OpenClaw Plugin (iLinkAI endpoints) | | ~/.openclaw/openclaw- |
| /getupdates /sendmessage /sendtyping /getconfig | | weixin/* |
| /get_bot_qrcode /get_qrcode_status /getuploadurl | | - account |
| | | - context_token |
| | | - get_updates_buf |
+--------------------------------------------------+ +--------------------------+
App/CLI OpenClawWeixinSdk WeixinLongPollMonitor iLinkAI
| | | |
| monitorStream.start() | | |
|---------------------->| createMonitorWithMedia | |
| |------------------------>| load cursor/context |
| | | from File*Store |
| | | |
| | |==== LOOP ============== |
| | | POST /getupdates |
| | | (get_updates_buf, |
| | | longpoll timeout) ---> |
| | | <--- msgs + |
| | | get_updates_buf + |
| | | longpolling_timeout|
| | | save get_updates_buf |
| | | save context_token |
| <---- onMessage/event-|<------------------------| emit callbacks |
| | |========================= |
getupdates返回errcode=-14(会话过期)时,WeixinSessionGuard对该accountId进入暂停窗口(默认 1 小时),期间阻止继续发送与轮询。- 其他失败按
2s快速重试;连续失败达到 3 次后进入30s退避。 - 当
getupdates发生 HTTP 超时,SDK 视为“本轮无新消息”,不会中断循环。 - 服务端若返回
longpolling_timeout_ms,SDK 会动态调整下一次轮询超时。 - 每条入站消息都会尝试更新
context_token;用于后续sendmessage/sendtyping保持对话上下文连续性。
<dependency>
<groupId>cn.langchat.openclaw</groupId>
<artifactId>openclaw-weixin-sdk</artifactId>
<version>0.1.1</version>
</dependency>import cn.langchat.openclaw.weixin.OpenClawWeixinSdk;
import cn.langchat.openclaw.weixin.api.WeixinClientConfig;
public class QuickStart {
public static void main(String[] args) {
var sdk = new OpenClawWeixinSdk(
WeixinClientConfig.builder()
.baseUrl("https://ilinkai.weixin.qq.com")
.build()
);
var session = sdk.qrFlow().start(null, null, false);
System.out.println("二维码链接: " + session.qrcodeUrl());
var login = sdk.qrFlow().waitForConfirm(
session.sessionKey(),
java.time.Duration.ofMinutes(8),
null
);
if (!login.connected()) {
return;
}
String accountId = login.accountId();
String peer = "<[email protected]>";
sdk.sendText(accountId, peer, "Hello OpenClaw Weixin from Java");
var stream = sdk.monitorStream(accountId)
.onMessage(m -> System.out.println("收到: " + m.textBody()))
.onError(Throwable::printStackTrace)
.startAsync();
Runtime.getRuntime().addShutdownHook(new Thread(() ->
stream.stop().awaitStop(java.time.Duration.ofSeconds(3))
));
}
}./bin/openclaw-weixin chat
./bin/openclaw-weixin rebuild# SDK
mvn -q -f openclaw-weixin-sdk/pom.xml -DskipTests compile
# CLI
mvn -q -f openclaw-weixin-cli/pom.xml -DskipTests package
# Examples
mvn -q -f openclaw-weixin-examples/pom.xml test
# Web Backend
mvn -q -f openclaw-weixin-web-backend/pom.xml -DskipTests package先启动后端:
mvn -pl openclaw-weixin-web-backend spring-boot:run再启动前端:
cd openclaw-weixin-web-frontend
npm install
npm run devWeb
CLI
- SDK 负责 iLinkAI 协议传输与协议状态维护(账号、
context_token、get_updates_buf)。 - SDK 不负责业务历史消息存档与应用层编排。
sendTextStream(...)是分片发送能力,不是 LLM token 回调流。
- SDK:
openclaw-weixin-sdk/README.md/openclaw-weixin-sdk/README.zh-CN.md - CLI:
openclaw-weixin-cli/README.md/openclaw-weixin-cli/README.zh-CN.md - Examples:
openclaw-weixin-examples/README.md/openclaw-weixin-examples/README.zh-CN.md - Web Backend:
openclaw-weixin-web-backend/README.md/openclaw-weixin-web-backend/README.zh-CN.md - Web Frontend:
openclaw-weixin-web-frontend/README.md/openclaw-weixin-web-frontend/README.zh-CN.md




