Files
Web_CRICS_Server_VS2010_Prod/Common/XidaoDuOperation.cs
2025-12-11 09:17:16 +08:00

152 lines
6.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Common
{
public static class XiaoDuOperation
{
private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(XiaoDuOperation));
private static readonly string _welcomeURL = "https://dueros.baidu.com/business/open/restful";
/// <summary>
/// 获取AccessToken
/// </summary>
/// <returns></returns>
public static XiaoDuError GetXiaoDuAccessToken()
{
try
{
StringBuilder sbURL = new StringBuilder();
sbURL.Append("https://dueros.baidu.com/business/oauth/v2/token");
sbURL.Append("?grant_type=client_credentials");
sbURL.Append("&app_id=vG6mcOYY7kBvGv8GGhqLe36t9wAWQHjH");
sbURL.Append("&app_secret=c7ulEmnWSATaEBLXjV35Oj3onxRmhuNQ");
string result = HttpWebRequestHelper.GetWebRequest(sbURL.ToString());
XiaoDuError error = Newtonsoft.Json.JsonConvert.DeserializeObject<XiaoDuError>(result);
if (error.errno > 0)
{
logger.Error(string.Format("获取小度accessToken失败。errno:{0},errmsg:{1}", error.errno, error.errmsg));
}
return error;
}
catch (Exception ex)
{
logger.Error(string.Format("获取小度accessToken失败{0}", ex.Message));
}
return null;
}
/// <summary>
/// 发送命令给小度
/// </summary>
/// <param name="accessToken"></param>
/// <param name="cuid"></param>
/// <param name="paramJson"></param>
/// <param name="hotelCode"></param>
/// <param name="roomNumber"></param>
/// <returns></returns>
public static void PostWebRequestToXiaoDu(string accessToken, string cuid, XiaoDuParamJson paramJson, string hotelCode, string roomNumber)
{
if (!string.IsNullOrEmpty(accessToken) && !string.IsNullOrEmpty(cuid))
{
StringBuilder sb = new StringBuilder();
sb.Append("cuid=" + cuid);
sb.Append("&timestamp=" + TimeHelper.GetCurrentTimestamp(false));
sb.Append("&v=2.0");
sb.Append("&source=baidu");
sb.Append("&paramJson=" + Newtonsoft.Json.JsonConvert.SerializeObject(paramJson));
HttpWebRequestHelper.PostWebRequest(_welcomeURL, "Bearer " + accessToken, sb.ToString());
//string result = HttpWebRequestHelper.PostWebRequest(_welcomeURL, "Bearer " + accessToken, sb.ToString());
//XiaoDuError error = Newtonsoft.Json.JsonConvert.DeserializeObject<XiaoDuError>(result);
//if (error.errno > 0)
//{
// logger.Error(string.Format("酒店({0})客房({1})调用小度接口失败。cuid:{2}, method:{3}, errmsg:{4}, error:{5}", hotelCode, roomNumber, cuid, paramJson.method, error.errmsg, result));
//}
}
//else
//{
// logger.Error(string.Format("酒店({0})客房({1})调用小度接口失败。cuid:{2}, accessToken:{3}", hotelCode, roomNumber, cuid, accessToken));
//}
}
/// <summary>
/// 通知小度播报欢迎词
/// </summary>
/// <param name="hotelCode"></param>
/// <param name="roomNumber"></param>
/// <param name="webhookUrl"></param>
/// <param name="message"></param>
public static void UploadWebhook(string accessToken, string cuids, string message, string hotelCode, string roomNumber)
{
try
{
foreach (string cuid in cuids.Split(','))//多个小度英文逗号隔开
{
XiaoDuParamJson paramJson = new XiaoDuParamJson()
{
method = "welcome",
cuid = cuid,
outputSpeechText = message,
cardContent = message,
backgroundMusic = "http://www.abc.com"
};
PostWebRequestToXiaoDu(accessToken, cuid, paramJson, hotelCode, roomNumber);
}
}
catch (Exception ex)
{
logger.Error(string.Format("酒店({0})客房({1})调用小度接口({2})失败。原因:{3}", hotelCode, roomNumber, _welcomeURL, ex.Message));
}
}
/// <summary>
/// 同步设备技能
/// </summary>
/// <param name="hotelName"></param>
/// <param name="roomNumber"></param>
/// <param name="cuids"></param>
/// <param name="accessToken"></param>
/// <returns></returns>
//public static bool UploadDeviceFun(string hotelName, string roomNumber, string cuids, string accessToken)
//{
// try
// {
// XiaoDuParamJson paramJson = new XiaoDuParamJson() { method = "deviceSync", isNoBlocked = 1 };
// foreach (string cuid in cuids.Split(','))//多个小度英文逗号隔开
// {
// PostWebRequestToXiaoDu(accessToken, cuid, paramJson);
// }
// return true;
// }
// catch (Exception ex)
// {
// logger.Error(string.Format("酒店({0})客房({1})调用小度接口({2})失败:{3}", hotelName, roomNumber, _welcomeURL, ex));
// }
// return false;
//}
}
public class XiaoDuParamJson
{
public string method { get; set; }
public string cuid { get; set; }
public string outputSpeechText { get; set; }
public string cardContent { get; set; }
public string backgroundMusic { get; set; }
public int isNoBlocked { get; set; }
}
public class XiaoDuError
{
public int errno { get; set; }
public string errmsg { get; set; }
public XiaoDuErrorData data { get; set; }
}
public class XiaoDuErrorData
{
public string access_token { get; set; }
public int expires_in { get; set; }
public int deadline { get; set; }
public string refresh_token { get; set; }
}
}