Custom OTP Code Delivery - Secure Transmission and Best Practices
Si vous préférez générer vous-même le code de vérification au lieu d'utiliser la plateforme EngageLab, vous pouvez appeler cette API.
Cette API est spécifiquement conçue pour l'envoi de codes de vérification pré-générés et ne générera pas elle-même les codes. Après l'envoi du code de vérification, il n'est pas nécessaire d'appeler l'API de vérification pour la validation.
Si vous souhaitez que la plateforme EngageLab génère le code de vérification, vous pouvez appeler l'API d'envoi OTP d'EngageLab.
Endpoint
POST https://otp.api.engagelab.cc/v1/codes
Authentification
Utilisez l'authentification HTTP Basic pour la vérification. Ajoutez une autorisation 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/codes HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Corps de la requête
{
"to": "+8618701235678",
"code": "398210",
"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 |
| code | String | Obligatoire | Le code de vérification personnalisé |
| template | Objet JSON | Obligatoire | Informations sur le modèle, incluant les sous-paramètres ci-dessous |
| |_ id | String | Obligatoire | ID du modèle |
| |_ language | String | Optionnel | Langue du modèle, langues prises en charge : default (Langue par défaut) zh_CN (Chinois simplifié) zh_HK (Chinois traditionnel) en (Anglais) ja (Japonais) th (Thaï) es (Espagnol) Si non spécifié, la valeur par défaut sera "default". Par défaut à 'default' si non fourni |
| |_ params | Objet JSON | Optionnel | Valeurs des variables personnalisées 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 créés dans le contenu du modèle, attribuez des valeurs via param_vars, ex. pour un contenu de modèle
Hi {{name}}, votre code de vérification est {{code}}, attribuez les paramètres avecparam_vars:{"name":"Bob"}
Paramètres de la réponse
Réponse en cas de succès
| Champ | Type | Option | Description |
|---|---|---|---|
| message_id | String | Obligatoire | ID du message, identifie de façon unique un message |
| send_channel | String | Obligatoire | Indique le canal d'envoi 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 final de diffusion à 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 initialement 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 de statut 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 | Échec de l'authentification, token incorrect ou manquant |
| 2002 | 401 | Échec de l'authentification, 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, voir le 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 du message |
| 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 |

