Esempio n. 1
0
        private void SendProactiveMessages(ITurnContext turnContext)
        {
            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                lock (obj) // Needed to avoid concurrency issues
                {
                    JobLog jobLog = _jobLogPropertyAccessor.GetAsync(turnContext, () => new JobLog())
                                    .GetAwaiter()
                                    .GetResult();

                    if (!proactiveMessageSent)
                    {
                        JobLog.JobData job = CreateJob(turnContext, jobLog);

                        _jobLogPropertyAccessor.SetAsync(turnContext, jobLog)
                        .GetAwaiter()
                        .GetResult();

                        foreach (var jobInfo in jobLog)
                        {
                            turnContext.Adapter.ContinueConversationAsync(
                                AppId,
                                jobInfo.Value.Conversation,
                                CreateCallback(jobInfo.Value),
                                default(CancellationToken));
                        }

                        proactiveMessageSent = true;
                    }
                }
            }
        }
Esempio n. 2
0
        // Creates and "starts" a new job.
        private JobLog.JobData CreateJob(ITurnContext turnContext, JobLog jobLog)
        {
            JobLog.JobData jobInfo = new JobLog.JobData
            {
                TimeStamp    = DateTime.Now.ToBinary(),
                Conversation = turnContext.Activity.GetConversationReference(),
            };

            jobLog[jobInfo.TimeStamp] = jobInfo;

            return(jobInfo);
        }
Esempio n. 3
0
        public async Task <string> StartJob(ITurnContext turnContext)
        {
            // Get the job log.
            JobLog jobLog = await GetJobLog(turnContext);

            // Start a virtual job for the user.
            JobLog.JobData job = CreateJob(turnContext, jobLog);

            // Set the new property
            await _jobLogPropertyAccessor.SetAsync(turnContext, jobLog);

            // Now save it into the JobState
            await _jobState.SaveChangesAsync(turnContext);

            await turnContext.SendActivityAsync(
                $"We're starting job {job.TimeStamp} for you. We'll notify you when it's complete.");

            return(job.Conversation.Conversation.Id);
        }
Esempio n. 4
0
        private BotCallbackHandler CreateCallback(JobLog.JobData jobInfo)
        => async(turnContext, token) =>
        {
            Thread.Sleep(20000);

            using (var httpClient = new HttpClient())
            {
                var responseString = await httpClient.GetStringAsync(new Uri("https://hiddengemsapi.azurewebsites.net/api/benefits/bob")).ConfigureAwait(false);

                var response    = JsonConvert.DeserializeObject <BenefitResponse>(responseString);
                var topBenefits = response
                                  .Benefits
                                  .OrderByDescending(b => b.Relevance)
                                  .Take(5)
                                  .ToList();

                await turnContext.SendActivityAsync($"JUST A QUICK REMINDER! Don't forget to use your benefits, here is the top 5 of your benefits:");

                foreach (var item in topBenefits)
                {
                    await turnContext.SendActivityAsync($"{item.Name} | {item.Category} | {item.Description}");
                }
            }
        };