Пример #1
0
        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);
        }
Пример #3
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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"]);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #15
0
        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"]);
        }
Пример #16
0
        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);
        }
Пример #17
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"]);
        }