
Compartir:
Profesora de inglés convertida en empática ingeniera de software. Una optimista curiosa a la que le apasiona crear contenidos accesibles y ayudar a los desarrolladores a mejorar sus habilidades.
Cómo crear una aplicación de voz Magic 8-Ball con Ruby
Tiempo de lectura: 9 minutos
Seamos realistas. Nuestros días están constantemente llenos de preguntas difíciles:
¿Qué preparo para cenar?
¿Es esto lo mejor para mi carrera?
¿Se ha estropeado la pizza?
¿Debo contestarle?
Ser adulto es muy duro. Y francamente, es duro tener que tomar decisiones... todos todo el tiempo. ¿No sería genial poder volver a los días de la infancia en los que un simple juguete podía resolver todas las preguntas difíciles de la vida? Pero mejor aún, ¿y si lo construyes tú mismo?
En este tutorial crear una aplicación de voz Magic 8-Ball con Ruby. Esta aplicación no hará que las preguntas sean menos difíciles, pero pero facilitará el proceso de toma de decisiones.

Requisitos previos
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
Además, necesitarás:
ngrok para exponer su aplicación Rails al exterior
Crear una aplicación de voz Magic 8-Ball
Cómo crear tu aplicación:
Crear la aplicación Rails
Configurar las rutas y el controlador en la aplicación
Exponga su aplicación externamente con
ngrokComprar un número de teléfono Nexmo
Crear una aplicación Nexmo Voice
Enlazarlo todo
Ejecuta tu aplicación y responde a todas las preguntas difíciles de la vida (las de sí o no, es decir¡)!
Este tutorial te lleva a través del proceso desde cero. Si quieres ver el código terminado, puedes clonar el repositorio repositorio git de este proyecto.
Creación de la aplicación Rails
Para empezar, inicializa un nuevo proyecto de API Rails.
Desde la línea de comandos ejecute lo siguiente:
(Como no hay datos persistentes para esta aplicación, añadir la parte -api --skip-active-record ayuda a que tu aplicación sea superligera).
Muévete a la carpeta de tu nueva aplicación Rails cd magic8-ball-voice-app y ábrelo en tu editor de código preferido.
El flujo de esta aplicación
Hagamos una breve pausa para hablar del flujo de esta aplicación antes de sumergirnos en el código.
El usuario marca el número de la aplicación y se le pide que formule una pregunta. Para demostrar que está dispuesto a recibir un sabio consejo, se le pide que pulse 1 en el teclado. A continuación, la aplicación selecciona aleatoriamente una respuesta para leérsela al usuario.
Para conseguir este flujo, tendrás que crear estas acciones y rutas en tu aplicación:
#answerpara recibir la llamada inicial#caller_inputpara responder con una respuesta seleccionada al azar a la pregunta de la persona que llama y gestionar los errores de entrada#eventpara recibir el evento de la API Nexmo e imprimirlo en la consola
Ahora que el flujo de la aplicación está claro, pasemos a la parte divertida y escribamos las rutas y las acciones del controlador.
Configurar las rutas dentro de la aplicación
Para que tu aplicación sepa a dónde dirigir la solicitud de Nexmo GET debes definir las rutas en routes.rb.
Para responder a la llamada, manejar la entrada de la persona que llama, e imprimir los eventos en tu terminal necesitarás escribir tres rutas únicas.
Abrir /config/routes.rb para añadir:
# routes.rb
get '/answer', to: 'responses#answer'
post '/caller_input', to: 'responses#caller_input'
post '/event', to: 'responses#event' Configurar el controlador dentro de la aplicación
En su terminal, ejecute el comando rails generate controller Responses.
Esto crea un nuevo Controller dentro de la carpeta /app/controllers carpeta.
Dentro de este archivo es donde crearás tus acciones:
# responses_controller.rb
class ResponsesController < ActionController::API
# this URL is the one you use ngrok to create
NGROK_URL = "http://********.ngrok.io"
# it’s up to you if there are more or less positive responses in your array
POSSIBLE_RESPONSES = ["It is certain.", "It is decidedly so.", "Without a doubt.", "Yes, definitely.", "You may rely on it.", "As I see it, yes.", "Most likely.", "The outlook good.", "Yes.", "All signs point to yes.", "Sorry, but no.", "I really don’t think it will work out.", " Don't count on it.", "That my sources say no.", "It is very doubtful."]
def answer
render json:
[
{
:action => 'talk',
:text => 'Welcome to the Magic Eightball hotline. Ask your question and then press 1.',
:bargeIn => true
},
{
:action => 'input',
:eventUrl => ["#{NGROK_URL}/caller_input"],
:timeOut => '10'
}
].to_json
end
A continuación, tendrás que gestionar la entrada de la persona que llama.
Dual Tone Multi Frequency (DTMF) es una forma de señalización utilizada por los sistemas telefónicos para transmitir los dígitos 0-9 y los caracteres * y #. Usaremos 'dtmf' aquí para aceptar el número 1 como señal a la aplicación de que la persona que llama está lista para pasar al siguiente flujo. Si la persona que llama pulsa cualquier otra tecla o no introduce nada, la aplicación le pedirá que lo intente de nuevo.
Entonces utilizaremos el método .sample de Ruby. Esto seleccionará aleatoriamente una respuesta de la Bola 8 Mágica del POSSIBLE_RESPONSES del array.
# responses_controller.rb continued
def caller_input
dtmf = params['dtmf'] || parsed_body['dtmf']
if dtmf == '1'
render json:
[
{
:action => 'talk',
:text => "My answer is: #{POSSIBLE_RESPONSES.sample}. I hope that helps. Thanks for calling the Magic 8-ball hotline. Please call again whenever you need help making a decision in life. Goodbye.",
}
].to_json
else
render json:
[{:action => 'talk', :text => 'I did not recognize your selection. Please call back and try again.'}].to_json
end
end
Y finalmente, imprimamos los detalles del evento en tu terminal para propósitos de depuración.
# responses_controller.rb continued
def event
puts params
end
endNota:
Hay una variable constante en la línea 6 del archivoresponses_controller.rbque contendrá su URL ngrok. Actualmente está en blanco porque usted todavía tiene que crearlo.
Así que vamos a crearlo ahora, ¿vale?
Exponga su aplicación externamente conngrok
El objetivo ahora es exponer su aplicación externamente para que Nexmo pueda comunicarse con ella. Debido a que la aplicación sólo se ejecuta localmente, no está disponible en la máquina de nadie más. Eso significa que necesitamos de alguna manera exponer externamente nuestro servidor local para que Nexmo pueda llegar a él.
Hay un montón de maneras diferentes de hacer esto, pero una de las más simples es con ngrok. Puedes consultar este artículo para una mirada más profunda en cómo funciona todo.
Pero esto es lo esencial:
Descargar e instalar ngrok
Abrir una nueva ventana de terminal
Ejecute lo siguiente desde la línea de comandos:
Aquí, ngrok está apuntando al puerto 3000 ya que asume que su servidor local se está ejecutando en
http://localhost:3000. Si está ejecutando en un puerto diferente, asegúrese de ajustar el comando ngrok.
Ahora debería ver una interfaz de registro ngrok en su ventana de terminal.
Cerca de la parte superior de la interfaz hay una línea que empieza por Forwarding y contiene dos URL. La primera es la URL de ngrok accesible desde el exterior, que termina con ngrok.io y apunta a tu servidor local.

Copie y pegue esa URL en su archivo responses_controller.rb y actualice el archivo NGROK_URL = "http://********.ngrok.io" para que sea esa URL (la que se está ejecutando localmente en su máquina en este momento).

Nota: Asegúrese de guardar su
ngrok.ioen un lugar seguro. También la utilizarás en los próximos pasos.
A continuación, para que su aplicación de voz funcione, debe vincular su cuenta Nexmo, un número de teléfono proporcionado y una aplicación Voice entre sí.
Comprar un número de teléfono Nexmo
En el Panel de control de Nexmo, haga clic en el elemento de menú
Numbersdel menú de la izquierda.Haga clic en la opción
Buy Numbersy accederá a una página en la que podrá elegir el país, las características, el tipo y los cuatro dígitos que desea que tenga el número.
Seleccione el país en el que se encuentra para que la llamada sea local. Para las funciones, seleccione
Voicey para el tipo, móvil o fijo.Haga clic en
Searchpara ver una lista de los números de teléfono disponibles.Seleccione un número haciendo clic en el botón naranja
Buyy volviendo a pulsar el botón naranjaBuyuna vez que aparezca el mensaje de confirmación.
Ya tienes un número de teléfono Nexmo. Su siguiente paso es crear una aplicación en el salpicadero Nexmo.
Crear una aplicación Nexmo
En el menú de la izquierda, haga clic en el
Voicedel menú.Seleccione la
Create an applicationopción. Se le dirigirá a una página en la que podrá configurar una nueva aplicación Nexmo.Rellene el formulario con lo siguiente:
-Application namecampo de texto introducirmagic8-ball-voice-app-Event URLcampo de texto introduzca la URL ngrok guardada:https://[ngrok url here]/event-Answer URLcampo de texto introduzca de nuevo la URL ngrok guardada:https://[ngrok url here]/answerUna vez que esté todo, haga clic en el botón azul
Create Applicationazul. [Video width="1042" height="814" mp4="https://www.nexmo.com/wp-content/uploads/2019/05/create-application.mp4"]
Enlazarlo todo
Ahora tiene un número de voz Nexmo y una aplicación, y todo lo que queda por hacer es vincular los dos juntos.
Seleccione la opción
Numbersen el menú de la izquierda y haga clic enYour numberspara acceder a la página del número de teléfono que acaba de adquirir.Haga clic en el icono del engranaje situado a la derecha de la página.
Seleccione
Applicationdebajo delForward toáreaSeleccione su nueva aplicación Nexmo en la lista desplegable situada bajo el área
Applicationárea.Pulse el botón azul
Okazul.
Tu nuevo número de voz Nexmo ya está vinculado a tu nueva aplicación Nexmo y, con este último paso, ¡ya estás listo para probarlo!
Ejecute su aplicación
Con su servidor ngrok aún funcionando en una ventana, ejecute rails s desde otra ventana en tu terminal.
Esto debería arrancar tu servidor Rails en http://localhost:3000. No hay vistas en tu aplicación, así que la única forma de interactuar con ella es llamarla.
Ahora viene lo divertido.
Prepara la pregunta que te ha resultado demasiado difícil responder por ti mismo.
Marque su nuevo número de teléfono Nexmo desde su propio teléfono.
Deberías escuchar a tu aplicación responder a la llamada y preguntarte el prompt del método
#answerControlador.
No dudes en experimentar con diferentes opciones y jugar con tu aplicación Nexmo. Considere la posibilidad de añadir algunas respuestas tontas a la POSSIBLE_RESPONSES o añadir una opción para obtener una respuesta diferente si a la persona que llama no le gusta la primera. ¡Enhorabuena! Ya tienes una aplicación aplicación Magic 8-Ball Voice usando Rails y la Voice API de Nexmo.
Próximos pasos
Si esto ha despertado tu interés por hacer más cosas con la voz, aquí tienes algunas ideas que puedes probar:
Consulte esta excelente introducción a SMS y Voice con Nexmo.
Eche un vistazo a este divertido tutorial sobre cómo organizar una conferencia telefónica con Nexmo Voice API, Ruby y Rails.
Si desea aún más más clarividencia en tu vida, no dejes de echar un vistazo a este tutorial sobre cómo escribir galletas de la fortuna SMS sin servidor ¡con Nexmo!
