> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://documentation.celestory.io/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# 🟦 Choix avec dialogue

# 🟦 Choix avec dialogue

${frame}[Vidéo : anatomie du bloc Choix avec dialogue](https://celestory-docs-videos.netlify.app/fr/anatomie-bloc/choicedialogue.html)

![Choix avec dialogue](https://celestory-docs-illustrations.netlify.app/fr/Choixavecdialogue_FR.svg)

Le bloc **Choix avec dialogue** permet d'afficher une suite de messages de dialogue puis, une fois celui-ci terminé, de mettre l'expérience en pause pour proposer des boutons de choix à l'utilisateur. C'est en quelque sorte la fusion des blocs Dialogue et Choix en un seul nœud : le personnage parle, puis le joueur répond.

Ce bloc est réservé aux projets basés sur le **Modèle Chatbot** : il n'apparaît pas dans la palette de blocs d'une Histoire classique (visual novel), contrairement aux blocs Dialogue et Choix qui sont, eux, disponibles partout.

## 📥 Entrées

*   **in (Trigger)** : Déclenche le bloc, met l'expérience en pause et lance l'affichage du dialogue.
*   **dialogue (A)** : Espace d'édition où vous rédigez le script du dialogue, ligne par ligne, exactement comme dans le bloc Dialogue.
*   **content (Contenu)** : (Optionnel) Permet d'insérer un média (image ou son) qui accompagnera la dernière ligne du dialogue affichée.
*   **{{Variables}} (Texte/Nombre/Booléen)** : Les mots encadrés par {{MaVariable}} dans le texte du dialogue génèrent automatiquement des entrées dynamiques pour injecter des valeurs personnalisées.
*   **choix (Liste<Textes>)** : Liste des propositions qui généreront les boutons à afficher une fois le dialogue terminé. Chaque élément de la liste correspond à un bouton.
*   **chrono (Nombre)** : (Optionnel) Temps limite en secondes avant expiration du choix. Si ce paramètre est vide ou égal à 0, le joueur dispose d'un temps illimité.

## 📤 Sorties

*   **(Nom de chaque choix) (Trigger)** : Une sortie est générée pour chaque élément de la liste "choix". Le flux emprunte la sortie correspondant au bouton cliqué par l'utilisateur.
*   **temps écoulé (Trigger)** : Cette sortie n'apparaît que si un chrono est défini. Le flux emprunte ce chemin si le temps imparti est écoulé sans action de l'utilisateur.

## 💡 Exemple d'utilisation

**Scénario : Assistant chatbot proposant une orientation**

1. Un chatbot de support client accueille l'utilisateur.
2. Le bloc Choix avec dialogue est placé juste après le bloc Départ.
3. Dans le champ dialogue, le créateur écrit : "Bonjour {{Prenom}} ! Que puis-je faire pour vous aujourd'hui ?"
4. Une variable actionsSupport de type Liste<Textes> est créée avec les valeurs : ["Suivre ma commande", "Contacter un conseiller", "Autre demande"], puis sélectionnée dans le champ "choix".
5. Le message s'affiche d'abord en entier, puis les trois boutons apparaissent ; chacun est relié à une séquence différente selon la demande choisie par l'utilisateur.

## ⚙️ Détails Techniques

*   **Identifiant interne** : `choiceDialogue`
*   **Bloc propre au Modèle Chatbot** : dans le code, ce bloc porte l'attribut `template: 'ChatbotTemplate'` et n'est enregistré que dans la liste des blocs du Modèle Chatbot (`blocks.ts`) ; il n'existe pas d'équivalent générique disponible dans les autres types de projets.
*   **Enchaînement dialogue puis choix** : sous le capot, le bloc affiche d'abord le dialogue (même comportement que le bloc Dialogue) et n'affiche les boutons de choix qu'une fois le dialogue entièrement lu par l'utilisateur.
*   **Génération dynamique des sorties** : comme pour le bloc Choix, le nombre de sorties est déterminé automatiquement en fonction du nombre d'éléments dans la liste fournie au champ "choix".
*   🔺 **Noms de variables valides** : seules les lettres non accentuées, les chiffres et le tiret bas (`a-z`, `A-Z`, `0-9`, `_`) sont reconnus. Un nom contenant un accent, un tiret ou une espace (`{{Prénom}}`, `{{mon-score}}`, `{{ Prenom }}`) n'est pas détecté : aucune entrée n'est créée, aucun message d'erreur n'apparaît, et le repère s'affiche tel quel à l'écran. La casse compte : `{{prenom}}` et `{{Prenom}}` sont deux entrées distinctes.
*   **Gestion du chrono** : si le chrono est activé, une fois le temps écoulé, le flux est automatiquement redirigé vers la sortie "temps écoulé".
*   **Médias** : le champ content n'accepte que les formats image (JPG, PNG) et audio (MP3, WAV) ; la vidéo n'est pas prise en charge, comme pour le bloc Dialogue.
*   ⚠️ **Champ chrono non traduit** : contrairement au bloc Choix (où ce champ est bien libellé "chrono"), l'éditeur ne dispose pas de traduction dédiée pour ce champ sur "Choix avec dialogue" : il peut donc s'afficher sous son nom interne `timer` plutôt que "chrono", y compris dans l'interface en français.

---

*Version documentée : v1*