POST /v1/actions/send-text-message
Envoie un message texte libre à un contact pendant la fenêtre de service client de 24 heures.
Envoie un message texte libre. Valable uniquement à l'intérieur de la fenêtre de service client de 24 heures — c'est-à-dire que le contact vous a envoyé un message dans les dernières 24 heures.
Si la fenêtre est fermée, Meta rejette le message avec le code 131047 (Re-engagement message). Utilisez send-template-message pour réengager.
POST /api/v1/actions/send-text-message
Corps de la requête
| Champ | Type | Requis | Notes |
|---|---|---|---|
phone |
string | oui | Format international avec + |
message |
string | oui | Jusqu'à 4096 caractères. Prend en charge le balisage WhatsApp (*bold*, _italic_, ~strike~, `code`). |
curl -X POST https://www.qyvo.io/api/v1/actions/send-text-message \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{
"phone": "+14155550123",
"message": "Yes, we ship to Canada — flat rate $14 CAD."
}'
fetch('https://www.qyvo.io/api/v1/actions/send-text-message', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.QYVO_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
phone: '+14155550123',
message: 'Yes, we ship to Canada — flat rate $14 CAD.',
}),
});
Http::withToken(env('QYVO_TOKEN'))
->post('https://www.qyvo.io/api/v1/actions/send-text-message', [
'phone' => '+14155550123',
'message' => 'Yes, we ship to Canada — flat rate $14 CAD.',
])->json();
httpx.post(
'https://www.qyvo.io/api/v1/actions/send-text-message',
headers={'Authorization': f"Bearer {os.environ['QYVO_TOKEN']}"},
json={'phone': '+14155550123', 'message': 'Yes, we ship to Canada — flat rate $14 CAD.'},
).raise_for_status()
Réponse — 200 OK
{
"id": "01J1Z...",
"status": "sent",
"whatsapp_message_id": "wamid.HBgL...",
"contact_id": "01J1Y..."
}
Erreurs
| Statut | Cause |
|---|---|
422 |
Message rejeté par Meta — le plus souvent 131047 Re-engagement message (fenêtre fermée). Passez à un template. |
422 |
No WhatsApp account configured — onboardez d'abord un numéro |
422 |
Erreur de validation (téléphone vide, message > 4096 caractères) |
Pourquoi la fenêtre compte
La politique de Meta distingue :
- Texte libre — autorisé uniquement quand le contact vous a écrit dans les dernières 24 h. Gratuit.
- Templates — pré-approuvés par Meta, peuvent être envoyés à tout moment. Facturés par catégorie (utility, marketing, authentication).
Si vous ne savez pas si la fenêtre est ouverte, regardez le last_message_at du contact (renvoyé par get-contact). S'il est plus ancien que 24 h, envoyez un template.
