Ce qu'il vous faut
- Un compte Make.com avec des connexions Typeform et Google Sheets
- Un formulaire Typeform pour lequel au moins une réponse de test a déjà été envoyée
- Une feuille Google avec une ligne d'en-têtes, par exemple : Response ID, Submitted at, Name, Email, Service, Budget, Message
- Cinq minutes pour envoyer une réponse de test supplémentaire en laissant vides les questions facultatives
Construction pas à pas
1. Ajoutez le déclencheur : Typeform – Watch Responses
Créez un nouveau scénario et ajoutez Typeform – Watch Responses. Make en propose deux versions : une instantanée, signalée par une icône d'éclair, pour laquelle vous cliquez sur Create a webhook et Typeform prévient Make dès qu'une réponse est envoyée, et une planifiée, qui interroge Typeform selon le planning du scénario. Pour ce montage, la version instantanée convient. Connectez votre compte Typeform et sélectionnez le formulaire. Avec la version planifiée, choisissez pour le premier test une réponse précise déjà existante comme point de départ ; avec la version instantanée, cliquez sur Run once puis envoyez une nouvelle réponse de test.
2. Lancez Run once et lisez la sortie
Cliquez sur Run once et ouvrez la bulle. Vous devriez voir l'ID de la réponse, l'heure de soumission et les réponses. Selon la version, Make affiche soit chaque question avec son titre comme champ distinct, soit un seul tableau de réponses, chacune avec une référence de champ et une valeur typée (texte, e-mail, choix, nombre, booléen). Si les champs n'apparaissent pas, envoyez d'abord une nouvelle réponse de test, car Make apprend la structure du formulaire à partir de données réelles.
3. Vérifiez d'abord s'il existe déjà une ligne
Ajoutez Google Sheets – Search Rows. Choisissez le classeur et l'onglet, et filtrez la colonne Response ID sur l'ID de réponse issu du déclencheur. Réglez la limite sur 1.
4. Rendez le résultat exploitable : Tools – Numeric aggregator
Une recherche sans résultat arrête le scénario à cet endroit, ce qui le ferait aussi pour chaque nouvelle réponse. Un Numeric aggregator placé après la recherche produit tout de même un bundle, et le scénario continue. Indiquez la recherche comme module source et utilisez la fonction Count. Par défaut, un agrégateur renvoie un résultat même si aucun bundle ne lui parvient : une nouvelle réponse donne donc 0 et l'exécution continue. Laissez désactivée l'option avancée Stop processing after an empty aggregation.
5. Filtre : ne continuer que si le compte vaut 0
Cliquez sur le lien après l'agrégateur et ajoutez un filtre : le résultat de l'agrégateur égal à 0. Si une ligne portant cet ID de réponse existe déjà, l'exécution se termine ici sans bruit.
6. Ajoutez la ligne : Google Sheets – Add a Row
Mappez chaque colonne :
- Response ID : l'ID de réponse du déclencheur (le champ peut s'appeler token)
- Submitted at :
{{formatDate(1.submitted_at; "YYYY-MM-DD HH:mm")}} - Name, Email, Service, Budget, Message : les réponses correspondantes
Si votre version du module affiche un champ par question, faites-les glisser directement. Si elle affiche un tableau de réponses, récupérez chaque valeur avec map() et get(), en filtrant le tableau selon la référence de champ de la question, par exemple :
{{get(map(1.answers; "text"; "field.ref"; "email_question"); 1)}}
Testez cette formule exacte avec Run once avant de vous y fier, car les noms de propriétés peuvent différer d'une version à l'autre. Fixer des références sur vos questions dans Typeform la rend beaucoup moins fragile que de s'appuyer sur les titres.
7. Gérez les questions facultatives
Une question facultative ignorée n'apparaît généralement pas du tout dans les réponses, donc la valeur mappée arrive vide. Pour du texte simple, ce n'est pas un problème. Pour toute valeur entourée d'une fonction, protégez-la :
{{ifempty(1.budget; "not given")}}
Pour les dates, utilisez if() afin de ne jamais tenter de formater une valeur vide :
{{if(1.preferred_date; formatDate(1.preferred_date; "YYYY-MM-DD"); "")}}
Pour les questions à choix multiples, la réponse est un tableau ; transformez-le en texte avec join() :
{{join(1.services; ", ")}}
8. Testez deux fois
Envoyez une réponse de test avec toutes les questions renseignées et vérifiez la ligne. Envoyez-en une autre en ignorant les questions facultatives. Puis, dans Make, relancez la même réponse et confirmez qu'aucune deuxième ligne n'apparaît. Ce dernier test est précisément le rôle de la vérification des étapes 3 à 5.
9. Activez
Activez le scénario. Avec le déclencheur instantané, il s'exécute à chaque envoi ; avec le déclencheur planifié, fixez un planning adapté à la rapidité avec laquelle vous voulez voir les lignes. Regardez l'onglet History quand la première vraie réponse arrive.
Erreurs courantes et solutions
La nouvelle question n'apparaît pas dans le panneau de mapping. Make a appris la structure du formulaire à partir d'une réponse antérieure. Envoyez une nouvelle réponse qui inclut la question, puis relancez le scénario une fois pour actualiser la structure. Dans certains cas, il faut rouvrir le module ou le remapper.
Les réponses se retrouvent dans de mauvaises colonnes après une modification du formulaire. Si vous mappez par position ou par une référence générée automatiquement, l'insertion d'une question peut tout décaler. Donnez à chaque question une référence fixe dans Typeform, mappez par référence et gardez stables les en-têtes de la feuille.
La cellule affiche quelque chose comme [object Object] ou un crochet isolé. La réponse est un tableau ou un objet structuré, en général une question à choix multiples. Utilisez join() pour les tableaux et choisissez la propriété du libellé pour les réponses de type choix.
Lignes en double. Typeform peut renvoyer une notification s'il ne reçoit pas rapidement de réponse de succès, et un scénario éteint puis rallumé peut reprendre des réponses deux fois. Vérifier l'ID de réponse avant d'ajouter la ligne, comme aux étapes 3 à 5, supprime le problème à la source. Typeform peut aussi désactiver un webhook après des échecs répétés ; si plus aucune réponse n'arrive, vérifiez l'état du webhook dans l'interface actuelle de Typeform et de Make.
Une formule échoue seulement sur certaines réponses. Presque toujours, une question facultative est restée vide. Entourez la valeur de ifempty() ou de if() comme à l'étape 7, puis relancez avec une réponse qui ignorait la question.