Sending OTP Codes Securely - Explore Delivery Methods and Best Practices
Esta API genera el código de verificación a través de la plataforma EngageLab y lo entrega según la estrategia de canal especificada en la plantilla.
Si se prefiere generar el código de verificación internamente en lugar de usar la plataforma EngageLab, se puede llamar a la API de envío de OTP personalizado (Custom OTP Send) de EngageLab.
Endpoint
POST https://otp.api.engagelab.cc/v1/messages
Autenticación
Se utiliza HTTP Basic Authentication para la verificación. Añadir Authorization en el encabezado HTTP:
Authorization: Basic ${base64_auth_string}
El algoritmo de generación del valor anterior base64_auth_string es: base64(dev_key:dev_secret)
Ejemplo de solicitud
Encabezado de solicitud
POST /v1/messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Cuerpo de la solicitud
{
"to": "+8618701235678",
"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 | Obligatoriedad | Descripción |
|---|---|---|---|
| to | String | Obligatorio | Destino; puede ser un número de teléfono o una dirección de correo electrónico, p. ej., +8613800138000, support@engagelab.com |
| template | JSON Object | Obligatorio | Información de la plantilla, incluidos los subparámetros siguientes |
| |_ id | String | Obligatorio | ID de la plantilla |
| |_ language | String | Opcional | Idioma de la plantilla. Se admiten las siguientes opciones: 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 especifica, el valor predeterminado será "default". |
| |_ params | JSON Object | Opcional | Valores de variables de plantilla personalizadas. Si se han personalizado variables al crear la plantilla, se deben pasar aquí sus valores. Si no se proporcionan, las claves de las variables se enviarán tal cual, p. ej., {{var}} |
Notas sobre params
- Para plantillas con campos preestablecidos como from_id, si no se pasa el valor del campo param_vars, durante el envío el mensaje utilizará el from_id preestablecido de la plantilla.
- Si se pasan valores del campo param_vars, como
param_vars:{"from_id":"12345"}, entonces, durante el envío, el from_id de la plantilla se reemplazará por 12345. - Del mismo modo, para campos de variables personalizadas en el contenido de la plantilla creada, se deben asignar valores mediante param_vars; p. ej., para el contenido de plantilla
Hi {{name}}, your verify code is {{code}}, se deben asignar parámetros conparam_vars:{"name":"Bob"}.
Parámetros de la respuesta
Respuesta correcta
| Campo | Tipo | Obligatoriedad | Descripción |
|---|---|---|---|
| message_id | String | Obligatorio | ID del mensaje, que identifica un mensaje de forma única |
| send_channel | String | Obligatorio | Indica el canal de entrega actual; las opciones incluyen whatsapp/sms/email/voice |
{
"message_id": "1725407449772531712",
"send_channel": "sms"
}
Se debe tener en cuenta que el valor send_channel devuelto no representa el canal de entrega final al usuario, sino únicamente el canal de la fase actual. Por ejemplo, si la estrategia de la plantilla está configurada para cambiar de WhatsApp a SMS cuando la entrega falla, la API devolverá inicialmente whatsapp y, posteriormente, si se detecta un fallo de entrega, el sistema utilizará el canal SMS para el envío.
Respuesta de error
Código de estado HTTP 4xx o 5xx; el cuerpo de la respuesta incluye los siguientes campos:
| Campo | Tipo | Obligatoriedad | Descripción |
|---|---|---|---|
| code | int | Obligatorio | Código de error; consultar Códigos de error para obtener más detalles |
| message | String | Obligatorio | Detalles del error |
{
"code": 5001,
"message": "sms send fail"
}
Códigos de error
| Código de error | Código HTTP | Descripción |
|---|---|---|
| 1000 | 500 | Error interno |
| 2001 | 401 | Fallo de autenticación; token incorrecto o ausente |
| 2002 | 401 | Fallo de autenticación; el token ha caducado o se ha deshabilitado |
| 2004 | 403 | Sin permisos para llamar a esta API |
| 3001 | 400 | Formato de parámetro de solicitud no válido; verificar si se ajusta al formato de parámetros JSON |
| 3002 | 400 | Parámetros de solicitud incorrectos; verificar conforme a los requisitos |
| 3003 | 400 | Parámetros de solicitud incorrectos; fallo en la validación de negocio; consultar el campo message para ver la descripción del error |
| 3004 | 400 | Se ha superado el límite de frecuencia; no se puede reenviar a la misma plantilla y al mismo usuario objetivo dentro del periodo de validez del OTP |
| 4001 | 400 | El recurso relacionado no existe; p. ej., se utiliza una plantilla inexistente para el envío del mensaje |
| 5001 | 400 | Échec d'envoi (général/autre) |
| 5011 | 400 | Format de numéro de téléphone invalide |
| 5012 | 400 | Destination injoignable |
| 5013 | 400 | Numéro ajouté à la liste noire |
| 5014 | 400 | Contenu non conforme aux réglementations |
| 5015 | 400 | Message intercepté/rejeté |
| 5016 | 400 | Erreur interne d'envoi |
| 5017 | 400 | Absence d'autorisation pour envoyer dans la région de Chine |
| 5018 | 400 | Panne du téléphone (éteint/suspendu) |
| 5019 | 400 | Utilisateur désabonné |
| 5020 | 400 | Numéro non enregistré/numéro invalide |

