This document catalogs all platform-specific extensions. The AI assistant should reference this when users ask about platform-specific capabilities.
Agent note: For Discord id semantics (channel vs user, DM vs discord_send_message, interaction followups), the canonical short guide is discord-node-semantics.md, which is always included in the Studio agent system prompt.
Discord Extensions (67 total)
Discord is the most mature platform integration. Requires: Bot Token, Application ID, and optionally a Guild ID.
Discord Triggers (26)
Message Triggers
| Extension | Description | Key Output Fields |
|---|
| Message Create | Fires when a new message is sent | content, author (id, username, discriminator, avatar, bot), channelId, guildId, attachments, embeds, mentions |
| Message Update | Fires when a message is edited | content, author, channelId, oldContent |
| Message Delete | Fires when a message is deleted | messageId, channelId, guildId |
| Message Bulk Delete | Fires when multiple messages are deleted at once | messageIds, channelId, guildId |
| Message Reaction Add | Fires when a reaction is added to a message | emoji (name, id), userId, channelId, messageId, guildId |
| Message Reaction Remove | Fires when a reaction is removed | emoji, userId, channelId, messageId |
Interaction Triggers
| Extension | Description | Key Output Fields |
|---|
| Slash Command | Fires when a user invokes a registered slash command | commandName, options (array of name/value pairs), user, channelId, guildId, interactionId, interactionToken |
| Button Click | Fires when a user clicks a button component | customId, user, channelId, messageId, interactionId, interactionToken |
| Select Menu | Fires when a user makes a selection from a select menu | customId, values (array), user, channelId, interactionId, interactionToken |
| Modal Submit | Fires when a user submits a modal form | customId, fields (array of id/value pairs), user, interactionId, interactionToken |
| Autocomplete | Fires when a user types in an autocomplete-enabled command option | commandName, focusedOption, currentValue, interactionId, interactionToken |
Guild & Member Triggers
| Extension | Description | Key Output Fields |
|---|
| Guild Member Add | Fires when a new member joins the server | user (id, username, avatar, bot), guildId, joinedAt, roles, nickname |
| Guild Member Remove | Fires when a member leaves or is removed | user, guildId |
| Guild Member Update | Fires when a member's roles, nickname, etc. change | user, guildId, roles, nickname, oldNickname |
| Guild Create | Fires when the bot joins a new guild | guildId, name, memberCount |
| Guild Delete | Fires when the bot is removed from a guild | guildId |
| Guild Ban Add | Fires when a member is banned | user, guildId, reason |
| Guild Ban Remove | Fires when a ban is lifted | user, guildId |
| Guild Role Create | Fires when a new role is created | role (id, name, color, permissions), guildId |
| Guild Role Delete | Fires when a role is deleted | roleId, guildId |
| Guild Role Update | Fires when a role is modified | role, guildId, oldRole |
Channel Triggers
| Extension | Description | Key Output Fields |
|---|
| Channel Create | Fires when a new channel is created | channel (id, name, type, parentId), guildId |
| Channel Delete | Fires when a channel is deleted | channelId, guildId |
| Channel Update | Fires when a channel is modified | channel, guildId, oldChannel |
| Channel Pins Update | Fires when channel pins are updated | channelId, guildId, lastPinTimestamp |
Thread Triggers
| Extension | Description | Key Output Fields |
|---|
| Thread Create | Fires when a new thread is created | thread (id, name, parentId), guildId |
| Thread Delete | Fires when a thread is deleted | threadId, guildId |
| Thread Update | Fires when a thread is modified | thread, guildId |
Other Triggers
| Extension | Description | Key Output Fields |
|---|
| Voice State Update | Fires when a user joins/leaves/moves voice channels | userId, channelId, oldChannelId, guildId, selfMute, selfDeaf, serverMute, serverDeaf |
| Scheduled Event Create | Fires when a scheduled event is created | event (name, description, scheduledStartTime), guildId |
| Typing Start | Fires when a user starts typing | userId, channelId, guildId, timestamp |
Discord Actions (41)
Message Actions
| Extension | Key Config/Inputs | Description |
|---|
| Send Message | channelId, content, embeds, components | Post in a guild channel, thread, or forum — channelId MUST be a Discord channel snowflake (not a user id). Using a user id → 404 Unknown Channel. |
| Send DM | userId, content, embeds, components | Private message to a user; opens/creates the DM channel. Use for per-user welcomes or off-channel notices. Do not use Send Message with the user’s id as channelId. |
| Edit Message | channelId, messageId, content, embeds | Edit an existing message. |
| Delete Message | channelId, messageId | Delete a message. |
| Get Message | channelId, messageId | Fetch a message's full data. |
| Add Reaction | channelId, messageId, emoji | Add a reaction emoji to a message. |
| Remove Reaction | channelId, messageId, emoji, userId | Remove a reaction from a message. |
| Pin Message | channelId, messageId | Pin a message to the channel. |
| Unpin Message | channelId, messageId | Unpin a pinned message. |
| Use Message Template | templateId, variables | Send a message using a pre-defined template with variable substitution. |
Interaction Response Actions
| Extension | Key Config/Inputs | Description |
|---|
| Interaction Response | interactionId, interactionToken, type, content, embeds, components, ephemeral | Respond to a slash command, button, select menu, or modal. Supports ephemeral (private) responses. |
| Followup Message | interactionToken, content, embeds, ephemeral | Send a follow-up message after an initial interaction response. |
| Autocomplete Response | interactionId, interactionToken, choices | Respond to an autocomplete trigger with a list of choices. |
Member Management Actions
| Extension | Key Config/Inputs | Description |
|---|
| Add Role | guildId, userId, roleId | Assign a role to a member. |
| Remove Role | guildId, userId, roleId | Remove a role from a member. |
| Set Nickname | guildId, userId, nickname | Change a member's nickname. |
| Kick Member | guildId, userId, reason | Kick a member from the server. |
| Ban Member | guildId, userId, reason, deleteMessageDays | Ban a member and optionally delete their recent messages. |
| Unban Member | guildId, userId | Remove a ban from a user. |
| Timeout Member | guildId, userId, duration (ms, confirm via schema), reason | Temporarily timeout a member. Field names: use get_extension_schema — catalog tables may lag the DB definition. |
| Remove Timeout | guildId, userId | Remove a timeout from a member. |
| Move Member | guildId, userId, channelId | Move a member to a different voice channel. |
| Get User | userId | Fetch a user's profile data. |
Channel Management Actions
| Extension | Key Config/Inputs | Description |
|---|
| Create Channel | guildId, name, type, parentId, topic, nsfw, bitrate, userLimit, permissionOverwrites | Create a new text, voice, or category channel. |
| Delete Channel | channelId | Delete a channel. |
| Edit Channel | channelId, name, topic, nsfw, bitrate, userLimit | Modify channel properties. |
Thread Management Actions
| Extension | Key Config/Inputs | Description |
|---|
| Create Thread | channelId, name, autoArchiveDuration, type, messageId | Create a new thread, optionally from a message. |
| Archive Thread | threadId | Archive a thread. |
| Unarchive Thread | threadId | Unarchive a thread. |
| Lock Thread | threadId | Lock a thread (prevent new messages). |
| Unlock Thread | threadId | Unlock a thread. |
Role Management Actions
| Extension | Key Config/Inputs | Description |
|---|
| Create Role | guildId, name, color, hoist, mentionable, permissions | Create a new role. |
| Delete Role | guildId, roleId | Delete a role. |
Webhook Actions
| Extension | Key Config/Inputs | Description |
|---|
| Create Webhook | channelId, name, avatar | Create a new webhook for a channel. |
| Execute Webhook | webhookId, webhookToken, content, username, avatarUrl, embeds | Send a message via webhook (can impersonate any name/avatar). |
Other Actions
| Extension | Key Config/Inputs | Description |
|---|
| Create Invite | channelId, maxAge, maxUses, temporary, unique | Create a server invite link. |
Slack Extensions (live)
Slack is a production platform integration. Setup, secrets, and connection steps: platforms/slack.md.
Secrets: SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET
Agent notes:
- DM vs channel:
slack_send_dm uses userId (U…). slack_send_message uses channelId (C… or D…). Do not pass a user id as channelId.
- DM detection: Slack DM channel ids start with
D. Filter with if_condition on {{outputs.<trigger-node-id>.channelId}} startsWith D when using slack_message (see Template strings).
- Trigger outputs (
slack_message): channelId, userId, text, ts, threadTs, teamId
Slack Triggers (extension keys)
| Extension key | Fires when | Key outputs |
|---|
slack_message | Message in channel or DM | channelId, userId, text, ts, threadTs |
slack_app_mention | Bot @mentioned | channelId, userId, text, ts |
slack_slash_command | Registered slash command | command, text, user_id, channel_id, response_url |
slack_reaction_added | Reaction added | emoji, userId, channelId, message_ts |
slack_reaction_removed | Reaction removed | same as added |
slack_member_joined | Member joined workspace | userId, teamId |
slack_member_left | Member left | userId, teamId |
slack_block_action | Button / Block Kit action | action_id, value, user, channel, response_url |
slack_view_submission | Modal submitted | callback_id, user, values |
slack_shortcut | Global/message shortcut | callback_id, user, channel |
slack_workflow_step_execute | Workflow step executed | workflow payload |
Slack Actions (extension keys)
| Extension key | Required config | Notes |
|---|
slack_send_message | channelId, text | Guild channel, thread, or DM channel id |
slack_send_dm | userId, text | Opens DM with user |
slack_send_blocks | channelId, blocks | Block Kit JSON |
slack_reply_in_thread | channelId, thread_ts, text | Thread reply |
slack_update_message | channelId, ts, text | Edit message |
slack_delete_message | channelId, ts | Delete message |
slack_ephemeral_message | channelId, userId, text | Visible to one user in channel |
slack_respond_to_command | response_url, text | Reply to slash command |
slack_add_reaction | channelId, timestamp, name | Emoji name |
slack_remove_reaction | channelId, timestamp, name | |
slack_open_modal | trigger_id, view | Modal JSON |
slack_update_modal | view_id, view | |
slack_get_channel_info | channelId | |
slack_get_user_info | userId | |
slack_get_channel_members | channelId | |
slack_set_channel_topic | channelId, topic | |
slack_upload_file | channels, content | File upload |
Telegram Extensions (live)
Telegram is a production platform integration. Setup and token: platforms/telegram.md.
Secrets: TELEGRAM_BOT_TOKEN
Agent notes:
chat.id vs from.id: Reply in the same chat with chat.id from the trigger; use from.id only when targeting the user explicitly.
- Commands vs messages:
telegram_command for /slash commands; telegram_message for free-form text.
- Callbacks: Always call
telegram_answer_callback_query after telegram_callback_query before a slow follow-up.
Telegram Triggers (extension keys)
| Extension key | Fires when | Key outputs |
|---|
telegram_message | User sends a message | text, from, chat, message_id, date |
telegram_command | /command received | command, args, from, chat, message_id |
telegram_callback_query | Inline button pressed | data, from, message, callback_query_id |
telegram_inline_query | Inline mode query | query, from, inline_query_id |
telegram_chat_member_updated | Member status change | chat member payload |
telegram_message_reaction | Reaction on message | reaction payload |
telegram_chat_join_request | Join request | request payload |
Telegram Actions (extension keys)
| Extension key | Required config | Notes |
|---|
telegram_send_message | chatId, text | Optional reply_markup for keyboards |
telegram_send_photo | chatId, photo | URL or file id |
telegram_send_document | chatId, document | |
telegram_edit_message | chatId, messageId, text | |
telegram_delete_message | chatId, messageId | |
telegram_answer_callback_query | callbackQueryId | Dismiss button loading state |
telegram_send_inline_keyboard | chatId, text, keyboard | Sends message + inline keyboard |
telegram_ban_user | chatId, userId | |
telegram_unban_user | chatId, userId | |
telegram_restrict_member | chatId, userId, permissions | |
telegram_pin_message | chatId, messageId | |
telegram_unpin_message | chatId, messageId | |
telegram_get_chat_member_count | chatId | |
Common Discord Automation Patterns
Welcome Bot
Guild Member Add → Send Message (to #welcome channel)
Auto-Moderation Bot
Message Create → If Condition (check for banned words) → [true] Delete Message + Timeout Member + Send Message (warn in #mod-log)
Slash Command Bot
Slash Command (/weather) → HTTP Request (weather API) → Transform Data → Interaction Response (formatted weather)
AI Chat Bot
Message Create (filter: not bot) → OpenRouter AI (with message content) → Send Message (AI response)
Reaction Role Bot
Message Reaction Add → If Condition (check emoji) → [true] Add Role
Message Reaction Remove → If Condition (check emoji) → [true] Remove Role
Ticket System
Button Click (customId: "create-ticket") → Create Channel (private) → Send Message (ticket instructions) → Interaction Response (ephemeral: "Ticket created!")
Scheduled Announcements
Timer Trigger (cron: "0 9 * * *") → HTTP Request (fetch latest content) → Transform Data → Send Message (to #announcements)
historyLast updated: May 10, 2026