/// <summary> /// Handles O365 connector card action queries. /// </summary> /// <param name="turnContext">The turn context.</param> /// <param name="query">Incoming request from Bot Framework.</param> /// <returns>Task tracking operation.</returns> private static async Task HandleO365ConnectorCardActionQuery(ITurnContext <IInvokeActivity> turnContext, O365ConnectorCardActionQuery query) { // Get O365 connector card query data. O365ConnectorCardActionQuery o365CardQuery = query; var Text = $"Thanks, {turnContext.Activity.From.Name}\nYour input action ID:{o365CardQuery.ActionId}\nYour input body:{o365CardQuery.Body}"; await turnContext.SendActivityAsync(Text); }
public void O365ConnectorCardActionQueryInitsWithNoArgs() { var actionQuery = new O365ConnectorCardActionQuery(); Assert.NotNull(actionQuery); Assert.IsType <O365ConnectorCardActionQuery>(actionQuery); }
private static async Task <HttpResponseMessage> HandleO365ConnectorCardActionQuery(Activity activity) { var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); try { if (o365CardQuery.ActionId == Constants.ShowAirCraftDetails) { AirCraftDetails aircraftInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <AirCraftDetails>(o365CardQuery.Body); await ShowAircraftDetails(aircraftInfo, replyActivity); ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); await connector.Conversations.ReplyToActivityAsync(replyActivity); } else { await Conversation.SendAsync(activity, () => new EchoBot()); } } catch (Exception e) { activity.CreateReply(e.Message.ToString()); } return(new HttpResponseMessage(HttpStatusCode.OK)); }
private static async Task <HttpResponseMessage> HandleO365ConnectorCardActionQuery(Activity activity) { var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); // Get O365 connector card query data. O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); try { if (o365CardQuery.ActionId == Constants.Name) { var Name = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await AttachBaggageInformationName(Name.Value, replyActivity); ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); await connector.Conversations.ReplyToActivityAsync(replyActivity); } else { await Conversation.SendAsync(activity, () => new EchoBot()); } } catch (Exception e) { activity.CreateReply(e.Message.ToString()); } return(new HttpResponseMessage(HttpStatusCode.OK)); }
private static async Task <HttpResponseMessage> HandleO365ConnectorCardActionQuery(Activity activity) { var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); switch (o365CardQuery.ActionId) { case Constants.ShowFlights: FlightInputDetails flightInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <FlightInputDetails>(o365CardQuery.Body); flightInfo.JourneyDate = flightInfo.JourneyDate + activity.LocalTimestamp.Value.Offset; await ShowFlightInfo(flightInfo, replyActivity); break; case Constants.Rebook: RebookClass rebookFlight = Newtonsoft.Json.JsonConvert.DeserializeObject <RebookClass>(o365CardQuery.Body); await AttachRebookPassenger(rebookFlight.flightNumberInput, rebookFlight.pnrNumberInput, replyActivity); break; default: break; } await connectorClient.Conversations.ReplyToActivityWithRetriesAsync(replyActivity); return(new HttpResponseMessage(HttpStatusCode.OK)); }
private async Task HandleInvoke(IDialogContext context, IMessageActivity message) { var activity = (Activity)message; var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); //string savedMessageId; // Get O365 connector card query data. O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); switch (o365CardQuery.ActionId) { case Constants.newInventoryCount: InventoryInputDetails itemCount = Newtonsoft.Json.JsonConvert.DeserializeObject <InventoryInputDetails>(o365CardQuery.Body); await AddItems(itemCount, replyActivity); break; case Constants.BlockInventory: InventoryInputDetails blockItem = Newtonsoft.Json.JsonConvert.DeserializeObject <InventoryInputDetails>(o365CardQuery.Body); await BlockItems(blockItem, replyActivity); break; case Constants.RetireInventory: InventoryInputDetails retireitemcount = Newtonsoft.Json.JsonConvert.DeserializeObject <InventoryInputDetails>(o365CardQuery.Body); await RetireItems(retireitemcount, replyActivity); break; case Constants.RequestNewStock: await AttachNewStock(replyActivity); context.ConversationData.RemoveValue(LastMessageIdKey); break; default: break; } if (context.ConversationData.TryGetValue(LastMessageIdKey, out savedMessageId)) { try { var resource = await connectorClient.Conversations.UpdateActivityAsync(replyActivity.Conversation.Id, savedMessageId, replyActivity); savedMessageId = resource.Id; } catch (Exception e) { var resource = e.Message.ToString(); } } else { var resource = await connectorClient.Conversations.ReplyToActivityWithRetriesAsync(replyActivity); savedMessageId = resource.Id; } context.ConversationData.SetValue(LastMessageIdKey, savedMessageId); }
/// <summary> /// Handles O365 connector card action queries. /// </summary> /// <param name="activity">Incoming request from Bot Framework.</param> /// <param name="connectorClient">Connector client instance for posting to Bot Framework.</param> /// <returns>Task tracking operation.</returns> private static async Task <HttpResponseMessage> HandleO365ConnectorCardActionQuery(Activity activity) { var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); // Get O365 connector card query data. O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); replyActivity.TextFormat = "xml"; replyActivity.Text = $@" <h2>Thanks, {activity.From.Name}</h2><br/> <h3>Your input action ID:</h3><br/> <pre>{o365CardQuery.ActionId}</pre><br/> <h3>Your input body:</h3><br/> <pre>{o365CardQuery.Body}</pre> "; await connectorClient.Conversations.ReplyToActivityWithRetriesAsync(replyActivity); return(new HttpResponseMessage(HttpStatusCode.OK)); }
private async Task <HttpResponseMessage> HandleO365ConnectorCardActionQuery(Activity activity) { var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); var userInfo = UserInfoRepository.GetUserInfo(activity.From.Id); // Validate for Sing In if (userInfo == null || userInfo.ExpiryTime < DateTime.Now) { var reply = activity.CreateReply(); SigninCard plCard = RootDialog.GetSignInCard(); reply.Attachments.Add(plCard.ToAttachment()); await connectorClient.Conversations.ReplyToActivityWithRetriesAsync(reply); return(new HttpResponseMessage(System.Net.HttpStatusCode.OK)); } var email = string.Empty; var member = connectorClient.Conversations.GetConversationMembersAsync(activity.Conversation.Id).Result.AsTeamsChannelAccounts().FirstOrDefault(); if (member != null) { email = member.Email; } // Get O365 connector card query data. Task <Task> task = new Task <Task>(async() => { O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); switch (o365CardQuery.ActionId) { case "Custom": // Get Passenger List & Name var teamDetails = Newtonsoft.Json.JsonConvert.DeserializeObject <CustomTeamData>(o365CardQuery.Body); await CreateTeam(connectorClient, activity, userInfo, teamDetails.TeamName, teamDetails.Members.Split(';').ToList()); break; case "Flight": var flightDetails = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await CreateTeam(connectorClient, activity, userInfo, "Flight-" + flightDetails.Value, GetMemberList(email)); // await AttachClassWisePassengerList(classInfo.Value, replyActivity, $"Passengers with {classInfo.Value} tickets"); break; default: break; } }); task.Start(); return(new HttpResponseMessage(System.Net.HttpStatusCode.OK)); }
public void O365ConnectorCardActionQueryInits() { var body = "body"; var actionId = "ActionCard"; var actionQuery = new O365ConnectorCardActionQuery(body, actionId); Assert.NotNull(actionQuery); Assert.IsType <O365ConnectorCardActionQuery>(actionQuery); Assert.Equal(body, actionQuery.Body); Assert.Equal(actionId, actionQuery.ActionId); }
/// <summary> /// Handles O365 connector card action queries. /// </summary> /// <param name="activity">Incoming request from Bot Framework.</param> /// <param name="connectorClient">Connector client instance for posting to Bot Framework.</param> /// <returns>Task tracking operation.</returns> private static async Task <HttpResponseMessage> HandleO365ConnectorCardActionQuery(Activity activity) { var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); // Get O365 connector card query data. O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); switch (o365CardQuery.ActionId) { case Constants.All: await AttachAllPassengerList(replyActivity, "All passengers"); break; case Constants.ClassWise: var classInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await AttachClassWisePassengerList(classInfo.Value, replyActivity, $"Passengers with {classInfo.Value} tickets"); break; case Constants.Zone: var zoneInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await AttachZoneWisePassengerList(zoneInfo.Value, replyActivity, $"Passengers who belongs to zone {zoneInfo.Value}"); break; case Constants.FrequentFlyer: await AttachFrequentFlyerPassengerList(replyActivity, "Frequent flyer passengers"); break; case Constants.SeatNumber: var seatNo = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await AttachPassengerOnSpecifiedSeat(seatNo.Value, replyActivity); break; case Constants.SpecialAssistance: await AttachPassengerWhoNeedSpecialAssistance(replyActivity, "Passengers who need special assistance"); break; default: break; } await connectorClient.Conversations.ReplyToActivityWithRetriesAsync(replyActivity); return(new HttpResponseMessage(HttpStatusCode.OK)); }
private static async Task <HttpResponseMessage> HandleO365ConnectorCardActionQuery(Activity activity) { var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); try { if (o365CardQuery.ActionId == Constants.Industry) { var industryCode = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await ShowProductInfo(industryCode.Value, replyActivity); ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); await connector.Conversations.ReplyToActivityAsync(replyActivity); } } catch (Exception e) { activity.CreateReply(e.Message.ToString()); } return(new HttpResponseMessage(HttpStatusCode.OK)); }
/// <summary> /// Invoked when a O365 Connector Card Action activity is received from the connector. /// </summary> /// <param name="turnContext">A strongly-typed context object for this turn.</param> /// <param name="query">The O365 connector card HttpPOST invoke query.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects /// or threads to receive notice of cancellation.</param> /// <returns>A task that represents the work queued to execute.</returns> protected virtual Task OnTeamsO365ConnectorCardActionAsync(ITurnContext <IInvokeActivity> turnContext, O365ConnectorCardActionQuery query, CancellationToken cancellationToken) { throw new InvokeResponseException(HttpStatusCode.NotImplemented); }
/// <summary> /// Handles the o365 connector card action asynchronously. /// </summary> /// <param name="turnContext">The turn context.</param> /// <param name="query">The o365 connector card action action.</param> /// <returns>Task tracking operation.</returns> public virtual Task <InvokeResponse> HandleO365ConnectorCardActionAsync(ITurnContext turnContext, O365ConnectorCardActionQuery query) { return(Task.FromResult <InvokeResponse>(null)); }
protected virtual Task OnTeamsO365ConnectorCardActionAsync(ITurnContext <IInvokeActivity> turnContext, O365ConnectorCardActionQuery query, CancellationToken cancellationToken) { return(Task.CompletedTask); }
protected override async Task OnTeamsO365ConnectorCardActionAsync(ITurnContext <IInvokeActivity> turnContext, O365ConnectorCardActionQuery query, CancellationToken cancellationToken) { await turnContext.SendActivityAsync(MessageFactory.Text($"O365ConnectorCardActionQuery event value: {JsonConvert.SerializeObject(query)}")); }
private async Task HandleConnectorAction(IDialogContext context, Activity message) { O365ConnectorCardActionQuery o365CardQuery = message.GetO365ConnectorCardActionQueryData(); O365ConnectorActionRequest actionInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <O365ConnectorActionRequest>(o365CardQuery.Body); Activity reply = message.CreateReply(); switch (actionInfo.Value) { case "Weather": reply.Attachments.Add(GetWeatherCard()); break; case "OperationsDelay": reply.Attachments.Add(GetOperationsDelayCard()); break; case "SocialEvents": List <Attachment> events = GetSocialEvents(); foreach (var evnt in events) { reply.Attachments.Add(evnt); } reply.AttachmentLayout = AttachmentLayoutTypes.Carousel; break; default: break; } MicrosoftAppCredentials.TrustServiceUrl(message.ServiceUrl, DateTime.MaxValue); ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl)); reply.ChannelData = new TeamsChannelData() { Notification = new NotificationInfo(true) }; var lastMessageId = context.ConversationData.GetValueOrDefault <string>(actionInfo.ActionId); if (lastMessageId == null && privateStorage.ContainsKey(actionInfo.ActionId)) { lastMessageId = privateStorage[actionInfo.ActionId]; } if (!string.IsNullOrEmpty(lastMessageId)) { // Update existing item. await connector.Conversations.UpdateActivityAsync(reply.Conversation.Id, lastMessageId, reply); context.ConversationData.RemoveValue(actionInfo.ActionId); if (privateStorage.ContainsKey(actionInfo.ActionId)) { privateStorage.Remove(actionInfo.ActionId); } // Send private messages. if (!string.IsNullOrEmpty(actionInfo.Members)) { // Send private message to these users. var members = actionInfo.Members.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (members.Any(x => x.Contains("ALL TEAM"))) { // Provide option to send message to all members. var channelData = message.GetChannelData <TeamsChannelData>(); if (context.ConversationData.ContainsKey(channelData.Channel.Id)) { members = context.ConversationData.GetValue <List <string> >(channelData.Channel.Id).ToArray(); context.ConversationData.RemoveValue(channelData.Channel.Id); } else { IList <ChannelAccount> allMembers = await GetAllMembers(connector, channelData); members = allMembers.Select(m => m.Id).ToArray(); } } foreach (var memberId in members) { // Create or get existing chat conversation with user try { await SendNotification(context, reply, memberId, actionInfo.Value); } catch (Exception ex) { Console.WriteLine(ex); } } } } }
protected override Task OnTeamsO365ConnectorCardActionAsync(ITurnContext <IInvokeActivity> turnContext, O365ConnectorCardActionQuery query, CancellationToken cancellationToken) { Record.Add(MethodBase.GetCurrentMethod().Name); return(Task.CompletedTask); }
private async Task HandleInvoke(IDialogContext context, IMessageActivity message) { var activity = (Activity)message; var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); // Get O365 connector card query data. O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); switch (o365CardQuery.ActionId) { case Constants.PNR: var PNRno = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await AttachBaggagebyPNR(PNRno.Value, replyActivity); context.ConversationData.RemoveValue(LastMessageIdKey); break; case Constants.TicketNumber: var Ticketno = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await AttachBaggageInformationTicket(Ticketno.Value, replyActivity); context.ConversationData.RemoveValue(LastMessageIdKey); break; case Constants.Name: var Name = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await AttachBaggageInformationName(Name.Value, replyActivity); context.ConversationData.RemoveValue(LastMessageIdKey); break; case Constants.DetailsofCheckedBaggage: var PNRno1 = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body).Value; await AttachBaggageInformation(PNRno1, replyActivity); break; case Constants.CurrentStatus: var PNRno2 = Newtonsoft.Json.JsonConvert.DeserializeObject <O365BodyValue>(o365CardQuery.Body); await AttachBaggageInformation(PNRno2.Value, replyActivity); break; case Constants.RebookBaggage: RebookClass NewFlightTicketNumber = Newtonsoft.Json.JsonConvert.DeserializeObject <RebookClass>(o365CardQuery.Body); await AttachRebookInformation(NewFlightTicketNumber.flightNumberInput, replyActivity); context.ConversationData.RemoveValue(LastMessageIdKey); break; case Constants.ReportMissing: await AttachReportMissing(replyActivity); context.ConversationData.RemoveValue(LastMessageIdKey); break; default: break; } string savedMessageId; if (context.ConversationData.TryGetValue(LastMessageIdKey, out savedMessageId)) { try { var resource = await connectorClient.Conversations.UpdateActivityAsync(replyActivity.Conversation.Id, savedMessageId, replyActivity); savedMessageId = resource.Id; } catch (Exception e) { var resource = e.Message.ToString(); } } else { var resource = await connectorClient.Conversations.ReplyToActivityWithRetriesAsync(replyActivity); savedMessageId = resource.Id; } context.ConversationData.SetValue(LastMessageIdKey, savedMessageId); }
protected virtual Task OnTeamsO365ConnectorCardActionAsync(ITurnContext <IInvokeActivity> turnContext, O365ConnectorCardActionQuery query, CancellationToken cancellationToken) { throw new NotImplementedException(); }
/// <summary> /// Invoked when the user submit any action from O365 Connector Card. /// </summary> /// <param name="turnContext">Context object containing information cached for a single turn of conversation with a user.</param> /// <param name="query">Contains O365 Connector Card query keywords.</param> /// <param name="cancellationToken">Propagates notification that operations should be canceled.</param> /// <returns>A task that represents the work queued to execute.</returns> protected override async Task OnTeamsO365ConnectorCardActionAsync(ITurnContext <IInvokeActivity> turnContext, O365ConnectorCardActionQuery query, CancellationToken cancellationToken) { await HandleO365ConnectorCardActionQuery(turnContext, query); }
private async Task HandleInvoke(IDialogContext context, IMessageActivity message) { var activity = (Activity)message; var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); //string savedMessageId; // Get O365 connector card query data. O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); AirCraftDetails actionInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <AirCraftDetails>(o365CardQuery.Body); Activity replyActivity = activity.CreateReply(); switch (o365CardQuery.ActionId) { case Constants.Assignaircraft: AirCraftDetails assignairCraftInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <AirCraftDetails>(o365CardQuery.Body); await AttachAssignairCraft(assignairCraftInfo, replyActivity); break; case Constants.MarkGrounded: AirCraftDetails groundedAirCraftInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <AirCraftDetails>(o365CardQuery.Body); await MarkGroundedAirCraft(groundedAirCraftInfo, replyActivity); break; case Constants.Available: AirCraftDetails freeAirCraftInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <AirCraftDetails>(o365CardQuery.Body); await MarkFreeAirCraft(freeAirCraftInfo, replyActivity); break; default: break; } var lastMessageId = context.ConversationData.GetValueOrDefault <string>(actionInfo.ActionId); if (lastMessageId == null && privateStorage.ContainsKey(actionInfo.ActionId)) { lastMessageId = privateStorage[actionInfo.ActionId]; } if (!string.IsNullOrEmpty(lastMessageId)) { // Update existing item. await connectorClient.Conversations.UpdateActivityAsync(replyActivity.Conversation.Id, lastMessageId, replyActivity); context.ConversationData.RemoveValue(actionInfo.ActionId); //if (privateStorage.ContainsKey(Actionid)) // privateStorage.Remove(Actionid); } else { await connectorClient.Conversations.SendToConversationAsync(replyActivity); } }
/// <summary> /// POST: api/Messages /// Receive a message from a user and reply to it /// </summary> public async Task <HttpResponseMessage> Post([FromBody] Activity activity) { if (activity.Type == ActivityTypes.Message) { await Conversation.SendAsync(activity, () => new Dialogs.RootDialog()); } else if (activity.Type == ActivityTypes.Invoke) { // ComposeExtension query if (activity.IsComposeExtensionQuery()) { // TODO: Handle your compose extension request ComposeExtensionResponse invokeResponse = new ComposeExtensionResponse() { ComposeExtension = new ComposeExtensionResult() }; return(Request.CreateResponse(HttpStatusCode.OK, invokeResponse)); } //Actionable Message else if (activity.IsO365ConnectorCardActionQuery()) { // TODO: Handle your actionable message here var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); O365ConnectorCardActionQuery o365CardQuery = activity.GetO365ConnectorCardActionQueryData(); Activity replyActivity = activity.CreateReply(); replyActivity.TextFormat = "xml"; replyActivity.Text = $@" <h2>Thanks, {activity.From.Name}</h2><br/> <h3>Your input action ID:</h3><br/> <pre>{o365CardQuery.ActionId}</pre><br/> <h3>Your input body:</h3><br/> <pre>{o365CardQuery.Body}</pre>"; await connectorClient.Conversations.ReplyToActivityWithRetriesAsync(replyActivity); return(Request.CreateResponse(HttpStatusCode.OK)); } // PopUp SignIn else if (activity.Name == "signin/verifyState") { // TODO: Handle your PopUp SignIn request var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl)); Activity replyActivity = activity.CreateReply(); replyActivity.Text = $@"Authentication Successful"; await connectorClient.Conversations.ReplyToActivityWithRetriesAsync(replyActivity); return(Request.CreateResponse(HttpStatusCode.OK)); } // Handle other invoke requests else { // Parse the invoke value and change the message activity as well - useful if you've got action buttons which postback return(Request.CreateResponse(HttpStatusCode.OK)); } } else { HandleSystemMessage(activity); } var response = Request.CreateResponse(HttpStatusCode.OK); return(response); }