Comment envoyer le consentement à Klaviyo via Zapier
Objectif de cet article
Découvrez comment créer un webhook Zapier personnalisé pour transmettre le consentement pour l’envoi de SMS à Klaviyo. Vous pouvez facilement modifier les instructions de ce guide pour également transmettre un consentement pour l’envoi d’e-mails.
Les étapes ci-dessous vous aideront à créer un Zap à l’aide d’un webhook (également appelé « catch hook ») qui déclenche l’action d’un script Python. L’exemple met à jour le consentement au marketing par SMS. Inclure une adresse e-mail dans la demande n’abonne pas le profil au marketing par e-mail.
Cette configuration nécessite un forfait Zapier payant qui inclut webhook par Zapier.
À propos de l’intégration
Cette intégration n’est pas entièrement prise en charge par Klaviyo, mais peut être utilisée comme solution de contournement si nécessaire. Nous vous recommandons de n’utiliser cette intégration que si vous avez des développeurs dans votre équipe qui peuvent s’en charger.
Ce guide utilise une action de code Zapier qui exécute un script Python lorsque le déclencheur est détecté. Cette solution vous permet de mapper des champs vers les types de données requis par les points de terminaison de Klaviyo, en particulier pour l’abonnement de profils et le désabonnement de profils.
Avant de commencer
Configurez les SMS dans Klaviyo avec un numéro d’envoi pour le pays de votre destinataire test. Utilisez un vrai numéro de mobile et une adresse e-mail que vous contrôlez : le test de l’action de code modifie le consentement dans votre compte Klaviyo.
Ayez une clé d’API privée Klaviyo avec les autorisations lists:write, profiles:write et subscriptions:write. Consultez comment gérer les clés d’API de votre compte.
Si votre compte utilise le filtrage par âge SMS, étendez la demande d’abonnement pour inclure age_gated_date_of_birth avant d’utiliser cet exemple. L’exemple ci-dessous ne collecte ni n’envoie de date de naissance.
Configurer le webhook de Zapier
Pour obtenir les instructions de configuration actuelles de Zapier, consultez ses guides sur les déclencheurs de webhook et les actions de code Python.
- Connectez-vous à votre compte Zapier.
- Depuis la page principale de Zapier, sélectionnez +Create, puis Zap.
- Saisissez un nom pour votre nouveau Zap (par exemple, « Webhook Klaviyo »).
- Cliquez sur l’étape Déclencheur, puis recherchez et sélectionnez webhook par Zapier.

- Dans le menu déroulant Événement, sélectionnez Catch Hook.

- Cliquez sur Continue. Pour les données de test plates utilisées dans ce guide, laissez Sélectionner une clé enfant désactivée vide, puis cliquez à nouveau sur Continuer.
- Sélectionnez l’onglet Test.
- Copiez l’URL du webhook que Zapier vous fournit pour envoyer vos demandes.

- Configurez l’application qui collecte le consentement afin d’envoyer les changements de consentement vers cette URL de webhook, y compris les champs
email,phone_numberetsms_consentutilisés ci-dessous. Suivez la documentation de cette application pour configurer son webhook sortant. - Avant de procéder aux tests, vous devez envoyer des données de test à votre webhook. Pour en savoir plus, consultez notre guide Comment envoyer des données de test à Zapier. Veillez à formater les numéros de téléphone au format E.164, en incluant le signe + et l’indicatif du pays, lorsque vous envoyez des données de test.
- Une fois que vous avez envoyé les données de test au webhook, cliquez sur Déclencheur de test (dans l’onglet Test).

- Si la demande aboutit, vous verrez un message de réussite et les données du test s’afficheront sous le message de réussite, comme dans l’exemple ci-dessous :

- Une fois que votre déclencheur fonctionne, cliquez sur Continue with selected record.
Configurer une action Zapier
- Ajoutez une étape d’action, puis recherchez et sélectionnez Code by Zapier.

- Dans le menu déroulant Événement, sélectionnez Exécuter Python.

- Cliquez sur Continue.
Configurer le mappage des champs et créer une logique de script
- Dans Données d’entrée, mappez
email,phone_numberetsms_consentaux champs correspondants dans vos données de test. Saisissez les clés exactement comme indiqué. Le champnamedans les données de l’exemple n’est pas utilisé par ce script.

Données d’entrée | Données de test mappées |
| 1. Email: <E-mail test> |
| 1. Phone Number: <Numéro de téléphone test> |
| 1. Sms Consent: true |
| 1. Name: <Nom test> |
N’envoyez true que dans le cadre d’un opt-in explicite au marketing par SMS. N’envoyez false que dans le cadre d’une demande de se désabonner des SMS : cela révoque le consentement au marketing par SMS dans l’ensemble de votre compte et supprime le profil de la liste sélectionnée. N’utilisez pas false avec une valeur de consentement vide ou inconnue.
- Ajoutez un script comme celui-ci dans la zone de code :
import requests
sms_consent = str(input_data.get("sms_consent", "")).strip().lower()
if sms_consent not in ("true", "false"):
raise ValueError("sms_consent must be true or false")
# Configure the SMS marketing subscribe or unsubscribe request.
if sms_consent == "true":
url = "https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs/"
payload = {
"data": {
"type": "profile-subscription-bulk-create-job",
"attributes": {
"profiles": {
"data": [{
"type": "profile",
"attributes": {
"email": input_data["email"],
"phone_number": input_data["phone_number"],
"subscriptions": {
"sms": {"marketing": {"consent": "SUBSCRIBED"}}
}
}
}]
}
},
"relationships": {
"list": {"data": {"type": "list", "id": "LIST_ID"}}
}
}
}
else:
url = "https://a.klaviyo.com/api/profile-subscription-bulk-delete-jobs/"
payload = {
"data": {
"type": "profile-subscription-bulk-delete-job",
"attributes": {
"profiles": {
"data": [{
"type": "profile",
"attributes": {
"email": input_data["email"],
"phone_number": input_data["phone_number"],
"subscriptions": {
"sms": {"marketing": {"consent": "UNSUBSCRIBED"}}
}
}
}]
}
},
"relationships": {
"list": {"data": {"type": "list", "id": "LIST_ID"}}
}
}
}
headers = {
"accept": "application/json",
"revision": "2026-07-15",
"content-type": "application/json",
"Authorization": "Klaviyo-API-Key your-private-api-key"
}
response = requests.post(url, json=payload, headers=headers, timeout=10)
response.raise_for_status()
# Zapier requires an output object.
output = {
"status_code": response.status_code,
"response text": response.text
}- Remplacez
your-private-api-keypar votre clé d’API privée Klaviyo.
Traitez les clés d’API privées comme des mots de passe : conservez-les en lieu sûr et ne les dévoilez jamais au public.
- Remplacez
LIST_IDaux deux emplacements par l’identifiant de votre liste Klaviyo. Dans Klaviyo, accédez à Audience > Listes et segments, ouvrez la liste, puis sélectionnez Paramètres > Détails pour copier l’ identifiant de la liste. - Consultez Paramètres > Consentement > Processus d’opt-in pour cette liste. Pour vous abonner sans confirmation, sélectionnez Single opt-in, puis cliquez sur Enregistrer. Avec le double opt-in, complétez toute confirmation SMS envoyée à votre numéro de test avant de vérifier son abonnement.
- Cliquez sur Continue, puis sur Test step.
- Vérifiez que la sortie affiche
status_code202. Cela signifie que Klaviyo a accepté la demande de traitement ; cela ne confirme pas que la mise à jour du consentement est terminée. Un corps de réponse vide est attendu.

- Dans Klaviyo, vérifiez que votre profil de test a été ajouté à la liste sélectionnée, puis ouvrez le profil et confirmez qu’il est abonné au marketing par SMS. Si un message de confirmation a été envoyé, terminez d’abord cette confirmation.

- Testez le parcours de désabonnement avec le même profil de test : envoyez une nouvelle requête webhook avec
sms_consentdéfini surfalse, sélectionnez ce nouvel enregistrement de déclenchement dans Zapier, puis testez à nouveau l’étape de code. Confirmez dans Klaviyo que le profil s’est désabonné du marketing par SMS et a été supprimé de la liste sélectionnée. - Une fois les deux tests réussis, cliquez sur Publier pour publier votre zap. Si un test n’aboutit pas, consultez nos conseils de dépannage des problèmes les plus courants.
Adaptez l’exemple pour le consentement à l’e-mail
Pour une version uniquement e-mail de ce Zap :
- Mappez une entrée
email_consentà partir de votre source, puis remplacezsms_consentparemail_consentdans l’ensemble du script. Utiliseztruepour un consentement explicite au marketing par e-mail etfalsepour une demande de se désabonner d’un e-mail. - Dans les deux charges utiles de la requête, remplacez la clé
smssoussubscriptionsparemail. Conservez le champemaildu destinataire et supprimez le champphone_numberdes deux charges utiles. - Testez les deux parcours de consentement à l’e-mail avant de publier la version e-mail de votre Zap. Vérifiez le consentement à l’e-mail sur le profil, et effectuez toute confirmation d’abonnement à l’e-mail envoyée pendant le test d’abonnement.
Résolution de problèmes
Les points suivants sont des problèmes courants que vous pouvez rencontrer lors de la configuration du webhook de Zapier. Si vous rencontrez d’autres problèmes, contactez la communauté Klaviyo pour obtenir des conseils supplémentaires.
EOL lors de l’analyse d’une chaîne de caractères littérale (« EOL while scanning string literal »)
Si vous voyez cette erreur, c’est qu’il manque un guillemet au niveau de l’une de vos variables. Vérifiez que l’ID de la liste et la clé d’API privée sont entourés de guillemets.
Syntaxe non valide (« SyntaxError: invalid syntax »)
Si vous voyez cette erreur, vérifiez que les sauts de ligne, l’indentation, les guillemets et les crochets du code correspondent à l’exemple. En particulier, les affectations url et payload doivent se trouver sur des lignes distinctes. Les lignes commençant par # sont des commentaires Python valides et n’ont pas besoin d’être supprimées.
Ressources supplémentaires
- Comment gérer les clés d’API de votre compte
Découvrez comment accéder aux clés d’API de votre compte Klaviyo et les gérer.
- Comment envoyer des données de test à Zapier
Découvrez comment envoyer des données de test à Zapier via une requête POST lors de la création d’un webhook pour transmettre à Klaviyo le consentement à l’envoi d’e-mails et de SMS.