自律型の電話番号本人確認エージェントを作った(完全なコード+チュートリアル)

Dev.to / 2026/4/7

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical Usage

要点

  • この記事では、自律型の電話番号本人確認エージェントが失敗する理由を説明している。主要サービス(Stripe、Google、WhatsApp など)はキャリア/回線タイプの照会を行い、VoIP やクラウド番号を自動的に拒否する。
  • Twilio のルックアップ API の例を通じて、クラウド電話プロバイダは line_type として「voip」を返すことが多く、その結果として本人確認が一貫して拒否されることを示している。
  • 提案する解決策は、実SIMベースの番号プロビジョニングを用いること(Telnyx 経由)。これによりキャリア照会で line_type が「mobile」となり、本人確認プロバイダが期待する内容に一致する。
  • このアプローチにより、自律型エージェントが電話番号本人確認をエンドツーエンドで約 3.5 秒で完了できると主張し、完全なコードとチュートリアルのワークフローを提供している。
  • 核となる教訓は、本人確認の成功はエージェントの知能よりも、キャリアの本人確認ルールに整合した電話番号インフラを使うことに依存する、という点にある。

You built an AI agent that can browse the web, fill forms, and make decisions. But it hits a wall every single time:

"この電話番号は本人確認に使用できません。"

Stripe. WhatsApp. Google. どれもキャリアの照会を行います。どれもVoIPをブロックします。そして、あらゆるクラウド電話APIが line_type: VoIP を返します。

あなたのエージェントは行き詰まります。賢くないからではありません。インフラが間違っているからです。

今日は、これを直す方法をお見せします。完全なコード。実際の結果。

The Problem in 30 Seconds

Stripeが電話番号を受け取ると、単にSMSを送るだけではありません。最初に、LERG/NPACデータベースに問い合わせて次を確認します: これはどんな種類の番号ですか?

$ curl https://lookups.twilio.com/v2/PhoneNumbers/+16505550001
{
  "line_type_intelligence": {
    "type": "voip",
    "carrier": "Twilio Inc."
  }
}

結果: REJECTED(拒否)。Stripeは本人確認のためのVoIP番号をブロックします。常に。

同じ確認はGoogle、WhatsApp、Telegram、銀行でも行われます。あなたのエージェントがクラウドの電話番号を使っているなら、失敗します。

The Fix: Real SIM Infrastructure

解決策はハックではありません。正しいインフラです。AgentSIMはTelnyxを通じて 実際の物理SIMカード に番号をプロビジョニングします。キャリア照会の結果は line_type: mobile ── まさにStripe、Google、WhatsAppが期待する内容です。

$ agentsim.provision({ country: "US" })
{
  "number": "+14155551234",
  "carrier": "T-Mobile",
  "line_type": "mobile"
}

Building the Agent

こちらが完全なコードです。3ステップ。~3.5秒でエンドツーエンド。

Step 1: Install

pip install agentsim

Step 2: Provision a Number

import asyncio
from agentsim import AgentSIM

async def main():
    agentsim = AgentSIM(api_key="your-api-key")

    number = await agentsim.provision({
        "country": "US",
        "capabilities": ["sms"],
    })

    print(f"Number: {number.number}")
    print(f"Carrier: {number.carrier}")
    # Number: +14155551234
    # Carrier: T-Mobile

Step 3: Wait for OTP

    otp = await number.wait_for_otp(timeout=30_000)

    print(f"OTP: {otp.code}")
    print(f"Service: {otp.service}")
    # OTP: 847291
    # Service: stripe

以上です。OTPは自動的に解析されます──コード抽出、サービス判定、構造化されたJSONを返します。正規表現も不要。SMSを人が読む必要もありません。

Full Autonomous Flow with Playwright

from playwright.async_api import async_playwright

async def verify_on_stripe():
    number = await agentsim.provision({"country": "US"})

返却形式: {"translated": "翻訳されたHTML"}async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://connect.stripe.com/setup")
        await page.fill("input[name='phone']", number.number)
        await page.click("button[type='submit']")

        otp = await number.wait_for_otp(timeout=30_000)
        await page.fill("input[name='code']", otp.code)
        await page.click("button[type='submit']")

        print("Phone verified")
        await browser.close()

実測のパフォーマンス

これは机上の話ではありません。こちらが本番稼働での実績です:

  • プロビジョニング時間:平均212ms
  • OTPの配信:平均3.5秒
  • コスト:1セッションあたり$0.99(プロビジョン+OTP+リリース)

代替手段と比較すると:

ソリューション コスト キャリア結果
Twilio $1.15/番号+利用料 line_type: VoIP(ブロック)
JoltSMS $50/番号/月 line_type: モバイル(動作)
共有バーチャル $0.30-2/番号 line_type: VoIP(ブロック)
AgentSIM $0.99/セッション line_type: モバイル(動作)

月100回の認証では、JoltSMSは$5,000、AgentSIMは$99です。50倍安い。

AIエージェントにとって重要な理由

AIエージェントは、設計上自律的です。ブラウズして、判断し、行動します。しかし、電話番号の認証が必要なすべての操作にSMSを人間が読まなければならないなら、そのエージェントは自律的ではなく、人形です。

実在のSIMインフラが、最後の人手のボトルネックを取り除きます。エージェントは次のことができます:

  • Stripe Connectアカウントを作成し、検証する
  • WhatsApp Business APIをセットアップする
  • サービスアクセスのためにGoogleアカウントを検証する
  • SMS認証が必要なあらゆるプラットフォームに登録する

すべて、人間の関与なしに。

MCP Native

Claude Code、Cursor、またはWindsurfで構築しているなら——AgentSIMには内蔵のMCPサーバーがあります。1コマンドで追加できます:

claude mcp add agentsim -- npx -y @agentsim/mcp-server

これで、エージェントは自然言語で番号をプロビジョニングできます:「Stripeアカウントを検証するために、米国の電話番号が必要です」

無料で試す

AgentSIMは毎月10件の無料セッションを提供します——クレジットカード不要、契約の縛りもなし。OTPが届かなければ、料金は発生しません。

agentsim.dev/sign-upで始めましょう

1セッション=1番号、1OTP、1回の検証。エージェントが残りを実行します。

オープンソース:github.com/agentsimdev/agentsim。ドキュメント:docs.agentsim.dev