<?php        
//url示例:http://localhost/?startservice&appid=qw 
$ref=$_SERVER['REQUEST_URI'] ;			//云通讯回调请求页面的URI 
if(strpos($ref,'startservice')){		//云通讯IVR启动业务的回调请求，请求的url中固定相对地址startservice
    startservice();
}elseif(strpos($ref,'gettimeout')){ //云通讯呼转命令的回调请求，通知第三方用户的按键超时，请求URL中的相对地址gettimeout可以自定义，demo中自定义为gettimeout
    gettimeout();
}elseif(strpos($ref,'dtmfreport')){ //云通讯按键命令的回调请求，通知第三方用户的按键信息，请求URL中的相对地址dtmfreport可以自定义，demo中自定义为dtmfreport
    dtmfreport();
}elseif(strpos($ref,'transferAgentFail')){ //云通讯呼转命令的回调请求，通知第三方转接座席失败，请求URL中的相对地址transferAgentFail可以自定义，demo中自定义为transferAgentFail
    transferAgentFail();
}elseif(strpos($ref,'getchinesequeue')){ //云通讯按键命令的回调请求，通知第三方用户的按键超时，请求URL中的相对地址ZW可以自定义，demo中自定义为getchinesequeue
    getchinesequeue();
}elseif(strpos($ref,'getenglishqueue')){ //云通讯按键命令的回调请求，通知第三方用户的按键超时，请求URL中的相对地址YW可以自定义，demo中自定义为getenglishqueue
    getenglishqueue();
}elseif(strpos($ref,'agenthangup')){ //云通讯座席挂机的回调请求，通知第三方座席挂机，请求URL中的相对地址agenthangup可以自定义，demo中自定义为agenthangup
    agenthangup();
}elseif(strpos($ref,'pingjia')){ //云通讯按键命令的回调请求，通知第三方座席挂机，请求URL中的相对地址pingjia可以自定义，demo中自定义为pingjia
    pingjia();
}elseif(strpos($ref,'stopservice')){//云通讯IVR结束业务的回调请求，请求的url中固定相对地址stopservice
    stopservice();
}elseif(strpos($ref,'agentstate')){//云通讯坐席状态改变的回调请求，请求的url中固定相对地址agentstate
		agentstate();
}
//IVR启动业务，在IVR呼入或者IVR外呼后由云通讯平台发起的回调请求
function startservice()
{
	//获取参数
    $appid = $_REQUEST['appid'];					//应用id
    $callid = $_REQUEST['callid'];				//通话id，由云通讯平台产生的一路通话的唯一标识
    $from = $_REQUEST['from'];						//主叫号码，当IVR呼入方式为主叫的号码，当IVR外呼的方式则为空
    $to = $_REQUEST['to'];								//被叫号码，当IVR呼入方式为IVR接入号，当IVR外呼的方式则为外呼的号码
    $direction = $_REQUEST['direction'];	//呼叫方式，IVR呼入为0，IVR外呼为1
    //$userdata = $_REQUEST['userdata'];	//自定义参数，只有发起当外呼请求中带有才会返回，可以通过该参数和callid绑定来确定发起的请求
    //对云通讯平台回调请求的响应包体，响应的是按键命令嵌套放音，超时没按键就放音提示用户后跳转到gettimeout
    //命令中action='dtmfreport'为自定义按键回调相对地址
    //numdigits='1'定义按键个数为1，当用户按任意一个键就会通知第三方服务器
    //timeout='20'为用户按键超时时间20秒，当放音第一次完成后开始计时，用户20秒没有按键就会执行副命令
    //loop='-1'为循环放音，当超时后停止放音
    echo "<?xml version='1.0' encoding='UTF-8'?>
    <Response>
        <Get action='dtmfreport' numdigits='1' timeout='20'>
            <Play loop='-1'>menu.wav</Play>
        </Get>
        <Play>timeout.wav</Play>
        <Redirect>gettimeout</Redirect>
    </Response>";

}
//用户按键超时
function gettimeout()
{
	//获取参数
    $appid = $_REQUEST['appid'];   	//应用id
    $callid = $_REQUEST['callid'];	//通话id，由云通讯平台产生的一路通话的唯一标识
    //对云通讯平台回调请求的响应包体，响应的是按键命令嵌套放音，超时没按键就放音提示用户后挂断用户
    echo "<?xml version='1.0' encoding='UTF-8' ?>
    <Response>
    	<Play>timeoutbye.wav</Play>
    	<Hangup/>
    </Response>"; 
}
//用户按键
function dtmfreport()
{
	//获取参数
    $appid = $_REQUEST['appid'];		//应用id
    $callid = $_REQUEST['callid'];	//通话id，由云通讯平台产生的一路通话的唯一标识
    $digits = $_REQUEST['digits'];	//用户按键内容
    //对云通讯平台回调请求的响应包体
    if ($digits=="1"){
    	//当用户按1键后响应进入1队列排队等待坐席接听，如果超时没有坐席接听或者呼叫坐席失败跳转到transferAgentFail
    	//queuetype='1'表示用户进入1队列，由1队列中的坐席服务，如果该队列没有创建则会挂机
    	//timeout='30'表示用户进入队列没有坐席服务的时候用户排队等待超时时间为30秒
    	//queuetimes='1'表示用户排队等待超时的次数为1次
    	//agenthangupurl='agenthangup'为坐席挂机后回调的相对地址，可以自定义
        echo "<?xml version='1.0' encoding='UTF-8' ?>
        <Response>
         <EnterCCS queuetype='1' timeout='30' queuetimes='1' agenthangupurl='agenthangup'>
         <Play loop='-1'>waitmusic.wav</Play>
         </EnterCCS>
         <Redirect tag='1'>transferAgentFail</Redirect>
        </Response>";
    } else if($digits=="2"){
    	//当用户按2键后响应进入2队列排队等待坐席接听，如果超时没有坐席接听或者呼叫坐席失败跳转到transferAgentFail
    	//queuetype='2'表示用户进入2队列，由2队列中的坐席服务，如果该队列没有创建则会挂机
    	//timeout='30'表示用户进入队列没有坐席服务的时候用户排队等待超时时间为30秒
    	//queuetimes='1'表示用户排队等待超时的次数为1次
    	//agenthangupurl='agenthangup'为坐席挂机后回调的相对地址，可以自定义
        echo "<?xml version='1.0' encoding='UTF-8' ?>
        <Response>
         <EnterCCS queuetype='2' timeout='30' queuetimes='1' agenthangupurl='agenthangup'>
         <Play loop='-1'>waitmusic.wav</Play>
         </EnterCCS>
         <Redirect tag='2'>transferAgentFail</Redirect>
        </Response>";
    }else{
    	//当用户按1和2之外的其他键则放音提示后直接挂机
        echo "<?xml version='1.0' encoding='UTF-8' ?>
        <Response>
        	<Play>bye.wav</Play>
         	<Hangup/>
        </Response>";
    }
     
}
//转接坐席失败
function transferAgentFail()
{
    //获取参数
    $appid = $_REQUEST['appid'];		//应用id
    $callid = $_REQUEST['callid'];	//通话id，由云通讯平台产生的一路通话的唯一标识
		$tag = $_REQUEST['tag'];				//指定的标识值
    //对云通讯平台回调请求的响应包体，响应的是按键命令嵌套放音，超时没按键就放音提示用户后挂断用户
	if($tag=1){
		//当进入1队列呼叫坐席呼叫后提供用户继续排队按键，当按键超时后放音提示用户，放音完成后挂机
		echo "<?xml version='1.0' encoding='UTF-8' ?>
		<Response>
			<Get action='getchinesequeue' numdigits='1' timeout='20'>
				<Play loop='-1'>buzy.wav</Play>
			</Get>
			<Play>timeoutbye.wav</Play>
			<Hangup/>
		</Response>"; 
    } else if ($tag=2){
    	//当进入2队列呼叫坐席呼叫后提供用户继续排队按键，当按键超时后放音提示用户，放音完成后挂机
        echo "<?xml version='1.0' encoding='UTF-8' ?>
		<Response>
			<Get action='getenglishqueue' numdigits='1' timeout='20'>
				<Play loop='-1'>buzy.wav</Play>
			</Get>
			<Play>timeoutbye.wav</Play>
			<Hangup/>
		</Response>";
    } else {
    	//逻辑保护用
        echo "<?xml version='1.0' encoding='UTF-8' ?>
        <Response>
					<Play>bye.wav</Play>
        	<Hangup/>
        </Response>";
    }
     
}
//转接坐席失败用户按键继续进入中文队列
function getchinesequeue()
{
    //获取参数
    $appid = $_REQUEST['appid'];		//应用id
    $callid = $_REQUEST['callid'];  //通话id，由云通讯平台产生的一路通话的唯一标识
    $digits = $_REQUEST['digits'];  //用户按键内容
    //对云通讯平台回调请求的响应包体
    if ($digits=="1"){
    	//用户按键1继续进入1队列等待坐席服务
        echo "<?xml version='1.0' encoding='UTF-8' ?>
        <Response>
        	<EnterCCS queuetype='1' timeout='30' queuetimes='1' agenthangupurl='agenthangup'>
        		<Play>waitmusic.wav</Play>
        	</EnterCCS>
        	<Redirect tag='1'>transferAgentFail</Redirect>
        </Response>";
    } else {
    	//用户按1之外的其他键放音提示后挂机
        echo "<?xml version='1.0' encoding='UTF-8' ?>
        <Response>
					<Play>bye.wav</Play>
        	<Hangup/>
        </Response>";
    }
     
}
//转接坐席失败用户按键继续进入英文队列
function getenglishqueue()
{
    //获取参数
    $appid = $_REQUEST['appid'];		//应用id
    $callid = $_REQUEST['callid'];	//通话id，由云通讯平台产生的一路通话的唯一标识
    $digits = $_REQUEST['digits'];	//用户按键内容
    //对云通讯平台回调请求的响应包体
    if ($digits=="1"){
    	//用户按键1继续进入2队列等待坐席服务
        echo "<?xml version='1.0' encoding='UTF-8' ?>
        <Response>
         <EnterCCS queuetype='2' timeout='30' queuetimes='1' agenthangupurl='agenthangup'>
         <Play>waitmusic.wav</Play>
         </EnterCCS>
         <Redirect tag='2'>transferAgentFail</Redirect>
        </Response>";
    } else {
    	//用户按1之外的其他键放音提示后挂机
        echo "<?xml version='1.0' encoding='UTF-8' ?>
        <Response>
					<Play>bye.wav</Play>
        	<Hangup/>
        </Response>";
    }
     
}
//坐席挂机
function agenthangup()
{
    //获取参数
    $appid = $_REQUEST['appid'];					//应用id
    $agentid = $_REQUEST['agentid'];			//与其通话的座席id。
		$duration = $_REQUEST['duration'];		//用户与座席通话时长,单位是秒。
    $endtype = $_REQUEST['endtype'];			//通话结束类型：0座席结束通话、1座席挂机、2强拆结束、3用户挂机。
		$recordurl = $_REQUEST['recordurl'];	//录音下载地址。
    $callid = $_REQUEST['callid'];				//通话id，由云通讯平台产生的一路通话的唯一标识
    //对云通讯平台回调请求的响应包体，响应的是按键命令嵌套放音，超时没按键就放音提示用户后挂断用户
    echo "<?xml version='1.0' encoding='UTF-8' ?>
    <Response>
        <Get action='pingjia' numdigits='1' timeout='20'>
            <Play loop='-1'>pingjia.wav</Play>
        </Get>
        <Play>timeoutbye.wav</Play>
        <Hangup/>
    </Response>"; 
}
//用户评价
function pingjia()
{
    //获取参数
    $appid = $_REQUEST['appid'];       //应用id
    $callid = $_REQUEST['callid'];    //通话id，由云通讯平台产生的一路通话的唯一标识
    $digits = $_REQUEST['digits'];    //用户按键内容
    //对云通讯平台回调请求的响应包体
    if ($digits=="1"){
		echo "<?xml version='1.0' encoding='UTF-8' ?><Response><Play>thank.wav</Play><Hangup/></Response>";
    } else if ($digits=="2"){
		echo "<?xml version='1.0' encoding='UTF-8' ?><Response><Play>thank.wav</Play><Hangup/></Response>";
    }else {
		echo "<?xml version='1.0' encoding='UTF-8' ?>
		<Response>
			<Play>timeoutbye.wav</Play>
			<Hangup/>
		</Response>";
		}
}

//IVR结束业务，在用户挂机后由云通讯平台发起的回调请求
function stopservice()
{
	//获取参数
    $appid = $_REQUEST['appid'];											//应用id
    $callid = $_REQUEST['callid'];										//通话id，由云通讯平台产生的一路通话的唯一标识
    $starttime = $_REQUEST['starttime'];							//主叫通话的开始时间
    $endtime = $_REQUEST['endtime'];									//主叫通话的结束时间
    $callduration = $_REQUEST['callduration'];				//主叫通话时长
    $sstime = $_REQUEST['sstime'];										//被叫通话的开始时间
    $setime = $_REQUEST['setime'];										//被叫通话的结束时间
    $seccallduration = $_REQUEST['seccallduration'];	//被叫通话时间
    $recordurl = $_REQUEST['recordurl'];							//录音文件下载地址
    $recordid = $_REQUEST['recordid'];								//录音文件Id
    $errorcode = $_REQUEST['errorcode'];							//通话中异常的错误值，可以根据错误知道出现异常的原因
    //对云通讯平台回调请求的响应包体，因为不需要后续流程响应空命令
    echo "<?xml version='1.0' encoding='UTF-8' ?>
    <Response>
    	<CmdNone/>
    </Response>";
}

//坐席状态改变通知
function agentstate()
{
	//获取参数
    $appid = $_REQUEST['appid'];								//应用id
    $callid = $_REQUEST['callid'];							//通话id，由云通讯平台产生的一路通话的唯一标识
    $agentid = $_REQUEST['agentid'];						//坐席id，与用户通话的坐席
    $agentstate = $_REQUEST['agentstate'];			//坐席的状态：0准备中、1准备就绪、2锁定中、3通话中、4线路忙
    $number = $_REQUEST['number'];							//用户的号码，当agentstate为2或3有效
    $time = $_REQUEST['time'];									//坐席状态切换时间
    $queuetype = $_REQUEST['queuetype'];				//用户进入队列类型，当agentstate为2或3有效
    $alertingtime = $_REQUEST['alertingtime'];	//坐席振铃时间，当agentstate为3有效
    $isqueue = $_REQUEST['isqueue'];						//是否排队，0为未排队，1为有排队，当agentstate为2有效
    //对云通讯平台回调请求的响应包体，因为不需要后续流程响应空命令
    echo "<?xml version='1.0' encoding='UTF-8' ?>
    <Response>
    	<CmdNone/>
    </Response>";
}

/*
//坐席状态改变通知，用来自动准备就绪
function agentstate()
{    
	//获取参数
    $appid = $_REQUEST['appid'];								//应用id
    $callid = $_REQUEST['callid'];							//通话id，由云通讯平台产生的一路通话的唯一标识
    $agentid = $_REQUEST['agentid'];						//坐席id，与用户通话的坐席
    $agentstate = $_REQUEST['agentstate'];			//坐席的状态：0准备中、1准备就绪、2锁定中、3通话中、4线路忙
    $number = $_REQUEST['number'];							//用户的号码，当agentstate为2或3有效
    $time = $_REQUEST['time'];									//坐席状态切换时间
    $queuetype = $_REQUEST['queuetype'];				//用户进入队列类型，当agentstate为2或3有效
    $alertingtime = $_REQUEST['alertingtime'];	//坐席振铃时间，当agentstate为3有效
    $isqueue = $_REQUEST['isqueue'];						//是否排队，0为未排队，1为有排队，当agentstate为2有效
    //对云通讯平台回调请求的响应包体
    if ($agentstate=="0"){
    	//响应的为坐席准备就绪命令，当坐席状态改变为0准备中的时候响应坐席准备就绪
    	echo "<?xml version='1.0' encoding='UTF-8' ?>
    	<Response>
			<Appid>$appid</Appid>
    	<AgentReady agentid='$agentid'/>
		</Response>";
    }else {
    	//响应空命令，其他坐席状态不需要后续命令
		echo "<?xml version='1.0' encoding='UTF-8' ?>
		<Response>
			<CmdNone/>
		</Response>";
		}
}
*/
?>
