View a markdown version of this page

Integración de AgentCore pagos con la herramienta de navegador - Amazon Bedrock AgentCore

Integración de AgentCore pagos con la herramienta de navegador

Su agente puede acceder al contenido de pago de x402 de dos maneras: mediante la herramienta de navegación o mediante llamadas HTTP estándar.

Integración de herramientas de navegador (Playwright)

La herramienta de AgentCore navegador le ofrece a su agente una sesión de navegador Chromium gestionada y sin periféricos en tiempo de AgentCore ejecución. El agente se conecta WebSocket mediante el DevTools Protocolo Chrome (CDP), lo que le permite navegar por las páginas JavaScript, ejecutar e interceptar las respuestas HTTP a nivel de la red. Para empezar, consulta la guía de incorporación del navegador.

Esta opción usa el SDK de Strands junto con la herramienta del navegador y la herramienta de pagos para navegar por sitios web y procesar pagos. Cuando un agente utiliza la herramienta del navegador para navegar por sitios web, utiliza las capacidades de interceptación de respuestas de Playwright para detectar automáticamente los sitios de paywall:

  1. Navegación por el navegador: el agente utiliza browse_with_payment una herramienta desarrollada por Playwright.

  2. Detección 402 automática: Playwright intercepta todas las respuestas HTTP y activa el controlador de respuestas del agente para detectar 402 códigos de estado.

  3. Extracción x402: las herramientas de pago analizan automáticamente los detalles del pago x402 a partir de la respuesta. headers/body Esto también se puede hacer mediante la lógica empresarial del agente.

  4. Procesamiento de AgentCore pagos: el procesador de pagos crea firmas criptográficas utilizando carteras CDP configuradas.

  5. Reintentar: las herramientas de pago insertan encabezados de autorización y vuelven a intentar la solicitud en la misma sesión del navegador.

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 Integración HTTP

En el caso de las llamadas directas a la API y los escenarios sin interfaz, los desarrolladores pueden crear una lógica de herramientas personalizada mediante el SDK de Strands y una biblioteca de solicitudes HTTP estándar para procesar los pagos con detección x402:

  1. El agente utiliza una herramienta personalizada para realizar llamadas HTTP directas.

  2. La herramienta monitorea los códigos de estado de respuesta HTTP para detectar 402.

  3. La herramienta extrae los requisitos x402 y procesa el pago.

  4. La herramienta vuelve a intentar la solicitud HTTP con los encabezados de autorización de pago.

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