用 Wixzel Voice API 讓 Gemini Live 進行真實電話通話
四個 HTTP 請求就能讓您從空白帳號,到一支電話響起、由 Google 的 Gemini Live 模型在線上通話:連接 SIP 中繼、登記號碼、建立即時代理、撥出電話。第五個請求會讀回紀錄,包含逐字稿和這通電話的費用。電信業者已設定好的情況下約需 10 分鐘。Gemini Live 引擎每接通一分鐘 $0.0491,是價目表中最低的,因此三分鐘的通話約 $0.15,從預付餘額按秒計費,另加電信業者的費率。
作者:Aqeel Shamsudheen · 發布於 · 更新於
- 所需時間
- 電信業者設定好後約 10 分鐘
- 引擎時間
- 每接通分鐘 $0.0491
開始之前需要準備什麼?
- 一把有點數的 Wixzel Voice API 金鑰。最低儲值金額為 $5。
- 電信業者的 SIP 中繼,以及其上一個電信業者允許您作為來電顯示的號碼。
- curl、jq 和 uuidgen。
如何在 Wixzel Voice 上逐步打造?
01連接您的 SIP 中繼
先設定一次金鑰和 API 基底網址,然後建立中繼。
tee會保留完整回應,因為除了 id 之外,您還需要其中兩個值:shellexport WIXZEL_API_KEY="wv_live_..." API=https://api.voice.wixzel.com/v1 TRUNK_ID=$(curl -s $API/sip-trunks \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "My carrier", "host": "sip.your-carrier.example", "username": "your-sip-username", "password": "your-sip-password" }' | tee trunk.json | jq -r .id) jq -r '.platform_ip, .origination_uri' trunk.json如果電信業者以 IP 授權,請省略
username和password。無論哪種方式,都要在電信業者端將platform_ip加入允許清單,讓它接受來自平台的通話;origination_uri是電信業者應轉送來電的位置,本指南用不到。02登記您用來撥出的號碼
使用您自己的號碼,格式為 E.164:
shellNUMBER_ID=$(jq -n --arg trunk "$TRUNK_ID" \ '{phone_number: "+14155550100", sip_trunk_id: $trunk}' | curl -s $API/phone-numbers \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d @- | jq -r .id)03建立 Gemini Live 代理
語音由一個即時模型負責,而不是三個階段:
shellAGENT_ID=$(jq -n --arg number "$NUMBER_ID" '{ name: "Gemini Live", system_prompt: "You are a friendly assistant on a phone call. Keep answers to one or two sentences.", opening_message: "Hi, this is an automated assistant. Do you have a minute?", outbound_phone_number_id: $number, voice: { realtime: { model: "google/gemini-live", voice: "Charon" } } }' | curl -s $API/agents \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d @- | jq -r .id)voice.realtime將整個對話回合(聆聽、推理和說話)交給 Gemini Live,因此沒有stt、llm或tts區塊;同時指定兩種結構的語音會被 API 拒絕。Charon是 Gemini 的預建語音之一,GET /v1/engines/gemini_live/voices會列出全部語音,並附上 Google 的一詞描述。outbound_phone_number_id為代理指定來電顯示號碼,因此下一個請求可以省略from_number_id。04撥出電話
將
to號碼換成您要撥打的電話:shellCALL_ID=$(jq -n --arg agent "$AGENT_ID" '{to: "+14155551234", agent_id: $agent}' | curl -s $API/calls \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d @- | jq -r .id)API 會立即回應
201和status: "queued",電話會在片刻後響起。這裡必須帶Idempotency-Key:網路逾時無法告訴您通話是否已撥出,而使用相同金鑰重試會回傳原本的通話,不會撥打兩次,所以如果您以腳本重試,請保留這把金鑰。無法支付前 15 秒費用的通話,會在撥號前以402被拒絕。05查看發生了什麼
第五個請求讀回這通電話:
shellcurl -s $API/calls/$CALL_ID \ -H "Authorization: Bearer $WIXZEL_API_KEY" | jqExample response, shortened{ "id": "6a96a3ead6e886d42462dd3e", "object": "call", "session_id": "sip-5b0c7c0e-9d1f-4c52-8a9e-2f0d3a4b6c7d", "status": "completed", "direction": "outbound", "channel": "phone", "engine": "gemini_live", "to": "+14155551234", "duration_seconds": 94, "cost_micros": 76923, "failure_code": null, "failure_reason": null, "transcript": [ { "role": "assistant", "content": "Hi, this is an automated assistant. Do you have a minute?" }, { "role": "user", "content": "Sure, go ahead." } ] }status會從queued經過ringing和in-progress變為completed,或以failed、busy或no-answer結束。cost_micros在通話結算時寫入(1,000,000 為 $1.00),未接通的通話則維持null,因為這種通話不收費。通話失敗時,failure_code是電信業者的 Q.850 原因碼(17 忙線、19 無人接聽、21 遭電信業者拒絕),failure_reason則說明該如何處理。GET /v1/usage/events?session_id=…會逐項列出每筆費用。
在 Wixzel Voice 上打造這個要花多少錢?
在 gemini-live 引擎上進行 3 分鐘通話的引擎時間,以每接通分鐘 $0.0491 計算:每通約 $0.15。 電信使用您自己的中繼,按您電信業者的費率計算,不包含在內。
| 每月通話數 | 接通分鐘數 | 每月引擎費用 |
|---|---|---|
| 300 | 900 | $44.19 |
| 1,500 | 4,500 | $221 |
| 6,000 | 18,000 | $884 |
每分鐘費用以一般說話速度計算,已含協調服務費。Gemini Live 在通話進行時以音訊 token 計量,因此安靜的通話會比估算便宜,話多的通話則較貴。上方的回應範例以每分鐘費率計算一通 94 秒的通話。線路費用由電信業者另行收取,不加價。
預付制,沒有訂閱,也沒有免費方案:從 $5 起儲值點數,使用時從中扣除。估算您自己的使用組合。
這個實作適用哪些 Wixzel Voice 限制?
- 撥打電話需要您自己的 SIP 中繼。Wixzel Voice 不販售、不攜碼也不持有號碼。它可以在您從主控台連接的 Twilio、Telnyx、Plivo、Vobiz 或 Vonage 帳號上為您購買號碼,由您的電信業者計費。
- 由
POST /v1/agents/{id}/test-call發起的測試通話,會透過 classic 語音管線說出那一句話,因為 Gemini Live 沒有單句模式。若要聽 Gemini 本身的語音,請撥打一般通話。 - 每個帳號預設最多可同時進行五通通話,可申請提高上限。
- 未公布延遲數據:即時引擎的回應速度取決於模型本身。Wixzel Voice 的行為變更一律透過附日期的
Wixzel-Version標頭推出。
常見問題
Gemini Live 可以撥打電話嗎?
{"realtime": {"model": "google/gemini-live"}} 的代理,POST /v1/calls 就會透過您自己的 SIP 中繼撥打真實號碼,由 Gemini Live 在線上通話。我需要 Google Cloud 或 Gemini API 金鑰嗎?
wv_live_ API 金鑰加上預付餘額,就涵蓋 Gemini Live 和其他所有引擎。Gemini Live 在通話中可以使用哪些語音?
Charon、Kore 和 Puck。GET /v1/engines/gemini_live/voices 會列出全部。使用其他引擎清單中的語音,會在建立代理時被拒絕。一通 Gemini Live 電話要多少錢?
Gemini Live 代理也能接聽來電嗎?
PATCH /v1/phone-numbers/{id} 將電話號碼的 inbound_agent_id 設為該代理,並將電信業者的來電路由指向中繼的 origination_uri。延伸閱讀
關於 Wixzel Voice
Wixzel Voice 是一個語音 AI API,用於打造 AI 代理,透過您自己的 SIP 中繼撥打和接聽真實的電話,或在您的網頁和行動應用程式中與人對話。一把 API 金鑰和一份預付餘額即可使用所有語音引擎,依實際用量按秒計費。
更多指南
Claude 在 Claude Code 或 claude.ai 中透過您的 SIP 中繼撥打真實電話並讀回逐字稿,撥號前一律先徵求確認。
AI 接待員接聽您現有的 Twilio 號碼,並透過 API 安排預約,以 Node.js 打造。
兩個電話代理,一個說印地語、一個說馬拉雅拉姆語,使用 Sarvam 的印度語言模型,透過您的 SIP 中繼接聽或撥出電話。
一個讓使用者透過 WebSocket 與您的語音代理對話的 Flutter 應用程式,API 金鑰保存在您的伺服器上,完全不需要電話號碼。
由您的代理透過您的 SIP 中繼撥打一份潛在客戶名單,依同時通話上限分批進行,並讀回每通電話的狀態和逐字稿。
網站角落有一個會說話的吉祥物,訪客可從瀏覽器撥打給它,僅限您的網域並受每日上限約束,每位來電者都會列出。
一個有代理吉祥物的 Flutter 畫面,吉祥物在即時通話中隨代理的語音動嘴,API 金鑰保存在您的伺服器上。

