我正在为一个项目创建IVR系统,并已决定Twilio处理电话部分(拨打和接听电话,发送和接收SMS消息)。这将使带有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>
这是我被困的地方:
我正在尝试添加通用的“后退”按钮,也许是“跳过”按钮,“重复”按钮等,并且我发现在每个视图上都在检测到按下的数字,然后如果-ing到硬编码的
Response.Redirect()
。我知道对于大量的视图和菜单,这将很快变得难以维护。因此,如何为MVC应用程序建模,使其更像一个应用程序,而不像Zork游戏?堆栈的Menu对象,每个对象都有MenuItem对象的列表?我如何才能使“ 9”成为“后退”的通用选项并使应用程序尊重它,无论用户在菜单系统中处于何处,而不必在每个视图中为其编码?
如果我现在不花一点时间来适当地设计它,则后置功能只是该项目将陷入混乱的征兆。我可以检查想法的.net IVR框架吗?任何帮助将不胜感激,我知道这不是一个新问题,我似乎无法尽全力以赴。
最佳答案
尽管我几乎对您在说什么一无所知,但由于没人会说任何话,所以我会对它开枪(如果我完全不向方向开枪,请勿对我开枪)。
在MVC 2中,您可以在视图中呈现操作:
<%= Html.Action("home", "menu" , new { someparam = somevalue, someotherparam = someothervalue }) %>
这将使用给定的参数在您的
Menu
控制器中调用Home
动作。然后,该Result
的Action
将插入您的视图中。这样,您就可以保持视图整洁,并将所有Menu内容都放在一个位置。只需在每个视图中添加上述行即可。
同样,可以使用
HtmlHelper
进行相同的操作,但有时上述方法更容易。