Naruko Trunk の使い方に戻る

OpenAI Realtime 応答の使い方

お客様がご契約の OpenAI をそのまま使って、電話に AI が応答する 機能です。 Naruko Trunk のトランクとして追加し、電話番号を割り当てるだけで使えます。 音声は Naruko と OpenAI が直接やり取りするため、応答までの待ち時間を抑えられます。

どの値を貼るのか

OpenAI 側の画面と Naruko 側の項目名が一致していないため、取り違えが起きやすい箇所です。 接頭辞(先頭の文字)で見分けてください。

Naruko の項目OpenAI 側での場所接頭辞
OpenAI プロジェクト IDplatform.openai.com のプロジェクト設定 接続先の宛先になります。必須項目です。proj_
API キーAPI keys の Secret Key 同じ一覧に並ぶ Tracking ID(key_ で始まる)は API キーではありません。sk-
Webhook シークレットプロジェクト設定 → Webhooks の signing secret Webhook URL を登録すると発行されます。呼び名が画面の項目名と違うので注意してください。whsec_

設定のしかた

OpenAI 側の準備

  1. 1

    OpenAI 側でプロジェクトと API キーを用意する

    platform.openai.com でプロジェクトを作り、API keys から Secret Key を発行します。この機能はお客様の OpenAI アカウントをそのまま使う方式(BYO)のため、AI の利用料は OpenAI から直接ご請求されます。

Naruko 側の設定

  1. 2

    Naruko で連携を作る

    「Todoke → OpenAI Realtime API 連携」(/user/todoke/openai-realtime)の「連携を追加」で、名前と OpenAI プロジェクト ID、API キーを入れて保存します。接続先(sip.api.openai.com)は Naruko 側で自動設定されるため入力は不要です。先に Todoke チャネル(同時に使える通話数の枠)の購入が必要です。

  2. OpenAI Realtime API 連携の画面。登録済みの連携が一覧に並んでいる
    OpenAI Realtime API 連携(/user/todoke/openai-realtime)。「連携を追加」から作成し、電話番号は「組織 → 電話番号設定」で紐づけます。
  3. 3

    応答の組み立てを選ぶ

    「Naruko」を選ぶと、この画面で設定した指示・モデル・音声でそのまま応答します(既定)。外部システムで応答を組み立てたい場合や、通話中に予約状況などを調べて答えさせたい場合は「外部システム」を選びます。外部システムを選ぶと、必要なのは OpenAI プロジェクト ID だけになります。

  4. 4

    Webhook URL を OpenAI に登録する

    保存すると連携の設定画面に Webhook URL が表示されます。これを platform.openai.com のプロジェクト設定 → Webhooks に登録してください。イベントには realtime.call.incoming を必ず含めます。これが無いと、電話をかけても OpenAI から Naruko へ通知が届かず応答できません。

  5. 5

    signing secret を連携に貼る

    Webhook を登録すると signing secret(whsec_ で始まる)が発行されます。連携の設定画面「Webhook シークレット」に貼って保存してください。これを設定するまで、届いた通知が本物か検証できません。

  6. 6

    電話番号を割り当てる

    「組織 → 電話番号設定」で、対象の番号の着信アクションに「OpenAI Realtime 応答」を選び、使う連携を指定します。指定した番号への着信が、そのまま OpenAI の AI 応答につながります。取得済みの未割当の番号が無い場合は「電話番号を申請(マート)」から申請してください。

  7. 7

    (任意)番号ごとに応対を変える

    店舗や部署ごとに違う応対をさせたいときは、連携の設定画面の「番号ごとの応答の指示」から設定できます。1 つの連携のまま番号ごとに応対を変えられるので、店舗の数だけ連携や OpenAI プロジェクトを用意する必要はありません。空欄のままなら、連携に設定した指示がそのまま使われます。

動作の確認

  1. 8

    設定をテストする(電話をかける前に)

    連携の設定画面の「設定をテスト」を押すと、API キーが実際に使えるか・SIP 接続設定・応答の指示の有無・チャネル数をその場で確認できます。電話は発生しません。❌ や ⚠️ が出たら、表示された理由に従って直してください。

  2. 9

    電話をかけて確認する

    割り当てた番号に電話をかけて、AI が応答するか確認します。思ったとおりに応対しないときは、連携の設定画面の「応答の指示」を調整してかけ直してください。

応対を調整する

モデル

空欄なら gpt-realtime を使います。gpt-realtime-2.1 などの新しいモデルや、低コストな -mini も選べます。候補に無いモデル名も入力できます。

音声

新規作成時は OpenAI が推奨する marin が入っています。cedar も Realtime 専用の音声で、どちらも高品質です。ほかの音声に変えることもできます。保存済みの連携なら「試聴」ボタンでその声を確認できます(お客様の OpenAI アカウントにごく少額の利用料がかかります)。

通話開始の指示

電話に応答した直後、AI から話し始めるための指示です。空欄なら既定の文面(入力欄にうすく表示されている内容)を使います。ここは「話し始めて」というきっかけで、名乗り方や言葉づかいは「応答の指示」が決めます。最初のひとことを変えたいときに使ってください。

instructions

AI の受け答えを指示する文章です。新規作成時はすぐ使えるサンプルが入っています。サンプルには、相手の話を遮らない・聞き取れなければ聞き返す・電話番号を復唱して確認するなど、自然な会話のための指示が入っています。営業時間・所在地・よくあるご質問など、応対に必要な情報を書き足すと、その場で答えられることが増えます。ここで設定した指示は、このトランクに割り当てた番号すべてに使われます(すぐ下の「番号ごとに変える」で番号別に差し替えられます)。

外部システムで応答を組み立てる場合

トランクの「応答の組み立て」で 外部システム を選ぶと、 外部システムが OpenAI からの通知を受けて応答を組み立てます。 予約システムや顧客データベースを参照した応対、通話中に調べて答える応対を実現できます。 Naruko は電話を OpenAI へつなぐところまでを担当します。

1. 通知の受け取り先を登録する

platform.openai.com のプロジェクト設定にある Webhooks へ、外部システムの URL を登録します。 Naruko の Webhook URL は使用しません。 イベントには realtime.call.incoming を含めてください。 署名の検証方法は OpenAI の Webhooks ガイドをご確認ください。

2. 受信した Webhook を解析する

着信すると、次の形式の通知が届きます。

{
  "type": "realtime.call.incoming",
  "data": {
    "call_id": "rtc_xxxxxxxx",
    "sip_headers": [
      { "name": "X-Naruko-Callee", "value": "0312340001" },
      { "name": "X-Naruko-Caller", "value": "0312345678" },
      { "name": "X-Naruko-Direction", "value": "inbound" },
      { "name": "X-Naruko-Linkedid", "value": "1755150000.42" }
    ]
  }
}

sip_headers から、 Naruko が付与した次の情報を取得できます。

X-Naruko-Callee着信先電話番号
X-Naruko-Caller発信元電話番号
X-Naruko-Directioninbound(着信)/ outbound(発信)
X-Naruko-LinkedidNaruko 側の通話 ID。通話履歴との突き合わせにご利用いただけます

3. 応答を開始する

通知に含まれる call_id を指定し、 お客様の API キーで応答を開始します。AI の話し方・声・応対内容はここで指定します。

POST https://api.openai.com/v1/realtime/calls/{call_id}/accept
Authorization: Bearer <お客様の API キー>

{
  "type": "realtime",
  "model": "gpt-realtime",
  "instructions": "あなたは○○店の受付です。…",
  "audio": { "output": { "voice": "marin" } }
}

応答しない場合は /reject を呼び出します。 呼び出し中のあいだに応答してください。 応答がないまま呼び出しが終了すると、発信者には話中音が流れます。

通話を開始したあとは、 /refer で担当者などの別の番号へ転送、 /hangup で通話を終了できます。 AI が用件を伺ったうえで担当者へおつなぎする、といった運用にご利用いただけます。
※ 転送の可否は経路のネットワーク環境にも依存します。ご利用前に実際の通話でご確認ください。

accept / reject の仕様(Realtime calls)

4. 通話中に制御する

応答したあと、同じ通話へ WebSocket で接続すると、通話中の会話を受け取りながら AI へ指示を送れます。予約の空き状況をお伺いしてから確認してお答えする、といった応対を実現できます。

wss://api.openai.com/v1/realtime?call_id={call_id}
Authorization: Bearer <お客様の API キー>

接続後は、次のようなイベントで会話の内容を受け取れます。

conversation.item.input_audio_transcription.completed   // 相手が話した内容
response.output_audio_transcript.done                  // AI が話した内容

相手の発話の文字起こしは、接続後に session.update で有効化した場合に届きます。

AI に話させるときは response.create を送ります。 調べた内容を伝えたい場合も、この指示に含めてお送りください。

{
  "type": "response.create",
  "response": {
    "instructions": "3月5日18時は空席があります。その旨をお伝えください。"
  }
}

※ 外部システムを選択した場合、Naruko 側の API キー・モデル・音声・応答の指示は使用しません。 AI の利用料は、お客様の OpenAI アカウントへ直接ご請求されます。

OpenAI 側の操作について

OpenAI の画面は随時更新されるため、操作方法は公式ドキュメントをご確認ください。

ご利用にあたって

  • この機能は通話中にトランクのチャネル(同時通話数)を 1 本使います。チャネルが足りないと着信は話中になります。
  • AI の利用料はお客様の OpenAI アカウントへ直接かかります(Naruko からの従量課金はありません)。
  • 応対の内容(指示)は電話番号ごとに変えられます。別の OpenAI プロジェクトを使い分けたいときは、トランクを分けてください。
  • 設定に不備があるときや OpenAI 側で応答できないときは、話中で切断します(留守電にはつながりません)。
  • 「外部システム」を選んだ場合、Naruko は OpenAI に電話をつなぐところまでを行います。応答の内容は外部システムが決めるため、Naruko 側の指示・モデル・音声の設定は使いません。
  • 「外部システム」を選択した場合、Naruko は OpenAI への発信に独自のヘッダを付与します。着信先電話番号・発信元電話番号・着信か発信かを取得できるため、店舗や部署ごとに応対を切り替えられます。

チャネルの購入や電話番号の申請など、Naruko Trunk 全体の使い方はこちらをご覧ください。

Naruko Trunk の使い方