Microsoft Bot Framework Analytics API 调用不起作用

浸渍组

我正在尝试创建一个翻译机器人,但是当我发送消息时,机器人一直告诉我机器人代码有问题。目前,我只是尝试检测用户语言并将其打印在聊天中。这是我写的代码:

    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”

有人见过这个问题吗?

感谢您的帮助:)

尼古拉斯·R

首先,关于您的实施的一些细节:

  • 我强烈建议使用HttpClient而不是HttpWebRequest(你可以在这里阅读原因
  • TextAnalytics在 Microsoft 提供的 API 文档中有很好的实现调用的示例(请参阅本页末尾
  • 另一种选择将是使用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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Microsoft Text Analytics API (v2.1) 示例代码不起作用

Microsoft Bot Framework的Bing位置控制:Facebook Messenger中的键入地址不起作用

Microsoft Bot Framework:按钮在 facebook 频道上不起作用

Microsoft Bot Framework API创建具有多个成员的会话

Angular JS API api URL调用不起作用

Microsoft Bot Framework状态管理

Microsoft Bot Framework 和 Microsoft Teams

来自 html 的 REST API 调用不起作用

IIS 7.5 Api调用不起作用(HTTP 404)

RESTful JSON API的主干JSONP调用不起作用

通过REST API的Twilio挂断调用不起作用?

预填充DocuSign模板的API调用不起作用

Android中的Api Rest调用不起作用

cURL PHP API调用不起作用

电报bot API inlineKeyboard不起作用

Microsoft认知API令牌不起作用

如何在Microsoft Bot框架中进行Rest API调用

如何从 Microsoft Bot C# 调用 On Premise API

Direct Line API Microsoft Bot Framework-获取令牌而无需在Javascript中公开公开秘密

具有Luis结果的C#Microsoft Bot Framework定向到QNA Maker和graph API

Microsoft Bot Framework .Net中的Directline API和OAuth2有什么区别?

Markdown在Bot Framework Twilio频道中不起作用

Microsoft Bot Framework,LUIS和Action参数

Microsoft Bot Framework,可以启动对话吗

如何开始使用Microsoft Bot Framework?

在Microsoft Bot Framework中等待事件

Microsoft Bot Framework C#异步问题

Microsoft Bot Framework未经授权的错误

Microsoft Bot Framework Chain.While示例