# Erreur WhatsApp 132001 : template introuvable

URL: https://wa.genuka.com/docs/errors/132001
Language: French

> Erreur WhatsApp 132001 (Template does not exist) : template absent dans cette langue ou non approuvé. Le piège en / en_US et les vérifications à faire.

L'erreur WhatsApp 132001 signifie que Meta ne trouve pas de template approuvé portant ce nom dans
cette langue, sur le compte WhatsApp Business qui envoie. Le plus souvent, c'est le code langue :
`en` et `en_US` sont deux templates différents. Vérifiez le nom, la langue exacte et le statut,
puis renvoyez.

## Que signifie l'erreur 132001 ?

> « The template does not exist in the specified language or the template has not been approved. »
> — [Meta, codes d'erreur de la Cloud API](https://developers.facebook.com/documentation/business-messaging/whatsapp/support/error-codes#other-errors)

Meta demande de vérifier que le template est approuvé, et que son nom et son code langue sont
exacts. Le titre associé au code dans le champ `message` est « Template does not exist »
([liste de 360dialog](https://docs.360dialog.com/docs/support/api-error-message-list)).

Trois règles de Meta expliquent la plupart des cas :

* **Un template est identifié par son nom et sa langue.** Créer le même nom dans plusieurs langues
  produit plusieurs templates, comptés séparément
  ([Meta, Templates](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview)).
* **Les codes langue sont exacts.** `en`, `en_US` et `en_GB` sont trois langues distinctes, comme
  `fr`, `fr_BE`, `fr_CA` et `fr_CH`
  ([Meta, Supported languages](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages)).
* **Un template appartient à un compte WhatsApp Business.** Il n'existe pas pour un numéro
  rattaché à un autre compte. Un template inactif depuis 12 mois ou plus est archivé, puis
  supprimé 28 jours plus tard s'il n'est pas désarchivé.

## Quand l'erreur 132001 apparaît-elle ?

* **La langue envoyée n'est pas celle du template**, par exemple `en_US` pour un template créé en
  `en`, ou `fr_CA` pour un template créé en `fr`.
* **La langue est omise d'un côté.** C'est le piège propre à l'API Genuka WA : sans `language`, un
  template est **créé** en `en`, mais un message est **envoyé** en `en_US`. Un template créé et
  envoyé sans préciser la langue tombe donc en 132001.
* **Le template n'est pas encore approuvé**, ou a été rejeté.
* **Le nom diffère** : faute de frappe, majuscule, suffixe `_v2` oublié.
* **Le numéro n'est pas sur le bon compte** : un template créé pour un client, envoyé depuis le
  numéro d'un autre.

### Où la voir dans Genuka WA ?

Genuka WA tient un miroir des templates créés par son intermédiaire, par l'API ou le tableau de
bord. Quand il connaît le template demandé, dans cette langue, il refuse l'envoi lui-même s'il
n'est pas approuvé, en nommant la raison. Quand il ne le connaît pas, par exemple un template créé
dans le WhatsApp Manager, la requête part chez Meta, qui l'envoie ou répond 132001.

| Situation                                       | Réponse de `POST /api/v1/messages`                                                                                                                                                                                            |
| ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Template inconnu de Genuka WA dans cette langue | `400`, `"error": "send_template"`, `meta.code: 132001` (réponse de Meta)                                                                                                                                                      |
| Template connu, en cours d'examen               | `400`, `"error": "send_template"`, `message` : `Template "x" is still under review by Meta`                                                                                                                                   |
| Template connu, rejeté                          | `400`, `"error": "send_template"`, `message` : `Template "x" was rejected during review and cannot be sent`, suivi du motif                                                                                                   |
| Template connu, en pause ou désactivé           | `400`, `"error": "send_template"`, `meta.code` : [132015](https://wa.genuka.com/docs/errors/132015) ou 132016. Ce 132016 peut aussi signaler un template que Meta a seulement signalé (`FLAGGED`) : relisez-le, voir [132015](https://wa.genuka.com/docs/errors/132015) |

À la création d'une campagne, un template et un numéro qui n'appartiennent pas au même client sont
refusés d'emblée avec `400 template_connection_mismatch`.

## Comment corriger l'erreur 132001 ?

1. **Relisez vos templates** avec `GET /api/v1/templates?sync=true`, filtré par `companyId` si
   besoin : chaque ligne donne `name`, `language` et `status`, à jour. Cette liste ne contient que
   les templates créés via Genuka WA : la synchronisation met à jour leur statut, mais n'importe pas
   ceux créés dans le WhatsApp Manager. Pour ceux-là, vérifiez nom, langue et statut dans le
   WhatsApp Manager.
2. **Comparez caractère par caractère** le nom et la langue de la ligne voulue avec ce que votre code
   envoie.
3. **Agissez selon le statut** : `pending`, attendez l'examen ; `rejected`, corrigez puis soumettez à
   nouveau ; absent dans cette langue, y compris dans le WhatsApp Manager, créez la traduction avec
   `POST /api/v1/templates`, même nom, nouvelle `language`.
4. **Renvoyez en précisant toujours `language`**, avec exactement la valeur de la ligne trouvée.

**curl**

```bash
curl "https://wa.genuka.com/api/v1/templates?sync=true&companyId=cmp_1&status=approved" \
  -H "Authorization: Bearer $GENUKA_WA_API_KEY"
# { "data": [ { "id": "tpl_1", "name": "suivi_commande", "language": "fr", "status": "approved", ... } ] }
```

**Node.js**

```ts
/**
 * La langue exacte sous laquelle un template créé via Genuka WA est approuvé, ou une erreur
 * explicite. Un template créé dans le WhatsApp Manager n'est pas dans cette liste.
 */
export async function approvedLanguage(companyId: string, name: string, wanted: string) {
  const url = new URL("https://wa.genuka.com/api/v1/templates");
  url.search = new URLSearchParams({ sync: "true", companyId, status: "approved" }).toString();

  const response = await fetch(url, {
    headers: { Authorization: `Bearer ${process.env.GENUKA_WA_API_KEY}` },
  });
  const { data } = (await response.json()) as { data: { name: string; language: string }[] };

  const languages = data.filter((t) => t.name === name).map((t) => t.language);
  if (languages.includes(wanted)) return wanted;
  throw new Error(
    languages.length === 0
      ? `"${name}" absent des templates approuvés de Genuka WA (vérifiez le WhatsApp Manager)`
      : `"${name}" est approuvé en ${languages.join(", ")}, pas en ${wanted}`,
  );
}
```

**Python**

```python
import os
import requests


def approved_language(company_id: str, name: str, wanted: str) -> str:
    """La langue exacte sous laquelle un template créé via Genuka WA est approuvé.

    Un template créé dans le WhatsApp Manager n'est pas dans cette liste.
    """
    response = requests.get(
        "https://wa.genuka.com/api/v1/templates",
        params={"sync": "true", "companyId": company_id, "status": "approved"},
        headers={
            "Authorization": f"Bearer {os.environ['GENUKA_WA_API_KEY']}",
            "User-Agent": "acme-crm/1.0 (+https://example.com)",
        },
        timeout=60,
    )
    response.raise_for_status()
    languages = [t["language"] for t in response.json()["data"] if t["name"] == name]
    if wanted in languages:
        return wanted
    if not languages:
        raise LookupError(f'"{name}" absent des templates approuvés de Genuka WA (vérifiez le WhatsApp Manager)')
    raise LookupError(f'"{name}" est approuvé en {", ".join(languages)}, pas en {wanted}')
```

**PHP**

```php
<?php
$query = http_build_query(["sync" => "true", "companyId" => "cmp_1", "status" => "approved"]);
$ch = curl_init("https://wa.genuka.com/api/v1/templates?{$query}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => "acme-crm/1.0 (+https://example.com)",
    CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("GENUKA_WA_API_KEY")],
]);
$templates = json_decode(curl_exec($ch), true)["data"];
curl_close($ch);

foreach ($templates as $template) {
    echo "{$template['name']} [{$template['language']}] {$template['status']}\n";
}
```

## Comment éviter l'erreur 132001 ?

* **Stockez le couple nom + langue**, jamais le nom seul, dans votre configuration.
* **Envoyez toujours `language`**, même quand vous pensez que la valeur par défaut convient : elle
  n'est pas la même à la création (`en`) et à l'envoi (`en_US`).
* **Créez chaque langue dont vous avez besoin** : un envoi en `fr_BE` échoue si seul le template
  `fr` existe. Le plus simple est souvent de n'utiliser qu'un code par langue, `fr` ou `en`.
* **Écoutez le webhook `message_template_status_update`** et n'utilisez un nouveau template qu'une
  fois approuvé ; `GET /api/v1/templates?sync=true` répare un statut resté en retard.

## Quels codes sont liés ?

* [132000](https://wa.genuka.com/docs/errors/132000) : le template est trouvé, mais le nombre de variables ne
  correspond pas.
* [132015](https://wa.genuka.com/docs/errors/132015) : le template existe et a été approuvé, mais il est en pause.
* [131047](https://wa.genuka.com/docs/errors/131047) : la fenêtre de 24 heures est fermée, raison habituelle du passage
  au template.

## FAQ

### Mon template est approuvé dans le WhatsApp Manager, pourquoi 132001 ?

Trois suspects, dans l'ordre : le code langue envoyé n'est pas exactement celui du template, le
numéro qui envoie appartient à un autre compte WhatsApp Business, ou le nom diffère d'un
caractère.

### `en` et `en_US`, est-ce la même langue pour Meta ?

Non. Ce sont deux codes distincts dans la liste de Meta, donc deux templates distincts. Un
template créé en `en` ne répond pas à un envoi en `en_US`.

### Un template peut-il disparaître sans que je le supprime ?

Oui. Meta archive un template inactif depuis 12 mois ou plus, puis le supprime 28 jours plus tard
s'il n'est pas désarchivé. Un template de relance rarement utilisé est le candidat typique.

## Sources

* [Meta — Error codes](https://developers.facebook.com/documentation/business-messaging/whatsapp/support/error-codes)
* [Meta — Templates overview](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview)
* [Meta — Supported languages](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages)
* [360dialog — API error message list](https://docs.360dialog.com/docs/support/api-error-message-list)
