using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using Pcb.Common; namespace Pcb.Common { /// /// 云呼语音接口 /// 主要包含语音短信、语音通知、匿名通话等 /// add by sunyichao 2019-03-26 /// public class YunHuVoiceHelper { /// /// 接口账户 /// private static readonly string _account = "484f5035148b46d88447352247b86830"; /// /// token授权码 /// private static readonly string _token = "8efb13a0254a4a25b7b863f135cb76ab"; /// /// 语音接口地址 /// private static readonly string _baseYHUrl = "101.37.133.245:"; /// /// AXB模式绑定 /// /// 主叫号码A /// 主显号码(中间号X) /// 被叫号码B /// public static string BindPhoneAXBOper(string phoneA, string middleX, string phoneB, int Seconds = 120, string CallbackUrl = null) { string TimeUnix = ConvertDateTimetamp(DateTime.Now).ToString() + "000"; byte[] myByte = Encoding.GetEncoding("utf-8").GetBytes(_account + ":" + TimeUnix); string strAuthorization = Convert.ToBase64String(myByte); string postData = "{\"middleNumber\":\"" + middleX + "\",\"bindNumberA\":\"" + phoneA + "\",\"bindNumberB\":\"" + phoneB + "\",\"callRec\":\"1\",\"maxDuration\":\"\",\"maxBindingTime\":\"" + Seconds + "\",\"callbackUrl\":\"" + CallbackUrl + "\"}"; string sigstr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(_account + _token + TimeUnix, "MD5").ToLower(); string uriStr = string.Format("http://{0}/voice/1.0.0/middleNumberAXB/{1}/{2}", _baseYHUrl + "11108", _account, sigstr); //调用http请求,需要自己封装HttpSendJson_Authorization函数 string sendStr = HttpRequestHelper.DoPost(uriStr, postData, "utf-8", "application/json", 100000, strAuthorization); try { var jobj = Newtonsoft.Json.Linq.JObject.Parse(sendStr ?? "{}"); var rst = jobj.Value("result"); //绑定成功或已绑定 if (rst == "000000" || rst == "400090") { //在这里添加绑定日志AXB记录 return string.Empty; } else { //绑定失败的处理 var msg = jobj.Value("message"); return msg; } } catch (Exception ex) { return ex.Message + "\r\n" + ex.StackTrace + "\r\n" + ex.Source; } } /// /// 解除绑定 /// add by sunyichao 2019-03-27 /// /// 主叫号码 /// 中间号X /// 被叫号码 /// public static string ReleasePhoneAXBBind(string phoneA, string middleNum, string phoneB) { string TimeUnix = ConvertDateTimetamp(DateTime.Now).ToString() + "000"; byte[] myByte = Encoding.GetEncoding("utf-8").GetBytes(_account + ":" + TimeUnix); string strAuthorization = Convert.ToBase64String(myByte); string postData = "{\"middleNumber\":\"" + middleNum + "\",\"bindNumberA\":\"" + phoneA + "\",\"bindNumberB\":\"" + phoneB + "\"}"; string sigstr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(_account + _token + TimeUnix, "MD5").ToLower(); string uriStr = string.Format("http://{0}/voice/1.0.0/middleNumberUnbind/{1}/{2}", _baseYHUrl + "11108", _account, sigstr); //调用http请求,需要自己封装HttpSendJson_Authorization函数 string sendStr = HttpRequestHelper.DoPost(uriStr, postData, "utf-8", "application/json", 100000, strAuthorization); try { var jobj = Newtonsoft.Json.Linq.JObject.Parse(sendStr ?? "{}"); var rst = jobj.Value("result"); //解除绑定成功 if (rst == "000000") { //在这里添加设置AB绑定关系失效的代码 return string.Empty; } else { //绑定失败的处理 var msg = jobj.Value("message"); return msg; } } catch (Exception ex) { return ex.Message + "\r\n" + ex.StackTrace + "\r\n" + ex.Source; } } /// /// 语音通知 /// add by sunyichao 2019-05-28 /// /// 主显号码 /// 被叫号码 /// 语音文件ID或模板Id /// 带参数模板参数列表,格式为"var1:xxx,var2:aaa" /// 重播次数,默认重播3次 /// 是否开启录音,默认关闭 /// 呼叫结果推送地址 /// public static string SendVoiceByTts(string displayNumber, string calleeNumber, string tempId, string templateArgs = "", int replayTimes = 3,int callRec = 1,string callBackUrl = "") { //生成时间戳 string TimeUnix = ConvertDateTimetamp(DateTime.Now).ToString() + "000"; byte[] myByte = Encoding.GetEncoding("utf-8").GetBytes(_account + ":" + TimeUnix); //生成签名 string strAuthorization = Convert.ToBase64String(myByte); string postData = "{\"displayNumber\":\"" + displayNumber + "\",\"calleeNumber\":\"" + calleeNumber + "\",\"templateId\":\"" + tempId + "\",\"templateArgs\":{" + templateArgs + "},\"replayTimes\":\"" + replayTimes + "\"}"; string sigstr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(_account + _token + TimeUnix, "MD5").ToLower(); string uriStr = string.Format("https://{0}/voice/1.0.0/notify/{1}/{2}", _baseYHUrl + "11008", _account, sigstr); //调用http请求,需要自己封装HttpSendJson_Authorization函数 string sendStr = HttpRequestHelper.DoPost(uriStr, postData, "utf-8", "application/json", 100000, strAuthorization); try { var jobj = Newtonsoft.Json.Linq.JObject.Parse(sendStr ?? "{}"); var rst = jobj.Value("result"); //呼出成功 if (rst == "000000") { //在这里添加设置AB绑定关系失效的代码 return string.Empty; } else { //绑定失败的处理 var msg = jobj.Value("message"); return msg; } } catch (Exception ex) { return ex.Message + "\r\n" + ex.StackTrace + "\r\n" + ex.Source; } } /// /// DateTime时间格式转换为Unix时间戳格式 /// /// DateTime时间格式 /// Unix时间戳格式 public static int ConvertDateTimetamp(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds; } } }