Skip to main content
Las rutas son relativas a /m2m/v1. Envía Authorization: Bearer <clave>. La clave determina el tenant.

Recibir, leer, responder y verificar

Si tu integración controla las respuestas, activa el modo manual antes de procesar eventos. Recibir un webhook no pausa la IA de Visito; de lo contrario, ambos sistemas podrían responder.
  1. Suscríbete a message.created con webhooks:write y conversations:read.
  2. Responde automáticamente solo cuando data.direction=inbound. Las respuestas salientes también generan eventos.
  3. Lee GET /conversations/{conversationId}/messages y pagina hasta encontrar messageId. El webhook no incluye el texto.
  4. Usa POST /conversations/{conversationId}/reply con conversations:write y un Idempotency-Key estable por evento entrante.
  5. Consulta GET /message-requests/{requestEventId}/status con messages:read, usando el identificador devuelto al aceptar la respuesta. Recibe cambios por message.delivery.updated.
La aceptación en cola no confirma entrega. Los estados incluyen queued, sent, delivered, read, failed, blocked, partial_sent y unknown. Consulta un mensaje con GET /messages/{messageId}/status; para solicitudes con varios mensajes, revisa cada elemento de messages.

Control de IA y atención humana

  • GET /conversations/{id}/policy: conversations:read.
  • PATCH /conversations/{id}/policy: conversations:policy:write. Usa {"manualEnabled":true} para pausar IA y false para reanudar. También acepta statusAction, freezeForMinutes y unfreeze. No combines congelación y descongelación. Una transferencia pendiente bloquea cambios de política.
  • GET /conversations/assignable-operators: conversations:assignment:read.
  • PUT /conversations/{id}/assignment: conversations:assignment:write. Envía {"operatorId":"id"} o {"operatorId":null}; el operador debe pertenecer al tenant.
  • GET /conversations/{id}/handoffs: conversations:read.
  • POST /conversations/{id}/handoff/resolve: conversations:handoffs:write. Acepta resolutionNote opcional y devuelve el control a IA; no resuelve una obligación de respuesta pendiente independiente.
Las respuestas normales requieren una conversación existente. Para iniciar contacto por WhatsApp, utiliza el envío de una plantilla aprobada.