@wu529778790/open-im 1.9.4-beta.9 → 1.10.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +157 -202
- package/README.zh-CN.md +151 -202
- package/dist/access/access-control.js +2 -2
- package/dist/adapters/claude-sdk-adapter.js +39 -5
- package/dist/commands/handler.d.ts +1 -1
- package/dist/commands/handler.js +2 -2
- package/dist/config/credentials.d.ts +0 -8
- package/dist/config/credentials.js +0 -49
- package/dist/config-web-page-i18n.d.ts +0 -2
- package/dist/config-web-page-i18n.js +0 -2
- package/dist/config-web-page-script.js +1 -17
- package/dist/config-web-page-template.js +0 -29
- package/dist/config.js +0 -9
- package/dist/dingtalk/api.js +0 -2
- package/dist/dingtalk/message-sender.js +1 -2
- package/dist/feishu/client.d.ts +7 -0
- package/dist/feishu/client.js +52 -3
- package/dist/feishu/event-handler.js +4 -144
- package/dist/feishu/message-sender.js +43 -11
- package/dist/feishu/permission.d.ts +23 -0
- package/dist/feishu/permission.js +178 -0
- package/dist/index.js +15 -6
- package/dist/manager-control.js +2 -17
- package/dist/platform/create-event-context.test.js +2 -0
- package/dist/platform/handle-ai-request.js +4 -3
- package/dist/platform/handle-text-flow.d.ts +5 -1
- package/dist/platform/handle-text-flow.js +3 -3
- package/dist/qq/client.js +1 -0
- package/dist/qq/event-handler.js +1 -1
- package/dist/queue/request-queue.d.ts +3 -0
- package/dist/queue/request-queue.js +26 -14
- package/dist/sanitize.js +1 -0
- package/dist/shared/ai-task.js +2 -2
- package/dist/shared/chat-user-map.d.ts +0 -2
- package/dist/shared/chat-user-map.js +0 -6
- package/dist/wework/client.js +1 -1
- package/dist/wework/event-handler.js +1 -1
- package/dist/wework/message-sender.js +1 -4
- package/dist/wework/types.d.ts +0 -7
- package/dist/workbuddy/client.js +2 -2
- package/dist/workbuddy/event-handler.js +7 -7
- package/dist/workbuddy/message-sender.js +1 -1
- package/dist/workbuddy/oauth.js +0 -2
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
# open-im
|
|
2
2
|
|
|
3
|
-
[
|
|
3
|
+
[中文文档](./README.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
Multi-platform IM bridge for AI CLI tools. Connect Telegram, Feishu, WeCom, DingTalk, QQ, and WeChat to Claude Code, Codex, and CodeBuddy
|
|
5
|
+
Multi-platform IM bridge for AI CLI tools. Connect Telegram, Feishu, WeCom, DingTalk, QQ, and WeChat to Claude Code, Codex, and CodeBuddy — use your AI coding assistant from any phone or chat window.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
- Per-platform AI routing
|
|
12
|
-
- Streaming replies
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
9
|
+
- **6 IM platforms** — Telegram, Feishu, WeCom, DingTalk, QQ, WeChat (WorkBuddy), all can run simultaneously
|
|
10
|
+
- **3 AI backends** — Claude (Agent SDK), Codex, CodeBuddy
|
|
11
|
+
- **Per-platform AI routing** — each IM can use a different AI tool
|
|
12
|
+
- **Streaming replies** — real-time AI output and tool progress (platform-dependent)
|
|
13
|
+
- **Media support** — send images, files, voice, video for AI analysis
|
|
14
|
+
- **Session isolation** — independent sessions per user, `/new` to reset
|
|
15
|
+
- **Web config UI** — graphical dashboard for setup and management
|
|
16
|
+
- **Built-in commands** — `/help`, `/new`, `/cd`, `/pwd`, `/status`, `/allow`, `/deny`
|
|
16
17
|
|
|
17
18
|
## Requirements
|
|
18
19
|
|
|
19
20
|
- Node.js >= 20
|
|
20
21
|
- At least one IM platform configured
|
|
21
|
-
- Authentication
|
|
22
|
+
- Authentication for the AI tool you want to use
|
|
22
23
|
|
|
23
24
|
## Quick Start
|
|
24
25
|
|
|
@@ -33,114 +34,95 @@ npm install -g @wu529778790/open-im
|
|
|
33
34
|
open-im start
|
|
34
35
|
```
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
Config file: `~/.open-im/config.json`
|
|
37
38
|
|
|
38
39
|
## CLI Commands
|
|
39
40
|
|
|
40
|
-
| Command
|
|
41
|
-
|
|
|
42
|
-
| `open-im init`
|
|
43
|
-
| `open-im start`
|
|
44
|
-
| `open-im stop`
|
|
45
|
-
| `open-im dev`
|
|
46
|
-
| `open-im dashboard` |
|
|
41
|
+
| Command | Description |
|
|
42
|
+
| ------------------- | -------------------------------------- |
|
|
43
|
+
| `open-im init` | Configure without starting the service |
|
|
44
|
+
| `open-im start` | Run as background service |
|
|
45
|
+
| `open-im stop` | Stop background service |
|
|
46
|
+
| `open-im dev` | Run in foreground (debugging) |
|
|
47
|
+
| `open-im dashboard` | Web config UI only (no bridge) |
|
|
47
48
|
|
|
48
|
-
##
|
|
49
|
+
## Web Configuration
|
|
49
50
|
|
|
50
|
-
### Local
|
|
51
|
+
### Local
|
|
51
52
|
|
|
52
|
-
Open
|
|
53
|
+
Open [`http://127.0.0.1:39282`](http://127.0.0.1:39282) after starting. The dashboard includes:
|
|
53
54
|
|
|
54
|
-
- **
|
|
55
|
-
- **Platforms**
|
|
56
|
-
- **AI Tooling**
|
|
57
|
-
- **Service control**
|
|
55
|
+
- **Overview** — platform count, service status
|
|
56
|
+
- **Platforms** — enable and configure each IM (credentials, proxy, AI tool, allowed users)
|
|
57
|
+
- **AI Tooling** — default tool, work directory, per-tool settings (CLI path, timeout, proxy, API keys)
|
|
58
|
+
- **Service control** — validate, save, start/stop bridge
|
|
58
59
|
|
|
59
|
-
WorkBuddy (WeChat) is
|
|
60
|
+
> WorkBuddy (WeChat) is configured via `open-im init` or directly in `~/.open-im/config.json`.
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
- `open-im dev` opens the page automatically only when setup is incomplete.
|
|
63
|
-
- To open the page when config already exists, you can also run `open-im dashboard` to launch the config UI only (without starting the bridge).
|
|
62
|
+
### Remote Server
|
|
64
63
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
On the server:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
export OPEN_IM_NO_BROWSER=1
|
|
75
|
-
# Optional: bind to all interfaces if you want to open from another device
|
|
76
|
-
# export OPEN_IM_WEB_HOST=0.0.0.0
|
|
77
|
-
open-im dashboard
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
- This starts only the config web UI (no bridge yet).
|
|
81
|
-
- If `OPEN_IM_WEB_HOST` is `0.0.0.0`, the server will print a one-time login URL like:
|
|
64
|
+
```bash
|
|
65
|
+
export OPEN_IM_NO_BROWSER=1
|
|
66
|
+
# Optional: allow access from other devices
|
|
67
|
+
# export OPEN_IM_WEB_HOST=0.0.0.0
|
|
68
|
+
open-im dashboard
|
|
69
|
+
```
|
|
82
70
|
|
|
83
|
-
|
|
84
|
-
http://your-server-ip:39282/?login_token=xxxx
|
|
85
|
-
```
|
|
71
|
+
If `OPEN_IM_WEB_HOST=0.0.0.0`, the server prints a one-time login URL:
|
|
86
72
|
|
|
87
|
-
|
|
73
|
+
```
|
|
74
|
+
http://your-server-ip:39282/?login_token=xxxx
|
|
75
|
+
```
|
|
88
76
|
|
|
89
|
-
|
|
77
|
+
Complete setup in the browser, then start the bridge:
|
|
90
78
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
79
|
+
```bash
|
|
80
|
+
open-im start
|
|
81
|
+
```
|
|
94
82
|
|
|
95
|
-
|
|
96
|
-
open-im start
|
|
97
|
-
```
|
|
83
|
+
## IM Commands
|
|
98
84
|
|
|
99
|
-
|
|
85
|
+
| Command | Description |
|
|
86
|
+
| ------------- | ------------------------------------ |
|
|
87
|
+
| `/help` | Show help |
|
|
88
|
+
| `/new` | Start a new AI session |
|
|
89
|
+
| `/status` | Show AI tool, version, session info |
|
|
90
|
+
| `/cd <path>` | Change session working directory |
|
|
91
|
+
| `/pwd` | Show current working directory |
|
|
92
|
+
| `/allow` `/y` | Approve a permission request |
|
|
93
|
+
| `/deny` `/n` | Reject a permission request |
|
|
100
94
|
|
|
101
95
|
## Session Behavior
|
|
102
96
|
|
|
103
|
-
|
|
97
|
+
Sessions are stored locally in `~/.open-im/data/sessions.json`, separate from IM chat history. Each user gets an independent session directory. `/new` resets the AI session.
|
|
104
98
|
|
|
105
99
|
## Configuration
|
|
106
100
|
|
|
107
|
-
|
|
101
|
+
### Per-Platform AI Routing
|
|
108
102
|
|
|
109
|
-
|
|
103
|
+
The root-level `aiCommand` is the default AI tool. Override per-platform with `platforms.<name>.aiCommand`:
|
|
110
104
|
|
|
111
105
|
```json
|
|
112
106
|
{
|
|
113
107
|
"aiCommand": "claude",
|
|
114
108
|
"platforms": {
|
|
115
|
-
"telegram": {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
},
|
|
119
|
-
"feishu": {
|
|
120
|
-
"enabled": true,
|
|
121
|
-
"aiCommand": "codex"
|
|
122
|
-
},
|
|
123
|
-
"qq": {
|
|
124
|
-
"enabled": true,
|
|
125
|
-
"aiCommand": "codebuddy"
|
|
126
|
-
}
|
|
109
|
+
"telegram": { "enabled": true, "aiCommand": "codex" },
|
|
110
|
+
"feishu": { "enabled": true, "aiCommand": "codex" },
|
|
111
|
+
"qq": { "enabled": true, "aiCommand": "codebuddy" }
|
|
127
112
|
}
|
|
128
113
|
}
|
|
129
114
|
```
|
|
130
115
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
### Claude
|
|
116
|
+
### Claude (Agent SDK)
|
|
134
117
|
|
|
135
|
-
Claude uses the Agent SDK by default
|
|
136
|
-
|
|
137
|
-
Load order:
|
|
118
|
+
Claude uses the Agent SDK by default — no local `claude` executable needed. Provide API credentials:
|
|
138
119
|
|
|
120
|
+
Credential load order:
|
|
139
121
|
1. Environment variables
|
|
140
122
|
2. `env` in `~/.open-im/config.json`
|
|
141
123
|
3. `~/.claude/settings.json` or `~/.claude.json`
|
|
142
124
|
|
|
143
|
-
|
|
125
|
+
Compatible with third-party endpoints:
|
|
144
126
|
|
|
145
127
|
```json
|
|
146
128
|
{
|
|
@@ -152,47 +134,41 @@ Both the official API and compatible third-party endpoints are supported:
|
|
|
152
134
|
}
|
|
153
135
|
```
|
|
154
136
|
|
|
137
|
+
Claude automatically inherits plugins and settings from your local `~/.claude/settings.json`.
|
|
138
|
+
|
|
155
139
|
### CodeBuddy
|
|
156
140
|
|
|
157
|
-
|
|
141
|
+
Install the CLI and log in:
|
|
158
142
|
|
|
159
143
|
```bash
|
|
160
144
|
npm install -g @tencent-ai/codebuddy-code
|
|
161
|
-
codebuddy --version
|
|
162
145
|
codebuddy login
|
|
163
146
|
```
|
|
164
147
|
|
|
165
|
-
|
|
148
|
+
Config keys:
|
|
149
|
+
- `tools.codebuddy.cliPath` — CLI path (default: `codebuddy`)
|
|
150
|
+
- `tools.codebuddy.skipPermissions` — skip permission prompts (default: `true`)
|
|
151
|
+
- `tools.codebuddy.timeoutMs` — execution timeout (default: `600000`)
|
|
166
152
|
|
|
167
|
-
|
|
168
|
-
- `tools.codebuddy.skipPermissions`: whether to skip permission confirmation, defaults to `true`
|
|
169
|
-
- `tools.codebuddy.timeoutMs`: total execution timeout, defaults to `600000`
|
|
170
|
-
- `platforms.<platform>.aiCommand`: set to `codebuddy` if that IM platform should use CodeBuddy
|
|
153
|
+
On Windows, if `cliPath` is `codebuddy`, open-im also checks `AppData\Roaming\npm\codebuddy.cmd`.
|
|
171
154
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
### Example Config File
|
|
175
|
-
|
|
176
|
-
The following is valid JSON and can be saved directly as `~/.open-im/config.json`:
|
|
155
|
+
### Example Config
|
|
177
156
|
|
|
178
157
|
```json
|
|
179
158
|
{
|
|
180
159
|
"aiCommand": "claude",
|
|
181
160
|
"tools": {
|
|
182
161
|
"claude": {
|
|
183
|
-
"
|
|
184
|
-
"workDir": "D:/coding/open-im",
|
|
162
|
+
"workDir": "/path/to/project",
|
|
185
163
|
"skipPermissions": true,
|
|
186
164
|
"timeoutMs": 600000
|
|
187
165
|
},
|
|
188
166
|
"codex": {
|
|
189
|
-
"
|
|
190
|
-
"workDir": "D:/coding/open-im",
|
|
167
|
+
"workDir": "/path/to/project",
|
|
191
168
|
"skipPermissions": true,
|
|
192
169
|
"proxy": "http://127.0.0.1:7890"
|
|
193
170
|
},
|
|
194
171
|
"codebuddy": {
|
|
195
|
-
"cliPath": "codebuddy",
|
|
196
172
|
"skipPermissions": true,
|
|
197
173
|
"timeoutMs": 600000
|
|
198
174
|
}
|
|
@@ -200,44 +176,31 @@ The following is valid JSON and can be saved directly as `~/.open-im/config.json
|
|
|
200
176
|
"platforms": {
|
|
201
177
|
"telegram": {
|
|
202
178
|
"enabled": true,
|
|
203
|
-
"aiCommand": "codex",
|
|
204
|
-
"proxy": "http://127.0.0.1:7890",
|
|
205
|
-
"allowedUserIds": [],
|
|
206
179
|
"botToken": "YOUR_TELEGRAM_BOT_TOKEN"
|
|
207
180
|
},
|
|
208
181
|
"feishu": {
|
|
209
182
|
"enabled": false,
|
|
210
|
-
"aiCommand": "codex",
|
|
211
|
-
"allowedUserIds": [],
|
|
212
183
|
"appId": "YOUR_FEISHU_APP_ID",
|
|
213
184
|
"appSecret": "YOUR_FEISHU_APP_SECRET"
|
|
214
185
|
},
|
|
215
186
|
"qq": {
|
|
216
187
|
"enabled": false,
|
|
217
|
-
"aiCommand": "codebuddy",
|
|
218
|
-
"allowedUserIds": [],
|
|
219
188
|
"appId": "YOUR_QQ_APP_ID",
|
|
220
189
|
"secret": "YOUR_QQ_APP_SECRET"
|
|
221
190
|
},
|
|
222
191
|
"wework": {
|
|
223
192
|
"enabled": false,
|
|
224
|
-
"aiCommand": "claude",
|
|
225
|
-
"allowedUserIds": [],
|
|
226
193
|
"corpId": "YOUR_WEWORK_CORP_ID",
|
|
227
194
|
"secret": "YOUR_WEWORK_SECRET"
|
|
228
195
|
},
|
|
229
196
|
"dingtalk": {
|
|
230
197
|
"enabled": false,
|
|
231
|
-
"aiCommand": "claude",
|
|
232
|
-
"allowedUserIds": [],
|
|
233
198
|
"clientId": "YOUR_DINGTALK_CLIENT_ID",
|
|
234
199
|
"clientSecret": "YOUR_DINGTALK_CLIENT_SECRET",
|
|
235
200
|
"cardTemplateId": "YOUR_DINGTALK_AI_CARD_TEMPLATE_ID"
|
|
236
201
|
},
|
|
237
202
|
"workbuddy": {
|
|
238
203
|
"enabled": false,
|
|
239
|
-
"aiCommand": "claude",
|
|
240
|
-
"allowedUserIds": [],
|
|
241
204
|
"accessToken": "",
|
|
242
205
|
"refreshToken": "",
|
|
243
206
|
"userId": ""
|
|
@@ -246,101 +209,93 @@ The following is valid JSON and can be saved directly as `~/.open-im/config.json
|
|
|
246
209
|
}
|
|
247
210
|
```
|
|
248
211
|
|
|
249
|
-
###
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
|
254
|
-
|
|
|
255
|
-
| `
|
|
256
|
-
| `
|
|
257
|
-
| `
|
|
258
|
-
| `
|
|
259
|
-
| `
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
|
264
|
-
|
|
|
265
|
-
| `
|
|
266
|
-
| `
|
|
267
|
-
| `
|
|
268
|
-
| `
|
|
269
|
-
| `
|
|
270
|
-
| `
|
|
271
|
-
| `
|
|
272
|
-
| `
|
|
273
|
-
| `
|
|
274
|
-
| `
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
|
279
|
-
|
|
|
280
|
-
| `
|
|
281
|
-
| `
|
|
282
|
-
| `
|
|
283
|
-
| `
|
|
284
|
-
| `
|
|
285
|
-
| `
|
|
286
|
-
| `
|
|
287
|
-
| `
|
|
288
|
-
| `
|
|
289
|
-
| `
|
|
290
|
-
| `
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
|
312
|
-
|
|
|
313
|
-
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
212
|
+
### Environment Variables
|
|
213
|
+
|
|
214
|
+
#### General
|
|
215
|
+
|
|
216
|
+
| Variable | Description |
|
|
217
|
+
| ------------------- | ---------------------------------------------- |
|
|
218
|
+
| `AI_COMMAND` | Default AI tool (`claude` / `codex` / `codebuddy`) |
|
|
219
|
+
| `CLAUDE_WORK_DIR` | Default session working directory |
|
|
220
|
+
| `LOG_DIR` | Log directory |
|
|
221
|
+
| `LOG_LEVEL` | Log level |
|
|
222
|
+
| `HOOK_PORT` | Permission service port |
|
|
223
|
+
|
|
224
|
+
#### AI Tool Credentials
|
|
225
|
+
|
|
226
|
+
| Variable | Description |
|
|
227
|
+
| ---------------------------- | ------------------------------------------ |
|
|
228
|
+
| `ANTHROPIC_API_KEY` | Claude API key |
|
|
229
|
+
| `ANTHROPIC_AUTH_TOKEN` | Claude OAuth token |
|
|
230
|
+
| `ANTHROPIC_BASE_URL` | Claude API base URL |
|
|
231
|
+
| `ANTHROPIC_MODEL` | Claude model name |
|
|
232
|
+
| `OPENAI_API_KEY` | Codex API key |
|
|
233
|
+
| `CODEX_PROXY` | Codex proxy for `chatgpt.com` |
|
|
234
|
+
| `CODEBUDDY_CLI_PATH` | CodeBuddy CLI path |
|
|
235
|
+
| `CODEBUDDY_TIMEOUT_MS` | CodeBuddy timeout |
|
|
236
|
+
| `CODEBUDDY_API_KEY` | CodeBuddy API key |
|
|
237
|
+
| `CODEBUDDY_AUTH_TOKEN` | CodeBuddy auth token |
|
|
238
|
+
|
|
239
|
+
#### Platform Credentials
|
|
240
|
+
|
|
241
|
+
| Variable | Description |
|
|
242
|
+
| ---------------------------- | ------------------------------------------ |
|
|
243
|
+
| `TELEGRAM_BOT_TOKEN` | Telegram bot token |
|
|
244
|
+
| `TELEGRAM_PROXY` | Telegram proxy URL |
|
|
245
|
+
| `TELEGRAM_ALLOWED_USER_IDS` | Telegram allowed user IDs |
|
|
246
|
+
| `FEISHU_APP_ID` | Feishu app ID |
|
|
247
|
+
| `FEISHU_APP_SECRET` | Feishu app secret |
|
|
248
|
+
| `FEISHU_ALLOWED_USER_IDS` | Feishu allowed user IDs |
|
|
249
|
+
| `QQ_BOT_APPID` | QQ bot app ID |
|
|
250
|
+
| `QQ_BOT_SECRET` | QQ bot app secret |
|
|
251
|
+
| `QQ_BOT_SANDBOX` | QQ sandbox mode (`1` / `true`) |
|
|
252
|
+
| `QQ_ALLOWED_USER_IDS` | QQ allowed user IDs |
|
|
253
|
+
| `DINGTALK_CLIENT_ID` | DingTalk client ID / AppKey |
|
|
254
|
+
| `DINGTALK_CLIENT_SECRET` | DingTalk client secret / AppSecret |
|
|
255
|
+
| `DINGTALK_CARD_TEMPLATE_ID` | DingTalk AI card template ID |
|
|
256
|
+
| `DINGTALK_ALLOWED_USER_IDS` | DingTalk allowed user IDs |
|
|
257
|
+
| `WEWORK_CORP_ID` | WeCom bot ID |
|
|
258
|
+
| `WEWORK_SECRET` | WeCom secret |
|
|
259
|
+
| `WEWORK_WS_URL` | WeCom WebSocket URL |
|
|
260
|
+
| `WEWORK_ALLOWED_USER_IDS` | WeCom allowed user IDs |
|
|
261
|
+
| `WORKBUDDY_ACCESS_TOKEN` | WorkBuddy OAuth access token |
|
|
262
|
+
| `WORKBUDDY_REFRESH_TOKEN` | WorkBuddy OAuth refresh token |
|
|
263
|
+
| `WORKBUDDY_USER_ID` | WorkBuddy user ID |
|
|
264
|
+
| `WORKBUDDY_BASE_URL` | WorkBuddy API base URL |
|
|
265
|
+
| `WORKBUDDY_ALLOWED_USER_IDS` | WorkBuddy allowed user IDs |
|
|
266
|
+
|
|
267
|
+
### Platform Setup
|
|
268
|
+
|
|
269
|
+
| Platform | Setup source |
|
|
270
|
+
| --------- | --------------------------------------------------------------- |
|
|
271
|
+
| Telegram | [@BotFather](https://t.me/BotFather) |
|
|
272
|
+
| Feishu | [Feishu Open Platform](https://open.feishu.cn/) |
|
|
273
|
+
| QQ | [QQ Open Platform](https://bot.q.qq.com/) |
|
|
274
|
+
| DingTalk | DingTalk Open Platform — enable bot Stream Mode |
|
|
275
|
+
| WeCom | [WeCom admin console](https://work.weixin.qq.com/) |
|
|
276
|
+
| WeChat | Run `open-im init` and select "WorkBuddy" for OAuth + binding |
|
|
277
|
+
|
|
278
|
+
**DingTalk notes:**
|
|
279
|
+
- Uses Stream Mode (receive) + OpenAPI (send)
|
|
280
|
+
- With `cardTemplateId`: AI assistant streaming cards; falls back to plain text on failure
|
|
281
|
+
- Custom bots and regular groups only support single text replies
|
|
282
|
+
- Startup/shutdown notifications are not sent to DingTalk
|
|
320
283
|
|
|
321
284
|
## Troubleshooting
|
|
322
285
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
**Codex shows `stream disconnected` or `error sending request`**: `chatgpt.com` is not reachable. Configure `tools.codex.proxy` or set `CODEX_PROXY`.
|
|
338
|
-
|
|
339
|
-
**CodeBuddy prompts for login**: run `codebuddy login` first. `open-im` does not read CodeBuddy login state from `~/.open-im/config.json`.
|
|
340
|
-
|
|
341
|
-
**WorkBuddy cannot connect**: run `open-im init` to re-authenticate. Tokens may expire — the client will attempt auto-reconnect, but if the refresh token is invalid, a fresh login is required.
|
|
342
|
-
|
|
343
|
-
**WorkBuddy WeChat KF not receiving messages**: ensure the WeChat KF binding was completed during `open-im init`. You can re-run init to generate a new binding link.
|
|
286
|
+
| Issue | Solution |
|
|
287
|
+
| ----- | -------- |
|
|
288
|
+
| Telegram not responding | Check network, add `proxy` or set `TELEGRAM_PROXY` |
|
|
289
|
+
| QQ cannot connect | Verify bot is created and `QQ_BOT_APPID` / `QQ_BOT_SECRET` are correct |
|
|
290
|
+
| QQ duplicate replies | Update to latest version |
|
|
291
|
+
| Feishu card errors | Use `/mode ask` or `/mode yolo` without card callbacks |
|
|
292
|
+
| WeCom no notifications | Send at least one message to the bot first |
|
|
293
|
+
| DingTalk cannot reply | Verify Stream Mode is enabled and credentials are correct |
|
|
294
|
+
| DingTalk no streaming | Custom bots only support plain text; configure `cardTemplateId` for AI assistant streaming |
|
|
295
|
+
| Codex `stream disconnected` | Configure `tools.codex.proxy` or `CODEX_PROXY` for `chatgpt.com` access |
|
|
296
|
+
| CodeBuddy asks for login | Run `codebuddy login` first |
|
|
297
|
+
| WorkBuddy cannot connect | Run `open-im init` to re-authenticate; tokens may expire |
|
|
298
|
+
| WorkBuddy WeChat not receiving | Re-run `open-im init` to generate new WeChat KF binding link |
|
|
344
299
|
|
|
345
300
|
## License
|
|
346
301
|
|