alibabacloud-go-sdk
alibabacloud-go-sdk copied to clipboard
语音服务 sdk 通过通话id获取通话详情 响应体data始终为nil
rpc "github.com/alibabacloud-go/darabonba-openapi/client"
dyvmsapiclient "github.com/alibabacloud-go/dyvmsapi-20170525/v2/client"
"github.com/alibabacloud-go/tea/tea"
func CreateClient(accessKeyId string, accessKeySecret string, regionId string) (_result *dyvmsapiclient.Client, _err error) {
config := &rpc.Config{}
// 您的AccessKey ID
config.SetAccessKeyId(accessKeyId)
// 您的AccessKey Secret
config.SetAccessKeySecret(accessKeySecret)
// 您的可用区ID
config.SetRegionId(regionId)
_result = &dyvmsapiclient.Client{}
_result, _err = dyvmsapiclient.NewClient(config)
return _result, _err
}
func GetCallResult(callID string,times int)(Duration int){
log.Println("GetCallResult ", times)
request := &dyvmsapiclient.QueryCallDetailByCallIdRequest{
CallId: tea.String(callID),
// 语音通知的产品ID https://help.aliyun.com/document_detail/114046.htm?spm=a2c4g.11186623.2.12.4dfe5a7aVpVfXJ
ProdId: tea.Int64(11000000300006),
QueryDate: tea.Int64(time.Now().Unix()),
}
response, _err := GLOBAL_VOICE_CLIENT.QueryCallDetailByCallId(request)
if _err != nil {
log.Println("ERROR GetCallResult ", _err.Error())
return 0
}
if response.Body.Data != nil {
log.Println("GetCallResult response",response)
log.Println("GetCallResult Headers",response.Headers)
log.Println("GetCallResult Body",response.Body)
var resultData models.CallResponseData
err := json.Unmarshal([]byte(*response.Body.Data),&resultData)
if err != nil{
log.Println("Unmarshal ERROR ", err.Error())
}
return resultData.Duration
}else{
log.Println(response)
time.Sleep(15*time.Second)
times+=1
if times <= 6 {
return GetCallResult(callID,times)
}else{
return 0
}
}
}
func VoiceCall(TtsCode string, TtsParam string){
for _, phoneNumber := range PHONE_NUMBERS{
request := &dyvmsapiclient.SingleCallByTtsRequest{
// 被叫显号,若您使用的模板为公共号池号码外呼模板,则该字段值必须为空;
// 若您使用的模板为专属号码外呼模板,则必须传入已购买的号码,仅支持一个号码,您可以在语音服务控制台上查看已购买的号码。
CalledShowNumber: tea.String("***********"),#我方号码隐藏
// 被叫号码。仅支持中国内地号码。一次请求仅支持一个被叫号。
CalledNumber: tea.String(phoneNumber),
/*
宕机模板 TTS_213300038
*/
TtsCode: tea.String(TtsCode),
TtsParam: tea.String(TtsParam),
PlayTimes: tea.Int32(2),
}
response, _err := GLOBAL_VOICE_CLIENT.SingleCallByTts(request)
if _err != nil {
log.Println("ERROR VoiceCall", _err.Error())
log.Println("ERROR VoiceCall Phone Number", phoneNumber)
}
log.Println("VoiceCall Body ",response.Body)
log.Println("VoiceCall Headers",response.Headers)
if *response.Body.Message != "OK"{
log.Println("ERROR VoiceCall RequestId ", response.Body.RequestId)
log.Println("ERROR VoiceCall Message ", response.Body.Message)
log.Println("ERROR VoiceCall Phone Number", phoneNumber)
}
if VoiceCallStatusCheck(*response.Body.CallId){
log.Println("已接听 ",phoneNumber)
break
}else {
log.Println("未接通 ",phoneNumber)
}
}
}
func VoiceCallStatusCheck(callid string) bool{
time.Sleep(10*time.Second)
Duration := GetCallResult(callid,0)
if Duration == 0{
return false
}else{
return true
}
}
语音通知可以正常呼出、并获取CallId 但是通过QueryCallDetailByCallId 返回的响应体中没有包含data
2021/03/18 19:21:45 VoiceCall Body {
"Message": "OK",
"RequestId": "02496F43-175D-4182-802B-02E4AC8591B5",
"CallId": "122195989796^108989664796",
"Code": "OK"
}
2021/03/18 19:21:45 VoiceCall Headers map[access-control-allow-headers:0xc00010f690 access-control-allow-methods:0xc00010f6b0 access-control-allow-origin:0xc00010f6d0 access-control-max-age:0xc00010f6f0 connection:0xc00010f710 content-length:0xc00010f730 content-type:0xc00010f750 date:0xc00010f770 x-acs-request-id:0xc00010f790]
2021/03/18 19:21:55 GetCallResult 0
2021/03/18 19:21:55 {
"headers": {
"access-control-allow-headers": "X-Requested-With, X-Sequence, _aop_secret, _aop_signature",
"access-control-allow-methods": "POST, GET, OPTIONS",
"access-control-allow-origin": "*",
"access-control-max-age": "172800",
"connection": "keep-alive",
"content-length": "79",
"content-type": "application/json;charset=utf-8",
"date": "Thu, 18 Mar 2021 11:21:55 GMT",
"x-acs-request-id": "D9A6EE6A-838B-48A2-B0A4-63CDF5EC6131"
},
"body": {
"Message": "OK",
"RequestId": "D9A6EE6A-838B-48A2-B0A4-63CDF5EC6131",
"Code": "OK"
}
}
2021/03/18 19:22:10 GetCallResult 1
2021/03/18 19:22:10 {
"headers": {
"access-control-allow-headers": "X-Requested-With, X-Sequence, _aop_secret, _aop_signature",
"access-control-allow-methods": "POST, GET, OPTIONS",
"access-control-allow-origin": "*",
"access-control-max-age": "172800",
"connection": "keep-alive",
"content-length": "79",
"content-type": "application/json;charset=utf-8",
"date": "Thu, 18 Mar 2021 11:22:10 GMT",
"x-acs-request-id": "9EA472C7-96A1-46A9-ABD0-395062428831"
},
"body": {
"Message": "OK",
"RequestId": "9EA472C7-96A1-46A9-ABD0-395062428831",
"Code": "OK"
}
}
2021/03/18 19:22:25 GetCallResult 2
2021/03/18 19:22:25 {
"headers": {
"access-control-allow-headers": "X-Requested-With, X-Sequence, _aop_secret, _aop_signature",
"access-control-allow-methods": "POST, GET, OPTIONS",
"access-control-allow-origin": "*",
"access-control-max-age": "172800",
"connection": "keep-alive",
"content-length": "79",
"content-type": "application/json;charset=utf-8",
"date": "Thu, 18 Mar 2021 11:22:25 GMT",
"x-acs-request-id": "A5D42D76-101A-42C3-B2CC-8DDF3803FF05"
},
"body": {
"Message": "OK",
"RequestId": "A5D42D76-101A-42C3-B2CC-8DDF3803FF05",
"Code": "OK"
}
}
2021/03/18 19:22:40 GetCallResult 3
2021/03/18 19:22:40 {
"headers": {
"access-control-allow-headers": "X-Requested-With, X-Sequence, _aop_secret, _aop_signature",
"access-control-allow-methods": "POST, GET, OPTIONS",
"access-control-allow-origin": "*",
"access-control-max-age": "172800",
"connection": "keep-alive",
"content-length": "79",
"content-type": "application/json;charset=utf-8",
"date": "Thu, 18 Mar 2021 11:22:40 GMT",
"x-acs-request-id": "013F2A47-6180-4B23-A5F8-81AB5B617CE4"
},
"body": {
"Message": "OK",
"RequestId": "013F2A47-6180-4B23-A5F8-81AB5B617CE4",
"Code": "OK"
}
}
2021/03/18 19:22:55 GetCallResult 4
2021/03/18 19:22:55 {
"headers": {
"access-control-allow-headers": "X-Requested-With, X-Sequence, _aop_secret, _aop_signature",
"access-control-allow-methods": "POST, GET, OPTIONS",
"access-control-allow-origin": "*",
"access-control-max-age": "172800",
"connection": "keep-alive",
"content-length": "79",
"content-type": "application/json;charset=utf-8",
"date": "Thu, 18 Mar 2021 11:22:55 GMT",
"x-acs-request-id": "83C1FB5B-C86E-4560-A15A-C2AAF822AC47"
},
"body": {
"Message": "OK",
"RequestId": "83C1FB5B-C86E-4560-A15A-C2AAF822AC47",
"Code": "OK"
}
}
2021/03/18 19:23:10 GetCallResult 5
2021/03/18 19:23:10 {
"headers": {
"access-control-allow-headers": "X-Requested-With, X-Sequence, _aop_secret, _aop_signature",
"access-control-allow-methods": "POST, GET, OPTIONS",
"access-control-allow-origin": "*",
"access-control-max-age": "172800",
"connection": "keep-alive",
"content-length": "79",
"content-type": "application/json;charset=utf-8",
"date": "Thu, 18 Mar 2021 11:23:10 GMT",
"x-acs-request-id": "99AAEAEC-571D-49E1-AB1E-B9198442C6BC"
},
"body": {
"Message": "OK",
"RequestId": "99AAEAEC-571D-49E1-AB1E-B9198442C6BC",
"Code": "OK"
}
}
2021/03/18 19:23:25 GetCallResult 6
2021/03/18 19:23:25 {
"headers": {
"access-control-allow-headers": "X-Requested-With, X-Sequence, _aop_secret, _aop_signature",
"access-control-allow-methods": "POST, GET, OPTIONS",
"access-control-allow-origin": "*",
"access-control-max-age": "172800",
"connection": "keep-alive",
"content-length": "79",
"content-type": "application/json;charset=utf-8",
"date": "Thu, 18 Mar 2021 11:23:25 GMT",
"x-acs-request-id": "B40ECB76-0F14-4B54-BDB0-AE5E86A35DB7"
},
"body": {
"Message": "OK",
"RequestId": "B40ECB76-0F14-4B54-BDB0-AE5E86A35DB7",
"Code": "OK"
}
}
2021/03/18 19:23:40 未接通 ***我方手机号***
相关文档
https://help.aliyun.com/document_detail/114046.html?spm=a2c4g.11186623.2.6.41656f7f9FCh1T
以及预期的请求返回
{
"Message": "OK",
"RequestId": "8AE16BCD-3B80-4571-87CF-B5AB63C8B652",
"Data": "{\"callId\":\"122037727021^10883151****\",\"duration\":3,\"calleeShowNumber\":\"0571999****\",\"endDate\":\"2021-03-03 10:40:05\",\"stateDesc\":\"用户接听\",\"callee\":\"1862903****\",\"state\":\"200000\",\"gmtCreate\":\"2021-03-03 10:39:46\",\"startDate\":\"2021-03-03 10:40:03\",\"hangupDirection\":0}",
"Code": "OK"
}