How do I automatically pass user information to the Bot Framework conversation instance without posting it as an explicit message in the chat window?

孤者浪人 提交于 2019-12-06 12:24:27

问题


[Question pertains to the Microsoft Bot Framework]

There is certain information about the user that my bot will need, but I don't want the user himself to submit it because

  1. He may not have it. 2. My web page definitely has it so I shouldn't have to ask.

Essentially, my chat bot is embedded in a web page. There is information in each session of that web page that I need to submit to the corresponding chat bot controller instance without an explicit message becoming visible in the chat window.

How do I pass information to the chat bot controller? If I need the conversation Id to address the bot, how do I get it programmatically inside of my web page Javascripts? Right now, my chat bot is integrated into the web page with the simple iframe line that can be found in the docs

http://docs.botframework.com/connector/embed-chat-control/#navtitle

Example Scenario : My chat bot is a chat window on a facebook page. I need the chat bot to know who the user is and say, for instance, 'Hello username' without any prompting to get username


回答1:


In that case you have to create your own conversation window that allows you to post and get the Message object.

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("");
})

I hope, this would help you.




回答2:


Microsoft Bot Framework uses Message class to exchanges messages between/among your bot and users. It comes with different properties. There are some which are filled by the Framework and depending on the Framework. However, there are few that allows you to control the state of the conversation.

BotUserData, BotConversationData and BotPerUserInConversationData are the one that allow you to exchange dynamic data. Each of three has their own significance. Checkout official documentation for details.

To get information regarding different channel, use ChannelData that contains the original message coming from the channel (Facebook)




回答3:


I was able to pass the user ID and name from a web application to a C# Microsoft Bot Framework bot that is embedded within an iframe. The user ID and name can be passed in the iframe like this (substitute your bot's URL and secret, and whatever user ID and name you want to pass:

<iframe src="https://webchat.botframework.com/embed/assistant-bot?s=[bot_secret]&userid=[user_id]&username=[user_name]"></iframe>`

In my bot, the turn context is used to access the user ID and name, and is available in methods OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) in class DialogBot.cs, and in OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) in class QnABot.cs.

In these methods, turnContext.Activity.From.Id contains the passed-in user ID, and turnContext.Activity.From.Name contains the passed-in user name.

I believe the bot should also be able to access user ID and user name in the same way as above if you embed the bot with DirectLine as in the below code snippet from Secured WebChat Control that was sent to me, but I haven't had the chance yet to try it:

$.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'));
}


来源:https://stackoverflow.com/questions/37804506/how-do-i-automatically-pass-user-information-to-the-bot-framework-conversation-i

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!