- 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:
Personal agents (unpublished, owned by a single user) intentionally have no access to channels. A personal agent sending a message to an org’s channel would be impersonating the organization — an audit hazard and a governance violation. Publishing an agent to an organization is how that agent earns the right to speak on the organization’s behalf through its channels.
This constraint applies uniformly: both
FeishuGateHook (approval routing) and completion notifications (agent-configured channel) respect the same org-identity boundary.
Supported platforms
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.