Sending OTP Codes Securely - Explore Delivery Methods and Best Practices
Cette API génère le code de vérification via la plateforme EngageLab et le délivre selon la stratégie de canal spécifiée dans le modèle.
Si vous préférez générer le code de vérification vous-même au lieu d'utiliser la plateforme EngageLab, vous pouvez appeler l'API d'envoi OTP personnalisé d'EngageLab.
Endpoint
POST https://otp.api.engagelab.cc/v1/messages
Authentification
Utilise l'authentification HTTP Basic pour la vérification. Ajoutez Authorization dans l'en-tête HTTP :
Authorization: Basic ${base64_auth_string}
L'algorithme de génération du base64_auth_string ci-dessus est : base64(dev_key:dev_secret)
Exemple de requête
En-tête de la requête
POST /v1/messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Corps de la requête
{
"to": "+8618701235678",
"template":{
"id":"test-template-1",
"language": "default",
"params": {
"key1": "value1",
"key2": "value2"
}
}
}
Paramètres de la requête
Un objet de requête est exprimé au format JSON, l'en-tête de la requête doit donc inclure Content-Type: application/json.
| Paramètre | Type | Option | Description |
|---|---|---|---|
| to | String | Obligatoire | La cible, soit un numéro de téléphone, soit une adresse e-mail, ex. : +8613800138000, support@engagelab.com |
| template | Objet JSON | Obligatoire | Informations du modèle, incluant les sous-paramètres ci-dessous |
| |_ id | String | Obligatoire | ID du modèle |
| |_ language | String | Optionnel | Langue du modèle, prenant en charge les options suivantes : default (Langue par défaut) zh_CN (Chinois simplifié) zh_HK (Chinois traditionnel) en (Anglais) ja (Japonais) th (Thaï) es (Espagnol) Par défaut à 'default' si non fourni |
| |_ params | Objet JSON | Optionnel | Valeurs personnalisées des variables du modèle. Si vous avez personnalisé des variables lors de la création du modèle, transmettez leurs valeurs ici. Si non fourni, les clés de variables seront envoyées telles quelles, ex. : {{var}} |
Remarques sur params
- Pour les modèles avec des champs prédéfinis comme from_id, si la valeur du champ param_vars n'est pas transmise, le message utilisera le from_id prédéfini du modèle lors de l'envoi ;
- Si les valeurs du champ param_vars sont transmises, comme
param_vars:{"from_id":"12345"}, alors lors de l'envoi, le from_id du modèle sera remplacé par 12345 ; - De même, pour les champs de variables personnalisées dans le contenu du modèle créé, attribuez des valeurs via param_vars, ex. : pour un contenu de modèle
Hi {{name}}, your verify code is {{code}}, attribuez les paramètres avecparam_vars:{"name":"Bob"}
Paramètres de réponse
Réponse en cas de succès
| Champ | Type | Option | Description |
|---|---|---|---|
| message_id | String | Obligatoire | ID du message, identifiant unique d'un message |
| send_channel | String | Obligatoire | Indique le canal de diffusion actuel, options possibles : whatsapp/sms/email/voice |
{
"message_id": "1725407449772531712",
"send_channel": "sms"
}
Remarque : la valeur send_channel retournée ne représente pas le canal de livraison final à l'utilisateur, mais uniquement le canal de la phase en cours. Par exemple, si la stratégie du modèle est configurée pour basculer de WhatsApp à SMS en cas d'échec de livraison, l'API retournera d'abord whatsapp, puis, si un échec de livraison est détecté, le système utilisera le canal SMS pour l'envoi.
Réponse en cas d'échec
Code d'état HTTP 4xx ou 5xx, le corps de la réponse inclut les champs suivants :
| Champ | Type | Option | Description |
|---|---|---|---|
| code | int | Obligatoire | Code d'erreur, voir Codes d'erreur pour plus de détails |
| message | String | Obligatoire | Détails de l'erreur |
{
"code": 5001,
"message": "sms send fail"
}
Codes d'erreur
| Code d'erreur | Code HTTP | Description |
|---|---|---|
| 1000 | 500 | Erreur interne |
| 2001 | 401 | Authentification échouée, token incorrect ou manquant |
| 2002 | 401 | Authentification échouée, token expiré ou désactivé |
| 2004 | 403 | Pas d'autorisation pour appeler cette API |
| 3001 | 400 | Format de paramètre de requête invalide, veuillez vérifier la conformité au format JSON |
| 3002 | 400 | Paramètres de requête incorrects, veuillez vérifier les exigences |
| 3003 | 400 | Paramètres de requête incorrects, validation métier échouée, reportez-vous au champ message pour la description de l'erreur |
| 3004 | 400 | Limite de fréquence dépassée, impossible de renvoyer au même modèle et utilisateur cible pendant la période de validité de l'OTP |
| 4001 | 400 | Ressource associée inexistante, ex. : utilisation d'un modèle inexistant pour l'envoi de messages |
| 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 |

