ESD.951     Engineering Innovation and Design

April 8, 2009

MIT Logo

Moving away from single-file VXML

Another use of the goto tag

<goto next="1001_choose_category.vxml"/>

Multiple Files

Generating your VXML

Architecture of Generational VXML

No more .vxml files

Hello World, from Ruby

#!/usr/bin/env ruby

require 'rubygems'
require 'cgi'
require 'builder'

cgi = CGI.new

output = ""

vxml = Builder::XmlMarkup.new(:indent=>2, :target=>output)

vxml.instruct! :xml, :version=>"1.0"
vxml.declare! :DOCTYPE, :vxml, 
	:PUBLIC, "-//BeVocal Inc//VoiceXML 2.0//EN", 
	"http://cafe.bevocal.com/libraries/dtd/vxml2-0-bevocal.dtd"
vxml.vxml(:version=>"2.0", :xmlns=>"http://www.w3.org/2001/vxml") {
  vxml.form(:id=>"form") {
    vxml.block {
      vxml.prompt("Hello world!")
    }
  }
}

cgi.out("application/xml") { 
  output
}

That produces...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE vxml PUBLIC "-//BeVocal Inc//VoiceXML 2.0//EN" "http://cafe.bevocal.com/libraries/dtd/vxml2-0-bevocal.dtd">
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
  <form id="form">
    <block>
      <prompt>Hello world!</prompt>
    </block>
  </form>
</vxml>

But why do this at all?

Random Phrase

#!/usr/bin/env ruby

require 'rubygems'
require 'cgi'
require 'builder'

cgi = CGI.new

output = ""

vxml = Builder::XmlMarkup.new(:indent=>2, :target=>output)

phrases = ["Hello World", "Hello Matz!", "Hey Chris!"]

def randomPhrase(phraseSet)
  return phraseSet[rand(phraseSet.length)]
end

vxml.instruct! :xml, :version=>"1.0"
vxml.declare! :DOCTYPE, :vxml, 
	:PUBLIC, "-//BeVocal Inc//VoiceXML 2.0//EN", 
	"http://cafe.bevocal.com/libraries/dtd/vxml2-0-bevocal.dtd"
vxml.vxml(:version=>"2.0", :xmlns=>"http://www.w3.org/2001/vxml") {
  vxml.form(:id=>"form") {
    vxml.block {
      vxml.prompt(randomPhrase(phrases))
    }
  }
}

cgi.out("application/xml") { 
  output
}

URL Parameters and goto

<goto expr="'http://web.mit.edu/esd.951/www/apps/1001_get_callerid.cgi?callerid=' + session.telephone.ani"/>
cgi = CGI.new
callerid = cgi['callerid']

In-class example

	<field name="myfield">
	  <prompt>Say a number</prompt>
	  <grammar>
	     Digit [1 2 3 4 5 6 7 8 9 0]
	  </grammar>
	  <filled>
	    <goto expr="'myrubyfile.cgi?numberChosen=' + myfield + '&othernum1=' + myfield + '&othernum2=' + myfield + '&othernum3=' + myfield"/>
	  </filled>
	</field>

Scraping the Internet for Prompts

Architecture of Scraping Application

Screen Scraping Libraries

Screen Scraping and You

Some links to get you started