阿里云语音通话获取语音回执消息码

开启消息通道(首先要开通MNS权限,不然会启动报错,报无权限)
开通MNS权限的地址:https://help.aliyun.com/document_detail/147912.html?spm=5176.10695662.1996646101.searchclickresult.385c7538XXq1yz
(开通MNS的同时也要获取队列的key值)

package phonedemo.demo.test;

import com.alicom.mns.tools.DefaultAlicomMessagePuller;
import com.alicom.mns.tools.MessageListener;
import com.aliyuncs.exceptions.ClientException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.ParseException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Queue;

/**
 * 消息回执监听启动类
 */
public class AliMessagePuller {
    private static Logger logger = LoggerFactory.getLogger(AliMessagePuller.class);


    public AliMessagePuller(){}

    /**
     * 开启消息回执监听
     * @param listener 处理队列的监听器
     * @param messageType 消息类型
     * @param queueName 队列名称
     */
    public AliMessagePuller(MessageListener listener,String accessKeyId,String accessKeySecret, String messageType,String queueName) {
        DefaultAlicomMessagePuller puller = new DefaultAlicomMessagePuller();
        try {
            puller.startReceiveMsg(accessKeyId, accessKeySecret, messageType, queueName, listener);
        } catch (ClientException e) {
            logger.error("开启监听失败,主机连接异常");
            e.printStackTrace();
        } catch (ParseException e) {
            logger.error("开启监听失败,消息解析异常");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException, ParseException {
        DefaultAlicomMessagePuller puller=new DefaultAlicomMessagePuller();
        String accessKeyId=秘钥id";
        String accessKeySecret=加密秘钥;
        String messageType="VoiceReport"; //注意替换成你自己需要获取的消息的类型
        String queueName= 获取消息的队列通道 ;//在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName
        AliCallVoiceReportListener aliCallVoiceReportListener = new AliCallVoiceReportListener();
        puller.startReceiveMsg(accessKeyId,accessKeySecret ,messageType,queueName, aliCallVoiceReportListener);

        //设置访问超时时间
//        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
//        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//        //云通信产品-语音API服务产品名称(产品名固定,无需修改)
//        final String product = "Dyvmsapi";
//        //产品域名(接口地址固定,无需修改)
//        final String domain = "dyvmsapi.aliyuncs.com";
//        //AK信息
//        final String accessKeyId = "";
//        final String accessKeySecret = "";
//        //初始化acsClient 暂时不支持多region
//        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
//        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
//        IAcsClient acsClient = new DefaultAcsClient(profile);
//        SingleCallByTtsRequest request = new SingleCallByTtsRequest();
//        //必填-被叫显号,可在语音控制台中找到所购买的显号
//        request.setCalledShowNumber("");
//        //必填-被叫号码
//        request.setCalledNumber("15625884897");
//        //必填-Tts模板ID
//        request.setTtsCode("TTS_192730173");
//        //可选-当模板中存在变量时需要设置此值
//        Map<String,String> tipMessage=new HashMap();
//        tipMessage.put("number","1");
//        tipMessage.put("time","1");
//        tipMessage.put("alarm","1");
//        request.setTtsParam(JSON.toJSONString(tipMessage));
//
//        //可选-音量 取值范围 0--200
//        request.setVolume(100);
//        //可选-播放次数
//        request.setPlayTimes(2);
//        //可选-外部扩展字段,此ID将在回执消息中带回给调用方
//        request.setOutId("yourOutId");
//        //hint 此处可能会抛出异常,注意catch
//        SingleCallByTtsResponse singleCallByTtsResponse = acsClient.getAcsResponse(request);
//        String code = singleCallByTtsResponse.getCode();
//        String code1 = singleCallByTtsResponse.getCode();
//        String message=singleCallByTtsResponse.getMessage();
//        String requestId = singleCallByTtsResponse.getRequestId();
//        String callId = singleCallByTtsResponse.getCallId();
//        logger.error("code="+code+";code1="+code1+";message="+message+";requestId="+requestId+";callId="+callId);


    }

}

获取消息队列

package phonedemo.demo.test;

import com.alibaba.fastjson.JSON;
import com.alicom.mns.tools.MessageListener;
import com.aliyun.mns.model.Message;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dyvmsapi.model.v20170525.SingleCallByTtsRequest;
import com.aliyuncs.dyvmsapi.model.v20170525.SingleCallByTtsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

/**
 *监听阿里消息队列 处理语音消息回执(消息回执类型VoiceReport)
 */
public class AliCallVoiceReportListener implements MessageListener {

    private static Logger logger = LoggerFactory.getLogger(AliCallVoiceReportListener.class);


    /**
     *
     * @param message
     * @return true  SDK将调用MNS的delete方法将消息从队列中删除掉
     * @return false 消息不会被delete掉,而会根据策略进行重推
     */
    @Override
    public boolean dealMessage(Message message) {


        //消息的几个关键值
        logger.info("消息接收时间[{}],message handle[{}],body[{}],id[{}],dequeue count[{}]", null,message.getReceiptHandle(),
                message.getMessageBodyAsString(),message.getMessageId(),message.getDequeueCount());


        Gson gson = new Gson();
        Map<String, Object> contentMap ;
        try {
            contentMap = gson.fromJson(message.getMessageBodyAsString(), HashMap.class);
        } catch (com.google.gson.JsonSyntaxException e) {
            logger.error("消息格式错误:[{}]",message.getMessageBodyAsString());
            return true;
        }

        logger.info("返回消息"+contentMap);
        //依据自己的消息类型,获取对应的字段
        String callId=(String)contentMap.get("call_id");
        String startTime=(String)contentMap.get("start_time");
        String endTime=(String)contentMap.get("end_time");
        String duration=(String)contentMap.get("duration");
        String statusCode=(String)contentMap.get("status_code");
        String statusMsg=(String)contentMap.get("status_msg");
        String outId=(String)contentMap.get("out_id");
        String dtmf=(String)contentMap.get("dtmf");
        return true;
    }

    public static void main(String[] args) throws ClientException {
        //设置访问超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        //云通信产品-语音API服务产品名称(产品名固定,无需修改)
        final String product = "Dyvmsapi";
        //产品域名(接口地址固定,无需修改)
        final String domain = "dyvmsapi.aliyuncs.com";
        //AK信息
        final String accessKeyId = "";
        final String accessKeySecret = "";
        //初始化acsClient 暂时不支持多region
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient = new DefaultAcsClient(profile);
        SingleCallByTtsRequest request = new SingleCallByTtsRequest();
        //必填-被叫显号,可在语音控制台中找到所购买的显号
        request.setCalledShowNumber("");
        //必填-被叫号码
        request.setCalledNumber("15625884897");
        //必填-Tts模板ID
        request.setTtsCode("TTS_192730173");
        //可选-当模板中存在变量时需要设置此值
        Map<String,String> tipMessage=new HashMap();
        tipMessage.put("number","1");
        tipMessage.put("time","1");
        tipMessage.put("alarm","1");
        request.setTtsParam(JSON.toJSONString(tipMessage));

        //可选-音量 取值范围 0--200
        request.setVolume(100);
        //可选-播放次数
        request.setPlayTimes(2);
        //可选-外部扩展字段,此ID将在回执消息中带回给调用方
        request.setOutId("yourOutId");
        //hint 此处可能会抛出异常,注意catch
        SingleCallByTtsResponse singleCallByTtsResponse = acsClient.getAcsResponse(request);
        String code = singleCallByTtsResponse.getCode();
        String code1 = singleCallByTtsResponse.getCode();
        String message=singleCallByTtsResponse.getMessage();
        String requestId = singleCallByTtsResponse.getRequestId();
        String callId = singleCallByTtsResponse.getCallId();
        logger.error("code="+code+";code1="+code1+";message="+message+";requestId="+requestId+";callId="+callId);
    }
}

依赖包:

<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dyvmsapi</artifactId>
            <version>1.2.2</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.6</version>
        </dependency>

猜你喜欢

转载自blog.csdn.net/m0_46086429/article/details/106711091
今日推荐