お客様がご契約の OpenAI をそのまま使って、電話に AI が応答する 機能です。 Naruko Todoke に連携として追加し、電話番号をキャンペーンへ割り当てるだけで使えます。 音声は Naruko と OpenAI が直接通信するため、応答までの待ち時間を抑えられます。
OpenAI 側の画面と Naruko 側の項目名が一致していないため、取り違えが起きやすい箇所です。 接頭辞で見分けてください。
| Naruko の項目 | OpenAI 側での場所 | 接頭辞 |
|---|---|---|
| OpenAI プロジェクト ID | platform.openai.com のプロジェクト設定 接続先の宛先になります。必須項目です。 | proj_ |
| API キー | API keys の Secret Key 同じ一覧に並ぶ Tracking ID は API キーではありません。 | sk- |
| Webhook シークレット | プロジェクト設定 → Webhooks の signing secret Webhook URL を登録すると発行されます。呼び名が画面の項目名と違うので注意してください。 | whsec_ |
OpenAI 側の準備
OpenAI 側でプロジェクトと API キーを用意する
platform.openai.com でプロジェクトを作り、API keys から Secret Key を発行します。この機能はお客様の OpenAI アカウントをそのまま使うため、AI の利用料は OpenAI から直接ご請求されます。
Naruko 側の設定
Naruko で連携を作る
「配信 → OpenAI Realtime API 連携」の「連携を追加」で、名前と OpenAI プロジェクト ID、API キーを入れて保存します。接続先は Naruko 側で自動設定されるため入力は不要です。先に配信チャネルの購入が必要です。これは同時に使える通話数の枠で、AI が応対できなかったときに外線へ転送する設定にする場合は、着信と転送で 2 チャネル使います。

/user/todoke/openai-realtime。「連携を追加」から作成し、電話番号は「共通 → 電話番号」で紐づけます。 応答の方式を選ぶ
既定は「組み込み」で、この画面で設定した指示・モデル・音声でそのまま応答します。外部システムで応答を組み立てたい場合や、通話中に予約状況などを調べて答えさせたい場合は「外部システム」を選びます。外部システムを選ぶと、必要なのは OpenAI プロジェクト ID だけになります。
Webhook URL を OpenAI に登録する
保存すると連携の設定画面に Webhook URL が表示されます。これを platform.openai.com のプロジェクト設定 → Webhooks に登録してください。イベントには realtime.call.incoming を必ず含めます。これが無いと、番号へ発信しても OpenAI から Naruko へ通知が届かず応答できません。
signing secret を連携に登録する
Webhook を登録すると、whsec_ で始まる signing secret が発行されます。連携の設定画面「Webhook シークレット」へ入力して保存してください。これを設定するまで、届いた通知が本物か検証できません。
電話番号を割り当てる
「共通 → 電話番号」で、対象の番号の着信アクションに「OpenAI Realtime 応答」を選び、使う連携を指定します。指定した番号への着信が、そのまま OpenAI の AI 応答につながります。取得済みの未割当の番号が無い場合は「電話番号を申請」から申請してください。
番号ごとに応対を変える
店舗や部署ごとに違う応対をさせたいときは、連携の設定画面の「番号ごとの応答の指示」から設定できます。1 つの連携のまま番号ごとに応対を変えられるので、店舗の数だけ連携や OpenAI プロジェクトを用意する必要はありません。空欄のままなら、連携に設定した指示がそのまま使われます。
動作の確認
発信する前に設定をテストする
連携の設定画面の「OpenAI Realtime との接続性を確認」で「確認」を押すと、API キーが実際に使えるか・SIP 接続設定・応答の指示の有無・チャネル数をその場で確認できます。電話は発生しません。❌ や ⚠️ が表示されたら、その理由に従って直してください。
発信して確認する
割り当てた番号へ発信して、AI が応答するか確認します。思ったとおりに応対しないときは、連携の設定画面の「応答の指示」を調整して発信し直してください。
空欄なら gpt-realtime を使います。gpt-realtime-2.1 などの新しいモデルや、低コストな -mini も選べます。候補に無いモデル名も入力できます。
新規作成時は OpenAI が推奨する marin が入っています。cedar も Realtime 専用の音声で、どちらも高品質です。ほかの音声に変えることもできます。保存済みの連携なら「試聴」ボタンでその声を確認できます。試聴にもお客様の OpenAI アカウントでごく少額の利用料が発生します。
電話に応答した直後、AI から話し始めるための指示です。空欄なら既定の文面を使います。入力欄にうすく表示されているものがそれです。ここは「話し始めて」というきっかけで、名乗り方や言葉づかいは「応答の指示」が決めます。最初のひとことを変えたいときに使ってください。
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-Call-Callee", "value": "0312340001" },
{ "name": "X-Call-Caller", "value": "0312345678" },
{ "name": "X-Call-Direction", "value": "inbound" },
{ "name": "X-Call-Linkedid", "value": "1755150000.42" },
{ "name": "X-Call-Node", "value": "node1" },
{ "name": "X-Call-Token", "value": "a1b2c3…" }
]
}
}sip_headers から、 Naruko が付与した次の情報を取得できます。
同じ値を X-Naruko- で始まる名前でも送っています。これから実装する場合は X-Call- をご利用ください。
応答する前に、X-Call-Token が連携の設定画面に表示されている着信トークンと一致することを確かめてください。 一致しない着信は、Naruko を経由していません。
X-Call-Callee | 着信先電話番号 |
X-Call-Caller | 発信元電話番号 |
X-Call-Direction | 着信: inbound / 発信: outbound |
X-Call-Linkedid | Naruko 側の通話 ID。通話履歴との突き合わせにご利用いただけます |
X-Call-Node | 通話を処理したサーバー。通話 ID との組で一意になります |
X-Call-Token | 連携ごとの着信トークン。この値と一致する着信だけを受け付けてください |
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 が用件を伺ったうえで担当者へおつなぎする、といった運用にご利用いただけます。
※ 転送の可否は経路のネットワーク環境にも依存します。ご利用前に実際の通話でご確認ください。
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 の応対を業務システムへ記録したり、顧客管理と結び付けたりするときに必要な情報をまとめます。 応答の方式が組み込み・外部システムのどちらでも共通です。
Naruko は通話ごとに ID を持っています。どこで受け取っても同じ値なので、これを鍵にして突き合わせられます。
| 受け取る場所 | 項目名 | 例 |
|---|---|---|
| OpenAI へ渡す SIP ヘッダ | X-Call-Linkedid | 1700000000.42 |
| 着信 Webhook | uniqueid | 同じ値 |
| 通話履歴 API | uniqueid | 同じ値 |
通話明細は通話の終了後に記録されます。応答の可否を判断する時点では取得できません。 複数の組織をまたいで管理される場合は、 X-Call-Node と組み合わせてください。
OpenAI から通話終了の通知は届きません。 OpenAI が送るのは着信時の realtime.call.incoming だけです。 終了・通話時間・結果は Naruko 側の次の2つでご確認ください。
incoming_call_hangup)… 終了した時点で通知します。届かなければ最大 3 回まで再送します。 GET /api/public/v1/calls)… あとから引き直せます。通知を受け取れなかったときの確認にお使いください。 # 上の表の ID をそのまま指定します
curl https://hub.naruko.app/api/public/v1/calls/1700000000.42 \
-H "Authorization: Bearer nrk_live_..."AI が応答しなかった通話も確認できます。call_status が NO ANSWER / BUSY などになり、通話時間は 0 秒です。 項目名は Webhook と API でそろえてあります。
通話の音声の録音は準備中です。 会話の文字おこしは OpenAI が行い、通話中に接続する WebSocket へテキストが届きます。 それをどこで受け取って保存するかが、応答を組み立てる場所によって変わります。
| 応答の方式 | 会話の文字おこしの保存先 |
|---|---|
| 組み込み | Naruko が WebSocket で受け取って保存し、録音ライブラリで読めます |
| 外部システム | 外部システムが WebSocket で受け取ります。Naruko には残りません |
文字おこしは、有効にしてからお使いください。 WebSocket へ接続したあと session.update を送り、 audio.input.transcription にモデルと言語を指定します。 Naruko が応答を組み立てる場合は、Naruko が whisper-1 と日本語を指定しています。 言語を指定すると精度と遅延が改善すると OpenAI が案内しています。
Authorization: Bearer nrk_live_…)で認証します。発行方法は Todoke API ガイドをご覧ください。OpenAI の画面は随時更新されるため、操作方法は公式ドキュメントをご確認ください。
チャネルの購入やキャンペーンへの割り当て、電話番号の申請など、Naruko Todoke 全体の使い方はこちらをご覧ください。
Naruko Todoke の使い方