channels block in config.json.
DingTalk
DingTalk
DingTalk (钉钉) is a widely-used enterprise communication platform by Alibaba. Operator integrates via the DingTalk Stream Mode SDK, which opens a persistent outbound connection — no public webhook URL is required.Responses are sent as Markdown cards using the session webhook provided with each inbound message. The channel supports both private (1-on-1) and group conversations.Group chats: Configure
group_trigger to control when the bot responds. By default it responds to all messages; set mention_only to require an @mention.Setup:- Go to the DingTalk Open Platform and log in with your enterprise account.
- Create an Internal Enterprise Application.
- Under App Credentials, copy the Client ID (AppKey) and Client Secret (AppSecret).
- Under Add Capabilities, add the Bot capability.
- Configure the bot’s messaging scope as needed, then publish the app.
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Yes | Activate the DingTalk channel |
client_id | string | Yes | DingTalk App Client ID (AppKey) |
client_secret | string | Yes | DingTalk App Client Secret (AppSecret) |
allow_from | array | No | Sender IDs allowed to message the agent |
reasoning_channel_id | string | No | Chat ID for routing reasoning traces |
DingTalk’s message length limit is 20,000 characters. Operator splits longer responses automatically.
Feishu / Lark
Feishu / Lark
Feishu (飞书, also marketed as Lark internationally) is an enterprise collaboration suite by ByteDance. Operator connects via the Feishu WebSocket SDK, receiving events over a persistent connection without requiring a public webhook endpoint.Responses are sent as Interactive Card JSON 2.0 with a
markdown element, supporting full CommonMark syntax including code blocks, tables, and inline formatting.Setup:- Go to the Feishu Developer Console and create a Custom App.
- Under Credentials and Basic Info, copy the App ID (starts with
cli_) and App Secret. - Under Permissions & Scopes, grant:
im:message(receive/send messages)im:message.group_at_msg(receive @mentions in groups)
- Under Event Subscriptions, switch the receive method to Using persistent connection (WebSocket mode).
- Create an app version and publish it to your workspace.
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Yes | Activate the Feishu channel |
app_id | string | Yes | Feishu App ID (starts with cli_) |
app_secret | string | Yes | Feishu App Secret |
encrypt_key | string | No | Encryption key if message encryption is enabled |
verification_token | string | No | Verification token for webhook validation |
allow_from | array | No | Feishu user open IDs allowed to message the agent |
reasoning_channel_id | string | No | Chat ID for routing reasoning traces |
Feishu has two build variants (
feishu_32.go / feishu_64.go) selected at compile time based on the target architecture. The functionality is identical.LINE
LINE
LINE is a dominant messaging app in Japan, Taiwan, and Southeast Asia. Operator uses the LINE Messaging API with a webhook for receiving messages and the Reply/Push APIs for sending.When a message arrives, Operator stores the reply token (valid ~25 seconds) and uses the free Reply API for fast responses. If the agent takes longer, it falls back to the Push API automatically.The channel also implements
StartTyping via LINE’s loading animation, which is shown in 1-on-1 chats while the agent processes. Group and room chats do not support the loading animation.Setup:- Go to the LINE Developers Console and create a Provider.
- Create a Messaging API channel under the provider.
- Under Basic settings, copy your Channel Secret.
- Under Messaging API, generate a Channel Access Token (long-lived).
- Set your Webhook URL to
https://your-server/webhook/lineand enable Use webhook. - Operator must be reachable over HTTPS for LINE to deliver webhooks (use Cloudflare Tunnel, ngrok, or a reverse proxy).
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Yes | Activate the LINE channel |
channel_secret | string | Yes | LINE Channel Secret for webhook signature verification |
channel_access_token | string | Yes | Long-lived Channel Access Token for API calls |
webhook_path | string | No | Webhook path on the Operator HTTP server (default: /webhook/line) |
allow_from | array | No | LINE user IDs allowed to message the agent |
reasoning_channel_id | string | No | Chat ID for routing reasoning traces |
LINE’s message length limit is 5,000 characters. Sending media files requires a publicly accessible URL; the current implementation sends the filename/caption as text for locally generated files.
QQ
The QQ channel integrates with the Tencent QQ Open Platform using the official
botgo SDK over WebSocket. The bot connects to QQ’s gateway and receives events for C2C (user-to-bot) messages and group @mentions.Note: QQ’s open platform requires bot applications to go through a developer verification process. Group messages only trigger the agent when the bot is @mentioned.Setup:- Go to the QQ Open Platform and register a developer account.
- Create a QQ Bot application and complete the identity verification.
- Copy the App ID and App Secret from the application dashboard.
- Invite the bot to a group or use the C2C interface for direct messages.
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Yes | Activate the QQ channel |
app_id | string | Yes | App ID from the QQ Open Platform |
app_secret | string | Yes | App Secret from the QQ Open Platform |
allow_from | array | No | QQ user IDs allowed to message the agent |
reasoning_channel_id | string | No | Chat ID for routing reasoning traces |
The QQ channel requires
@mention in group chats to trigger the agent. This is enforced by the QQ platform for bot messages.OneBot
OneBot
OneBot is an open chatbot standard (V11) used by QQ protocol bridges such as go-cqhttp, Lagrange, NapCatQQ, and others. Operator connects to the bridge as a WebSocket client, receiving events and sending API requests over the same connection.The channel supports:
- Private messages and group messages
- Images, video, audio (
record), and file downloads from message segments - Emoji reaction (
ReactToMessage) on group messages using emoji ID 289 (👀 equivalent) while processing - Media sending via the
SendMediainterface usingfile://local paths - Automatic reconnection at a configurable interval
- Deploy a OneBot V11-compatible bridge (go-cqhttp, Lagrange, NapCatQQ, etc.).
- Configure the bridge to expose a WebSocket Server (not reverse WebSocket). Example address:
ws://127.0.0.1:3001. - If the bridge requires authentication, set
access_token.
| Field | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Yes | Activate the OneBot channel |
ws_url | string | Yes | WebSocket URL of the OneBot V11 server |
access_token | string | No | Bearer token for authenticating with the bridge |
reconnect_interval | integer | No | Seconds between reconnect attempts when disconnected. Set 0 to disable auto-reconnect (default: 5) |
group_trigger_prefix | array | No | Message prefixes that trigger the bot in group chats (alternative to mention_only) |
allow_from | array | No | QQ user IDs allowed to message the agent |
reasoning_channel_id | string | No | Chat ID for routing reasoning traces |
Chat IDs in OneBot use a
group:{id} or private:{id} prefix internally. Replies in group chats automatically include a reply reference to the original message.WeCom
WeCom
WeCom (企业微信, Enterprise WeChat) offers three distinct integration modes. All three use webhook-based message delivery and require Operator to be reachable over HTTPS (or HTTP on an internal network) for the WeCom servers to call back.Choose the mode that fits your deployment:
WeCom Group Bot (
The simplest mode. The bot lives in a WeCom group chat. Messages are delivered to Operator via a signed XML webhook, and replies are posted back via the group’s webhook URL.Setup:
WeCom Custom App (
A self-built (自建) application with full API access. Supports private 1-on-1 messaging with enterprise users and proactive message sending. Requires
WeCom AI Bot (
The official WeCom AI Bot (智能机器人) integration. Supports streaming responses via a pull protocol that sidesteps the standard 5-second webhook reply deadline. If the agent’s response takes longer than ~30 seconds, Operator automatically switches from the streaming push channel to an asynchronous
| Mode | Config key | Group support | Proactive messaging | Notes |
|---|---|---|---|---|
| Group Bot | wecom | Yes | Webhook only | Easiest setup |
| Custom App | wecom_app | No | Yes | Private 1-on-1, full API access |
| AI Bot | wecom_aibot | Yes | Yes | Official AI integration with streaming |
WeCom Group Bot (wecom)
The simplest mode. The bot lives in a WeCom group chat. Messages are delivered to Operator via a signed XML webhook, and replies are posted back via the group’s webhook URL.Setup:- In the WeCom Admin Console, go to Apps → Group Chat Bots → Add Bot.
- Copy the Webhook URL (
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=...). - Under the bot’s callback settings, generate a Token and EncodingAESKey.
- Set the callback URL to your Operator webhook endpoint.
| Field | Type | Required | Description |
|---|---|---|---|
token | string | Yes | WeCom callback verification token |
encoding_aes_key | string | Yes | 43-character message encryption/decryption key |
webhook_url | string | Yes | Group bot webhook send URL from WeCom console |
webhook_path | string | No | Local HTTP path to receive events (default: /webhook/wecom) |
allow_from | array | No | WeCom user IDs allowed to message the agent |
reply_timeout | integer | No | Seconds to wait for reply delivery (default: 5) |
reasoning_channel_id | string | No | Chat ID for routing reasoning traces |
WeCom Custom App (wecom_app)
A self-built (自建) application with full API access. Supports private 1-on-1 messaging with enterprise users and proactive message sending. Requires corp_id, corp_secret, and agent_id.Setup:- In the WeCom Admin Console, go to App Management → Create App.
- Copy the AgentId and Secret from the app details.
- Under Receive Message → Set API, set the callback URL to
http://your-server/webhook/wecom-app. - Generate a Token and EncodingAESKey from the interface.
- Copy your Corp ID from My Company settings.
| Field | Type | Required | Description |
|---|---|---|---|
corp_id | string | Yes | Enterprise ID from WeCom Admin → My Company |
corp_secret | string | Yes | App-specific secret key |
agent_id | integer | Yes | App internal agent ID |
token | string | Yes | API callback verification token |
encoding_aes_key | string | Yes | 43-character encryption key |
webhook_path | string | No | Local HTTP path to receive events (default: /webhook/wecom-app) |
allow_from | array | No | WeCom user IDs allowed to message the agent |
reply_timeout | integer | No | Seconds to wait for reply delivery (default: 5) |
WeCom AI Bot (wecom_aibot)
The official WeCom AI Bot (智能机器人) integration. Supports streaming responses via a pull protocol that sidesteps the standard 5-second webhook reply deadline. If the agent’s response takes longer than ~30 seconds, Operator automatically switches from the streaming push channel to an asynchronous response_url delivery.Setup:- In the WeCom Admin Console, go to App Management → AI Bot.
- Configure the callback URL:
http://your-server/webhook/wecom-aibot. - Copy the Token and click Random Generate for the EncodingAESKey.
| Field | Type | Required | Description |
|---|---|---|---|
token | string | Yes | App callback verification token |
encoding_aes_key | string | Yes | 43-character symmetric encryption key |
webhook_path | string | No | Local HTTP path (default: /webhook/wecom-aibot) |
max_steps | integer | No | Maximum agent tool-use iterations per message (default: 10) |
welcome_message | string | No | Greeting sent automatically when a new chat opens |
reasoning_channel_id | string | No | Chat ID for routing reasoning traces |
Standard (WebSocket API)
Standard (WebSocket API)
The
standard channel exposes a local WebSocket endpoint that any external client can connect to. This is useful for custom integrations, testing, or embedding the agent in your own application.The gateway listens for WebSocket connections on the configured gateway.host:gateway.port. Clients authenticate using the token value either via the Authorization: Bearer <token> header or (if allow_token_query is true) the ?token= query parameter.| Field | Type | Default | Description |
|---|---|---|---|
token | string | — | Secret token clients must present to authenticate |
allow_token_query | boolean | false | Allow passing token via ?token= query parameter |
allow_origins | array | [] | CORS allowed origins. Empty allows all. |
ping_interval | integer | 30 | WebSocket ping interval in seconds |
read_timeout | integer | 60 | Read timeout in seconds |
write_timeout | integer | 10 | Write timeout in seconds |
max_connections | integer | 100 | Maximum simultaneous connections |
allow_from | array | [] | Restrict to specific client identifiers |