<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Tropo: interesting new IVR platform by Voxeo that supports Groovy</title>
	<atom:link href="http://naleid.com/blog/2009/03/14/tropo-interesting-new-ivr-platform-by-voxeo-that-supports-groovy/feed/" rel="self" type="application/rss+xml" />
	<link>http://naleid.com/blog/2009/03/14/tropo-interesting-new-ivr-platform-by-voxeo-that-supports-groovy/</link>
	<description>Groovy, Grails and OS X tips and tricks</description>
	<lastBuildDate>Thu, 17 May 2012 00:35:22 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>By: Tropo: Interesting online IVR platform and a nice intro by Ted Naleid &#124; devRealm.org</title>
		<link>http://naleid.com/blog/2009/03/14/tropo-interesting-new-ivr-platform-by-voxeo-that-supports-groovy/comment-page-1/#comment-1278</link>
		<dc:creator>Tropo: Interesting online IVR platform and a nice intro by Ted Naleid &#124; devRealm.org</dc:creator>
		<pubDate>Mon, 30 Mar 2009 18:15:33 +0000</pubDate>
		<guid isPermaLink="false">http://naleid.com/blog/?p=47#comment-1278</guid>
		<description>[...] online IVR platform and a nice intro by Ted Naleid. Here is the original link.   Share and [...]</description>
		<content:encoded><![CDATA[<p>[...] online IVR platform and a nice intro by Ted Naleid. Here is the original link.   Share and [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: tednaleid</title>
		<link>http://naleid.com/blog/2009/03/14/tropo-interesting-new-ivr-platform-by-voxeo-that-supports-groovy/comment-page-1/#comment-1264</link>
		<dc:creator>tednaleid</dc:creator>
		<pubDate>Mon, 16 Mar 2009 03:26:13 +0000</pubDate>
		<guid isPermaLink="false">http://naleid.com/blog/?p=47#comment-1264</guid>
		<description>Thanks for the detailed reply Jonathan.  I think a wiki style syntax could work for backup TTS for a wav file.  Of the 2 options that you present, I&#039;d probably prefer the 2nd one for consistency (always requiring the wiki like syntax).  It&#039;d be easy enough to create a helper function in the shims (or in the end user&#039;s code) to allow the easy playing/escaping of a wav file if needed:

&lt;pre lang=&quot;groovy&quot;&gt;
def sayWav(String wavUrl, List backupTts) {
    def URL_REGEXP = /http(?:s?):\/\/\S+/
    def index = 0
    def sayMe = wavUrl.replaceAll(URL_REGEXP) { match -&gt;
        return &quot;[ $match &#124; ${backupTts[index++]} ]&quot;
    }
    say(sayMe)
}

sayWav(&quot;I&#039;m sorry http://example.com/dave.wav I&#039;m afraid I can&#039;t do http://example.com/that.wav.&quot;,
     [&quot;dave&quot;, &quot;that&quot;])
// equivalent to:
// say(&quot;I&#039;m sorry [ http://example.com/dave.wav &#124; dave ] I&#039;m afraid I can&#039;t do [ http://example.com/that.wav. &#124; that ]&quot;)
&lt;/pre&gt;

Rather than double curly brackets, I personally prefer single square brackets (as media-wiki and some other wikis use), many text editors have nicer support for single character brackets and there&#039;s not much reason for those types of characters in normal TTS dialog.

Another alternative that I was thinking of would be similar to the wiki syntax, but might read nicer.  It&#039;s use sort of a prepared statement syntax where you&#039;d have placeholder TTS that would be replaced by the values in an array of wav files in the 2nd parameter (if they can be found):

&lt;pre lang=&quot;groovy&quot;&gt;
    say(&quot;I&#039;m sorry [Dave] I&#039;m afraid I can&#039;t do [that].&quot;, 
        [&quot;http://example.com/dave.wav&quot;, &quot;http://example.com/that.wav&quot;]) 
&lt;/pre&gt;

When I&#039;m doing VXML apps, I&#039;m normally coding the TTS version first as the audio hasn&#039;t been recorded yet, so I think this style would fit my workflow better.  That might not be true for everyone.

The great thing about you guys opening up the platform to using languages like groovy is that even if I don&#039;t like the particular solution that you come up with, as long as you provide the basic building blocks, I can write code to adapt things to my liking :).</description>
		<content:encoded><![CDATA[<p>Thanks for the detailed reply Jonathan.  I think a wiki style syntax could work for backup TTS for a wav file.  Of the 2 options that you present, I&#8217;d probably prefer the 2nd one for consistency (always requiring the wiki like syntax).  It&#8217;d be easy enough to create a helper function in the shims (or in the end user&#8217;s code) to allow the easy playing/escaping of a wav file if needed:</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">def</span> sayWav<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">String</span> wavUrl, <span style="color: #aaaadd; font-weight: bold;">List</span> backupTts<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">def</span> URL_REGEXP <span style="color: #66cc66;">=</span> /http<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">?</span>:s<span style="color: #66cc66;">?</span><span style="color: #66cc66;">&#41;</span>:\/\/\S<span style="color: #66cc66;">+</span>/
    <span style="color: #000000; font-weight: bold;">def</span> index <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>
    <span style="color: #000000; font-weight: bold;">def</span> sayMe <span style="color: #66cc66;">=</span> wavUrl.<span style="color: #006600;">replaceAll</span><span style="color: #66cc66;">&#40;</span>URL_REGEXP<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> match <span style="color: #66cc66;">-&gt;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #ff0000;">&quot;[ $match | ${backupTts[index++]} ]&quot;</span>
    <span style="color: #66cc66;">&#125;</span>
    say<span style="color: #66cc66;">&#40;</span>sayMe<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
sayWav<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;I'm sorry http://example.com/dave.wav I'm afraid I can't do http://example.com/that.wav.&quot;</span>,
     <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;dave&quot;</span>, <span style="color: #ff0000;">&quot;that&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">// equivalent to:</span>
<span style="color: #808080; font-style: italic;">// say(&quot;I'm sorry [ http://example.com/dave.wav | dave ] I'm afraid I can't do [ http://example.com/that.wav. | that ]&quot;)</span></pre></div></div>

<p>Rather than double curly brackets, I personally prefer single square brackets (as media-wiki and some other wikis use), many text editors have nicer support for single character brackets and there&#8217;s not much reason for those types of characters in normal TTS dialog.</p>
<p>Another alternative that I was thinking of would be similar to the wiki syntax, but might read nicer.  It&#8217;s use sort of a prepared statement syntax where you&#8217;d have placeholder TTS that would be replaced by the values in an array of wav files in the 2nd parameter (if they can be found):</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;">    say<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;I'm sorry [Dave] I'm afraid I can't do [that].&quot;</span>, 
        <span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;http://example.com/dave.wav&quot;</span>, <span style="color: #ff0000;">&quot;http://example.com/that.wav&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>When I&#8217;m doing VXML apps, I&#8217;m normally coding the TTS version first as the audio hasn&#8217;t been recorded yet, so I think this style would fit my workflow better.  That might not be true for everyone.</p>
<p>The great thing about you guys opening up the platform to using languages like groovy is that even if I don&#8217;t like the particular solution that you come up with, as long as you provide the basic building blocks, I can write code to adapt things to my liking :).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Taylor</title>
		<link>http://naleid.com/blog/2009/03/14/tropo-interesting-new-ivr-platform-by-voxeo-that-supports-groovy/comment-page-1/#comment-1263</link>
		<dc:creator>Jonathan Taylor</dc:creator>
		<pubDate>Mon, 16 Mar 2009 01:54:52 +0000</pubDate>
		<guid isPermaLink="false">http://naleid.com/blog/?p=47#comment-1263</guid>
		<description>Ted, thanks for looking at some of the insides of Tropo.  A few comments:

&gt;Looks like most of the coolest stuff is on the currentCall and incomingCall objects.

incomingCall is the Java object that implements the Tropo &quot;raw&quot; API.  We have what we call a shim script in each programming language Tropo supports that uses the raw API to implement a per-language core API.  The core API is what you see in currentCall.   In the output above currentCall is the Groovy implementation of the core API.  

The current Tropo documentation is all about the core API, but we&#039;re exposing the raw API too to encourage development of other frameworks.   In fact, we already have an enhanced framework that was built by a Ruby-guru (I&#039;ll let him announce it) that we plan to bring to Groovy as well.

&gt; [missing things] like backup TTS for missing .wav files

Yep, this is an item we discussed - but didn&#039;t settle on an answer before the launch.   

Currently you play an audio file by simply including a URL in any prompt string you send to the Tropo prompt/say/ask commands, like this:

&quot;Hello, this is a bell:  http://tropo.com/bell.wav   Did you like it?&quot;

We are looking at either: 

1. Adding a Wiki-like syntax, like this:

{{url&#124;alternate-text}}

Example:

&quot;Hello, this is a bell {{http://tropo.com/bell.wav&#124;bell}}.  Did you like it?

2. removing the simple inline-URL syntax and only having the Wiki syntax above.   One reason is to make it easy to read back a URL as a string in text-to-speech.   Currently you have to escape or format a URL for Tropo to read it instead of play it.

I&#039;d love to hear any thoughts or alternatives anyone has related to the above options.

&gt; I believe that they have plans to fill in many of these gaps as the product matures and moves out of beta

Absolutely.   Over the next few months the Tropo API will get support for nearly all of the features found in our Prophecy CallXML, CCXML, and VoiceXML browsers.   Tropo re-uses most of our Prophecy technology, including the SIPmethod Java JSR-289 SIP servlet engine and our Java JSR-309 Media Control API talking to our own MRCP-based media server... so its easy to get things going quickly.

We&#039;re also adding support for a few more programming languages.  :)

-Jonathan Taylor
-CEO (Coding Executive Officer) Tropo / Voxeo</description>
		<content:encoded><![CDATA[<p>Ted, thanks for looking at some of the insides of Tropo.  A few comments:</p>
<p>&gt;Looks like most of the coolest stuff is on the currentCall and incomingCall objects.</p>
<p>incomingCall is the Java object that implements the Tropo &#8220;raw&#8221; API.  We have what we call a shim script in each programming language Tropo supports that uses the raw API to implement a per-language core API.  The core API is what you see in currentCall.   In the output above currentCall is the Groovy implementation of the core API.  </p>
<p>The current Tropo documentation is all about the core API, but we&#8217;re exposing the raw API too to encourage development of other frameworks.   In fact, we already have an enhanced framework that was built by a Ruby-guru (I&#8217;ll let him announce it) that we plan to bring to Groovy as well.</p>
<p>&gt; [missing things] like backup TTS for missing .wav files</p>
<p>Yep, this is an item we discussed &#8211; but didn&#8217;t settle on an answer before the launch.   </p>
<p>Currently you play an audio file by simply including a URL in any prompt string you send to the Tropo prompt/say/ask commands, like this:</p>
<p>&#8220;Hello, this is a bell:  <a href="http://tropo.com/bell.wav" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/tropo.com/bell.wav?referer=');">http://tropo.com/bell.wav</a>   Did you like it?&#8221;</p>
<p>We are looking at either: </p>
<p>1. Adding a Wiki-like syntax, like this:</p>
<p>{{url|alternate-text}}</p>
<p>Example:</p>
<p>&#8220;Hello, this is a bell {{http://tropo.com/bell.wav|bell}}.  Did you like it?</p>
<p>2. removing the simple inline-URL syntax and only having the Wiki syntax above.   One reason is to make it easy to read back a URL as a string in text-to-speech.   Currently you have to escape or format a URL for Tropo to read it instead of play it.</p>
<p>I&#8217;d love to hear any thoughts or alternatives anyone has related to the above options.</p>
<p>&gt; I believe that they have plans to fill in many of these gaps as the product matures and moves out of beta</p>
<p>Absolutely.   Over the next few months the Tropo API will get support for nearly all of the features found in our Prophecy CallXML, CCXML, and VoiceXML browsers.   Tropo re-uses most of our Prophecy technology, including the SIPmethod Java JSR-289 SIP servlet engine and our Java JSR-309 Media Control API talking to our own MRCP-based media server&#8230; so its easy to get things going quickly.</p>
<p>We&#8217;re also adding support for a few more programming languages.  :)</p>
<p>-Jonathan Taylor<br />
-CEO (Coding Executive Officer) Tropo / Voxeo</p>
]]></content:encoded>
	</item>
</channel>
</rss>

