当我在任何浏览器中将 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.json
、skills.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
中运行良好
非常感谢大家,好样的
我使用 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.json
、skills.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
中运行良好非常感谢大家,好样的