Inscription à un événement8 min de lecture
Formulaire d'inscription des bénévoles avec créneaux, pour événements et festivals
Un formulaire d'inscription de bénévoles avec choix de créneaux et téléphone pour le jour J, et un script qui repère les créneaux en manque et bâtit le planning.
Laissez les bénévoles cocher sur un seul formulaire tous les créneaux qu'ils peuvent assurer, avec un numéro de téléphone, une taille de T-shirt et un contact d'urgence, et envoyez-le à Ikiform. Ikiform stocke chaque inscription et prévient les coordinateurs par e-mail, mais ne remplit ni ne ferme les créneaux : lancez donc un petit script qui compte les bénévoles par créneau par rapport à vos besoins et écrit un planning. Comblez les créneaux en manque en sollicitant directement les bénévoles disponibles.
Ce qui change avec des bénévoles
Un RSVP pose une seule question : venez-vous ? Une inscription de bénévole demande quand, et la réponse n'a de sens que face aux besoins de chaque créneau. Le montage à 7 h demande six personnes et en obtient deux ; l'après-midi ensoleillé en demande dix et en obtient dix-neuf. Il ne s'agit pas de compter des têtes, mais de couvrir les créneaux.
- Des disponibilités, pas un choix unique. Les gens peuvent assurer plusieurs créneaux. Demandez tous ceux qu'ils pourraient faire et affectez à partir de là, au lieu de leur faire deviner où sont les besoins.
- Un contact pour le jour J. L'e-mail sert à l'organisation. Le jour même, il vous faut un numéro de portable, et un contact d'urgence pour chaque bénévole.
- Ce qu'il faut commander. T-shirts, tours de cou et déjeuners, par taille et par nombre.
- L'âge. Beaucoup d'événements exigent que chaque bénévole soit majeur, ou ait l'accord d'un responsable légal. Demandez à votre organisation ce qui s'applique ; une case à cocher enregistre la réponse mais n'est pas une vérification légale.
Les plateformes de bénévolat comme SignUpGenius gèrent des inscriptions par créneau qui ferment un créneau une fois plein. Si des limites strictes par créneau sont ce qu'il vous faut, utilisez-en une. Ikiform convient aux organisateurs qui veulent le formulaire sur leur propre site et sont prêts à affecter les créneaux à la main à partir d'une liste propre.
- Les bénévoles cochent sur le formulaire d'inscription tous les créneaux qu'ils pourraient assurer, et le formulaire envoie à Ikiform.
- Ikiform stocke chaque inscription et prévient les coordinateurs par e-mail.
- Un script lit les inscriptions via l'API et compte les bénévoles par créneau par rapport aux besoins de chacun.
- Il écrit rota.csv avec les noms et numéros de téléphone de chaque créneau.
- Les créneaux en manque apparaissent tout de suite, comme le montage à 2 sur 6, pour que vous puissiez solliciter des bénévoles disponibles ailleurs.
Le formulaire
Regroupez les créneaux par jour pour qu'on les parcoure facilement. Les cases à cocher s'appellent shifts[], donc même une seule case cochée est stockée comme une liste. Cela fonctionne en HTML simple sur n'importe quel site ou créateur de sites qui accepte une intégration :
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
<label>Name <input name="name" autocomplete="name" required></label>
<label>Email <input name="email" type="email" autocomplete="email" required></label>
<label>Mobile number for the day <input name="phone" type="tel" autocomplete="tel" placeholder="+44 7700 900123" required></label>
<fieldset>
<legend>Shifts you can do</legend>
<p>Saturday</p>
<label><input type="checkbox" name="shifts[]" value="sat_setup"> 7:00 to 10:00, setup</label>
<label><input type="checkbox" name="shifts[]" value="sat_day"> 10:00 to 14:00</label>
<label><input type="checkbox" name="shifts[]" value="sat_late"> 14:00 to 18:00</label>
<p>Sunday</p>
<label><input type="checkbox" name="shifts[]" value="sun_day"> 10:00 to 14:00</label>
<label><input type="checkbox" name="shifts[]" value="sun_pack"> 14:00 to 17:00, pack-down</label>
</fieldset>
<label>Where you'd like to help
<select name="role">
<option value="anywhere">Anywhere</option>
<option value="welcome">Welcome desk</option>
<option value="food">Food stall</option>
<option value="stewarding">Stewarding</option>
</select>
</label>
<label>T-shirt size
<select name="tshirt" required>
<option value="s">S</option><option value="m" selected>M</option><option value="l">L</option>
<option value="xl">XL</option><option value="xxl">XXL</option>
</select>
</label>
<label>Emergency contact name and number <input name="emergency_contact" required maxlength="160"></label>
<label><input type="checkbox" name="adult" required> I'm 18 or over, or a parent or guardian is filling this in with me</label>
<input type="hidden" name="_redirect" value="https://fair.example/volunteers/thanks">
<input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
<button type="submit">Sign me up</button>
</form>Collez cette définition dans l'onglet Fields du formulaire. Le serveur refuse alors une inscription sans créneau, avec un numéro de téléphone invalide ou une case d'âge non cochée, quelle que soit la page d'origine :
Aperçu
Exécute le validateur d'Ikiform dans votre navigateur. Rien n'est envoyé.
shifts est un multi_select avec min_items: 1. phone est un champ phone, qui vérifie la forme du numéro. adult doit être coché.| Champ | Pourquoi ce champ |
|---|---|
phone | Envoyer les changements de créneau par SMS et joindre les gens le jour J |
shifts | Les disponibilités à partir desquelles vous affectez |
role | Les préférences, pour que l'accueil ait les personnes qui l'ont demandé |
tshirt | La commande à passer deux semaines avant |
emergency_contact | Pour l'équipe de secours, pas pour le marketing |
adult | La règle d'âge de votre organisation, enregistrée dans une soumission qui garde son propre created_at |
Construire le planning et voir les manques
Lancez ceci avec Node et une clé d'API secrète dès que vous voulez une vue d'ensemble. Le script prend l'inscription la plus récente de chaque bénévole, affiche chaque créneau comme complet, en manque ou en surplus, et écrit rota.csv avec les noms et numéros de chaque créneau :
import { writeFileSync } from "node:fs";
import { createClient } from "@ikiform/sdk";
const NEEDED: Record<string, number> = { sat_setup: 6, sat_day: 10, sat_late: 10, sun_day: 8, sun_pack: 6 };
const ikiform = createClient({ apiKey: process.env.IKIFORM_SECRET_KEY! });
const people = new Map<string, Record<string, unknown>>();
for await (const submission of ikiform.submissions.iterate({ formId: "frm_xxxxxxxxxxxxxxxx", status: "received", limit: 100 })) {
const email = String(submission.fields.email ?? "").trim().toLowerCase();
if (email && !people.has(email)) people.set(email, submission.fields);
}
const cell = (value: unknown) => `"${String(value ?? "").replaceAll('"', '""')}"`;
const rows = [["shift", "name", "phone", "role", "tshirt"].join(",")];
for (const [shift, needed] of Object.entries(NEEDED)) {
const team = [...people.values()].filter((fields) => (fields.shifts as string[] | undefined)?.includes(shift));
const state = team.length < needed ? `SHORT ${needed - team.length}` : team.length > needed ? "spare" : "ok";
console.log(`${shift.padEnd(10)} ${team.length}/${needed} ${state}`);
for (const fields of team) {
rows.push([shift, fields.name, fields.phone, fields.role, fields.tshirt].map(cell).join(","));
}
}
writeFileSync("rota.csv", `${rows.join("\n")}\n`);- Les listes arrivent de la plus récente à la plus ancienne : un bénévole qui se réinscrit avec d'autres disponibilités est donc compté selon sa dernière réponse.
- Une personne apparaît sous chaque créneau qu'elle a coché. Ce sont des disponibilités. Réduisez-les à des affectations dans le CSV, et annoncez à chacun ses créneaux définitifs.
- Les virgules et guillemets dans les noms sont échappés, le CSV s'ouvre donc proprement dans n'importe quel tableur.
Pour un coup d'œil rapide sans code, exportez le CSV depuis Submissions et filtrez la colonne shifts sur la valeur d'un créneau, comme sat_setup. Dans l'export, les valeurs à choix multiples sont regroupées dans une seule cellule.
Des disponibilités aux affectations
- Deux semaines avant, lancez le planning et commandez les T-shirts d'après les totaux de
tshirt. - Pour chaque créneau en manque, écrivez aux bénévoles disponibles qui ont aussi coché ce créneau. Ils ont déjà dit qu'ils pouvaient.
- Envoyez à chaque bénévole ses créneaux définitifs depuis votre outil d'e-mail ou de messagerie. Le bouton Reply de l'e-mail de notification leur répond directement.
- La veille, imprimez le planning pour les responsables de créneau, avec les numéros de téléphone.
Ikiform n'envoie pas d'e-mail à la personne qui remplit le formulaire. Les e-mails de notification vont uniquement à vous et à votre équipe : il n'y a donc ni réponse automatique, ni e-mail de confirmation, ni double opt-in. Envoyez-les depuis votre outil d'e-mailing, déclenché par un webhook. Les bénévoles oublient pour quoi ils se sont inscrits : envoyez donc le planning définitif personnellement une semaine avant, puis la veille au soir.
Pour être prévenu de chaque inscription là où votre équipe discute déjà, envoyez le webhook vers Slack ou Discord. Les coordinateurs voient alors un créneau en manque se remplir en temps réel.
Vérifiez avant de recruter
- Dans Allowed domains du formulaire, ajoutez le domaine de votre site, plus
localhostpendant le développement. Laissez vide pour accepter les envois de partout. - Inscrivez-vous en cochant un seul créneau. Dans le tableau de bord,
shiftsest une liste avec une seule valeur. - Essayez de vous inscrire sans créneau, ou sans cocher la case d'âge. Le navigateur vous en empêche, et un envoi forgé reçoit
422. - Vérifiez la boîte de réception de chaque destinataire des notifications. Chacun reçoit un e-mail avec les champs, et Reply répond à l'expéditeur quand le formulaire a un champ
email. - Lancez le script de planning. Votre test apparaît sous son créneau, et tous les autres créneaux apparaissent en manque.
- Ouvrez
rota.csvdans un tableur et vérifiez la colonne des numéros de téléphone.
Pièges
| Problème | Que faire |
|---|---|
| Un créneau unique est stocké comme texte, pas comme liste | Les cases à cocher s'appellent shifts sans [], et aucun champ n'est défini. Renommez-les en shifts[], ou définissez shifts comme multi_select. |
422 sur phone | Le numéro ne ressemble pas à un numéro de téléphone. Demandez l'indicatif pays dans le texte d'aide, comme le fait la définition. |
| Un bénévole apparaît deux fois dans le planning | Il s'est inscrit avec deux e-mails différents. Fusionnez à la main ; le script se base sur l'e-mail. |
422 validation_failed | L'envoi ne correspond pas à la définition des champs du formulaire. error.fields nomme chaque champ et la raison. Faites correspondre le name de l'input à l'id du champ. |
429 rate_limited | Un visiteur a envoyé plus que ce que permet la limite de débit du formulaire. Standard autorise 5 envois par minute et par visiteur. Attendez la durée de Retry-After, ou choisissez Relaxed ou Custom pour les formulaires qui envoient depuis une seule IP partagée. |
Questions
Non. Ikiform n'a pas de limite par option. Demandez les disponibilités, comptez les bénévoles par créneau avec un script ou un tableur, et affectez les gens vous-même. Utilisez un outil d'inscription par créneau si des limites strictes comptent davantage.
Utilisez des cases à cocher nommées shifts[] et définissez shifts comme un champ multi_select. Chaque créneau coché est stocké dans une seule liste, et min_items : 1 en rend au moins un obligatoire.
Demandez-leur de se réinscrire avec le même e-mail. Le script de planning utilise l'inscription la plus récente de chaque bénévole, la nouvelle disponibilité remplace donc l'ancienne.
Non. Ikiform envoie des e-mails à vous et à votre équipe, pas à l'expéditeur : il n'y a donc ni réponse automatique ni e-mail de confirmation. Envoyez un webhook à votre outil d'e-mailing et envoyez la confirmation depuis celui-ci.
Non, il n'y a pas d'offre gratuite. Les tests sont gratuits : vous pouvez envoyer 50 soumissions de test par mois depuis localhost avant de payer. Pour passer en production, Pro commence à 6 $/mois pour 500 soumissions, ou vous pouvez payer une seule fois 10 000 soumissions pour 49 $ ou 50 000 soumissions pour 149 $, avec des crédits qui n'expirent jamais.
Une étape vous bloque, ou vous voulez un guide pour votre cas ? Écrivez à hello@ikiform.com.