A Google Meet bot is a program that joins a meeting as a participant. The catch is that Google has no API that lets a bot talk in a call. Google’s Meet Media API only lets an app receive a meeting’s audio and video. It is still in Developer Preview, and every participant in the call has to be enrolled in that preview. So a bot that speaks in Google Meet has to join the way a person does: a Chrome browser opens the meeting link, and its microphone is wired to a voice AI model.
That leaves three ways to build one. You can write the whole stack yourself, use a meeting-bot API that handles the joining, or use a platform where joining, voice, and analysis already work. This guide walks through how the pieces fit together, what each path asks of you, and how to send a talking agent into Google Meet or Zoom with Tough Tongue AI, from the dashboard, from your own code, or from Claude and ChatGPT.
Here is a short walkthrough of the no-code path:
How a Google Meet bot actually works
Take away the product names, and every talking meeting bot does the same five jobs.
- Join. A headless Chrome browser opens the Meet link, switches on the camera and microphone, and asks to join. Puppeteer and Playwright are the usual tools. If the meeting only admits signed-in users, the browser needs a real Google account.
- Listen. The bot pulls the call’s audio out of the browser and streams it to a server.
- Think. Speech-to-text turns the audio into words, a language model decides what to say, and text-to-speech turns the reply back into audio. Some teams replace that chain with one real-time speech model. Either way, this step has to judge when the other person has finished talking, and stop when someone interrupts.
- Speak. The reply plays into the call through a virtual microphone, so everyone hears the bot like any other participant. A video avatar goes in the same way, through a virtual camera.
- Report. When the call ends, the bot keeps the recording and transcript and runs whatever analysis you need.
The first two jobs are plumbing, and there is good open-source work on them. The third is where the experience lives. A bot that pauses too long before it answers, or talks over people, feels broken no matter how good its answers are.
Zoom is a little different. It offers a Meeting SDK, so a bot does not have to drive a browser, but the SDK is low-level. The open-source Attendee project points out that features like per-participant audio are only in the C++ versions of it.
Every one of these jobs has to work on every call. That is the real cost of a meeting bot, and it is the useful way to look at the choice below.
Three ways to build a Google Meet bot
How you build one comes down to how much of that stack you want to own.
1. Write it yourself
Start with Puppeteer or Playwright for the joining, then add speech-to-text, a model, and text-to-speech. Recall.ai has open-sourced a small Playwright bot that joins a Google Meet, scrapes the live captions, and summarizes them. It is a good way to see the moving parts.
You get full control, and you own every problem. Each bot needs its own isolated container so audio from two meetings never mixes. The Google accounts your bots sign in with need looking after. The join flow breaks when Google changes the Meet interface, and someone has to fix it that day. For a bot that holds a real conversation, plan for two to three months of engineering before it is reliable.
2. Use a meeting-bot API
Recall.ai is a hosted option, and Attendee and Vexa are open-source ones you can run yourself. They handle joining, recording, and transcripts across Google Meet, Zoom, and Microsoft Teams, and several can also play audio into the call. You send one API call and a bot shows up.
What they do not give you is the agent: what it says, when it says it, how it handles being interrupted, and how the call gets scored. You still build that part, and it is the part people in the meeting notice.
3. Use a no-code agent platform
This is the path we built Tough Tongue AI for. You describe the agent in plain language: its role, its agenda, and how to score the call. The platform handles joining Google Meet or Zoom, the real-time voice, an optional video avatar, the recording, and the analysis after the call. You give up some low-level control, and in return you can test a working agent the same day.
- joining
- audio in and out
- recording
- voice agent
- avatar
- scoring
- joining
- audio in and out
- recording
- voice agent
- avatar
- scoring
- joining
- audio in and out
- recording
- voice agent
- avatar
- scoring
If you were about to hire a freelancer
Many people looking into this are about to hire someone to build it. That can be the right call, but scope it first. A bot that only joins and records is a modest project on top of a meeting-bot API. A bot that talks back is a much bigger one: real-time voice, turn-taking, interruptions, one isolated bot per meeting, and someone on call when Google changes the Meet interface and joins start failing. Ask how they will handle each of those, and who fixes it in month four.
If what you need is an agent that runs interviews, discovery calls, or coaching sessions, try the no-code path first. In an afternoon you will know whether the agent is good enough. If it is not, you will have a much sharper spec to hand a developer.
“Hi, I’m Paris, the AI interviewer. Can you hear me okay?”
Send to a meetingDescribe the agent in plain language, paste a Meet or Zoom link, and read the scored report when the call ends.
- Write a scenario: the role, the questions, and the rubric.
- Open the Meeting Bot tab and paste your Google Meet or Zoom link.
- Get the transcript and scores in your inbox after the call.
What your agent can do in the meeting
Tough Tongue AI has two kinds of meeting agents, and the difference is whether the agent talks.
Streaming agents join with a video avatar and take part in the conversation. They listen, answer, ask follow-up questions, and can use tools like slides, a whiteboard, or image generation while they talk. If you want an agent that runs a screening interview or a discovery call on its own, this is the one.
Notetaker agents join with the camera and microphone off. They do not speak. They listen, record, and score the conversation against your rubric, then send a report when the call ends. This is the one for coaching sales calls or reviewing interviews your team runs.
- “Walk me through a product you launched.”
- “What would you change if you did it again?”
Some of the ways teams use them:
- First-round screening interviews. A streaming agent asks your questions, follows up on vague answers, and scores the candidate. You read the report instead of sitting through the call.
- Sales call coaching. A notetaker joins discovery calls and demos and scores the opening, the discovery questions, objection handling, and next steps, each backed by quotes from the call.
- Investor pitch review. A notetaker sits in on fundraising meetings and scores narrative clarity, financial fluency, team credibility, and the close.
- Roleplay training. A streaming agent plays the difficult customer, the tough negotiator, or the skeptical buyer, so your team can rehearse before the real call.
All of these are set up the same way, as a scenario: a plain-language description of the agent’s role, what it should do in the call, and how to score it. If you are building one specifically for sales calls, I wrote a longer guide on AI meeting agents for sales that covers the business context the agent needs.
Can an AI agent attend a meeting for you?
Partly, and it is worth being clear about where the line is. An agent can attend as itself. It joins under its own name, posts a short chat message when it arrives so people know an AI is in the call, and does a specific job: runs an intake conversation, answers product questions, or takes scored notes. It should not pretend to be you. People in a meeting deserve to know who they are talking to, and a named AI participant with a clear job is also easier to trust.
So the useful version of “attend my meeting for me” is to send an agent to the meetings that follow a repeatable pattern, like screening calls, first discovery calls, or practice sessions, and read the report afterward.
Build a Google Meet agent step by step
This is the no-code path. You need a Tough Tongue AI account on the Premium or Business plan.
Step 1: Write the scenario
Go to the Scenario Library and click Create New Scenario. A scenario defines three things:
- Role. Who the agent is: “a senior PM interviewer” or “a silent note-taker for sales calls.”
- Agenda. What it does in the call: the questions to ask, the coaching flow, or what to watch for.
- Rubric. How the conversation is scored afterward: the dimensions, and what good looks like on each.
You write all of it in plain language. Here is a talking agent that runs a first-round screen:
ROLE
You are Ava, an AI interviewer for a product manager role at Acme.
Be warm, direct, and brief. Say at the start that you are an AI.
AGENDA
1. Ask the candidate to walk you through their current role.
2. Ask about a product they launched: the problem, their decisions, the result.
3. If an answer is vague, ask one follow-up for a specific example.
4. Leave time for the candidate's questions, then close politely.
RUBRIC
Score each dimension from 1 to 10 and quote the answer behind each score.
- Product sense
- Clarity of communication
- Ownership and impactAnd here is a silent agent that scores sales discovery calls:
ROLE
You are a sales discovery call coach. Stay silent for the whole call.
WATCH FOR
- Opening and agenda setting
- Discovery depth
- Talk-to-listen ratio
- Closing and next steps
RUBRIC
Score each dimension from 1 to 10. After the call, give the rep's top
strength, the biggest missed opportunity, and one concrete drill to practice.For a silent agent like the second one, turn on Notetaker Mode and Audit Mode in the meeting settings. That keeps it quiet and focused on observation.
Step 2: Open the Meeting Bot tab
Go to Library, open your scenario, and click the Meeting Bot tab. This is where you send the agent into meetings.
Step 3: Send the bot into a meeting
There are two modes in the dashboard.
Custom Meeting mode is for one-off calls. Pick Google Meet or Zoom, paste the meeting link or create a fresh Google Meet room, optionally choose a time for the bot to join, and deploy. The agent joins the call.
Calendar mode is for meetings that repeat. Connect your Google Calendar, which gives read access so the platform can see your meetings. Then add keyword filters like “interview” or “discovery”, and the agent joins any meeting whose title matches. Each scenario has its own calendar connection and keywords, so different agents can cover different kinds of meetings.
If the bot should join as part of your own product, for example when a candidate books an interview slot in your app, use the API. If you would rather ask an AI assistant to do it, use MCP. Both are covered below.
Getting the bot into private meetings
Getting in is the step people ask about most. On Google Meet, the bot joins as a signed-in Google account rather than an anonymous guest, and how it gets in depends on the meeting’s access settings.
Open meetings. If anyone with the link can join, the bot joins directly. There is nothing else to do.
Private meetings. Google Meet holds the bot in the waiting room, like any guest who was not invited. You have two options:
- Admit it. Someone in the call sees “someone wants to join” and clicks Admit. This works well for notetakers, where a person is already in the meeting and expects the bot.
- Invite it. Add
ttai@toughtalkai.comas an attendee on the calendar event. Google then treats the bot as an invited participant, and it joins without knocking.
The invite matters most for autonomous agents. If the agent is running a first-round interview and the candidate is the only human in the room, nobody is there to click Admit.
On Zoom, paste the meeting link in Custom Meeting mode. If the meeting has a waiting room turned on, the host admits the bot the same way they would admit a person.
A word on access, since people ask. The bot never needs your Google password. Calendar mode asks for read access to your calendar so it can see meeting titles and times. Custom Meeting mode needs no calendar access at all, only the link. And because the bot shows up as a named participant and posts a short chat message when it joins, everyone in the call knows an AI agent is there.
What you get after the call
When the call ends, the platform processes the session:
- Transcript. The full conversation, generated automatically.
- Analysis. The call is scored against the rubric in your scenario. Each dimension gets a score, evidence in the form of quotes and timestamps, and coaching notes.
- Email report. The scores and analysis go to the scenario admin.
- Session dashboard. Every session, with its recording, transcript, and evaluation, is on the Sessions page.
The analysis points at specific moments. For the sales scorer above, a report might give opening and agenda setting a 7 out of 10, discovery depth an 8, talk-to-listen ratio a 5, and closing a 6. It then quotes the moment at 4:32 when the rep asked what the problem cost in engineering hours, a question that turned a vague complaint into a $180K-a-year pain point. It names the biggest miss: when the prospect said “we already have something for that,” the rep moved to the next feature instead of asking what the current tool does well. And it ends with one drill for the next call.
If you want the results somewhere else, you can pull them with the API, have them pushed to your server with webhooks, or send them to Google Sheets with the Apps Script integration. The reference below has the details.
Run it from Claude, ChatGPT, Codex, or Cursor
You can also do everything in this post by asking an AI assistant. Tough Tongue AI runs a hosted MCP server, so Claude, ChatGPT, Codex, Cursor, GitHub Copilot, Windsurf, and Gemini CLI can write scenarios, schedule meeting bots, and pull session results for you. There is nothing to install. You add one URL and sign in through your browser.
claude mcp add --transport http ttai https://api.toughtongueai.com/api/public/mcpcodex mcp add ttai --url https://api.toughtongueai.com/api/public/mcp
codex mcp login ttaiIn claude.ai, add it under Settings > Connectors > Add custom connector with the same URL. In ChatGPT, turn on Developer mode, then create an app with that URL under Settings > Apps. Scheduling a bot is a write action, so in ChatGPT it needs a Business, Enterprise, or Edu workspace. The setup guide has the exact steps for each client.
Then ask for what you want in plain language:
Create a first-round screening scenario for a product manager role at Acme.
Then send it to https://meet.google.com/abc-defg-hij tomorrow at 3 pm
as "Ava (AI interviewer)".After the call, a follow-up like “How did yesterday’s candidate score, and where were they weakest?” pulls the session and its rubric scores. In Claude Code and Codex, the Tough Tongue plugin adds skills on top of the server for writing scenarios, fixing them from real sessions, and analyzing results.
Developer reference: the meeting bot API
Use the REST API when the bot should join as part of your own product. Requests go to https://api.toughtongueai.com/api/public with a Bearer key from Developer Settings. You need a Premium or Business plan and edit access to the scenario.
| What you want | Endpoint |
|---|---|
| Send a bot to a meeting | POST /v2/meeting-bots |
| List bots and their status | GET /v2/meeting-bots |
| Cancel a scheduled bot | DELETE /v2/meeting-bots/{bot_id} |
| List sessions with scores | GET /v2/sessions |
| Get one session’s transcript and analysis | GET /sessions/{session_id} |
Send a bot into a meeting
curl -X POST https://api.toughtongueai.com/api/public/v2/meeting-bots \
-H "Authorization: Bearer $TTAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"scenario_id": "YOUR_SCENARIO_ID",
"meeting_url": "https://meet.google.com/abc-defg-hij",
"meeting_provider": "google-meet",
"bot_name": "Ava (AI interviewer)",
"scheduled_ts": "2026-10-01T15:00:00Z"
}'The response gives you a bot_id and a session_id right away:
{
"success": true,
"bots": [{ "bot_id": "67bf57183f44cdf6055a8166", "session_id": "67bf57183f44cdf6055a8167" }]
}Keep the session_id. That is where the transcript and scores will be once the call ends.
| Field | Required | What it does |
|---|---|---|
scenario_id | Yes | The agent to send. |
meeting_url | Yes | A Google Meet or Zoom link. Put several links on separate lines to send several bots. |
meeting_provider | Yes | google-meet or zoom. |
bot_name | Yes | The name people see in the call. Make it clear that it is an AI. |
scheduled_ts | No | When to join, in ISO 8601. Leave it out to join right away. |
login_required | No | Set to true when the Google Meet only admits signed-in accounts. |
dynamic_vars | No | Values passed into the scenario, like a candidate’s name. |
Microsoft Teams support is coming. Until then, stick to google-meet and zoom.
Check on bots, or cancel one
# Bots that finished their call since September 1
curl "https://api.toughtongueai.com/api/public/v2/meeting-bots?status=call_ended&from_date=2026-09-01" \
-H "Authorization: Bearer $TTAI_API_KEY"
# Cancel a bot that has not joined yet
curl -X DELETE https://api.toughtongueai.com/api/public/v2/meeting-bots/BOT_ID \
-H "Authorization: Bearer $TTAI_API_KEY"A bot’s status is pending, scheduled, in_call_recording, call_ended, or failed. You can filter the list by status, scenario_id, and a date range with from_date and to_date. Only bots that are still pending or scheduled can be canceled.
Get the results
When the call ends, fetch the session:
curl https://api.toughtongueai.com/api/public/sessions/SESSION_ID \
-H "Authorization: Bearer $TTAI_API_KEY"The response includes transcript_url, evaluation_results with a report_card that has a score and a note for each rubric topic, and improvement_results with the coaching notes. GET /v2/sessions?scenario_id=... lists every session for a scenario with the same scores, which is handy for a dashboard.
Polling works, but webhooks are cleaner. Register an endpoint under Developer > Webhooks and subscribe to session.completed (the call ended), session.analyzed (the scores are saved), or post-session.done (everything you configured has finished). Deliveries are signed with the Standard Webhooks scheme and carry the session_id. They fire only for sessions that belong to an organization, and they are not retried. So verify the signature, return a 2xx within 10 seconds, and do the real work in the background.
import json, os
from fastapi import BackgroundTasks, FastAPI, Request
from standardwebhooks import Webhook
app = FastAPI()
wh = Webhook(os.environ["TTAI_WEBHOOK_SECRET"])
def save_scores(session_id: str) -> None:
... # GET /api/public/sessions/{session_id}, then store evaluation_results
@app.post("/webhooks/ttai")
async def ttai_webhook(request: Request, tasks: BackgroundTasks):
body = await request.body()
wh.verify(body, dict(request.headers)) # raises on a bad signature
event = json.loads(body)
if event["event"] == "session.analyzed":
tasks.add_task(save_scores, event["data"]["session_id"])
return {"ok": True}Embed a “Start meeting” button on your site
If you want visitors on your website to start a meeting with your agent, add one script tag:
<script
src="https://app.toughtongueai.com/widget/meeting-bot.js"
data-scenario-id="YOUR_SCENARIO_ID"
data-mode="button"
data-title="Talk to Sales"
data-button-text="Start Meeting"
data-t-company="Acme">
</script>It adds a floating button, or a bar across the bottom of the page with data-mode="strip". When a visitor clicks it, the platform creates a meeting, the agent joins, and the visitor lands in the Google Meet room in a new tab. The widget renders inside a Shadow DOM container and loads an iframe from Tough Tongue AI’s domain, so your page’s CSS does not leak into it and there is no CORS setup on your side.
| Attribute | What it does |
|---|---|
data-scenario-id | The agent that joins the meeting. |
data-mode | button for a floating button, or strip for a bar across the bottom. |
data-theme | light or dark. |
data-title, data-subtitle | The card’s heading and the line under it. |
data-button-text | The label on the start button. |
data-avatar-video, data-avatar-url | A looping video or a still image for the agent. The video wins if you set both. |
data-t-* | Variables passed into the scenario. data-t-company="Acme" passes company. |
data-config | A base64-encoded JSON config, such as a list of allowed emails. |
FAQ
How do I build a Google Meet bot?
Google has no API that lets a bot speak in a meeting, so a Google Meet bot joins like a person: a headless Chrome browser opens the meeting link and its microphone is wired to a voice AI model. You can build that yourself with Puppeteer or Playwright, use a meeting-bot API such as Recall.ai or the open-source Attendee, or use a no-code platform like Tough Tongue AI, where you describe the agent in plain language and paste the meeting link.
Can an AI agent join a Google Meet call and talk?
Yes. A voice AI agent joins as a named participant, listens, and answers out loud in real time, with an optional video avatar. In Tough Tongue AI you write a scenario with the agent’s role, agenda, and scoring rubric, then send it to a Google Meet or Zoom link from the Meeting Bot tab, the API, or an AI assistant connected over MCP.
Does the meeting bot work with Zoom and Microsoft Teams?
Google Meet and Zoom are supported today. Paste a Zoom link in Custom Meeting mode, or set meeting_provider to zoom in the API. Microsoft Teams support is coming but is not live yet.
How do I let the bot into a private Google Meet?
A participant can click Admit when the bot knocks, or you can add ttai@toughtalkai.com as an attendee on the calendar event so the bot joins as an invited guest without knocking. Open meetings need neither step. The bot never needs your Google password. Calendar mode only asks for read access to your calendar, and Custom Meeting mode needs only the link.
Can an AI agent attend a meeting for me?
It can attend as itself, not as you. The agent joins under its own name, posts a short chat message when it arrives, and does a defined job, such as running a screening interview, handling a first discovery call, or silently scoring the conversation. You get the transcript and analysis afterward.
Should I hire a freelancer to build a Google Meet bot?
It depends on the bot. One that only joins and records is a modest project on top of a meeting-bot API. One that talks back needs a real-time voice pipeline, turn-taking, one isolated bot per meeting, and ongoing fixes when Google Meet changes, which is closer to two to three months of work. If you need an agent that runs interviews or sales calls, test a no-code platform first.
Is there an API to send a bot into a meeting?
Yes. Send POST /v2/meeting-bots to https://api.toughtongueai.com/api/public with a Bearer API key, a scenario_id, the meeting_url, the meeting_provider, and a bot_name. The response returns a bot_id and a session_id. You fetch the transcript and scores from GET /sessions/{session_id}, or get them pushed to you with webhooks.
How much does the meeting bot cost?
The meeting bot is included on the Premium plan at $20 per month and on Business plans from $99 per month. It uses your existing platform minutes, with no separate meeting-bot fee.
Getting started
- Sign up at app.toughtongueai.com and choose the Premium or Business plan.
- Write a scenario with the agent’s role, agenda, and rubric.
- Send it to a meeting from the Meeting Bot tab, the API, or your AI assistant.
- Read the results in the session dashboard, in your inbox, or in your own system.
Meeting bots used to mean notetakers. What changed is that the voice loop got good enough for an agent to hold up its end of a conversation, and a lot of real work happens in meetings. Start with one meeting that repeats, like a first-round screen or a first discovery call. Read the reports for a week, and tighten the scenario based on what you see.
If you want help setting one up, book 15 minutes with me. For more detail, see the Google Meet agent docs, the API reference, the webhooks guide, or the video demo. For a look at how avatar companies are moving into meetings, see the post on Tavus PALs joining Google Meet.