IVR против Asp.net MVC:Как мне перестать изобретать браузер заново?
-
18-09-2019 - |
Вопрос
Я делаю систему IVR для проекта и решил Твилио для управления телефонной частью (совершение и прием звонков, отправка и получение SMS-сообщений).Появится веб-сайт с интерфейсом IVR, позволяющим пользователям перемещаться по сайту с помощью телефона с тональным набором.
Я не делаю весь контент доступным для просмотра по телефону, а только то, что имеет смысл.
Twilio отправляет параметры на ваш URL-адрес в строке запроса или через POST, а вы отвечаете специальным подмножеством XML, который сообщает IVR, как действовать.Я очень быстро добился большого прогресса с ASP.net MVC, рассматривая XML-контент Twilio как представление и отображая в него данные сайта.
Вот как выглядит ответ на 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-фреймворки, которые я могу проверить на наличие идей?Любая помощь будет оценена по достоинству, я знаю, что это не новая проблема, я просто не могу понять, как лучше всего пойти.
Решение
Хотя я почти понятия не имею, о чем вы говорите, поскольку никто до сих пор ничего не сказал, я попробую (не стреляйте в меня, если я совсем не в том направлении).
В MVC 2 вы можете отображать действия в своих представлениях:
<%= Html.Action("home", "menu" , new { someparam = somevalue, someotherparam = someothervalue }) %>
Это вызовет Menu
действие в вашем Home
контроллер с заданными параметрами.А Result
этого Action
затем будет вставлен в ваше представление.
Таким образом, вы сможете сохранить чистоту представлений и все содержимое меню в одном месте.Просто нужно добавить указанную выше строку в каждое представление.
Опять же то же самое можно сделать с HtmlHelper
Но иногда описанный выше способ оказывается проще.
Другие советы
Здесь Рикки из Твилио.
По какой-то причине мне кажется забавным иметь код, организованный по принципу Zork, но на практике я понимаю, как это может свести кого-то с ума!
Мы только что выпустили несколько нетривиальных, готовых к использованию руководств, которые помогут разработчикам задать вопросы о том, как организовать приложения определенного типа.Один учебник представляет собой IVR создан с использованием C# с ASP.NET MVC..
Взглянув на то, как мы решаем структурировать вещи, мы используем три контроллера для управления нашей логикой:
- IVRController.cs:Этот контроллер содержит код, который приветствует пользователя, когда он звонит в наш IVR.
- Менюконтроллер.cs:В этом контроллере мы определяем подходящее меню IVR для пользователя в зависимости от его входных данных.
- PhoneExchangeController.cs:В этом контроллере у нас есть логика для переадресации вызова с нашего IVR на другой номер телефона.
Поскольку вы хотите настроить интерфейс, добавив что-то вроде «Нажмите 9, чтобы вернуться», внося изменения в MenuController.cs
должен помочь вам добраться туда.