等待事件标签

来源:互联网 发布:战地1狙击枪数据 编辑:程序博客网 时间:2024/06/10 04:09
等待事件标签
为了扩展功能,VXI引入了异步标签的概念,为了处理异步标签的返回,引入“等待事件”标签。


标签用法


<object name=".." classid="method://function/waitEvent">
<param name="OutputInfo" expr="outputinfo"/>
<filled>
<log>========outputinfo:<value expr="outputinfo" /> ========</log>
<filled>
</object>
<object name=".." classid="method://ngcc/Other/WaitEvent">
<param name="OutputInfo" expr="outputinfo" />
<filled>
  <log>=======outputinfo:<value expr="outputinfo"/>=======</log>
</filled>
</object>


<object name=".." classid="method://cm-ngcc/Other/WaitEvent">
<param name="OutputInfo" expr="outputinfo"/>
<filled>
<log>=======ouputinfo:<value expr="outputinfo" /> ======</log>
</filled>
</object>


属性
属性名 说明
name 对象名称
classid method://function/WaitEvent
method://ngcc/Other/WaitEvent(D)
method://cm-ngcc/Other/WaitEvent(ca)
参数
参数名 说明
OutputInfo 事件结果信息。用来保存事件的结果,如收号则存放用户输入信息,挂机则保存挂机方的CallId等等。
最大100个字节,参见下表。


返回类型 如何理解
返回拨号 OutputInfo中存放用户输入的按键字符串,如果输入超时,或取消等无效情况则该值为空字符串。
返回摘机 OutputInfo前四个字节存放DWORD类型的CallID
返回挂机 OutputInfo中存放挂机方的CallID(DWORD类型)
返回超时 OutputInfo中存放定时器的TimeID(unsigned char 类型)。


返回值
通过name属性来接受事件结果


返回值 说明
USER_DIALING 收号返回。
USER_HOOK 用户挂机
USER_HOOK_OFF 用户摘机出口
CALL_BUSY 用户忙
CALL_NOANSWER 无应答
CALL_BARRING 呼叫受限
CALL_FAILURE 持续失败
VP_END 录放音结束,一旦会议创建成功,所有放音无论是否会议成员,都将返回CP_PALYEND
FAX_END 传真结束(暂未使用)
TIME_OUT 超时
RESOURCE_AVAILBLE 资源消息(暂未使用)
NOTIFY 通知消息,彩铃业务中收到CPG消息(暂未使用)
CONF 会场退出(暂未使用)
VP_ERROR 放音或传真出错。
ERROR 出错。
CP_USERJOIN CP会场用户加入
CP_PLAYEND CP会场放音结束
CP_RECORDEND CP会场录音结束
CP_USERDIALING CP会场收号返回
CP_PLAYERROR CP会场放音出错
CP_RECORDERROR CP会场录音出错
CP_ConfFault CP会场异常(暂未使用)
CP_ChannelFault CP会场通道异常(暂未使用)
NOEVENT 表示当前没有需要等待的事件;有些脚本在waitEvent处过滤希望得到的事件,
否则便一直循环进入waitEvent标签。这样做的隐患是可能让平台陷入重复循环中;
如果能够判断当前waitEvent的结果为NOEVENT便停止这种循环,则可避免阵容中情况的发生。
(这个值D与ca借口均未规定,系zxvxi的扩展)。
TIME_EXPIRED Vxml脚本定时器超时
CALL_ALERTING 异步外呼返回振铃事件


在会议中,脚本可以通过“session.telephone.lastchannelno”这个影子变量来获取事件对应的用户通道号,
为0代表是对整个会场的操作。
本标签是同步标签,收到希望的事件才处理,否则应当使用标签跳回自身,使VXI重复执行本标签,直到希望的事件到来。


实例


<?xml version="1.0" encoding="gb2312"?>
</vxml version="2.0">
<var name="ConfNo" expr="0"/>
<var name="CurrentConfNO" expr="0"/>
<var name="CurrentChannelNo" expr="0"/>
<var name="outputinfo" expr="0"/>


<!--申请会场-->
<form id="createConf">
<object name="createConf" classid="method://ngcc/conf/CreateConf">
<!--param name="Model" expr=""/-->
<param name="ChannelNum" expr="5"/>
<param name="ConfNO" expr="ConfNo"/>
<param name="isVideoConf" expr="1"/>
<filled>
<if cond="createConf=='SUCCESS'">
<!--将当前通道设置为1号通道-->
<assign name="CurrentChannelNO" expr="1"/>
<!-- 将当前会场号赋值给变量CurrentConfNo-->
<assign name="CurrentConfNO" expr="ConfNo"/>
<goto next="#ConfPlayWelcome"/>
<else/>
<prompt>创建会议失败,谢谢使用</prompt>
<disconnect/>
</if>
</filled>
</object>
</form>


<!--会场放音-->
<!--对刚加入的用户放欢迎音-->
<form id="comfplayWelcome">
<block>
<log>======进入ConfPlayWelcome标签========</log>
</block>
<object name="play" classid="method://ngcc/Conf/ConfStartPlay">
<param name="ConfNO" expr="CurrentConfNO"/>
<param name="ChannelNO" expr="CurrentChannelNO"/>
<param name="PlayType" expr="1"/>

<param name="PlayPara" expr="'ipfile://welcome.3gp'"/>

<!--这两个videooberlay标签不是很懂,等我看完标签再回来解释下-->

<videooverlay id="1" text-str="Text Overlay 1" text-font="en-default" text-size="10" text-color="green" text-background-color="black" text-location="2,4" text-background-transparency="70" location="0,0"/>
<videooverlay id="2" text-str="中文" text-font="ch-default" text-size="12" text-color="yellow" text-background-color="black" text-location="2,4" text-background-transparency="70" location="50,50"/>
</object>
<!--跳到等待事件标签-->
<block>
<log>=======退出ConfPlayWelcome标签=======</log>
<goto next="waitEvent"/>
</block>
</form>




<!--发散式外呼-->
<form id="callOutUser">
<object name="callOutUser1" classid="method://cm-ngcc/call/callout">
<param name="CLD" expr="'45801010'"/>

<param name="CLI" expr="'45801008'"/>

<!--newUser应该是环境变量直接取??????-->

<param name="CallID" expr="newUser"/>
<filled>

<if cond="callOutUser1 != 'HOOK_OFF'">

<!--这个callOutUserFailed这个例子也没有,想不明白--->

<goto next="#callOutUserFailed"/>
</if>
</filled>
</object>
<object name="connectres" classid="methos://cm-ngcc/call/callout">
<param name="CallID" expr="newUser"/>
<param name="PlayType" expr="0"/>
<param name="PlayPara" expr="'对被叫放音'"/>
</object>

<block>

<!--这个变量前面也没有定义。这一节的例子涉及太多,等后面学了其他标签应该会更清晰一点-->

<assign name="isplaysdduser" expr="2"/>
<goto next="#waitEvent"/>
</block>
</form>


<!--等待事件-->
<form id="waitEvent">
<block>
<log>====进入waitevent标签====</log>
</block>
<object name="wait" classid="method://ngcc/Other/WaitEvent">
<param name="OutputInfo" expr="outputinfo"/>
<filled>
<log>=======outputinfo:<value expr="outputinfo"/>====</log>
<!--session.telephone.lastchannelno标识最近以此操作的通道号,0表示是对整个会议的操作-->
<assign name="CurrentChannelNO" expr="session.telephone.lastchannelno"/>
<log>========event:<value expr="wait"/>========</log>
<if cond="wait=='CP_USERJOIN'">
<log> =======user add in ,channelno is:<value expr="CurrentChannelNO"/>=====</log>
<goto next="#ConfPlayWelcome"/>
</if>
<if cond="wait=='CP_PLAYEND'">
<log>=======CP_PLAYEND3333========</log>
<assign name="CurrentChannelNO" expr="session.telephone.lastchannelno"/>
<log> CurrentChannelNO:<value expr="CurrentChannelNO"/></log>
<if cond="CurrentChannelNO==1">
<goto next="#calloutUser"/>
</if>
</if>
<!--不满足上述条件的事件不处理,继续等待其他事件-->
<goto next="#waitEvent"/>
</filled>
</object>
</form>


<form id="releaseconf">
<object name="releaseconf" classid="method://ngcc/Conf/ReleaseConf">
<param name="ConfNO"expr="CurrentConfNO"/>
</object>
<block><return/></block>
</form>
</vxml>


 
原创粉丝点击