public ActionResult Post([FromBody] MessengerData data) { _logger.LogInformation("Messenger data received"); //System.Console.WriteLine(JsonConvert.SerializeObject(data)); Task.Factory.StartNew(() => { foreach (var entry in data.entry) { foreach (var message in entry.messaging) { // Check current message if text is recognized and sets corresponding payload Messaging currentMessage = mhandler.MessageRecognized(message); if (currentMessage.postback != null) { phandler.handle(message); } else if (!string.IsNullOrWhiteSpace(currentMessage?.message?.quick_reply?.payload)) { //set the quick reply payload as the message payload currentMessage.postback = new Postback { payload = message.message.quick_reply.payload }; phandler.handle(message); } else if (currentMessage?.message?.attachments != null) { try { Attachment locationAtt = currentMessage?.message?.attachments[0]; Coordinates coords = locationAtt.payload?.coordinates; //Console.WriteLine($"Coordinates Received: {coords.lon} {coords.lat}"); string lang = TempUserData.Instance.GetLanguage(currentMessage.sender.id); if (string.IsNullOrWhiteSpace(lang)) { lang = ""; } if (!TempUserData.Instance.WantsToilet(message.sender.id)) { currentMessage.postback = new Postback { payload = $"DEVELOPER_DEFINED_COORDINATES°{coords.lon}:{coords.lat}°{lang}" }; //Console.WriteLine("False " + currentMessage.postback); phandler.handle(message); } else { currentMessage.postback = new Postback { payload = $"GET_TOILET°{coords.lon}:{coords.lat}°{lang}" }; //Console.WriteLine("True " + currentMessage.postback); phandler.handle(message); } TempUserData.Instance.Remove(message.sender.id); //Remove the user from the set } catch (Exception ex) { Console.WriteLine(ex); } } else { mhandler.CheckForKnowText(currentMessage); } } } }); return(Ok()); }