private async Task <Activity> HandleSystemMessage(Activity message) { if (message.Type == ActivityTypes.DeleteUserData) { // Implement user deletion here // If we handle user deletion, return a real message } else if (message.GetActivityType() == ActivityTypes.ConversationUpdate) { // Handle conversation state changes, like members being added and removed // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info // Not available in all channels IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity; if (iConversationUpdated != null) { ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl)); foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty <ChannelAccount>()) { if (member.Id == iConversationUpdated.Recipient.Id) { var cardText = await ScubaCardService.GetCardText("0-Welcome"); var reply = RootDialog.GetCardReply(message, cardText); await connector.Conversations.ReplyToActivityAsync(reply); } } } } else if (message.Type == ActivityTypes.ContactRelationUpdate) { // Handle add/remove from contact lists // Activity.From + Activity.Action represent what happened } else if (message.Type == ActivityTypes.Typing) { // Handle knowing tha the user is typing } else if (message.Type == ActivityTypes.Ping) { } return(null); }
private async Task <Activity> HandleSystemMessage(Activity message) { if (message.Type == ActivityTypes.DeleteUserData) { // Implement user deletion here // If we handle user deletion, return a real message } else if (message.Type == ActivityTypes.ConversationUpdate)// && message.ChannelId != "directline") { MicrosoftAppCredentials.TrustServiceUrl(message.ServiceUrl); IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity; if (iConversationUpdated != null) { ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl)); foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty <ChannelAccount>()) { if (member.Id == iConversationUpdated.Recipient.Id && message.ChannelId != "directline") { var cardText = await CardService.GetCardAttachment("FirstWelcome"); var reply = RootDialog.GetCardReply(message, cardText); await connector.Conversations.ReplyToActivityAsync(reply); } } } } else if (message.Type == ActivityTypes.ContactRelationUpdate) { // Handle add/remove from contact lists // Activity.From + Activity.Action represent what happened } else if (message.Type == ActivityTypes.Typing) { // Handle knowing tha the user is typing } else if (message.Type == ActivityTypes.Ping) { } else if (message.Type == ActivityTypes.Event) { using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message)) { var cancellationToken = default(CancellationToken); var agentService = scope.Resolve <IAgentService>(); switch (message.AsEventActivity().Name) { case "connect": await agentService.RegisterAgentAsync(message, cancellationToken); break; case "disconnect": await agentService.UnregisterAgentAsync(message, cancellationToken); break; case "stopConversation": await StopConversation(agentService, message, cancellationToken); await agentService.RegisterAgentAsync(message, cancellationToken); break; default: break; } } } return(null); }