跳到主要內容
指南

用 Wixzel Voice API 讓 Gemini Live 進行真實電話通話

四個 HTTP 請求就能讓您從空白帳號,到一支電話響起、由 Google 的 Gemini Live 模型在線上通話:連接 SIP 中繼、登記號碼、建立即時代理、撥出電話。第五個請求會讀回紀錄,包含逐字稿和這通電話的費用。電信業者已設定好的情況下約需 10 分鐘。Gemini Live 引擎每接通一分鐘 $0.0491,是價目表中最低的,因此三分鐘的通話約 $0.15,從預付餘額按秒計費,另加電信業者的費率。

作者: · 發布於 · 更新於

所需時間
電信業者設定好後約 10 分鐘
引擎時間
每接通分鐘 $0.0491

開始之前需要準備什麼?

  • 一把有點數的 Wixzel Voice API 金鑰。最低儲值金額為 $5。
  • 電信業者的 SIP 中繼,以及其上一個電信業者允許您作為來電顯示的號碼。
  • curl、jq 和 uuidgen。

如何在 Wixzel Voice 上逐步打造?

  1. 01連接您的 SIP 中繼

    先設定一次金鑰和 API 基底網址,然後建立中繼。tee 會保留完整回應,因為除了 id 之外,您還需要其中兩個值:

    shell
    export 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 是電信業者應轉送來電的位置,本指南用不到。

  2. 02登記您用來撥出的號碼

    使用您自己的號碼,格式為 E.164:

    shell
    NUMBER_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)
  3. 03建立 Gemini Live 代理

    語音由一個即時模型負責,而不是三個階段:

    shell
    AGENT_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。

  4. 04撥出電話

    將 to 號碼換成您要撥打的電話:

    shell
    CALL_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 被拒絕。

  5. 05查看發生了什麼

    第五個請求讀回這通電話:

    shell
    curl -s $API/calls/$CALL_ID \
      -H "Authorization: Bearer $WIXZEL_API_KEY" | jq
    Example 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。 電信使用您自己的中繼,按您電信業者的費率計算,不包含在內。

本指南所打造內容的每月引擎費用
每月通話數接通分鐘數每月引擎費用
300900$44.19
1,5004,500$221
6,00018,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 可以撥打電話嗎?

Gemini Live 是模型,不是電話服務。Wixzel Voice 將兩者連接起來:建立一個語音為 {"realtime": {"model": "google/gemini-live"}} 的代理,POST /v1/calls 就會透過您自己的 SIP 中繼撥打真實號碼,由 Gemini Live 在線上通話。

我需要 Google Cloud 或 Gemini API 金鑰嗎?

不需要。在代管平台上,供應商帳號屬於 Wixzel Voice。一把 wv_live_ API 金鑰加上預付餘額,就涵蓋 Gemini Live 和其他所有引擎。

Gemini Live 在通話中可以使用哪些語音?

它的預建語音,例如 Charon、Kore 和 Puck。GET /v1/engines/gemini_live/voices 會列出全部。使用其他引擎清單中的語音,會在建立代理時被拒絕。

一通 Gemini Live 電話要多少錢?

以一般說話速度計算,每接通一分鐘 $0.0491,三分鐘約 $0.15,從預付點數按秒計費,另加電信業者的費率。未接通的通話不收費。

Gemini Live 代理也能接聽來電嗎?

可以。用 PATCH /v1/phone-numbers/{id} 將電話號碼的 inbound_agent_id 設為該代理,並將電信業者的來電路由指向中繼的 origination_uri。

延伸閱讀

  • 快速入門文件

    同樣的四個請求,也提供 TypeScript 和 Dart SDK 版本。

  • 語音引擎文件

    即時語音結構、語音清單和語言。

  • SIP 中繼文件

    允許清單、來電路由,以及各失敗代碼的意義。

  • 冪等性文件

    為什麼 POST /v1/calls 需要金鑰,以及重送如何運作。

代理式電話通訊 API

關於 Wixzel Voice

Wixzel Voice 是一個語音 AI API,用於打造 AI 代理,透過您自己的 SIP 中繼撥打和接聽真實的電話,或在您的網頁和行動應用程式中與人對話。一把 API 金鑰和一份預付餘額即可使用所有語音引擎,依實際用量按秒計費。

建立您的第一個語音代理