- Send outbound messages (status updates, artifacts, reports).
- Receive inbound messages (a user asks a question in a group chat; the agent answers).
- Gate sensitive tool calls behind a human approval, delivered as an interactive card.
Why channels are org-scoped
A channel is an organization’s identity in an external IM platform — not an individual’s hotline. When an agent posts a card to a Feishu group, the message carries the authority of the organization that configured the channel: the bot is registered to that organization’s Feishu tenant, the group members are peers inside that organization, and the approval / audit trail belongs to that organization. FIM One mirrors this mapping one-to-one:| FIM One | External IM platform |
|---|---|
| Organization | Feishu tenant / enterprise (and its admins) |
| Channel | A bot + group chat owned by that tenant |
| Org member | A person inside that tenant who can approve, receive notifications, or react to cards |
| Agent (org-published) | The AI worker acting on behalf of the organization |
FeishuGateHook (approval routing) and completion notifications (agent-configured channel) respect the same org-identity boundary.
Supported platforms
| Platform | Status | Inbound | Outbound | Approval card |
|---|---|---|---|---|
| Feishu (Lark) | GA | Yes | Yes | Yes (feishu_gate hook) |
| Slack | Planned | — | — | — |
| DingTalk | Planned | — | — | — |
How Channels interact with Hooks
Thefeishu_gate hook is the primary consumer of a Feishu channel. When an agent is about to call a tool marked requires_confirmation: true, the hook:
- Resolves the org’s active Feishu channel.
- Renders an interactive approval card with the tool name and arguments.
- Posts the card to the configured group chat (
chat_id). - Suspends the tool call until a group member taps Approve or Reject.
- Resumes (or aborts) the tool based on the verdict, and streams the decision back over SSE.
model_config_json.hooks.class_hooks = ["feishu_gate"], or toggle it in the agent editor.
Creating a Channel
- Sign in as an Org Owner or Admin.
- Go to Organization Settings → Channels → New Channel.
- Pick a channel type (e.g. Feishu), fill in credentials, pick a target chat, and save.
- Click Send test message to verify the bidirectional wiring.
Security notes
- App secrets and encrypt keys are encrypted at rest using the backend’s
FERNET_SECRET_KEY. - The callback endpoint (
/api/channels/{id}/callback) verifies every signature against the storedencrypt_key/verification_tokenbefore acting on the event. - Only members of the target group chat can approve or reject an approval card — FIM One does not grant extra authority beyond what the messaging platform already gives them.