我正在为一个项目制作 IVR 系统,并决定使用Twilio来处理电话部分(拨打和接听电话、发送和接收 SMS 消息)。这将显示一个带有 IVR 前端的网站,允许用户使用他们的按键式电话浏览该网站。
我不会让所有内容都可以通过电话浏览,这只是有意义的。
Twilio 通过查询字符串或通过 POST 向您的 URL 发送参数,然后您使用一个特殊的 XML 子集进行响应,该子集告诉 IVR 如何操作。我使用 ASP.net MVC 很快取得了很大进展,将 Twilio XML 内容视为视图并将站点数据呈现给它。
以下是对 Twilio 的响应:
<?xml version="1.0" encoding="UTF-8" ?>
<Response>
<Say>Hello World</Say>
<Play>http://api.twilio.com/Cowbell.mp3</Play>
</Response>
以下是 Twilio 的菜单外观:
<?xml version="1.0" encoding="UTF-8" ?>
<Gather action="http://your_url" numdigits="1">
<Say>Press 1 to execute your_url, passing a parameter named "digits"</Say>
</Response>
这是我卡住的地方:
我正在尝试添加一个通用的“后退”按钮,也许是一个“跳过”按钮,一个“重复”按钮等,我发现在每个视图中,我检测到按下的数字,然后 if-ing到硬编码的Response.Redirect()
. 我知道对于大量视图和菜单,这将很快变得无法维护。
那么,如何对 MVC 应用程序进行建模,使其更像一个应用程序而不是 Zork 游戏呢?Menu 对象的堆栈,每个对象都有 MenuItem 对象的列表?如何让“9”成为“返回”的通用选项并让应用程序尊重它,无论用户在菜单系统中的哪个位置,而无需在每个视图中为其编码?
如果我现在不花一点时间来正确设计它,后面的功能只是这个项目将陷入混乱的症状。有没有我可以检查想法的 .net IVR 框架?任何帮助将不胜感激,我知道这不是一个新问题,我似乎无法理解最佳路径。