public async Task ConvertWhatsAppUnsupportedMessageTypeToActivity() { var incomingMessage = new InfobipIncomingMessage <InfobipWhatsAppIncomingResult> { Results = new List <InfobipWhatsAppIncomingResult> { new InfobipWhatsAppIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "whatsapp-number", ReceivedAt = DateTimeOffset.UtcNow, IntegrationType = "WHATSAPP", Message = new InfobipIncomingWhatsAppMessage { Type = "UNSUPPORTED", }, } }, MessageCount = 1, PendingMessageCount = 0 }; var activities = await InfobipWhatsAppToActivity.Convert(incomingMessage.Results.Single(), _infobipClient.Object).ConfigureAwait(false); Assert.Null(activities); }
public void ConvertSmsSeenEventToActivity() { var incomingMessage = new InfobipIncomingMessage <InfobipWhatsAppIncomingResult> { Results = new List <InfobipWhatsAppIncomingResult> { new InfobipWhatsAppIncomingResult { MessageId = "Unique message Id", From = "whatsapp-number", To = "subscriber-number", SeenAt = DateTimeOffset.UtcNow, SentAt = DateTimeOffset.UtcNow.Subtract(TimeSpan.FromSeconds(10)) } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = InfobipWhatsAppSeenReportToActivity.Convert(incomingMessage.Results.Single()); Assert.NotNull(activity); Assert.Equal(InfobipWhatsAppConstants.ChannelName, activity.ChannelId); Assert.Equal(ActivityTypes.Event, activity.Type); Assert.Equal(InfobipReportTypes.SEEN, activity.Name); VerifyResultCoreProperties(incomingMessage.Results[0], activity); }
public async Task ConvertSmsSeenEventToActivity() { var incomingMessage = new InfobipIncomingMessage { Results = new List <InfobipIncomingResult> { new InfobipIncomingResult { MessageId = "Unique message Id", From = "whatsapp-number", To = "subscriber-number", SeenAt = DateTimeOffset.UtcNow, SentAt = DateTimeOffset.UtcNow.Subtract(TimeSpan.FromSeconds(10)) } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = (await _toActivityConverter.Convert(incomingMessage).ConfigureAwait(false)).First(); Assert.NotNull(activity); Assert.Equal(InfobipChannel.WhatsApp, activity.ChannelId); Assert.Equal(ActivityTypes.Event, activity.Type); Assert.Equal(InfobipReportTypes.SEEN, activity.Name); }
public async Task ConvertSeenToActivity() { var incomingMessage = new InfobipIncomingMessage { Results = new List <InfobipIncomingResult> { new InfobipIncomingResult { MessageId = "Unique message Id", From = "whatsapp-number", To = "subscriber-number", SeenAt = DateTimeOffset.UtcNow, SentAt = DateTimeOffset.UtcNow.Subtract(TimeSpan.FromSeconds(10)) } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = (await _toActivityConverter.Convert(incomingMessage).ConfigureAwait(false)).First(); Assert.NotNull(activity); Assert.Equal(InfobipConstants.ChannelName, activity.ChannelId); VerifyResultCoreProperties(incomingMessage.Results[0], activity, isEvent: true); VerifyResultEventMessage(InfobipReportTypes.SEEN, activity); }
public async Task ConvertUnsupportedMesageTypeToActivity() { var incomingMessage = new InfobipIncomingMessage { Results = new List <InfobipIncomingResult> { new InfobipIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "whatsapp-number", ReceivedAt = DateTimeOffset.UtcNow, IntegrationType = "WHATSAPP", Message = new InfobipIncomingWhatsAppMessage { Type = "UNSUPPORTED", }, } }, MessageCount = 1, PendingMessageCount = 0 }; var activities = (await _toActivityConverter.Convert(incomingMessage).ConfigureAwait(false)).ToList(); Assert.NotNull(activities); Assert.Empty(activities); }
/// <summary> /// Converts a single Infobip message to a Bot Framework activity. /// </summary> /// <param name="infobipIncomingMessage">The message to be processed.</param> /// <returns>An Activity with the result.</returns> /// <exception cref="ArgumentNullException"><paramref name="infobipIncomingMessage"/> is null.</exception> /// <remarks>A webhook call may deliver more than one message at a time.</remarks> public async Task <IEnumerable <Activity> > Convert(InfobipIncomingMessage infobipIncomingMessage) { if (infobipIncomingMessage == null) { throw new ArgumentNullException(nameof(infobipIncomingMessage)); } if (infobipIncomingMessage.Results == null || !infobipIncomingMessage.Results.Any()) { _logger.LogError("WebHookResponse has no results"); throw new ArgumentOutOfRangeException("No data from webhook", new Exception("No data received from webhook at " + DateTime.UtcNow)); } var result = new List <Activity>(); foreach (var message in infobipIncomingMessage.Results) { try { var activity = await ConvertToActivity(message); if (activity != null) { result.Add(activity); } } catch (Exception e) { _logger.Log(LogLevel.Error, "Error handling message response: " + e.Message, e); } } return(result); }
public async Task ConvertTextWithCallbackDataToActivity() { var incomingMessage = new InfobipIncomingMessage { Results = new List <InfobipIncomingResult> { new InfobipIncomingResult { MessageId = "Unique message Id", To = "subscriber-number", SentAt = DateTimeOffset.UtcNow, DoneAt = DateTimeOffset.UtcNow.Subtract(TimeSpan.FromSeconds(10)), Status = new InfobipIncomingInfoMessage { Id = 5, GroupId = 3, GroupName = "DELIVERED", Name = "DELIVERED_TO_HANDSET", Description = "Message delivered to handset" }, Error = new InfobipIncomingInfoMessage { Id = 0, GroupId = 0, GroupName = "OK", Name = "NO_ERROR", Description = "No Error", Permanent = false }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" }, CallbackData = "{\"initialMenu\": true, \"userId\": 1, \"username\":\"newUser\"}", } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = (await _toActivityConverter.Convert(incomingMessage).ConfigureAwait(false)).First(); Assert.NotNull(activity); Assert.Equal(InfobipConstants.ChannelName, activity.ChannelId); var entity = activity.Entities.Single(x => x.Type == InfobipConstants.InfobipCallbackDataEntityType); var result = entity.Properties.ToDictionary(); Assert.Equal("true", result["initialMenu"]); Assert.Equal("1", result["userId"]); Assert.Equal("newUser", result["username"]); VerifyResultCoreProperties(incomingMessage.Results[0], activity, isEvent: true, overrideFromId: _adapterOptions.InfobipWhatsAppNumber); VerifyResultEventMessage(InfobipReportTypes.DELIVERY, activity); }
public void ConvertSmsDeliveryReportEventToActivity() { var incomingMessage = new InfobipIncomingMessage <InfobipSmsIncomingResult> { Results = new List <InfobipSmsIncomingResult> { new InfobipSmsIncomingResult { MessageId = "Unique message Id", To = "subscriber-number", SentAt = DateTimeOffset.UtcNow, DoneAt = DateTimeOffset.UtcNow.Subtract(TimeSpan.FromSeconds(10)), Channel = "SMS", Status = new InfobipIncomingInfoMessage { Id = 5, GroupId = 3, GroupName = "DELIVERED", Name = "DELIVERED_TO_HANDSET", Description = "Message delivered to handset" }, Error = new InfobipIncomingInfoMessage { Id = 0, GroupId = 0, GroupName = "OK", Name = "NO_ERROR", Description = "No Error", Permanent = false }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" } } }, MessageCount = 1, PendingMessageCount = 0 }; var result = incomingMessage.Results.Single(); var activity = InfobipSmsDeliveryReportToActivity.Convert(result, TestOptions.SmsNumber); Assert.NotNull(activity); Assert.Equal(InfobipSmsConstants.ChannelName, activity.ChannelId); Assert.Equal(ActivityTypes.Event, activity.Type); Assert.Equal(InfobipReportTypes.DELIVERY, activity.Name); Assert.Null(activity.Text); VerifyResultCoreProperties(incomingMessage.Results[0], activity, TestOptions.SmsNumber); }
public async Task ConvertDeliveryReportToActivity() { var incomingMessage = new InfobipIncomingMessage { Results = new List <InfobipIncomingResult> { new InfobipIncomingResult { MessageId = "Unique message Id", To = "subscriber-number", SentAt = DateTimeOffset.UtcNow, DoneAt = DateTimeOffset.UtcNow.Subtract(TimeSpan.FromSeconds(10)), Status = new InfobipIncomingInfoMessage { Id = 5, GroupId = 3, GroupName = "DELIVERED", Name = "DELIVERED_TO_HANDSET", Description = "Message delivered to handset" }, Error = new InfobipIncomingInfoMessage { Id = 0, GroupId = 0, GroupName = "OK", Name = "NO_ERROR", Description = "No Error", Permanent = false }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" } } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = (await _toActivityConverter.Convert(incomingMessage).ConfigureAwait(false)).First(); Assert.NotNull(activity); Assert.Equal(InfobipConstants.ChannelName, activity.ChannelId); VerifyResultCoreProperties(incomingMessage.Results[0], activity, isEvent: true, overrideFromId: _adapterOptions.InfobipWhatsAppNumber); VerifyResultEventMessage(InfobipReportTypes.DELIVERY, activity); }
public void ConvertWhatsAppDeliveryReportEventToActivity() { var incomingMessage = new InfobipIncomingMessage <InfobipViberIncomingResult> { Results = new List <InfobipViberIncomingResult> { new InfobipViberIncomingResult { MessageId = "Unique message Id", To = "subscriber-number", SentAt = DateTimeOffset.UtcNow, DoneAt = DateTimeOffset.UtcNow.Subtract(TimeSpan.FromSeconds(10)), Channel = "VIBER", Status = new InfobipIncomingInfoMessage { Id = 5, GroupId = 3, GroupName = "DELIVERED", Name = "DELIVERED_TO_HANDSET", Description = "Message delivered to handset" }, Error = new InfobipIncomingInfoMessage { Id = 0, GroupId = 0, GroupName = "OK", Name = "NO_ERROR", Description = "No Error", Permanent = false }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" } } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = _toActivityConverter.Convert(incomingMessage).First(); Assert.NotNull(activity); Assert.Equal(InfobipViberConstants.ChannelName, activity.ChannelId); Assert.Equal(ActivityTypes.Event, activity.Type); Assert.Equal(InfobipReportTypes.DELIVERY, activity.Name); }
public async Task ConvertWhatsAppTextMessageWithCallbackDataToActivity() { var incomingMessage = new InfobipIncomingMessage { Results = new List <InfobipIncomingResult> { new InfobipIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "whatsapp-number", ReceivedAt = DateTimeOffset.UtcNow, IntegrationType = "WHATSAPP", Message = new InfobipIncomingWhatsAppMessage { Type = InfobipIncomingMessageTypes.Text, Text = "Text message to bot" }, Contact = new InfobipIncomingWhatsAppContact { Name = "Whatsapp Subscriber Name" }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" }, CallbackData = "{\"initialMenu\": true, \"userId\": 1, \"username\":\"newUser\"}" } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = (await _toActivityConverter.Convert(incomingMessage).ConfigureAwait(false)).First(); Assert.NotNull(activity); Assert.Equal(InfobipChannel.WhatsApp, activity.ChannelId); var entity = activity.Entities.Single(x => x.Type == InfobipEntityType.CallbackData); var result = entity.Properties.ToDictionary(); Assert.Equal("true", result["initialMenu"]); Assert.Equal("1", result["userId"]); Assert.Equal("newUser", result["username"]); }
public async Task ConvertWhatsAppLocationMessageToActivity() { var incomingMessage = new InfobipIncomingMessage <InfobipWhatsAppIncomingResult> { Results = new List <InfobipWhatsAppIncomingResult> { new InfobipWhatsAppIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "whatsapp-number", ReceivedAt = DateTimeOffset.UtcNow, IntegrationType = "WHATSAPP", Message = new InfobipIncomingWhatsAppMessage { Type = InfobipIncomingMessageTypes.Location, Caption = "Message caption", Longitude = 15.9459228515625, Latitude = 45.793365478515625 }, Contact = new InfobipIncomingWhatsAppContact { Name = "Whatsapp Subscriber Name" }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" }, } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = await InfobipWhatsAppToActivity.Convert(incomingMessage.Results.Single(), _infobipClient.Object).ConfigureAwait(false); Assert.NotNull(activity); Assert.Equal(InfobipWhatsAppConstants.ChannelName, activity.ChannelId); VerifyResultCoreProperties(incomingMessage.Results[0], activity); VerifyResultLocationMessage(incomingMessage.Results[0].Message, activity); }
public async Task ConvertWhatsAppImageMessageToActivity() { var incomingMessage = new InfobipIncomingMessage <InfobipWhatsAppIncomingResult> { Results = new List <InfobipWhatsAppIncomingResult> { new InfobipWhatsAppIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "whatsapp-number", ReceivedAt = DateTimeOffset.UtcNow, IntegrationType = "WHATSAPP", Message = new InfobipIncomingWhatsAppMessage { Caption = "Message Caption", Type = InfobipIncomingMessageTypes.Image, Url = new Uri("https://infobip.api.media.endpoint") }, Contact = new InfobipIncomingWhatsAppContact { Name = "Whatsapp Subscriber Name" }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" }, } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = await InfobipWhatsAppToActivity.Convert(incomingMessage.Results.Single(), _infobipClient.Object).ConfigureAwait(false); Assert.NotNull(activity); Assert.Equal(InfobipWhatsAppConstants.ChannelName, activity.ChannelId); VerifyResultCoreProperties(incomingMessage.Results[0], activity); VerifyResultImageMessage(incomingMessage.Results[0].Message, activity); }
public async Task ConvertWhatsAppTextMessageToActivity() { var incomingMessage = new InfobipIncomingMessage { Results = new List <InfobipIncomingResult> { new InfobipIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "whatsapp-number", ReceivedAt = DateTimeOffset.UtcNow, IntegrationType = "WHATSAPP", Message = new InfobipIncomingWhatsAppMessage { Type = InfobipIncomingMessageTypes.Text, Text = "Text message to bot" }, Contact = new InfobipIncomingWhatsAppContact { Name = "Whatsapp Subscriber Name" }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" }, } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = (await InfobipWhatsAppToActivity.Convert(incomingMessage.Results.Single(), _infobipClient.Object).ConfigureAwait(false)); Assert.NotNull(activity); Assert.Equal(InfobipChannel.WhatsApp, activity.ChannelId); VerifyResultCoreProperties(incomingMessage.Results[0], activity); VerifyResultTextMessage(incomingMessage.Results[0].Message, activity); }
public void ConvertViberTextMessageWithCallbackDataToActivity() { var incomingMessage = new InfobipIncomingMessage <InfobipViberIncomingResult> { Results = new List <InfobipViberIncomingResult> { new InfobipViberIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "viber-sender", ReceivedAt = DateTimeOffset.UtcNow, IntegrationType = "VIBER", Message = new InfobipViberIncomingMessage { Text = "Just simple text" }, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" }, CallbackData = "{\"initialMenu\": true, \"userId\": 1, \"username\":\"newUser\"}" } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = _toActivityConverter.Convert(incomingMessage).First(); Assert.NotNull(activity); Assert.Equal(InfobipViberConstants.ChannelName, activity.ChannelId); var entity = activity.Entities.Single(x => x.Type == InfobipEntityType.CallbackData); var result = entity.Properties.ToDictionary(); Assert.Equal("true", result["initialMenu"]); Assert.Equal("1", result["userId"]); Assert.Equal("newUser", result["username"]); }
public void ConvertViberMessageToActivity() { var incomingMessage = new InfobipIncomingMessage <InfobipViberIncomingResult> { Results = new List <InfobipViberIncomingResult> { new InfobipViberIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "viber-number", ReceivedAt = DateTimeOffset.UtcNow, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" }, CallbackData = "{\"initialMenu\": true, \"userId\": 1, \"username\":\"newUser\"}", Message = new InfobipViberIncomingMessage { Text = "Lorem ipsum" } } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = InfobipViberToActivity.Convert(incomingMessage.Results.Single()); Assert.NotNull(activity); Assert.Equal(InfobipViberConstants.ChannelName, activity.ChannelId); VerifyResultCoreProperties(incomingMessage.Results[0], activity); Assert.Equal(ActivityTypes.Message, activity.Type); Assert.Equal(incomingMessage.Results[0].Message.Text, activity.Text); Assert.Equal(TextFormatTypes.Plain, activity.TextFormat); Assert.True(activity.Attachments == null || activity.Attachments.Count == 0); }
public async Task ConvertSmsMessageWithCallbackDataToActivity() { var incomingMessage = new InfobipIncomingMessage { Results = new List <InfobipIncomingResult> { new InfobipIncomingResult { MessageId = "Unique message Id", From = "subscriber-number", To = "sms-number", ReceivedAt = DateTimeOffset.UtcNow, Price = new InfobipIncomingPrice { PricePerMessage = 0, Currency = "GBP" }, CallbackData = "{\"initialMenu\": true, \"userId\": 1, \"username\":\"newUser\"}", SmsCount = 1, Text = "Keyword text", CleanText = "Text" } }, MessageCount = 1, PendingMessageCount = 0 }; var activity = (await _toActivityConverter.Convert(incomingMessage).ConfigureAwait(false)).First(); Assert.NotNull(activity); Assert.Equal(InfobipChannel.Sms, activity.ChannelId); var entity = activity.Entities.Single(x => x.Type == InfobipEntityType.CallbackData); var result = entity.Properties.ToDictionary(); Assert.Equal("true", result["initialMenu"]); Assert.Equal("1", result["userId"]); Assert.Equal("newUser", result["username"]); }