> ## Documentation Index
> Fetch the complete documentation index at: https://docs.so-me.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Modèles WhatsApp Business depuis la CLI

> Créez, listez et supprimez des modèles de message WhatsApp Business, et envoyez des messages modèles depuis la CLI Social media studio.

Ces commandes encapsulent l'API `/v1/whatsapp/*`. Le périmètre est volontairement restreint — cycle de vie des modèles et envoi sortant de messages modèles. La connexion d'un WABA se fait uniquement dans le navigateur (OAuth) et reste dans le tableau de bord.

> [!NOTE]
>
> Toutes les commandes acceptent à la position `<account-id>` soit l'**UUID interne du compte social** (obtenu avec [`accounts:list`](/fr/cli/accounts)), soit l'**ID fournisseur Meta du WABA**. Le contrôleur v1 résout les UUID en ID fournisseur côté serveur.

## whatsapp:templates

Liste tous les modèles enregistrés sur un compte WhatsApp Business, avec leur statut (`APPROVED`, `PENDING`, `REJECTED`), leur catégorie, leur langue et la structure de leurs composants.

```bash theme={null}
so-me whatsapp:templates <account-id>
```

| Argument | Description |
| - | - |
| `<account-id>` | UUID du compte social WhatsApp (obtenu avec [`accounts:list`](/fr/cli/accounts)) ou ID fournisseur Meta du WABA **(obligatoire)** |

```bash Exemples theme={null}
# Full list
so-me whatsapp:templates e6be46a2-430a-41df-b180-b51527e954e3

# Only approved templates
so-me whatsapp:templates e6be46a2-... | jq '.data[] | select(.status == "APPROVED")'

# Just names + status as a table-ish view
so-me whatsapp:templates e6be46a2-... | jq -r '.data[] | "\(.status)\t\(.name)\t\(.language)"'

# Pass provider ID instead of UUID
so-me whatsapp:templates 1050417321480811
```

## whatsapp:create-template

Soumet un nouveau modèle à Meta pour approbation. L'approbation d'un modèle peut prendre de quelques minutes à quelques heures ; interrogez `whatsapp:templates` pour voir le statut passer de `PENDING` à `APPROVED`.

```bash theme={null}
so-me whatsapp:create-template --account <id> (--file <path> | --data <json>)
```

| Option | Description |
| - | - |
| `--account <id>` | UUID du compte WhatsApp ou ID fournisseur **(obligatoire)** |
| `-f, --file <path>` | Fichier JSON contenant la définition complète du modèle |
| `-d, --data <json>` | Chaîne JSON contenant la définition complète du modèle |

Fournissez la définition du modèle avec **soit** `--file`, **soit** `--data` (si les deux sont passés, `--file` l'emporte ; si aucun n'est passé, la commande échoue). La charge utile correspond au schéma de l'API WhatsApp Cloud de Meta. Champs minimaux :

* `name` — en minuscules, avec des tirets bas
* `language` — par ex. `en_US`
* `category` — `MARKETING`, `UTILITY` ou `AUTHENTICATION`
* `components[]` — `HEADER`, `BODY`, `FOOTER`, `BUTTONS`

La CLI fusionne `accountId` (issu de `--account`) dans la charge utile avant l'envoi ; vous n'avez donc pas besoin de l'inclure dans le JSON.

```json theme={null}
{
  "name": "order_shipped",
  "language": "en_US",
  "category": "UTILITY",
  "components": [
    { "type": "HEADER", "format": "TEXT", "text": "Order update" },
    { "type": "BODY", "text": "Hi {{1}}, your order #{{2}} has shipped." },
    { "type": "FOOTER", "text": "Thanks for shopping with us!" }
  ]
}
```

```bash Exemples theme={null}
# From a file
so-me whatsapp:create-template --account e6be46a2-... --file ./order_shipped.json

# Inline
so-me whatsapp:create-template --account e6be46a2-... --data '{
  "name": "welcome_v1",
  "language": "en_US",
  "category": "MARKETING",
  "components": [{ "type": "BODY", "text": "Welcome, {{1}}!" }]
}'
```

> [!WARNING]
>
> Les noms de modèles doivent être alphanumériques en minuscules avec des tirets bas (`^[a-z0-9_]+$`). Meta valide cette règle — un nom non conforme est rejeté immédiatement avec une erreur 400.

## whatsapp:delete-template

Supprime définitivement un modèle. Une fois supprimé, il ne peut pas être restauré ; vous devez le soumettre à nouveau sous un nouveau nom.

```bash theme={null}
so-me whatsapp:delete-template <account-id> <template-name> [-y]
```

| Argument | Description |
| - | - |
| `<account-id>` | UUID du compte social WhatsApp ou ID fournisseur **(obligatoire)** |
| `<template-name>` | Nom du modèle (`lowercase_underscored`) **(obligatoire)** |

| Option | Description |
| - | - |
| `-y, --yes` | Ignore la demande de confirmation |

Sans `-y`, la commande affiche `Delete template "<name>" on account <id>? (y/N)` et s'interrompt sauf si vous répondez `y`.

```bash Exemples theme={null}
# With confirmation
so-me whatsapp:delete-template e6be46a2-... old_template

# Skip prompt
so-me whatsapp:delete-template e6be46a2-... old_template -y

# Delete every REJECTED template (careful)
so-me whatsapp:templates e6be46a2-... \
  | jq -r '.data[] | select(.status == "REJECTED") | .name' \
  | xargs -I {} so-me whatsapp:delete-template e6be46a2-... {} -y
```

## whatsapp:send

Envoie un message modèle approuvé à un destinataire. C'est le moyen principal pour **initier** une conversation WhatsApp en dehors de la fenêtre de service client de 24 heures.

```bash theme={null}
so-me whatsapp:send <account-id> --to <phone> --template <name> --language <code> [--components <json>]
```

| Argument | Description |
| - | - |
| `<account-id>` | UUID du compte social WhatsApp ou ID fournisseur **(obligatoire)** |

| Option | Description |
| - | - |
| `--to <phone>` | Destinataire au format E.164 (par ex. `+15551234567`) **(obligatoire)** |
| `--template <name>` | Nom d'un modèle APPROVED **(obligatoire)** |
| `--language <code>` | Code de langue (par ex. `en_US`, `es`, `pt_BR`) **(obligatoire)** |
| `--components <json>` | Paramètres du modèle sous forme de chaîne JSON en ligne |
| `--file <path>` | Paramètres du modèle depuis un fichier JSON |

`--components` et `--file` sont tous deux facultatifs (un modèle sans variables n'en a besoin d'aucun). Si les deux sont fournis, `--file` est prioritaire.

Les paramètres des composants renseignent les variables (`{{1}}`, `{{2}}`, etc.) du modèle approuvé. La structure correspond à celle de l'API Cloud de Meta :

```json theme={null}
[
  {
    "type": "body",
    "parameters": [
      { "type": "text", "text": "Alice" },
      { "type": "text", "text": "1234" }
    ]
  }
]
```

```bash Exemples theme={null}
# Template with no variables
so-me whatsapp:send e6be46a2-... \
  --to +15551234567 --template welcome_v1 --language en_US

# Template with body variables
so-me whatsapp:send e6be46a2-... \
  --to +15551234567 --template order_shipped --language en_US \
  --components '[{"type":"body","parameters":[{"type":"text","text":"Alice"},{"type":"text","text":"ORD-1234"}]}]'

# Parameters from a file (easier for complex components)
so-me whatsapp:send e6be46a2-... \
  --to +15551234567 --template order_shipped --language en_US \
  --file ./order_components.json

# Broadcast loop (be mindful of Meta's messaging rate limits)
while read -r phone name; do
  so-me whatsapp:send e6be46a2-... \
    --to "$phone" --template welcome_v1 --language en_US \
    --components "[{\"type\":\"body\",\"parameters\":[{\"type\":\"text\",\"text\":\"$name\"}]}]"
done < recipients.tsv
```

> [!WARNING]
>
> L'envoi de modèles est facturé selon la grille tarifaire de WhatsApp Business de Meta. Testez toujours d'abord avec un seul destinataire. Les modèles non approuvés ou rejetés échouent avec une erreur 400.

## whatsapp:upload-media

Importe un média d'en-tête (image/vidéo/document) à utiliser dans le composant `HEADER` d'un modèle. Renvoie un identifiant de média que vous pouvez référencer lors de la création ou de l'envoi de modèles.

```bash theme={null}
so-me whatsapp:upload-media --account <id> --type <fileType> (--url <url> | --base64 <content>)
```

| Option | Description |
| - | - |
| `--account <id>` | UUID du compte WhatsApp ou ID fournisseur **(obligatoire)** |
| `--type <fileType>` | Type de fichier : `image`, `video` ou `document` **(obligatoire)** |
| `--url <url>` | URL publique du média à importer |
| `--base64 <content>` | Contenu du fichier encodé en base64 (alternative à `--url`) |

Fournissez exactement une des options `--url` ou `--base64` — la commande échoue si vous n'en indiquez aucune ou les deux.

```bash Exemples theme={null}
# From a public URL
so-me whatsapp:upload-media \
  --account e6be46a2-... --type image \
  --url https://cdn.example.com/hero.jpg

# From a local file (base64-encoded)
so-me whatsapp:upload-media \
  --account e6be46a2-... --type image \
  --base64 "$(base64 -w0 ./hero.jpg)"
```

## Vue d'ensemble

* Les **messages de session** (réponses dans les 24 heures suivant un message entrant) passent par [`inbox:reply`](/fr/cli/inbox) — aucun modèle n'est requis.
* Les **messages modèles** (premier contact ou hors de la fenêtre de 24 heures) utilisent `whatsapp:send` et nécessitent un modèle approuvé par Meta.
* La **connexion d'un compte WhatsApp Business** reste possible uniquement dans le navigateur — terminez l'OAuth dans le [tableau de bord](https://so-me.studio/fr) d'abord, puis vos scripts CLI pourront référencer le compte connecté.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.