public static async Task CallServiceBusAsync( [ServiceBusTrigger("communication", "call", Connection = "AzureWebJobsServiceBus")] SmsMessage msg, [TwilioCall(AccountSidSetting = "TwilioSid", AuthTokenSetting = "TwilioToken", From = "+1 203-347-4577")] IAsyncCollector <CreateCallOptions> options, [Inject] IHostUriService hostUriService) { var from = new PhoneNumber("+1 203-347-4577"); var to = new PhoneNumber(msg.PhoneNumber); var hostName2 = hostUriService.GetHostUri(); var uriBuilder = new UriBuilder(hostName2) { Path = "/api/twilio", }; uriBuilder.AddQuery(new NameValueCollection() { ["code"] = msg.Message, ["culture"] = msg.CultureInfo.ToString() }); var call = new CreateCallOptions(to, from) { Url = uriBuilder.Uri, MachineDetection = "Enable" }; await options.AddAsync(call); }
private static string BuildUserImage(long id, string image, string name, IHostUriService hostUriService) { var uri = hostUriService.GetHostUri(); var uriBuilderImage = new UriBuilder(uri) { Path = $"api/image/user/{id}/{image ?? name}" }; var userImageNvc = new NameValueCollection() { ["width"] = "34", ["height"] = "34", ["mode"] = "crop" }; uriBuilderImage.AddQuery(userImageNvc); return(uriBuilderImage.ToString()); }
public static async Task SendEmail( [ActivityTrigger] UpdateUserEmailDto user, [SendGrid(ApiKey = "SendgridKey", From = "Spitball <*****@*****.**>")] IAsyncCollector <SendGridMessage> emailProvider, [Inject] IQueryBus queryBus, [Inject] IUrlBuilder urlBuilder, [Inject] IDataProtectionService dataProtectService, [Inject] IHostUriService hostUriService, CancellationToken token) { var code = dataProtectService.ProtectData(user.UserId.ToString(), DateTimeOffset.UtcNow.AddDays(3)); var uri = hostUriService.GetHostUri(); var questionNvc = new NameValueCollection() { ["width"] = "86", ["height"] = "96", ["mode"] = "crop" }; var q = new GetUpdatesEmailByUserQuery(user.UserId, user.Since); var result = (await queryBus.QueryAsync(q, token)).ToList(); if (result.Count == 0) { return; } var courses = result.GroupBy(g => g.Course).Take(3).Select(s => { var emailUpdates = s.Take(4).ToList(); return(new Course() { Name = s.Key, Url = urlBuilder.BuildCourseEndPoint(s.Key), NeedMore = emailUpdates.Count == 4, Documents = emailUpdates.OfType <DocumentUpdateEmailDto>().Select(document => { var uriBuilder = new UriBuilder(uri) { Path = $"api/image/document/{document.Id}", }; uriBuilder.AddQuery(questionNvc); return new Document() { Url = urlBuilder.BuildDocumentEndPoint(document.Id, new { token = code }), Name = document.Name, UserName = document.UserName, DocumentPreview = uriBuilder.ToString(), UserImage = BuildUserImage(document.UserId, document.UserImage, document.UserName, hostUriService) }; }), Questions = emailUpdates.OfType <QuestionUpdateEmailDto>().Select(question => new Question() { QuestionUrl = urlBuilder.BuildQuestionEndPoint(question.QuestionId, new { token = code }), QuestionText = question.QuestionText, UserImage = BuildUserImage(question.UserId, question.UserImage, question.UserName, hostUriService), UserName = question.UserName, AnswerText = question.AnswerText }) }); }); var templateData = new UpdateEmail(user.UserName, user.ToEmailAddress, user.Language.TextInfo.IsRightToLeft) { DocumentCountUpdate = result.OfType <DocumentUpdateEmailDto>().Count(), QuestionCountUpdate = result.OfType <QuestionUpdateEmailDto>().Count(), Courses = courses }; var message = new SendGridMessage { Asm = new ASM { GroupId = UnsubscribeGroup.Update }, TemplateId = Equals(user.Language, Language.Hebrew.Info) ? HebrewTemplateId : EnglishTemplateId }; templateData.To = user.ToEmailAddress; var personalization = new Personalization { TemplateData = templateData }; message.Personalizations = new List <Personalization>() { personalization }; message.AddCategory("updates"); message.TrackingSettings = new TrackingSettings { Ganalytics = new Ganalytics { UtmCampaign = "updates", UtmSource = "SendGrid", UtmMedium = "Email", Enable = true } }; message.AddTo(user.ToEmailAddress); await emailProvider.AddAsync(message, token); await emailProvider.FlushAsync(token); }