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; } } } }
// 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); }
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); }
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}"); } } };