Documentation

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.

What's a Discord webhook?

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

  1. In Discord, right-click your server → Server SettingsIntegrations
  2. Click WebhooksNew Webhook
  3. Name the webhook (e.g. Tevyr Backstage), pick the target channel, optionally upload an avatar
  4. 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

  1. Settings → Integrations → Add new
  2. Pick the Discord webhook tile
  3. Paste the URL, name the connection (e.g. "Discord — #stage"), click Save
  4. 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.

FieldValue
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.

FieldValue
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.

FieldValue
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.