Xây dựng Tác nhân AI Tự động Xác thực Số điện thoại (Full Code + Hướng dẫn)

06 tháng 4, 2026·5 phút đọc

Bạn đã xây dựng một AI agent có thể duyệt web và điền form, nhưng nó luôn bị chặn khi xác thực số điện thoại vì các dịch vụ lớn như Stripe hay Google từ chối số VoIP. Bài viết này sẽ hướng dẫn bạn sử dụng AgentSIM để triển khai SIM vật lý, giúp tác nhân AI hoàn toàn tự chủ trong việc nhận mã OTP.

Xây dựng Tác nhân AI Tự động Xác thực Số điện thoại (Full Code + Hướng dẫn)

Bạn đã xây dựng một tác nhân AI (AI agent) có khả năng duyệt web, điền vào các biểu mẫu và ra quyết định. Tuy nhiên, nó luôn vấp phải một bức tường cố định mỗi lần thực hiện:

"Số điện thoại này không thể được sử dụng để xác thực."

Stripe, WhatsApp và Google đều thực hiện tra cứu nhà mạng (carrier lookup). Tất cả đều chặn các số VoIP. Và mọi API điện thoại đám mây đều trả về kết quả line_type: VoIP.

Tác nhân của bạn bị mắc kẹt. Không phải vì nó thiếu thông minh, mà vì cơ sở hạ tầng đang sai lệch.

Hôm nay, tôi sẽ chỉ cho bạn cách khắc phục vấn đề này một cách triệt để. Kèm theo mã nguồn đầy đủ và kết quả thực tế.

Vấn đề trong 30 giây

Khi Stripe nhận một số điện thoại, nó không chỉ đơn giản là gửi một tin nhắn SMS. Trước tiên, nó truy vấn các cơ sở dữ liệu LERG/NPAC để kiểm tra: Đây là loại số điện thoại nào?

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

Kết quả: BỎ TỪ CHỐI. Stripe luôn chặn các số VoIP用于 xác thực.

Quy trình kiểm tra tương tự cũng diễn ra tại Google, WhatsApp, Telegram và các ngân hàng. Nếu tác nhân của bạn sử dụng số điện thoại đám mây, nó sẽ thất bại.

Giải pháp: Cơ sở hạ tầng SIM vật lý thực sự

Giải pháp ở đây không phải là một mẹo hack, mà là việc sử dụng cơ sở hạ tầng đúng đắn. AgentSIM cấp phát các số điện thoại trên thẻ SIM vật lý thực thông qua Telnyx. Tra cứu nhà mạng sẽ trả về line_type: mobile -- chính xác là những gì Stripe, Google và WhatsApp mong đợi.

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

Xây dựng Tác nhân

Dưới đây là mã nguồn hoàn chỉnh. Chỉ gồm ba bước. Tổng thời gian thực hiện khoảng 3,5 giây.

Bước 1: Cài đặt

pip install agentsim

Bước 2: Cấp phát số điện thoại

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

Bước 3: Chờ nhận OTP

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

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

Chỉ vậy thôi. Mã OTP được phân tích tự động -- mã được trích xuất, dịch vụ được phát hiện và trả về dữ liệu JSON có cấu trúc. Không cần Regex. Không cần con người đọc tin nhắn SMS.

Quy trình tự động hoàn chỉnh với Playwright

from playwright.async_api import async_playwright

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

    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()

Số liệu hiệu suất thực tế

Đây không phải là lý thuyết. Dưới đây là các số liệu đang chạy trong môi trường sản xuất (production):

  • Thời gian cấp phát: Trung bình 212ms
  • Thời gian giao OTP: Trung bình 3,5 giây
  • Chi phí: $0,99 cho mỗi phiên (cấp phát + OTP + giải phóng)

So sánh với các giải pháp thay thế:

Giải phápChi phíKết quả nhà mạng
Twilio$1.15/số + phí sử dụngline_type: VoIP (bị chặn)
JoltSMS$50/số/thángline_type: mobile (hoạt động)
Virtual chia sẻ$0.30-2/sốline_type: VoIP (bị chặn)
AgentSIM$0.99/sessionline_type: mobile (hoạt động)

Với 100 lần xác thực mỗi tháng: JoltSMS tốn 5.000 USD. AgentSIM chỉ tốn 99 USD. Rẻ hơn 50 lần.

Tại sao điều này quan trọng với AI Agents

Các tác nhân AI được thiết kế để tự chủ. Chúng duyệt web, ra quyết định và hành động. Nhưng nếu mọi hành động yêu cầu xác thực điện thoại đều cần một con người đọc tin nhắn SMS, thì tác nhân của bạn không thực sự tự chủ -- nó chỉ là một con rối.

Cơ sở hạ tầng SIM vật lý giúp loại bỏ nút thắt cổ chai cuối cùng của con người. Tác nhân của bạn có thể:

  • Tạo và xác minh tài khoản Stripe Connect
  • Thiết lập WhatsApp Business API
  • Xác minh tài khoản Google để truy cập dịch vụ
  • Đăng ký trên bất kỳ nền tảng nào yêu cầu xác thực qua SMS

Tất cả hoàn toàn không có sự can thiệp của con người.

Hỗ trợ MCP (Model Context Protocol) gốc

Nếu bạn đang xây dựng ứng dụng với Claude Code, Cursor hoặc Windsurf -- AgentSIM có sẵn máy chủ MCP tích hợp. Chỉ cần một lệnh để thêm:

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

Bây giờ tác nhân của bạn có thể cấp phát số điện thoại thông qua ngôn ngữ tự nhiên: "Tôi cần một số điện thoại Mỹ để xác minh tài khoản Stripe".

Dùng thử miễn phí

AgentSIM tặng bạn 10 phiên miễn phí mỗi tháng -- không cần thẻ tín dụng, không cam kết. Nếu mã OTP không đến, bạn không bị tính phí.

Bắt đầu tại agentsim.dev/sign-up

Một phiên = một số điện thoại, một mã OTP, một lần xác thực. Phần còn lại để tác nhân của bạn lo liệu.

Mã nguồn mở tại github.com/agentsimdev/agentsim. Tài liệu tại docs.agentsim.dev.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗