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.
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.
Mensaje inválido
Falta senderRole, body o el body supera el límite.
Token de chat inválido
El Bearer es inexistente, inválido o ha expirado.
Pedido no coincide
El token temporal pertenece a otro pedido.