Envoi de messages personnalisés
Si vous avez créé un modèle de contenu personnalisé sur la plateforme OTP, appelez cette API pour envoyer un message personnalisé.
Endpoint
POST https://otp.api.engagelab.cc/v1/custom-messages
Authentification
Utilisez l'authentification HTTP Basic et ajoutez Authorization à l'en-tête HTTP :
Authorization: Basic ${base64_auth_string}
L'algorithme de génération de base64_auth_string est le suivant : base64(dev_key:dev_secret)
Format de la requête
En-têtes de requête
POST /v1/custom-messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Corps de la requête
{
"to": "+6591234567",
"template": {
"id": "test-template-1",
"params": {
"code": "codevalue",
"var1": "value1"
}
}
}
Paramètres de requête
L'objet de requête est exprimé au format JSON ; l'en-tête de requête doit donc inclure Content-Type: application/json.
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | String | Required | Cible de distribution : un numéro de téléphone mobile ou une adresse e-mail, par exemple +6598765432 ou support@engagelab.com |
| template | JSON Object | Required | Informations sur le modèle. Voir les paramètres imbriqués ci-dessous |
| |_ id | String | Required | ID du modèle |
| |_ params | JSON Object | Optional | Paramètres du modèle |
| _ |_ code | String | Optional | Obligatoire lorsque le type de modèle est un code de vérification |
| _ |_ var | String | Optional | Valeur de la clé de variable du modèle personnalisé. Si vous avez défini des variables personnalisées lors de la création du modèle, attribuez-leur des valeurs ici. Si aucune valeur n'est fournie, la clé de variable sera transmise directement, par exemple {{var1}} |
Remarques sur params
- Pour les variables de modèle prédéfinies telles que
{{brand_name}},{{ttl}}et{{pwa_url}}, vous n'avez pas besoin de les transmettre. Le système les remplace 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, vous devez transmettre la variable
{{code}}; sinon, une erreur sera renvoyée. - Si le contenu du modèle contient des champs de variables personnalisées définis lors de la création du modèle, attribuez-leur également des valeurs via
params. Par exemple, pour le contenu de modèleHi {{name}}, your verify code is {{code}}, vous devez attribuer le paramètreparams: {"name":"Bob"}.
Exemples de requête
1. Envoyer un code de vérification personnalisé
{
"to": "+6591234567",
"template": {
"id": "code-template",
"params": {
"code": "123456"
}
}
}
2. Envoyer un contenu de notification personnalisé
{
"to": "+6591234567",
"template": {
"id": "notification-template",
"params": {
"order": "123456"
}
}
}
3. Envoyer un contenu marketing personnalisé
{
"to": ["+6591234567"],
"template": {
"id": "marketing-template",
"params": {
"name": "EngageLab",
"promotion": "30%"
}
}
}
Paramètres de réponse
Réponse réussie
| Field | Type | Required | Description |
|---|---|---|---|
| message_id | String | Required | ID du message, qui identifie de manière unique un message |
| send_channel | String | Required | Indique le canal actuellement utilisé pour la distribution. Valeurs possibles : whatsapp, sms, email, voice |
{
"message_id": "1725407449772531712",
"send_channel": "sms"
}
Veuillez noter que la valeur send_channel renvoyée ne représente pas le canal final utilisé pour distribuer le message à l'utilisateur. Elle indique uniquement le canal actuellement utilisé. Par exemple, si la stratégie configurée dans le modèle spécifie qu'en cas d'échec de la distribution via WhatsApp, une nouvelle tentative doit automatiquement être effectuée via le canal SMS, la réponse de l'API renverra whatsapp. Après détection de l'échec de distribution après un certain délai, le système enverra alors le message via le canal SMS.
Réponse en échec
Le code de statut HTTP est 4xx ou 5xx, et le corps de la réponse contient les champs suivants :
| Field | Type | Required | Description |
|---|---|---|---|
| code | int | Required | Code d'erreur. Pour plus de détails, voir Codes d'erreur |
| message | String | Required | Détails de l'erreur |
{
"code": 5001,
"message": "sms send fail"
}
Codes d'erreur
| Error Code | HTTP Code | Description |
|---|---|---|
| 1000 | 500 | Erreur interne |
| 2001 | 401 | Échec de l'authentification. Aucun jeton valide n'a été fourni |
| 2002 | 401 | Échec de l'authentification. Le jeton a expiré ou a été désactivé |
| 2004 | 403 | Vous n'êtes pas autorisé à appeler cette API |
| 3001 | 400 | Format de paramètre de requête invalide. Veuillez vérifier si le contenu JSON correspond au format de paramètre requis |
| 3002 | 400 | Paramètres de requête invalides. Veuillez vérifier si les paramètres de requête respectent les exigences |
| 3003 | 400 | Paramètres de requête invalides. La validation métier associée a échoué. Reportez-vous à la description de l'erreur dans 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, la distribution ne peut pas être déclenchée à nouveau pendant la période de validité du code de vérification |
| 4001 | 400 | La ressource associée n'existe pas. Par exemple, un modèle inexistant a été utilisé lors de l'envoi d'un message modèle |
| 5001 | 400 | Échec de l'envoi (général/autre) |
| 5011 | 400 | Format de numéro de téléphone mobile invalide |
| 5012 | 400 | Cible injoignable |
| 5013 | 400 | Le numéro a été ajouté à la liste noire |
| 5014 | 400 | Le contenu n'est pas conforme aux spécifications |
| 5015 | 400 | Message intercepté/rejeté |
| 5016 | 400 | Erreur interne d'envoi |
| 5017 | 400 | Aucune autorisation pour envoyer vers la Chine continentale |
| 5018 | 400 | Problème lié à l'appareil mobile (éteint/service suspendu) |
| 5019 | 400 | L'utilisateur s'est désabonné |
| 5020 | 400 | Le numéro n'est pas enregistré / numéro invalide |










