Erreurs
Forme des réponses d'erreur Qyvo, codes de statut HTTP et codes d'erreur Meta WhatsApp que vous pouvez rencontrer.
Qyvo renvoie des codes de statut HTTP conventionnels et une forme JSON d'erreur stable. Lorsqu'un envoi échoue parce que Meta a rejeté le message, le code d'erreur Meta sous-jacent est propagé pour que vous puissiez le gérer proprement.
Forme de l'erreur
Chaque réponse d'erreur est en JSON avec au minimum un champ error :
{
"error": "Template not found"
}
Les échecs de validation (format Laravel) incluent un message et une carte errors indexée par champ :
{
"message": "The given data was invalid.",
"errors": {
"phone": ["The phone field is required."],
"template_id": ["The template id must be a valid UUID."]
}
}
Certains endpoints ajoutent des détails structurés pour vous aider à corriger le problème dans le code :
{
"error": "Template requires variables that were not provided.",
"expected_placeholders": ["1", "2"],
"missing": ["2"]
}
Codes de statut HTTP
| Code | Signification | Quand vous le voyez |
|---|---|---|
200 |
OK | Lecture ou envoi réussi |
201 |
Created | Création de ressource (contact, session de séquence, …) |
401 |
Unauthenticated | En-tête Authorization manquant ou invalide, jeton révoqué |
403 |
Forbidden | Jeton valide mais sans le scope requis (rare aujourd'hui — chaque jeton possède mcp) |
404 |
Not found | La ressource n'existe pas ou n'appartient pas à votre tenant |
422 |
Unprocessable | Validation échouée, règle métier rejetée, ou aucun compte WhatsApp configuré |
429 |
Too many requests | Quota dépassé — voir Limites de débit |
5xx |
Erreur serveur | Transitoire — réessayez avec un backoff |
Erreurs Qyvo courantes
| Statut | Texte error |
Pourquoi |
|---|---|---|
401 |
Unauthenticated. |
Jeton manquant/erroné/révoqué |
404 |
Personal access client not found |
Problème d'installation backend — contactez le support |
404 |
Contact not found |
Le téléphone ou le contact_id ne correspond à aucun contact dans votre tenant |
404 |
Template not found |
L'UUID template_id n'existe pas dans votre tenant |
404 |
Sequence not found or not published |
La séquence est en brouillon — publiez-la d'abord |
404 |
Flow not found or not published |
Idem pour les flows |
422 |
No workspace configured for this account. |
L'utilisateur derrière le jeton n'a pas de tenant |
422 |
No WhatsApp account configured |
Le tenant n'a pas de ligne WabaAccount — onboardez d'abord un numéro |
422 |
Either contact_id or phone is required |
L'endpoint accepte l'un ou l'autre ; vous n'avez envoyé ni l'un ni l'autre |
422 |
Template requires variables that were not provided. |
Le corps a des {{1}} etc. mais vous ne les avez pas passés dans variables |
422 |
Template has no approved translation to send. |
Le template est en PENDING ou REJECTED chez Meta |
Codes d'erreur Meta WhatsApp
Lorsque l'envoi atteint réellement Meta et échoue, le message d'erreur Meta remonte dans le champ error d'une réponse 422. Les plus fréquents :
| Code Meta | Signification | Quoi faire |
|---|---|---|
132001 |
Le nom du template n'existe pas dans cette langue | Synchronisez les templates et confirmez que la langue a une traduction APPROVED. Voir l'outil MCP sync_templates. |
132012 |
Le format du paramètre ne correspond pas | Le nombre ou les types de vos variables ne correspondent pas au corps du template — vérifiez les placeholders du template |
131026 |
Message non délivrable | Le téléphone destinataire n'est pas sur WhatsApp, ou n'a pas opt-in |
131047 |
Re-engagement message | La fenêtre de service client de 24 heures est fermée. Envoyez un template au lieu d'un texte libre. |
131051 |
Type de message non pris en charge | Vous avez envoyé une URL de média rejetée par Meta (taille, format, hôte) |
131056 |
Limite de débit par paire atteinte | Limite Meta par paire (expéditeur→destinataire). Backoff et réessayez. |
133010 |
Numéro de téléphone non enregistré | Le numéro WhatsApp Business n'est pas enregistré sur Cloud API du côté Meta |
Idempotence
L'API Qyvo ne prend pas en charge actuellement un en-tête Idempotency-Key. Deux appels consécutifs à send-template-message avec le même payload enverront deux messages.
Pour dédupliquer de votre côté :
- Sur
create-contact, l'endpoint est upsert par(tenant_id, phone)— appeler deux fois avec le même téléphone renvoie le contact existant, pas de doublons. - Sur
trigger-sequence/trigger-flow, une session running existante pour la même paire(sequence_id, contact_id)renvoie{status: "already_running"}au lieu d'en démarrer une seconde. - Sur les envois de messages, dédupliquez au niveau applicatif (p. ex. verrou sur
order_idavant d'appelersend-template-message).
Conseils de débogage
curl -ipour voir les en-têtes —X-RateLimit-Remaining,Retry-After, request id.- L'Inbox du tableau de bord montre les derniers messages
failedavec la mêmeerrorrenvoyée par Meta. Si un envoi renvoie422, le message apparaît également là avecstatus: failedpour la traçabilité d'audit. - Les templates en
PENDINGouREJECTEDne s'enverront pas ; vérifiez Paramètres → WhatsApp → Templates et resynchronisez depuis Meta.
