Envío de OTP
Esta interfaz hace que la plataforma EngageLab genere el código de verificación y lo envíe según la estrategia de canales especificada en la plantilla.
Si desea generar el código de verificación por su cuenta en lugar de hacerlo a través de la plataforma EngageLab, puede llamar a la interfaz Envío de OTP personalizado de EngageLab.
Dirección de la llamada
POST https://otp.api.engagelab.cc/v1/messages
Autenticación de llamadas
Consulte Autenticación de llamadas para saber cómo autenticar la API.
Ejemplo de solicitud
Encabezados de la solicitud
POST /v1/messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Cuerpo de la solicitud
{
"to": "+6591234567",
"template":{
"id":"test-template-1",
"language": "default",
"params": {
"key1": "value1",
"key2": "value2"
}
}
}
Parámetros de la solicitud
Un objeto de solicitud se expresa en formato JSON, por lo que el encabezado de la solicitud debe incluir Content-Type: application/json.
| Parámetro | Tipo | Opción | Descripción |
|---|---|---|---|
| to | String | Obligatorio | Destino del envío, número de teléfono o dirección de correo, +6598765432, support@engagelab.com |
| end_user_ip | String | Opcional | Dirección IP del usuario final. Se utiliza cuando se necesita limitar el máximo de solicitudes de la misma dirección IP en diferentes ventanas de tiempo, p. ej.: 10.3.5.7 |
| channel | String | Opcional | Especifica el canal de envío inicial. Valores: sms/voice/zalo/viber. Si se omite, el enrutamiento sigue send_channel_strategy de la plantilla. |
| template | JSON Object | Obligatorio | Información de la plantilla; los parámetros de segundo nivel que contiene se indican a continuación |
| |_ id | String | Obligatorio | ID de la plantilla |
| |_ language | String | Opcional | Idioma de la plantilla; se admiten los siguientes idiomas: default idioma predeterminado zh_CN chino simplificado zh_HK chino tradicional en inglés ja japonés th tailandés es español si no se pasa, el valor predeterminado es default (idioma predeterminado) |
| |_ params | JSON Object | Opcional | Valor de la Key de variable personalizada de la plantilla |
| Si definió variables personalizadas al crear la plantilla, asígneles aquí su valor; si no se pasa, se enviará directamente con la Key de la variable, como {{var}} |
Acerca de params
- Para los campos preestablecidos de la plantilla, como from_id, si no se pasa el valor del campo params, al enviar el mensaje se usa el from_id preestablecido de la plantilla;
- Si se pasa el valor del campo params, como
params:{"from_id":"12345"}, al enviar el mensaje el from_id de la plantilla se sustituirá por 12345; - Asimismo, para los campos de variables personalizadas del contenido de la plantilla definidos al crearla, también se asignan sus valores mediante params; por ejemplo, si el contenido de la plantilla es
Hi {{name}}, your verify code is {{code}}, deberá asignar el parámetroparams:{"name":"Bob"} - Variables especiales del canal Email: para el canal Email, se admite sobrescribir dinámicamente mediante
paramsel asunto del correo (subject), el nombre del remitente (from_name), el correo del remitente (from_mail), etc. Para el uso avanzado detallado, consulte Crear plantilla - Uso avanzado de las variables de plantilla de Email.
Parámetros de la respuesta
Respuesta exitosa
| Campo | Tipo | Opción | Descripción |
|---|---|---|---|
| message_id | String | Obligatorio | ID del mensaje, identifica de forma única un mensaje |
| send_channel | String | Obligatorio | Indica el canal de envío actual; los valores posibles son whatsapp/sms/email/voice/zalo/viber |
{
"message_id": "1725407449772531712",
"send_channel": "sms"
}
Tenga en cuenta que el valor de**send_channel**devuelto no representa el canal final por el que se entrega al usuario, sino únicamente el canal usado en la etapa actual; por ejemplo, si en la estrategia configurada en la plantilla se establece que, ante un fallo de entrega por el canal WhatsApp, se reenvíe automáticamente por el canal SMS, la interfaz devolverá el valor whatsapp y, tras detectar el fallo de entrega pasado un tiempo, el sistema enviará por el canal SMS.
Respuesta de error
El código de estado HTTP es 4xx o 5xx, y el cuerpo de la respuesta contiene los siguientes campos:
| Campo | Tipo | Opción | Descripción |
|---|---|---|---|
| code | int | Obligatorio | Código de error; véase la descripción de los códigos de error |
| message | String | Obligatorio | Detalles del error |
{
"code": 5001,
"message": "sms send fail"
}
Códigos de error
La siguiente tabla solo describe los errores que esta API devuelve durante la autenticación, la validación previa al envío y el envío sincrónico. Los fallos de entrega asincrónicos tras la aceptación del proveedor no se devuelven por esta API; obténgalos mediante consultas de estado del mensaje o callbacks.
El llamador debe usar code para determinar el tipo de error. Use message para mostrar el motivo concreto o para el diagnóstico; no confíe en un texto fijo de message para la lógica de negocio.
| Código de error | http code | Descripción |
|---|---|---|
| 1000 | 500 | Error interno |
| 2001 | 401 | Error de autenticación; no se incluyó un token correcto |
| 2002 | 401 | Error de autenticación; el token ha expirado o ha sido deshabilitado |
| 2003 | 403 | Esta IP no tiene permiso para enviar mensajes. |
| 2004 | 403 | Sin permiso para llamar a esta API |
| 3001 | 400 | Formato de los parámetros de la solicitud no válido; compruebe que el contenido JSON cumple el formato de los parámetros |
| 3002 | 400 | Parámetros de la solicitud incorrectos; compruebe que los parámetros de la solicitud cumplen los requisitos |
| 3003 | 400 | Parámetros de la solicitud incorrectos; falló la validación de negocio correspondiente; consulte la descripción del error en el campo message |
| 3004 | 400 | Se superó el límite de frecuencia; para la misma plantilla y el mismo usuario de destino, no se puede volver a enviar dentro del periodo de validez del código de verificación |
| 3005 | 400 | Saldo disponible de la cuenta insuficiente |
| 3013 | 400 | La plantilla no está aprobada o no está disponible actualmente |
| 4001 | 400 | El recurso correspondiente no existe; por ejemplo, se usó una plantilla inexistente al enviar el mensaje de plantilla |
| 5001 | 400 | Error de envío (genérico/otros) |
| 5011 | 400 | Formato del número de teléfono no válido |
| 5012 | 400 | Destino inalcanzable |
| 5013 | 400 | El número está en la lista negra |
| 5014 | 400 | El contenido no cumple las normas |
| 5015 | 400 | Mensaje interceptado/rechazado |
| 5016 | 400 | Error interno de envío |
| 5017 | 400 | Sin permiso de envío a la región de China |
| 5018 | 400 | Teléfono averiado (apagado/suspendido) |
| 5019 | 400 | El usuario ha cancelado la suscripción |
| 5020 | 400 | Número no registrado/inexistente |
| 6001 | 429 | Se superó la frecuencia de envío para el mismo número de teléfono; la ventana de límite puede ser por minuto, hora o día natural |
| 6002 | 429 | Se superó la frecuencia de envío para la misma IP del usuario final; la ventana de límite puede ser por minuto u hora; solo se comprueba cuando la solicitud incluye end_user_ip |
| 6003 | 429 | El volumen de envío diario o mensual global de la aplicación alcanzó el límite |
| 6006 | 403 | No se permite el envío en el país o región actual |
| 6007 | 403 | El servicio de envío de códigos de verificación por SMS está suspendido; puede aplicarse a todos los países/regiones o al país/región actual |
| 6008 | 429 | El volumen de envío diario o mensual del país o región actual alcanzó el límite |
Notas sobre errores de límite de frecuencia y volumen de envío
3004es el control de frecuencia de envío de OTP por plantilla; la ventana de límite se basa en la configuración de la plantilla y puede no coincidir con el periodo de validez del código.6001y6002son controles de frecuencia de seguridad a nivel de número o IP del usuario final.6003y6008indican que esta solicitud alcanzó un límite de volumen de envío; tras alcanzar el límite y entrar en estado suspendido, las solicitudes posteriores pueden devolver6007.- Al recibir HTTP 429, no reintente de inmediato de forma continua; reintente más tarde y, si persiste, contacte al administrador o al soporte técnico.
5011a5019solo cubren fallos identificables en la fase de envío sincrónico. Estados como número vacío, teléfono apagado o rechazo del operador tras la aceptación del proveedor aún pueden devolverse mediante el estado asincrónico del mensaje o callbacks.










