public static async Task Resume(ConversationHistory history) { Activity message = null; Trace.TraceInformation($"Resuming {history.PartitionKey} {history.PartitionKey}"); try { message = JsonConvert.DeserializeObject <ConversationReference>(history.Conversation).GetPostToBotMessage(); ConnectorClient client = new ConnectorClient(new Uri(message.ServiceUrl)); using (ILifetimeScope scope = DialogModule.BeginLifetimeScope(Conversation.Container, message)) { IBotData botData = scope.Resolve <IBotData>(); await botData.LoadAsync(CancellationToken.None); string todayDate = DateTime.UtcNow.ToShortDateString(); if (botData.ConversationData.GetValueOrDefault <string>("today") != todayDate) { botData.ConversationData.SetValue("today", todayDate); await botData.FlushAsync(CancellationToken.None); await botData.LoadAsync(CancellationToken.None); IMessageActivity temp = message.CreateReply().AsMessageActivity(); IMessageActivity reply = await RootDialog.PostNewQuestion(botData.ConversationData, temp); if (reply != null) { await client.Conversations.SendToConversationAsync((Activity)reply); } //flush dialog stack await botData.FlushAsync(CancellationToken.None); } } } catch (Exception ex) { Trace.TraceError($"Exception when resuming conversation {message.Conversation?.Id}", ex); } }
public static void SaveConversation(IMessageActivity message) { Trace.TraceInformation($"SaveConversation { message.Conversation.Id}, { message.Conversation.Name}, { message.Conversation.IsGroup}; " + $"from: {message.From.Id}, {message.From.Name}; type: {message.Type}; channel: {message.ChannelId}"); try { CloudTable table = GetTable(); ConversationHistory conversation = new ConversationHistory(message); TableOperation insertOperation = TableOperation.InsertOrReplace(conversation); table.Execute(insertOperation); } catch (Exception ex) { Trace.TraceError("Exception when saving conversation", ex); } }