View a markdown version of this page

Intégration des AgentCore paiements avec l'outil de navigation - Amazon Bedrock AgentCore

Intégration des AgentCore paiements avec l'outil de navigation

Votre agent peut accéder au contenu payant x402 de deux manières : via l'outil de navigation ou via des appels HTTP standard.

Intégration de l'outil de navigation (Playwright)

L'outil de AgentCore navigation offre à votre agent une session de navigateur Chromium gérée sans en-tête au sein du AgentCore Runtime. Votre agent se connecte WebSocket à l'aide DevTools du protocole Chrome (CDP), qui lui permet de parcourir les pages JavaScript, d'exécuter et d'intercepter les réponses HTTP au niveau du réseau. Pour commencer, consultez le guide d'intégration du navigateur.

Cette option utilise le SDK Strands ainsi que l'outil de navigateur et l'outil de paiement pour parcourir les sites Web et traiter les paiements. Lorsqu'un agent utilise l'outil de navigation pour naviguer sur des sites Web, il utilise les capacités d'interception des réponses de Playwright pour détecter automatiquement les sites paywall :

  1. Navigation dans le navigateur — L'agent utilise browse_with_payment un outil développé par Playwright.

  2. Détection automatique 402 — Playwright intercepte toutes les réponses HTTP et déclenche le gestionnaire de réponses de l'agent pour détecter 402 codes d'état.

  3. Extraction x402 — Les outils de paiement analysent automatiquement les informations de paiement x402 à partir de la réponse. headers/body Cela peut également être fait par la logique métier de l'agent.

  4. Traitement des paiements : le processeur AgentCore de paiement crée des signatures cryptographiques à l'aide de portefeuilles CDP configurés.

  5. Réessayer — Les outils de paiement injectent des en-têtes d'autorisation et réessayent la demande au cours de la même session de navigateur.

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 Intégration HTTP

Pour les appels d'API directs et les scénarios headless, les développeurs peuvent écrire une logique d'outil personnalisée à l'aide du SDK Strands, ainsi que d'une bibliothèque de requêtes HTTP standard pour traiter les paiements avec une détection x402 :

  1. L'agent utilise un outil personnalisé pour effectuer des appels HTTP directs.

  2. L'outil surveille les codes d'état des réponses HTTP pour détecter 402.

  3. L'outil extrait les exigences x402 et traite le paiement.

  4. L'outil réessaie la requête HTTP avec les en-têtes d'autorisation de paiement.

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