如何自动将用户信息传递给 Bot Framework 对话实例而不将其作为显式消息发布在聊天 window 中?
How do I automatically pass user information to the Bot Framework conversation instance without posting it as an explicit message in the chat window?
[问题与 Microsoft Bot 框架有关]
我的机器人需要一些关于用户的信息,但我不希望用户自己提交,因为
- 他可能没有。 2. 我的网页肯定有,不用我问了。
本质上,我的聊天机器人嵌入在网页中。该网页的每个会话中都有信息,我需要提交给相应的聊天机器人控制器实例,而不会在聊天中显示明确的消息 window。
如何将信息传递给聊天机器人控制器?如果我需要对话 ID 来寻址机器人,我如何在我的网页 Javascripts 中以编程方式获取它?现在,我的聊天机器人已集成到网页中,带有可以在文档中找到的简单 iframe 行
http://docs.botframework.com/connector/embed-chat-control/#navtitle
示例场景:我的聊天机器人是 Facebook 页面上的聊天 window。我需要聊天机器人知道用户是谁,并在没有任何提示的情况下说 'Hello username' 以获取用户名
Microsoft Bot Framework 使用 Message
class 来交换消息 between/among 您的机器人和用户。它具有不同的属性。有一些由框架填充并取决于框架。但是,很少有允许您控制对话状态的。
BotUserData
、BotConversationData
和 BotPerUserInConversationData
是允许您交换动态数据的一种。三者各有各的意义。查看 official documentation 了解详情。
要获取有关不同频道的信息,请使用包含来自频道 (Facebook)
的原始消息的 ChannelData
在那种情况下,您必须创建自己的对话 window,允许您 post 并获取 Message 对象。
Index.html
<script src="script.js">
<ul class="chat" id="conversation">
</ul>
<input id="input-text" type="text" />
<button type="button" id="btn-send">Send</button>
script.js
$('#btn-send').click(function () {
// Convert text to Message object
var message = {
text: $('#input-text').val(),
type: "Message"
};
// Create outgoing message html and add to list
var htmlOutgoing = "<li>" + message.text + "</li>";
$('#conversation').append(html);
$.ajax({
url: 'api/Messages/Post', // Change to your proper url
dataType: "json",
type: "POST",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(message),
async: true,
processData: false,
cache: false,
success: function (data) {
// Create incoming message html and add to list
var htmlIncoming = "<li>" + data.text + "</li>";
$('#conversation').append(htmlIncoming);
},
error: function (xhr) {
alert('error');
}
});
$('#text-input').val("");
})
希望对您有所帮助。
我能够将用户 ID 和名称从 Web 应用程序传递到嵌入在 iframe 中的 C# Microsoft Bot Framework 机器人。用户 ID 和名称可以像这样在 iframe 中传递(替换您的机器人的 URL 和密码,以及您要传递的任何用户 ID 和名称:
<iframe src="https://webchat.botframework.com/embed/assistant-bot?s=[bot_secret]&userid=[user_id]&username=[user_name]"></iframe>`
在我的 bot 中,turn context 用于访问用户 ID 和名称,并且在 class DialogBot.cs
和 [=14= 中的方法 OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
中可用] 在 class QnABot.cs
.
在这些方法中,turnContext.Activity.From.Id
包含 passed-in 用户 ID,turnContext.Activity.From.Name
包含 passed-in 用户名。
我相信,如果您使用 DirectLine 嵌入机器人,那么机器人也应该能够以与上述相同的方式访问用户 ID 和用户名,如下面 Secured WebChat Control 发送给我的代码片段所示, 但我还没有机会尝试:
$.get('/api/token', function (token) {
window.WebChat.renderWebChat({
directLine: window.WebChat.createDirectLine({ token: token }),
userID: '[user_id]',
username: '[user_name]',
locale: 'en-us',
styleOptions: { hideUploadButton: true }
}, document.getElementById('webchat'));
}
[问题与 Microsoft Bot 框架有关]
我的机器人需要一些关于用户的信息,但我不希望用户自己提交,因为
- 他可能没有。 2. 我的网页肯定有,不用我问了。
本质上,我的聊天机器人嵌入在网页中。该网页的每个会话中都有信息,我需要提交给相应的聊天机器人控制器实例,而不会在聊天中显示明确的消息 window。
如何将信息传递给聊天机器人控制器?如果我需要对话 ID 来寻址机器人,我如何在我的网页 Javascripts 中以编程方式获取它?现在,我的聊天机器人已集成到网页中,带有可以在文档中找到的简单 iframe 行
http://docs.botframework.com/connector/embed-chat-control/#navtitle
示例场景:我的聊天机器人是 Facebook 页面上的聊天 window。我需要聊天机器人知道用户是谁,并在没有任何提示的情况下说 'Hello username' 以获取用户名
Microsoft Bot Framework 使用 Message
class 来交换消息 between/among 您的机器人和用户。它具有不同的属性。有一些由框架填充并取决于框架。但是,很少有允许您控制对话状态的。
BotUserData
、BotConversationData
和 BotPerUserInConversationData
是允许您交换动态数据的一种。三者各有各的意义。查看 official documentation 了解详情。
要获取有关不同频道的信息,请使用包含来自频道 (Facebook)
的原始消息的ChannelData
在那种情况下,您必须创建自己的对话 window,允许您 post 并获取 Message 对象。
Index.html
<script src="script.js">
<ul class="chat" id="conversation">
</ul>
<input id="input-text" type="text" />
<button type="button" id="btn-send">Send</button>
script.js
$('#btn-send').click(function () {
// Convert text to Message object
var message = {
text: $('#input-text').val(),
type: "Message"
};
// Create outgoing message html and add to list
var htmlOutgoing = "<li>" + message.text + "</li>";
$('#conversation').append(html);
$.ajax({
url: 'api/Messages/Post', // Change to your proper url
dataType: "json",
type: "POST",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(message),
async: true,
processData: false,
cache: false,
success: function (data) {
// Create incoming message html and add to list
var htmlIncoming = "<li>" + data.text + "</li>";
$('#conversation').append(htmlIncoming);
},
error: function (xhr) {
alert('error');
}
});
$('#text-input').val("");
})
希望对您有所帮助。
我能够将用户 ID 和名称从 Web 应用程序传递到嵌入在 iframe 中的 C# Microsoft Bot Framework 机器人。用户 ID 和名称可以像这样在 iframe 中传递(替换您的机器人的 URL 和密码,以及您要传递的任何用户 ID 和名称:
<iframe src="https://webchat.botframework.com/embed/assistant-bot?s=[bot_secret]&userid=[user_id]&username=[user_name]"></iframe>`
在我的 bot 中,turn context 用于访问用户 ID 和名称,并且在 class DialogBot.cs
和 [=14= 中的方法 OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
中可用] 在 class QnABot.cs
.
在这些方法中,turnContext.Activity.From.Id
包含 passed-in 用户 ID,turnContext.Activity.From.Name
包含 passed-in 用户名。
我相信,如果您使用 DirectLine 嵌入机器人,那么机器人也应该能够以与上述相同的方式访问用户 ID 和用户名,如下面 Secured WebChat Control 发送给我的代码片段所示, 但我还没有机会尝试:
$.get('/api/token', function (token) {
window.WebChat.renderWebChat({
directLine: window.WebChat.createDirectLine({ token: token }),
userID: '[user_id]',
username: '[user_name]',
locale: 'en-us',
styleOptions: { hideUploadButton: true }
}, document.getElementById('webchat'));
}