Pergunta

Eu estou fazendo um sistema de IVR para um projeto, e ter decidido sobre Twilio para lidar com o telefone parte (fazer e receber chamadas, enviar e receber mensagens SMS). Isso virá à tona um site com um front-end IVR, que permite aos utilizadores navegar no site usando seu telefone touch-tone.

Eu não estou fazendo todo o conteúdo browse-capazes, por telefone, o que faz sentido.

Twilio envia nos parâmetros para o seu URL na querystring ou via POST, e você responde com um subconjunto especial de XML que conta a IVR como agir. Eu fiz um monte de avançar muito rapidamente com ASP.net MVC, tratando o conteúdo XML Twilio como uma exibição e renderização de dados do site para ele.

Aqui está o que uma resposta a Twilio parece com:

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

Aqui está o que um menu olha como para 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> 

Aqui é onde eu estou preso:

Eu estou tentando adicionar um botão universal "de volta", talvez um botão, um botão de "repeat", etc "pular", e eu estou achando que em cada ponto de vista, estou detectar o dígito pressionado e, em seguida, se-ing a um Response.Redirect() codificado. Eu sei que isto vai tornar-se rapidamente insustentável para um grande número de pontos de vista e menus.

Então, como posso modelar o aplicativo MVC para que seja mais como uma aplicação e menos como um jogo de Zork? Pilhas de objetos do menu, cada um com listas de objetos MenuItem? Como posso fazer, dizer "9" a opção universal para "back" e tem o app respeitá-lo, não importa onde no sistema de menu o usuário é, sem a necessidade de código para ele em cada ponto de vista?

O recurso de volta é apenas um sintoma do caos este projecto vai entrar se eu não tomar um momento agora para projetá-lo corretamente. Há .net IVR quadros lá fora, eu posso inspecionar para idéias? Qualquer ajuda seria apreciada, eu sei que isso não é um problema novo, eu simplesmente não consigo obter minha cabeça em torno do melhor caminho a tomar.

Foi útil?

Solução

Embora eu quase não tenho a menor idéia sobre o que você está falando, já que ninguém sofar disse nada terei um tiro nele (não atirar em mim se eu totalmente não estou na direção).

Em MVC 2, você pode tornar as ações em seus pontos de vista:

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

Este seria chamar a ação Menu em seu controlador Home com os parâmetros dados. O Result deste Action seria, então, inserido na sua opinião.
Desta forma, você pode manter seus pontos de vista limpo, e todas as suas coisas de menu em um só lugar. Só tem que adicionar o acima da linha afirmou em cada vista.

Novamente o mesmo pode ser feito com HtmlHelper de, mas às vezes o acima caminho indicado é apenas mais fácil.

Outras dicas

Ricky partir Twilio aqui.

Por alguma razão, ter o código que está organizada como Zork parece divertido para mim, mas na prática eu posso entender como isso pode conduzir alguém louco!

Acabamos de lançar um monte de tutoriais prontos não-trivial, de produção para ajudar quando os desenvolvedores têm perguntas sobre como organizar um tipo específico de aplicação. Um tutorial é um IVR construído usando C # com ASP.NET MVC .

Dando uma olhada para fora como nós decidimos estruturar as coisas, estamos usando 3 controladores para controlar nossa lógica:

  • IVRController.cs :. Este controlador contém o código que acolhe um usuário quando ele liga para o nosso IVR
  • MenuController.cs :. Este controlador é onde nós determinamos o menu IVR apropriado para o usuário dependendo de suas entradas
  • PhoneExchangeController.cs :. Neste controlador, temos a lógica para encaminhar uma chamada do nosso IVR para outro número de telefone

Como você está olhando para personalizar a experiência, adicionando algo como "Pressione 9 para voltar", fazendo alterações MenuController.cs deve ajudar a chegar lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top