Twilio Webhooks は、通話や SMS にまつわるイベントを自社サーバーに通知し、通信フローをプログラムで制御するための仕組みだ。Twilio の通信機能を「受け」と「制御」の両面から扱う中核になる。
Webhook が制御の起点になる
着信があると、Twilio は設定された URL に Webhook を投げてくる。サーバーはそれに対して TwiML(通話制御の XML)を返し、「音声を読み上げる」「番号入力を待つ」「別の番号に転送する」といった応答を指示する。つまり Webhook は単なる通知ではなく、対話的な通話フローを駆動する起点になっている。これにより電話自動応答(IVR)システムをコードで組み立てられる。
SMS / MMS の受信通知も同じ仕組みで、SMS の到着をトリガーに業務処理を起動できる。さらに通話ステータス(開始・終了・失敗)やメッセージ配信ステータスのコールバックがあり、「送ったメッセージが本当に届いたか」を追跡できる。送りっぱなしにせず、配信結果を業務ロジックに反映できるのは実務で効く。
セキュリティと再送への備え
公開エンドポイントである以上、リクエスト署名の検証は必須だ。Twilio はリクエストに署名を付けており、これを検証しないと偽のコールバックを受け入れてしまう。あわせて、Twilio はサーバーの応答が得られないと Webhook を再送する。ステータスコールバックの処理は、同じイベントが二重に届いても破綻しないよう冪等に書いておくのが安全だ。
料金の構造と向かないケース
Webhook の受信自体は無料で、課金は通話・SMS の送受信に対して発生する。単価は国や番号種別で大きく変わり、特に国際 SMS や音声通話は宛先国によって桁が変わるため、対象国を固定して見積もる必要がある。電話番号のレンタル料も月額で別途かかる点を見落とさないようにしたい。
なお、Webhook を使わず一方向に SMS を送るだけなら、Twilio API を直接叩く方がシンプルだ。Webhook が要るのは「受信」や「双方向」が絡むときだ。
応答が遅いと通話が切れる
着信時の Webhook は、応答するまで相手を待たせている状態になる。データベースへの問い合わせや外部 API 呼び出しを挟むと、その間ずっと無音が続き、利用者は切ってしまう。着信直後はまず定型の応答(アナウンスや保留音)を返し、時間のかかる処理はその裏で進める構成にしておく必要がある。音声の場合、待ち時間はテキストの場合よりはるかに厳しく評価される。
着信処理のエンドポイントが第三者に叩けると、偽の着信を発生させて通話を発信させる、といった悪用が成立しえます。署名検証を実装し、想定外のリクエストは即座に拒否してください。電話は課金が発生する経路なので、悪用は直接的な金銭被害になります。
通話の状態遷移を記録する
着信、応答、転送、終了といった状態は個別のコールバックとして届く。これらを記録しておかないと、「なぜこの通話が切れたのか」を後から調べられない。通話 ID を軸に状態の履歴を保存しておけば、利用者からの問い合わせに対して事実に基づいて回答できる。音声サービスでは、この記録の有無がサポート品質に直結する。