From 6e6b40e185f9b83a95a591c7f5fd25feea81cb82 Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Thu, 13 Aug 2026 13:14:17 +0200 Subject: [PATCH] =?UTF-8?q?Le=20mode=20proactif=20marque=20ses=20tours=20c?= =?UTF-8?q?omme=20d=C3=A9clench=C3=A9s=20par=20le=20syst=C3=A8me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AssistantService.chat porte isAutoTriggered, et geo_beacon_trigger_service le passe à true. Sans lui, le prompt que le service s'écrit à lui-même atterrissait dans VisitorQuestion, donc dans « Ce que demandent vos visiteurs », et gonflait le bloc des questions sans réponse. Les jetons restent comptés côté serveur. C'était le dernier bloquant avant d'activer le mode chez un client. flutter analyze lib sans erreur, flutter build apk --debug --flavor dev vert. Co-Authored-By: Claude Opus 5 --- lib/Services/assistantService.dart | 12 +++++++++++- lib/Services/geo_beacon_trigger_service.dart | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/Services/assistantService.dart b/lib/Services/assistantService.dart index 0fb6af8..ef2c952 100644 --- a/lib/Services/assistantService.dart +++ b/lib/Services/assistantService.dart @@ -36,13 +36,22 @@ class AssistantService { required String message, String? configurationId, bool isVoice = false, - }) => chatWithAppType(message: message, configurationId: configurationId, isVoice: isVoice); + bool isAutoTriggered = false, + }) => chatWithAppType( + message: message, + configurationId: configurationId, + isVoice: isVoice, + isAutoTriggered: isAutoTriggered, + ); + /// [isAutoTriggered] : le tour vient du mode proactif, pas d'une question du visiteur. + /// Le serveur compte les jetons mais ne le journalise pas dans `VisitorQuestion`. Future chatWithAppType({ required String message, String? configurationId, AppType appType = AppType.Mobile, bool isVoice = false, + bool isAutoTriggered = false, }) async { _resetInactivityTimer(); @@ -54,6 +63,7 @@ class AssistantService { language: visitAppContext.language?.toUpperCase() ?? 'FR', history: List.from(_history), isVoice: isVoice, + isAutoTriggered: isAutoTriggered, ); final AiChatResponse? response; diff --git a/lib/Services/geo_beacon_trigger_service.dart b/lib/Services/geo_beacon_trigger_service.dart index f89a69b..6edb2d2 100644 --- a/lib/Services/geo_beacon_trigger_service.dart +++ b/lib/Services/geo_beacon_trigger_service.dart @@ -244,10 +244,15 @@ class GeoBeaconTriggerService { debugPrint('[GeoBeaconTriggerService] Trigger: $triggerId'); try { + // ⚠️ `isAutoTriggered` n'est pas cosmétique : sans lui, ce prompt — une consigne que + // le système s'écrit à lui-même — atterrissait dans `VisitorQuestion`, donc dans + // l'onglet « Ce que demandent vos visiteurs », et gonflait le bloc des questions + // sans réponse. Les jetons, eux, restent comptés côté serveur. final response = await _assistantService!.chat( message: prompt, configurationId: _visitAppContext?.configuration?.id, isVoice: true, + isAutoTriggered: true, ); if (response.reply.isNotEmpty) {