Диалоговая система в стиле IVR / рабочий процесс / меню - PullRequest
2 голосов
/ 10 июня 2010

Мне нужно построить диалоговую систему, аналогичную IVR, используемой в колл-центрах. Моя система не основана на телефоне, но диалог похож. Что-то вроде

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

Я хочу иметь хорошее декларативное описание всех возможных опций и хороший способ пробежаться по этому дереву, руководствуясь пользовательским вводом.

Уже рассмотрено: сгенерированный ANTLR лексер / парсер (кажется, излишним), конечный автомат на основе SCXML (кажется, что могут быть объявлены только переходы, остальные должны быть кодированы)

1 Ответ

1 голос
/ 10 июня 2010

Я никогда раньше не видел SCXML, но после короткого взгляда на страницы проекта и примеры мне кажется, что в нем есть все, что вам нужно. Ваш IVR может быть смоделирован как диаграмма состояний. Ввод состояния либо представляет следующие варианты выбора, либо запускает действие (в то время как представление следующего уровня меню также является действием).

Может быть сложно реализовать состояние «неправильный пользовательский ввод» (или SCXML уже имеет решение для этой общей задачи).

Вы можете изобрести небольшой DSL, чтобы упростить редактирование этой машины состояний. Документы, написанные в этом DSL, будут переведены в файлы SCXML, которые будут управлять системой IVR.

(спасибо за указатель SCXML!)

...