AgentCore 支払いとブラウザツールの統合
エージェントが x402 有料コンテンツにアクセスする方法は 2 つあります。ブラウザツール経由または標準の HTTP コール経由です。
Browser Tool の統合 (Playwright)
AgentCore ブラウザツールは、エージェントに AgentCore ランタイム内のマネージドヘッドレス Chromium ブラウザセッションを提供します。エージェントは Chrome DevTools Protocol (CDP) を使用して WebSocket 経由で接続し、ページの移動、JavaScript の実行、ネットワークレベルでの HTTP レスポンスの傍受を可能にします。開始するには、ブラウザオンボーディングガイドを参照してください。
このオプションは、Strands SDK をブラウザツールおよび支払いツールとともに使用して、ウェブサイトを参照し、支払いを処理します。エージェントがブラウザツールを使用してウェブサイトを移動する場合、Playwright の応答傍受機能を使用してペイウォールサイトを自動的に検出します。
-
ブラウザナビゲーション — エージェントは Playwright を搭載した
browse_with_paymentツールを使用します。 -
自動 402 検出 — Playwright はすべての HTTP レスポンスをインターセプトし、エージェントのレスポンスハンドラーをトリガーして 402 ステータスコードを検出します。
-
x402 抽出 — 支払いツールは、レスポンスヘッダー/本文から x402 支払いの詳細を自動的に解析します。これは、エージェントのビジネスロジックでも実行できます。
-
支払い処理 — AgentCore 支払いプロセッサは、設定された CDP ウォレットを使用して暗号署名を作成します。
-
再試行 — 支払いツールは認可ヘッダーを挿入し、同じブラウザセッションでリクエストを再試行します。
from agentcore.payments import PaymentClient from agentcore.browser import browser_tool @tool async def browse_with_payment(url: str, auto_pay: bool = True) -> dict: payment_requirements = None async def handle_response(response): nonlocal payment_requirements if response.status == 402: payment_requirements = await extract_x402_requirements(response) async def add_payment_header(route, request): headers = {**request.headers, **payment_result["authorization"]} await route.continue_(headers=headers) async with async_playwright() as p: # 1. Browser setup browser = await p.chromium.connect_over_cdp(AGENTCORE_BROWSER_WS_URL) page = await browser.contexts[0].new_page() # 2. Register response interceptor page.on("response", handle_response) # 3. Initial navigation (handle_response runs automatically here) response = await page.goto(url) # 4. Payment processing logic (runs AFTER navigation completes) if response.status == 402 and payment_requirements and auto_pay: payment_result = payment_client.process_payment( payment_session, payment_instrument, payment_requirements=payment_requirements ) if payment_result["success"]: await page.route("**/*", add_payment_header) response = await page.goto(url) # Retry with payment else: raise PaymentError(f"Payment failed: {payment_result['error_message']}") # 5. Capture content, cleanup, and return content = await page.content() await browser.close() return {"content": content, "status": response.status}
ブラウザ以外の HTTP 統合
直接 API コールとヘッドレスシナリオの場合、開発者は Strands SDK と標準の HTTP リクエストライブラリを使用してカスタムツールロジックを作成し、x402 検出で支払いを処理できます。
-
エージェントは、HTTP を直接呼び出すためのカスタムツールを使用します。
-
Tool は HTTP レスポンスステータスコードをモニタリングして 402 を検出します。
-
ツールは x402 要件を抽出し、支払いを処理します。
-
ツールは、支払い承認ヘッダーを使用して HTTP リクエストを再試行します。
@tool async def make_payment(method, url, headers, body) -> dict: # Make initial HTTP request response = requests.request(method, url, headers=headers, data=body) # Check for 402 Payment Required if response.status_code == 402: payment_requirements = extract_x402_requirements(response) payment_result = payment_client.process_payment( payment_session, payment_instrument, payment_requirements=payment_requirements ) if payment_result["success"]: # Retry request with payment authorization headers.update(payment_result["authorization"]) response = requests.request(method, url, headers=headers, data=body) else: raise PaymentError(f"Payment failed: {payment_result['error_message']}")