openclaw-channel-dmwork 0.6.0-dev.0079778d → 0.6.0-dev.0280c334
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/dist/cli/bind.js +50 -40
- package/dist/cli/bind.js.map +1 -1
- package/dist/cli/quickstart.d.ts +0 -2
- package/dist/cli/quickstart.js +33 -75
- package/dist/cli/quickstart.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
- package/skills/dmwork-bot-api/SKILL.md +22 -39
package/dist/cli/bind.js
CHANGED
|
@@ -34,18 +34,38 @@ export async function runBind(opts) {
|
|
|
34
34
|
cfg.channels.dmwork = {};
|
|
35
35
|
if (!cfg.channels.dmwork.accounts)
|
|
36
36
|
cfg.channels.dmwork.accounts = {};
|
|
37
|
-
// 4.
|
|
38
|
-
|
|
37
|
+
// 4. Register once, store full result for config + greeting
|
|
38
|
+
let botName = "";
|
|
39
|
+
let ownerUID = "";
|
|
40
|
+
try {
|
|
41
|
+
const regResp = await fetch(`${opts.apiUrl.replace(/\/+$/, "")}/v1/bot/register`, {
|
|
42
|
+
method: "POST",
|
|
43
|
+
headers: { "Authorization": `Bearer ${opts.botToken}`, "Content-Type": "application/json" },
|
|
44
|
+
body: "{}",
|
|
45
|
+
signal: AbortSignal.timeout(10000),
|
|
46
|
+
});
|
|
47
|
+
if (regResp.ok) {
|
|
48
|
+
const regData = await regResp.json();
|
|
49
|
+
botName = regData.name ?? "";
|
|
50
|
+
ownerUID = regData.owner_uid ?? "";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch { /* best-effort */ }
|
|
54
|
+
// 5. Write account config
|
|
55
|
+
const accountConfig = {
|
|
39
56
|
botToken: opts.botToken,
|
|
40
57
|
apiUrl: opts.apiUrl,
|
|
41
58
|
};
|
|
42
|
-
|
|
59
|
+
if (botName)
|
|
60
|
+
accountConfig.name = botName;
|
|
61
|
+
cfg.channels.dmwork.accounts[opts.accountId] = accountConfig;
|
|
62
|
+
// 6. Set dmScope (multi-bot isolation)
|
|
43
63
|
if (!cfg.session)
|
|
44
64
|
cfg.session = {};
|
|
45
65
|
if (!cfg.session.dmScope) {
|
|
46
66
|
cfg.session.dmScope = RECOMMENDED_DM_SCOPE;
|
|
47
67
|
}
|
|
48
|
-
//
|
|
68
|
+
// 7. Add or update binding
|
|
49
69
|
if (!cfg.bindings)
|
|
50
70
|
cfg.bindings = [];
|
|
51
71
|
const existingIdx = cfg.bindings.findIndex((b) => b.match?.channel === "dmwork" && b.match?.accountId === opts.accountId);
|
|
@@ -58,46 +78,36 @@ export async function runBind(opts) {
|
|
|
58
78
|
match: { channel: "dmwork", accountId: opts.accountId },
|
|
59
79
|
});
|
|
60
80
|
}
|
|
61
|
-
//
|
|
81
|
+
// 8. Atomic write
|
|
62
82
|
writeConfigAtomic(cfg);
|
|
63
|
-
|
|
64
|
-
|
|
83
|
+
const displayLabel = botName || opts.accountId;
|
|
84
|
+
console.log(`Bot "${displayLabel}" (${opts.accountId}) configured and bound to agent "${opts.agent}".`);
|
|
85
|
+
// 9. Wait for channel hot-reload
|
|
65
86
|
console.log("Waiting for DMWork channel to reload...");
|
|
66
87
|
await new Promise((r) => setTimeout(r, 2000));
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
channel_id: data.owner_uid,
|
|
90
|
-
channel_type: 1,
|
|
91
|
-
payload: { type: 1, content: `你好!我是 ${data.robot_id ?? opts.accountId},已上线 👋` },
|
|
92
|
-
}),
|
|
93
|
-
signal: AbortSignal.timeout(10000),
|
|
94
|
-
});
|
|
95
|
-
console.log(`Greeting sent to owner (${data.owner_uid}).`);
|
|
96
|
-
}
|
|
88
|
+
// 10. Send greeting to bot owner (reuse register data from step 4)
|
|
89
|
+
if (ownerUID) {
|
|
90
|
+
console.log("Sending greeting to bot owner...");
|
|
91
|
+
try {
|
|
92
|
+
const greetName = botName || displayLabel;
|
|
93
|
+
await fetch(`${opts.apiUrl.replace(/\/+$/, "")}/v1/bot/sendMessage`, {
|
|
94
|
+
method: "POST",
|
|
95
|
+
headers: {
|
|
96
|
+
"Authorization": `Bearer ${opts.botToken}`,
|
|
97
|
+
"Content-Type": "application/json",
|
|
98
|
+
},
|
|
99
|
+
body: JSON.stringify({
|
|
100
|
+
channel_id: ownerUID,
|
|
101
|
+
channel_type: 1,
|
|
102
|
+
payload: { type: 1, content: `你好!我是 ${greetName},已上线 👋` },
|
|
103
|
+
}),
|
|
104
|
+
signal: AbortSignal.timeout(10000),
|
|
105
|
+
});
|
|
106
|
+
console.log(`Greeting sent to owner (${ownerUID}).`);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
console.log("Could not send greeting. Please test connectivity by sending a message to the bot in DMWork.");
|
|
97
110
|
}
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
console.log("Could not send greeting. Please test connectivity by sending a message to the bot in DMWork.");
|
|
101
111
|
}
|
|
102
112
|
console.log("\nBind complete! Please send a message to the bot in DMWork to verify the connection.");
|
|
103
113
|
}
|
package/dist/cli/bind.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../../cli/bind.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AASpB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAiB;IAC7C,oBAAoB,EAAE,CAAC;IAEvB,wCAAwC;IACxC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,uDAAuD,CAAC,CAAC;QACnH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,MAAM,GAAG,GAAwB,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM;QAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ;QAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;IAErE,
|
|
1
|
+
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../../cli/bind.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/quickstart.d.ts
CHANGED
|
@@ -12,6 +12,4 @@ export interface QuickstartOptions {
|
|
|
12
12
|
apiKey: string;
|
|
13
13
|
apiUrl: string;
|
|
14
14
|
}
|
|
15
|
-
/** Normalize agent id to a valid bot username, matching server-side rules. */
|
|
16
|
-
export declare function normalizeUsername(agentId: string): string;
|
|
17
15
|
export declare function runQuickstart(opts: QuickstartOptions): Promise<void>;
|
package/dist/cli/quickstart.js
CHANGED
|
@@ -10,17 +10,6 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { isHealthyInstall, readConfigFromFile, writeConfigAtomic, runOpenclaw, } from "./openclaw-cli.js";
|
|
12
12
|
import { RECOMMENDED_DM_SCOPE, ensureOpenClawCompat, } from "./utils.js";
|
|
13
|
-
/** Normalize agent id to a valid bot username, matching server-side rules. */
|
|
14
|
-
export function normalizeUsername(agentId) {
|
|
15
|
-
let base = agentId.trim().toLowerCase();
|
|
16
|
-
base = base.replace(/_bot$/, "");
|
|
17
|
-
base = base.replace(/[^a-z0-9_]/g, "");
|
|
18
|
-
if (!base)
|
|
19
|
-
base = "agent"; // fallback for all-non-alphanumeric input
|
|
20
|
-
if (base.length > 17)
|
|
21
|
-
base = base.slice(0, 17); // leave room for _2_bot/_3_bot
|
|
22
|
-
return `${base}_bot`;
|
|
23
|
-
}
|
|
24
13
|
export async function runQuickstart(opts) {
|
|
25
14
|
ensureOpenClawCompat();
|
|
26
15
|
// 1. Pre-flight: plugin must be healthy
|
|
@@ -63,85 +52,52 @@ export async function runQuickstart(opts) {
|
|
|
63
52
|
const apiBase = opts.apiUrl.replace(/\/+$/, "");
|
|
64
53
|
const results = [];
|
|
65
54
|
for (const agent of agents) {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
body: JSON.stringify({
|
|
81
|
-
username,
|
|
82
|
-
name: agent.name || agent.id,
|
|
83
|
-
}),
|
|
84
|
-
signal: AbortSignal.timeout(15000),
|
|
85
|
-
});
|
|
86
|
-
const text = await resp.text().catch(() => "");
|
|
87
|
-
if (resp.ok) {
|
|
88
|
-
const data = JSON.parse(text);
|
|
89
|
-
results.push({
|
|
90
|
-
agentId: agent.id,
|
|
91
|
-
robotId: data.robot_id,
|
|
92
|
-
botToken: data.bot_token,
|
|
93
|
-
name: data.name,
|
|
94
|
-
status: "ok",
|
|
95
|
-
});
|
|
96
|
-
console.log(` Created bot: ${data.robot_id} → agent ${agent.id}`);
|
|
97
|
-
created = true;
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
// Username conflict: 409 (new server) or 400 with "已被占用"/"occupied" (old server)
|
|
101
|
-
const isUsernameConflict = resp.status === 409 ||
|
|
102
|
-
(resp.status === 400 && /已被占用|occupied/i.test(text));
|
|
103
|
-
if (isUsernameConflict) {
|
|
104
|
-
console.log(` ${username} already occupied, trying next...`);
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
const errMsg = `HTTP ${resp.status}: ${text.slice(0, 200)}`;
|
|
108
|
-
console.error(` ${agent.id}: ${errMsg}`);
|
|
55
|
+
const displayName = agent.name || agent.id;
|
|
56
|
+
try {
|
|
57
|
+
const resp = await fetch(`${apiBase}/v1/user/bots`, {
|
|
58
|
+
method: "POST",
|
|
59
|
+
headers: {
|
|
60
|
+
"Authorization": `Bearer ${opts.apiKey}`,
|
|
61
|
+
"Content-Type": "application/json",
|
|
62
|
+
},
|
|
63
|
+
body: JSON.stringify({ name: displayName }),
|
|
64
|
+
signal: AbortSignal.timeout(15000),
|
|
65
|
+
});
|
|
66
|
+
const text = await resp.text().catch(() => "");
|
|
67
|
+
if (resp.ok) {
|
|
68
|
+
const data = JSON.parse(text);
|
|
109
69
|
results.push({
|
|
110
70
|
agentId: agent.id,
|
|
111
|
-
robotId:
|
|
112
|
-
botToken:
|
|
113
|
-
name:
|
|
114
|
-
status: "
|
|
115
|
-
error: errMsg,
|
|
71
|
+
robotId: data.robot_id,
|
|
72
|
+
botToken: data.bot_token,
|
|
73
|
+
name: data.name,
|
|
74
|
+
status: "ok",
|
|
116
75
|
});
|
|
117
|
-
|
|
118
|
-
break;
|
|
76
|
+
console.log(` Created bot: ${data.name} (${data.robot_id}) → agent ${agent.id}`);
|
|
119
77
|
}
|
|
120
|
-
|
|
121
|
-
const errMsg =
|
|
78
|
+
else {
|
|
79
|
+
const errMsg = `HTTP ${resp.status}: ${text.slice(0, 200)}`;
|
|
122
80
|
console.error(` ${agent.id}: ${errMsg}`);
|
|
123
81
|
results.push({
|
|
124
82
|
agentId: agent.id,
|
|
125
|
-
robotId:
|
|
83
|
+
robotId: "",
|
|
126
84
|
botToken: "",
|
|
127
|
-
name:
|
|
85
|
+
name: displayName,
|
|
128
86
|
status: "failed",
|
|
129
87
|
error: errMsg,
|
|
130
88
|
});
|
|
131
|
-
created = true;
|
|
132
|
-
break;
|
|
133
89
|
}
|
|
134
90
|
}
|
|
135
|
-
|
|
136
|
-
const
|
|
137
|
-
console.error(` ${agent.id}:
|
|
91
|
+
catch (err) {
|
|
92
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
93
|
+
console.error(` ${agent.id}: ${errMsg}`);
|
|
138
94
|
results.push({
|
|
139
95
|
agentId: agent.id,
|
|
140
|
-
robotId:
|
|
96
|
+
robotId: "",
|
|
141
97
|
botToken: "",
|
|
142
|
-
name:
|
|
98
|
+
name: displayName,
|
|
143
99
|
status: "failed",
|
|
144
|
-
error:
|
|
100
|
+
error: errMsg,
|
|
145
101
|
});
|
|
146
102
|
}
|
|
147
103
|
}
|
|
@@ -173,6 +129,7 @@ export async function runQuickstart(opts) {
|
|
|
173
129
|
cfg.channels.dmwork.accounts[bot.robotId] = {
|
|
174
130
|
botToken: bot.botToken,
|
|
175
131
|
apiUrl: opts.apiUrl,
|
|
132
|
+
name: bot.name,
|
|
176
133
|
};
|
|
177
134
|
// Binding
|
|
178
135
|
const existingIdx = cfg.bindings.findIndex((b) => b.match?.channel === "dmwork" && b.match?.accountId === bot.robotId);
|
|
@@ -211,6 +168,7 @@ export async function runQuickstart(opts) {
|
|
|
211
168
|
if (regResp.ok) {
|
|
212
169
|
const data = await regResp.json();
|
|
213
170
|
if (data.owner_uid) {
|
|
171
|
+
const greetName = data.name || bot.name;
|
|
214
172
|
await fetch(`${apiBase}/v1/bot/sendMessage`, {
|
|
215
173
|
method: "POST",
|
|
216
174
|
headers: {
|
|
@@ -220,7 +178,7 @@ export async function runQuickstart(opts) {
|
|
|
220
178
|
body: JSON.stringify({
|
|
221
179
|
channel_id: data.owner_uid,
|
|
222
180
|
channel_type: 1,
|
|
223
|
-
payload: { type: 1, content: `你好!我是 ${
|
|
181
|
+
payload: { type: 1, content: `你好!我是 ${greetName},已上线 👋` },
|
|
224
182
|
}),
|
|
225
183
|
signal: AbortSignal.timeout(10000),
|
|
226
184
|
});
|
|
@@ -241,7 +199,7 @@ export async function runQuickstart(opts) {
|
|
|
241
199
|
}
|
|
242
200
|
console.log();
|
|
243
201
|
for (const bot of successful) {
|
|
244
|
-
console.log(` ✅ ${bot.agentId} → ${bot.robotId}`);
|
|
202
|
+
console.log(` ✅ ${bot.agentId} → ${bot.name} (${bot.robotId})`);
|
|
245
203
|
}
|
|
246
204
|
for (const bot of failed) {
|
|
247
205
|
console.log(` ❌ ${bot.agentId} → ${bot.error}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../cli/quickstart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAqBpB,
|
|
1
|
+
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../cli/quickstart.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
package/dist/src/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PLUGIN_VERSION = "0.6.0-dev.
|
|
1
|
+
export declare const PLUGIN_VERSION = "0.6.0-dev.0280c334";
|
package/dist/src/version.js
CHANGED
package/package.json
CHANGED
|
@@ -27,7 +27,8 @@ curl -X POST <apiUrl>/v1/bot/register \
|
|
|
27
27
|
Response:
|
|
28
28
|
```json
|
|
29
29
|
{
|
|
30
|
-
"robot_id": "
|
|
30
|
+
"robot_id": "27ba6or9NU_bot",
|
|
31
|
+
"name": "My Bot",
|
|
31
32
|
"im_token": "xxxxxx",
|
|
32
33
|
"ws_url": "<wsUrl>",
|
|
33
34
|
"api_url": "<apiUrl>",
|
|
@@ -59,42 +60,25 @@ After registering, send a greeting to your owner (DM to owner_uid) to confirm yo
|
|
|
59
60
|
|
|
60
61
|
### Method A: OpenClaw Plugin (Recommended — Real-time)
|
|
61
62
|
|
|
62
|
-
Install the pre-built adapter
|
|
63
|
+
Install the pre-built adapter for instant message delivery, real-time online status, and auto-reconnect.
|
|
63
64
|
|
|
65
|
+
**Install plugin:**
|
|
64
66
|
```bash
|
|
65
|
-
|
|
66
|
-
openclaw plugins install openclaw-channel-dmwork
|
|
67
|
+
npx -y openclaw-channel-dmwork install
|
|
67
68
|
```
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
{
|
|
73
|
-
"channels": {
|
|
74
|
-
"dmwork": {
|
|
75
|
-
"botToken": "YOUR_BOT_TOKEN",
|
|
76
|
-
"apiUrl": "<apiUrl>"
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
70
|
+
**Single bot — bind to agent:**
|
|
71
|
+
```bash
|
|
72
|
+
npx -y openclaw-channel-dmwork bind --bot-token YOUR_BOT_TOKEN --api-url <apiUrl> --account-id <robot_id> --agent <agent_id>
|
|
80
73
|
```
|
|
81
74
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
"channels": {
|
|
87
|
-
"dmwork": {
|
|
88
|
-
"apiUrl": "<apiUrl>",
|
|
89
|
-
"accounts": {
|
|
90
|
-
"bot-a": { "botToken": "TOKEN_A" },
|
|
91
|
-
"bot-b": { "botToken": "TOKEN_B" }
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
75
|
+
**All agents — one-click setup:**
|
|
76
|
+
```bash
|
|
77
|
+
npx -y openclaw-channel-dmwork quickstart --api-key uk_YOUR_KEY --api-url <apiUrl>
|
|
96
78
|
```
|
|
97
79
|
|
|
80
|
+
The CLI automatically writes `~/.openclaw/openclaw.json` config and agent bindings. No manual config editing needed.
|
|
81
|
+
|
|
98
82
|
### Multi-Agent Setup Guide
|
|
99
83
|
|
|
100
84
|
When one owner creates multiple bots (e.g. via BotFather /newbot), each bot can be connected to a separate AI Agent. Each bot gets its own accountId in the OpenClaw config with independent settings.
|
|
@@ -920,13 +904,10 @@ Each API Key is bound to a specific Space. When you run /quickstart in a Space,
|
|
|
920
904
|
|
|
921
905
|
### Quickstart Flow
|
|
922
906
|
|
|
923
|
-
1. Get your User API Key from BotFather
|
|
924
|
-
2.
|
|
925
|
-
3.
|
|
926
|
-
4.
|
|
927
|
-
5. Configure openclaw.json with the bot_token and apiUrl
|
|
928
|
-
6. Set session.dmScope to "per-account-channel-peer"
|
|
929
|
-
7. Verify the bot is online
|
|
907
|
+
1. Get your User API Key from BotFather `/quickstart` command (key is bound to your current Space)
|
|
908
|
+
2. Run `npx -y openclaw-channel-dmwork quickstart --api-key <key> --api-url <apiUrl>`
|
|
909
|
+
3. The CLI automatically creates bots for all agents, writes config, and sends greetings
|
|
910
|
+
4. Verify by sending a message to the bot in DMWork
|
|
930
911
|
|
|
931
912
|
### Endpoints
|
|
932
913
|
|
|
@@ -944,14 +925,16 @@ Each API Key is bound to a specific Space. When you run /quickstart in a Space,
|
|
|
944
925
|
curl -X POST <apiUrl>/v1/user/bots \
|
|
945
926
|
-H "Authorization: Bearer uk_YOUR_API_KEY" \
|
|
946
927
|
-H "Content-Type: application/json" \
|
|
947
|
-
-d '{"name": "My Bot", "
|
|
928
|
+
-d '{"name": "My Bot", "description": "A helpful assistant"}'
|
|
948
929
|
```
|
|
949
930
|
|
|
931
|
+
Note: Bot ID (robot_id) is auto-generated by the server. The username field is deprecated and ignored if provided.
|
|
932
|
+
|
|
950
933
|
Response:
|
|
951
934
|
```json
|
|
952
935
|
{
|
|
953
|
-
"robot_id": "
|
|
954
|
-
"username": "
|
|
936
|
+
"robot_id": "27ba6or9NU_bot",
|
|
937
|
+
"username": "27ba6or9NU_bot",
|
|
955
938
|
"name": "My Bot",
|
|
956
939
|
"description": "A helpful assistant",
|
|
957
940
|
"bot_token": "bf_xxxxxxxx"
|