Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel
Ezequiel Jadib 6b3df2c0b3
Update documentation links to point to new docs (#118)
7 years ago
..
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
764b4f820b
[CSharp] Update screenshots emulator on all samples
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago
0eb77cf078
[CreateNewConversation] Add readme to solution
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
6b3df2c0b3
Update documentation links to point to new docs (#118)
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
8cf7c0307f
[CSharp-CreateNewConversation] Update to Microsoft.Bot.Builder v3.5.0
7 years ago
9143b42826
[CreateNewConversation] Update path on azuredeploy.json and Deploy button
7 years ago
6bfae6a1ac
Rename CreateNewConversation sample folder
7 years ago
1cac51aaa5
Merge pull request #119
7 years ago

README.md

You have to be logged in to leave a comment. Sign In

Create New Conversation Bot Sample

A sample bot that starts a new conversation using a previously stored user address.

Deploy to Azure

Prerequisites

The minimum prerequisites to run this sample are:

  • The latest update of Visual Studio 2015. You can download the community version here for free.
  • The Bot Framework Emulator. To install the Bot Framework Emulator, download it from here. Please refer to this documentation article to know more about the Bot Framework Emulator.

Code Highlights

Bot Builder uses dialogs to model a conversational process, the exchange of messages, between bot and user. Conversations are usually initiated by the user but sometimes it might be useful for the bot to proactively start a new dialog to interact with the user. In this sample starting a new dialog is a two steps process: First, creating the new conversation, and then, passing the control to the new dialog.

The ConversationReference contains information that can be used to resume a conversation with a user. In this case, we'll use the conversation reference to craft a new direct message to the user within a new conversation.

Check out the use of the ConnectorClient.CreateDirectConversationAsync() method in the SurveyTriggerer.cs class to create a new Bot-to-User conversation and how the conversationReference.GetPostToBotMessage() is used to find the proper dependencies to execute stack.Call() and initiate a new SurveyDialog.

public static async Task StartSurvey(ConversationReference conversationReference, CancellationToken token)
{
    var container = WebApiApplication.FindContainer();

    // the ConversationReference has the "key" necessary to resume the conversation
    var message = conversationReference.GetPostToBotMessage();

    ConnectorClient client = new ConnectorClient(new Uri(message.ServiceUrl));

    try
    {
        var conversation = await client.Conversations.CreateDirectConversationAsync(message.Recipient, message.From);
        message.Conversation.Id = conversation.Id;
    }
    catch (HttpOperationException ex)
    {
        var reply = message.CreateReply();
        reply.Text = ex.Message;

        await client.Conversations.SendToConversationAsync(reply);

        return;
    }

    // we instantiate our dependencies based on an IMessageActivity implementation
    using (var scope = DialogModule.BeginLifetimeScope(container, message))
    {
        // find the bot data interface and load up the conversation dialog state
        var botData = scope.Resolve<IBotData>();
        await botData.LoadAsync(token);

        // resolve the dialog stack
        IDialogStack stack = stack = scope.Resolve<IDialogStack>();

        // make a dialog to push on the top of the stack
        var child = scope.Resolve<SurveyDialog>();

        // wrap it with an additional dialog that will restart the wait for
        // messages from the user once the child dialog has finished
        var interruption = child.Void<object, IMessageActivity>();

        try
        {
            // put the interrupting dialog on the stack
            stack.Call(interruption, null);

            // start running the interrupting dialog
            await stack.PollAsync(token);
        }
        finally
        {
            // save out the conversation dialog state
            await botData.FlushAsync(token);
        }
    }
}

Additionally, the sample includes some "plumbing" components mainly intended to make the ConversationReference dependency available to initiate the survey dialog. For instance, check out the SurveyService.cs which stores the ConversationReference in the SurveyScheduler.cs.

public async Task QueueSurveyAsync()
{
    this.surveyScheduler.Add(this.conversationReference);
}

Outcome

You will see the following when connecting the Bot to the Emulator and send it a message.

Sample Outcome

On the other hand, you will see the following in Skype.

Sample Outcome

More Information

To get more information about how to get started in Bot Builder for .NET and Conversations please review the following resources:

LimitationsThe functionality provided by the Bot Framework Activity can be used across many channels. Moreover, some special channel features can be unleashed using the ChannelData property.

The Bot Framework does its best to support the reuse of your Bot in as many channels as you want. However, due to the very nature of some of these channels, some features are not fully portable.

The features used in this sample are fully supported in the following channels:

  • Skype
  • SMS
  • Slack
  • Email

They are also supported, with some limitations, in the following channel:

  • Telegram

On the other hand, they are not supported and the sample won't work as expected in the following channels:

  • Facebook
  • Microsoft Teams
  • DirectLine
  • WebChat
  • Kik
  • GroupMe
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...