Contrôles de format
===================

Un **contrôle de format** (*format check*) vérifie un code que l'appelant dicte : une plaque d'immatriculation, un numéro de commande ou de bon, un numéro de téléphone, un SIRET, un IBAN. Vous définissez le format une fois, vous attachez le contrôle aux étapes qui recueillent ce code, et à chaque tour de parole la plateforme donne à l'agent soit la **valeur propre**, soit **la raison pour laquelle elle est fausse**.

Pourquoi l'utiliser
-------------------

Un modèle d'IA compte mal les caractères d'un code dicté : quand l'appelant dit « douze, vingt-quatre, trente-six, quatre », il ne sait pas reconnaître de façon fiable un numéro à 7 chiffres, ni voir qu'il manque une lettre à une plaque. Le contrôle de format fait cette partie exactement, sans délai supplémentaire : l'agent peut confirmer tout de suite une bonne valeur, ou redemander la partie erronée.

Étape 1 : créer le contrôle
---------------------------

Les contrôles appartiennent à un **compte** et peuvent être utilisés par tous les agents de ce compte. Ouvrez **Accounts**, choisissez le compte, puis l'onglet **Format checks**, et cliquez sur **Add a format check**.

![Création d'un contrôle de format : the repair ticket number, motif AA-9999, essayé avec une valeur valide et une invalide gardées comme exemples, puis enregistré](/docs/format-check-create-dark.gif)

1. **What is being checked** : une courte expression, comme dans une phrase, par exemple *le numéro de bon de réparation*. L'**Identifier** se remplit tout seul.
2. **Type of format** : choisissez l'un des trois types décrits [plus bas](#formats).
3. **How the valid value is written** : **Grouped** (`AT-2041`, `06 85 26 48 41`) ou **Compact** (`AT2041`). C'est la valeur que reçoivent l'agent et vos variables.
4. **When the check runs** : gardez **Automatic (recommended)** sauf raison particulière (voir [plus bas](#modes)).
5. **Try it** : tapez ce qu'un appelant dirait, comme il le dirait, par exemple `A T 2 0 4 1`. Vous voyez tout de suite si c'est valide et la valeur propre, ou la raison du refus. Cliquez sur **Keep as example** pour garder les cas à retester plus tard (jusqu'à 10).
6. Cliquez sur **Save**.

**Les modifications s'appliquent dès l'appel suivant.** Comme les web services, les contrôles de format ne font pas partie des versions d'un agent : une modification touche tous les agents qui utilisent le contrôle dès l'appel suivant, sans republier. Un compte peut avoir jusqu'à 50 contrôles.

### Types de format

TypeCe qu'il accepte   **Ready-made format**Plaque d'immatriculation française (`AB-123-CD`), numéro de téléphone français (10 chiffres commençant par 0, `+33` accepté), code postal français (5 chiffres), SIRET (14 chiffres), SIREN (9 chiffres), IBAN. Le SIRET, le SIREN et l'IBAN vérifient aussi leur clé de contrôle : un chiffre erroné est détecté. **Number of digits****Exactly** N chiffres, ou **Between** deux nombres (de 1 à 34). Pour les numéros de commande, de mission ou de client. **Pattern**Lettres et chiffres dans un ordre fixe. `A` = une lettre, `9` = un chiffre, `*` = une lettre ou un chiffre. Toute autre lettre ou tout autre chiffre doit figurer tel quel (`MIS-9999` = `MIS` puis 4 chiffres). Un tiret ou un espace indique seulement comment grouper le code. Exemple : `AA-9999` accepte `AT-2041`. 

Étape 2 : l'attacher à une étape
--------------------------------

Un contrôle ne s'exécute que sur les étapes auxquelles il est attaché. Attachez-le à l'étape qui demande le code : une étape **Agent**, ou l'étape de départ.

![Ouverture d'une étape Agent, onglet Connections, case the repair ticket number cochée sous Format checks et essai d'une valeur](/docs/format-check-attach-dark.gif)

1. Dans l'éditeur de flow, ouvrez l'étape et allez dans l'onglet **Connections**.
2. Sous **Format checks**, cochez les contrôles qui correspondent à ce que l'étape recueille (jusqu'à 10 par étape).
3. Facultatif : **Save a valid value into** une variable du workflow. Quand l'appelant donne un code valide, il y est enregistré, déjà nettoyé.
4. Facultatif : utilisez la case **Try it** pour tester le contrôle depuis l'étape.
5. Cliquez sur **OK**, puis enregistrez l'agent et mettez la version en ligne.

N'attachez que les contrôles que l'étape recueille vraiment. Deux contrôles composés uniquement de chiffres sur la même étape (un numéro de bon à 7 chiffres et un code postal à 5 chiffres, par exemple) peuvent réagir tous les deux à la même réponse.

Étape 3 : dire à l'agent quoi faire du résultat
-----------------------------------------------

Le contrôle ne décide pas de la suite : c'est votre prompt qui le fait. À chaque tour de parole, l'agent voit le verdict à côté de ce qu'a dit l'appelant, dans la langue de l'appel : la valeur propre, ou la raison du refus (« Il faut 6 caractères... »). Les verdicts précédents restent dans la conversation, ce qui permet d'écrire des règles qui comptent les échecs. Par exemple, dans le prompt de l'étape :

```
Demande le numéro du bon de réparation.
Si le contrôle dit qu'il est valide, répète-le et continue.
S'il n'est pas valide, explique brièvement ce qui ne va pas et redemande-le.
Après deux réponses invalides, demande plutôt le modèle du vélo et le nom inscrit sur le bon.
```

Ne demandez pas à l'agent de « remplir » une variable dans le prompt : utilisez plutôt **Save a valid value into** sur l'étape.

Quand le contrôle s'exécute
---------------------------

ChoixCe qui se passeÀ utiliser quand   **Automatic (recommended)**La plateforme contrôle chaque tour de l'appelant qui ressemble à un code, sans délai supplémentaire. Un simple « oui, c'est ça » est ignoré.Presque toujours. **Tool**L'agent appelle lui-même le contrôle, comme un outil. Cela ajoute environ une seconde avant qu'il ne parle.L'agent doit d'abord reconstituer la valeur : dite en toutes lettres (« quatre cent douze ») ou répartie sur plusieurs tours. **Both**Automatique à chaque tour, et aussi proposé à l'agent comme outil.Cas mixtes. 

La **Note for the agent** facultative est ajoutée à la description de l'outil : elle ne sert donc qu'en mode **Tool** ou **Both**.

Voir les résultats
------------------

Sur la page d'un appel dans [Appels](https://www.manivox.ai/docs/calls/index), chaque verdict apparaît sur une ligne sous le message de l'appelant qu'il a jugé, par exemple *Check the\_repair\_ticket\_number: AT-2041*, ou la raison quand la valeur n'était pas valide. Un verdict demandé par l'agent lui-même est marqué *(called by the agent)*.

Bon à savoir
------------

- L'agent doit appartenir à un compte : un agent sans compte n'a pas de contrôles de format.
- L'épellation phonétique est comprise (« G comme Georges »). Les lettres écrites en toutes lettres et les nombres dits en mots ne sont pas convertis en mode automatique : utilisez le mode **Tool** si vos appelants parlent ainsi.
- Le mode automatique ne lit que le tour en cours. Un code donné en plusieurs morceaux sur plusieurs tours nécessite le mode **Tool**.
- Renommer l'identifiant d'un contrôle le détache de toutes les étapes qui utilisaient l'ancien.