我正在为一个项目制作一个IVR系统,并决定Twilio处理电话部分(拨打和接听电话,发送和接收短信)。这将展示一个带有IVR前端的网站,允许用户使用他们的按键式电话浏览网站。
我没有通过手机浏览所有内容,只是有意义。
Twilio通过查询字符串或通过POST将参数发送到您的URL,并使用特殊的XML子集响应,告知IVR如何操作。我使用ASP.net MVC很快取得了很大的进展,将Twilio XML内容视为一个View并将网站的数据呈现给它。
以下是对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>
这就是我被困的地方:
我正在尝试添加一个通用的“后退”按钮,可能是一个“跳过”按钮,一个“重复”按钮等,我发现在每个视图中,我正在检测按下的数字然后如果是硬编码的Response.Redirect()
。我知道对于大量的视图和菜单来说,这将很快变得无法维护。
那么,我如何为MVC应用程序建模,使其更像是一个应用程序而不像Zork的游戏?菜单对象的堆栈,每个对象都包含MenuItem对象的列表?我怎么能说“9”这个“后退”的通用选项并让应用程序尊重它,无论用户在哪个菜单系统,都不必在每个视图中编写代码?
如果我现在不花一点时间设计它,那么后面的功能只是这个项目将陷入混乱的一个症状。那里有.net IVR框架,我可以检查一下想法吗?任何帮助都会受到赞赏,我知道这不是一个新问题,我似乎无法绕过最佳路径。
答案 0 :(得分:2)
虽然我几乎不知道你在说什么,但是因为没有人会说任何东西我会对它进行一次射击(如果我完全没有朝这个方向射击,不要开枪)。
在MVC 2中,您可以在视图中渲染操作:
<%= Html.Action("home", "menu" , new { someparam = somevalue, someotherparam = someothervalue }) %>
这将使用给定参数调用Menu
控制器中的Home
操作。然后会在您的视图中插入此Result
的{{1}}
通过这种方式,您可以将视图保持干净,并将所有菜单内容保存在一个位置。只需在每个视图中添加上述行。
同样可以使用Action
来完成相同的操作,但有时上述方法更容易。