Envoyer une enquête de satisfaction après un achat ou une visite

Oui : un template UTILITY à deux boutons de réponse rapide ouvre la conversation ; dès le premier clic, la fenêtre de 24 h est ouverte et vous posez la note de 1 à 5 en menu, sans template.

Envoyer une enquête de satisfaction après un achat ou une visite

Astuce
Oui : un template UTILITY à deux boutons de réponse rapide ouvre la conversation ; dès le premier clic, la fenêtre de 24 h est ouverte et vous posez la note de 1 à 5 en menu, sans template.

Scénario

Le lendemain d'une livraison, vous demandez son avis au client. Il n'a rien écrit depuis plus de 24 h : le premier message est donc un template. Son clic rouvre la fenêtre, et la suite se fait en messages libres.

Conversation

Vous    : (template) Bonjour Awa, votre commande 1042 est arrivée. Êtes-vous satisfaite ?
          [ Oui, je donne mon avis ]  [ Non merci ]
Client  : (touche « Oui, je donne mon avis »)  → webhook : button_id = "Oui, je donne mon avis"
Vous    : (liste, sans template) Quelle note donnez-vous ?  [ Voir les notes ▾ ]
          ⭐⭐⭐⭐⭐ Excellent · ⭐⭐⭐⭐ Bien · ⭐⭐⭐ Moyen · ⭐⭐ Décevant · ⭐ Mauvais
Client  : (choisit « ⭐⭐⭐⭐ Bien »)  → webhook : button_id = "note:4"

Code

D'abord le template, à créer une fois :

curl

curl -X POST "https://wa-api.geskap.com/v1/templates" \
  -H "Authorization: Bearer $GESKAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "avis_commande",
  "language": "fr",
  "category": "UTILITY",
  "body_text": "Bonjour {{1}}, votre commande {{2}} est arrivée. Êtes-vous satisfait(e) de votre achat ?",
  "example_values": ["Awa", "1042"],
  "buttons": [
    { "kind": "quick_reply", "text": "Oui, je donne mon avis" },
    { "kind": "quick_reply", "text": "Non merci" }
  ]
}'

Node.js

const res = await fetch("https://wa-api.geskap.com/v1/templates", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.GESKAP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name": "avis_commande",
    "language": "fr",
    "category": "UTILITY",
    "body_text": "Bonjour {{1}}, votre commande {{2}} est arrivée. Êtes-vous satisfait(e) de votre achat ?",
    "example_values": ["Awa", "1042"],
    "buttons": [
      { "kind": "quick_reply", "text": "Oui, je donne mon avis" },
      { "kind": "quick_reply", "text": "Non merci" }
    ]
  }),
});
console.log(res.status, await res.json());

PHP

$ch = curl_init("https://wa-api.geskap.com/v1/templates");
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("GESKAP_API_KEY"),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "name" => "avis_commande",
    "language" => "fr",
    "category" => "UTILITY",
    "body_text" => "Bonjour {{1}}, votre commande {{2}} est arrivée. Êtes-vous satisfait(e) de votre achat ?",
    "example_values" => ["Awa", "1042"],
    "buttons" => [
      ["kind" => "quick_reply", "text" => "Oui, je donne mon avis"],
      ["kind" => "quick_reply", "text" => "Non merci"],
    ],
  ]),
]);
$res = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $res;

Python

import os, requests

res = requests.request(
    "POST",
    "https://wa-api.geskap.com/v1/templates",
    headers={"Authorization": f"Bearer {os.environ['GESKAP_API_KEY']}"},
    json={
        "name": "avis_commande",
        "language": "fr",
        "category": "UTILITY",
        "body_text": "Bonjour {{1}}, votre commande {{2}} est arrivée. Êtes-vous satisfait(e) de votre achat ?",
        "example_values": ["Awa", "1042"],
        "buttons": [
            {"kind": "quick_reply", "text": "Oui, je donne mon avis"},
            {"kind": "quick_reply", "text": "Non merci"},
        ],
    },
    timeout=15,
)
print(res.status_code, res.json())

Puis, après le clic, la note en menu (dans les 24 h, sans template) :

curl

curl -X POST "https://wa-api.geskap.com/v1/messages/interactive" \
  -H "Authorization: Bearer $GESKAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "+237690000002",
  "body": "Quelle note donnez-vous à votre commande 1042 ?",
  "list": {
    "button": "Voir les notes",
    "sections": [
      {
        "rows": [
          { "id": "note:5", "title": "⭐⭐⭐⭐⭐ Excellent" },
          { "id": "note:4", "title": "⭐⭐⭐⭐ Bien" },
          { "id": "note:3", "title": "⭐⭐⭐ Moyen" },
          { "id": "note:2", "title": "⭐⭐ Décevant" },
          { "id": "note:1", "title": "⭐ Mauvais" }
        ]
      }
    ]
  }
}'

Node.js

const res = await fetch("https://wa-api.geskap.com/v1/messages/interactive", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.GESKAP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "to": "+237690000002",
    "body": "Quelle note donnez-vous à votre commande 1042 ?",
    "list": {
      "button": "Voir les notes",
      "sections": [
        {
          "rows": [
            { "id": "note:5", "title": "⭐⭐⭐⭐⭐ Excellent" },
            { "id": "note:4", "title": "⭐⭐⭐⭐ Bien" },
            { "id": "note:3", "title": "⭐⭐⭐ Moyen" },
            { "id": "note:2", "title": "⭐⭐ Décevant" },
            { "id": "note:1", "title": "⭐ Mauvais" }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

PHP

$ch = curl_init("https://wa-api.geskap.com/v1/messages/interactive");
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("GESKAP_API_KEY"),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "to" => "+237690000002",
    "body" => "Quelle note donnez-vous à votre commande 1042 ?",
    "list" => [
      "button" => "Voir les notes",
      "sections" => [
        [
          "rows" => [
            ["id" => "note:5", "title" => "⭐⭐⭐⭐⭐ Excellent"],
            ["id" => "note:4", "title" => "⭐⭐⭐⭐ Bien"],
            ["id" => "note:3", "title" => "⭐⭐⭐ Moyen"],
            ["id" => "note:2", "title" => "⭐⭐ Décevant"],
            ["id" => "note:1", "title" => "⭐ Mauvais"],
          ],
        ],
      ],
    ],
  ]),
]);
$res = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $res;

Python

import os, requests

res = requests.request(
    "POST",
    "https://wa-api.geskap.com/v1/messages/interactive",
    headers={"Authorization": f"Bearer {os.environ['GESKAP_API_KEY']}"},
    json={
        "to": "+237690000002",
        "body": "Quelle note donnez-vous à votre commande 1042 ?",
        "list": {
            "button": "Voir les notes",
            "sections": [
                {
                    "rows": [
                        {"id": "note:5", "title": "⭐⭐⭐⭐⭐ Excellent"},
                        {"id": "note:4", "title": "⭐⭐⭐⭐ Bien"},
                        {"id": "note:3", "title": "⭐⭐⭐ Moyen"},
                        {"id": "note:2", "title": "⭐⭐ Décevant"},
                        {"id": "note:1", "title": "⭐ Mauvais"},
                    ],
                },
            ],
        },
    },
    timeout=15,
)
print(res.status_code, res.json())

Le clic sur un bouton de template arrive comme les autres : type: "text", text et button_id = le libellé du bouton. Voir Savoir quel bouton le client a touché et Notation de 1 à 5.

Attention
Piège : le template n'a que deux boutons au plus : n'y mettez pas les cinq notes. Les cinq notes passent en liste après le premier clic, quand la fenêtre de 24 h est ouverte.

Preuve — vérifié dans le code de l'API : templates.py, meta_webhooks.py, api_schemas.py.