botframework - 在 Bot Framework 网络聊天中,我如何连接到我的机器人服务器?
问题描述
教程都是直连的,用我自己的bot服务器呢?如何在 javascript 中连接?
我已经设置了服务器端:
// Setup BotFramework
var connector = new Builder.ChatConnector({
appId: "a8...",
appPassword: "ko...",
openIdMetadata: process.env.BotOpenIdMetadata
});
// Setup Bot
var bot = new Builder.UniversalBot(connector);
bot.set('storage', new Builder.MemoryBotStorage());
// Setup Server
var server = Restify.createServer();
server.listen(process.env.port || process.env.PORT || 4000, function () {
console.log("Listening on port "+(process.env.port || process.env.PORT || 4000));
});
server.post('/api/messages', connector.listen());
在客户端,这是我目前使用直线得到的:
<script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
<script src="https://cdn.botframework.com/botframework-webchat/latest/CognitiveServices.js"></script>
<script>
const params = BotChat.queryParams(location.search);
const speechOptions = {
speechRecognizer: new BotChat.Speech.BrowserSpeechRecognizer(),
speechSynthesizer: new BotChat.Speech.BrowserSpeechSynthesizer()
};
BotChat.App({
showUploadButton: false,
directLine: { secret: '_bm...' },
bot: { id: 'a8...' },
locale: params['locale'],
resize: 'detect',
speechOptions: speechOptions,
user: {
id: 'WebChatDemoUser',
name: 'You'
},
}, document.getElementById('ChatBot'));
var header = document.getElementsByClassName("wc-header");
header[0].innerHTML = "<span>Chat</span>"
</script>
所以这项工作,但它直接连接到机器人框架,我需要像这样连接到我的服务器:
http://localhost:4000/api/messages
或者在生产中会是这样的:
http://myserver.com:4000/api/messages
基本上,类似于 Bot Emulator 的连接方式:
解决方案
DirectLineJs默认会调用Direct Line Connector Service。然后,连接器服务调用您的机器人,并且机器人通过响应(或主动消息)回叫连接器服务。 DirectLineJs确实提供了一个域参数,您可以提供该参数来覆盖默认值:
const dl = new DirectLine({
secret: /* put your Direct Line secret here */,
token: /* or put your Direct Line token here (supply secret OR token, not both) */,
domain: /* optional: if you are not using the default Direct Line endpoint, e.g. if you are using a region-specific endpoint, put its full URL here */
webSocket: /* optional: false if you want to use polling GET to receive messages. Defaults to true (use WebSocket). */,
pollingInterval: /* optional: set polling interval in milliseconds. Default to 1000 */,
});
但是,托管您自己的Direct Line Connector Service涉及更多内容。SDK 代码将使用活动的serviceUrl属性将消息发送回连接器服务。该机器人期待端点,例如此 MockChannelController 中的端点:https ://github.com/Microsoft/BotFramework-Samples/blob/master/blog-samples/CSharp/MockChannel/Controllers/MockChannelController.cs
此负载测试博客文章中解释了更多详细信息: https ://blog.botframework.com/2017/06/19/load-testing-a-bot/
还有这个有限节点示例:offline-directline
推荐阅读
- python - Pandas:跨多列获取一行中指定值的频率
- java - 我应该如何将对象添加到私有静态 ArrayList?
- testing - 无法在 Testcafe 中单击弹出确认按钮
- django - 尝试使用 manage.py 时没有名为“djangosite”的模块
- html - 标签宽度适合标签文本
- reactjs - React Native - 使用我制作的自定义组件时出错(错误:未定义无法解析模块
) - jenkins - 如何在 jenkins slave 中查看构建控制台输出
- python - 通过循环不断更新QTableView
- node.js - kraken.js 没有创建新项目
- python - 使用 tkinter 运行另一个 python 脚本