Todos los ejemplos son el cuerpo JSON de una petición POST con autenticación básica. Van a https://api.mensatek.com/v7/EnviarVOZ salvo A.17, A.18 y A.19, que indican a qué función van. Los teléfonos son inventados: ponga su número llamante y sus destinatarios.
A.1 Lo mínimo: un aviso y nada más. Una alerta que se escucha y se cuelga. Así es como se manda una llamada completa, cabeceras incluidas:
curl -X POST https://api.mensatek.com/v7/EnviarVOZ \
-u "UsuarioAPI:APIToken" \
-H "Content-Type: application/json" \
-d '{"RESP":"JSON","REMITENTE":"34910123456","MENSAJE":"Aviso de su sistema de alarma: se ha detectado una apertura en la puerta principal.","REPORT":"1","DESTINATARIOS":[{"Telefono":"34600123456"}]}'
Y esto es lo que contesta:
{
"Res": 1,
"idEnvio": 1228853777,
"Destinatarios": 1,
"Encoladas": [
{ "Telefono": "34600123456", "idMensaje": 108366478 }
],
"NoEncoladas": "",
"FueraDeHorario": 0,
"Duplicados": 0,
"ListaNegra": 0,
"Cred": 1250.5
}
Guarde el idMensaje de cada destinatario: es el que viaja en todos los reports de esa llamada, y el que sirve para cancelarla.
A.2 Código PIN / OTP por teléfono. El código se deletrea para que se entienda a la primera y se repite. Sin interactividad: se cuelga al terminar.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"LENGUAJE": "es-ES:1",
"REPORT": "1",
"REFERENCIAUSUARIO": "OTP-88421",
"MENSAJE": "Su codigo de verificacion es (PAUSA:1) (SPELL:481902) (PAUSA:1) Repito: (SPELL:481902)",
"DESTINATARIOS": [
{ "Telefono": "34600123456" }
]
}
A.3 Alerta urgente con acuse de recibo. Se avisa y se pide confirmación: la tecla 1 llama a su URL para que usted anote quién se ha enterado, y la tecla 2 repite el aviso por si no se ha oído bien. Con reintentos cada cinco minutos y un timbre corto, para enterarse pronto de que no hay nadie.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"REFERENCIAUSUARIO": "ALERTA-CPD-2026-09-15",
"MENSAJE": "Atencion (Nombre). Alerta en el centro de datos: temperatura fuera de rango.",
"IVR": "1",
"MENUIVR": {
"LOCUCION": "Pulse 1 para confirmar que atiende la alerta o 2 para volver a oirla",
"1": { "ACCION": 2, "VALOR": "https://www.sudominio.com/alertas/ok", "LOCUCIONFINAL": "Gracias, queda registrado" },
"2": { "ACCION": 1, "REPETIRMENU": 1 }
},
"TIMBRADO": "20",
"DETECTARCONTESTADOR": "1",
"REINTENTOS": "3",
"INTERVALO": "5",
"DESTINATARIOS": [
{ "Nombre": "Luis", "Telefono": "34600123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Luis" } ] },
{ "Nombre": "Marta", "Telefono": "34600123457", "Variables": [ { "Nombre": "Nombre", "Valor": "Marta" } ] }
]
}
Con DETECTARCONTESTADOR=1 un contestador no cuenta como aviso entregado: se cuelga y se vuelve a intentar.
A.4 Si no lo coge una persona, dejarlo en el contestador. Con DETECTARCONTESTADOR=3 el sistema espera la señal del contestador y deja el mensaje después del pitido; recibirá el report 511.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"MENSAJE": "Le llamamos de su taller: su vehiculo esta listo para recoger.",
"DETECTARCONTESTADOR": "3",
"DESTINATARIOS": [
{ "Telefono": "34600123456" }
]
}
A.5 Que el mensaje lo escuche una persona, sí o sí. Lo contrario del anterior: con DETECTARCONTESTADOR=2 se cuelga al detectar el contestador y se reintenta; sólo si al agotar los reintentos vuelve a salir el contestador, se le deja el mensaje.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"MENSAJE": "Hola (Nombre), necesitamos confirmar su cita de manana con el especialista.",
"DETECTARCONTESTADOR": "2",
"REINTENTOS": "4",
"INTERVALO": "30",
"DESTINATARIOS": [
{ "Nombre": "Ana", "Telefono": "34600123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Ana" } ] }
]
}
A.6 Validar una operación con un PIN. El destinatario teclea el código que le ha dado su aplicación y usted lo recibe en su URL en el momento, además del report 503.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"REFERENCIAUSUARIO": "FIRMA-TRANSFER-7781",
"MENSAJE": "Le llamamos para confirmar una transferencia de (Importe).",
"IVR": "2",
"MENUIVR": {
"LOCUCION": "Marque su clave de seis digitos y termine con almohadilla",
"LONGPIN": 6,
"ACCIONPIN": 2,
"VALORACCIONPIN": "https://www.sudominio.com/pin/recibido",
"LOCUCIONFINALPIN": "Gracias, hemos recibido su clave"
},
"DESTINATARIOS": [
{ "Telefono": "34600123456", "Variables": [ { "Nombre": "Importe", "Valor": "1.250 euros" } ] }
]
}
A.7 Una pregunta con respuesta del 1 al 5. Cada tecla avisa a una URL distinta (o a la misma con otro parámetro) y la tecla queda además en el report 503, en el campo Digitos.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"REFERENCIAUSUARIO": "ENCUESTA-SEP",
"MENSAJE": "Hola (Nombre), gracias por confiar en nosotros.",
"IVR": "1",
"MENUIVR": {
"LOCUCION": "Valore del 1 al 5 la atencion recibida, donde 5 es muy satisfecho",
"1": { "ACCION": 2, "VALOR": "https://www.sudominio.com/encuesta?nota=1" },
"2": { "ACCION": 2, "VALOR": "https://www.sudominio.com/encuesta?nota=2" },
"3": { "ACCION": 2, "VALOR": "https://www.sudominio.com/encuesta?nota=3" },
"4": { "ACCION": 2, "VALOR": "https://www.sudominio.com/encuesta?nota=4" },
"5": { "ACCION": 2, "VALOR": "https://www.sudominio.com/encuesta?nota=5", "LOCUCIONFINAL": "Muchas gracias por su valoracion" }
},
"DESTINATARIOS": [
{ "Nombre": "Ana", "Telefono": "34600123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Ana" } ] }
]
}
A.8 Dejar que pidan no volver a ser llamados. La acción 5 apunta al destinatario en su lista negra: no se le vuelve a llamar en ningún envío suyo, y los que caigan ahí se cuentan en ListaNegra. Una salida así es una buena práctica en cualquier aviso automático.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"MENSAJE": "Le recordamos que su poliza vence el (Dia).",
"IVR": "1",
"MENUIVR": {
"LOCUCION": "Pulse 1 para que le llame un agente o 9 si no desea recibir mas avisos",
"1": { "ACCION": 4, "VALOR": "34910654321", "LOCUCIONPREVIA": "Le paso con un agente" },
"9": { "ACCION": 5, "LOCUCIONFINAL": "De acuerdo, no volveremos a llamarle" }
},
"DESTINATARIOS": [
{ "Telefono": "34600123456", "Variables": [ { "Nombre": "Dia", "Valor": "30 de septiembre" } ] }
]
}
A.9 Aviso que puede acabar hablando con una persona. La tecla 1 pasa la llamada a la extensión 101 de su centralita (suenan todos sus aparatos y se queda con el primero que descuelgue) y la tecla 2 al grupo de salto 4, el equipo de soporte. Lo que se hable con el comercial se graba.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"MENSAJE": "Hola (Nombre), su pedido (Pedido) sale hoy de nuestro almacen.",
"IVR": "1",
"MENUIVR": {
"LOCUCION": "Pulse 1 para hablar con su comercial, 2 para soporte tecnico, o 3 si no necesita nada mas",
"1": { "ACCION": 8, "VALOR": "ext:101", "LOCUCIONPREVIA": "Le paso con su comercial", "GRABAR": 1 },
"2": { "ACCION": 9, "VALOR": "grupo:4", "LOCUCIONPREVIA": "Le paso con soporte tecnico" },
"3": { "ACCION": 6, "LOCUCIONFINAL": "Gracias por su confianza" }
},
"MAXDURACION": "1800",
"DESTINATARIOS": [
{ "Nombre": "Ana", "Telefono": "34600123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Ana" }, { "Nombre": "Pedido", "Valor": "A-4421" } ] }
]
}
Si nadie coge la extensión se aplica el destino que tenga configurado para cuando no está disponible; la llamada nunca se queda en silencio. Cuando la coge una persona recibe un report con estado 512 y la extensión en Detalle. Los valores de las acciones 8 y 9 (ext:101, grupo:4) se los da GetPlantillasVOZ ya montados.
A.10 Grabar la llamada completa. GRABAR=1 graba desde el descuelgue, respuestas del destinatario incluidas. Avisar de que la llamada se graba es cosa suya: dígalo en el propio mensaje, como aquí.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"GRABAR": "1",
"MENSAJE": "Le llamamos de (Empresa) para confirmar su pedido. Esta llamada se graba.",
"IVR": "1",
"MENUIVR": {
"LOCUCION": "Pulse 1 si confirma el pedido o 2 para anularlo",
"1": { "ACCION": 2, "VALOR": "https://www.sudominio.com/pedido/confirmado" },
"2": { "ACCION": 2, "VALOR": "https://www.sudominio.com/pedido/anulado" }
},
"DESTINATARIOS": [
{ "Telefono": "34600123456", "Variables": [ { "Nombre": "Empresa", "Valor": "Muebles Aguado" } ] }
]
}
A.11 Conversación con el asistente de IA. Terminado el mensaje, el destinatario habla con normalidad y el asistente —entrenado con la información de su cuenta— le responde; si no sabe resolver, pasa la llamada al teléfono que indique en VALORFALLBACK.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"MENSAJE": "Hola (Nombre), le llamamos por la renovacion de su servicio.",
"IVR": "3",
"MENUIVR": {
"LOCUCION": "Digame, en que puedo ayudarle",
"VALORFALLBACK": "34910654321"
},
"MAXDURACION": "900",
"DESTINATARIOS": [
{ "Nombre": "Ana", "Telefono": "34600123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Ana" } ] }
]
}
A.12 Llamar a una empresa y marcar la extensión. Si al descolgar contesta una centralita que pide la extensión, EXTENSION la marca por tonos y el mensaje se reproduce después, ya en el puesto correcto. Con el timbre más largo, que en una oficina tardan en coger.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"EXTENSION": "204",
"TIMBRADO": "60",
"MENSAJE": "Aviso para el departamento de administracion: su factura (Factura) esta disponible.",
"DESTINATARIOS": [
{ "Telefono": "34911223344", "Variables": [ { "Nombre": "Factura", "Valor": "F-2026-118" } ] }
]
}
A.13 Recordatorio programado, con reintentos y horario. Se programa para una fecha, se reintenta cada hora hasta cuatro veces y sólo se llama entre las 9:00 y las 20:00: lo que caiga fuera espera al día siguiente. Un teléfono repetido en la lista se llama una sola vez.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"MENSAJE": "Hola (Nombre), le recordamos su cita del (Dia) a las (Hora).",
"FECHA": "2026-09-20 09:30",
"REINTENTOS": "4",
"INTERVALO": "60",
"FECHALIMITE": "2026-09-21 20:00",
"HORAINICIODIARIA": "09:00",
"HORALIMITEDIARIA": "20:00",
"ELIMINADUPLICADOS": "1",
"DESTINATARIOS": [
{ "Nombre": "Ana", "Telefono": "34600123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Ana" }, { "Nombre": "Dia", "Valor": "lunes 21" }, { "Nombre": "Hora", "Valor": "las diez" } ] }
]
}
A.14 Repartir una lista grande en el tiempo. Avisos cuyo menú puede pasar la llamada a un equipo de cinco personas: a 20 llamadas por minuto el equipo puede seguir el ritmo. Lo que a ese ritmo no quepa antes de las 20:00 no se encola (sale en NoEncoladas y contado en FueraDeHorario).
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"MENSAJE": "Hola (Nombre), su revision anual vence este mes.",
"VELOCIDAD": "20",
"HORALIMITEDIARIA": "20:00",
"IVR": "1",
"MENUIVR": {
"LOCUCION": "Pulse 1 si quiere que le atienda un agente ahora",
"1": { "ACCION": 9, "VALOR": "grupo:4", "LOCUCIONPREVIA": "Le paso con un agente" }
},
"DESTINATARIOS": [
{ "Nombre": "Ana", "Telefono": "34600123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Ana" } ] }
]
}
A.15 Reutilizar un menú y un audio que ya tiene en su cuenta. No hace falta mandar el menú en cada petición ni escribir el texto de la locución: se indica el menú guardado por su nombre y el audio propio con su marcador.
{
"RESP": "JSON",
"REMITENTE": "34910123456",
"REPORT": "1",
"MENSAJE": "(MP3:bienvenida.mp3) (PAUSA:1) Hola (Nombre), tiene una gestion pendiente.",
"PLANTILLAIVR": "Confirmacion de citas",
"DESTINATARIOS": [
{ "Nombre": "Ana", "Telefono": "34600123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Ana" } ] }
]
}
A.16 El mismo aviso en otro idioma. El idioma y el sexo de la voz van en LENGUAJE; el texto, en ese idioma. Un envío por idioma.
{
"RESP": "JSON",
"REMITENTE": "351210123456",
"LENGUAJE": "pt-PT:2",
"REPORT": "1",
"MENSAJE": "Ola (Nombre), a sua encomenda sai hoje do nosso armazem.",
"PAIS": "PT",
"TIMEZONE": "Europe/Lisbon",
"DESTINATARIOS": [
{ "Nombre": "Joao", "Telefono": "351910123456", "Variables": [ { "Nombre": "Nombre", "Valor": "Joao" } ] }
]
}
A.17 Pedir la configuración de su cuenta. A https://api.mensatek.com/v7/GetPlantillasVOZ, una vez al arrancar su integración: de aquí salen el REMITENTE que puede usar y los valores de las acciones 8 y 9.
{
"RESP": "JSON"
}
Respuesta (recortada):
{
"Res": 1,
"Numeros": [
{ "Numero": "34910123456", "Alias": "Atencion al cliente", "Pais": "ES", "Tipo": "local" }
],
"PlantillasIVR": [
{ "idPlantilla": 12, "Nombre": "Confirmacion de citas", "Tipo": "MENU", "IVR": 1, "Teclas": [ "1", "2" ] }
],
"Audios": [
{ "Fichero": "bienvenida.mp3", "Marcador": "(MP3:bienvenida.mp3)" }
],
"Extensiones": [
{ "idExtension": 7, "Extension": "101", "Nombre": "Javier", "Valor": "ext:101", "Presencia": "disponible" }
],
"Grupos": [
{ "idGrupo": 4, "Nombre": "Soporte tecnico", "Numero": "600", "Valor": "grupo:4", "Estrategia": "todos" }
]
}
A.18 Cancelar lo que todavía no ha salido. A https://api.mensatek.com/v7/CancelarVOZ, con el idEnvio de la campaña (o el idMensaje de una llamada suelta). Lo que ya salió no se cancela y se devuelve con su estado.
{
"RESP": "JSON",
"IDENVIO": "1228853777"
}
Respuesta:
{
"Res": 1,
"Canceladas": [
{ "idMensaje": 108366479, "Movil": "34600123457" }
],
"NoCanceladas": [
{ "idMensaje": 108366478, "Movil": "34600123456", "Resultado": 510, "Estado": "Finalizada" }
],
"CreditosDevueltos": 1,
"Cred": 1249.5
}
A.19 Llamar desde el CRM (click-to-call). A https://api.mensatek.com/v7/LlamarVOZ: suena la extensión del agente y, en cuanto descuelga, se marca al cliente y se puentean las dos. Si el agente no coge, no se llama a nadie.
{
"RESP": "JSON",
"EXTENSION": "101",
"DESTINO": "34600123456"
}
Respuesta:
{
"Res": 1,
"Extension": "101",
"Destino": "34600123456",
"idLlamada": "9f2c41a7b8d05e6a",
"Info": "Te estamos llamando a la extension 101. Al descolgar, marcamos el numero.",
"Cred": 1249.5
}
A.20 Qué hacer con los errores. Un Res negativo trae siempre el motivo en Error. Merece la pena distinguir tres casos en su integración: -2 (sin créditos) es para avisar a quien lleve la cuenta, -19 (el remitente no es suyo) y -3 (datos mal) son fallos de programación que no se arreglan repitiendo la petición, y un 5XX sí se puede reintentar más tarde.