View a markdown version of this page

Integration von AgentCore Zahlungen mit dem Browser-Tool - Amazon Grundgestein AgentCore

Integration von AgentCore Zahlungen mit dem Browser-Tool

Es gibt zwei Möglichkeiten, wie Ihr Agent auf kostenpflichtige x402-Inhalte zugreifen kann: über das Browser-Tool oder über Standard-HTTP-Aufrufe.

Integration des Browser-Tools (Playwright)

Das AgentCore Browser-Tool bietet Ihrem Agenten innerhalb der Runtime eine verwaltete Headless-Chromium-Browsersitzung. AgentCore Ihr Agent stellt WebSocket mithilfe des DevTools Chrome-Protokolls (CDP) eine Verbindung her, sodass er auf Netzwerkebene durch Seiten navigieren JavaScript, HTTP-Antworten ausführen und abfangen kann. Informationen zu den ersten Schritten finden Sie im Leitfaden zum Browser-Onboarding.

Diese Option verwendet das Strands SDK zusammen mit dem Browser-Tool und dem Zahlungstool, um Websites zu durchsuchen und Zahlungen zu verarbeiten. Wenn ein Agent das Browser-Tool zum Navigieren auf Websites verwendet, verwendet er die Funktionen zum Abfangen von Antworten von Playwright, um Paywall-Websites automatisch zu erkennen:

  1. Browser-Navigation — Der Agent verwendet ein von Playwright browse_with_payment bereitgestelltes Tool.

  2. Automatische 402-Erkennung — Playwright fängt alle HTTP-Antworten ab und veranlasst den Response-Handler des Agenten, 402-Statuscodes zu erkennen.

  3. x402-Extraktion — Zahlungstools analysieren automatisch die X402-Zahlungsdetails anhand der Antwort. headers/body Dies kann auch durch die Geschäftslogik der Agenten erfolgen.

  4. Zahlungsabwicklung — Der AgentCore Zahlungsabwickler erstellt Kryptosignaturen mithilfe konfigurierter CDP-Wallets.

  5. Erneut versuchen — Zahlungstools fügen Autorisierungsheader ein und wiederholen die Anfrage in derselben Browsersitzung.

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 HTTP-Integration

Für direkte API-Aufrufe und Headless-Szenarien können Entwickler mithilfe des Strands SDK zusammen mit einer standardmäßigen HTTP-Anforderungsbibliothek benutzerdefinierte Toollogik schreiben, um Zahlungen mit x402-Erkennung zu verarbeiten:

  1. Der Agent verwendet ein benutzerdefiniertes Tool für direkte HTTP-Aufrufe.

  2. Das Tool überwacht die Statuscodes der HTTP-Antwort, um 402 zu erkennen.

  3. Das Tool extrahiert die x402-Anforderungen und verarbeitet die Zahlung.

  4. Das Tool wiederholt die HTTP-Anfrage mit Headern zur Zahlungsautorisierung.

@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']}")