private async Task <Activity> ConvertToActivity(InfobipWhatsAppIncomingResult 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 = InfobipWhatsAppDeliveryReportToActivity.Convert(response, _whatsAppAdapterOptions.InfobipWhatsAppNumber); 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(InfobipWhatsAppSeenReportToActivity.Convert(response)); } 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, _infobipWhatsAppClient); 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)); }
private static void HandleCallbackData(InfobipWhatsAppIncomingResult response, Activity activity) { if (string.IsNullOrWhiteSpace(response.CallbackData)) { return; } var serialized = JsonConvert.DeserializeObject <Dictionary <string, string> >(response.CallbackData); activity.AddInfobipCallbackData(serialized); }
private static void VerifyResultCoreProperties(InfobipWhatsAppIncomingResult result, Activity activity) { var timestamp = result.SeenAt ?? result.DoneAt; Assert.Equal(result.MessageId, activity.Id); Assert.Equal(result.From, activity.From.Id); Assert.Equal(result.To, activity.Recipient.Id); Assert.Equal(result.To, activity.Conversation.Id); Assert.Equal(result, activity.ChannelData); Assert.Equal(timestamp, activity.Timestamp); }
public static Activity Convert(InfobipWhatsAppIncomingResult result, string whatsAppNumber) { var activity = CreateBaseDeliveryReportActivity(result); activity.ChannelId = InfobipWhatsAppConstants.ChannelName; activity.From = new ChannelAccount { Id = whatsAppNumber }; return(activity); }
public static Activity Convert(InfobipWhatsAppIncomingResult result) { var activity = ConvertToEvent(result); activity.Name = InfobipReportTypes.SEEN; activity.Timestamp = result.SeenAt; activity.ChannelId = InfobipWhatsAppConstants.ChannelName; activity.From = new ChannelAccount { Id = result.From }; return(activity); }
public static async Task <Activity> Convert(InfobipWhatsAppIncomingResult result, IInfobipWhatsAppClient infobipWhatsAppClient) { var activity = ConvertToMessage(result); activity.ChannelId = InfobipWhatsAppConstants.ChannelName; if (result.Message.Type == InfobipIncomingMessageTypes.Text) { activity.Text = result.Message.Text; activity.TextFormat = TextFormatTypes.Plain; } else if (result.Message.Type == InfobipIncomingMessageTypes.Location) { activity.Entities.Add(new GeoCoordinates { Latitude = result.Message.Latitude, Longitude = result.Message.Longitude }); } else if (result.Message.IsMedia()) { var contentType = await infobipWhatsAppClient.GetContentTypeAsync(result.Message.Url.AbsoluteUri).ConfigureAwait(false); activity.Attachments = new List <Attachment> { new Attachment { ContentType = contentType, ContentUrl = result.Message.Url.AbsoluteUri, Name = result.Message.Caption } }; } else { return(null); } return(activity); }