package cc.mrbird.febs.common.utils;
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.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Supplier;
/**
* @author :qying
* @date :Created in 2021/5/19 11:02
* @description:阿裡語音通知工具類
* @modified By:`
* @version: 1.0
*/
@Slf4j
public class AliyunVoiceUtils {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AccessKeyID", "AccessKeySecret");
IAcsClient client = new DefaultAcsClient(profile);
SingleCallByTtsRequest request = new SingleCallByTtsRequest();
request.setRegionId("cn-hangzhou");
request.setEndpoint("dyvmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setCalledNumber("18888888888"); // 呼叫手機号
request.setTtsCode("TTS_21724qwqw2"); // 模闆ID
request.setTtsParam("{ \"device\": \"煙霧傳感器\" }"); // 模闆參數 json字元串
request.setPlayTimes(2);
request.setSpeed(0);
try {
SingleCallByTtsResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* @ClassName 語音呼叫
* @Description
* managerPhone 手機号 device :裝置名
* @author qying
* @date 2021/5/19 \
*/
public static void singleCallByTts(Map<String, Object> map, String managerPhone, String device,String TtsCode) throws ClientException {
List<String> list = Arrays.asList(managerPhone.split(StringPool.COMMA));
if(list.size()>0){
for (String phone:list) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", String.valueOf(map.get("AccessKeyID")), String.valueOf(map.get("AccessKeySecret")));
IAcsClient client = new DefaultAcsClient(profile);
SingleCallByTtsRequest request = new SingleCallByTtsRequest();
request.setRegionId("cn-hangzhou");
request.setEndpoint("dyvmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setCalledNumber(phone);
request.setTtsCode(TtsCode);
request.setTtsParam("{ \"device\": \""+device+"\" }");
request.setPlayTimes(2);
request.setSpeed(0);
SingleCallByTtsResponse singleCallByTtsResponse = client.getAcsResponse(request);
if (singleCallByTtsResponse.getCode() != null && singleCallByTtsResponse.getCode().equals("OK")) {
//請求成功
log.info("請求成功");
} else {
log.info("語音呼叫失敗,code{}", singleCallByTtsResponse.getCode());
if (singleCallByTtsResponse.getCode().equals("isv.BUSINESS_LIMIT_CONTROL")) {
log.info("流控限制,3分鐘後重試");
ExecutorService executor = Executors.newFixedThreadPool(2);
//jdk1.8之前的實作方式
CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
int state = 0;
try {
ThreadSleepMSG(map, phone,device,TtsCode);
} catch (Exception e) {
e.printStackTrace();
}
return "語音重新呼叫成功,數量:"+state;
}
}, executor);
}
}
}
}
}
private static void ThreadSleepMSG(Map<String, Object> map, String phone, String tailNumber,String TtsCode){
try {
Thread.sleep(3 * 60 * 1000L);
singleCallByTts(map, phone, tailNumber,TtsCode);
}catch (Exception e){
e.printStackTrace();
}
}
}