private async Task AgentStateChangeMessageHandler(AgentStateChange message) { if (message == null || string.IsNullOrEmpty(message.Activity) || string.IsNullOrEmpty(message.StateChangeMessage)) { return; } try { var activity = JsonConvert.DeserializeObject <Activity>(message.Activity); var reply = activity.CreateReply(message.StateChangeMessage); using (var connector = new ConnectorClient(new Uri(activity.ServiceUrl))) { await connector.Conversations.ReplyToActivityWithRetriesAsync(reply); } } catch (Exception e) { // m_logger.Exception(e, $"Failed to extract tenantId from agent state service bus pub message <{JsonConvert.SerializeObject(message)}>"); } }
public async Task ProcessMessage(ConnectorClient connector, Activity activity) { StateClient stateClient = activity.GetStateClient(); BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id); bool isLoggedIn = userData.GetProperty <bool>(IsLoggedInProperty); if (userData.Data == null) { userData.SetProperty(IsLoggedInProperty, false); } if (activity.Type == ActivityTypes.Message) { var replyMessage = string.Empty; if (string.Compare(activity.GetTextWithoutMentions(), "login", StringComparison.OrdinalIgnoreCase) == 0) { if (isLoggedIn) { replyMessage = "You are already logged in; no action needed."; } else { replyMessage = "You are now logged in."; userData.SetProperty(IsLoggedInProperty, true); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); } } if (string.Compare(activity.GetTextWithoutMentions(), "logout", StringComparison.OrdinalIgnoreCase) == 0) { if (isLoggedIn) { replyMessage = "You have been logged out."; userData.SetProperty(IsLoggedInProperty, false); await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); } else { replyMessage = "You are already logged out; no action needed."; } } // Send message to service bus try { var topic = TopicClient.CreateFromConnectionString( ConfigurationManager.AppSettings["ServiceBusConnection"], "agentstatetopic"); var stateChangeMessage = new AgentStateChange { StateChangeMessage = replyMessage, Activity = JsonConvert.SerializeObject(activity) }; await topic.SendAsync(new BrokeredMessage(stateChangeMessage)); } catch (Exception e) { Console.WriteLine(e); throw; } //if (!string.IsNullOrEmpty(replyMessage)) //{ // var reply = activity.CreateReply(replyMessage + " (local)"); // await connector.Conversations.ReplyToActivityWithRetriesAsync(reply); //} } }