@jimiford/webex 0.1.2 → 0.1.3
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 +46 -0
- package/openclaw.plugin.json +68 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -309,6 +309,52 @@ WEBHOOK_SECRET=your_webhook_secret
|
|
|
309
309
|
|
|
310
310
|
The plugin includes automatic retry with exponential backoff for rate-limited requests. Adjust `maxRetries` and `retryDelayMs` in config if needed.
|
|
311
311
|
|
|
312
|
+
## Security Considerations
|
|
313
|
+
|
|
314
|
+
When connecting a Webex bot to OpenClaw, keep these security implications in mind:
|
|
315
|
+
|
|
316
|
+
### Access Control
|
|
317
|
+
|
|
318
|
+
- **DM Policy**: The `dmPolicy` setting controls who can interact with your bot:
|
|
319
|
+
- `allow`: Anyone can message the bot and receive responses (use with caution)
|
|
320
|
+
- `deny`: The bot won't respond to direct messages
|
|
321
|
+
- `allowlisted`: Only users in the `allowFrom` list receive responses
|
|
322
|
+
- **Recommendation**: Use `allowlisted` in production and explicitly specify trusted users
|
|
323
|
+
|
|
324
|
+
### Bot Token Permissions
|
|
325
|
+
|
|
326
|
+
- The bot access token can read messages sent to the bot and send replies
|
|
327
|
+
- Keep your token secret — never commit it to version control
|
|
328
|
+
- Rotate tokens periodically via the [Webex Developer Portal](https://developer.webex.com)
|
|
329
|
+
|
|
330
|
+
### Webhook Security
|
|
331
|
+
|
|
332
|
+
- **Always use a webhook secret** in production to verify incoming requests
|
|
333
|
+
- The `webhookSecret` enables HMAC-SHA1 signature verification
|
|
334
|
+
- Without verification, attackers could send fake webhook payloads to your endpoint
|
|
335
|
+
|
|
336
|
+
### Network Exposure
|
|
337
|
+
|
|
338
|
+
- Your webhook endpoint must be publicly accessible for Webex to deliver messages
|
|
339
|
+
- Use HTTPS in production (required by Webex)
|
|
340
|
+
- Consider IP allowlisting if your infrastructure supports it
|
|
341
|
+
- For development, tools like ngrok create temporary public URLs
|
|
342
|
+
|
|
343
|
+
### OpenClaw Agent Access
|
|
344
|
+
|
|
345
|
+
- Messages received by the bot flow through your OpenClaw agent
|
|
346
|
+
- The agent has access to whatever tools you've configured (file access, web browsing, etc.)
|
|
347
|
+
- Treat bot conversations with the same security considerations as direct OpenClaw access
|
|
348
|
+
- Review your agent's tool permissions and workspace access
|
|
349
|
+
|
|
350
|
+
### Best Practices
|
|
351
|
+
|
|
352
|
+
1. Start with `dmPolicy: 'deny'` or `dmPolicy: 'allowlisted'` and explicitly allow trusted users
|
|
353
|
+
2. Always configure a `webhookSecret` for production deployments
|
|
354
|
+
3. Monitor bot activity through Webex admin tools and OpenClaw logs
|
|
355
|
+
4. Use separate bots for development and production environments
|
|
356
|
+
5. Regularly audit the `allowFrom` list
|
|
357
|
+
|
|
312
358
|
## License
|
|
313
359
|
|
|
314
360
|
MIT
|
package/openclaw.plugin.json
CHANGED
|
@@ -6,28 +6,90 @@
|
|
|
6
6
|
"configSchema": {
|
|
7
7
|
"type": "object",
|
|
8
8
|
"additionalProperties": false,
|
|
9
|
-
"properties": {
|
|
9
|
+
"properties": {
|
|
10
|
+
"enabled": {
|
|
11
|
+
"type": "boolean",
|
|
12
|
+
"description": "Enable the Webex channel",
|
|
13
|
+
"default": false
|
|
14
|
+
},
|
|
15
|
+
"token": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Webex bot access token from developer.webex.com"
|
|
18
|
+
},
|
|
19
|
+
"webhookUrl": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Public URL for receiving Webex webhooks"
|
|
22
|
+
},
|
|
23
|
+
"webhookSecret": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Secret for verifying webhook signatures (recommended)"
|
|
26
|
+
},
|
|
27
|
+
"dmPolicy": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"enum": ["allow", "deny", "allowlisted", "pairing"],
|
|
30
|
+
"description": "Policy for handling direct messages",
|
|
31
|
+
"default": "deny"
|
|
32
|
+
},
|
|
33
|
+
"allowFrom": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"items": { "type": "string" },
|
|
36
|
+
"description": "List of allowed person IDs or emails (when dmPolicy is allowlisted)"
|
|
37
|
+
},
|
|
38
|
+
"apiBaseUrl": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"description": "Custom Webex API base URL",
|
|
41
|
+
"default": "https://webexapis.com/v1"
|
|
42
|
+
},
|
|
43
|
+
"maxRetries": {
|
|
44
|
+
"type": "number",
|
|
45
|
+
"description": "Maximum retry attempts for failed API calls",
|
|
46
|
+
"default": 3
|
|
47
|
+
},
|
|
48
|
+
"retryDelayMs": {
|
|
49
|
+
"type": "number",
|
|
50
|
+
"description": "Delay between retries in milliseconds",
|
|
51
|
+
"default": 1000
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"required": ["token", "webhookUrl"]
|
|
10
55
|
},
|
|
11
56
|
"uiHints": {
|
|
12
57
|
"token": {
|
|
13
58
|
"label": "Bot Access Token",
|
|
14
59
|
"sensitive": true,
|
|
15
|
-
"placeholder": "Your Webex bot token"
|
|
60
|
+
"placeholder": "Your Webex bot token from developer.webex.com"
|
|
16
61
|
},
|
|
17
62
|
"webhookUrl": {
|
|
18
63
|
"label": "Webhook URL",
|
|
19
|
-
"placeholder": "https://your-domain.com/webhooks/webex"
|
|
64
|
+
"placeholder": "https://your-domain.com/webhooks/webex/default"
|
|
20
65
|
},
|
|
21
66
|
"webhookSecret": {
|
|
22
67
|
"label": "Webhook Secret",
|
|
23
68
|
"sensitive": true,
|
|
24
|
-
"placeholder": "
|
|
69
|
+
"placeholder": "Strong random secret for webhook verification"
|
|
25
70
|
},
|
|
26
71
|
"dmPolicy": {
|
|
27
|
-
"label": "DM Policy"
|
|
72
|
+
"label": "DM Policy",
|
|
73
|
+
"options": [
|
|
74
|
+
{ "value": "allow", "label": "Allow all" },
|
|
75
|
+
{ "value": "deny", "label": "Deny all" },
|
|
76
|
+
{ "value": "allowlisted", "label": "Allowlist only" },
|
|
77
|
+
{ "value": "pairing", "label": "Pairing required" }
|
|
78
|
+
]
|
|
28
79
|
},
|
|
29
80
|
"allowFrom": {
|
|
30
|
-
"label": "Allowed Senders"
|
|
81
|
+
"label": "Allowed Senders",
|
|
82
|
+
"placeholder": "Person ID or email address"
|
|
83
|
+
},
|
|
84
|
+
"apiBaseUrl": {
|
|
85
|
+
"label": "API Base URL",
|
|
86
|
+
"placeholder": "https://webexapis.com/v1"
|
|
87
|
+
},
|
|
88
|
+
"maxRetries": {
|
|
89
|
+
"label": "Max Retries"
|
|
90
|
+
},
|
|
91
|
+
"retryDelayMs": {
|
|
92
|
+
"label": "Retry Delay (ms)"
|
|
31
93
|
}
|
|
32
94
|
}
|
|
33
95
|
}
|