Use Speak AI with Slack
Push transcripts, summaries, and AI insights from Speak into any Slack channel. Connect Slack to Speak in two clicks via OAuth, or wire up a custom Incoming Webhook flow for full control. Native bidirectional integration. Production-ready in under 10 minutes.
Yapabilecekleriniz
Once Speak is connected to Slack, every transcribed call, interview, or recording can land in the channel where work happens. Sales teams get deal-call summaries in their pipeline channel. Support teams get sentiment alerts in their on-call channel. Research teams get verbatim quotes pushed to their synthesis channel.
Push transcripts to any Slack channel
One-click OAuth connects your Slack workspace to Speak. Pick a channel, send the full transcript or just the AI summary. Use Speak’s POST /v1/integration/slack/send-transcription endpoint to fire transcripts programmatically from your CRM or scheduler.
Auto-notify on every media.analyzed
Subscribe a Slack Incoming Webhook to Speak’s media.analyzed event. Every time a recording finishes processing, Speak posts a Block Kit card to your chosen Slack channel with the summary, sentiment, and a link back to the full Speak record.
Run Magic Prompts against transcripts from a slash command
Let your team query Speak from Slack. Build a custom slash command (/speak veya /ask-speak) that pipes through your server, calls Speak’s Magic Prompt API, and replies back into the Slack thread with the answer.
Search every call from Claude, ChatGPT, and Slack
Speak’s official MCP server exposes 83 tools to AI assistants. Pair it with Slack’s AI Assistant API or a custom bot to let your team ask questions about the entire Speak library directly in Slack threads.
3 Adımda Kurulum
Two production paths. Native OAuth for the in-app experience (recommended). Incoming Webhook for full control over message formatting and routing logic.
Speak AI’ye kaydolun
Ücretsiz hesap oluştur app.speakai.co7 günlük deneme sürümü alırsınız ve tam erişim sunar. Kredi kartı gerekmez. İçeri girdikten sonra şuraya gidin Ayarlar > API ve API anahtarınızı kopyalayın.
Entegrasyon yolunuzu seçin
Speak’te şu adrese gidin: Settings > Integrations > Slack ve tıklayın Slack'e bağlanın. Approve the OAuth scopes for the workspace and channels you want to use. Speak then exposes a channel picker, the send-transcription endpoint, and a Slack Events API subscription. No code required.
Create a Slack app at api.slack.com/apps, enable Incoming Webhooks, and copy the webhook URL. Subscribe Speak’s media.analyzed webhook (POST /v1/webhook) to your handler, then forward formatted Block Kit messages to the Slack webhook URL. Best when you need custom routing or formatting.
Add a slash command in your Slack app pointing to /slack/command on your server. Your handler reads text ve channel_id, fires Speak’s Magic Prompt API, polls for the answer, and posts back to Slack via response_url. Useful for ad-hoc team queries.
Already have calls in Speak? Connect Claude Desktop with npx @speakai/mcp-server init, or add the MCP URL to your Slack AI Assistant. Your team queries the Speak library through conversation in any thread.
Abone ol media.analyzed
Speak, transcription ve AI analizi tamamlandığında (genellikle 10 dakikalık bir çağrı için 60 saniye içinde) imzalı bir webhook tetikler. Bitiş noktanızı şu adresten kaydedin: POST /v1/webhook, format the payload as a Slack Block Kit card, and post it to your channel. Real-time team awareness, zero polling.
Gerçek iş akışları, gerçek sonuçlar
Four production patterns Speak customers ship with Slack. Pick the one that fits your team and copy the recipe.
Connect Slack via OAuth and send transcripts from your code
Use Speak’s native Slack integration. Connect Slack via OAuth in the Speak dashboard once, then call Speak’s send-transcription endpoint with the mediaId, channelIdve accountId from your CRM, automation, or a webhook handler. No Block Kit construction, no Slack signing required, full markdown rendering of the transcript.
# In Speak AI dashboard:
# 1. Go to Settings -> Integrations -> Slack
# 2. Click "Connect Slack"
# 3. Choose your Slack workspace + channels you want to enable
# 4. Approve scopes (chat:write, channels:read, users:read, files:write)
# 5. Speak stores an accountId you reference from the API
# Or hit Speak's connect endpoint programmatically:
curl -X POST https://api.speakai.co/v1/integration/slack/connect
-H "x-speakai-key: $SPEAK_API_KEY"
-H "Content-Type: application/json"
-d '{"code": "$SLACK_OAUTH_CODE", "redirectUri": "https://yourapp/slack-redirect"}'
curl https://api.speakai.co/v1/integration/slack/$ACCOUNT_ID/channels
-H "x-speakai-key: $SPEAK_API_KEY"
# Response:
# {
# "status": "success",
# "data": {
# "channels": [
# { "id": "C0123ABCD", "name": "deals-pipeline" },
# { "id": "C0123EFGH", "name": "support-oncall" },
# ...
# ]
# }
# }
curl -X POST https://api.speakai.co/v1/integration/slack/send-transcription
-H "x-speakai-key: $SPEAK_API_KEY"
-H "Content-Type: application/json"
-d '{
"mediaId": "14c8dd9c0a89",
"channelId": "C0123ABCD",
"channelName": "deals-pipeline",
"accountId": "$SLACK_ACCOUNT_ID"
}'
# Speak posts the formatted transcript card to the channel.
# AI summary, speaker labels, sentiment chip, link back to the Speak record.
// Trigger this from your CRM, scheduler, or a Speak webhook handler.
async function pushTranscriptToSlack({ mediaId, channelId, channelName, accountId }) {
const r = await fetch(
"https://api.speakai.co/v1/integration/slack/send-transcription",
{
method: "POST",
headers: {
"x-speakai-key": process.env.SPEAK_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ mediaId, channelId, channelName, accountId }),
}
);
if (!r.ok) throw new Error(`Slack push failed: ${r.status}`);
return r.json();
}
import os, requests
def push_transcript_to_slack(media_id: str, channel_id: str, channel_name: str, account_id: str):
r = requests.post(
"https://api.speakai.co/v1/integration/slack/send-transcription",
headers={
"x-speakai-key": os.environ["SPEAK_API_KEY"],
"Content-Type": "application/json",
},
json={
"mediaId": media_id,
"channelId": channel_id,
"channelName": channel_name,
"accountId": account_id,
},
timeout=30,
)
r.raise_for_status()
return r.json()
Speak handles the Slack auth, signing, retry, and Block Kit formatting on its side. You only pass the four IDs.
Auto-post AI summaries to Slack when a recording finishes
For full control over message formatting and routing logic, subscribe Speak’s media.analyzed webhook to your own handler. Fetch the insight from Speak, format it as a Slack Block Kit card, and POST to a Slack Incoming Webhook URL. Useful when different folder tags should route to different channels, or when you want to surface only certain sentiment thresholds.
# 1. Go to https://api.slack.com/apps
# 2. Click "Create New App" -> "From scratch"
# 3. Name it (e.g. "Speak AI Bot") and choose your workspace
# 4. Under Features, enable "Incoming Webhooks"
# 5. Click "Add New Webhook to Workspace"
# 6. Pick the channel that will receive Speak summaries
# 7. Copy the Webhook URL (https://hooks.slack.com/services/T.../B.../xxx)
# Store the URL as an env var: SLACK_WEBHOOK_URL
# Same URL is reusable for every recording analyzed by Speak.
media.analyzed webhookcurl -X POST https://api.speakai.co/v1/webhook
-H "x-speakai-key: $SPEAK_API_KEY"
-H "Content-Type: application/json"
-d '{
"callbackUrl": "https://your-app.example.com/speak/slack-webhook",
"events": ["media.analyzed"],
"description": "Forward Speak insights to Slack"
}'
// Speak posts a thin notification: { eventType, state, mediaId } (verified 2026-05-07).
import express from "express";
const app = express();
app.use(express.json());
app.post("/speak/slack-webhook", async (req, res) => {
const { eventType, state, mediaId } = req.body;
if (eventType !== "media.analyzed" || state !== "processed") return res.sendStatus(204);
res.sendStatus(202);
// 1. Fetch full insight from Speak
const insight = await fetch(
`https://api.speakai.co/v1/media/insight/${mediaId}`,
{ headers: { "x-speakai-key": process.env.SPEAK_API_KEY } }
).then(r => r.json());
const media = insight.data;
const compound = media.sentiment?.[0]?.document?.Compound ?? 0;
const sentiment = compound > 10 ? ":green_circle: Positive"
: compound < -10 ? ":red_circle: Negative" : ":white_circle: Neutral";
// 2. Build a Slack Block Kit card
const blocks = [
{
type: "header",
text: { type: "plain_text", text: media.name },
},
{
type: "section",
fields: [
{ type: "mrkdwn", text: `*Sentiment*n${sentiment} (${compound})` },
{ type: "mrkdwn", text: `*Duration*n${Math.round(media.duration?.inSecond / 60)} min` },
],
},
{
type: "actions",
elements: [{
type: "button",
text: { type: "plain_text", text: "Open in Speak" },
url: `https://app.speakai.co/media/${mediaId}`,
}],
},
];
// 3. POST to Slack Incoming Webhook
await fetch(process.env.SLACK_WEBHOOK_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ blocks }),
});
});
app.listen(3000);
import os, requests
from fastapi import FastAPI, Request
app = FastAPI()
@app.post("/speak/slack-webhook")
async def hook(req: Request):
body = await req.json()
if body.get("eventType") != "media.analyzed" or body.get("state") != "processed":
return {"ok": True}
media_id = body["mediaId"]
insight = requests.get(
f"https://api.speakai.co/v1/media/insight/{media_id}",
headers={"x-speakai-key": os.environ["SPEAK_API_KEY"]},
timeout=30,
).json()["data"]
compound = (insight.get("sentiment") or [{}])[0].get("document", {}).get("Compound", 0)
sentiment_emoji = ":green_circle: Positive" if compound > 10 else ":red_circle: Negative" if compound < -10 else ":white_circle: Neutral"
blocks = [
{"type": "header", "text": {"type": "plain_text", "text": insight["name"]}},
{"type": "section", "fields": [
{"type": "mrkdwn", "text": f"*Sentiment*n{sentiment_emoji} ({compound})"},
{"type": "mrkdwn", "text": f"*Duration*n{round(insight.get('duration', {}).get('inSecond', 0) / 60)} min"},
]},
{"type": "actions", "elements": [{
"type": "button",
"text": {"type": "plain_text", "text": "Open in Speak"},
"url": f"https://app.speakai.co/media/{media_id}",
}]},
]
requests.post(
os.environ["SLACK_WEBHOOK_URL"],
json={"blocks": blocks},
timeout=15,
)
return {"ok": True}
Branch by folder ID, tag, or sentiment threshold to route different recording types into different Slack channels. Slack Incoming Webhooks accept up to 50 blocks per message.
Let your team query Speak from Slack
Add a slash command (/speak veya /ask-speak) that fires Speak’s Magic Prompt API and posts the answer back into the Slack thread. Useful for asking ad-hoc questions about a specific call without leaving Slack: “What was the customer’s main objection in the call from yesterday?”
# In your Slack app at https://api.slack.com/apps:
# 1. Features -> Slash Commands -> Create New Command
# 2. Command: /ask-speak
# 3. Request URL: https://your-app.example.com/slack/ask-speak
# 4. Short description: Ask a question about a Speak recording
# 5. Usage hint: [mediaId] [your question]
# 6. Reinstall the app to your workspace
# Slack POSTs to your URL with form-encoded body:
# token, team_id, channel_id, user_id, command, text, response_url
#
# Verify the request with the X-Slack-Signature header
# (HMAC-SHA256 with your Slack signing secret).
import express from "express";
import crypto from "crypto";
const app = express();
app.use(express.urlencoded({ extended: false }));
function verifySlack(req) {
const ts = req.headers["x-slack-request-timestamp"];
const sig = req.headers["x-slack-signature"];
const base = `v0:${ts}:${req.rawBody}`;
const hmac = "v0=" + crypto
.createHmac("sha256", process.env.SLACK_SIGNING_SECRET)
.update(base).digest("hex");
return crypto.timingSafeEqual(Buffer.from(hmac), Buffer.from(sig));
}
app.post("/slack/ask-speak", async (req, res) => {
if (!verifySlack(req)) return res.sendStatus(401);
res.json({ response_type: "in_channel", text: "Asking Speak..." }); // ack within 3s
const [mediaId, ...rest] = (req.body.text || "").split(" ");
const prompt = rest.join(" ");
const responseUrl = req.body.response_url;
// Fire Magic Prompt + poll until completed (typical 2-3s)
const headers = { "x-speakai-key": process.env.SPEAK_API_KEY };
await fetch("https://api.speakai.co/v1/prompt/", {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({
mediaIds: [mediaId], prompt,
isStream: false, isIndividualPrompt: true,
}),
});
let answer = "(timed out)";
for (let i = 0; i < 20; i++) {
await new Promise(r => setTimeout(r, 1000));
const r2 = await fetch(
`https://api.speakai.co/v1/prompt/messages?mediaIds=${mediaId}&pageSize=1`,
{ headers }
);
const j = await r2.json();
const msg = j?.data?.history?.[0]?.messages?.[0];
if (msg?.state === "completed") { answer = msg.answer; break; }
}
// Post answer back to the same Slack thread
await fetch(responseUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ response_type: "in_channel", text: answer }),
});
});
app.listen(3000);
Acknowledge within 3 seconds (Slack timeout) and post the real answer asynchronously to response_url. Magic Prompt typically completes in 2 to 3 seconds for a 50,000-character transcript.
Search every recording from Claude or ChatGPT, then drop answers into Slack
Connect Speak’s MCP server to Claude or ChatGPT. Run a query, copy the structured answer into a Slack thread. Or wire Claude into Slack with the Anthropic Slack app and let your team ask questions in any channel.
# Claude Desktop / Claude Code (kurulumunuzu otomatik olarak algılar)
npx @speakai/mcp-server init
# İstendiğinde Speak API anahtarını yapıştırın. Kurulum yaklaşık 2 dakika sürer.
# Claude.ai (web) and ChatGPT MCP connector
# Settings > Integrations > Add MCP Server
# Remote URL: https://api.speakai.co/v1/mcp
# Auth header: x-speakai-key: YOUR_SPEAK_API_KEY
# Verify the connection responds:
curl -s https://api.speakai.co/v1/mcp
-H "x-speakai-key: $SPEAK_API_KEY"
-H "Accept: application/json"
2. Takımınızın bugün kullanabileceği örnek komutlar:
- “Pull the 3 most recent customer calls where pricing was raised as an objection. Format as a Slack-ready summary.”
- “Summarize this week’s support calls by sentiment. Output as a bulleted list I can drop into our oncall Slack channel.”
- “Find the discovery call from last Friday with Acme Corp. Pull the action items and format as Slack mrkdwn.”
- “Compare the 5 longest sales calls this month for discovery completeness. Score each on a 0-10 rubric.”
- “Pull verbatim quotes from research interviews tagged
kullanıcı eklemewhere users mentioned friction. Drop the top 5 in a thread.”
Claude.ai, Claude Desktop, Claude Code ve ChatGPT MCP bağlayıcılarıyla çalışır. MCP sunucusunu görüntüle →
Why Speak AI + Slack
Slack is where your team works. Speak is where your conversations are analyzed. The combination is how a 5-person sales team and a 5,000-person enterprise both turn every call into immediate team awareness without a Notion or BI hop.
Native OAuth, not just webhooks
Most “Slack integrations” are actually outbound-only Incoming Webhooks. Speak ships full Slack OAuth, channel listing, signed Events API ingestion, and per-account event subscriptions. Two-way connection, not one-way notifications.
Custom Magic Prompts, not fixed reports
Send any structured analysis to any Slack channel. Sentiment thresholds, custom rubrics, MEDDIC scores, competitor mention extraction. Save the prompt once, run it on every recording forever, route the result to the channel where work happens.
Claude ve ChatGPT için MCP-native
Resmi @speakai/mcp-server exposes 83 tools to AI assistants. Pair it with Claude in Slack or ChatGPT to let your team query the entire Speak library through conversation in any channel.
One workspace, every conversation
Speak ingests Zoom, Teams, Meet, Webex, Twilio, Loom, Drive, Dropbox, podcast audio, embedded recorder submissions, and direct uploads. Slack is the front door for the analysis layer of every one of them.
Takımlar en önemli çağrıları için Speak AI’ye güveniyor
4.9 G2'de
“Speak AI, nitel verileri nasıl işlediğimizi dönüştürmede müdür olmuştur. Transkripsiyon doğruluğu etkileyici ve NLP içgörüleri bize manuel analiz saatlerini kurtarıyor.”
Araştırma Müdürü | Danışmanlık Firması
“Otter.ai’den geçtik ve analiz derinliği başka bir seviyede. Sentiment puanlama, anahtar kelime çıkarma ve tema tespiti otomatik olarak gerçekleşiyor.”
Ürün Yöneticisi | SaaS Şirketi
“Tüm müşteri aramalarında arama yapabilmek ve belirli anları çekebilmek, destek ekibimiz için oyun kurallarını değiştiren bir özellik.”
CX Müdürü | Enterprise Tech
How to use Speak AI with Slack for transcription and team awareness
Slack is the operating system for most modern teams. Sales pipelines run in deal channels. Support queues run in oncall channels. Research synthesis happens in dedicated insight channels. The challenge is getting structured intelligence about customer conversations into those channels in real time, without forcing your team to leave Slack to read transcripts. Speak AI solves this by treating Slack as a first-class output destination, not an afterthought.
Where Speak fits in the Slack workflow
Speak runs after the call. Recordings flow in from Zoom, Teams, Meet, Webex, Twilio, Loom, Drive, Dropbox, podcast audio, embedded recorder submissions, or direct uploads. Speak transcribes them in 100+ languages, runs AI analysis, and exposes the result through three Slack-facing surfaces: a native OAuth integration with a channel picker, an Incoming Webhook flow for custom routing logic, and a slash-command path for ad-hoc team queries.
Native Slack integration vs Incoming Webhook
The native Slack OAuth path (POST /v1/integration/slack/connect) is the recommended starting point. It exposes a channel picker inside Speak, handles signing, retries, and Block Kit formatting on Speak’s side, and supports two-way events (Slack to Speak via the Events API). Best for teams that want a working integration in 5 minutes with no Block Kit code to maintain.
The Incoming Webhook path is for teams that need custom routing logic. Different folder tags route to different channels. Different sentiment thresholds trigger different message templates. Different custom Magic Prompts produce different Block Kit cards. You write the formatting code; Speak supplies the analysis. Best when the routing logic is non-trivial.
Slash command pattern
The slash command path (Tab 3 above) is ad-hoc, not real-time. A team member types /ask-speak {mediaId} {question} in any Slack channel. Your handler verifies the Slack signature, fires Speak’s Magic Prompt API, polls for the answer (typical completion 2 to 3 seconds), and posts back to the same thread via response_url. Best for one-off questions about specific calls without context-switching to the Speak app.
Authentication and Slack scopes
The native OAuth flow requests these Slack scopes: chat:write (post messages), channels:read (list public channels), users:read (resolve user mentions), files:write (attach transcript files). The Events API path adds commands for slash command handling. Your Speak account stores the Slack accountId reference; the actual OAuth token lives encrypted on Speak’s side.
Real-time vs post-call delivery
Speak posts to Slack after the call ends, with first transcripts typically available within 60 seconds for a 10-minute call. For during-call live captions, use Slack’s native huddle transcription or pair Slack with a real-time transcription provider. Use Speak for the post-call analysis layer that lands in your team channels.
How do I forward Speak transcripts into Slack automatically?
Three production paths, ranked by lift:
- Native OAuth + send-transcription endpoint. Connect Slack in Speak, then call
POST /v1/integration/slack/send-transcriptionilemediaId,channelIdveaccountId. Speak handles formatting and posting. Best for most teams. - Incoming Webhook + Block Kit. Subscribe Speak’s
media.analyzedwebhook, fetch the insight, format as Block Kit, POST to your Slack webhook URL. Best for custom routing. - Zapier. Trigger: Speak New Media Analyzed. Action: Slack Send Channel Message. 5-minute setup. Best for SMB teams without engineering bandwidth.
The same patterns work for sales calls, support calls, customer interviews, and recorded internal meetings.
Role’a Göre Kullanım Örnekleri
Satış ve RevOps ekipleri push deal-call summaries to a pipeline channel. Magic Prompts score discovery completeness, surface objections, and extract competitor mentions. The whole team sees every call without watching the recording. See Satış ekipleri için Speak AI.
Müşteri desteği ve CX ekipleri route inbound call analysis to oncall channels. Sentiment dips trigger automatic alerts. Cancellation language fires a manager mention. Multilingual support queues work without per-language setup since Speak supports 100+ languages.
Müşteri araştırması ekipleri push verbatim quotes from interviews into research synthesis channels. Code themes across the entire library, ask Claude for verbatim quotes via MCP, drop the top hits into a thread. See Nitel araştırmacılar için Speak AI.
Training and enablement teams turn coaching moments into Slack-accessible content. Speak’s analysis surfaces missed discovery questions and scripted-line drift; the structured output lands in the training channel for review. See Speak AI for training and development.
Sıkça sorulan sorular
Does Speak AI have a native Slack integration?
Yes. Speak ships full Slack OAuth, channel listing, signed Events API ingestion, and per-account event subscriptions. Connect once at Settings > Integrations > Slack in the Speak dashboard. Most teams use this rather than building custom Incoming Webhooks.
How do I post a Speak transcript to a Slack channel?
Two ways. Native: connect Slack in Speak, then call POST /v1/integration/slack/send-transcription with the media ID, channel ID, and Speak account ID. Speak handles formatting and posting. Custom: subscribe Speak’s media.analyzed webhook, fetch the insight, build a Block Kit card, POST to a Slack Incoming Webhook URL. Both paths run in production today.
Can I add a slash command to query Speak from Slack?
Yes. Add a slash command in your Slack app pointing to your server. Your handler verifies the Slack signature, fires Speak’s Magic Prompt API, polls for the answer, and posts back to the same thread via response_url. Acknowledge within 3 seconds (Slack timeout) and post the real answer asynchronously.
What Slack scopes does the native integration request?
The OAuth flow requests chat:write, channels:read, users:readve files:write for the message-posting flow. Add commands if you wire up the slash-command Events API path. Your Slack workspace admin can pre-approve Speak in the admin console for org-wide rollouts.
Can Speak post to private channels?
Yes, but the Speak app must be invited to the private channel first. Public channels appear in the channel picker automatically once Slack OAuth is approved. For private channels, run /invite @speakai in the channel before listing it via GET /v1/integration/slack/:accountId/channels.
Can I try Speak AI for free with my Slack workspace?
Yes. The 7-day trial includes credits for transcription, full API access, the native Slack OAuth, the send-transcription endpoint, and the MCP server. No credit card required. Connect a Slack workspace, send a test recording, and validate the full pipeline before committing.
Start using Speak AI with Slack today
83 analysis tools. 100+ languages. Native Slack OAuth, Incoming Webhook, slash commands. MCP-native for Claude and ChatGPT. Same workspace as your Zoom, Teams, Webex, and Twilio calls.
Speak AI'yı ücretsiz deneyin.
Create your account, connect Slack, and the next recording lands in your channel automatically. Full access for 7 days. No credit card required.
API belgelerini görüntüleyin
Full reference for the send-transcription endpoint, webhook event types, the Magic Prompt API, and the Speak Slack Events API path. Plus the Speak Zapier app and the official MCP server on NPM.




