Le mode proactif marque ses tours comme déclenchés par le système

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 <noreply@anthropic.com>
This commit is contained in:
Thomas Fransolet 2026-08-13 13:14:17 +02:00
parent e9e68942c9
commit 6e6b40e185
2 changed files with 16 additions and 1 deletions

View File

@ -36,13 +36,22 @@ class AssistantService {
required String message, required String message,
String? configurationId, String? configurationId,
bool isVoice = false, 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<AssistantResponse> chatWithAppType({ Future<AssistantResponse> chatWithAppType({
required String message, required String message,
String? configurationId, String? configurationId,
AppType appType = AppType.Mobile, AppType appType = AppType.Mobile,
bool isVoice = false, bool isVoice = false,
bool isAutoTriggered = false,
}) async { }) async {
_resetInactivityTimer(); _resetInactivityTimer();
@ -54,6 +63,7 @@ class AssistantService {
language: visitAppContext.language?.toUpperCase() ?? 'FR', language: visitAppContext.language?.toUpperCase() ?? 'FR',
history: List.from(_history), history: List.from(_history),
isVoice: isVoice, isVoice: isVoice,
isAutoTriggered: isAutoTriggered,
); );
final AiChatResponse? response; final AiChatResponse? response;

View File

@ -244,10 +244,15 @@ class GeoBeaconTriggerService {
debugPrint('[GeoBeaconTriggerService] Trigger: $triggerId'); debugPrint('[GeoBeaconTriggerService] Trigger: $triggerId');
try { 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( final response = await _assistantService!.chat(
message: prompt, message: prompt,
configurationId: _visitAppContext?.configuration?.id, configurationId: _visitAppContext?.configuration?.id,
isVoice: true, isVoice: true,
isAutoTriggered: true,
); );
if (response.reply.isNotEmpty) { if (response.reply.isNotEmpty) {