# Messages texte WhatsApp

Le texte brut est le type de contenu libre le plus simple : un corps sans pièce jointe, et un aperçu facultatif pour le premier lien qu'il contient.

## Envoyer un message texte

Définissez `text.body` :

**TypeScript**

```typescript
const msg = await bird.whatsapp.send({
  to: "+16505551234",
  from: "+13124495648",
  text: { body: "Your driver is 2 minutes away." },
});
console.log(msg.id, msg.status);
```

Examples: [TypeScript](/fr-fr/documentation/guides/whatsapp/message-types/plain-text.ts.md) · [Python](/fr-fr/documentation/guides/whatsapp/message-types/plain-text.py.md) · [Go](/fr-fr/documentation/guides/whatsapp/message-types/plain-text.go.md) · [PHP](/fr-fr/documentation/guides/whatsapp/message-types/plain-text.php.md) · [CLI](/fr-fr/documentation/guides/whatsapp/message-types/plain-text.cli.md) · [MCP](/fr-fr/documentation/guides/whatsapp/message-types/plain-text.mcp.md) · [cURL](/fr-fr/documentation/guides/whatsapp/message-types/plain-text.curl.md)

La structure complète ajoute `preview_url` ainsi que les champs que tout envoi libre peut contenir :

```json
{
  "to": "+16505551234",
  "from": "+13124495648",
  "text": {
    "body": "Your order shipped: https://example.com/track/A1B2C3",
    "preview_url": true
  },
  "in_reply_to_message_id": "wam_01kya19eknftrs2s6p82asmvnh",
  "tags": [{ "name": "category", "value": "shipping" }],
  "metadata": { "order_id": "A1B2C3" }
}
```

`from` est requis sur chaque message de service : un numéro appartenant à votre espace de travail, et non un numéro géré par Bird. `in_reply_to_message_id` cite un message antérieur dans la même conversation ; consultez [Citer un message](/docs/guides/whatsapp/sending-whatsapp#quoting-a-message) pour savoir ce qu'il résout et ce qu'il peut manquer.

## Limites

| Champ         | Limite                      | Appliquée par                 |
| ------------- | --------------------------- | ----------------------------- |
| `body`        | 1 à 4 096 caractères        | Bird, à l'acceptation (`422`) |
| `preview_url` | booléen, par défaut `false` | N/A, informatif               |

Un `body` composé uniquement d'espaces passe la validation `minLength: 1` du schéma, mais Bird le détecte quand même : un `body` vide après suppression des espaces est refusé avec `422` [`E15015`](/docs/api/errors/E15015) `WhatsAppContentRequired`. Un corps dépassant 4 096 caractères est refusé avec une simple `422` et aucun code de catalogue dédié.

## Lire un message texte entrant

Un message texte entrant contient le même champ `text.body`, et rien d'autre sur cette branche. Consultez [Recevoir des messages texte WhatsApp](/docs/guides/whatsapp/receiving-whatsapp/plain-text) pour la lecture entrante complète, le payload `whatsapp.received`, et les points à surveiller.

## Limites et cas particuliers

- **La fenêtre de service client doit être ouverte.** Le texte brut est un message de service, livrable uniquement dans une fenêtre ouverte ; consultez la [fenêtre de service client](/docs/guides/whatsapp/message-types#the-customer-service-window) du hub.
- **`preview_url` n'affecte que le premier lien, et uniquement ce que le client du destinataire affiche.** Sa valeur par défaut est `false`. Activez-le pour afficher un aperçu de la première URL dans `body` ; une URL ultérieure dans le même corps n'en reçoit jamais. Si le client du destinataire ne peut pas récupérer d'aperçu pour ce lien, il revient silencieusement à un lien cliquable simple. Rien à la lecture ne vous indique si un aperçu a réellement été affiché.
- **Le markdown WhatsApp est un rendu du client du destinataire pour `body`, pas une partie du contrat API.** Bird transmet `body` tel quel ; il ne valide, ne supprime ni n'encode `*bold*`, `_italic_`, `~strikethrough~`, ni le monospace à triple backtick. L'affichage de ces marqueurs dépend entièrement du client qui ouvre le message.
- **Un `body` entrant n'est pas garanti non vide, malgré ce qu'indique le schéma de lecture.** Meta peut signaler un message entrant comme `"text": {}` ou avec un `body` vide, et Bird le stocke tel quel au lieu de générer un substitut. C'est un écart connu et ouvert : n'écrivez pas un consommateur qui fait confiance au `required: body` du schéma ici.

## Étapes suivantes

- [Messages de service WhatsApp](/docs/guides/whatsapp/message-types) : la fenêtre de service client et le modèle commun à tous les messages de service
- [Envoyer des messages WhatsApp](/docs/guides/whatsapp/sending-whatsapp) : l'enveloppe de requête, le modèle `202`, et les réessais sûrs
- [Messages interactifs](/docs/guides/whatsapp/message-types/interactive) : quand vous voulez un appui au lieu d'une réponse saisie

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/products/whatsapp) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
