Entrega de mensajes personalizados
Si has creado contenido de plantilla personalizado en la plataforma OTP, llama a esta API para enviar mensajes personalizados.
Endpoint
POST https://otp.api.engagelab.cc/v1/custom-messages
Autenticación
Usa la autenticación básica HTTP y añade Authorization a la cabecera HTTP:
Authorization: Basic ${base64_auth_string}
El algoritmo de generación de base64_auth_string es: base64(dev_key:dev_secret).
Formato de la solicitud
Cabeceras de la solicitud
POST /v1/custom-messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Cuerpo de la solicitud
{
"to": "+6591234567",
"template": {
"id": "test-template-1",
"params": {
"code": "codevalue",
"var1": "value1"
}
}
}
Parámetros de la solicitud
Un objeto de solicitud se expresa en formato JSON, por lo que la cabecera de la solicitud debe incluir Content-Type: application/json.
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | String | Required | Destino de entrega: un número de teléfono móvil o una dirección de correo electrónico, como +6598765432 o support@engagelab.com |
| template | JSON Object | Required | Información de la plantilla. Consulta los parámetros anidados a continuación |
| |_ id | String | Required | ID de la plantilla |
| |_ params | JSON Object | Optional | Parámetros de la plantilla |
| _ |_ code | String | Optional | Obligatorio cuando el tipo de plantilla es un código de verificación |
| _ |_ var | String | Optional | Valor de la clave de variable de la plantilla personalizada. Si definiste variables personalizadas al crear la plantilla, asígnales aquí sus valores. Si no se proporciona, la clave de la variable se entregará directamente, como {{var1}} |
Notas sobre params
- Para variables de plantilla predefinidas como
{{brand_name}},{{ttl}}y{{pwa_url}}, no es necesario enviarlas. El sistema las sustituye automáticamente por el contenido especificado al crear la plantilla. - Si el tipo de plantilla es un código de verificación, debes enviar la variable
{{code}}; de lo contrario, se devolverá un error. - Si el contenido de la plantilla contiene campos de variables personalizadas definidos al crearla, asígnales también valores mediante
params. Por ejemplo, para el contenido de plantillaHi {{name}}, your verify code is {{code}}, debes asignar el parámetroparams: {"name":"Bob"}.
Ejemplos de solicitud
1. Enviar un código de verificación personalizado
{
"to": "+6591234567",
"template": {
"id": "code-template",
"params": {
"code": "123456"
}
}
}
2. Enviar contenido de notificación personalizado
{
"to": "+6591234567",
"template": {
"id": "notification-template",
"params": {
"order": "123456"
}
}
}
3. Enviar contenido de marketing personalizado
{
"to": ["+6591234567"],
"template": {
"id": "marketing-template",
"params": {
"name": "EngageLab",
"promotion": "30%"
}
}
}
Parámetros de respuesta
Respuesta correcta
| Field | Type | Required | Description |
|---|---|---|---|
| message_id | String | Required | ID del mensaje que identifica de forma única un mensaje |
| send_channel | String | Required | Indica el canal que se está utilizando actualmente para la entrega. Valores posibles: whatsapp, sms, email, voice |
{
"message_id": "1725407449772531712",
"send_channel": "sms"
}
Ten en cuenta que el valor de send_channel devuelto no representa el canal final utilizado para entregar el mensaje al usuario. Solo indica el canal que se está utilizando en ese momento. Por ejemplo, si la estrategia configurada en la plantilla especifica que, cuando falle la entrega por WhatsApp, debe reintentarse automáticamente a través del canal SMS, la respuesta de la API devolverá whatsapp. Después, cuando se detecte el fallo de entrega tras un cierto periodo de tiempo, el sistema enviará el mensaje a través del canal SMS.
Respuesta fallida
El código de estado HTTP es 4xx o 5xx, y el cuerpo de la respuesta contiene los siguientes campos:
| Field | Type | Required | Description |
|---|---|---|---|
| code | int | Required | Código de error. Para obtener más información, consulta Códigos de error |
| message | String | Required | Detalles del error |
{
"code": 5001,
"message": "sms send fail"
}
Códigos de error
| Error Code | HTTP Code | Description |
|---|---|---|
| 1000 | 500 | Error interno |
| 2001 | 401 | Falló la autenticación. No se proporcionó un token válido |
| 2002 | 401 | Falló la autenticación. El token ha caducado o ha sido deshabilitado |
| 2004 | 403 | No tienes permiso para llamar a esta API |
| 3001 | 400 | Formato de parámetro de solicitud no válido. Comprueba si el contenido JSON coincide con el formato de parámetros requerido |
| 3002 | 400 | Parámetros de solicitud no válidos. Comprueba si los parámetros de la solicitud cumplen los requisitos |
| 3003 | 400 | Parámetros de solicitud no válidos. Ha fallado la validación de negocio relacionada. Consulta la descripción del error en el campo message para más detalles |
| 3004 | 400 | Límite de frecuencia superado. Para la misma plantilla y el mismo usuario de destino, no se puede volver a activar la entrega dentro del periodo de validez del código de verificación |
| 4001 | 400 | El recurso relacionado no existe. Por ejemplo, se ha usado una plantilla inexistente al enviar un mensaje de plantilla |
| 5001 | 400 | Error de envío (general/otro) |
| 5011 | 400 | Formato de número de teléfono móvil no válido |
| 5012 | 400 | Destino inalcanzable |
| 5013 | 400 | El número se ha añadido a la lista negra |
| 5014 | 400 | El contenido no cumple las especificaciones |
| 5015 | 400 | Mensaje interceptado/rechazado |
| 5016 | 400 | Error interno de envío |
| 5017 | 400 | No tienes permiso para enviar a China continental |
| 5018 | 400 | Problema del dispositivo móvil (apagado/servicio suspendido) |
| 5019 | 400 | El usuario se ha dado de baja |
| 5020 | 400 | El número no está registrado / número no válido |










