4

我正在为一个项目制作 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 框架?任何帮助将不胜感激,我知道这不是一个新问题,我似乎无法理解最佳路径。

4

2 回答 2

2

虽然我几乎不知道你在说什么,因为到目前为止没有人说什么我会开枪的(如果我完全不在这个方向,请不要开枪)。

在 MVC 2 中,您可以在视图中呈现操作:

<%= Html.Action("home", "menu" , new { someparam = somevalue, someotherparam = someothervalue }) %>

这将使用给定的参数调用控制器中的Menu操作。Home然后ResultAction插入到您的视图中。
这样,您可以保持视图干净,并将所有菜单内容集中在一个地方。只需在每个视图中添加上述行。

同样可以使用HtmlHelper's 完成相同的操作,但有时上述方式更容易。

于 2010-03-09T07:56:41.940 回答
0

来自 Twilio 的 Ricky 在这里。

出于某种原因,拥有像 Zork 这样有组织的代码对我来说听起来很有趣,但在实践中我可以理解这可能会让某人发疯!

我们刚刚发布了一系列重要的、生产就绪的教程,以帮助开发人员在对如何组织特定类型的应用程序有疑问时提供帮助。一个教程是使用 C# 和 ASP.NET MVC 构建的 IVR

看看我们如何决定构建事物,我们使用 3 个控制器来控制我们的逻辑:

  • IVRController.cs:此控制器包含当用户调用我们的 IVR 时欢迎用户的代码。
  • MenuController.cs:这个控制器是我们根据用户的输入为用户确定合适的 IVR 菜单的地方。
  • PhoneExchangeController.cs:在这个控制器中,我们有将呼叫从 IVR 转发到另一个电话号码的逻辑。

当您希望通过添加“按 9 后退”之类的内容来自定义体验时,对 进行更改MenuController.cs应该可以帮助您实现目标。

于 2016-04-11T11:37:22.420 回答