/// <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); }
/// <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); }
/// <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); }