簡體   English   中英

Microsoft Bot Framework Analytics API 調用不起作用

[英]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 (你可以在這里閱讀原因)
  • 您在 Microsoft 提供的 API 文檔中有很好的實現TextAnalytics調用的TextAnalytics (參見本頁末尾)
  • 另一種選擇將是使用NuGet包作為他們的文檔中表示這里 請注意,在撰寫此答案時,它仍處於預發布階段。

無需定義與 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM