Skip to main content
After this guide, your agent joins a video meeting as a named participant, speaks with the voice you chose, follows the room’s cues about when to talk, and leaves a structured summary behind. The agent joins through Recall.ai; you need nothing from the meeting provider beyond a join link. The channel is configured in the admin dashboard or over the admin REST API, and the agent can also be sent into a meeting from code. Verified against lua-cli 3.33.0. Before you begin
  • A voice defined with defineVoice and pushed with lua push voice. The meeting uses the voice the channel names, or the agent’s first voice.
  • Access to the agent in the admin dashboard, or an API key with the scopes for what you do: channels:manage to configure the channel, telephony:write to join, mute, or change role, telephony:read to list sessions, and telephony:manage to remove the agent from a meeting.
  • A public Google Meet, Zoom, or Microsoft Teams link for a meeting you may add a participant to.
1

Dashboard: configure the meeting channel

Each agent has one meeting configuration, created or updated with PUT /admin/agents/<agentId>/channels/meeting; only the fields you send change. botName is the participant name (default Lua Agent), botAvatarUrl a public image for its tile, voiceId the voice that speaks, and voiceConfig.welcomeMessage what it says on joining.role sets how the agent participates: active_participant, expert_on_call, facilitator, or note_taker. Omit it and the platform picks active_participant for one or two people and facilitator for three or more, switching as people join and leave. A summary is generated and stored for every meeting with a transcript; autoDistributeSummary (default true) controls only whether it is queued for distribution, and a note_taker distributes regardless. memory gives the agent a “previous meetings” block at the start: { "enabled": true, "scope": "meetingUrl" } remembers earlier meetings at the same link (a recurring standup), "scope": "channel" all of the agent’s meetings, with lastN summaries (default 3).
2

Invite the agent

From the admin dashboard, or with POST /admin/agents/<agentId>/meetings/join and { "meetingUrl": "https://meet.google.com/abc-defg-hij" } (optionally botName), the agent joins the meeting and the call starts. From code, send it in with the voice runtime:
The URL must be a public http(s) address; private and local hosts are refused with meetingUrl must be a public http(s) URL. The returned callId is the meeting participant’s id, used to remove it later.
3

Steer the agent during the meeting

Participants address the agent by its name. “<name>, be quiet” or “hold on” mutes it for a minute, “okay, go ahead” unmutes, “are you there?” makes it speak next, “what do you think?” hands it the floor, and “you can leave now” or “thanks, that’s all” ends its participation. The admin dashboard has the same controls over REST: POST /admin/agents/<agentId>/meetings/<sessionId>/mute with { "muted": true }, POST …/<sessionId>/role with { "role": "note_taker" }, and DELETE …/meetings/<botId> to remove it.
4

Verify

List the agent’s meeting sessions, active or ended, with GET /admin/agents/<agentId>/meetings?active=true, and read one with GET …/meetings/<sessionId>/full, which returns the meeting session plus the call record with its transcript and summary. Meetings also appear as voice sessions in the call log.

Channel behavior

Limits

Troubleshooting

The link points at a private network, a local host, or a non-HTTP scheme. Paste the public join link from the calendar invite.
With three or more participants the default role is facilitator, which waits to be addressed. Say the agent’s name, set role to active_participant, or change it live with the role endpoint.
Mute and role changes work only while the agent is in the meeting. List meeting sessions with active=true to find the live one.

Next steps

About voice

How a voice definition, a channel, and a voice session fit together.

Voice runtime reference

Voice.call targets, including meetings.

Voice calls

The same voice on a phone number.

Logs and debugging

Read call and meeting records.