curl -X POST "https://app.famulor.de/api/user/whatsapp/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"template_id": 45,
"recipient_phone": "+1234567890",
"recipient_name": "John Doe",
"variables": {
"1": "John",
"2": "January 15, 2026",
"3": "2:00 PM"
}
}'
curl -X POST "https://app.famulor.de/api/user/whatsapp/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"template_id": 46,
"recipient_phone": "+1234567890"
}'
const response = await fetch(
'https://app.famulor.de/api/user/whatsapp/send',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
template_id: 45,
recipient_phone: '+1234567890',
recipient_name: 'John Doe',
variables: {
'1': 'John',
'2': 'January 15, 2026',
'3': '2:00 PM'
}
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.famulor.de/api/user/whatsapp/send',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'template_id': 45,
'recipient_phone': '+1234567890',
'recipient_name': 'John Doe',
'variables': {
'1': 'John',
'2': 'January 15, 2026',
'3': '2:00 PM'
}
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"status": "queued"
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Template not found or does not belong to this sender",
"error_code": "TEMPLATE_NOT_FOUND"
}
{
"success": false,
"error": "Template is not approved. Current status: pending",
"error_code": "TEMPLATE_NOT_APPROVED"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
WhatsApp
Envoyer un modèle de message WhatsApp
Envoie un message WhatsApp à l’aide d’un modèle approuvé via Famulor
POST
/
user
/
whatsapp
/
send
curl -X POST "https://app.famulor.de/api/user/whatsapp/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"template_id": 45,
"recipient_phone": "+1234567890",
"recipient_name": "John Doe",
"variables": {
"1": "John",
"2": "January 15, 2026",
"3": "2:00 PM"
}
}'
curl -X POST "https://app.famulor.de/api/user/whatsapp/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"template_id": 46,
"recipient_phone": "+1234567890"
}'
const response = await fetch(
'https://app.famulor.de/api/user/whatsapp/send',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
template_id: 45,
recipient_phone: '+1234567890',
recipient_name: 'John Doe',
variables: {
'1': 'John',
'2': 'January 15, 2026',
'3': '2:00 PM'
}
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.famulor.de/api/user/whatsapp/send',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'template_id': 45,
'recipient_phone': '+1234567890',
'recipient_name': 'John Doe',
'variables': {
'1': 'John',
'2': 'January 15, 2026',
'3': '2:00 PM'
}
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"status": "queued"
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Template not found or does not belong to this sender",
"error_code": "TEMPLATE_NOT_FOUND"
}
{
"success": false,
"error": "Template is not approved. Current status: pending",
"error_code": "TEMPLATE_NOT_APPROVED"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
API Famulor 1.0 (héritée). Cette page concerne uniquement Famulor 1.0 (
app.famulor.de) et est conservée pour la compatibilité. Pour la plateforme actuelle, consultez la référence API Famulor 2.0.Ce point de terminaison est limité à 5 requêtes par seconde par utilisateur.
Corps de la requête
integer
requis
L’ID de l’expéditeur WhatsApp depuis lequel envoyer (obtenu via le point de terminaison Récupérer les expéditeurs)
integer
requis
L’ID du modèle de message à utiliser (obtenu via le point de terminaison Récupérer les modèles)
string
requis
Le numéro de téléphone du destinataire au format international (par ex.
+1234567890)string
Le nom du destinataire, 255 caractères maximum (utilisé pour le suivi des conversations et à des fins de CRM)
object
Paires clé-valeur pour les variables du modèle. Les clés doivent correspondre aux noms de variables du modèle. Si le modèle comporte les variables
{{1}}, {{2}}, etc., fournissez-les sous la forme {"1": "value1", "2": "value2"} ou en utilisant les clés nommées du tableau variables du modèle.Champs de réponse
boolean
Indique si le message a été envoyé avec succès
integer
L’ID de la conversation (nouvelle ou existante) associée à ce message
integer
L’ID de l’enregistrement du message de conversation
integer
L’ID de l’enregistrement du message WhatsApp
string
L’identifiant du message pour le suivi de la livraison
string
Le statut de livraison initial du message (par ex.
queued, sent)Réponses d’erreur
Afficher Réponse d'erreur
Afficher Réponse d'erreur
curl -X POST "https://app.famulor.de/api/user/whatsapp/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"template_id": 45,
"recipient_phone": "+1234567890",
"recipient_name": "John Doe",
"variables": {
"1": "John",
"2": "January 15, 2026",
"3": "2:00 PM"
}
}'
curl -X POST "https://app.famulor.de/api/user/whatsapp/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": 12,
"template_id": 46,
"recipient_phone": "+1234567890"
}'
const response = await fetch(
'https://app.famulor.de/api/user/whatsapp/send',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender_id: 12,
template_id: 45,
recipient_phone: '+1234567890',
recipient_name: 'John Doe',
variables: {
'1': 'John',
'2': 'January 15, 2026',
'3': '2:00 PM'
}
})
}
);
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://app.famulor.de/api/user/whatsapp/send',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'sender_id': 12,
'template_id': 45,
'recipient_phone': '+1234567890',
'recipient_name': 'John Doe',
'variables': {
'1': 'John',
'2': 'January 15, 2026',
'3': '2:00 PM'
}
}
)
print(response.json())
{
"success": true,
"conversation_id": 1234,
"message_id": 567,
"whatsapp_message_id": 890,
"message_sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"status": "queued"
}
{
"success": false,
"error": "Insufficient balance. Please top up your account.",
"error_code": "INSUFFICIENT_BALANCE"
}
{
"success": false,
"error": "Sender not found or does not belong to you",
"error_code": "SENDER_NOT_FOUND"
}
{
"success": false,
"error": "Template not found or does not belong to this sender",
"error_code": "TEMPLATE_NOT_FOUND"
}
{
"success": false,
"error": "Template is not approved. Current status: pending",
"error_code": "TEMPLATE_NOT_APPROVED"
}
{
"success": false,
"error": "Invalid phone number format. Use E.164 format (e.g., +14155551234).",
"error_code": "INVALID_PHONE"
}
{
"success": false,
"error": "Sender is not online. Current status: Offline",
"error_code": "SENDER_OFFLINE"
}
Remarques
- Les messages modèles doivent utiliser des modèles approuvés. Les modèles au statut
pendingourejectedéchoueront. - L’expéditeur doit être
online. Les expéditeurs hors ligne ne peuvent pas envoyer de messages. - Le coût des messages est automatiquement déduit du solde de votre compte Famulor (crédits pour les utilisateurs tenant, minutes pour les utilisateurs directs).
- Après l’envoi d’un message modèle, une fenêtre de messagerie de 24 heures s’ouvre. Pendant cette fenêtre, vous pouvez envoyer des messages libres sans avoir besoin d’un modèle.
- Si une conversation existe déjà avec le destinataire, le message est ajouté à la conversation existante.
- Limite de débit : 5 requêtes par seconde par utilisateur.