全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网

语音消息回执---PHP

更新时间:2017-06-19 11:09:25

简介

当您使用语音的API接口发送外呼后,可以通过使用MNS的Queue模型来接收语音的回执消息。

消息的订阅

云通信的所有业务消息都用过MNS消息服务向外发送。用户每订阅一个类别的消息(比如语音呼叫消息VoiceReport),系统都会为用户分配一个独立的消息队列。用户可以通过阿里云账号拿到一个临时的token用于获取队列中的消息。用户可以下载demo,编写简单的消息处理类即可完成消息处理的任务。在页面上订阅消息,订阅完消息后,能拿到消息队列名称(queueName)。比如:Alicom-Queue-xxxxxx-VoiceReport 。队列名字每个用户都不同。

消息类型

语音提供一种消息类型,呼叫记录消息(VoiceReport)

语音呼叫记录消息VoiceReport消息体格式
名称 类型 描述 示例 是否必须
call_id String 呼叫ID 100001616500^100001871490 必须
start_time String 通话开始时间,未接通则为空 2017-06-01 10:00:00 可选
end_time String 通话结束时间,未接通则为空 2017-06-01 10:00:00 可选
duration String 通话时长,未接通为0 10 可选
status_code String 呼叫结果状态码 200010 必须
status_msg String 结果描述 执行完成 可选
out_id String 扩展字段回传,将调用api时传入的字段返回 123456 可选
dtmf String DTMF按键 123456 可选

技术对接步骤

下载消息SDK

下载对应语音的消息DEMO工程,工程所需要的所有依赖php包都放在DEMO工程的录下,将对于的php包引入到您的工程当中既可按照DEMO样例编写接收消息的程序。

SDK&DEMO[下载地址]

编写样例程序
  1. class ReceiveAlicomMsgDemo {
  2. public function dealMessage($message) {
  3. echo $message;
  4. //TODO 这里开始写业务代码
  5. return true;//返回true,则工具类自动删除已拉取的消息。返回false,消息不删除可以下次获取
  6. }
  7. public function receiveMsg(){
  8. $accessKeyId = "your_accessKeyId";
  9. $accessKeySecret = "your_accessKeySecret";
  10. $messageType = "VoiceReport";//短信回执:SmsReport,短息上行:SmsUp,语音呼叫:VoiceReport,流量直冲:FlowReport
  11. $queueName = "your_queueName"; //在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName
  12. DefaultProfile::addEndpoint("cn-hangzhou","cn-hangzhou","Dybaseapi","dybaseapi.aliyuncs.com");
  13. $tokenGetterForAlicom = new TokenGetterForAlicom($accessKeyID,$accessKeySecret);
  14. $i = 0;
  15. while ( $i <= 3) {//取回执消息失败5 次停止循环拉取
  16. $i++;
  17. try
  18. {
  19. $tokenForAlicom = $tokenGetterForAlicom->getToeknByMessageType($messageType,$queueName);
  20. $queue = $tokenForAlicom->getClient()->getQueueRef($queueName);
  21. // 3. receive message
  22. $receiptHandle = NULL;
  23. // when receiving messages, it's always a good practice to set the waitSeconds to be 30.
  24. // it means to send one http-long-polling request which lasts 30 seconds at most.
  25. $res = $queue->receiveMessage(2);
  26. echo "ReceiveMessage Succeed! \n";
  27. $bodyMD5 = md5(base64_encode($res->getMessageBody()));
  28. $receiptHandle = $res->getReceiptHandle();
  29. if (strtoupper($bodyMD5) == $res->getMessageBodyMD5())
  30. {
  31. if($this->dealMessage($res->getMessageBody())){
  32. $res = $queue->deleteMessage($receiptHandle);
  33. echo "DeleteMessage Succeed! \n";
  34. }
  35. }
  36. }
  37. catch (MnsException $e)
  38. {
  39. echo "ex:".($e->getMnsErrorCode()) ;
  40. echo "ReceiveMessage Failed: " . $e;
  41. echo "<br>";
  42. #return;
  43. }
  44. }
  45. }
  46. }
  47. $demo = new ReceiveAlicomMsgDemo();
  48. $demo->receiveMsg();
  49. echo "<br>end";
本文导读目录