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。




