Daily team briefing in Slack with a voice recording
Turn a row in your Google Sheet into a spoken morning announcement, posted to Slack every weekday at 8:55am with the audio attached.
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.
What does this prompt do?
- Reads today's briefing row from your Google Sheet every weekday morning.
- Generates a clean voice recording of the headline and body with ElevenLabs.
- Saves the recording to a shared Google Drive folder and creates a shareable link.
- Posts the briefing to your team Slack channel with a play link to the audio.
- Skips the day quietly if no one wrote a briefing, so nothing awkward goes out.
What do I need to use this?
- A Google account with edit access to a 'Daily Briefings' sheet and a Drive folder.
- An ElevenLabs account and a voice you've picked or cloned.
- A connected Slack workspace and the channel you want to post into.
How can I customize it?
- Change the run time and timezone (for example 7am PT instead of 8:55am ET).
- Swap the destination Slack channel from #general to a team channel.
- Pick a different ElevenLabs voice or move to a cheaper voice model.
- Rename the Drive folder or tweak the file naming pattern.
FAQs
What if I forget to write today's briefing?
Can teammates write briefings without touching the workflow?
Does the audio play inside Slack?
How much does the voice generation cost?
Can I use a cloned voice of our CEO or a team lead?
Related templates
Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.
See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.
Every couple of hours we find the chats your team never answered, email those visitors a real reply, and hand the sensitive ones to a support lead.
Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.
Every night at 2am, pull the contacts on your open and won deals and block them from your cold outreach before the next send goes out.
Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.
Give your team a morning ritual that runs itself.
Connect Google Sheets, ElevenLabs, Google Drive, and Slack once. Geni reads the row, voices the briefing, and posts it every weekday morning.