Skip to main content
A live call is a private Daily room with three participants.
  • User browser. The person on the call.
  • Your voice bot. It hears the browser, decides what to say, and produces the assistant audio. It does not publish a camera or a microphone back into the Daily room. AkapuluAvatar is the Pipecat plugin you add to that voice bot; it sends the assistant audio to the Akapulu Labs worker instead.
  • Akapulu Labs worker. It joins after the Akapulu Labs API POST /api/live-sessions/ call and publishes the face and the played audio.
Your server talks to two APIs the same way: the Daily API (room and meeting tokens) and the Akapulu Labs API (POST /api/live-sessions/, which returns session_id and starts the worker).

Akapulu Labs worker joins

Your voice bot joins

User browser joins

All together

Full sequence

What you send

create_akapulu_call in pipecat-akapulu does this from your server: the private Daily room, the three meeting tokens, and POST /api/live-sessions/. It returns the room URL, the bot token, the browser token, and session_id. The room lasts two hours unless you pass room_exp_secs. The code is on Your bot. A server that already has a Daily room skips the helper and sends this POST itself. The Akapulu Labs API call is POST /api/live-sessions/. It takes four fields:
  • avatar_id: which face joins
  • show_ai_label: whether the picture shows This is AI
  • room_url: the Daily room you created
  • avatar_token: the meeting token the Akapulu Labs worker joins with
The response is session_id. Pass that id into AkapuluAvatar, the Pipecat plugin in your voice bot. The Akapulu Labs API key stays on your server. The browser receives its own meeting token from you, not the API key.

What the Akapulu Labs worker publishes

The voice bot’s job is to send the assistant audio to the Akapulu Labs worker through AkapuluAvatar. The worker joins the call as a Daily participant and publishes the audio and the video. Leave audio out and video out off on the voice bot. If the voice bot also publishes audio or video, the room has two publishers. When the participant named Avatar joins, the voice bot unsubscribes from that microphone. The browser stays subscribed to it. The code is on Your bot. Every frame carries an invisible mark that reads back as akapulu. That mark is separate from the This is AI card. Verify a recording uploads the mp4 and reads the mark. A hosted link is the same room, created for you. You set the avatar, the prompt, and the This is AI card. The visitor opens the URL and starts the call. The steps for your own voice bot are in Your bot.