예제 #1
0
        /// <summary>
        /// Start Conversation with BOT
        /// </summary>
        /// <param name="conversationActivityModel"></param>
        /// <returns></returns>
        private async Task TalkToTheBot(ConversationActivityModel conversationActivityModel)
        {
            // Connect to the DirectLine service
            DirectLineClient client = new DirectLineClient(directLineSecret);

            DirectLineConversationStateModel conversationState;
            bool wasConnectionExisted;

            if (!activeConversationsState.ContainsKey(conversationActivityModel.Id.ToString()))
            {
                Conversation conversation = await client.Conversations.StartConversationAsync();

                conversationState = ConversationActorStateModelMapper(conversation);
                activeConversationsState.Add(conversationActivityModel.Id.ToString(), conversationState);
                wasConnectionExisted = false;
            }
            else
            {
                conversationState = activeConversationsState[conversationActivityModel.Id];
                client.Conversations.ReconnectToConversation(conversationState.ConversationId);
                wasConnectionExisted = true;
            }

            await SendActivityToBotAsync(client, conversationState.ConversationId, conversationActivityModel, wasConnectionExisted);
        }
예제 #2
0
        /// <summary>
        /// Posts the given activity to the bot using Direct Line client and Start Polling the activities from BOT
        /// </summary>
        /// <param name="client"></param>
        /// <param name="conversationId"></param>
        /// <param name="conversationActivityModel"></param>
        /// <param name="wasConnectionExisted"></param>
        /// <returns></returns>
        private static async Task SendActivityToBotAsync(DirectLineClient client, string conversationId, ConversationActivityModel conversationActivityModel, bool wasConnectionExisted)
        {
            // Start the bot message reader in a separate thread.
            if (!wasConnectionExisted)
            {
                new Thread(async() => await PollActivitiesAsync(client, conversationId, conversationActivityModel.Id)).Start();
            }

            Activity userMessage = new Activity
            {
                From = new ChannelAccount(conversationActivityModel.UserIdentifier),
                Text = conversationActivityModel.MessageText,
                Type = ActivityTypes.Message
            };

            await client.Conversations.PostActivityAsync(conversationId, userMessage);
        }
예제 #3
0
 /// <summary>
 /// API call to send message to Direct Line BOT
 /// </summary>
 /// <param name="conversationActivityModel"></param>
 /// <returns></returns>
 public async Task PostActivityAsync(ConversationActivityModel conversationActivityModel)
 {
     await TalkToTheBot(conversationActivityModel);
 }