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

/user/todoke/openai-realtime)。「連携を追加」から作成し、電話番号は「組織 → 電話番号設定」で紐づけます。 応答の組み立てを選ぶ
「Naruko」を選ぶと、この画面で設定した指示・モデル・音声でそのまま応答します(既定)。外部システムで応答を組み立てたい場合や、通話中に予約状況などを調べて答えさせたい場合は「外部システム」を選びます。外部システムを選ぶと、必要なのは OpenAI プロジェクト ID だけになります。
Webhook URL を OpenAI に登録する
保存すると連携の設定画面に Webhook URL が表示されます。これを platform.openai.com のプロジェクト設定 → Webhooks に登録してください。イベントには realtime.call.incoming を必ず含めます。これが無いと、電話をかけても OpenAI から Naruko へ通知が届かず応答できません。
signing secret を連携に貼る
Webhook を登録すると signing secret(whsec_ で始まる)が発行されます。連携の設定画面「Webhook シークレット」に貼って保存してください。これを設定するまで、届いた通知が本物か検証できません。
電話番号を割り当てる
「組織 → 電話番号設定」で、対象の番号の着信アクションに「OpenAI Realtime 応答」を選び、使う連携を指定します。指定した番号への着信が、そのまま OpenAI の AI 応答につながります。取得済みの未割当の番号が無い場合は「電話番号を申請(マート)」から申請してください。
(任意)番号ごとに応対を変える
店舗や部署ごとに違う応対をさせたいときは、連携の設定画面の「番号ごとの応答の指示」から設定できます。1 つの連携のまま番号ごとに応対を変えられるので、店舗の数だけ連携や OpenAI プロジェクトを用意する必要はありません。空欄のままなら、連携に設定した指示がそのまま使われます。
動作の確認
設定をテストする(電話をかける前に)
連携の設定画面の「設定をテスト」を押すと、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-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-Direction | inbound(着信)/ outbound(発信) |
X-Naruko-Linkedid | Naruko 側の通話 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 が用件を伺ったうえで担当者へおつなぎする、といった運用にご利用いただけます。
※ 転送の可否は経路のネットワーク環境にも依存します。ご利用前に実際の通話でご確認ください。
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 の画面は随時更新されるため、操作方法は公式ドキュメントをご確認ください。
チャネルの購入や電話番号の申請など、Naruko Trunk 全体の使い方はこちらをご覧ください。
Naruko Trunk の使い方