private async Task <DialogTurnResult> PromptForProjectCollectionAndProjectName(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var cardText = await CardProvider.GetCardText("ProjectInformationCard").ConfigureAwait(false); var replyActivity = JsonConvert.DeserializeObject <Activity>(cardText); return(await stepContext.PromptAsync(nameof(ActivityInfoPrompt), new PromptOptions { Prompt = replyActivity }, cancellationToken)); }
private async Task <DialogTurnResult> PromptStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { // Reply to the activity we received with an activity. var cardText = await CardProvider.GetCardText("WelcomeCard").ConfigureAwait(false); var replyActivity = JsonConvert.DeserializeObject <Activity>(cardText); replyActivity.Attachments.Add(GetSignInCard(stepContext.Context.Activity).ToAttachment()); await stepContext.Context.SendActivityAsync(replyActivity, cancellationToken).ConfigureAwait(false); return(await stepContext.BeginDialogAsync(nameof(ConfirmPrompt), new PromptOptions { Prompt = MessageFactory.Text("Did you have a successful login?") }, cancellationToken)); }
private async Task <DialogTurnResult> PromptForWorkItemDetails(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var workItemInput = await workItemInputAccessor.GetAsync(stepContext.Context, cancellationToken : cancellationToken).ConfigureAwait(false); var activity = stepContext.Result as Activity; var replaceInfo = new Dictionary <string, string>(); replaceInfo.Add("{{workitemType}}", workItemInput.WorkItemType.ToString()); var cardText = await CardProvider.GetCardText("CreateWorkItemCard", replaceInfo).ConfigureAwait(false); var replyActivity = JsonConvert.DeserializeObject <Activity>(cardText); return(await stepContext.PromptAsync(nameof(ActivityInfoPrompt), new PromptOptions { Prompt = replyActivity }, cancellationToken)); }
public static async Task NotifySubscribers(UserScubaData userScubaData, BotAdapter adapter, MicrosoftAppCredentials workingCredentials, ConversationReference reserverReference = null) { if (reserverReference != null) { var scubaReservation = new Tuple <ConversationReference, UserScubaData>(reserverReference, userScubaData); _recentReservations.AddOrUpdate(reserverReference.User.Id, scubaReservation, (key, oldValue) => scubaReservation); //todo: this should not be a hard coded url userScubaData.ChatWithUserUrl = "https://contososcubademo.azurewebsites.net?chatWithId=" + reserverReference.User.Id; //chatWithUserIdUrl = "Use this URL to chat with them: http://localhost:3979?chatWithId=" + reserverReference.User.Id; } string message = $"New scuba booking for {userScubaData.PersonalInfo.Name}"; var replaceInfo = new Dictionary <string, string>(); replaceInfo.Add("{{destination}}", userScubaData.Destination); replaceInfo.Add("{{school}}", userScubaData.School); replaceInfo.Add("{{longdate}}", Convert.ToDateTime(userScubaData.Date).ToString("dddd, MMMM dd")); replaceInfo.Add("{{number_of_people}}", userScubaData.NumberOfPeople); replaceInfo.Add("{{phone}}", userScubaData.PersonalInfo.Phone); replaceInfo.Add("{{email}}", userScubaData.PersonalInfo.Email); replaceInfo.Add("{{name}}", userScubaData.PersonalInfo.Name); replaceInfo.Add("{{protein_preference}}", userScubaData.MealOptions.ProteinPreference); replaceInfo.Add("{{vegan}}", userScubaData.MealOptions.Vegan ? "Yes" : "No"); replaceInfo.Add("{{allergy}}", userScubaData.MealOptions.Alergy); if (!string.IsNullOrEmpty(userScubaData.ChatWithUserUrl)) { replaceInfo.Add("{{url}}", userScubaData.ChatWithUserUrl); } var subscriberCardText = await CardProvider.GetCardText("SubscriberNotification", replaceInfo); var conversationCallback = GetConversationCallback(message, workingCredentials, subscriberCardText); await SendActionableMessage(userScubaData); foreach (var subscriber in _reservationSubscribers.Values) { await adapter.ContinueConversation(subscriber.Bot.Id, subscriber, conversationCallback); } }
private async Task <DialogTurnResult> FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { if (stepContext.Result == null || !(stepContext.Result is Activity)) { return(await stepContext.EndDialogAsync(null, cancellationToken)); } var workItemInput = await workItemInputAccessor.GetAsync(stepContext.Context, cancellationToken : cancellationToken).ConfigureAwait(false); try { var authenticatedProfile = await this.authHelper.GetAuthenticatedProfileAsync(stepContext.Context, cancellationToken).ConfigureAwait(false); var activity = stepContext.Result as Activity; var workItemInfo = JObject.Parse(activity.Value.ToString()); var fieldToValueMappings = GetFieldToValueMappings(workItemInfo["WorkItemTitle"].ToString(), workItemInfo["WorkItemDescription"].ToString(), workItemInfo["Priority"].ToString(), workItemInfo["AreaPath"].ToString(), workItemInfo["IterationPath"].ToString()); WorkItem workItem = await vsoApiController.CreateWorkItemAsync(workItemInput.ProjectCollection, workItemInput.ProjectName, fieldToValueMappings, workItemInput.WorkItemType, authenticatedProfile.Token.AccessToken).ConfigureAwait(false); if (workItem == null) { this.logger.LogError($"Error while creating the {workItemInput.WorkItemType}"); await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Sorry something went wrong when creating {workItemInput.WorkItemType}."), cancellationToken); return(await stepContext.EndDialogAsync(null, cancellationToken)); } var replaceInfo = new Dictionary <string, string>(); replaceInfo.Add("{{workitemId}}", workItem.Id.ToString()); replaceInfo.Add("{{workitemUrl}}", $"https://{workItemInput.ProjectCollection}.visualstudio.com/{workItemInput.ProjectName}/_workitems/edit/{workItem.Id}"); if (workItem.Fields.Count == 0) { this.logger.LogWarning($"Work item details are miising for {workItem.Id}"); } if (workItem.Fields.TryGetValue("System.WorkItemType", out object workItemType)) { replaceInfo.Add("{{workitemType}}", workItemType.ToString()); } if (workItem.Fields.TryGetValue("System.Title", out object title)) { replaceInfo.Add("{{workitemTitle}}", title.ToString()); } if (workItem.Fields.TryGetValue("System.State", out object status)) { replaceInfo.Add("{{workitemStatus}}", status.ToString()); } if (workItem.Fields.TryGetValue("System.ChangedDate", out object lastUpdatedDate)) { replaceInfo.Add("{{lastUpdated}}", lastUpdatedDate.ToString()); } var cardText = await CardProvider.GetCardText("WorkItemDetailsCard", replaceInfo).ConfigureAwait(false); var replyActivity = JsonConvert.DeserializeObject <Activity>(cardText); replyActivity.Text = $"Created {workItemInput.WorkItemType} successfully"; await stepContext.Context.SendActivityAsync(replyActivity, cancellationToken); return(await stepContext.EndDialogAsync(workItemInput, cancellationToken)); } catch (Exception) { await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Sorry something went wrong when creating {workItemInput.WorkItemType}."), cancellationToken); return(await stepContext.EndDialogAsync(null, cancellationToken)); } }
private async Task <DialogTurnResult> FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { if (stepContext.Result == null || !(stepContext.Result is Activity) || !(stepContext.Options is RecognizerResult)) { return(await stepContext.EndDialogAsync(null, cancellationToken)); } var recognizerResult = (RecognizerResult)stepContext.Options; // We need to get the result from the LUIS JSON which at every level returns an array. WorkItemInput workItemInput = new WorkItemInput(); Match match = Regex.Match(recognizerResult.Entities["id"].ToString(), @"(\d+)"); if (match.Success) { workItemInput.WorkItemId = match.Groups[1].Value; } try { var authenticatedProfile = await this.authHelper.GetAuthenticatedProfileAsync(stepContext.Context, cancellationToken).ConfigureAwait(false); var activity = stepContext.Result as Activity; var projectInfo = JObject.Parse(activity.Value.ToString()); WorkItem workItem = await vsoApiController.GetWorkItemAsync(workItemInput.WorkItemId, projectInfo["ProjectCollection"].ToString(), projectInfo["ProjectName"].ToString(), authenticatedProfile.Token.AccessToken).ConfigureAwait(false); var replaceInfo = new Dictionary <string, string>(); replaceInfo.Add("{{workitemId}}", workItem.Id.ToString()); replaceInfo.Add("{{workitemUrl}}", $"https://{projectInfo["ProjectCollection"].ToString()}.visualstudio.com/{projectInfo["ProjectName"].ToString()}/_workitems/edit/{workItemInput.WorkItemId}"); if (workItem.Fields.Count == 0) { this.logger.LogWarning($"Work item details are miising for {workItem.Id}"); } if (workItem.Fields.TryGetValue("System.Title", out object title)) { replaceInfo.Add("{{workitemTitle}}", title.ToString()); } if (workItem.Fields.TryGetValue("System.WorkItemType", out object workItemType)) { replaceInfo.Add("{{workitemType}}", workItemType.ToString()); } if (workItem.Fields.TryGetValue("System.State", out object status)) { replaceInfo.Add("{{workitemStatus}}", status.ToString()); } if (workItem.Fields.TryGetValue("System.ChangedDate", out object lastUpdatedDate)) { replaceInfo.Add("{{lastUpdated}}", lastUpdatedDate.ToString()); } var cardText = await CardProvider.GetCardText("WorkItemDetailsCard", replaceInfo).ConfigureAwait(false); var replyActivity = JsonConvert.DeserializeObject <Activity>(cardText); await stepContext.Context.SendActivityAsync(replyActivity, cancellationToken); return(await stepContext.EndDialogAsync(workItemInput, cancellationToken)); } catch (Exception) { await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Sorry something went wrong when fetching {workItemInput.WorkItemId}."), cancellationToken); return(await stepContext.EndDialogAsync(null, cancellationToken)); } }