public async Task Handle(Activity activity, IUrlHelper urlHelper) { var editForm = GetEditForm(activity); var offset = activity.GetOffset(); var date = DateTimeOffset.Parse(editForm.PlannedDrawTimeLocalDate); var time = DateTimeOffset.Parse(editForm.PlannedDrawTimeLocalTime); var plannedDrawTime = new DateTimeOffset(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second, 0, offset).ToUniversalTime(); var channelData = activity.GetChannelData <TeamsChannelData>(); var isGroupChat = channelData.Channel == null; var teamId = isGroupChat ? string.Empty : channelData.Team.Id; var channelId = isGroupChat ? activity.Conversation.Id : channelData.Channel.Id; var competition = await _competitionService.CreateActiveCompetition( activity.ServiceUrl, Guid.Parse(channelData.Tenant.Id), teamId, channelId, plannedDrawTime, activity.Locale, offset.TotalHours, editForm.Gift, editForm.GiftImageUrl, int.Parse(editForm.WinnerCount), activity.From.Name, activity.From.AadObjectId); var mainActivity = _activityBuilder.CreateMainActivity(competition); using (var botClient = _botClientFactory.CreateBotClient(activity.ServiceUrl)) { var mainMessage = await botClient.SendToConversationAsync(mainActivity); await _competitionService.UpdateMainActivity(competition.Id, mainMessage.Id); } await _timerService.AddScheduledHttpRequest( competition.PlannedDrawTime, "POST", urlHelper.Action(nameof(CompetitionsController.DrawForCompetition), "Competitions", new { competitionId = competition.Id })); }