当我在任何浏览器中将 bot framework v4 与 js 集成时,LUIS 不起作用

LUIS does not work when I integrate bot framework v4 with js in any browser

我使用 my virtual assistant template 在 C# .net Core SDK v4 中创建了一个聊天机器人,网络聊天在 iframe

上运行良好
<iframe src='https://webchat.botframework.com/embed/NAME_OF_BOT?s=YOUR_SECRET_HERE'  style='min-width: 400px; width: 100%; min-height: 500px;'></iframe>

但是当我在任何浏览器中将它与 js 集成时,LUIS 不起作用

<div id="webchat" role="main"></div>
  <script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
  <script>
     window.WebChat.renderWebChat(
        {
           directLine: window.WebChat.createDirectLine({
              secret: 'YOUR_DIRECT_LINE_SECRET'
           }),

        },
        document.getElementById('webchat')
     );
  </script>

我该怎么做才能让它发挥作用? 我已经尝试通过添加 webchat 和 diretcline

的秘密来使其工作

这是它发给我的错误所在的位置:

public class DefaultAdapter : BotFrameworkHttpAdapter
{
    public DefaultAdapter(
        BotSettings settings,
        ICredentialProvider credentialProvider,
        IBotTelemetryClient telemetryClient,
        BotStateSet botStateSet)
        : base(credentialProvider)
    {
        OnTurnError = async (turnContext, exception) =>
        {
            await turnContext.SendActivityAsync(new Activity(type: ActivityTypes.Trace, text: $"{exception.Message}"));
            await turnContext.SendActivityAsync(new Activity(type: ActivityTypes.Trace, text: $"{exception.StackTrace}"));
            await turnContext.SendActivityAsync(MainStrings.ERROR);
            telemetryClient.TrackException(exception);
        };

        Use(new TranscriptLoggerMiddleware(new AzureBlobTranscriptStore(settings.BlobStorage.ConnectionString, settings.BlobStorage.Container)));
        Use(new TelemetryLoggerMiddleware(telemetryClient, logPersonalInformation: true));
        Use(new ShowTypingMiddleware());
        Use(new SetLocaleMiddleware(settings.DefaultLocale ?? "en-us"));
        Use(new EventDebuggerMiddleware());
        Use(new AutoSaveStateMiddleware(botStateSet));
    }
}

在 startup.cs 文件中:

        // Configure adapters
        // DefaultAdapter is for all regular channels that use Http transport
        services.AddSingleton<IBotFrameworkHttpAdapter, DefaultAdapter>();

机器人在进入用户数据请求流程(不需要 LUIS 和 QnA)时对我的响应很好,但是当我发送需要使用 LUIS 和 QnA 的消息时,它向我发送了错误。

只是为了确认 WebChat YOUR_SECRET_HERE 和 DirectLine YOUR_DIRECT_LINE_SECRET 应该是两个不同的值。

在您能够检索 YOUR_DIRECT_LINE_SECRET 的值之前,您需要通过 Azure 门户 > MyBot 资源 > 通道将您的机器人连接到 Direct Line 通道,有关如何执行此操作的详细说明可用here.

顺便说一句

将来,如果您可以 post 详细的错误消息(在本例中来自 console logs of Developer tools)来说明您遇到的错误,而不只是说"it doesn't work".

有可用的问题指南here

如果不使用 iframe,这是在 html 页面中包含 BotFramework-WebChat 的当前实现。该页面不应阻止您使用 LUIS,因为一个 依赖于另一个。从页面 向机器人 return 编辑的内容可能 是一个症结所在,如果它无法读取 return 编辑的数据,则会导致 LUIS 错误。

可以找到下面的代码here。回购中有很多示例可供参考。

请注意,我正在通过本地的 运行 一项 API 服务将我的直线秘密交换为令牌。你不应该在你的页面上包含你的直线秘密,因为任何人都可以访问它,这会产生安全风险。

如果您在设置此页面后仍然有 LUIS 错误,那么我会 return 在 cognitivemodels.jsonskills.json.dispatch 中对您的 LUIS 设置进行设置] 个文件。

希望得到帮助!

<!DOCTYPE html>
<html lang="en-US">

<head>
  <title>Web Chat: Custom attachment with GitHub Stargazers</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!--
      For simplicity and code clarity, we are using Babel and React from unpkg.com.
    -->
  <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
  <script src="https://unpkg.com/react@16.5.0/umd/react.development.js"></script>
  <script src="https://unpkg.com/react-dom@16.5.0/umd/react-dom.development.js"></script>
  <script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
  <style>
    html,
    body {
      height: 100%
    }

    body {
      margin: 0
    }

    #webchat {
      height: 100%;
      width: 100%;
    }
  </style>
</head>

<body>
  <div id="webchat" role="main"></div>
  <script type="text/babel">
      (async function () {
        'use strict';

        // To talk to your bot, you should use the token exchanged using your Direct Line secret.
        // You should never put the Direct Line secret in the browser or client app.
        // https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-direct-line-3-0-authentication

        const res = await fetch( 'http://localhost:3500/directline/token', { method: 'POST' } );
        const { token } = await res.json();
        const { ReactWebChat } = window.WebChat;

        window.ReactDOM.render(
          <ReactWebChat
            directLine={ window.WebChat.createDirectLine({ token }) }
            locale='en-US'
          />,
          document.getElementById('webchat')
        );

        document.querySelector('#webchat > *').focus();
      })().catch(err => console.error(err));
    </script>
</body>

</html>

Appication Insights 向我发送此错误:字典中不存在给定键 'es'。

我把代码改成这样:

<html>
<body>
<div id = "webchat" role = "main"> </div>
<script src = "https://cdn.botframework.com/botframework-webchat/latest/webchat.js"> </script>
<script>
window.WebChat.renderWebChat (
{
directLine: window.WebChat.createDirectLine ({
file: ''
}),
locale: 'en-US',
},
document.getElementById ('webchat')
);
</script>
</body>
</html>

更改语言,机器人已经在 webchat.js

中运行良好

非常感谢大家,好样的