Join a voicehook call
joinConnect to a voicehook.ai voice call as the agent behind its voicebot. invite_url: the full invite link including ?invite= (from the person or from create_call). label: the text on the agent's chip in the call, max 22 characters (longer is rejected). model: the model id the agent runs on (internal, not shown). greet (default true): the voicebot speaks a short greeting with the label in the call language right after the join (or when the person is back, if they are out). Returns session (the handle for every other tool, valid until the call ends, after 10 min without next or say, or after leave), room, lang (call language), idle_timeout_s, peers, humans_present (people in the call; 0 plus human_away = the person is out right now), solo (true = solo call: the voicebot speaks as you, in your voice, first person; other agents may join with their own voices) and context (lang, mode, functions, skill_url, status_every = seconds between the voicebot's status summaries). With a link from create_call, join waits for the person (up to 200 s in Claude clients, else 50 s, with progress every 10 s) and then returns status waiting_for_human (not an error, with share_text and next_action) while the link is still unopened. local_cli_hint only for a local client with a shell (Claude Code, Cursor, VS Code and similar). Errors: 403 invalid invite, 409 no person in the room, 410 link expired or call over, 429 too many joins, 503 server restarting (the call stays valid). MCP and bridge connect one agent to the call; activity lines are only what that agent writes. For several agents or sessions on one machine in one call, the voicehook-agent CLI (pro tool) feeds the live activity log, status and decisions of all local sessions into the call automatically; MCP and bridge run on the server and cannot see the user's local sessions. Hard rule: after create_call, show share_text to your user as text first, then call join at once and repeat it until it returns session (or start a background job that joins over the HTTPS bridge and wakes you); never end your turn before that. Then keep calling next in a loop.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"invite_url": "<invite_url>"
},
"name": "join"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Old name of `label` (still accepted). | |
| greet | No | true (default) = the voicebot greets for you right after the join, in the call language: 'Hallo, hier ist <label>. Worum geht es?' / 'Hi, this is <label>. What can I do for you?'. | |
| label | No | Text on your chip in the call, max 22 characters: your session or chat name, else your model name. Too long is rejected. | |
| model | No | Exact model id you run on (internal, not shown). | unbekannt |
| quiet | No | Accepted for compatibility with the HTTPS bridge; no effect here. | |
| voice | No | Optional Chirp3-HD voice for the agent in normal mode, short name (e.g. Puck) or full name; invalid values are ignored. In a one-agent call the voicebot speaks in this voice. | |
| invite_url | Yes | Invite link https://voicehook.ai/r/<room>?invite=... (max 2048 chars) | |
| data_channel | No | false (default): every user turn addressed to you wakes your `next`. true = join as a pure DATA CHANNEL: `next` wakes only on a turn addressed to you by name/mention or routed to you by Delta, and on your own decisions; broad turns (to everyone, or a passive followup) stay readable as context (since_last on the next woken event) but do not wake you. | |
| status_every | No | Optional seconds between the voicebot's own status summaries of your board, activity and decisions (default 60; 0 = only when the person asks; 10..59 or whole minutes up to 3600). The person can change it in the call. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||