channels-src/discord/README.md
WASM channel for Discord integration - handle slash commands and button interactions via webhooks.
Create a Discord Application at https://discord.com/developers/applications
Create a Bot and get the token
Set up Interactions URL to point to your IronClaw instance
Copy the Application ID and Public Key
Store in IronClaw secrets:
ironclaw secret set discord_bot_token YOUR_BOT_TOKEN
Note: The discord_bot_token secret is used for Discord REST API calls.
Interaction signature verification is performed inside the Discord channel
module and uses the channel config field webhook_secret (set this to your
Discord app public key hex).
curl -X POST \
-H "Authorization: Bot YOUR_BOT_TOKEN" \
-H "Content-Type: application/json" \
https://discord.com/api/v10/applications/YOUR_APP_ID/commands \
-d '{
"name": "ask",
"description": "Ask the AI agent",
"options": [{
"name": "question",
"description": "Your question",
"type": 3,
"required": true
}]
}'
In your Discord app settings, set:
https://your-ironclaw.com/webhook/discordUser types: /ask question: What is the weather?
The agent receives:
User: @username
Content: /ask question: What is the weather?
When a user clicks a button in a message, the agent receives:
User: @username
Content: [Button clicked] Original message content
If an internal error occurs (e.g., metadata serialization failure), the tool attempts to send an ephemeral message to the user:
❌ Internal Error: Failed to process command metadata.
Check the host logs for detailed error information.
The Discord channel can also poll configured channels for @bot mentions.
Example channel config:
{
"require_signature_verification": true,
"webhook_secret": "YOUR_DISCORD_PUBLIC_KEY_HEX",
"polling_enabled": true,
"poll_interval_ms": 30000,
"mention_channel_ids": ["123456789012345678"],
"owner_id": null,
"dm_policy": "pairing",
"allow_from": []
}
owner_id: when set, only that Discord user can interact with the bot.dm_policy: open allows all DMs; pairing requires approval.allow_from: allowlist entries for DM pairing checks (*, user id, or username).To send embeds, include an embeds array in the metadata_json field of the agent's response. The structure should match the Discord API embed object.
webhook_secret is set to your Discord app public key hex in the
Discord channel config.require_signature_verification is true and webhook_secret is empty,
the channel returns HTTP 500 with a configuration error.discord_bot_token is set correctly in IronClaw secrets.interactions_endpoint_url might be unreachable.cd channels-src/discord
cargo build --target wasm32-wasi --release
MIT/Apache-2.0