private async Task <ScheduledMessageDetails> CreateMessageDetailsAsync(Activity activity) { ScheduledMessageDetails scheduledMessageDetails = new ScheduledMessageDetails { FromId = activity.Recipient.Id, FromName = activity.Recipient.Name, RecipientId = activity.From.Id, RecipientName = activity.From.Name, ChannelId = activity.ChannelId, ConversationId = activity.Conversation.Id, Locale = activity.Locale, TimeZoneOffset = activity.LocalTimestamp?.Offset }; ServiceUrl serviceUrl = await GetOrCreateServiceUrlAsync(activity); scheduledMessageDetails.DetailsServiceUrls = new List <ScheduledMessageDetailsServiceUrl> { new ScheduledMessageDetailsServiceUrl { Details = scheduledMessageDetails, ServiceUrl = serviceUrl } }; return(scheduledMessageDetails); }
private static string GetLastServiceUrl(ScheduledMessageDetails messageDetails) { return(messageDetails .DetailsServiceUrls .Select(detailsServiceUrl => detailsServiceUrl.ServiceUrl) .OrderByDescending(serviceUrl => serviceUrl.CreatedOn) .First() .Address); }
private ScheduledMessageModel CreateScheduledMessageModel(ScheduledMessageDetails scheduledMessageDetails) { ScheduledMessage scheduledMessage = scheduledMessageDetails.ScheduledMessage; return(new ScheduledMessageModel { Id = scheduledMessageDetails.ScheduledMessageId, Text = scheduledMessage.Text, State = scheduledMessage.State, Locale = scheduledMessageDetails.Locale, NextOccurrences = GetNextOccurrences(scheduledMessageDetails, NextOccurrenceCount) }); }
private static Activity CreateBotMessageActivity(ScheduledMessage scheduledMessage) { ScheduledMessageDetails details = scheduledMessage.Details; Activity activity = (Activity)Activity.CreateMessageActivity(); activity.ServiceUrl = GetLastServiceUrl(details); activity.From = new ChannelAccount(details.FromId, details.FromName); activity.Recipient = new ChannelAccount(details.RecipientId, details.RecipientName); activity.ChannelId = details.ChannelId; activity.Conversation = new ConversationAccount(id: details.ConversationId); activity.Locale = details.Locale; activity.Text = scheduledMessage.Text; return(activity); }
private async Task <ScheduledMessage> CreateScheduledMessageAsync(Activity activity, string text, ISchedule schedule) { ScheduledMessageEvent scheduledMessageEvent = CreateMessageEvent(schedule); ScheduledMessageDetails scheduledMessageDetails = await CreateMessageDetailsAsync(activity); return(new ScheduledMessage { Text = text, Schedule = schedule.Text, State = ScheduledMessageState.Active, Details = scheduledMessageDetails, Events = new List <ScheduledMessageEvent> { scheduledMessageEvent } }); }
private IList <DateTime> GetNextOccurrences(ScheduledMessageDetails scheduledMessageDetails, int count) { IList <DateTime> nextOccurrences = null; ScheduledMessage scheduledMessage = scheduledMessageDetails.ScheduledMessage; bool hasPendingEvents = scheduledMessage .Events .Any(@event => @event.State == ScheduledMessageEventState.Pending); if (hasPendingEvents) { ISchedule schedule = scheduleParser.Parse(scheduledMessage.Schedule, scheduledMessageDetails.TimeZoneOffset); nextOccurrences = schedule .GetNextOccurrences(DateTime.UtcNow, DateTime.MaxValue) .Take(count) .ToList(); } return(nextOccurrences ?? new DateTime[0]); }