Documentation

Slack + Tevyr

Drive a Slack workspace from any Tevyr macro — post timer warnings to your control-room channel, route Q&A submissions to a moderation channel, ping ops when a session goes long, all without a Zapier middleman. Connects once via OAuth; tokens auto-refresh in the background.

What's Slack?

Slack is the messaging platform most production crews already live in during a show. Tevyr's Slack integration uses Slack's official OAuth 2.0 install flow — no copy-pasting tokens, no bot user setup. Get a workspace at slack.com.

What you can do

Wire Slack to your show's lifecycle and stop alt-tabbing between tools.

Live timer warnings to #control-room

When the timer hits 1 minute remaining, post '60s left in {session name}' to your ops channel. Producer + camera + lighting all see it at the same time.

Q&A submissions to a moderation channel

Audience submits a question → Tevyr posts it to #qa-moderation with the submitter's name. Moderators triage in Slack, no extra dashboard to watch.

Session lifecycle pings

On every session start, end, and blackout, fire a short note into Slack. The post-show recap writes itself from your channel history.

On-call paging via @mention

On critical failures or overruns, post with <!channel> or @oncall into your alert channel. Pagerduty's job, free.

Prerequisites

  • Tevyr Starter plan or above — Free plan ships 0 integration connections
  • A Slack workspace where you can install apps (or get an admin to install Tevyr on your behalf)
  • A target channel — Tevyr can post to public channels without being invited thanks to the chat:write.public scope; private channels require /invite @tevyr once

One-time setup

The whole flow lives in Tevyr's Settings → Integrations modal. No copy-pasting between tabs.

1. Open the Integrations modal

  1. In Tevyr, click your avatar → SettingsIntegrations
  2. Click Add new in the top-right of the modal
  3. Pick the Slack tile from the template grid

2. Connect your workspace

  1. Click Connect Slack — a Slack OAuth popup opens
  2. Pick the workspace you want Tevyr to install into
  3. Slack shows the scopes Tevyr requests: chat:write (post messages as the Tevyr bot) and chat:write.public (post to public channels without being invited)
  4. Click Allow
  5. The popup closes automatically; a green toast confirms the install and the new connection appears in your list with the workspace name as its subtitle

3. Verify with the test button

Click Test on the new connection. Tevyr calls Slack's auth.test endpoint — read-only, no message sent — and shows a green toast like "Tevyr — live · workspace verified". If the toast is red, jump to Troubleshooting below.

Recipes

Drag a flow.http_request step into any macro, pick your Slack connection, then pick the Send message action. The recipes below show the fields you fill in.

Recipe 1 — Post when a session starts

Trigger: lifecycle event on_session_start.

FieldValue
Channel#stage or a channel ID like C0123456
Message:movie_camera: {{ctx.session.name}} just started

Every time a session starts, the channel gets a one-liner with the session name auto-filled.

Recipe 2 — Warn the room when the timer hits 1 minute

Trigger: lifecycle event on_timer_warning (set the threshold to 60 seconds in the trigger config).

FieldValue
Channel#control-room
Message<!channel> 60 seconds left in {{ctx.session.name}}

The <!channel> mention pings every active member of the channel. Use <!here> if you only want online folks.

Recipe 3 — Route a Q&A submission to a moderation channel

Trigger: lifecycle event on_question_submitted (or wire Tevyr's Q&A webhook through a flow.http_request chain).

FieldValue
Channel#qa-moderation
MessageNew Q&A from {{ctx.question.submitter_name}}: {{ctx.question.text}}

Troubleshooting

"Bot can't post to private channel"

The chat:write.public scope only covers public channels. For a private channel, invite the Tevyr bot once:

/invite @tevyr

Then re-fire. Slack returns not_in_channel until the bot is invited.

"Test passes but messages don't land"

Channel name typos. Slack is case-insensitive on channel names, but spaces and special characters silently fail. The safest input is the channel ID — find it via the channel header → About → the alphanumeric ID at the bottom (e.g., C0123456).

"Connection went red after weeks of working"

Slack OAuth tokens refresh automatically inside Tevyr, but a workspace admin can revoke an installed app at any time (Workspace settings → Apps & integrationsManage). If your connection turns red:

  1. Click Disconnect on the connection
  2. Click Connect Slack to re-run the OAuth dance — re-grants the scopes and saves a fresh token

"I want to post to two workspaces"

Each Slack connection is one workspace. Add a second connection from the Integrations modal — pick Slack again, install into the second workspace, give it a distinct name (e.g. "Slack — Tevyr" vs "Slack — Client Workspace"). Macros pick the connection by name.

Context variables

The Channel and Message fields above support {{ctx.*}} interpolation — at fire time, Tevyr resolves them against the macro's run context (active session, timer state, event title, etc.). Common ones: {{ctx.event.title}}, {{ctx.session.title}}, {{ctx.session.speaker_name}}, {{ctx.timer.remaining_seconds}}, {{ctx.now.iso}}. See the full context-variable reference in the Macros guide — the same variables work for every integration template.

Triggered by webhook events

This integration can be fired automatically from any webhook event (timer.started, timer.warning, session.started, etc.). When creating a webhook, pick Integration mode and select your Slack connection — Tevyr will format the call for you on every matching event.

  • Macros — build multi-step cues that include Slack pings alongside timer, message, and display actions
  • Integrations overview — other tools you can wire alongside Slack
  • Discord guide — Discord webhook alternative for community/gaming use cases
  • Webhooks — one-way broadcasts to Slack via Incoming Webhooks if you prefer no-OAuth