SMS OTP認証
SMS OTP認証
Twilio Verifyを使用して、エージェントとの会話中にSMSでワンタイムパスコードを送信・認証します。

概要
このガイドでは、Twilio VerifyをElevenLabsエージェントと統合し、発信者の電話番号にOTPを送信して、ライブ音声会話中に読み上げられたコードを認証する方法を説明します。
以下の方法を学べます。
- Twilio Verifyサービスを作成し、認証用に認証情報をBase64エンコードする。
- ダッシュボード、Agents CLI、またはElevenLabs APIで、2つのWebhookツール(
send_SMS_verificationとcheck_SMS_verification)を設定する。 - シークレット値を含む
Authorizationヘッダーを使用して、両方のWebhook呼び出しを認証する。 - 発信者がまだコードを受け取っていない場合にエージェントが待機するよう、
skip_turnシステムツールを有効にする。
前提条件
- Twilio Verifyが有効になっているTwilioアカウント。Twilio ConsoleでVerifyを利用できない場合は、TwilioサポートまたはTwilioのアカウントチームにアクセスをリクエストしてください。
- Twilioアカウントがトライアルモードの場合、宛先電話番号はTwilioで確認済みの発信者IDである必要があります。
Verify Service SIDをコピー
サービスのSettingsページを開き、Verify Service SIDをコピーします。VAで始まり、Account SIDとは異なります。
よくある間違い:以下のツールURLでは、Authenticate(Verify)サービスのVerify Service SID(VA...)を使用してください。パスにAccount SID(AC...)を入力しないでください。Verify APIはURL内のサービスSIDを想定しているため、Account SIDを使用すると4xxの無効なパラメーターエラーが発生します。
エージェントにリクエストを接続する前に、ConsoleのTwilio API Explorerでテストできます。
認証情報をエンコードしてWebhookツールを設定
Basic認証用にTwilio認証情報をエンコード
Twilio Verifyでは、Account SIDをユーザー名、Auth TokenをパスワードとしてHTTP Basic認証を使用します。どちらもTwilio ConsoleのホームページにあるAccount Infoで確認できます。
シェルで、ACCOUNT_SID:AUTH_TOKENをBase64エンコードします(コロン区切り、スペースなし)。
出力をコピーします。Authorizationヘッダーの完全な値は、Basicという単語、半角スペース1つ、およびそのBase64文字列です。次の手順でツールシークレットとして保存します。
send_SMS_verificationツールとcheck_SMS_verificationツールを設定
send_SMS_verificationはTwilio Verifyを呼び出してSMS OTPを送信します。check_SMS_verificationは発信者が口頭で伝えた数字を送信します。どちらも同じVerify Service SIDと同じAuthorizationシークレットが必要です。
ダッシュボードから追加
CLIから追加
APIから追加
send_SMS_verification

エージェント設定のAgentセクションで、Add Toolを選択し、Webhookを選択します。
YOUR_VERIFY_SERVICE_SIDを、最初の手順で取得したVA... SIDに置き換えます。
認証ヘッダー: Headersで、タイプをSecretとしてAuthorizationを追加し、完全な値(Basic とBase64)を貼り付けます。Webhookツールを参照してください。
本文パラメーター: Content typeをURL-encoded(application/x-www-form-urlencoded)に設定します。値のタイプとしてLLM Promptを指定し、パラメーターを追加します。
check_SMS_verification
2つ目のWebhookツールを追加します。
send_SMS_verificationと同じVerify Service SIDおよび同じAuthorizationシークレットを使用します。
本文パラメーター: URL-encoded。LLM Promptを使用して、To(E.164)とCode(OTPの数字)を追加します。
ダッシュボードで**Channel**をLLM入力フィールドとして設定する場合は、モデルが常にsmsを渡すよう、システムプロンプトに指示を追加してください。上記のCLIおよびAPIの例では、constant_value/constantValueでsmsを固定しているため、モデルがチャネルを選択することはありません。
skip_turnシステムツールを有効化
発信者がSMSを受信してコードを確認するまでには、少し時間がかかることがあります。skip_turnがないと、エージェントが間を埋めて話したり、プロンプトを繰り返したりする可能性があります。
ダッシュボードから追加
CLIから追加
APIから追加
ToolsでAdd Toolを選択し、System toolを選んでSkip turnを有効にします。追加の設定は不要です。
モデルが呼び出すタイミングを認識できるよう、次のようなガイダンスをシステムプロンプトに追加します。
詳しくはSkip turnを参照してください。
トラブルシューティング
Twilio 60200 — 無効なパラメーター(HTTP 400)
リクエストURLまたは本文がVerify APIの想定と一致しない場合、Twilioから次のような本文が返されることがあります:
確認すること: パスには、Authenticate(Verify)サービス設定のVerify Service SID(VA...)を使用する必要があります。.../Services/{Sid}/...にAccount SID(AC...)を指定すると、60200が発生することがよくあります。その他の無効なパラメーターのケースについては、Twilioの60200ドキュメントを参照してください。
Twilio 20003 — 認証エラー — 認証情報が提供されていません(HTTP 401)
Authorizationヘッダーがない、形式が正しくない、または送信されていない場合、Twilioは次のように応答することがあります:
確認すること: ツールは、完全なBasic <base64>文字列(Basicという語と、その後にBase64出力の前の半角スペース1つを含む)を値とするAuthorizationヘッダーを送信する必要があります。Base64入力は、余分なスペースや改行なしで、正確にACCOUNT_SID:AUTH_TOKENでなければなりません。両方のWebhookツールで、このヘッダーにシークレットが設定されていることを確認してください。20003も参照してください。
その他の問題
- トライアルモードで番号が拒否される: Twilio ConsoleでVerified phone numbersを開き、テスト前に宛先番号が一覧に登録されていることを確認してください。
- エージェントが発信者にかぶせて話す: Skip turnが有効になっていること、および発信者に時間が必要な場合はモデルが
skip_turnを使用するようシステムプロンプトで指示されていることを確認してください。