Pregunta

Estoy haciendo un sistema IVR para un proyecto, y han decidido sobre Twilio para manejar el teléfono porción (hacer y recibir llamadas, enviar y recibir mensajes SMS). Este saldrá a la superficie de un sitio web con un front-end IVR, permitiendo a los usuarios navegar por el sitio utilizando su teléfono de tonos.

No estoy haciendo todo el contenido navegable de por teléfono, justo lo que tiene sentido.

Twilio envía en los parámetros de su URL en la cadena de consulta o mediante POST, y que responden con un subconjunto especial de XML que indica al IVR cómo actuar. Hice un montón de avanzar muy rápidamente con ASP.net MVC, tratando el contenido XML Twilio como Ver y renderización de datos del sitio para él.

Esto es lo que una respuesta a Twilio se ve así:

<?xml version="1.0" encoding="UTF-8" ?> 
<Response>
<Say>Hello World</Say>
<Play>http://api.twilio.com/Cowbell.mp3</Play>
</Response> 

Esto es lo que un menú se parece a 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> 

Aquí es donde estoy atascado:

Estoy intentando añadir un botón universal "hacia atrás", tal vez un botón "skip", un botón, etc "repetición", y estoy encontrando que en cada punto de vista, estoy detectando el dígito apretado y luego si-ción a un Response.Redirect() codificado. Sé que esto se va a convertir rápidamente imposible de mantener para un gran número de puntos de vista y los menús.

Así que, ¿cómo puedo modelar la aplicación MVC para que sea más como una aplicación y menos como un juego de Zork? Las pilas de objetos de menú, cada uno con listas de objetos MenuItem? ¿Cómo puedo hacer, por ejemplo "9" la opción universal para la "vuelta" y tener la aplicación respeta, no importa en qué parte del sistema de menús es el usuario, sin tener que codificar para que en cada vista?

La función de espalda es sólo un síntoma del caos este proyecto se suba si no tomo un momento para diseñar correctamente. ¿Hay .net marcos IVR por ahí que puede inspeccionar para las ideas? Cualquier ayuda se agradece, sé que esto no es un problema nuevo, me parece que no puede conseguir mi cabeza alrededor de la mejor ruta a tomar.

¿Fue útil?

Solución

A pesar de que casi no tiene ni idea de lo que está hablando, ya que nadie hasta la fecha se ha dicho nada voy a tener un tiro en él (no me dispares si estoy totalmente no estoy en la dirección).

En MVC 2 se puede hacer que las acciones en sus puntos de vista:

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

Esto requeriría la acción Menu en su controlador Home con los parámetros dados. El Result de esta Action entonces ser insertado en la vista.
De esta manera usted puede mantener sus puntos de vista limpio, y todos los productos del menú en un solo lugar. Sólo hay que añadir la línea se ha dicho en todas las vistas.

Una vez más el mismo se puede hacer con la HtmlHelper, sin embargo, a veces la manera indicada anteriormente es simplemente más fácil.

Otros consejos

Ricky Twilio desde aquí.

Por alguna razón, tener código que se organiza como Zork suena divertido para mí, pero en la práctica lo que puedo entender cómo esto puede conducir a alguien loco!

Acabamos de lanzar un manojo de no triviales, tutoriales de producción listo para ayudar cuando los desarrolladores tienen preguntas acerca de cómo organizar una clase específica de aplicación. Un tutorial es una IVR construido usando C # con ASP.NET MVC .

Tomando una mirada hacia fuera cómo decidimos estructurar las cosas, estamos utilizando 3 controladores para controlar nuestra lógica:

  • IVRController.cs . Este controlador contiene el código que da la bienvenida a un usuario cuando llaman a nuestro IVR
  • MenuController.cs . Este controlador es donde determinamos el menú IVR adecuado para el usuario en función de sus entradas
  • PhoneExchangeController.cs . En este controlador, tenemos la lógica para reenviar una llamada de nuestro IVR a otro número de teléfono

Como usted está buscando para personalizar la experiencia mediante la adición de algo así como "Pulse 9 para volver", haciendo cambios en MenuController.cs debe ayudar a llegar hasta allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top