haggl.ai

Pide a un agente de ventas de haggl.ai de un comerciante una oferta personalizada y luego pásala al pago. Marketing de rendimiento para el comercio agéntico: la oferta se mantiene dentro del presupuesto que el comerciante establece como límite.

Servidor MCP alojado

npx add-mcp 'https://www.haggl.ai/api/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Protocolo de Negociación de haggl.ai

Los agentes compradores solicitan términos autorizados por el comerciante utilizando contexto relevante. haggl.ai devuelve una cotización, orientación sobre información útil y las acciones disponibles actualmente. Las herramientas del navegador, MCP remoto, REST y la interfaz humana utilizan la misma sesión de negociación.

Consulte el precio actual del comerciante. Una cotización no es una aceptación, y una cotización aceptada no es un pago completado ni una inscripción.

1. Descubrimiento


El embed añade etiquetas de descubrimiento de tienda faltantes incluso cuando la insignia está oculta o el navegador no admite WebMCP.

<meta name="haggl-vendor" content="{vendorId}" />
<meta name="haggl-negotiate" content="https://www.haggl.ai/api/negotiate?vendor={vendorId}" />
<meta name="haggl-mcp" content="https://www.haggl.ai/api/mcp" />
<meta name="haggl-mcp-manifest" content="https://www.haggl.ai/.well-known/mcp.json" />
<meta name="haggl-protocol" content="https://www.haggl.ai/protocol" />

Los entornos de ejecución de navegador compatibles descubren herramientas registradas en la página. Actualice sus definiciones después de acciones, navegación o ediciones humanas. Cuando WebMCP no esté disponible, siga el endpoint REST o MCP remoto anunciado.

El MCP remoto utiliza HTTP Streamable. Su lista de herramientas es estable porque el endpoint atiende múltiples sesiones. Cada respuesta proporciona state.allowed_actions; el servidor aplica estas reglas.

HerramientaPropósito
haggl_start_negotiationCrear una sesión y obtener orientación contextual.
haggl_search_catalogLeer productos del catálogo.
haggl_get_negotiationLeer el estado actual, la versión de la oferta y las acciones permitidas.
haggl_submit_offerSolicitar términos con el contexto disponible.
haggl_accept_offerAceptar la oferta exacta aprobada por el comprador.

2. Sesión y estado


GET /api/negotiate?vendor={vendorId} crea una sesión; use la URL de estado devuelta para comprobaciones de solo lectura. La respuesta incluye identidad del comerciante, precios públicos, guidance, acciones disponibles y URL de sesión.

Reutilice session.id entre transportes. Páselo como session_id al MCP remoto sin abrir otra sesión. Vuelva a leerlo después de recargas o resultados inciertos.

state.offer_version identifica la ronda de oferta. La caducidad, las rondas restantes y las acciones permitidas se aplican en el servidor incluso cuando un agente tiene definiciones de herramientas más antiguas.

3. Orientación contextual


La orientación proviene de la categoría del comerciante, productos o servicios públicos y el contexto actual de la sesión. Los perfiles describen circunstancias relevantes, no personajes de incorporación que el comprador deba seleccionar.

Las señales explican qué información podría ayudar, por qué es importante y cómo puede fundamentarse. Las entradas de cotización requeridas se separan del contexto opcional. Proporcione todo lo que ya se sabe en una sola solicitud.

La orientación no puede otorgar elegibilidad ni aumentar un límite de descuento. La autoridad comercial existente permanece privada. El aprendizaje de resultados históricos es independiente.

4. Evidencia y consentimiento


Una solicitud inicial puede omitir evidencia. La información autoinformada sigue siendo autoinformada; los documentos o extractos no se autentican automáticamente. Para correos electrónicos firmados relevantes, data.proofs[].raw_mime_b64 permite comprobaciones DKIM en el servidor del origen firmado y la integridad, no la verificación independiente de cada afirmación.

Obtenga permiso para la información personal específica y el destino antes de enviarla. No solicite acceso al buzón ni documentos no relacionados como paso universal. Los bytes brutos del correo electrónico se eliminan antes del almacenamiento; los extractos enviados y otro contexto pueden permanecer. El historial redactado no se convierte en prueba verificada nueva.

5. Solicitar una cotización


Publique por POST los productos o servicios solicitados y cualquier contexto disponible en session.negotiate_url. El objeto data es opcional. La respuesta puede contener términos personalizados, términos públicos ordinarios, entradas faltantes necesarias o ninguna oferta disponible.

POST {session.negotiate_url}
Content-Type: application/json

{
  "data": {},
  "ask": { "items": [{ "product_handle": "headphones", "quantity": 1 }] }
}

Añada contexto útil dentro de las rondas restantes; no fabrique pasos de negociación adicionales. Las entradas heredadas de target_segment_id siguen siendo aceptadas por compatibilidad. Los nuevos clientes no las necesitan.

6. Revisar y aceptar


Revise el precio, la moneda, los artículos cubiertos, las cantidades, las condiciones y la validez con el comprador. Las rondas restantes describen un límite de sesión, no una promesa de mejores términos. Acepte solo la versión que aprueben.

Lea state.acceptance_effects y state.commits_purchase antes de la aprobación. Una devolución de llamada del comerciante puede tener efectos de compra desconocidos. Un enlace de pago por sí solo no es confirmación de pago.

POST {session.accept_url}
Content-Type: application/json

{ "expected_offer_version": 1 }

// Use the actual state.offer_version reviewed by the buyer.
// GET session.status_url to recover an uncertain response.

Las versiones obsoletas se rechazan. Reintente la misma versión reservada para recuperar una transferencia existente cuando la respuesta sea retryable. Si el proveedor de pago rechaza definitivamente el cumplimiento, el estado pasa a merchant_action_required: los términos aprobados permanecen reservados, la aceptación se retira y state.merchant_assistance indica a quién contactar. No reintente; dé al comprador esa vía. Siga las URL de pago o inscripción devueltas. En Stripe, descubra sus herramientas en vivo y actualice después de cambios en el formulario de pago; no codifique nombres de herramientas del proveedor. El pago requiere autorización separada del comprador.

Un servicio local que cierra por teléfono (vendor.local_service) entrega un acuerdo aceptado por teléfono: next_steps proporciona un reference, los términos con su límite, call_url y whatsapp_url. Dé al comprador el enlace de WhatsApp o el número. Su mensaje prellenado cita la referencia, el trabajo y los términos y termina en la dirección del comprador, que ellos añaden antes de enviarlo ellos mismos: el mensaje va directamente al comerciante, que confirma el precio antes de salir y en un devis escrito.

7. Utilidades


Nombre el servicio o la tarifa. El uso, el área de servicio, la distribución por tiempo de uso y los términos contractuales actuales pueden ayudar; una factura no es un requisito previo universal.

POST {session.negotiate_url}
Content-Type: application/json

{
  "data": { "usage": { "amount": 4200, "unit": "kWh",
    "period_start": "2025-09-01", "period_end": "2026-08-31" } },
  "ask": { "product": "electricity" }
}

Mantenga distintas las unidades de tarifa, la moneda, las ventanas de tiempo, las tarifas fijas, los impuestos y los términos de compromiso. Preserve las tarifas unitarias de sub-centavo. El consumo anual por sí solo no puede establecer el costo total cuando se desconocen otras tarifas o cargos. No infiera ahorros ni inscripción completada a partir de una cotización indicativa.

8. Recuperación


RespuestaSiguiente paso
400 / 422Corrija las entradas identificadas sin recopilar evidencia no relacionada.
404Verifique el identificador de sesión o comerciante devuelto.
409Lea el estado canónico; revise los términos cambiados antes de aceptar.
410Solicite términos nuevos si el comprador aún los desea.
413Envíe solo el contexto que esta solicitud necesita: los datos y la solicitud juntos tienen un límite de tamaño, indicado en la respuesta. Los bytes brutos del correo electrónico no cuentan.
429 / 503Respete la capacidad o la disponibilidad temporal, y el tiempo de reintento indicado; no reinicie en un bucle.

Un tiempo de espera es incierto, no una prueba de que no ocurrió nada. Lea la misma sesión antes de repetir una mutación. Una configuración de cumplimiento no disponible no debe presentarse como un pedido completado.

Configuración del comerciante


Conecte el sitio, configure los límites comerciales autorizados y habilite la transferencia de cumplimiento compatible. La orientación pública no requiere personajes de cliente escritos por el comerciante. Las políticas privadas existentes siguen aplicándose mientras el soporte de presupuesto de campaña se implementa por separado.

Pruebe los clientes y adaptadores de consumidores reales. El registro, la invocación, las cotizaciones válidas, la recomendación y el pago completado son resultados distintos.