3.6 KiB
Spec: Feishu channel extension
Requirements
Requirement: Channel plugin availability
The system SHALL provide a Feishu chat channel as a Clawdbot extension plugin that can be installed and enabled without modifying core channel code.
Scenario: Plugin appears in onboarding catalog
- GIVEN a user runs
clawdbot onboardin a workspace that contains the Feishu plugin (local path) or can access it on npm - WHEN the user reaches the channel selection step
- THEN Feishu is listed as an installable channel plugin with a docs link
Requirement: Webhook endpoint and URL verification
The system SHALL accept Feishu event subscription callbacks over HTTP and complete the platform “request URL verification” handshake.
Scenario: URL verification succeeds
- GIVEN Feishu sends a
type="url_verification"callback payload with achallenge - WHEN Clawdbot receives the POST at the configured webhook path
- THEN the response status is
200and the response body is{"challenge":"<value>"}(JSON)
Requirement: Request validation
The system SHALL validate inbound callback requests before processing events.
Scenario: Invalid signature/token is rejected
- GIVEN a callback request with an invalid signature (encrypted mode) OR mismatched verification token (non-encrypted mode)
- WHEN the request is received
- THEN the request is rejected with
401and no message processing occurs
Requirement: Encrypted payload support
When configured with an encrypt key, the system SHALL decrypt payloads that use the encrypt envelope.
Scenario: Encrypted event is processed
- GIVEN a callback request containing an
encryptfield - WHEN the plugin is configured with the correct
encryptKey - THEN the decrypted JSON is used for URL verification and event handling
Requirement: Inbound message handling (DM)
The system SHALL process im.message.receive_v1 DMs and route them into the Clawdbot agent pipeline with DM security policies.
Scenario: Unknown DM triggers pairing flow
- GIVEN
channels.feishu.dm.policy="pairing" - AND a DM sender is not allowlisted and not previously paired
- WHEN the sender DMs the bot
- THEN the system records a pairing request and replies with a pairing code message
Requirement: Inbound message handling (groups)
The system SHALL process im.message.receive_v1 group messages with group allowlists and mention gating.
Scenario: Group message is mention-gated
- GIVEN
channels.feishu.groupPolicy="open"(or allowlisted group) - AND
requireMention=true - WHEN a group message arrives without mentioning the bot
- THEN the system ignores the message and does not invoke the agent
Requirement: Outbound text delivery
The system SHALL be able to send text messages to Feishu users and group chats.
Scenario: CLI message send delivers text
- GIVEN the user runs
clawdbot message send --to <feishu-target> --message "hi" - WHEN the target is a valid Feishu user (
open_id) or chat (chat_id) - THEN the plugin sends a Feishu API request that results in a visible message in the correct conversation
Requirement: Status and probe visibility
The system SHALL expose Feishu channel health via clawdbot channels status, including an active probe that validates credentials.
Scenario: Probe fails with actionable error
- GIVEN the plugin is enabled but credentials are invalid
- WHEN the user runs
clawdbot channels status --probe - THEN the Feishu channel shows
probe=errorwith an actionable message (e.g. token fetch failed)