# Invitations, rappels et expiration

Laissez Formstep envoyer le lien de la demande par e-mail, relancez les personnes qui ne répondent plus, et fermez les demandes qui traînent.

> ✅ **Pro feature** — included in the Pro plan.


## Invitations, rappels et expiration

Livrer le lien, relancer les personnes qui ne répondent plus, et décider quand une demande cesse de valoir la peine d'être attendue.

> ℹ️ **Deux façons de livrer un lien**
> <p>
>     Chaque demande revient avec une <code>url</code>. Vous pouvez l'envoyer vous-même — dans votre propre e-mail, un message Slack, un SMS —
>     ou demander à Formstep de l'envoyer par e-mail. L'envoyer vous-même fonctionne sur tous les plans. Laisser Formstep envoyer les
>     invitations et les rappels nécessite un <strong>plan Pro ou Business</strong> ; un compte Free peut faire envoyer par e-mail par
>     Formstep ses 10 premières invitations pour essayer (voir{' '}
>     <a href="/fr/subscription-billing/limits-quotas#free-invitations">invitations gratuites</a>).
>   </p>

<h2 id="invitation">L'invitation de demande</h2>

<p>
  Créez une demande avec <code>delivery: "email"</code> et une adresse e-mail de destinataire, et Formstep envoie une
  <strong>invitation de demande</strong> : un court e-mail portant un bouton qui ouvre le lien de la demande.
</p>

<p>
  Vous la rédigez une fois par formulaire, pas une fois par demande. Dans l'éditeur, ouvrez{' '}
  <strong>Paramètres → Notifications par e-mail</strong> et faites défiler jusqu'au groupe <strong>Demandes</strong> tout en bas :
</p>

<p>
  Il n'y a pas de message en texte libre venant de l'appelant — une automatisation ne peut pas injecter un paragraphe dans cet e-mail. Ce
  qu'elle <em>peut</em> faire, c'est fournir des valeurs : mentionner un champ de contexte ou un champ prérempli dans l'objet ou le corps,
  et chaque destinataire obtient sa propre version. Cela garde le texte sous votre contrôle tout en donnant l'impression qu'il a été écrit
  pour lui.
</p>

> 💡 **Traduisez-le**
> <p>
>     Si le formulaire a des langues publiées, l'invitation suit la <code>language</code> de la demande. Traduisez le texte de l'e-mail en
>     même temps que le reste du formulaire — voir <a href="/fr/building-forms/translating-form-content">Traduire le contenu du formulaire</a>{' '}
>     pour le détail.
>   </p>

<h3 id="delivery-status">Statut de livraison</h3>

<ul>
  <li>
    L'invitation est envoyée au plus une fois. Elle est mise en file d'attente, et abandonnée sans être envoyée si la demande se termine
    avant que la file ne l'atteigne — personne n'est invité sur un lien mort.
  </li>
  <li>
    Si elle n'arrive jamais, envoyez un rappel. <code>requests.remind</code> porte le même lien et compte dans le plafond de huit rappels.
    Sur Free, où les rappels ne sont pas disponibles, copiez le lien de la demande et envoyez-le vous-même.
  </li>
  <li>Les invitations et les rappels partagent un budget de 10 e-mails par jour, par formulaire et par adresse de destinataire.</li>
</ul>

<h2 id="reminders">Rappels</h2>

<p>
  Un <strong>planning de rappel</strong> est une liste ordonnée de délais d'inactivité — 1 jour, 3 jours, 1 semaine — après lesquels
  Formstep envoie un e-mail à une personne qui ne répond plus. Un même planning sert deux types de cible : un répondant sur lien public qui
  a laissé un brouillon inachevé, et un destinataire de demande qui n'a pas terminé.
</p>

<p>
  Il se trouve dans <strong>Paramètres → Notifications par e-mail → Envoyer des rappels</strong>. Ce commutateur est le maître :
  désactivez-le et aucun des deux canaux ne reçoit le planning du formulaire.
</p>

<h3 id="how-the-schedule-runs">Comment le planning se déroule</h3>

<ul>
  <li>
    Les délais sont mesurés depuis la <strong>dernière activité</strong> de la cible, pas depuis la création. Un planning de 1 jour puis 3
    jours signifie « un jour d'inactivité, puis trois jours d'inactivité ».
  </li>
  <li>
    <strong>Une nouvelle activité le relance.</strong> Si le destinataire ouvre la demande et répond à quelque chose, le compteur revient à
    la première étape.
  </li>
  <li>
    <strong>Il s'arrête de lui-même</strong> une fois la demande terminée, expirée ou annulée.
  </li>
  <li>
    <strong>Une purge s'exécute toutes les 15 minutes</strong>, si bien qu'un rappel arrive dans le quart d'heure suivant l'échéance de
    l'étape, pas à la seconde près. Un planning qui aurait pris beaucoup de retard n'est pas déclenché en rafale : l'écart que vous avez mis
    entre deux étapes est respecté.
  </li>
  <li>
    <strong>Huit rappels est le plafond absolu</strong> pour une même demande, planifiés et manuels confondus. L'activité peut relancer un
    planning indéfiniment ; c'est ce qui empêche que ça devienne une boucle.
  </li>
</ul>

<h3 id="per-request">Remplacer par demande</h3>

<p>
  Une automatisation peut passer ses propres <code>reminders</code> lors de la création d'une demande — <code>["2d","5d"]</code> pour un
  planning qui lui est propre, ou une liste vide pour désactiver les rappels pour cette seule demande. Un planning explicite l'emporte même
  sur le commutateur maître du formulaire, car un appelant qui en a passé un a demandé des rappels pour cette demande précisément.
</p>

<p>
  Omettez <code>reminders</code> et la demande hérite du planning du formulaire, si le commutateur maître est activé et que la demande a une
  adresse de destinataire.
</p>

<h3 id="manual">Relancer quelqu'un maintenant</h3>

<p>
  Vous n'avez pas à attendre la prochaine étape. <strong>Envoyer un rappel</strong> dans le tiroir de la demande — ou{' '}
  <code>requests.remind</code> depuis une automatisation — en met un en file d'attente immédiatement. Le planning automatique n'est pas
  touché : le prochain rappel planifié arrive toujours au moment prévu.
</p>

<p>Deux planchers s'appliquent : au moins dix minutes entre deux rappels manuels, et le même plafond global de huit par demande.</p>

<h2 id="expiry">Expiration</h2>

<p>
  Chaque demande a une fin absolue. Quand elle arrive, le lien cesse de fonctionner, le statut devient <strong>expirée</strong>, et votre
  automatisation en est informée via le callback — pour qu'un workflow mis en pause pendant un mois reprenne au lieu de rester bloqué pour
  toujours.
</p>

<ul>
  <li>
    Par défaut : <strong>30 jours</strong> après la création.
  </li>
  <li>
    Maximum : <strong>365 jours</strong>. Passez <code>expiresAt</code> comme horodatage en millisecondes pour fixer le vôtre.
  </li>
  <li>Après expiration, le lien affiche la page de résultat — un simple avis, jamais le formulaire.</li>
  <li>
    Une purge fait basculer les demandes expirées toutes les 15 minutes, si bien que le statut et le callback suivent <code>expiresAt</code>{' '}
    dans le quart d'heure. Le lien lui-même cesse de s'ouvrir dès que l'expiration est passée.
  </li>
</ul>

```
{
  "method": "requests.create",
  "params": {
    "formId": "j57...",
    "recipient": { "email": "ada@acme.com", "name": "Ada" },
    "delivery": "email",
    "reminders": ["1d", "3d"],
    "expiresAt": 1795392000000,
    "callbackUrl": "https://automation.example/webhook/resume-abc"
  }
}
```

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [La page Demandes](/fr/requests/managing-requests) — Rappeler et annuler manuellement.
  - [Dépannage](/fr/requests/troubleshooting) — Quand une invitation échoue ou est rejetée.
  - [Domaines e-mail personnalisés](/fr/branding-domains/custom-email-domains) — Envoyer depuis votre propre domaine.
</div>
