性格决定命运 气度左右格局 拼搏方能取胜 谦虚才会进步

IVR-2 [Voice XML规范详细描述4]

上一篇 / 下一篇  2008-03-25 09:31:53 / 个人分类:做着

<一>、Blind Transfer
    Blind Transfer是用来将主、被叫联结起来的操作。在元素<transfer>前和在元素<transfer>内的<prompt>语句都会在转接开始前依次播放,而且同样具有bargein属性。
    因为在转接过程中声音文件不能播放给主叫,所以transferaudio属性指定的语音文件在转接过程中被忽略。不管转接是否成功,VoiceXML语音平台不能再获得对呼入和转接电话的控制权。
    转接的状态不能得到。例如,不可能知道被叫是不是忙,这次呼叫是否成功等等。然而,有些错误是可以得到的,如主叫无权呼叫被叫方或者目标地址URI是错误的。
    一旦转接开始,VoiceXML解释器与电话进程脱离联系,平台将抛出一个connection.disconnect.transfer错误,解释器还会继续运行。
ActionForm. item变量的值事件或错误原因
转接开始undefinedconnection.disconnect.transfer转接进行,但不会返回。
转接结束unknown 转接结束,但结果未知。
表19:Blind Transfer Outcomes
 
    <二>、Bridge Transfer
    对于Bridge Transfer,主叫和被叫是以全双工方式进行的。
 
    在<transfer>语句前和在<transfer>语句内的提示语音会依次播放,bargein也是有效的。
 
      1、Listening for user input during a transfer
      在<transfer>元素中可以指定一个或多个语法,这样在通话过程中,就可以监视用户的输入而中断转接。
      可以指定两种输入:
        ·DTMF输入;
        ·语音输入。
      如果用户的输入匹配了所指定的语法,VoiceXML解释器将继续按照VoiceXML文本所指定的操作运行。如果没有指定语法文件,在转接过程中,将不监控用户的输入。Bargein属性同样适用于元素<transfer>前和元素<transfer>内的语音提示。此时,外呼开始;Transferaudio所指定的语音播放开始;语法文件所指定的DTMF或语音识别成为Bargein的唯一方式(直到对远端的联结建立)。因此bargeintype被忽略。转接元素是模式的,因为在其作用域之外的语法没有激活。
      平台解释器没有监控被叫的输入。
 
      2、Handling caller, callee, or network disconnections
      当试图去联结被叫,平台监控呼叫进程指示器(in bound或out of bound,依赖于特殊的联结类型和协议)。在成功的转接期间,平台监控(out of band)电话事件,如电话的挂机事件。
      如果被叫挂断,主叫重新继续它的任务。如果主叫挂断,平台挂断被叫。主叫或被叫挂断或两者同时挂断都不影响平台解释器的运行。
      在转接到被叫前,可能的结果如下:
ActionForm. item变量的值事件或错误原因
主叫挂断 connection.disconnect.hangup主叫挂机。
被叫忙busy 被叫忙。
网络忙Network_busy 中间网络不应答。
被叫没有应答noanswer 在connecttimeout属性指定的时间内没有应答。
----unknown 转接结束但结果未知。
表20:Bridged Transfer Outcomes Prior to Connection Being Established
      转接后可能的结果:
ActionForm. item变量的值事件或错误原因
主叫挂断 connection.disconnect.hangup主叫挂断。
主叫挂断near_end_disconnect 主叫通过DTMF或语音强迫被叫挂机。
平台挂断被叫maxtime_disconnect 因为最大的通话时间到达,平台挂断被叫。
网络挂断network_disconnect 网络挂断被叫。
被叫挂断far_end_disconnect 被叫挂断。
----unknown 转接因未知原因而中断。
表21:Bridged Transfer Outcomes After Connection Established
      在转接完成后,元素<transfer>的影子变量有如下ECAMScript属性:
name$.duration转接通话时间(浮点值),如果在被叫回答前就被挂断,此值为零。
name$.inputmode中断转接过程的输入模式(voice或dtmf)。
name$.utterance如果转接因语音而中断,此值中应是说出的文本;否则没有定义。
表22:<transfer>元素的影子变量
 
      3、Audio during bridge transfer attempt
      在Bridge transfer过程中,也许要对主叫播放语音。例如一个广告(“Buy Joe's Spicy Shrimp Sauce”)或一个信息(“Your call is very important to us; please wait while we connect you to the next available agent.”)。这样便可以对呼叫进程中振铃、忙等情况而出现的静音起一个补偿作用。
      当远端的应答出现时,Transferaudio的播放中止。远端的应答不会永远出现的,因为远端交换机可以播放语音而不回答呼叫(这些语音包括一个特殊的音调、忙音、网络忙音、或者一个提示联结不能进行的录音)。
      如果一个语音播放的时间短于转接到远端的所需的时间,主叫也许会听到静音、平台所指定的语音、或者是呼叫进行过程中的信息。具体是何种语音依赖于不同的平台。
 
    <三>、Transfer Errors and Events
事件原因转接类型
connection.disconnect.hangup主叫挂机。bridge
connection.disconnect.transfer将主叫转接到另一方,而且返回。blind
表23:Events Thrown During Transfer
    如果transfer不能进行,下列错误将会抛出:
错误原因转接类型
error.connection.noauthorization主叫不允许呼叫目标。Blind和Bridge
error.connection.baddestination目标URI错误。Blind和Bridge
error.connection.noroute平台不能对目标呼叫bridge
error.connection.noresource平台不能分配资源而不能呼叫。bridge
error.connection.protocol.nnn协议栈在联结中出现一个例外,此例外不能对应于任何一个error.connection事件。bridge
error.unsupported.transfer.blind平台不能支持Blind转接。blind
error.unsupported.transfer.bridge平台不能支持Bridge转接。bridge
error.unsupported.uri平台不能支持用到的URI格式,指定的变量_message(Section 5.2.2)将包含串“The URI x is not a supported URI format”,x是<transfer>的dest或destexpr属性。Blind和Bridge
表24:Transfer Attempt Error Events
 
    <四>、Example
    下面的例子试图将主叫转接到另一方,并等待通话的结束。语音提示可能在元素<transfer>前或内部。这也许用来通知主叫,发生了什么事情。这种通知通常是“请等待,正在转接呼叫”。在<block>、<transfer>中的<prompt>元素,在执行转接前,依次播放。语音队列开始播放,呼叫便开始。在缺省情况拢鹘辛岬酵夂舻牡缁巴ǖ馈!皌ransferaudio”属性指定对主叫播放的语音文件,它会在远端应答时停止播放。如果语音的长度大于联结所需的时间,只要远端应答,也会停止播放。
 
<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/vxml
http://www.w3.org/TR/voicexml20/vxml.xsd">
<form. id="xfer">
<var name="mydur" expr="0"/>
<block>
<!-- queued and played before starting the transfer -->
<prompt>
Calling Riley. Please wait.
</prompt>
</block>
<!-- Play music while attempting to connect to far-end -->
<!-- "hotword" bargeintype during transferaudio only -->
<!-- Wait up to 60 seconds for the far end to answer -->
<transfer name="mycall" dest="tel:+1-555-123-4567"
transferaudio="music.wav" connecttimeout="60s" bridge="true">
<submit next="./voicemail_server.asp"/>
<!-- queued and played before starting the transfer -->
<!-- bargein properties apply during this prompt -->
<prompt>
Say cancel to disconnect this call at any time.
</prompt>
<!-- specify an external grammar to listen for "cancel" command -->
<grammar src="cancel.grxml" type="application/srgs+xml"/>
<filled>
<assign name="mydur" expr="mycall$.duration"/>
<if cond="mycall == 'busy'">
<prompt>
Riley's line is busy. Please call again later.
</prompt>
<elseif cond="mycall == 'noanswer'"/>
<prompt>
Riley can't answer the phone now. Please call again later.
</prompt>
</if>
</filled>
</transfer>
<!-- submit call statistics to server -->
<block>
<submit namelist="mycall mydur" next="/cgi-bin/report"/>
</block>
</form>
</vxml>
 ITPUB个人空间 Fa _4Y{
ITPUB个人空间@Z(uH9rl`?
第四节 Filled 
 
    <filled>元素指定了当一个或多个input item被填充后要执行的操作。它可以出现在两个地方:作为<form>元素的子元素,或者作为input item的子元素。
    如果作为<form>元素的子元素,当一个或多个input item的组合被填充后,<filled>元素用于执行一些操作。下面的例子中的<filled>元素用于交叉检查以确保“start_city” <field>和“end_city”<field>的识别结果不一样:
<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/vxml
http://www.w3.org/TR/voicexml20/vxml.xsd">
<form. id="get_starting_and_ending_cities">
<field name="start_city">
<grammar src="http://www.grammars.example.com/voicexml/city.grxml"
type="application/srgs+xml"/>
<prompt>What is the starting city?</prompt>
</field>
<field name="end_city">
<grammar src="http://www.grammars.example.com/voicexml/city.grxml"
type="application/srgs+xml"/>
<prompt>What is the ending city?</prompt>
</field>
<filled mode="all" namelist="start_city end_city">
<if cond="start_city == end_city">
<prompt>You can't fly from and to the same city.</prompt>
<clear/>
</if>
</filled>
</form>
</vxml>
    如果<filled>作为一个input item的子元素出现,它指定了当该input item被填充后要执行的操作:
<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/vxml
http://www.w3.org/TR/voicexml20/vxml.xsd">
<form. id="get_city">
<field name="city">
<grammar type="application/srgs+xml"
src="http://www.ship-it.example.com/grammars/served_cities.grxml"/>
<prompt>What is the city?</prompt>
<filled>
<if cond="city == 'Novosibirsk'">
<prompt>Note, Novosibirsk service ends next year.</prompt>
</if>
</filled>
</field>
</form>
</vxml>
    每次收集用户的输入后,该输入中提及的input item都被做了标记,然后解释器根据每个<filled>元素在文档中的顺序(input item中的<filled>元素和<form>中的<filled>元素优先权一样)依次访问它们。那些匹配该utterance的<filled>元素被依次执行,除非已经没有<filled>元素,或者出现控制跳转,或者抛出事件。
    <filled>元素的属性有:
mode值为all(默认)或any。如果值为any,当任意一个指定的input item被用户最近一次的输入填充后,就执行该<filled>元素的操作。如果值为all,当所有提到的input item被填充,且用户最后一次输入填充了至少一个input item,就执行该<filled>元素的操作。在input item中的<filled>元素不能指定该属性。
namelist要触发的input item。对于<form>元素中的<filled>元素,该属性默认为该form中所有的input item变量(包括显式和隐式)。一个input item中的<filled>元素则不能指定该属性,这种情况下,namelist属性值实际上就是该input item的名称。注意control item不能出现在该属性中。
表25:<filled>元素的属性
ITPUB个人空间(s7b&nF"VhG
第五节 Links 
 
    <link>元素可以有一个或几个语法,语法的作用域为包含该<link>元素的元素。该包含<link>元素的元素的scope属性不会影响<link>元素中语法的作用域。<link>元素被包含于一个<form>元素中,该<form>元素的scope属性为document,该<link>元素语法的作用域在该form内,而不是整个文档。<link>元素中的<grammar>元素是不允许指定scope属性的。当这些语法中的一个被匹配,<link>元素被激活,要么跳转到一个新的文档或dialog(如<goto>),要么抛出一个事件(如<throw>)。
    例如,当用户说“books”或按“2”时,<link>元素被激活:
<link next="http://www.voicexml.org/books/main.vxml">
<grammar mode="voice" version="1.0" root="root">
<rule id="root" scope="public">
<one-of>
<item>books</item>
<item>VoiceXML books</item>
<one-of>
</rule>
</grammar>
<grammar mode="dtmf" version="1.0" root="r2">
<rule id="r2" scope="public"> 2 </rule>
</grammar>
</link>
    当语法被匹配时,下面的<link>元素动态的决定要跳转到当前文档的哪一个dialog:
<link expr="'#' + document.helpstate">
<grammar mode="voice" version="1.0" root="root">
<rule id="root" scope="public"> help </rule>
</grammar>
</link>
    <link>元素可以是<vxml>和<form>的子元素,或form. item<field>和<initial>的子元素。作为<vxml>的子元素,<link>元素的语法在整个文档中都是激活的;作为<form>的子元素,<link>元素的语法在该form中是激活的;如果应用根文档中有一个文档级的<link>元素,它的语法在该应用所有被加载的文档中都是激活的。
    如果在一个form. item中执行,且该form. item的modal属性为true,则form级或文档级的<link>元素的语法是不激活的。
    也可以定义一个<link>元素,当语法匹配时抛出一个事件,而不是跳转到一个新的文档或dialog,该事件是在当前执行的地方被抛出,而不是在定义<link>元素的地方被抛出。例如,当用户的输入匹配了<link>元素的语法或用户按键输入了"2",在用户正在访问的form. item的地方抛出了help事件,由该form. item的作用域内相应的<catch>元素处理(详见5.2.4节)。
<link dtmf="2" event="help">
<grammar mode="voice" version="1.0" root="r5">
<rule id="r5" scope="public">
<one-of>
<item>arrgh</item>
<item>alas all is lost</item>
<item>fie ye froward machine</item>
<item>I don't get it</item>
<one-of>
</rule>
</grammar>
</link>
    当匹配了<link>元素中的语法时,application.lastresult$也被赋值,这样才能允许呼叫流程在这个实际的语义结果的基础上往下走。在5.1.5中有一个例子。
    从概念上讲,可以认为<link>元素由两部分组成:条件和操作。“条件”就是<link>元素的内容,即它的语法,只有语法被匹配了,才能激活。“操作”由该元素的属性指定,即要跳转到哪里或抛出哪个事件。“条件”是静态地解决/求值的,而“操作”则是动态地解决/求值的。这意味着:
      1、该<link>元素的内容中的任何URI都是被静态地求值的,即根据定义了<link>元素的文档的基本URI求值(详见1.5.1节的xml:base)。
      2、<link>元素属性中的任何URI都是被动态的求值的,即根据语法被匹配时正在执行的文档的基本URI求值。
      3、<link>元素的属性中的任何ECMAScript表达式都是被动态地求值的,即在语法被匹配时的作用域内和执行的环境中求值的。
    <link>元素的属性有:
next要跳转到的URI,该URI是一个文档(也许有段标识符指定一个起始的dialog)或当前文档的一个dialog。
expr和next属性一样,只不过该URI是根据给定的ECMAScript表达式动态地求值的。
event当用户匹配了<link>元素中的一个语法时要抛出的事件。
eventexpr一个ECMAScript表达式,它的结果值为当用户匹配了<link>元素中的一个语法时要抛出的事件。
message描述事件产生原因的文本信息。
messageexpr一个ECMAScript表达式,它的结果值为描述事件产生原因的文本信息。
dtmf该<link>元素的DTMF序列,它的作用等同于一个简单的DTMF语法,和应用于该序列识别的DTMF<property>。它和DTMF语法不同的是,它的空格是不起作用的:dtmf=“123#”跟dtmf=“1 2 3 #”的效果是一样的。该属性能和其他的<grammar>同时使用。当用户的输入匹配了<link>元素中的一个语法或DTMF序列,该<link>元素被 激活。
fetchaudio见6.1节。它默认为fetchaudio<property>的值。
fetchhint见6.1节。它默认为documentfetchhint<property>的值。
fetchtimeout见6.1节。它默认为fetchtimeout<property>的值。
maxage见6.1节。它默认为documentmaxage<property>的值。
maxstale见6.1节。它默认为documentmaxstale<property>的值。
表26:<link>元素的属性
    必须正确的指定属性“next”,“expr”,“event”或“eventexpr”中的一个,否则会抛出一个error.badfetch事件。必须正确的指定属性“message”或“messageexpr”中的一个,否则会抛出一个error.badfetch事件。

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar