This commit is contained in:
Peter Saint-Andre 2013-06-12 20:50:07 -06:00
parent 450f6ba318
commit 103be0cecb
1 changed files with 24 additions and 72 deletions

View File

@ -34,6 +34,12 @@
<jid>jdecastro@voxeo.com</jid>
<uri>http://voxeolabs.com</uri>
</author>
<revision>
<version>0.2</version>
<date>2013-06-10</date>
<initials>psa</initials>
<remark><p>Updates to address open issues.</p></remark>
</revision>
<revision>
<version>0.1</version>
<date>2013-05-06</date>
@ -52,7 +58,7 @@
<ul>
<li>A Rayo server takes on the role of negotiating a media session between itself and some other endpoint, or between two external endpoints, by way of an implementation-specific means, be that Jingle, SIP, the public-switched telephone network, or anything else. The server may even bridge multiple networks.</li>
<li>The server then presents the Rayo protocol as an interface to a Rayo client, allowing it to monitor and/or exercise third-party control over particular the established media sessions.</li>
<li>The server then presents the Rayo protocol as an interface to a Rayo client, allowing it to monitor and/or exercise third-party control over the established media sessions.</li>
<li>The client has the option to accept/reject/answer inbound session requests, request the creation of outbound sessions and monitor their progress, execute media operations such as speech synthesis, speech recognition &amp; recording, and to end sessions.</li>
</ul>
@ -82,9 +88,9 @@
</presence>
]]></example>
<p>In this example, a call from 'tel:+13058881212' has reached the Rayo server 'shakespeare.lit' by calling 'tel:+18003211212', and been assigned an ID '9f00061'. The server has determined that 'juliet@capulet.lit' is a valid candidate for delegating control of the call, and so has directed an <a href='def-offer'>offer event</a> to her 'balcony' resource.</p>
<p>In this example, a call from 'tel:+13058881212' has reached the Rayo server 'shakespeare.lit' by calling 'tel:+18003211212', and been assigned an ID '9f00061'. The server has determined that 'juliet@capulet.lit' is a valid candidate to be the client to whom the server delegates control of the call, and so has directed an <a href='def-offer'>offer event</a> to her 'balcony' resource.</p>
<p>The client then decides that it is able to handle the incoming call, and so accepts it from the server, thus gaining exclusive control and indicating to the calling party that the call will be processed and that it should ring.</p>
<p>The client, 'juliet@capulet.lit', then decides that it is able to handle the incoming call, and so accepts it from the server, thus gaining exclusive control and indicating to the calling party that the call will be processed and that it should ring.</p>
<example caption="Potential controlling party attempts to become definitive controlling party by sending the call an accept command"><![CDATA[
<iq from='juliet@capulet.lit/balcony'
@ -143,7 +149,7 @@
to='juliet@capulet.lit/balcony'
type='result'
id='j9d3j'>
<ref xmlns='urn:xmpp:rayo:1' id='fgh4590'/>
<ref xmlns='urn:xmpp:rayo:1' uri='xmpp:9f00061@call.shakespeare.lit/fgh4590'/>
</iq>
]]></example>
@ -269,7 +275,7 @@
<section2 topic='Actors' anchor='concepts-actors'>
<section3 topic='Server' anchor='concepts-actors-server'>
<p>A Rayo server is an entity which is capable of receiving and intiating calls and being party to their media stream, while exposing a Rayo interface to a client in order to permit control over its calls. The Rayo server may handle calls in any way supported by the implementation, such as SIP, Jingle, etc, and should expose a full XMPP domain at the root level of the service deployment (eg shakespeare.lit).</p>
<p>A Rayo server is an entity which is capable of receiving and initiating calls and being party to their media stream, while exposing a Rayo interface to a client in order to permit control over its calls. The Rayo server may handle calls in any way supported by the implementation, such as SIP, Jingle, etc, and should expose a full XMPP domain at the root level of the service deployment (eg shakespeare.lit).</p>
<p>The Rayo server is responsible for keeping track of valid clients, routing calls to the correct potential controlling parties, performing authorization measures on received stanzas, etc.</p>
<p>For the purposes of this specification, complex server-side deployments such as clusters, proxies, gateways, protocol translators, etc are not considered. Further details of such concepts may be found in their (present or future) relevant specifications.</p>
</section3>
@ -288,7 +294,7 @@
<p>Mixers have separate presence from the root domain of the service and its calls and thus appear to be separate entities.</p>
</section3>
<section3 topic='Commands' anchor='concepts-actors-commands'>
<p>A Rayo command is a simple combination of request and response and may be issued directly to the service domain, or to a call or a mixer. Commands are executed serially and are generally very short-lived.</p>
<p>A Rayo command is a simple combination of request and response and may be issued directly to the service domain, a call, a mixer or a component attached to any of the former. Commands are executed serially and are generally very short-lived.</p>
</section3>
<section3 topic='Components' anchor='concepts-actors-components'>
<p>Components extend the Rayo protocol by providing additional media and call control functionality.</p>
@ -1479,19 +1485,10 @@
<link url='#def-component-input-match'>match</link> (indicating that one of the grammars matched the received input).
</li>
<li>
<link url='#def-component-input-initial-timeout'>initial-timeout</link> (indicating that the initial timeout was triggered).
<link url='#def-component-input-noinput'>noinput</link> (indicating that no input was received before a timeout was encountered).
</li>
<li>
<link url='#def-component-input-inter-digit-timeout'>inter-digit-timeout</link> (indicating that the inter-digit timeout was triggered).
</li>
<li>
<link url='#def-component-input-max-silence'>max-silence</link> (indicating that the max-silence timeout was triggered).
</li>
<li>
<link url='#def-component-input-min-confidence'>min-confidence</link> (indicating that the minimum confidence threshold was not reached).
</li>
<li>
<link url='#def-component-input-nomatch'>no-match</link> (indicating that input was received which did not match any of the specified grammars).
<link url='#def-component-input-nomatch'>nomatch</link> (indicating that input was received which did not match any of the specified grammars).
</li>
</ul>
@ -2322,7 +2319,7 @@
<tr>
<td>repeat-times</td>
<td>Indicates the number of times the output should be played.</td>
<td>An integer greater than 0.</td>
<td>A positive integer or 0 to repeat forever.</td>
<td>1</td>
<td>OPTIONAL</td>
</tr>
@ -2472,7 +2469,7 @@
<tr>
<td>mode</td>
<td>The method by which to collect input.</td>
<td>any|dtmf|speech</td>
<td>any|dtmf|voice</td>
<td>any</td>
<td>OPTIONAL</td>
</tr>
@ -2593,28 +2590,10 @@
</table>
</section4>
<section4 topic='Initial Timeout Element' anchor='def-component-input-initial-timeout'>
<p>Indicates that the component came to an end because the initial timeout was triggered.</p>
<p>The &lt;initial-timeout/&gt; element MUST be empty.</p>
<p>The &lt;initial-timeout/&gt; element has no attributes.</p>
</section4>
<section4 topic='Inter-digit Timeout Element' anchor='def-component-input-inter-digit-timeout'>
<p>Indicates that the component came to an end because the inter-digit timeout was triggered.</p>
<p>The &lt;inter-digit-timeout/&gt; element MUST be empty.</p>
<p>The &lt;inter-digit-timeout/&gt; element has no attributes.</p>
</section4>
<section4 topic='Max Silence Element' anchor='def-component-input-max-silence'>
<p>Indicates that the component came to an end because the max-silence timeout was triggered.</p>
<p>The &lt;max-silence/&gt; element MUST be empty.</p>
<p>The &lt;max-silence/&gt; element has no attributes.</p>
</section4>
<section4 topic='Min Confidence Element' anchor='def-component-input-min-confidence'>
<p>Indicates that the component came to an end because the minimum confidence threshold was not reached.</p>
<p>The &lt;min-confidence/&gt; element MUST be empty.</p>
<p>The &lt;min-confidence/&gt; element has no attributes.</p>
<section4 topic='Noinput' anchor='def-component-input-noinput'>
<p>Indicates that the component came to an end because a timeout was triggered before input was received.</p>
<p>The &lt;noinput/&gt; element MUST be empty.</p>
<p>The &lt;noinput/&gt; element has no attributes.</p>
</section4>
<section4 topic='Nomatch' anchor='def-component-input-nomatch'>
@ -3593,7 +3572,7 @@
</documentation>
</annotation>
</attribute>
<attribute name="repeat-times" type="positiveInteger" use="optional" default="1">
<attribute name="repeat-times" type="nonNegativeInteger" use="optional" default="1">
<annotation>
<documentation>
Indicates the number of times the output should be played.
@ -3817,7 +3796,7 @@
<simpleType>
<restriction base="token">
<enumeration value="any" />
<enumeration value="speech" />
<enumeration value="voice" />
<enumeration value="dtmf" />
</restriction>
</simpleType>
@ -3939,37 +3918,10 @@
</element>
<!-- Initial timeout reason -->
<element name="initial-timeout" type="core:empty">
<element name="noinput" type="core:empty">
<annotation>
<documentation>
Indicates that the component came to an end because the initial timeout was triggered.
</documentation>
</annotation>
</element>
<!-- Inter-digit timeout reason -->
<element name="inter-digit-timeout" type="core:empty">
<annotation>
<documentation>
Indicates that the component came to an end because the inter-digit timeout was triggered.
</documentation>
</annotation>
</element>
<!-- Max-silence reason -->
<element name="max-silence" type="core:empty">
<annotation>
<documentation>
Indicates that the component came to an end because the max-silence timeout was triggered.
</documentation>
</annotation>
</element>
<!-- Min-confidence reason -->
<element name="min-confidence" type="core:empty">
<annotation>
<documentation>
Indicates that the component came to an end because the minimum confidence threshold was not reached.
Indicates that the component came to an end because a timeout was triggered before input was received.
</documentation>
</annotation>
</element>