API de gestion des modèles

Vue d'ensemble

L'API de gestion des modèles vous permet de créer, supprimer, modifier et consulter les modèles d'un WABA, et de regrouper les modèles à l'aide d'étiquettes personnalisées. Ce document couvre deux groupes de points de terminaison :

Validation des appels

EngageLab REST API utilise l'authentification HTTP Basic comme méthode de vérification : ajoutez l'en-tête HTTP Authorization :

Authorization: Basic ${base64_auth_string}
              
              Authorization: Basic ${base64_auth_string}

            
Afficher ce bloc de code dans la fenêtre flottante

L'algorithme de génération du base64_auth_string est le suivant : base64(dev_key:dev_secret)

  • Le nom de l'en-tête est "Authorization" et la valeur est une paire "username:password" convertie en base64 (avec deux-points au milieu).
  • Dans le scénario de l'API WhatsApp, le username est DevKey et le password est DevSecret. Dans la console, allez dans gestion de la configuration - clé API pour obtenir la page.

Obtenir les modèles

Adresse d'appel

GET https://wa.api.engagelab.cc/v1/templates

Paramètres de la requête

Paramètre Type Option Description
name String Facultatif Nom du modèle. Notez que ce champ utilise une correspondance approximative.
language_code String Facultatif Langue du modèle, voir Codes de langue.
category String Facultatif Catégorie du modèle.
● AUTHENTICATION : code de vérification
● MARKETING : marketing
● UTILITY : notification de service
status String Facultatif Statut du modèle :
  • APPROVED - approuvé
  • PENDING - en cours d'examen
  • REJECTED - refusé
  • PENDING_DELETION - en cours de suppression
  • DELETED - supprimé
  • DISABLED - désactivé (bloqué)
  • IN_APPEAL - en cours de recours
  • PAUSED - suspendu
    Les développeurs doivent principalement surveiller APPROVED/PENDING/REJECTED/DISABLED.
  • tag_id String Facultatif ID d'étiquette, utilisé pour filtrer les modèles par étiquette. Valeurs acceptées :
  • Non renseigné ou chaîne vide - ne pas filtrer par étiquette
  • Un ID d'étiquette - ne renvoyer que les modèles portant cette étiquette
  • ungrouped - ne renvoyer que les modèles sans aucune étiquette ; insensible à la casse
  • tag_id est en relation ET avec les autres critères de recherche tels que name, language_code, category et status. L'envoi de plusieurs étiquettes à la fois n'est pas pris en charge actuellement. Si le format de tag_id est invalide, le code d'erreur 3002 est renvoyé ; si l'étiquette n'existe pas ou n'appartient pas au WABA courant, le code d'erreur 4001 est renvoyé.

    Remarque : si une étiquette nommée « ungrouped » (ou son équivalent traduit) existe dans le WABA, vous devez transmettre son ID numérique pour filtrer sur cette étiquette. Transmettre directement ungrouped est toujours interprété comme « filtrer les modèles sans aucune étiquette ».

    Exemple de requête

    Filtrer par étiquette :

    GET https://wa.api.engagelab.cc/v1/templates?tag_id=101
                  
                  GET https://wa.api.engagelab.cc/v1/templates?tag_id=101
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Filtrer les modèles sans aucune étiquette :

    GET https://wa.api.engagelab.cc/v1/templates?tag_id=ungrouped
                  
                  GET https://wa.api.engagelab.cc/v1/templates?tag_id=ungrouped
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Paramètre Type Option Description
    id String Obligatoire ID du modèle
    name String Obligatoire Nom du modèle
    language String Obligatoire Langue du modèle, voir Codes de langue.
    category String Obligatoire Catégorie du modèle.
  • AUTHENTICATION
  • MARKETING
  • UTILITY
  • components Object Array Obligatoire Composants du contenu du modèle, voir l'objet components dans Créer un modèle.
    status String Obligatoire Statut du modèle :
  • APPROVED - approuvé
  • PENDING - en cours d'examen
  • REJECTED - refusé
  • PENDING_DELETION - en cours de suppression
  • DELETED - supprimé
  • DISABLED - désactivé (bloqué)
  • IN_APPEAL - en cours de recours
  • PAUSED - suspendu
    Les développeurs doivent principalement surveiller APPROVED/PENDING/REJECTED/DISABLED.
  • tags Object Array Obligatoire Étiquettes actuellement affectées au modèle. Renvoie un tableau vide si aucune étiquette n'est définie.
  • tags[].id - String, ID de l'étiquette
  • tags[].name - String, nom de l'étiquette
  • Exemple de réponse

    // Un tableau JSON dont chaque objet contient les informations d'un modèle [ { "id": "406979728071589", // ID du modèle "name": "code", // nom du modèle "language": "zh_CN", // langue du modèle "status": "APPROVED", // statut ; APPROVED signifie approuvé et utilisable "category": "OTP", // catégorie ; OTP/TRANSACTIONAL/MARKETING sont actuellement pris en charge "components": [ // contenu du modèle ; peut inclure HEADER/BODY/FOOTER/BUTTON { "type": "HEADER", "format": "text", // format ; text/image/location/video/document sont pris en charge, TEXT par défaut "text": "Code d'inscription" // contenu texte ; obligatoire lorsque format vaut text }, { "type": "BODY", "text": "Votre code de vérification est {{1}}. Veuillez le saisir dans les 5 minutes." // le texte entre doubles accolades {{}} est une variable de modèle } ], "tags": [ // étiquettes affectées à ce modèle ; tableau vide si aucune étiquette n'est définie { "id": "101", "name": "Notification de livraison" } ] }, ...... ]
                  
                  // Un tableau JSON dont chaque objet contient les informations d'un modèle
    [
        {
            "id": "406979728071589", // ID du modèle
            "name": "code", // nom du modèle
            "language": "zh_CN", // langue du modèle
            "status": "APPROVED", // statut ; APPROVED signifie approuvé et utilisable
            "category": "OTP", // catégorie ; OTP/TRANSACTIONAL/MARKETING sont actuellement pris en charge
            "components": [ // contenu du modèle ; peut inclure HEADER/BODY/FOOTER/BUTTON
                {
                    "type": "HEADER",
                    "format": "text", // format ; text/image/location/video/document sont pris en charge, TEXT par défaut
                    "text": "Code d'inscription" // contenu texte ; obligatoire lorsque format vaut text
                },
                {
                    "type": "BODY",
                    "text": "Votre code de vérification est {{1}}. Veuillez le saisir dans les 5 minutes." // le texte entre doubles accolades {{}} est une variable de modèle
                }
            ],
            "tags": [ // étiquettes affectées à ce modèle ; tableau vide si aucune étiquette n'est définie
                {
                    "id": "101",
                    "name": "Notification de livraison"
                }
            ]
        },
        ......
    ]
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Consulter les informations d'un modèle

    Adresse d'appel

    GET https://wa.api.engagelab.cc/v1/templates/{template_id}

    Où {template_id} est l'ID du modèle à consulter.

    Paramètres de la requête

    NULL

    Exemple de requête

    GET https://wa.api.engagelab.cc/v1/templates/406979728071589
                  
                  GET https://wa.api.engagelab.cc/v1/templates/406979728071589
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Paramètre Type Option Description
    id String Obligatoire ID du modèle
    name String Obligatoire Nom du modèle
    language String Obligatoire Langue du modèle, voir Codes de langue.
    category String Obligatoire Catégorie du modèle.
  • OTP : mot de passe à usage unique
  • MARKETING : marketing
  • TRANSACTIONAL : transactionnel
    Remarque : les catégories de modèles ont été mises à jour au plus tard le 1er mai 2023 en :
  • AUTHENTICATION
  • MARKETING
  • UTILITY
  • components Object Array Obligatoire Composants du contenu du modèle, voir l'objet components dans Créer un modèle.
    status String Obligatoire Statut du modèle :
    APPROVED, IN_APPEAL, PENDING, REJECTED, PENDING_DELETION, DELETED, DISABLED, PAUSED, LIMIT_EXCEEDED
    tags Object Array Obligatoire Étiquettes actuellement affectées au modèle. Renvoie un tableau vide si aucune étiquette n'est définie.
  • tags[].id - String, ID de l'étiquette
  • tags[].name - String, nom de l'étiquette
  • Exemple de réponse

    { "id": "406979728071589", // ID du modèle "name": "code", // nom du modèle "language": "zh_CN", // langue du modèle "status": "APPROVED", // statut ; APPROVED signifie approuvé et utilisable "category": "OTP", // catégorie ; OTP/TRANSACTIONAL/MARKETING sont actuellement pris en charge "components": [ // contenu du modèle ; peut inclure HEADER/BODY/FOOTER/BUTTON { "type": "HEADER", "format": "text", // format ; text/image/location/video/document sont pris en charge, TEXT par défaut "text": "Code d'inscription" // contenu texte ; obligatoire lorsque format vaut text }, { "type": "BODY", "text": "Votre code de vérification est {{1}}. Veuillez le saisir dans les 5 minutes." // le texte entre doubles accolades {{}} est une variable de modèle } ], "tags": [ // étiquettes affectées à ce modèle ; tableau vide si aucune étiquette n'est définie { "id": "101", "name": "Notification de livraison" } ] }
                  
                  {
        "id": "406979728071589", // ID du modèle
        "name": "code", // nom du modèle
        "language": "zh_CN", // langue du modèle
        "status": "APPROVED", // statut ; APPROVED signifie approuvé et utilisable
        "category": "OTP", // catégorie ; OTP/TRANSACTIONAL/MARKETING sont actuellement pris en charge
        "components": [ // contenu du modèle ; peut inclure HEADER/BODY/FOOTER/BUTTON
            {
                "type": "HEADER",
                "format": "text", // format ; text/image/location/video/document sont pris en charge, TEXT par défaut
                "text": "Code d'inscription" // contenu texte ; obligatoire lorsque format vaut text
            },
            {
                "type": "BODY",
                "text": "Votre code de vérification est {{1}}. Veuillez le saisir dans les 5 minutes." // le texte entre doubles accolades {{}} est une variable de modèle
            }
        ],
        "tags": [ // étiquettes affectées à ce modèle ; tableau vide si aucune étiquette n'est définie
            {
                "id": "101",
                "name": "Notification de livraison"
            }
        ]
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Téléverser un fichier multimédia d'exemple

    Lors de la création ou de la modification d'un modèle comportant un en-tête multimédia (image, video, document), Meta exige que le fichier soit d'abord téléversé sur ses serveurs. Cette API téléverse le fichier d'exemple du modèle et renvoie un handle_id, que vous devez indiquer dans le champ header_handle du point de terminaison de création/modification de modèle.

    Adresse d'appel

    POST https://wa.api.engagelab.cc/v1/media/handles

    Paramètres de la requête

    Content-Type : multipart/form-data

    Paramètre Type Option Description
    file file Obligatoire Fichier multimédia d'exemple. Taille maximale 20 Mo. Pour les exigences de format, voir Exigences de format des messages multimédias.

    Exemple de requête

    POST '/v1/media/handles' --header 'Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0' --form 'file=@"/Users/demo/files/demopic.jpeg"'
                  
                  POST '/v1/media/handles' 
    --header 'Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0' 
    --form 'file=@"/Users/demo/files/demopic.jpeg"'
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Réponse en cas de succès

    Champ Type Option Description
    handle_id String Obligatoire L'identifiant de fichier renvoyé par Meta, à indiquer dans le champ example.header_handle lors de la création ou de la modification d'un modèle.

    Exemple de réponse :

    { "handle_id": "4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlczcn4hxLC6tkwjasjD4WL6_i34tIisq0IdWNFFFj1KwJMRXPU4xwygHSJd4DHu1f19LcBBl2qeb8EuEcgnIUPYIQ:e:1682169041:4985146461608173:100084026087657:ARazr9kxfzKshJE4WpY" }
                  
                  {
        "handle_id": "4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlczcn4hxLC6tkwjasjD4WL6_i34tIisq0IdWNFFFj1KwJMRXPU4xwygHSJd4DHu1f19LcBBl2qeb8EuEcgnIUPYIQ:e:1682169041:4985146461608173:100084026087657:ARazr9kxfzKshJE4WpY"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Réponse en cas d'échec

    Le code de statut HTTP est 4xx ou 5xx, et le corps de la réponse contient les champs suivants :

    Champ Type Option Description
    code int Obligatoire Code d'erreur
    message String Obligatoire Détail de l'erreur

    Exemple de réponse :

    { "code": 3002, "message": "whatsapp.template field must be set correctly when type is template" }
                  
                  {
        "code": 3002,
        "message": "whatsapp.template field must be set correctly when type is template"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Créer un modèle

    Adresse d'appel

    POST https://wa.api.engagelab.cc/v1/templates

    Exemple d'appel

    { "name": "template_name", // nom du modèle ; les homonymes sont autorisés ; seuls les minuscules, les chiffres et les tirets bas sont pris en charge "language": "zh_CN", // langue du modèle ; deux modèles portant le même nom ne peuvent pas utiliser la même langue "category": "OTP", // catégorie ; OTP/TRANSACTIONAL/MARKETING sont actuellement pris en charge "components": [ { // contenu du modèle "type": "BODY", // bloc de contenu ; HEADER/BODY/FOOTER/BUTTONS sont actuellement pris en charge "text": "define var as {{1}}" // le texte lui-même ; le champ format n'est pas nécessaire lorsque le body est du texte "example": { "body_text": [ [ "var1" ] ] } }, { "type": "HEADER", "format": "image", // type de contenu ; text/image/video/document/location sont pris en charge "example": { "header_handle": [ "https://jiguang.cn/demopic.jpg" ] } }, { "type": "FOOTER", "text": "footer only support text without variable" }, { "type": "BUTTONS", "buttons": [ { "type": "PHONE_NUMBER", // type de bouton ; PHONE_NUMBER/URL/QUICK_REPLY sont pris en charge "text": "this is a phone number", "phone_number": "8613800138000" } ] } ] }
                  
                  {
        "name": "template_name", // nom du modèle ; les homonymes sont autorisés ; seuls les minuscules, les chiffres et les tirets bas sont pris en charge
        "language": "zh_CN", // langue du modèle ; deux modèles portant le même nom ne peuvent pas utiliser la même langue
        "category": "OTP", // catégorie ; OTP/TRANSACTIONAL/MARKETING sont actuellement pris en charge
        "components": [
            { // contenu du modèle
                "type": "BODY", // bloc de contenu ; HEADER/BODY/FOOTER/BUTTONS sont actuellement pris en charge
                "text": "define var as {{1}}" // le texte lui-même ; le champ format n'est pas nécessaire lorsque le body est du texte
              "example": {
                    "body_text": [
                        [
                            "var1"
                        ]
                    ]
                }
            },
            {
                "type": "HEADER",
                "format": "image", // type de contenu ; text/image/video/document/location sont pris en charge
                "example": {
                    "header_handle": [
                        "https://jiguang.cn/demopic.jpg"
                    ]
                }
            },
            {
                "type": "FOOTER",
                "text": "footer only support text without variable"
            },
            {
                "type": "BUTTONS",
                "buttons": [
                    {
                        "type": "PHONE_NUMBER", // type de bouton ; PHONE_NUMBER/URL/QUICK_REPLY sont pris en charge              
                        "text": "this is a phone number",
                        "phone_number": "8613800138000"
                    }
                ]
            }
        ]
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la requête

    Paramètre Type Option Description
    name String Obligatoire Nom du modèle. Seuls les minuscules, les chiffres et les tirets bas sont pris en charge, dans la limite de 512 caractères.
    language String Obligatoire Langue du modèle, voir Codes de langue.
    category String Obligatoire Catégorie du modèle.
  • OTP : mot de passe à usage unique
  • MARKETING : marketing
  • TRANSACTIONAL : transactionnel
    Remarque : les catégories de modèles ont été mises à jour au plus tard le 1er mai 2023 en :
  • AUTHENTICATION
  • MARKETING
  • UTILITY
  • components Object Array Obligatoire Composants décrivant le contenu du modèle, voir l'objet components. Notez qu'un composant de type=BODY doit être présent.

    Objet components

    Cet objet décrit le contenu du modèle. Un modèle se compose des composants « en-tête HEADER », « corps BODY », « pied de page FOOTER » et « boutons BUTTONS », indiqués par type. Chaque type de composant accepte des paramètres différents :

    Composant header

    Le composant header est facultatif dans son ensemble. Si vous n'avez pas besoin d'en-tête, n'incluez pas ce composant.

    Paramètre Type Option Description
    type String Obligatoire Type de composant, valeur HEADER
    format String Obligatoire Format de l'en-tête, valeurs : text, image, video, document, correspondant respectivement à texte, image, vidéo et fichier.
    text String Facultatif Contenu texte de l'en-tête. Renseignez ce champ lorsque format=text. Le texte de l'en-tête peut contenir une variable, mais une seule est prise en charge, notée {{1}}.
    example JSON Object Facultatif Exemple d'en-tête. Obligatoire lorsque text contient une variable ou que format est un type multimédia. Voir la description de l'objet example.
    Description de l'objet example
    Paramètre Type Option Description
    header_handle String Array Facultatif Obligatoire lorsque format vaut image, video ou document. Ce champ n'accepte plus d'URL multimédia ; vous devez transmettre le handle_id obtenu via l'API de téléversement de fichier multimédia d'exemple.
    header_text String Array Facultatif Lorsque format vaut text et contient une variable, transmettez dans ce champ la valeur de remplacement de cette variable. Par exemple : "header_text": ["var1"]
    Composant body

    Le composant body est obligatoire ; vous devez définir le contenu du corps.

    Paramètre Type Option Description
    type String Obligatoire Type de composant, valeur BODY
    text String Obligatoire Contenu du corps, 1024 caractères maximum. Plusieurs variables sont prises en charge. Une variable se compose de doubles accolades et du numéro de la variable ; la numérotation doit commencer à 1 et être croissante, par exemple {{1}} et {{2}}.
    example JSON Object Facultatif Exemple de corps. Les examinateurs de Meta s'appuient sur cet exemple pour juger de la conformité de votre message. Voir la description de l'objet example. Obligatoire lorsque text contient des variables.
    Description de l'objet example
    Paramètre Type Option Description
    body_text String Array Facultatif Lorsque text contient des variables, transmettez dans ce champ les valeurs de remplacement de toutes les variables, dans l'ordre de leur numérotation. Par exemple : "body_text": [["var1","var2","var3"]]

    Le composant footer est facultatif dans son ensemble. Si vous n'avez pas besoin de pied de page, n'incluez pas ce composant.

    Paramètre Type Option Description
    type String Obligatoire Type de composant, valeur FOOTER
    text String Obligatoire Contenu du pied de page. Texte brut uniquement ; les variables ne sont pas autorisées.
    Composant buttons

    Le composant buttons est facultatif dans son ensemble. Si vous n'avez pas besoin de boutons, n'incluez pas ce composant.

    Paramètre Type Option Description
    type String Obligatoire Type de composant, valeur BUTTONS
    buttons Object Array Obligatoire Informations sur les boutons, voir la description de l'objet buttons.
    Description de l'objet buttons
    Paramètre Type Option Description
    type String Obligatoire Type de bouton, valeurs : QUICK_REPLY, URL, PHONE_NUMBER, correspondant respectivement à réponse rapide, visiter un site web et appeler un numéro de téléphone.
    text String Obligatoire Le texte affiché sur le bouton. Ne peut pas contenir de variables ; texte brut uniquement, 25 caractères maximum.
    url String Facultatif Obligatoire lorsque type=URL. Vous pouvez placer une variable à la fin de l'URL, mais une seule est prise en charge, notée {{1}}.
    phone_number String Facultatif Obligatoire lorsque type=PHONE_NUMBER. Ne peut pas contenir de variables. La valeur est un numéro de téléphone incluant l'indicatif international.
    example String Array Facultatif Obligatoire lorsque type=QUICK_REPLY et type=URL.
    Par exemple : "example": ["https://www.website.com/dynamic-url-example"]

    Remarques particulières sur les modèles d'authentification

    Points d'attention

    Pour les modèles de la catégorie authentification (c'est-à-dire AUTHENTICATION) :

    1. Ne définissez pas de composant HEADER dans Components.
    2. Le texte du contenu du modèle est localisé automatiquement en fonction du champ language du modèle.
    3. Pour le mode ONE_TAP qui ouvre une application, seules les applications Android sont prises en charge actuellement, et vous devez implémenter le handshake correspondant dans votre application. Pour un guide détaillé, consultez la documentation officielle - Modèles d'authentification.
    4. Les champs transmis lors de la création d'un modèle ne correspondent pas aux champs du modèle enregistrés côté WhatsApp après la création : concrètement, WhatsApp remplace les BODY, FOOTER et BUTTONS des modèles de cette catégorie. Soyez donc particulièrement attentif lors de l'envoi de messages modèles : vous devez ajouter la variable de bouton. Pour plus de détails, consultez la documentation de l'API d'envoi de messages.
    Exemple COPY_CODE

    Données transmises :

    { "name": "copycodetmpl", "language": "zh_CN", "category": "AUTHENTICATION", "components": [ { // body est obligatoire "type": "BODY", "add_security_recommendation": true // faut-il ajouter le texte de recommandation de sécurité }, { // footer est facultatif "type": "FOOTER", "code_expiration_minutes": 2 // ajoute l'affichage du délai d'expiration, plage [1,90] ; omettez ce champ si vous n'en avez pas besoin }, { "type": "BUTTONS", "buttons": [ { "type": "OTP", "otp_type": "copy_code", "text": "copy it" // limite de 25 caractères } ] } ] }
                  
                  {
        "name": "copycodetmpl",
        "language": "zh_CN",
        "category": "AUTHENTICATION",
        "components": [
            {
                // body est obligatoire
                "type": "BODY",
                "add_security_recommendation": true  // faut-il ajouter le texte de recommandation de sécurité
                
            },
            {
                // footer est facultatif
                "type": "FOOTER",		
                "code_expiration_minutes": 2    // ajoute l'affichage du délai d'expiration, plage [1,90] ; omettez ce champ si vous n'en avez pas besoin
            },
            {
                "type": "BUTTONS",          
                "buttons": [
                    {
                        "type": "OTP",
                        "otp_type": "copy_code",
                        "text": "copy it"      // limite de 25 caractères
                    }
                ]
            }
        ]
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Le contenu du modèle réellement enregistré côté WhatsApp après une création réussie :

    { "name": "copycodetmpl", "language": "zh_CN", "category": "AUTHENTICATION", "components": [ { "type": "BODY", "text": "*{{1}}* est votre code de vérification. Pour votre sécurité, ne partagez pas ce code.", "example": { "body_text": [ ["123456"] ] } }, { "type": "FOOTER", "text": "Ce code expire dans 2 minutes." }, { "type": "BUTTONS", "buttons": [{ "type": "URL", "text": "Copy code", "url": "https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp{{1}}", "example": [ "https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp123456" ] }] } ] }
                  
                  {
        "name": "copycodetmpl",
        "language": "zh_CN",
        "category": "AUTHENTICATION",
        "components": [
            {
                "type": "BODY",
                "text": "*{{1}}* est votre code de vérification. Pour votre sécurité, ne partagez pas ce code.",
                "example": {
                    "body_text": [
                        ["123456"]
                    ]
                }
            },
            {
                "type": "FOOTER",
                "text": "Ce code expire dans 2 minutes."
            },
            {
                "type": "BUTTONS",
                "buttons": [{
                  "type": "URL",
                  "text": "Copy code",
                  "url": "https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp{{1}}",
                  "example": [
                      "https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp123456"
                  ]
              }]
            }
        ]
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante
    Exemple ONE_TAP

    Données transmises :

    { "name": "copycodetmpl", "language": "zh_CN", "category": "AUTHENTICATION", "components": [ { // body est obligatoire "type": "BODY", "add_security_recommendation": true // faut-il ajouter le texte de recommandation de sécurité }, { // footer est facultatif "type": "FOOTER", "code_expiration_minutes": 2 // ajoute l'affichage du délai d'expiration, plage [1,90] ; omettez ce champ si vous n'en avez pas besoin }, { "type": "BUTTONS", "buttons": [ { "type": "OTP", "otp_type": "one_tap", "text": "auto1", // limite de 25 caractères "autofill_text": "auto1", // limite de 25 caractères "package_name": "ppssd", "signature_hash": "asds" } ] } ] }
                  
                  {
        "name": "copycodetmpl",
        "language": "zh_CN",
        "category": "AUTHENTICATION",
        "components": [
            {
                // body est obligatoire
                "type": "BODY",
                "add_security_recommendation": true  // faut-il ajouter le texte de recommandation de sécurité
                
            },
            {
                // footer est facultatif
                "type": "FOOTER",		
                "code_expiration_minutes": 2    // ajoute l'affichage du délai d'expiration, plage [1,90] ; omettez ce champ si vous n'en avez pas besoin
            },
            {
                "type": "BUTTONS",          
                "buttons": [
                    {
                        "type": "OTP",
                        "otp_type": "one_tap",
                        "text": "auto1",      // limite de 25 caractères
                        "autofill_text": "auto1",      // limite de 25 caractères
                        "package_name": "ppssd",    
                        "signature_hash": "asds"  
                    }
                ]
            }
        ]
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Le contenu du modèle réellement enregistré côté WhatsApp après une création réussie :

    { "name": "copycodetmpl", "language": "zh_CN", "category": "AUTHENTICATION", "components": [ { "type": "BODY", "text": "*{{1}}* est votre code de vérification. Pour votre sécurité, ne partagez pas ce code.", "example": { "body_text": [ ["123456"] ] } }, { "type": "FOOTER", "text": "Ce code expire dans 2 minutes." }, { "type": "BUTTONS", "buttons": [{ "type": "URL", "text": "copy1", "url": "https://www.whatsapp.com/otp/code/?otp_type=ONE_TAP&cta_display_name=auto1&package_name=ppssd&signature_hash=asds&code=otp{{1}}", "example": ["https://www.whatsapp.com/otp/code/?otp_type=ONE_TAP&cta_display_name=auto1&package_name=ppssd&signature_hash=asds&code=otp123456"] }] } ] }
                  
                  {
        "name": "copycodetmpl",
        "language": "zh_CN",
        "category": "AUTHENTICATION",
        "components": [
            {
                "type": "BODY",
                "text": "*{{1}}* est votre code de vérification. Pour votre sécurité, ne partagez pas ce code.",
                "example": {
                    "body_text": [
                        ["123456"]
                    ]
                }
            },
            {
                "type": "FOOTER",
                "text": "Ce code expire dans 2 minutes."
            },
            {
                "type": "BUTTONS",
                "buttons": [{
                    "type": "URL",
                    "text": "copy1",
                    "url": "https://www.whatsapp.com/otp/code/?otp_type=ONE_TAP&cta_display_name=auto1&package_name=ppssd&signature_hash=asds&code=otp{{1}}",
                    "example": ["https://www.whatsapp.com/otp/code/?otp_type=ONE_TAP&cta_display_name=auto1&package_name=ppssd&signature_hash=asds&code=otp123456"]
                }]
            }
        ]
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Réponse en cas de succès

    Paramètre Type Option Description
    template_id String Obligatoire ID du modèle, renvoyé en cas de succès
    { "template_id": "1275172986566180" // ID du modèle }
                  
                  {
        "template_id": "1275172986566180"		// ID du modèle
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Réponse en cas d'échec

    Paramètre Type Option Description
    code int Obligatoire Code d'erreur, renvoyé en cas d'échec
    message String Obligatoire Message d'erreur, renvoyé en cas d'échec
    { "code": 5002, "message": "Invalid parameter. code:100:2388042" }
                  
                  {
        "code": 5002,
        "message": "Invalid parameter. code:100:2388042"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Mettre à jour un modèle

    Adresse d'appel

    PUT https://wa.api.engagelab.cc/v1/templates/{templateId}

    Exemple d'appel

    { "components": [{ // contenu du modèle "type": "BODY", // bloc de contenu "text": "define var as {{1}}", "example": { "body_text": [["var1"]] } },{ "type": "HEADER", "format": "image", // type de contenu : image/video/document "example": { // Remarque : vous devez indiquer ici le handle_id renvoyé par le point de terminaison de téléversement ; une URL d'image n'est plus prise en charge "header_handle": ["4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlcz..."] } },{ "type": "FOOTER", "text": "footer only support text without variable" },{ "type": "BUTTONS", "buttons": [{ "type": "PHONE_NUMBER", "text": "this is a phone number", "phone_number": "8613800138000" }] }] }
                  
                  {
        "components": [{                        // contenu du modèle
            "type": "BODY",                     // bloc de contenu
            "text": "define var as {{1}}", 
            "example": {
                "body_text": [["var1"]]
            }
        },{
            "type": "HEADER",
            "format": "image",                  // type de contenu : image/video/document
            "example": {
                // Remarque : vous devez indiquer ici le handle_id renvoyé par le point de terminaison de téléversement ; une URL d'image n'est plus prise en charge
                "header_handle": ["4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlcz..."]
            }
        },{
            "type": "FOOTER",
            "text": "footer only support text without variable"
        },{
            "type": "BUTTONS",
            "buttons": [{                                     
                "type": "PHONE_NUMBER",              
                "text": "this is a phone number",              
                "phone_number": "8613800138000"
            }]
        }]
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la requête

    Identiques aux paramètres de la requête du point de terminaison de création de modèle.

    Paramètres de la réponse

    Réponse en cas de succès

    Paramètre Type Option Description
    code int Obligatoire Code de retour, toujours 0
    message String Obligatoire Message de retour, toujours success
    { "code": 0, "message": "success" }
                  
                  {
        "code": 0,
        "message": "success"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Réponse en cas d'échec

    Paramètre Type Option Description
    code int Obligatoire Code d'erreur, renvoyé en cas d'échec
    message String Obligatoire Message d'erreur, renvoyé en cas d'échec
    { "code": 5002, "message": "Invalid parameter. code:100:2593002" }
                  
                  {
        "code": 5002,
        "message": "Invalid parameter. code:100:2593002"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Supprimer un modèle

    Adresse d'appel

    DELETE https://wa.api.engagelab.cc/v1/templates/{template_name}
    Remarque : c'est le nom du modèle qui est transmis ici, et non son ID. Toutes les versions linguistiques du modèle portant ce nom seront supprimées.

    Paramètres de la réponse

    Réponse en cas de succès

    Paramètre Type Option Description
    code int Obligatoire Code de retour, toujours 0
    message String Obligatoire Message de retour, toujours success
    { "code": 0, "message": "success" }
                  
                  {
        "code": 0,
        "message": "success"
    }
    
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Réponse en cas d'échec

    Paramètre Type Option Description
    code int Obligatoire Code d'erreur, renvoyé en cas d'échec
    message String Obligatoire Message d'erreur, renvoyé en cas d'échec
    { "code": 2004, "message": "something error" }
                  
                  {
        "code": 2004,
        "message": "something error"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Obtenir la liste des étiquettes

    Renvoie toutes les étiquettes du WABA auquel appartient la clé API courante, sans pagination.

    Adresse d'appel

    GET https://wa.api.engagelab.cc/v1/template-tags

    Paramètres de la requête

    NULL

    Exemple de requête

    GET https://wa.api.engagelab.cc/v1/template-tags
                  
                  GET https://wa.api.engagelab.cc/v1/template-tags
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Paramètre Type Option Description
    id String Obligatoire ID de l'étiquette
    name String Obligatoire Nom de l'étiquette
    template_count Integer Obligatoire Nombre de modèles du WABA courant portant cette étiquette. Les modèles homonymes dans des langues différentes sont comptés séparément selon leur ID.

    Exemple de réponse

    [ { "id": "101", "name": "Notification de livraison", "template_count": 3 }, { "id": "102", "name": "Service après-vente", "template_count": 0 } ]
                  
                  [
        {
            "id": "101",
            "name": "Notification de livraison",
            "template_count": 3
        },
        {
            "id": "102",
            "name": "Service après-vente",
            "template_count": 0
        }
    ]
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Si le WABA ne comporte aucune étiquette, un tableau vide [] est renvoyé.

    Créer une étiquette

    Adresse d'appel

    POST https://wa.api.engagelab.cc/v1/template-tags

    Paramètres de la requête

    Paramètre Type Option Description
    name String Obligatoire Nom de l'étiquette, de 1 à 64 caractères. Pour les exigences de nommage, voir Règles de nommage des étiquettes.

    Exemple de requête

    { "name": "Notification de livraison" }
                  
                  {
        "name": "Notification de livraison"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Réponse en cas de succès

    Paramètre Type Option Description
    id String Obligatoire ID de l'étiquette
    name String Obligatoire Le nom de l'étiquette après normalisation
    { "id": "101", "name": "Notification de livraison" }
                  
                  {
        "id": "101",
        "name": "Notification de livraison"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Réponse en cas d'échec

    Paramètre Type Option Description
    code int Obligatoire Code d'erreur, renvoyé en cas d'échec
    message String Obligatoire Message d'erreur, renvoyé en cas d'échec
    { "code": 3003, "message": "template tag name already exists" }
                  
                  {
        "code": 3003,
        "message": "template tag name already exists"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Modifier une étiquette

    Adresse d'appel

    PUT https://wa.api.engagelab.cc/v1/template-tags/{tag_id}

    Où {tag_id} est l'ID de l'étiquette à modifier.

    Paramètres de la requête

    Paramètre Type Option Description
    name String Obligatoire Le nouveau nom de l'étiquette, de 1 à 64 caractères. Pour les exigences de nommage, voir Règles de nommage des étiquettes.

    Exemple de requête

    { "name": "Service après-vente" }
                  
                  {
        "name": "Service après-vente"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Réponse en cas de succès

    Paramètre Type Option Description
    id String Obligatoire ID de l'étiquette
    name String Obligatoire Le nom de l'étiquette après modification
    { "id": "101", "name": "Service après-vente" }
                  
                  {
        "id": "101",
        "name": "Service après-vente"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Réponse en cas d'échec

    Paramètre Type Option Description
    code int Obligatoire Code d'erreur, renvoyé en cas d'échec
    message String Obligatoire Message d'erreur, renvoyé en cas d'échec
    { "code": 4001, "message": "template tag not found" }
                  
                  {
        "code": 4001,
        "message": "template tag not found"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Supprimer une étiquette

    Adresse d'appel

    DELETE https://wa.api.engagelab.cc/v1/template-tags/{tag_id}
    Remarque : la suppression d'une étiquette ne fait que dissocier les modèles de cette étiquette. Elle ne supprime pas les modèles et n'affecte pas leur envoi.

    Où {tag_id} est l'ID de l'étiquette à supprimer.

    Paramètres de la requête

    NULL

    Exemple de requête

    DELETE https://wa.api.engagelab.cc/v1/template-tags/101
                  
                  DELETE https://wa.api.engagelab.cc/v1/template-tags/101
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Réponse en cas de succès

    Paramètre Type Option Description
    affected_template_count Integer Obligatoire Nombre de modèles dissociés par cette opération. Les modèles homonymes dans des langues différentes sont comptés séparément selon leur ID.
    { "affected_template_count": 3 }
                  
                  {
        "affected_template_count": 3
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Réponse en cas d'échec

    Paramètre Type Option Description
    code int Obligatoire Code d'erreur, renvoyé en cas d'échec
    message String Obligatoire Message d'erreur, renvoyé en cas d'échec
    { "code": 4001, "message": "template tag not found" }
                  
                  {
        "code": 4001,
        "message": "template tag not found"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Affecter des étiquettes à un modèle

    Adresse d'appel

    PUT https://wa.api.engagelab.cc/v1/templates/{template_id}/tags
    Remarque : ce point de terminaison procède par écrasement complet. tag_ids correspond à l'ensemble complet des étiquettes que portera le modèle après enregistrement ; toute étiquette existante non incluse sera dissociée.

    Où {template_id} est l'ID du modèle dont vous souhaitez définir les étiquettes.

    Paramètres de la requête

    Paramètre Type Option Description
    tag_ids String Array Obligatoire L'ensemble complet des ID d'étiquettes que portera le modèle après enregistrement. Il doit être transmis explicitement et ne peut pas valoir null. Tous les ID doivent appartenir au WABA courant ; les doublons sont automatiquement supprimés.

    À propos de la valeur de tag_ids :

    • Transmettre [] supprime toutes les étiquettes de ce modèle.
    • Si tag_ids n'est pas transmis ou vaut null, la requête échoue et les étiquettes existantes ne sont pas supprimées.
    • En cas d'échec de la requête, l'ensemble des étiquettes du modèle reste inchangé ; vous pouvez donc réessayer directement.
    • Le nombre d'étiquettes par modèle n'est pas limité ; vous pouvez transmettre toutes les étiquettes du WABA courant.

    Exemple de requête

    { "tag_ids": ["101", "102"] }
                  
                  {
        "tag_ids": ["101", "102"]
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Paramètres de la réponse

    Réponse en cas de succès

    Paramètre Type Option Description
    code int Obligatoire Code de retour, toujours 0
    message String Obligatoire Message de retour, toujours success
    { "code": 0, "message": "success" }
                  
                  {
        "code": 0,
        "message": "success"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Réponse en cas d'échec

    Paramètre Type Option Description
    code int Obligatoire Code d'erreur, renvoyé en cas d'échec
    message String Obligatoire Message d'erreur, renvoyé en cas d'échec

    Le modèle n'existe pas ou n'appartient pas au WABA courant :

    { "code": 4001, "message": "template not found" }
                  
                  {
        "code": 4001,
        "message": "template not found"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    L'étiquette n'existe pas ou n'appartient pas au WABA courant :

    { "code": 4001, "message": "template tag not found" }
                  
                  {
        "code": 4001,
        "message": "template tag not found"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    tag_ids n'a pas été transmis ou vaut null :

    { "code": 3002, "message": "template tag IDs must be provided as an array" }
                  
                  {
        "code": 3002,
        "message": "template tag IDs must be provided as an array"
    }
    
                
    Afficher ce bloc de code dans la fenêtre flottante

    Codes d'erreur

    Dans le tableau ci-dessous, « points de terminaison des étiquettes » désigne les cinq points de terminaison d'étiquettes listés dans la Vue d'ensemble, et inclut également le cas du filtrage par tag_id lors de l'obtention des modèles.

    Code d'erreur Code HTTP Points de terminaison concernés Description
    1000 500 Tous les points de terminaison Erreur interne
    2001 401 Tous les points de terminaison Échec de l'authentification côté EngageLab : aucun jeton au format de données valide n'a été transmis
    2002 401 Tous les points de terminaison Échec de l'authentification côté EngageLab : le jeton a expiré ou a été désactivé
    2003 400 Tous les points de terminaison Échec de l'authentification côté WhatsApp. Veuillez contacter le service client EngageLab.
    2004 403 Tous les points de terminaison Aucune autorisation d'appeler cette API, ou le compte ou le WABA concerné a été désactivé
    3001 400 Tous les points de terminaison Format des paramètres de la requête invalide. Vérifiez que le format JSON est utilisé et que les types des champs sont conformes.
    3002 400 Tous les points de terminaison Paramètres de requête incorrects. Vérifiez qu'ils sont conformes aux exigences.
    3002 400 Points de terminaison des étiquettes Le nom de l'étiquette est vide
    3002 400 Points de terminaison des étiquettes Le nom de l'étiquette dépasse 64 caractères, voir Règles de nommage des étiquettes
    3002 400 Points de terminaison des étiquettes Le nom de l'étiquette contient des caractères non autorisés, voir Règles de nommage des étiquettes
    3002 400 Points de terminaison des étiquettes Format d'ID d'étiquette invalide ; il doit s'agir d'une chaîne d'entiers positifs
    3002 400 Points de terminaison des étiquettes tag_ids n'a pas été transmis lors de l'affectation des étiquettes, ou sa valeur est null
    3003 400 Tous les points de terminaison Paramètres de requête incorrects : la validation métier correspondante a échoué
    3003 400 Points de terminaison des étiquettes Une étiquette portant le même nom existe déjà dans le WABA. La détection des doublons ne tient compte ni de la casse ni des accents.
    3003 400 Points de terminaison des étiquettes La limite de 20 étiquettes par WABA est atteinte
    3003 400 Points de terminaison des étiquettes Les opérations sur les étiquettes sont saturées. Réessayez plus tard ; une nouvelle tentative ne crée pas de doublons.
    4001 400 Tous les points de terminaison Le modèle n'existe pas ou n'appartient pas au WABA courant
    4001 400 Points de terminaison des étiquettes L'étiquette n'existe pas ou n'appartient pas au WABA courant
    5002 400 Tous les points de terminaison La requête de modèle a échoué côté Meta. Consultez la description de l'erreur dans le champ message.

    Notes

    Exigences de format des messages multimédias

    Type de média Content-Type pris en charge Limite de taille
    image image/jpeg, image/png ; les fonds transparents ne sont pas pris en charge 5 Mo
    video video/mp4 16 Mo
    document Format PDF uniquement 100 Mo

    Règles de nommage des étiquettes

    Lors de la création et de la modification d'étiquettes, le serveur normalise d'abord le nom, puis vérifie sa longueur et l'absence de doublon.

    Normalisation : les espaces en début et en fin sont supprimés, et les espaces consécutifs à l'intérieur du nom sont réduits à un seul espace. Par exemple, si vous transmettez " Notification de livraison ", le nom réellement enregistré et renvoyé est "Notification de livraison".

    Restrictions de caractères : les espaces, tirets bas, traits d'union, caractères visibles de toutes les langues et emojis sont autorisés ; les sauts de ligne, tabulations, caractères de contrôle et caractères de formatage invisibles ne le sont pas.

    Longueur : après normalisation, le nom doit comporter de 1 à 64 caractères. La longueur est comptée en points de code Unicode, et un emoji peut occuper plusieurs points de code.

    Détection des doublons : les noms doivent être uniques au sein d'un WABA. La détection ne tient compte ni de la casse ni des accents : par exemple, Logistics, logistics et Logístics sont considérés comme le même nom. Il n'y a pas de mots réservés.

    Limites d'utilisation des étiquettes

    • Un WABA peut créer au maximum 20 étiquettes.
    • Le nombre d'étiquettes par modèle n'est pas limité ; vous pouvez affecter toutes les étiquettes existantes du WABA courant, ce qui porte la limite effective à 20.
    • Les ID d'étiquettes sont des chaînes de caractères aussi bien dans les requêtes que dans les réponses (par exemple "101"). Ne les interprétez pas comme des nombres.
    • Les modèles homonymes dans des langues différentes reçoivent leurs étiquettes indépendamment, selon leur ID respectif. Les versions française et anglaise d'un même modèle doivent donc être configurées séparément.
    • Les étiquettes ne sont pas transmises à Meta. Elles ne modifient ni le statut ni la note de qualité du modèle et ne déclenchent pas de nouvel examen.

    Codes de langue

    Langue Code
    Afrikaans af
    Albanais sq
    Arabe ar
    Azerbaïdjanais az
    Bengali bn
    Bulgare bg
    Catalan ca
    Chinois (Chine continentale) zh_CN
    Chinois (Hong Kong) zh_HK
    Chinois (Taïwan) zh_TW
    Croate hr
    Tchèque cs
    Danois da
    Néerlandais nl
    Anglais en
    Anglais (Royaume-Uni) en_GB
    Anglais (États-Unis) en_US
    Estonien et
    Filipino fil
    Finnois fi
    Français fr
    Géorgien ka
    Allemand de
    Grec el
    Gujarati gu
    Haoussa ha
    Hébreu he
    Hindi hi
    Hongrois hu
    Indonésien id
    Irlandais ga
    Italien it
    Japonais ja
    Kannada kn
    Kazakh kk
    Kinyarwanda rw_RW
    Coréen ko
    Kirghiz ky_KG
    Lao lo
    Letton lv
    Lituanien lt
    Macédonien mk
    Malais ms
    Malayalam ml
    Marathi mr
    Norvégien nb
    Persan fa
    Polonais pl
    Portugais (Brésil) pt_BR
    Portugais (Portugal) pt_PT
    Pendjabi pa
    Roumain ro
    Russe ru
    Serbe sr
    Slovaque sk
    Slovène sl
    Espagnol es
    Espagnol (Argentine) es_AR
    Espagnol (Espagne) es_ES
    Espagnol (Mexique) es_MX
    Swahili sw
    Suédois sv
    Tamoul ta
    Télougou te
    Thaï th
    Turc tr
    Ukrainien uk
    Ourdou ur
    Ouzbek uz
    Vietnamien vi
    Zoulou zu

    Vous pouvez également télécharger ce fichier pour consulter la correspondance entre les langues et leurs codes :
    Codes de langue des modèles.xlsx

    Icon Solid Transparent White Qiyu
    Contactez-nous