> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fanifyai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent de réponse

> L'agent central du moteur V2 de réponse automatique : il analyse la conversation, décide quoi faire et construit la réponse complète grâce à ses outils.

Le **ReplyAgent** est l'[agent](/fr/advanced/agents/agent) central du [moteur V2](/fr/advanced/jobs/autoreply#moteur-v2) de réponse automatique. Il remplace à lui seul la chaîne d'agents du moteur V1 (classification d'intention, contexte, réflexion, rédaction) : c'est lui qui analyse la conversation, décide de la marche à suivre et construit la réponse, en appelant ses **outils** au fil de sa réflexion (boucle ReAct).

## Fonctionnement

1. Le ReplyAgent reçoit la conversation (fenêtre des **15 derniers messages**), le profil de l'utilisateur, la persona du créateur et le **bloc stratégie** (injections des règles qui ont matché).
2. Il réfléchit, puis appelle les outils nécessaires : rechercher un média, interroger la mémoire, déposer des messages...
3. Chaque message déposé devient un **message candidat** : rien n'est envoyé pendant la réflexion.
4. Quand il estime sa réponse complète, il s'arrête. La [validation de rédaction](/fr/advanced/agents/redaction-validation-agent) relit alors l'ensemble des candidats : en cas d'erreur, l'agent reçoit un retour précis et corrige (passes limitées).
5. Le job [AutoReply](/fr/advanced/jobs/autoreply) reprend la main pour la fenêtre de contrôle opérateur et l'envoi.

<Tip>
  Les outils en **lecture seule** (`get_media`, `search_rag`) peuvent être appelés **en parallèle** dans une même itération, ce qui réduit le temps de réponse.
</Tip>

## Les outils

| Outil                | Rôle                                                                                                                                                                                                                                                                                                                                                              |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `send_message`       | Dépose un message texte candidat. Validé immédiatement par les contrôles locaux (mots interdits, quotas, longueur) : une bulle refusée n'est pas ajoutée et l'agent doit la reformuler.                                                                                                                                                                           |
| `send_vocal`         | Dépose un message vocal candidat. La synthèse vocale réelle est différée après la décision finale (aucun coût audio si la réponse est finalement abandonnée).                                                                                                                                                                                                     |
| `send_image`         | Envoie gratuitement une photo/vidéo identifiée au préalable avec `get_media`.                                                                                                                                                                                                                                                                                     |
| `send_payment`       | Génère un lien de paiement embarquant un ou plusieurs médias, livrés à l'utilisateur après paiement. Le prix par défaut est la somme des prix des médias, mais l'agent peut le surcharger (offres, négociations).                                                                                                                                                 |
| `get_media`          | Recherche un média adapté dans la galerie : **gratuit** (recherche sémantique sur les préférences du fan) ou **payant** (sélection et prix automatiques, adaptés au dernier achat du fan). Ne propose jamais un média **déjà acheté** par cet utilisateur ; en revanche un contenu payant déjà proposé mais **non payé** reste proposable (négociation possible). |
| `search_rag`         | Interroge la [mémoire long-terme](/fr/advanced/agents/search-rag-agent) du créateur (RAG).                                                                                                                                                                                                                                                                        |
| `set_plan`           | Note un **plan stratégique** pour la suite de la conversation. Ce plan est relu par l'agent au job suivant (visible dans la trace comme `[PLAN]`).                                                                                                                                                                                                                |
| `leave_on_read`      | Laisse le dernier message du fan **sur « vu »** : aucune réponse n'est envoyée ce tour. Une **relance** est planifiée à l'heure de contact optimale pour reprendre contact naturellement.                                                                                                                                                                         |
| `conversation_pause` | Met la conversation **en pause** jusqu'à une date de reprise. Le fan est aussi laissé **sur « vu »**.                                                                                                                                                                                                                                                             |
| `clear_messages`     | Vide **entièrement** la file d'attente d'envoi (toutes les bulles : textes, vocaux, médias, liens de paiement). Affordance de récupération : l'agent s'en sert pour repartir de zéro si sa file contient une erreur (ex. un doublon), puis reconstruit sa réponse.                                                                                                |

### Continuité d'album

Lors de l'envoi de plusieurs médias, l'agent privilégie la **continuité d'album** (paramètre `PreferAlbumContinuity`):

* Un deuxième média **gratuit** est choisi de préférence dans le **même album** que le précédent, pour une cohérence visuelle.
* Le **premier média payant** ouvre volontairement un **nouvel album** (l'utilisateur paie pour du contenu inédit), puis les médias payants suivants poursuivent ce nouvel album.

Ce paramètre est désactivable dans **Admin** > **Chatting Auto** > **Chatting** > **Paramètres AutoReply**

### Limite de médias gratuits

L'outil `send_image` est plafonné par le paramètre global `MAX_FREE_MEDIA` (défaut : 4). Le compteur additionne les médias gratuits **déjà envoyés** à l'utilisateur et ceux **mis en file dans la réponse en cours**. Au-delà, l'outil refuse l'envoi et oriente l'agent vers le contenu payant.

Ce plafond s'applique désormais sur une **fenêtre glissante**, définie par le paramètre `MAX_FREE_MEDIA_WINDOW` (défaut : 24 h), et non sur tout l'historique. Passé ce délai, les anciens envois gratuits ne sont plus comptés : un utilisateur peut donc recevoir à nouveau des médias gratuits le lendemain. Laissez la fenêtre **vide** pour compter l'historique complet.

Configurable dans **Admin** > **Chatting Auto** > **Chatting** > champ **Limite de PPV gratuit par utilisateur**

### Restrictions par la stratégie

Quand une action de stratégie force ou reroute une intention, une **politique d'outils** restreint dynamiquement la palette. Par défaut (`HardRemoveDisabledTools` activé), les outils restreints sont **retirés** de la palette de l'agent. Décochez ce paramètre pour les conserver visibles : ils **refusent alors poliment** leur exécution avec un message expliquant la restriction à l'agent (ex. « Les paiements sont désactivés par la stratégie pour cette réponse »).

## Garde-fous

* **Plafond d'itérations** (`MaxIterations`, défaut 12) : au-delà, le job échoue avec la référence `AR-550`.
* **Anti-boucle** (`MaxRefusedToolCalls`, défaut 6) : trop d'appels d'outils refusés consécutivement arrête l'agent (`AR-551`).
* **Timeout global** (`TimeoutSeconds`, défaut 150 s).
* **Arrêt sans réponse** : si l'agent s'arrête sans avoir produit de candidat envoyable, le job échoue visiblement (`AR-552`) avec l'[indicateur d'attention](/fr/advanced/jobs/job#cycle-de-vie) — jamais de réponse vide envoyée à l'utilisateur.
* **Validation critique** : si la validation finale détecte une erreur grave (ex. aveu d'être une IA), la réponse entière est supprimée et le job échoue (`AR-530`), même si des candidats média subsistaient.

<Note>
  Le ReplyAgent peut **légitimement** décider de ne rien répondre via `leave_on_read` ou `conversation_pause` : le job se termine alors en succès, sans envoi (le fan est laissé sur « vu »). Un message système l'indique dans la conversation.
</Note>

## Configuration

Rendez-vous dans **Admin** > **Chatting Auto** > **Agents** > carte **ReplyAgent** :

| Paramètre                 | Défaut | Effet                                                                                                                                                            |
| ------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Enable`                  | Activé | Si désactivé alors que le moteur V2 est sélectionné, AutoReply **bascule automatiquement sur le moteur V1**.                                                     |
| `MaxIterations`           | 12     | Nombre maximal d'itérations de la boucle réflexion/outils. Augmenter donne plus de latitude (réponses complexes multi-outils) mais accroît coût et latence.      |
| `TimeoutSeconds`          | 150    | Durée maximale de l'exécution complète de l'agent.                                                                                                               |
| `MaxRefusedToolCalls`     | 6      | Tolérance d'appels d'outils refusés avant arrêt anti-boucle.                                                                                                     |
| `MaxValidationPasses`     | 2      | Nombre de passes de correction accordées après la validation finale. Au-delà, la meilleure version disponible est conservée (best-effort), sauf erreur critique. |
| `UseRedactionValidation`  | Activé | Désactive entièrement la [validation de rédaction](/fr/advanced/agents/redaction-validation-agent) (inline et finale) si décoché. À réserver aux tests.          |
| `HardRemoveDisabledTools` | Activé | Retire physiquement les outils restreints par la stratégie. Décochez pour les conserver visibles : ils refusent alors leur exécution avec une explication.       |
| `PreferAlbumContinuity`   | Activé | Active la logique de continuité d'album décrite ci-dessus.                                                                                                       |

Le modèle IA du ReplyAgent se choisit au même endroit. Privilégiez un **modèle performant avec cache de tokens** : le prompt de l'agent est conçu pour être mis en cache entre les itérations, ce qui réduit fortement les coûts.

## Voir aussi

* [Réponses automatiques](/fr/advanced/jobs/autoreply) — Le workflow complet dans lequel s'insère le ReplyAgent.
* [Validateur de rédaction](/fr/advanced/agents/redaction-validation-agent) — Les contrôles appliqués aux messages candidats.
* [Agent de recherche mémoire](/fr/advanced/agents/search-rag-agent) — Le sous-agent derrière l'outil `search_rag`.
