public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "whatsapp/inbound")] HttpRequest req, ILogger log) { try { log.LogInformation("C# HTTP trigger function processed a request."); string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); Whatsapp_Inbound_Sinch Whatsapp_inbound_sinch = JsonConvert.DeserializeObject <Whatsapp_Inbound_Sinch>(requestBody); if (Whatsapp_inbound_sinch == null) { log.LogInformation("err : Whatsapp_inbound_sinch not found"); return(new BadRequestObjectResult("Whatsapp_inbound_sinch not found")); } if (Whatsapp_inbound_sinch.Statuses != null) { log.LogInformation("err : Whatsapp_inbound_sinch delivery report"); return(new OkObjectResult("Whatsapp_inbound_sinch delivery report")); } //if (Whatsapp_inbound_sinch.Contacts == null) //{ // log.LogInformation("err : Whatsapp_inbound_sinch contact not found"); // return new BadRequestObjectResult("Whatsapp_inbound_sinch contact not found"); //} if (Whatsapp_inbound_sinch.Notifications == null) { log.LogInformation("err : Whatsapp_inbound_sinch notification not found"); return(new BadRequestObjectResult("Whatsapp_inbound_sinch notification not found")); } //if (Whatsapp_inbound_sinch.Contacts?.Length != Whatsapp_inbound_sinch.Notifications?.Length) //{ // log.LogInformation("err : Whatsapp_inbound_sinch contact and notification array length not same"); // return new BadRequestObjectResult("Whatsapp_inbound_sinch contact and notification array length not same"); //} List <string> successMessageIdList = new List <string>(); for (int i = 0; i < Whatsapp_inbound_sinch.Notifications?.Length; i++) { Dictionary <string, string> botIdMap = new Dictionary <string, string>(); botIdMap.Add("0e2492a8-9a00-4a53-80a3-962e499a69e8", "6597673663"); string botId = Whatsapp_inbound_sinch.Notifications[i]?.To ?? string.Empty; var WaAccount = _context.ContestRouter_WA_Accounts.FirstOrDefault(s => s.WhatsappID == botId); string inboundNumber = WaAccount?.WhatsappNumber ?? string.Empty; string entryText = string.Empty; if (Whatsapp_inbound_sinch.Notifications[i]?.Inbound_sinch_message?.Type == "text") { entryText = Whatsapp_inbound_sinch.Notifications[i]?.Inbound_sinch_message?.Body ?? string.Empty; } else if (Whatsapp_inbound_sinch.Notifications[i]?.Inbound_sinch_message?.Type == "image") { entryText = Whatsapp_inbound_sinch.Notifications[i]?.Inbound_sinch_message?.Caption ?? string.Empty; } string keyword = entryText.IndexOf(" ") > -1 ? entryText.Substring(0, entryText.IndexOf(" ")) : entryText; //get contest router ContestRouter_Contest Contest_router = _context.ContestRouter_Contests. FirstOrDefault(x => x.IsActive && x.ContestNumber == inboundNumber && x.Keyword == keyword); if (Contest_router == null) { log.LogInformation("err : Contest not found"); return(new BadRequestObjectResult("Contest not found")); } //save to db ContestRouter_WA_Inbound Whatsapp_inbound = new ContestRouter_WA_Inbound { ContestId = Contest_router?.ContestId, CreatedOn = DateTime.UtcNow, ContactName = Whatsapp_inbound_sinch?.Contacts?[i]?.Profile.Name ?? string.Empty, ContactWaId = Whatsapp_inbound_sinch?.Contacts?[i]?.WaId ?? string.Empty, NotificationFrom = Whatsapp_inbound_sinch?.Notifications?[i]?.From ?? string.Empty, NotificationTo = inboundNumber ?? string.Empty, NotificationMessageId = Whatsapp_inbound_sinch?.Notifications?[i]?.MessageId ?? string.Empty, NotificationMessageType = Whatsapp_inbound_sinch?.Notifications?[i]?.Inbound_sinch_message?.Type ?? string.Empty, NotificationMessageBody = Whatsapp_inbound_sinch?.Notifications?[i]?.Inbound_sinch_message?.Body ?? string.Empty, NotificationMessageDetails = Whatsapp_inbound_sinch?.Notifications?[i]?.Inbound_sinch_message?.Details ?? string.Empty, NotificationMessageUrl = Whatsapp_inbound_sinch?.Notifications?[i]?.Inbound_sinch_message?.Url ?? string.Empty, NotificationMessageMimeType = Whatsapp_inbound_sinch?.Notifications?[i]?.Inbound_sinch_message?.MimeType ?? string.Empty, NotificationMessageCaption = Whatsapp_inbound_sinch?.Notifications?[i]?.Inbound_sinch_message?.Caption ?? string.Empty, NotificationTimestamp = Whatsapp_inbound_sinch?.Notifications?[i]?.Timestamp }; _context.ContestRouter_WA_Inbounds.Add(Whatsapp_inbound); //call inbound url using (var httpClient = new HttpClient()) { using (var request = new HttpRequestMessage(new HttpMethod("POST"), Contest_router?.ContestInboundUrl)) { request.Headers.TryAddWithoutValidation("Accept", "application/json"); //request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {bearerTokenValue}"); Inbound_Webapp Inbound_webapp = new Inbound_Webapp { CreatedOn = Whatsapp_inbound_sinch?.Notifications?[i]?.Timestamp, MobileNo = Whatsapp_inbound_sinch?.Notifications?[i]?.From ?? string.Empty, Message = entryText, FileLink = Whatsapp_inbound_sinch?.Notifications?[i]?.Inbound_sinch_message?.Url ?? string.Empty, EntrySource = Contest_router?.ContestType }; string inboundWebapp = JsonConvert.SerializeObject(Inbound_webapp); request.Content = new StringContent(inboundWebapp, Encoding.UTF8, "application/json"); var result = await httpClient.SendAsync(request); string response = await result.Content.ReadAsStringAsync(); if (result.IsSuccessStatusCode) { //implement logging here } else { log.LogInformation("err: failed to call webapp" + inboundWebapp); successMessageIdList.Add("failed to call web app " + Whatsapp_inbound.NotificationMessageId); } } } if (_context.SaveChanges() < 1) { successMessageIdList.Add(Whatsapp_inbound.NotificationMessageId); } } if (successMessageIdList.Count == 0) { log.LogInformation("success save all inbound"); return(new OkObjectResult("success to save Whatsapp_inbound")); } else { log.LogInformation("failed to save Whatsapp_inbound " + string.Join(",", successMessageIdList)); return(new BadRequestObjectResult("failed to save Whatsapp_inbound " + string.Join(",", successMessageIdList))); } //return new OkObjectResult(responseMessage); } catch (Exception ex) { log.LogInformation("Exception : " + ex.Message); return(new BadRequestObjectResult("Exception : " + ex.Message)); } }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = "whatsapp/outbound")] HttpRequest req, ILogger log) { try { log.LogInformation("C# HTTP trigger function processed a request."); string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); Outbound_Webapp Outbound_webapp = JsonConvert.DeserializeObject <Outbound_Webapp>(requestBody); if (Outbound_webapp == null) { log.LogInformation("err : Whatsapp_outbound_smsdome not found"); return(new BadRequestObjectResult("Whatsapp_outbound_smsdome not found")); } if (Outbound_webapp.ContestId == 0) { log.LogInformation("err : Contest id not found"); return(new BadRequestObjectResult("Contest id not found")); } int contestId = Outbound_webapp.ContestId; //get contest router ContestRouter_Contest contestRouter = _context.ContestRouter_Contests. FirstOrDefault(x => x.IsActive && x.ContestId == contestId); if (contestRouter == null) { log.LogInformation("err : Contest not found"); return(new BadRequestObjectResult("Contest not found")); } string outboundNumber = contestRouter.ContestNumber ?? string.Empty; //validate campaign date //if(DateTime.UtcNow<contestRouter.StartDate || DateTime.UtcNow>contestRouter.EndDate) // return new BadRequestObjectResult("contest not in campaign period"); string KvUriTemplate = Environment.GetEnvironmentVariable("KvSecretURI") + Environment.GetEnvironmentVariable("KvPrefix") + outboundNumber; string endpointValue = await _helper.GetKeyVaultValue( KvUriTemplate + Environment.GetEnvironmentVariable("KvEndpointSuffix")); string botIdValue = await _helper.GetKeyVaultValue( KvUriTemplate + Environment.GetEnvironmentVariable("KvBotIdSuffix")); string bearerTokenValue = await _helper.GetKeyVaultValue( KvUriTemplate + Environment.GetEnvironmentVariable("KvBearerTokenSuffix")); string ApiVersionURI = Environment.GetEnvironmentVariable("ApiVersionURI"); var url = endpointValue + ApiVersionURI + botIdValue + "/messages"; log.LogInformation("url : " + url); using (var httpClient = new HttpClient()) { using (var request = new HttpRequestMessage(new HttpMethod("POST"), url)) { request.Headers.TryAddWithoutValidation("Accept", "application/json"); request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {bearerTokenValue}"); Whatsapp_Outbound_Sinch Whatsapp_outbound_sinch = new Whatsapp_Outbound_Sinch { To = new string[] { Outbound_webapp?.MobileNo }, Outbound_sinch_text_message = new Outbound_Sinch_Text_Message { Type = Outbound_webapp?.MessageType, Text = Outbound_webapp?.MessageText } }; string whatsappOutboundSinch = JsonConvert.SerializeObject(Whatsapp_outbound_sinch); request.Content = new StringContent(whatsappOutboundSinch, Encoding.UTF8, "application/json"); var result = await httpClient.SendAsync(request); string response = await result.Content.ReadAsStringAsync(); if (result.IsSuccessStatusCode) { //save to db ContestRouter_WA_Outbound Whatsapp_outbound = new ContestRouter_WA_Outbound { ContestId = Outbound_webapp?.ContestId, OutboundNumber = outboundNumber, CreatedOn = DateTime.UtcNow, Response = response, OutboundMessageType = Outbound_webapp?.MessageType ?? string.Empty, OutboundMessageText = Outbound_webapp?.MessageText ?? string.Empty, }; _context.ContestRouter_WA_Outbounds.Add(Whatsapp_outbound); if (_context.SaveChanges() > 0) { return(new OkObjectResult(response)); } else { log.LogInformation("err : failed to save Whatsapp_outbound"); return(new BadRequestObjectResult("failed to save Whatsapp_outbound")); } } else { log.LogInformation("err : " + response); return(new BadRequestObjectResult(response)); } } } //string responseMessage = string.IsNullOrEmpty(name) // ? endpointValue +", " + botIdValue +", " + bearerTokenValue + ", " // + JsonConvert.SerializeObject(whatsapp_outboundSmsdome) // + " This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response." // : $"Hello, {name}. This HTTP triggered function executed successfully."; //var postsArray = _context.ContestRouter_Contests.Where(x => x.InboundNumber == inboundNumber); //return new OkObjectResult(postsArray); //return new OkObjectResult(response); } catch (Exception ex) { return(new BadRequestObjectResult("Exception : " + ex.Message)); } }