Marketplace externo

Chat de incidencias externo

Sincroniza el chat de incidencias entre el restaurante y la flota externa con dos direcciones acordadas en la adjudicación.

Volver a todos los endpoints

Marketplace externo

Chat de incidencias externo

La flota ganadora declara data.webhooks.incidentChat.url en el ACK de adjudicación para que OperioHub publique eventos de apertura y mensajes del restaurante. A la vez, la adjudicación entrega operations.incidentChat.url y operations.incidentChat.bearerToken para que la flota envíe mensajes a OperioHub. La cotización no intercambia ningún webhook de chat.

POST data.webhooks.incidentChat.url (ACK) y operations.incidentChat.url 201 Created o 202 Accepted para duplicados
Auth requerida Perfil: Bearer temporal de chat para mensajes hacia OperioHub

Requisitos para mensaje de la flota

  • Enviar el token Bearer de chat.
  • Usar externalMessageId estable cuando el emisor pueda reintentar.
  • El token queda invalidado al caducar o cancelar el pedido.

Campos principales

Resumen de los campos relevantes para este endpoint.

Campo Tipo Uso Descripción
data.webhooks.incidentChat.url HTTPS URL ACK de adjudicación, OperioHub a flota Destino obligatorio que declara la flota ganadora para recibir eventos de chat.
eventType string OperioHub a flota incident_chat.opened o incident_chat.message_created.
operations.incidentChat.url / bearerToken URL / string Adjudicación, flota a OperioHub Canal temporal para que la flota envíe mensajes a OperioHub.
senderRole dispatcher | rider Flota a OperioHub Rol del emisor externo.
body string Flota a OperioHub Mensaje de 1 a 1.000 caracteres.
externalMessageId string Opcional Idempotencia: un identificador ya recibido devuelve 202 sin crear otro mensaje.

Eventos que recibe la flota

OperioHub no requiere una respuesta de body para estos webhooks.

  • La flota ganadora debe incluir data.webhooks.incidentChat.url en el ACK de adjudicación; si falta, OperioHub rechaza la adjudicación.
  • incident_chat.opened se emite al abrir el chat de incidencias del pedido.
  • incident_chat.message_created se emite para mensajes creados por el restaurante.
  • Los mensajes que la flota envía a OperioHub no se reenvían a la misma flota, evitando bucles.

Evento de apertura

{
  "eventType": "incident_chat.opened",
  "eventId": "44444444-4444-4444-8444-444444444444",
  "occurredAt": "2026-07-15T10:30:00.000Z",
  "order": { "orderId": "11111111-1111-4111-8111-111111111111" },
  "marketplace": { "marketplaceOrderRequestId": "22222222-2222-4222-8222-222222222222", "selectedQuoteId": "33333333-3333-4333-8333-333333333333" },
  "chat": { "chatId": "chat-42", "type": "restaurant_dispatcher" },
  "reply": { "sendMessageUrl": "https://api.operiohub.com/api/marketplace/orders/11111111-1111-4111-8111-111111111111/external-incident-chat/messages", "bearerToken": "CHAT_TOKEN" }
}

Request JSON

{
  "senderRole": "rider",
  "externalSenderId": "rider-42",
  "externalSenderName": "Rider externo",
  "body": "Estoy en el restaurante.",
  "externalMessageId": "fleet-message-42"
}

Errores esperados

Respuestas habituales que debe contemplar la integración.

400

Mensaje inválido

Falta senderRole, body o el body supera el límite.

401

Token de chat inválido

El Bearer es inexistente, inválido o ha expirado.

403

Pedido no coincide

El token temporal pertenece a otro pedido.