2010-06-10 30 views
2

J'ai besoin de construire un système de dialogue similaire à celui utilisé dans les centres d'appels. Mon système n'est pas basé sur le téléphone, mais le dialogue est similaire. Quelque chose commeSystème de dialogue de style IVR/workflow/menu

System: "Main menu: Enter [1] for menu1, [2] for menu2" 
User: [1] 
System: "menu1: enter [1] for apples, [2] for oranges, [3] for main menu" 
User: [7] 
System: "What??" 
System: "menu1: enter [1] for apples, [2] for oranges, [3] for main menu" 
User: [2] 
    ... and so on 

Je veux avoir une belle déclarative description de toutes les options possibles et une belle façon de courir à travers cet arbre, guidé par l'entrée utilisateur.

Déjà considéré: lexer ANTLR généré/analyseur (semble être un surpuissant), machine d'état à base SCXML (semble que les transitions peuvent être déclarées, le reste doit être codé)

Répondre

1

Je n'ai jamais vu SCXML avant, mais après un bref aperçu sur les pages du projet et les exemples, il me semble qu'il a tout ce dont vous avez besoin. Votre IVR peut être modélisé comme un diagramme d'état. La saisie d'un état présente les choix suivants ou lance une activité (la présentation du niveau de menu suivant est également une activité).

Il peut être difficile d'implémenter un état 'erreur d'entrée utilisateur' (ou SCXML a déjà une solution pour cette tâche commune).

Vous pourriez inventer un petit DSL pour simplifier l'édition de cette machine. Les documents écrits dans cette DSL seraient traduits en fichiers SCXML qui piloteraient le système IVR.

(merci pour le pointeur SCXML!)

+0

SCXML est mon candidat au moment, chose mauvaise entrée peut être contourné. Ce que je n'aime pas, c'est que je ne peux pas bien incorporer les invites système là-bas, ça a l'air horrible quand j'essaye. DSL => génération SCXML pourrait être une option, y penser – unbeli

+0

Qu'en est-il de pousser les invites dans la vue et prendre SCXML seulement pour modéliser la machine d'état? (-> MVC/MVP pattern) –

+0

oui, bonne idée, c'est aussi possible. Mais je me demande toujours s'il existe un outil plus spécifique que SCXML. Par exemple, il y a http://en.wikipedia.org/wiki/VoiceXML mais il est trop attaché à la communication vocale (pauses, etc.) – unbeli