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