SMS OTP認証

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

電話番号、OTPコード、認証成功を確認するエージェントとの会話

概要

このガイドでは、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である必要があります。
1

Twilio Consoleにログイン

Twilio Consoleを開きます。

2

Authenticate(Verify)サービスを作成

左側のサイドバーで**Add +**を選択し、Authenticate(Verify)サービスを作成します。

3

サービスに名前を付ける

わかりやすい名前を付けます(例:ElevenLabs OTP)。
4

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ツールを設定

1

Basic認証用にTwilio認証情報をエンコード

Twilio Verifyでは、Account SIDをユーザー名、Auth TokenをパスワードとしてHTTP Basic認証を使用します。どちらもTwilio ConsoleのホームページにあるAccount Infoで確認できます。

シェルで、ACCOUNT_SID:AUTH_TOKENをBase64エンコードします(コロン区切り、スペースなし)。

printf '%s' 'YOUR_ACCOUNT_SID:YOUR_AUTH_TOKEN' | base64

出力をコピーします。Authorizationヘッダーの完全な値は、Basicという単語、半角スペース1つ、およびそのBase64文字列です。次の手順でツールシークレットとして保存します。

Basic dkFDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==
2

send_SMS_verificationツールとcheck_SMS_verificationツールを設定

send_SMS_verificationはTwilio Verifyを呼び出してSMS OTPを送信します。check_SMS_verificationは発信者が口頭で伝えた数字を送信します。どちらも同じVerify Service SIDと同じAuthorizationシークレットが必要です。

send_SMS_verification

電話番号、OTPコード、認証成功を収集するエージェントとの会話

エージェント設定のAgentセクションで、Add Toolを選択し、Webhookを選択します。

フィールド値
名前send_SMS_verification
説明指定された電話番号にSMSでOTP認証コードを送信
メソッドPOST
URLhttps://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/Verifications

YOUR_VERIFY_SERVICE_SIDを、最初の手順で取得したVA... SIDに置き換えます。

認証ヘッダー: Headersで、タイプをSecretとしてAuthorizationを追加し、完全な値(Basic とBase64)を貼り付けます。Webhookツールを参照してください。

本文パラメーター: Content typeをURL-encoded(application/x-www-form-urlencoded)に設定します。値のタイプとしてLLM Promptを指定し、パラメーターを追加します。

データ型識別子説明
stringToE.164形式の発信者電話番号(例:+14155552671)
stringChannel配信チャネル。smsを使用

check_SMS_verification

2つ目のWebhookツールを追加します。

フィールド値
名前check_SMS_verification
説明発信者が指定したOTPコードが有効かどうかを確認
メソッドPOST
URLhttps://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/VerificationCheck

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を固定しているため、モデルがチャネルを選択することはありません。

3

skip_turnシステムツールを有効化

発信者がSMSを受信してコードを確認するまでには、少し時間がかかることがあります。skip_turnがないと、エージェントが間を埋めて話したり、プロンプトを繰り返したりする可能性があります。

ToolsでAdd Toolを選択し、System toolを選んでSkip turnを有効にします。追加の設定は不要です。

モデルが呼び出すタイミングを認識できるよう、次のようなガイダンスをシステムプロンプトに追加します。

When the caller indicates they are still waiting to receive the OTP code — for example,
"hold on", "I haven't received it yet", or "give me a second" — use the skip_turn tool
to wait silently rather than speaking. Do not repeat the prompt or ask for the code again
until the caller indicates they are ready.

詳しくはSkip turnを参照してください。

4

システムプロンプトでフローをオーケストレーション

次の例のように、ツールの順序を明確にしたシステムプロンプトを使用します。

You are a secure verification agent. When you need to verify a caller's identity:
1. Ask for their phone number if you do not already have it.
2. Standardize the number to E.164 for tool calls: a leading plus, country code, then digits only, no spaces (for example +14155552671).
3. Call send_SMS_verification with their number and Channel set to "sms".
4. Tell the caller: "I've sent a verification code to your phone. Please read it out when you're ready."
5. If the caller says they haven't received the code yet or asks for a moment, use skip_turn to wait silently.
6. Once the caller provides the code, call check_SMS_verification with their number and the code.
7. If the response status is "approved", proceed with the verified flow.
8. If the code is invalid, let the caller know and offer to resend.

トラブルシューティング

Twilio 60200 — 無効なパラメーター(HTTP 400)

リクエストURLまたは本文がVerify APIの想定と一致しない場合、Twilioから次のような本文が返されることがあります:

{
"code": 60200,
"message": "Invalid parameter",
"more_info": "https://www.twilio.com/docs/errors/60200",
"status": 400
}

確認すること: パスには、Authenticate(Verify)サービス設定のVerify Service SID(VA...)を使用する必要があります。.../Services/{Sid}/...にAccount SID(AC...)を指定すると、60200が発生することがよくあります。その他の無効なパラメーターのケースについては、Twilioの60200ドキュメントを参照してください。

Twilio 20003 — 認証エラー — 認証情報が提供されていません(HTTP 401)

Authorizationヘッダーがない、形式が正しくない、または送信されていない場合、Twilioは次のように応答することがあります:

{
"code": 20003,
"message": "Authentication Error - No credentials provided",
"more_info": "https://www.twilio.com/docs/errors/20003",
"status": 401
}

確認すること: ツールは、完全なBasic <base64>文字列(Basicという語と、その後にBase64出力の前の半角スペース1つを含む)を値とするAuthorizationヘッダーを送信する必要があります。Base64入力は、余分なスペースや改行なしで、正確にACCOUNT_SID:AUTH_TOKENでなければなりません。両方のWebhookツールで、このヘッダーにシークレットが設定されていることを確認してください。20003も参照してください。

その他の問題

  • トライアルモードで番号が拒否される: Twilio ConsoleでVerified phone numbersを開き、テスト前に宛先番号が一覧に登録されていることを確認してください。
  • エージェントが発信者にかぶせて話す: Skip turnが有効になっていること、および発信者に時間が必要な場合はモデルがskip_turnを使用するようシステムプロンプトで指示されていることを確認してください。