open_voice_bridge
Open a phone call you drive one turn at a time: we dial, transcribe what the other side says, and speak whatever text you send. You call voice_bridge_say to talk, poll_voice_bridge to read transcripts, end_voice_bridge to hang up. ⚠ Turn-based, NOT full-duplex conversation. After the callee stops talking, about 2 seconds of ours pass before your reply starts to play (we recognise the end of their turn, then speech starts under a second after you send the text), on top of your own model's thinking time: slower than the ~0.8s a natural back-and-forth needs. The callee cannot interrupt you while you speak. Pass filler (a short phrase such as 'One moment, please.') to cover a slow reply: we say it once if you have not started answering about 3.5 seconds after they stop. The loop: poll_voice_bridge with waitMs (e.g. 20000) returns when the callee has finished talking; answer with a short voice_bridge_say (one or two sentences); repeat. Good for: leaving a spoken message, navigating a voice-driven IVR (keypad tones are not supported yet), reading something out, a slow exchange where a pause is fine. For a real conversation with a human, use ai_call — we run the agent at conversational speed and return the transcript. Unused deposit time is refunded automatically when the call ends — including when the callee hangs up. Pass refundAddress (a Lightning address your user gave you; never invent one) and the remainder is SENT there with no further action; without it the refund is held as a claimable LNURL-withdraw link returned by end_voice_bridge. Use this when the content of the call must never leave your side, and the pace can tolerate a pause between turns. When NOT to use: not for fully-managed agent-style calls where we handle the brain (use ai_call). Not for one-shot TTS broadcasts or IVR playback (use place_call). Not when live transcript polling adds no value — the per-turn overhead isn't worth it. Privacy: transcripts held in memory only, garbage-collected 30 minutes after the call ends; call audio is never persisted. Pay with Bitcoin Lightning — no telecom account, no signup. Requires create_payment with toolName='voice_bridge_open', phoneNumber, durationMinutes. Deposit is priced per destination off the carrier rate sheet and is BTC-pegged, so call create_payment for the exact figure; premium-rate and satellite ranges are refused.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| codec | No | PCMU 8kHz (default, universal) or L16_16000 for HD voice when both endpoints support it | |
| filler | No | Optional. A short phrase (at most 60 characters) we say ONCE when you are slow: if about 3.5 seconds pass after the callee stops talking and your voice_bridge_say has not started, the callee hears it, so they know you are still there. Example: "One moment, please." Write it in the callee's language. It is made while the phone rings and spoken in our default voice. It plays at most once until you speak again, the callee is not heard while it plays, and poll_voice_bridge then shows a filler_played event (do not say "one moment" yourself). Leave it out for a voicemail or a phone menu, where it is noise, and when you wait for long pauses (quietMs of several seconds): it would fire inside the pause and cut into their next words. | |
| greeting | No | Spoken the instant the callee answers (max 500 chars). Synthesized while the phone rings, so there is no pause before the first word — without it the callee hears silence until your first voice_bridge_say lands. Strongly recommended for any call a human answers. | |
| language | No | BCP-47 language tag (default en-US). See /api/l402/voice-bridge/coverage for the matrix. | |
| paymentId | Yes | Valid payment ID from create_payment (toolName=voice_bridge_open) | |
| sttEnabled | No | Default true. Set false for TTS-only broadcast calls. | |
| ttsEnabled | No | Default true. Set false to bring-your-own-audio via voice_bridge_say. | |
| phoneNumber | Yes | Destination phone number in E.164 format (e.g., +14155550100) | |
| refundAddress | No | Lightning address of YOUR user (for example name@wallet.com), only if the user gave you one. Never invent or guess an address: the refund is paid out at once and cannot be called back. The unused deposit is sent here when the call ends. With no address, or if that payment fails, the refund waits as an LNURL-withdraw link. | |
| durationMinutes | No | Deposit for N minutes, 2-30 (default 3). Unused time refunded. |