alibabacloud-go-sdk icon indicating copy to clipboard operation
alibabacloud-go-sdk copied to clipboard

语音服务 sdk 通过通话id获取通话详情 响应体data始终为nil

Open pytomtoto opened this issue 3 years ago • 0 comments

	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"
}

pytomtoto avatar Mar 18 '21 11:03 pytomtoto