java - IVR 风格的对话系统/工作流程/菜单

标签 java workflow parsing state-machine

我需要构建一个类似于调用中心使用的 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 的状态机(似乎只能声明转换,其余需要编码)

最佳答案

我以前从未见过 SCXML,但在浏览了项目页面和示例之后,我觉得它拥有您需要的一切。您的 IVR 可以建模为状态图。进入一个状态要么显示下一个选项,要么启动一个 Activity (同时显示下一个菜单级别也是一个 Activity )。

实现“错误的用户输入”状态可能会很棘手(或者 SCXML 已经为这个常见任务提供了解决方案)。

您可以发明一个小型 DSL 来简化对该状态机的编辑。用此 DSL 编写的文档将被翻译成驱动 IVR 系统的 SCXML 文件。

(感谢 SCXML 指针!)

关于java - IVR 风格的对话系统/工作流程/菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3012985/

相关文章:

java - 用 Java 读取 Dxf 文件

html - 解析 HTML 文本时的正则表达式与 XPath

workflow - Symfony 工作流组件问题...标记不存在

c++ - 函数只能在 main 中调用一次

javascript - 在Jeditable中,如何使当我单击div进行编辑时,文本框内容具有已处理的初始值?

python - 我想从具有类值的 div 打印数据,但我的代码不断从另一个类似的 div 返回其他数据

java - 如何使用 RxJava2 将多个单词组合成一个句子?

java - 在 firebase android 中使用子键获取父名称

Java Craps 小程序总是崩溃?

architecture - 用于功能、稳定版本等的 Mercurial 存储库结构