Пример #1
0
        public static async Task HandleOpenCommand(IDialogContext context)
        {
            var openPositions = new OpenPositionsDataController().ListOpenPositions(5);

            IMessageActivity reply = context.MakeMessage();

            reply.Attachments = new List <Attachment>();
            reply.Text        = $"Hi {context.Activity.From.Name}! You have {openPositions.Count} active postings right now:";

            foreach (OpenPosition position in openPositions)
            {
                ThumbnailCard card = CardHelper.CreateCardForPosition(position);
                reply.Attachments.Add(card.ToAttachment());
            }

            ThumbnailCard buttonsCard = new ThumbnailCard();

            buttonsCard.Buttons = new List <CardAction>()
            {
                new CardAction("openUrl", "View details", null, "https://www.microsoft.com"),
                new CardAction("messageBack", "Add new job posting", null, null, $"new job posting", "New job posting")
            };
            reply.Attachments.Add(buttonsCard.ToAttachment());
            await context.PostAsync(reply);
        }
Пример #2
0
        private async Task HandleSubmitAction(IDialogContext context, Activity activity)
        {
            JObject parameters = activity.Value as JObject;

            if (parameters != null)
            {
                if (parameters["command"].ToString() == "createPosting")
                {
                    // Confirmation of job posting message.
                    OpenPosition pos = new OpenPositionsDataController().CreatePosition(parameters["jobTitle"].ToString(), int.Parse(parameters["jobLevel"].ToString()),
                                                                                        Constants.Locations[int.Parse(parameters["jobLocation"].ToString())], activity.From.Name);

                    await SendNewPostingConfirmationMessage(context, pos);
                }
            }
            else if (activity.Attachments.Any())
            {
                // Handle file upload scenario.
                if (activity.Attachments[0].ContentType == "application/vnd.microsoft.teams.file.download.info")
                {
                    string fileName = activity.Attachments[0].Name;
                    string fileType = (activity.Attachments[0].Content as JObject)["fileType"].ToString().ToLower();

                    if (fileType.Contains("docx"))
                    {
                        await context.PostAsync($"Job posting successfully uploaded: {fileName}");
                    }
                    else
                    {
                        await context.PostAsync("Invalid file type received. Please upload a PDF or Word document");
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Handles non-message activities
        /// </summary>
        /// <param name="context"></param>
        /// <param name="activity"></param>
        /// <returns></returns>
        private async Task HandleSubmitAction(IDialogContext context, Activity activity)
        {
            JObject parameters = activity.Value as JObject;

            if (parameters != null)
            {
                var command = parameters["command"];

                // Handle login completion event.
                if (activity.IsTeamsVerificationInvoke())
                {
                    string code = parameters["state"].ToString();

                    var oauthClient = activity.GetOAuthClient();
                    var token       = await oauthClient.OAuthApi.GetUserTokenAsync(activity.From.Id, ConnectionName, magicCode : code).ConfigureAwait(false);

                    if (token != null)
                    {
                        Microsoft.Graph.User current = await new GraphUtil(token.Token).GetMe();
                        await context.PostAsync($"Success! You are now signed in as {current.DisplayName} with {current.Mail}");
                    }
                }
                // Confirmation of job posting message.
                else if (command != null && command.ToString() == "createPosting")
                {
                    OpenPosition pos = new OpenPositionsDataController().CreatePosition(parameters["jobTitle"].ToString(), int.Parse(parameters["jobLevel"].ToString()),
                                                                                        Constants.Locations[int.Parse(parameters["jobLocation"].ToString())], activity.From.Name);

                    await SendNewPostingConfirmationMessage(context, pos);
                }
            }
            else if (activity.Attachments.Any())
            {
                // Handle file upload scenario.
                if (activity.Attachments[0].ContentType == "application/vnd.microsoft.teams.file.download.info")
                {
                    string fileName = activity.Attachments[0].Name;
                    string fileType = (activity.Attachments[0].Content as JObject)["fileType"].ToString().ToLower();

                    if (fileType.Contains("docx"))
                    {
                        await context.PostAsync($"Job posting successfully uploaded: {fileName}");
                    }
                    else
                    {
                        await context.PostAsync("Invalid file type received. Please upload a PDF or Word document");
                    }
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Helper method to generate a the messaging extension response.
        ///
        /// Note that for this sample, we are returning generated positions for illustration purposes only.
        /// </summary>
        /// <returns></returns>
        public ComposeExtensionResponse CreateResponse()
        {
            ComposeExtensionResponse response = null;

            var     query = activity.GetComposeExtensionQueryData();
            JObject data  = activity.Value as JObject;

            // Check if this is a task module invocation.
            if (data != null && data["type"] != null)
            {
                // Handle other types of Invoke activities here, e.g. CardActions
                if (data["type"].ToString() == TaskModuleCommandType && data["command"].ToString() == CreatePostingCommand)
                {
                    response = CreateTaskModuleResponse();
                }
            }
            else
            {
                //Check to make sure a query was actually made:
                if (query.CommandId == null || query.Parameters == null)
                {
                    return(null);
                }
                else if (query.Parameters.Count > 0)
                {
                    // query.Parameters has the parameters sent by client
                    var results = new ComposeExtensionResult()
                    {
                        AttachmentLayout = "list",
                        Type             = "result",
                        Attachments      = new List <ComposeExtensionAttachment>(),
                    };

                    if (query.CommandId == "searchPositions")
                    {
                        OpenPositionsDataController controller = new OpenPositionsDataController();
                        IEnumerable <OpenPosition>  positions;

                        if (query.Parameters[0].Name == "initialRun")
                        {
                            // Default query => list all
                            positions = controller.ListOpenPositions(10);
                        }
                        else
                        {
                            // Basic search.
                            string title = query.Parameters[0].Value.ToString().ToLower();
                            positions = controller.ListOpenPositions(10).Where(x => x.Title.ToLower().Contains(title));
                        }

                        // Generate cards for the response.
                        foreach (OpenPosition pos in positions)
                        {
                            var card = CardHelper.CreateCardForPosition(pos, true);

                            var composeExtensionAttachment = card.ToAttachment().ToComposeExtensionAttachment();
                            results.Attachments.Add(composeExtensionAttachment);
                        }
                    }
                    else if (query.CommandId == "searchCandidates")
                    {
                        string name = query.Parameters[0].Value.ToString();
                        CandidatesDataController controller = new CandidatesDataController();

                        foreach (Candidate c in controller.GetTopCandidates("ABCD1234"))
                        {
                            c.Name = c.Name.Split(' ')[0] + " " + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(name);
                            var card = CardHelper.CreateSummaryCardForCandidate(c);

                            var composeExtensionAttachment = card.ToAttachment().ToComposeExtensionAttachment(CardHelper.CreatePreviewCardForCandidate(c).ToAttachment());
                            results.Attachments.Add(composeExtensionAttachment);
                        }
                    }

                    response = new ComposeExtensionResponse()
                    {
                        ComposeExtension = results
                    };
                }
            }
            return(response);
        }