Custom Messages Delivery
Si vous avez créé un contenu de modèle personnalisé sur la plateforme OTP, utilisez cette API pour envoyer un contenu de message personnalisé.
Point de terminaison de l'API
POST https://otp.api.engagelab.cc/v1/custom-messages
Authentification
L'authentification HTTP Basic est utilisée pour la vérification. Ajoutez l'en-tête Authorization dans la requête HTTP :
Authorization: Basic ${base64_auth_string}
Le base64_auth_string est généré selon l'algorithme suivant : base64(dev_key:dev_secret)
Format de la requête
En-têtes de la requête
POST /v1/custom-messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Corps de la requête
{
"to": "+8618701235678",
"template":{
"id":"test-template-1",
"params": {
"code": "codevalue",
"var1":"value1"
}
}
}
Paramètres de la requête
Un objet de requête est exprimé au format JSON, donc l'en-tête de la requête doit inclure Content-Type: application/json.
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| to | String | Oui | Destinataire cible, qui peut être un numéro de téléphone (ex : +8613800138000) ou une adresse e-mail (ex : support@engagelab.com). |
| template | Objet JSON | Oui | Informations du modèle. Les sous-paramètres sont décrits ci-dessous. |
| |_ id | String | Oui | ID du modèle. |
| |_ params | Objet JSON | Optionnel | Paramètres du modèle. |
| _ |_ code | String | Optionnel | Obligatoire si le type de modèle est un code de vérification. |
| _ |_ var | String | Optionnel | Valeurs des variables personnalisées du modèle. Si des variables ont été définies lors de la création du modèle, transmettez leurs valeurs ici. Si non fourni, la clé de la variable sera envoyée telle quelle (ex : {{var1}}). |
Notes sur params :
Pour les variables prédéfinies du modèle telles que {{brand_name}}, {{ttl}} et {{pwa_url}}, aucune valeur n'a besoin d'être transmise — le système les remplacera automatiquement par le contenu spécifié lors de la création du modèle.
Si le type de modèle est un code de vérification, la variable {{code}} doit être transmise ; sinon, une erreur se produira.
Pour les variables personnalisées définies dans le contenu du modèle, attribuez des valeurs via params. Par exemple, si le contenu du modèle est Bonjour {{name}}, votre code de vérification est {{code}}, le paramètre params:{"name":"Bob"} doit être transmis.
Exemples de requêtes
1. Envoi d'un code de vérification personnalisé :
{
"to": "+8618701235678",
"template":{
"id":"code-template",
"params": {
"code": "123456"
}
}
}
2. Envoi d'une notification personnalisée :
{
"to": ["+8618701235678"],
"template": {
"id": "notification-template",
"params": {
"order": "123456"
}
}
}
3. Envoi d'un contenu marketing personnalisé :
{
"to": ["+8618701235678"],
"template": {
"id": "marketing-template",
"params": {
"name": "EngageLab",
"promotion": "30%"
}
}
}
Paramètres de réponse
Réponse réussie
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| message_id | String | Oui | L'ID du message, identifiant de façon unique un message. |
| send_channel | String | Oui | Le canal utilisé pour la diffusion. Valeurs 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 livraison à l'utilisateur, seulement le canal utilisé à l'étape actuelle. Par exemple, si la stratégie du modèle est configurée pour basculer vers le SMS après un échec de livraison WhatsApp, l'API retournera initialement whatsapp. En cas d'échec, le système basculera automatiquement vers le SMS.
Réponse en cas d'échec
Le code d'état HTTP est 4xx ou 5xx, le corps de la réponse contient les champs suivants :
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| code | int | Code d'erreur. Voir Codes d'erreur pour plus de détails. | |
| message | String | Oui | Détails de l'erreur. |
{
"code": 5001,
"message": "sms send fail"
}
| Code d'erreur | Code HTTP | Description |
|---|---|---|
| 1000 | 500 | Erreur interne. |
| 2001 | 401 | Échec de l'authentification : token invalide 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. Assurez-vous que le contenu JSON est conforme au format requis. |
| 3002 | 400 | Paramètres de requête invalides. Vérifiez si les paramètres répondent aux exigences. |
| 3003 | 400 | Validation métier échouée. Consultez le champ message pour plus de détails. |
| 3004 | 400 | Limite de fréquence dépassée. Pour le même modèle et le même utilisateur cible, les codes de vérification ne peuvent pas être renvoyés pendant la période de validité. |
| 4001 | 400 | Ressource non trouvée (par exemple, un modèle inexistant a été utilisé 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 |

