開発者向け
Naruko の電話番号に外線着信があったとき、着信の各タイミングで、 あなたが登録した URL へ発着信情報を HTTP POST(送信)します。 CRM でのスクリーンポップ、着信ログ、自動処理のトリガなどに使えます。 送信先は電話番号ごとに設定できます。
設定画面: 着信 Webhook 設定 / 料金: 無料(外線着信・Pro プランに含まれます)
これは「送信(アウトバウンド)」の Webhook です。 Naruko →(あなたのサーバー)の向きに POST します。外部 → Naruko でメッセージを送り込む 「受信 Webhook」や、配信結果を受け取る Todoke API / Webhook とは別物です(あちらは署名・再送あり。本 Webhook の仕様は下記のとおり異なります)。
着信が Naruko の電話設備(Asterisk)に届くと、設定したタイミングで Naruko があなたの URL へ JSON を POST します。 Todoke の Webhook とは設計が異なるため、以下の特性を必ず把握してください。
着信 Webhook 設定 画面で、対象(組織全体または電話番号)・送信タイミング・送信先 URL を登録します。組織管理者、または 「着信 Webhook」機能権限を付与された利用者が設定できます。

https:// のみ登録できます(平文 http は不可)。| request_timing | 名称 | いつ・内容 |
|---|---|---|
| incoming_call_ringing | 着信呼出時 | 着信が鳴り始めたとき 最小の情報のみ(着信番号 callee_phonenumber)。発着信の詳細はまだ確定していません。 |
| incoming_call_answer | 着信応答時 | 着信に応答した瞬間(相手が電話に出た。ルーム/転送先が応答した時点) 発着信番号・発信開始時刻・応答時刻が入ります。終了時刻・通話秒数・結果はまだ確定しないため空です。 |
| incoming_call_hangup | 着信切断時 | 通話が終了したとき 発着番号・通話時間・結果など、CDR 一式がそろった完全なペイロードです。 |
着信があると、Naruko は着信番号(callee)ごとの設定を優先し、無ければ組織全体の既定に フォールバックして 1 件だけ送信先を決めます。
例)番号 A に「切断時」個別設定があり、番号 B には無い場合 — A への着信は A の URL へ、B への着信は組織既定の URL へ送られます。
| メソッド | POST |
|---|---|
| Content-Type | application/json |
| ボディ | 下記ペイロード(JSON オブジェクト) |
| タイムアウト | 接続 2 秒 / 全体 3 秒(超過で打ち切り・再送なし) |
| 期待するレスポンス | 2xx。4xx / 5xx は失敗として記録します(通話は継続・再送なし)。 |
| 認証・署名 | なし(受信側の保護は「6. 受信側の実装ヒント」参照) |
どのタイミングでも同じ 10 個のキーを持つ JSON を送ります。値は すべて文字列で、そのタイミングで確定していない項目は空文字("")になります。 ペイロードにタイミング名や組織 ID は含まれません(タイミングは登録した URL で区別してください)。
| キー | 型 | 説明 |
|---|---|---|
| uniqueid | string | 通話の一意 ID(Asterisk uniqueid。例: 1721380000.123)。同じ通話ならどのタイミングでも同一値。冪等キーに使えます。 |
| calldate | string | 着信(発信開始)時刻。書式 YYYY-MM-DD HH:MM:SS(サーバー時刻)。 |
| calldate_answer | string | 応答時刻。無応答なら空。 |
| calldate_end | string | 通話終了時刻。切断時のみ入ります。 |
| call_status | string | 着信結果(例: ANSWERED / NO ANSWER / BUSY / FAILED。Asterisk の disposition 準拠)。 |
| caller_phonenumber | string | 発信者(かけてきた相手)の番号。 |
| callee_phonenumber | string | 着信番号(あなたの Naruko 電話番号)。番号別設定の判定にも使われます。 |
| transferer_phonenumber | string | 取次(転送)があった場合の転送元番号。無ければ空。 |
| transferee_phonenumber | string | 取次(転送)があった場合の転送先番号。無ければ空。 |
| call_duration | string | 通話秒数(billsec = 課金対象秒数)。切断時のみ入ります。 |
● が値の入るフィールド、空欄はそのタイミングでは空文字になるフィールドです。
| キー | 着信呼出時 | 着信応答時 | 着信切断時 |
|---|---|---|---|
| uniqueid | — | ● | ● |
| calldate | — | ● | ● |
| calldate_answer | — | ● | ● |
| calldate_end | — | — | ● |
| call_status | — | — | ● |
| caller_phonenumber | — | ● | ● |
| callee_phonenumber | ● | ● | ● |
| transferer_phonenumber | — | — | ● |
| transferee_phonenumber | — | — | ● |
| call_duration | — | — | ● |
{
"uniqueid": "1721380000.123",
"calldate": "2026-07-19 10:00:00",
"calldate_answer": "2026-07-19 10:00:05",
"calldate_end": "2026-07-19 10:03:00",
"call_status": "ANSWERED",
"caller_phonenumber": "0312345678",
"callee_phonenumber": "0312349002",
"transferer_phonenumber": "",
"transferee_phonenumber": "",
"call_duration": "175"
}{
"uniqueid": "",
"calldate": "",
"calldate_answer": "",
"calldate_end": "",
"call_status": "",
"caller_phonenumber": "",
"callee_phonenumber": "0312349002",
"transferer_phonenumber": "",
"transferee_phonenumber": "",
"call_duration": ""
}/hooks/naruko/8f3c…)やクエリのトークンを URL に含め、受信側で検証します。可能なら Naruko の送信元 IP でアクセス制限してください。uniqueid は同一通話で共通です。同じ (uniqueid, タイミング) を二重に受けても安全なようにしてください。call_duration が入っていれば切断時、といった充足フィールドで判別します。受信の最小例(PHP)
<?php
// URL のトークンを検証(署名が無いため URL 秘匿で守る)
if (($_GET['token'] ?? '') !== getenv('NARUKO_WEBHOOK_TOKEN')) {
http_response_code(404); exit;
}
$body = json_decode(file_get_contents('php://input'), true) ?? [];
// まず即 2xx を返す(重い処理は後回し)
http_response_code(204);
fastcgi_finish_request();
// 以降で非同期に処理(例: 切断時のみ記録)
if ($body['call_duration'] !== '') {
// callee=$body['callee_phonenumber'] への着信が
// caller=$body['caller_phonenumber'] から、結果 $body['call_status']、
// $body['call_duration'] 秒で終了。uniqueid=$body['uniqueid'] で冪等化。
}