Daily team briefing in Slack with a voice recording

By General Input

Turn a row in your Google Sheet into a spoken morning announcement, posted to Slack every weekday at 8:55am with the audio attached.

Integrations

  • Google Sheets
  • ElevenLabs
  • Google Drive
  • Slack

Type

Deterministic Code

Categories

  • Operations

Build a deterministic, code-based workflow that posts a daily team briefing to Slack as a written message plus a voice recording. Every step maps to a known integration node. No model reasoning, no content generation. The text comes verbatim from a Google Sheet a human fills in.

Trigger: cron, every weekday (Monday through Friday) at 8:55am US Eastern.

Step 1. Read today's briefing row from Google Sheets using Get Values. The spreadsheet has a tab called 'Daily Briefings' with columns A=date (YYYY-MM-DD in ET), B=headline, C=body, D=host name. Read a range that covers the working set (for example A2:D400), then find the row whose date column equals today in America/New_York. Store the spreadsheet ID and tab name as workflow config so they're easy to change.

Step 2. Empty-day guard. If no row matches today, or the headline cell is empty, or the body cell is empty, exit the workflow cleanly. Do not call ElevenLabs, do not upload anything, do not post to Slack. Log a short message like 'no briefing for {date}, skipping' and finish.

Step 3. Build the spoken script in plain text. No SSML, no markdown, no special tags. Just clean sentences with natural punctuation so the voice reads it properly. Use this template, substituting the sheet values: 'Good morning, team. Today's briefing from {host}. {headline}. {body}.' Trim whitespace and collapse any double spaces.

Step 4. Generate audio with ElevenLabs Text to Speech. Use a voice_id stored in workflow config (the team's chosen voice). Set model_id to eleven_multilingual_v2 and output_format to mp3_44100_128. Read the response body as raw binary (it's an MP3, not JSON). Keep the audio in memory as a Buffer for the next step.

Step 5. Upload the audio to Google Drive using Upload File (Multipart). Save it inside a fixed folder whose ID is stored in workflow config (the 'team-briefings' folder). Filename: {YYYY-MM-DD}-briefing.mp3 using today's date in ET. MIME type: audio/mpeg. Capture the returned file id.

Step 6. Share the new file with Google Drive Create Permission. Set type=anyone, role=reader so anyone with the link can play it. Then construct the shareable link as https://drive.google.com/file/d/{fileId}/view (or use webViewLink if returned).

Step 7. Post to Slack with Send a Message into the channel #general (channel ID stored in workflow config so it's easy to swap). Use Slack mrkdwn formatting. Body of the message:

*{headline}*\n{body}\n:headphones: <{audioLink}|Listen to today's briefing> (hosted by {host})

Constraints. The pipeline must be strictly deterministic: no LLM steps, no summarization, no rewording. The script content is whatever the human typed in the sheet, character for character. The only configurable knobs are the spreadsheet ID and tab name, the ElevenLabs voice id, the Drive folder id, and the Slack channel id (or name).

Error handling. If ElevenLabs returns 429 (concurrent-limit), respect Retry-After and retry once. If the Drive upload fails, do not post to Slack (avoid posting a broken link). If Slack returns ok=false, log the error code and fail the run so it surfaces in the run history.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageWin back LiveChat visitors whose chats went unansweredLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardChat quality review board for LiveChat support leadsLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seats