private async Task <Activity> ConvertToActivity(InfobipIncomingResult response) { if (response.Error != null) { //error codes - https://dev-old.infobip.com/getting-started/response-status-and-error-codes if (response.Error.Id > 0) { throw new Exception($"{response.Error.Name} {response.Error.Description}"); } } if (response.IsDeliveryReport()) { _logger.Log(LogLevel.Debug, $"Received DLR notification: MessageId={response.MessageId}, " + $"DoneAt={response.DoneAt}, SentAt={response.SentAt}"); var activity = new Activity { Type = ActivityTypes.Event, Id = response.MessageId, Name = InfobipReportTypes.DELIVERY, Timestamp = response.DoneAt, ChannelId = InfobipConstants.ChannelName, Conversation = new ConversationAccount { Id = response.To }, From = new ChannelAccount { Id = _adapterOptions.InfobipWhatsAppNumber }, Recipient = new ChannelAccount { Id = response.To }, Text = null, ChannelData = response, Entities = new List <Entity>() }; if (!string.IsNullOrWhiteSpace(response.CallbackData)) { var serialized = JsonConvert.DeserializeObject <Dictionary <string, string> >(response.CallbackData); activity.Entities.Add(new InfobipCallbackData(serialized)); } return(activity); } if (response.IsSeenReport()) { _logger.Log(LogLevel.Debug, $"Received SEEN notification: MessageId={response.MessageId}, " + $"SeenAt={response.SeenAt}, SentAt={response.SentAt}"); return(new Activity { Type = ActivityTypes.Event, Id = response.MessageId, Name = InfobipReportTypes.SEEN, Timestamp = response.SeenAt, ChannelId = InfobipConstants.ChannelName, Conversation = new ConversationAccount { Id = response.To }, From = new ChannelAccount { Id = response.From }, Recipient = new ChannelAccount { Id = response.To }, Text = null, ChannelData = response }); } if (response.IsMessage()) { _logger.Log(LogLevel.Debug, $"MO message received: MessageId={response.MessageId}, " + $"IntegrationType={response.IntegrationType}, " + $"receivedAt={response.ReceivedAt}"); // handle any type of WA message sent by subscriber, can be: TEXT, IMAGE, DOCUMENT, LOCATION, CONTACT, VIDEO // - https://dev-old.infobip.com/whatsapp-business-messaging/incoming-whatsapp-messages return((Activity) await ConvertMessageToMessageActivity(response)); } throw new Exception("Unsupported message received - not DLR, SEEN or MO message: \n" + JsonConvert.SerializeObject(response, Formatting.Indented)); }
private async Task <Activity> ConvertToActivity(InfobipIncomingResult response) { if (response.Error != null) { //error codes - https://dev-old.infobip.com/getting-started/response-status-and-error-codes if (response.Error.Id > 0) { throw new Exception($"{response.Error.Name} {response.Error.Description}"); } } if (response.IsDeliveryReport()) { _logger.Log(LogLevel.Debug, $"Received DLR notification: MessageId={response.MessageId}, " + $"DoneAt={response.DoneAt}, SentAt={response.SentAt}, Channel={response.Channel}"); var activity = InfobipDeliveryReportToActivity.Convert(response, _adapterOptions); if (string.IsNullOrEmpty(activity.ChannelId)) { _logger.Log(LogLevel.Error, $"{response.Channel} is not supported channel"); } HandleCallbackData(response, activity); return(activity); } if (response.IsSeenReport()) { _logger.Log(LogLevel.Debug, $"Received SEEN notification: MessageId={response.MessageId}, " + $"SeenAt={response.SeenAt}, SentAt={response.SentAt}"); return(InfobipSeenReportToActivity.Convert(response)); } if (response.IsSmsMessage()) { _logger.Log(LogLevel.Debug, $"MO message received: MessageId={response.MessageId}, " + $"IntegrationType=SMS, " + $"receivedAt={response.ReceivedAt}"); var activity = InfobipSmsToActivity.Convert(response); HandleCallbackData(response, activity); return(activity); } if (response.IsWhatsAppMessage()) { _logger.Log(LogLevel.Debug, $"MO message received: MessageId={response.MessageId}, " + $"IntegrationType={response.IntegrationType}, " + $"receivedAt={response.ReceivedAt}"); var activity = await InfobipWhatsAppToActivity.Convert(response, _infobipClient); if (activity == null) { _logger.Log(LogLevel.Information, $"Received MO message: {response.MessageId} has unsupported message type"); return(null); } HandleCallbackData(response, activity); return(activity); } throw new Exception("Unsupported message received - not DLR, SEEN or MO message: \n" + JsonConvert.SerializeObject(response, Formatting.Indented)); }