Handoff a humano
Si tenés un bot externo que conversa con tus clientes vía la API, podés escalarle una conversación a un asesor humano cuando el cliente lo pida. Un solo POST marca la conversación como "pendiente de asesor" y dispara toda la maquinaria que ya vive en el inbox: badge, push a los asesores, recordatorios y el webhook saliente.
El endpoint
POST /organizations/{orgId}/conversations/{conversationId}/request-handoff- Auth:
X-Api-Keycon scopeconversations:write(o una key sin scopes = acceso total). - Body opcional:
{ "detail": "texto libre" }— queda en el log y se incluye en el webhook saliente (ej."cliente pidió hablar con ventas"). - Idempotente: si la conversación ya estaba en handoff, no se vuelve a disparar (no duplica push ni mensajes).
Ejemplo
# Bash / curl
curl -X POST \
"https://api.mosend.dev/organizations/${ORG_ID}/conversations/${CONVERSATION_ID}/request-handoff" \
-H "X-Api-Key: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{ "detail": "el cliente pidió hablar con un asesor de ventas" }'
# Respuesta (200)
# { "data": { "ok": true }, "timestamp": "..." }// Node.js (18+)
await fetch(
`https://api.mosend.dev/organizations/${ORG_ID}/conversations/${conversationId}/request-handoff`,
{
method: 'POST',
headers: { 'X-Api-Key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ detail: 'el cliente pidió un asesor' }),
},
);# Python
import requests
requests.post(
f"https://api.mosend.dev/organizations/{ORG_ID}/conversations/{conversation_id}/request-handoff",
headers={"X-Api-Key": API_KEY, "Content-Type": "application/json"},
json={"detail": "el cliente pidió un asesor"},
timeout=15,
)Qué pasa al dispararlo
Una sola llamada activa, en cadena:
- La conversación queda marcada como pendiente de asesor: aparece la etiqueta/badge en el inbox y entra al filtro "Pendientes de asesor" en tiempo real.
- Se silencia cualquier automatización de Mosden sobre esa conversación (bot interno, auto-respuestas), para que no pise al asesor.
- La conversación queda sin asignar para que cualquier asesor disponible la pueda tomar.
- Se manda push destacado a los asesores, con recordatorios a los 2, 5 y 10 minutos si nadie la reclama.
- Si la org configuró un mensaje de handoff, se le envía al cliente automáticamente.
- Se dispara el webhook saliente
conversation.handoff_requested(si tenés uno suscrito) — útil si querés además notificar a Slack, Teams, etc.
Flujo recomendado para un bot externo
- Tu bot conversa con el cliente vía
POST /messages. - Cuando detectás (con tu propia lógica/IA) que el cliente quiere un humano — por ejemplo escribe "quiero hablar con una persona" — llamás a
request-handoffsobre esa conversación. - Tu bot deja de responder en esa conversación (vos controlás eso del lado tuyo).
- Los asesores ven la solicitud en el inbox de Mosend y la atienden.
Notas
- Necesitás el
conversationIdde Mosend. Lo obtenés deGET /conversations, del webhookmessage.new(campodata.conversationId), o de la respuesta dePOST /messages. - Si tu API key tiene scope por phone-number, solo podés escalar conversaciones de los números permitidos.
- Para recibir la notificación de handoff en tu sistema (en vez de dispararla), suscribite al evento
conversation.handoff_requesteden Webhooks salientes.