Discord webhook + Tevyr
Post messages into a Discord channel from any Tevyr macro — timer warnings, session announcements, Q&A submissions, blackout alerts. No bot setup, no OAuth: paste a webhook URL from your Discord server and you're connected.
Discord's Incoming Webhooks are a built-in URL-based send endpoint — every Discord server admin can create them in Server Settings. Tevyr POSTs to the URL, the message lands in the channel. No bot user to create, no OAuth flow. Get Discord at discord.com.
What you can do
Timer warnings to a Discord channel
Post 'Session ending in 60s' to your show's ops channel. Community streamers and gaming events run their entire production crew in Discord — this keeps them in their workflow.
Auto-post session start banners
When a session starts, post a styled message with the session title and speaker. Audience members in the chat see who's up without checking the stage.
Route Q&A submissions to a mod channel
Audience submits a Q&A → Discord post in #qa-moderation. Moderators triage in the chat they're already watching.
@here / @everyone for emergencies
On critical failures or unexpected overruns, post with @here mention to ping everyone online in the channel. Discord's built-in escalation, free.
Prerequisites
- Tevyr Starter plan or above — Free plan ships 0 integration connections
- A Discord server where you can create webhooks (you need Manage Webhooks permission, or an admin to create one for you)
- A target channel in the server
One-time setup
1. Create a Discord webhook
- In Discord, right-click your server → Server Settings → Integrations
- Click Webhooks → New Webhook
- Name the webhook (e.g.
Tevyr Backstage), pick the target channel, optionally upload an avatar - Click Copy Webhook URL
The URL looks like https://discord.com/api/webhooks/<id>/<token>. Treat it as a secret — anyone with the URL can post in your channel.
2. Paste the URL into Tevyr
- Settings → Integrations → Add new
- Pick the Discord webhook tile
- Paste the URL, name the connection (e.g. "Discord — #stage"), click Save
- Click Test on the new connection — Tevyr does a GET on the webhook URL (Discord returns the webhook metadata, no message sent) and shows a green toast confirming the channel is reachable
Recipes
Drag a flow.http_request step, pick your Discord connection, then pick the Send message action.
Recipe 1 — Post when a session starts
Trigger: lifecycle event on_session_start.
| Field | Value |
|---|---|
| Message | :movie_camera: **{{ctx.session.name}}** is starting now |
Discord renders **bold**, emoji shortcodes, and links inline. Up to 2000 characters.
Recipe 2 — Flag an overrun with @here
Trigger: lifecycle event on_timer_overrun.
| Field | Value |
|---|---|
| Message | @here :rotating_light: **{{ctx.session.name}}** is over time |
@here pings only currently-online members; @everyone pings every member regardless of status.
Recipe 3 — Post a Q&A submission
Trigger: on_question_submitted.
| Field | Value |
|---|---|
| Message | **New Q&A from {{ctx.question.submitter_name}}:** {{ctx.question.text}} |
Optional fields
- Username override — change the displayed sender name per-post (e.g. "Tevyr Stage 1" vs "Tevyr Stage 2")
- Avatar URL — override the avatar per-post
Troubleshooting
404 Unknown Webhook
The webhook was deleted in Discord (Server Settings → Integrations → Webhooks) or the URL is wrong. Recreate the webhook, copy the new URL, click Edit on the Tevyr connection, paste the new URL.
429 Too Many Requests
Discord rate-limits webhooks at roughly 5 requests per 2 seconds per webhook. If you're firing many macros in parallel, stagger them with flow.wait_ms, or split across multiple webhooks on different channels.
Message renders blank or with placeholder
Likely a malformed {{ctx.*}} reference. The macro fire log under Step inspector shows the resolved body — check there to confirm what Discord actually received.
"I want richer messages — embeds, buttons, multiple fields"
Discord's webhook API supports rich embeds (titled cards, color bars, image thumbnails). The dedicated template only ships content for now. Use the Generic HTTP template with the same webhook URL to POST the full { embeds: [...] } payload Discord supports — full control, you supply the JSON.
Context variables
URL, header, and body fields on Discord actions support {{ctx.*}} interpolation — Tevyr resolves them at fire time against the macro's run context. See the full context-variable reference in the Macros guide. Common ones: {{ctx.event.title}}, {{ctx.session.title}}, {{ctx.session.speaker_name}}, {{ctx.timer.remaining_seconds}}, {{ctx.now.iso}}.
Triggered by webhook events
Discord can be fired automatically from any webhook event. When creating a webhook, pick Integration mode and select your Discord connection — Tevyr formats the call for you on every matching event.
Related
- Macros — chain Discord messages with timer + display actions in one cue
- Integrations overview — other tools you can wire alongside Discord
- Generic HTTP guide — for full Discord embed control
- Slack guide — Slack equivalent if your production team lives there