Este documento describe cómo usar la interfaz de voz con Asterisk y Ruby on Rails. Asterisk es un software de centralita telefónica de código abierto que permite agregar funcionalidad de voz a aplicaciones web mediante protocolos como SIP. Telegraph es un plugin de Rails que permite integrar Asterisk para agregar respuestas de voz y formularios telefónicos a las vistas y controladores de Rails. El documento incluye ejemplos de cómo agregar menús de opciones de voz, formularios numéricos y reproducción de sonidos a las respuestas.
16. Telegraph y AGI
exten => 105, 1, AGI(agi://127.0.0.1/my_route?param1=value)
wants.voice do
render_voice do |voice|
voice.play “hello-world”
voice.link_to_dtmf 'bank-lineitem-menu' do
link 1, :action=>"new"
link 2, :action=>"list"
link 3, :action=>"index"
end
end
end
20. Ejemplo de voice view
def show_notas
@alumno = Alumno.find_by_dni(params[:dni])
@notas = @alumno.notas_ultima_evaluacion
end
<% @notas.each do |nota| %>
<tr>
<td class="list"><%= nota.asignatura %></td>
<td class="list"><%= nota.nota %></td>
</tr>
<% end %>
21. Uso de Telegraph
$ script/plugin install svn://rubyforge.org/var/svn/telegraph/trunk
en /etc/asterisk/extensions.conf:
exten => 777,1, AGI(agi://192.168.1.1:4574/alumnos/index)
en app/controllers/alumnos_controller.rb:
def index
respond_to do |wants|
wants.html { render }
wants.voice {
render_voice { |voice| voice.play_sound "hello-world" }
}
end
end
23. respond_to
def index
respond_to do |wants|
wants.html { render }
wants.voice { render_voice }
end
end
$ vi app/views/alumnos/index.voice
voice.play_sound "hello-world"
24. index
# index.rhtml
<h1>Consultas</h1>
<ul>
<li> <%= link_to "Faltas", :action=>"faltas" %> </li>
<li> <%= link_to "Notas", :action=>"notas" %> </li>
</ul>
# index.voice
voice.play_sound 'thank-you-for-calling'
voice.link_to_dtmf 'presione1-2' do
link 1, :controller => "alumnos", :action => "faltas"
link 2, :action => "notas"
end
25. formulario
# notas.rhtml
<h1>Consultar notas</h1>
<% form_tag '/alumnos/show_notas' do %>
DNI: <%= text_field_tag 'dni' %>
<%= submit_tag 'Ver notas' %>
<% end %>
# notas.voice
voice.form :url=>{:controller =>
'alumnos', :action=>'show_notas'} do |form|
form.numeric_input 'dni', 'dni', :max_digits=>8
end
26. resultados
# show_notas rhtml
<h3>Notas de <%= @alumno.nombre %></h3>
<table class="list">
<% @notas.each do |nota| %>
<tr>
<td class="list"><%= nota.asignatura %></td>
<td class="list"><%= nota.nota %></td>
</tr>
<% end %>
</table>
# show.voice
@notas.each do |nota|
voice.play nota.asignatura.to_slug
voice.play nota.nota
end
sleep 2.seconds
voice.play "vm-goodbye"
27.
28.
29. No hay que pasarse
Web vs Mobile web vs Voz
ej: 466453.com