[英]Microsoft Bot Framework Analytics API call not working
我正在嘗試創建一個翻譯機器人,但是當我發送消息時,機器人一直告訴我機器人代碼有問題。 目前,我只是嘗試檢測用戶語言並將其打印在聊天中。 這是我寫的代碼:
async Task DetectLanguage(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
string uri = TEXT_ANALYTICS_API_ENDPOINT + "languages?numberOfLanguagesToDetect=1";
// create request to Text Analytics API
HttpWebRequest detectLanguageWebRequest = (HttpWebRequest)WebRequest.Create(uri);
detectLanguageWebRequest.Headers.Add("Ocp-Apim-Subscription-Key", TEXT_ANALYTICS_API_SUBSCRIPTION_KEY);
detectLanguageWebRequest.Method = "POST";
// create and send body of request
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string jsonText = serializer.Serialize(activity);
string body = "{ \"documents\": [ { \"id\": \"0\", \"text\": " + jsonText + "} ] }";
byte[] data = Encoding.UTF8.GetBytes(body);
detectLanguageWebRequest.ContentLength = data.Length;
using (var requestStream = detectLanguageWebRequest.GetRequestStream())
requestStream.Write(data, 0, data.Length);
HttpWebResponse response = (HttpWebResponse)detectLanguageWebRequest.GetResponse();
// read and and parse JSON response
var responseStream = response.GetResponseStream();
var jsonString = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")).ReadToEnd();
dynamic jsonResponse = serializer.DeserializeObject(jsonString);
// fish out the detected language code
var languageInfo = jsonResponse["documents"][0]["detectedLanguages"][0];
if (languageInfo["score"] > (decimal)0.5)
await context.PostAsync(languageInfo["iso6391Name"]);
else
await context.PostAsync("No language detected");
context.Wait(DetectLanguage);
}
當我嘗試調試時,導致問題的線路是這樣的:
HttpWebResponse response = (HttpWebResponse)detectLanguageWebRequest.GetResponse();
這是我在控制台中的錯誤:
iisexpress.exe Warning: 0 : Service url localhost:63556 is not trusted and JwtToken cannot be sent to it.
拋出異常:mscorlib.dll 中的“System.Net.WebException”
有人見過這個問題嗎?
感謝您的幫助:)
首先,關於您的實施的一些細節:
HttpClient
而不是HttpWebRequest
(你可以在這里閱讀原因)TextAnalytics
調用的TextAnalytics
(參見本頁末尾)無需定義與 API 中使用的對象對應的類即可工作答案:
private async Task DetectLanguage(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var msg = await result;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "PUT YOU KEY HERE");
// Request parameters
var queryString = HttpUtility.ParseQueryString(string.Empty);
queryString["numberOfLanguagesToDetect"] = "1";
// HERE BE CAREFUL ABOUT THE REGION USED, IT MUST BE CONSISTENT WITH YOUR API KEY DECLARATION
var uri = "https://westeurope.api.cognitive.microsoft.com/text/analytics/v2.0/languages?" + queryString;
// Request body
var serializer = new JavaScriptSerializer();
var body = "{ \"documents\": [ { \"id\": \"string\", \"text\": " + serializer.Serialize(msg.Text) + " } ]}";
var byteData = Encoding.UTF8.GetBytes(body);
var responseString = "";
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.PostAsync(uri, content);
responseString = await response.Content.ReadAsStringAsync();
}
// fish out the detected language code
dynamic jsonResponse = JsonConvert.DeserializeObject(responseString);
var languageInfo = jsonResponse["documents"][0]["detectedLanguages"][0];
var returnText = "No language detected";
if (languageInfo["score"] > (decimal) 0.5)
{
returnText = languageInfo["iso6391Name"].ToString();
}
await context.PostAsync(returnText);
context.Wait(DetectLanguage);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.