Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 5
0
        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]);
        }