Mengintegrasikan AgentCore pembayaran dengan Browser Tool
Ada dua cara agen Anda dapat mengakses konten berbayar x402: melalui Alat Browser atau melalui panggilan HTTP standar.
Integrasi Alat Browser (Penulis naskah)
Alat AgentCore Browser memberi agen Anda sesi browser Chromium tanpa kepala yang dikelola dalam AgentCore Runtime. Agen Anda terhubung WebSocket menggunakan Chrome DevTools Protocol (CDP), memungkinkannya menavigasi halaman, mengeksekusi JavaScript, dan mencegat respons HTTP di tingkat jaringan. Untuk memulai, lihat panduan orientasi Browser.
Opsi ini menggunakan Strands SDK bersama dengan alat browser dan alat pembayaran untuk menelusuri situs web dan memproses pembayaran. Ketika agen menggunakan alat browser untuk menavigasi situs web, ia menggunakan kemampuan intersepsi respons Playwright untuk secara otomatis mendeteksi situs paywall:
-
Navigasi Browser - Agen menggunakan
browse_with_paymentalat yang didukung oleh Playwright. -
Deteksi 402 Otomatis - Penulis naskah mencegat semua respons HTTP dan memicu penangan respons agen untuk mendeteksi kode status 402.
-
Ekstraksi x402 - Alat pembayaran secara otomatis mengurai detail pembayaran x402 dari respons. headers/body Hal ini juga dapat dilakukan dengan logika bisnis agen.
-
Pemrosesan Pembayaran — AgentCore pemroses pembayaran membuat tanda tangan kripto menggunakan dompet CDP yang dikonfigurasi.
-
Coba lagi — Alat pembayaran menyuntikkan header otorisasi dan coba lagi permintaan di sesi browser yang sama.
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}
Non-browser Integrasi HTTP
Untuk panggilan API langsung dan skenario tanpa kepala, pengembang dapat menulis logika alat khusus menggunakan Strands SDK bersama pustaka permintaan HTTP standar untuk memproses pembayaran dengan deteksi x402:
-
Agen menggunakan alat khusus untuk membuat panggilan HTTP langsung.
-
Alat memonitor kode status respons HTTP untuk mendeteksi 402.
-
Alat mengekstrak persyaratan x402 dan memproses pembayaran.
-
Alat mencoba ulang permintaan HTTP dengan header otorisasi pembayaran.
@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']}")