public void SetSettings(bool passCreds)
        {
            //ARRANGE
            var expectedUri             = $"{RestUrl}/account/settings";
            var expectedRequestContents = $"moCallBackUrl={HttpUtility.UrlEncode("https://example.com/webhooks/inbound-sms")}&drCallBackUrl={HttpUtility.UrlEncode("https://example.com/webhooks/delivery-receipt")}&api_key={ApiKey}&api_secret={ApiSecret}&";
            var expectedResponseContent = @"{""mo-callback-url"": ""https://example.com/webhooks/inbound-sms"",""dr-callback-url"": ""https://example.com/webhooks/delivery-receipt"",""max-outbound-request"": 15,""max-inbound-request"": 30,""max-calls-per-second"": 4}";

            Setup(uri: expectedUri, responseContent: expectedResponseContent, requestContent: expectedRequestContents);

            //ACT
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            Accounts.AccountSettingsResult result;
            if (passCreds)
            {
                result = client.AccountClient.ChangeAccountSettings(new Accounts.AccountSettingsRequest {
                    MoCallBackUrl = "https://example.com/webhooks/inbound-sms", DrCallBackUrl = "https://example.com/webhooks/delivery-receipt"
                }, creds);
            }
            else
            {
                result = client.AccountClient.ChangeAccountSettings(new Accounts.AccountSettingsRequest {
                    MoCallBackUrl = "https://example.com/webhooks/inbound-sms", DrCallBackUrl = "https://example.com/webhooks/delivery-receipt"
                });
            }


            //ASSERT
            Assert.Equal("https://example.com/webhooks/delivery-receipt", result.DrCallbackurl);
            Assert.Equal("https://example.com/webhooks/inbound-sms", result.MoCallbackUrl);
            Assert.Equal(4, result.MaxCallsPerSecond);
            Assert.Equal(30, result.MaxInboundRequest);
            Assert.Equal(15, result.MaxOutboundRequest);
        }
        public void TopUp(bool passCreds)
        {
            //ARRANGE
            var expectedUri             = $"{RestUrl}/account/top-up?trx=00X123456Y7890123Z&api_key={ApiKey}&api_secret={ApiSecret}&";
            var expectedResponseContent = @"{""response"":""abc123""}";

            Setup(uri: expectedUri, responseContent: expectedResponseContent);

            var creds = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            //Act
            var client = new NexmoClient(creds);

            Accounts.TopUpResult response;
            if (passCreds)
            {
                response = client.AccountClient.TopUpAccountBalance(new Accounts.TopUpRequest {
                    Trx = "00X123456Y7890123Z"
                }, creds);
            }
            else
            {
                response = client.AccountClient.TopUpAccountBalance(new Accounts.TopUpRequest {
                    Trx = "00X123456Y7890123Z"
                });
            }

            Assert.Equal("abc123", response.Response);
        }
        public void RevokeSecret(bool passCreds)
        {
            //ARRANGE
            var secretId         = "ad6dc56f-07b5-46e1-a527-85530e625800";
            var expectedUri      = $"https://api.nexmo.com/accounts/{ApiKey}/secrets/{secretId}";
            var expectedResponse = @"";

            Setup(expectedUri, expectedResponse);

            //ACT
            var  creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var  client = new NexmoClient(creds);
            bool response;

            if (passCreds)
            {
                response = client.AccountClient.RevokeApiSecret(secretId, ApiKey, creds);
            }
            else
            {
                response = client.AccountClient.RevokeApiSecret(secretId, ApiKey);
            }


            //ASSERT
            Assert.True(response);
        }
Exemple #4
0
        /// <summary>
        /// Sends SMS to the given number.
        /// </summary>
        /// <param name="phoneNumber">A string containing the phone number for sending SMS.</param>
        /// <param name="msgBody">A string containing message body text.</param>
        /// <param name="isUnicode">if true, message body contains unicode text; otherwise false.(Optional)</param>
        /// <returns>true if SMS is successfully sent; otherwise, false.</returns>
        public override void SendSms(string[] phoneNumber, string msgBody, bool isUnicode = false)
        {
            NexmoClient   nexmoClient   = new NexmoClient(_nexmoApiKey, _nexmoApiSecret);
            NexmoResponse smsResponse   = nexmoClient.SendMessage(phoneNumber[0], NeeoConstants.AppName, msgBody, isUnicode);
            MessageStatus messageStatus = (MessageStatus)Convert.ToUInt16(smsResponse.Messages[0].Status);

            switch (messageStatus)
            {
            case MessageStatus.InvalidMessage:
                LogManager.CurrentInstance.ErrorLogger.LogError(
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "Nexmo - Phone # : " + phoneNumber[0] + " Status : " + messageStatus.ToString() + ", Description : " + NexmoDictionaries.MessageStatusDescriptionDictionary[(short)messageStatus]);

                throw new ApplicationException(CustomHttpStatusCode.InvalidNumber.ToString("D"));
                break;

            case MessageStatus.Throttled:
            case MessageStatus.MissingParams:
            case MessageStatus.InvalidParams:
            case MessageStatus.InvalidCredentials:
            case MessageStatus.InternalError:
            case MessageStatus.NumberBarred:
            case MessageStatus.PartnerAccountBarred:
            case MessageStatus.PartnerQuotaExceeded:
            case MessageStatus.CommunicationFailed:
            case MessageStatus.InvalidSignature:
            case MessageStatus.InvalidSenderAddress:
                LogManager.CurrentInstance.ErrorLogger.LogError(
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "Nexmo - Phone # : " + phoneNumber[0] + " Status : " + messageStatus.ToString() + ", Description : " + NexmoDictionaries.MessageStatusDescriptionDictionary[(short)messageStatus]);

                throw new ApplicationException(CustomHttpStatusCode.SmsApiException.ToString("D"));
                break;
            }
        }
        public void GetNumbers(bool passCreds)
        {
            //ARRANGE
            var expectedUri             = $"{RestUrl}/account/numbers?api_key={ApiKey}&api_secret={ApiSecret}&";
            var expectedResponseContent = @"{""count"":1,""numbers"":[{""country"":""US"",""msisdn"":""17775551212"",""type"":""mobile-lvn"",""features"":[""VOICE"",""SMS""]}]}";

            Setup(uri: expectedUri, responseContent: expectedResponseContent);

            //Act
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            Numbers.NumbersSearchResponse numbers;
            if (passCreds)
            {
                numbers = client.NumbersClient.GetOwnedNumbers(new Numbers.NumberSearchRequest(), creds);
            }
            else
            {
                numbers = client.NumbersClient.GetOwnedNumbers(new Numbers.NumberSearchRequest());
            }

            //ASSERT
            Assert.Equal(1, numbers.Count);
            Assert.Equal("17775551212", numbers.Numbers[0].Msisdn);
            Assert.Equal("US", numbers.Numbers[0].Country);
            Assert.Equal("mobile-lvn", numbers.Numbers[0].Type);
            Assert.Equal("VOICE", numbers.Numbers[0].Features.First());
        }
Exemple #6
0
        public void TestControlVerifyInvalidCredentials()
        {
            var expectedResponse = @"{
              ""status"": ""4"",
              ""error_text"": ""invalid credentials""
            }";

            var expectedUri    = $"{ApiUrl}/verify/control/json";
            var requestContent = $"request_id=abcdef0123456789abcdef0123456789&cmd=cancel&api_key={ApiKey}&api_secret={ApiSecret}&";

            Setup(expectedUri, expectedResponse, requestContent);

            var request = new VerifyControlRequest {
                Cmd = "cancel", RequestId = "abcdef0123456789abcdef0123456789"
            };
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            try
            {
                var response = client.VerifyClient.VerifyControl(request, creds);
                Assert.True(false, "Automatically failing because exception wasn't thrown");
            }
            catch (NexmoVerifyResponseException ex)
            {
                Assert.Equal("4", ex.Response.Status);
                Assert.Equal("invalid credentials", ex.Response.ErrorText);
            }
        }
        public void TestStartDtmf(bool passCreds)
        {
            var uuid                   = "63f61863-4a51-4f6b-86e1-46edebcf9356";
            var expectedUri            = $"{ApiUrl}/v1/calls/{uuid}/talk";
            var expectedResponse       = @"{
                  ""message"": ""DTMF sent"",
                  ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356""
                }";
            var expectedRequestContent = @"{""digits"":""1234""}";
            var command                = new DtmfCommand {
                Digits = "1234"
            };

            Setup(expectedUri, expectedResponse, expectedRequestContent);

            var creds  = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey);
            var client = new NexmoClient(creds);

            CallCommandResponse response;

            if (passCreds)
            {
                response = client.VoiceClient.StartDtmf(uuid, command, creds);
            }
            else
            {
                response = client.VoiceClient.StartDtmf(uuid, command);
            }
            Assert.Equal("DTMF sent", response.Message);
            Assert.Equal(uuid, response.Uuid);
        }
        public SmsStatus SendSmsMessage(string to, string message)
        {
            using (var session = DocumentStore.GetStore().OpenSession("Configuration"))
            {
                var nexmoConfiguration = session.Load<NexmoConfiguration>("NexmoConfig");
                if (nexmoConfiguration == null)
                {
                    throw new ArgumentException("Could not find nexmo configuration");
                }

                var client = new NexmoClient(nexmoConfiguration.ApiKey, nexmoConfiguration.Secret, ProtocolType.Https);
                var response = client.SendSms(nexmoConfiguration.From, to, message);
                if (response == null || response.Messages == null || response.Messages.Count == 0)
                    throw new Exception("Didn't get a proper response from nexmo");

                if (response.Messages.Count > 1)
                    throw new Exception("not sure what to do here - need integration testing");
                if (response.Messages[0].Status == 0) // success case
                {
                    decimal cost = 0;
                    decimal.TryParse(response.Messages[0].Messageprice, out cost);
                    return new SmsSent(new SmsConfirmationData(response.Messages[0].MessageId, DateTime.UtcNow, cost));
                }
                throw new Exception("Haven't figured out the other status codes yet...");

            }
        }
Exemple #9
0
        public SmsStatus SendSmsMessage(string to, string message)
        {
            using (var session = DocumentStore.GetStore().OpenSession("Configuration"))
            {
                var nexmoConfiguration = session.Load <NexmoConfiguration>("NexmoConfig");
                if (nexmoConfiguration == null)
                {
                    throw new ArgumentException("Could not find nexmo configuration");
                }

                var client   = new NexmoClient(nexmoConfiguration.ApiKey, nexmoConfiguration.Secret, ProtocolType.Https);
                var response = client.SendSms(nexmoConfiguration.From, to, message);
                if (response == null || response.Messages == null || response.Messages.Count == 0)
                {
                    throw new Exception("Didn't get a proper response from nexmo");
                }

                if (response.Messages.Count > 1)
                {
                    throw new Exception("not sure what to do here - need integration testing");
                }
                if (response.Messages[0].Status == 0) // success case
                {
                    decimal cost = 0;
                    decimal.TryParse(response.Messages[0].Messageprice, out cost);
                    return(new SmsSent(new SmsConfirmationData(response.Messages[0].MessageId, DateTime.UtcNow, cost)));
                }
                throw new Exception("Haven't figured out the other status codes yet...");
            }
        }
Exemple #10
0
        public FloodProtector(IrcLayer irc, NexmoClient nexmo, IConfiguration configuration)
            : base(irc, nexmo, configuration)
        {
            if (Instance != null)
            {
                throw new Exception("Can only instantiate one FloodProtector");
            }

            Instance = this;

            this.irc = irc;
            if (!int.TryParse(configuration["FloodProtectionRate"], out rate))
            {
                rate = 3;
            }

            if (!int.TryParse(configuration["FloodProtectionTime"], out per))
            {
                per = 5;
            }

            if (!int.TryParse(configuration["FloodProtectionBanDuration"], out muteDuration))
            {
                muteDuration = 5;
            }

            muteDuration     *= 60 * 1000; // convert minutes to milliseconds
            irc.Connected    += IrcOnConnected;
            irc.Disconnected += IrcOnDisconnected;
        }
Exemple #11
0
        public static IEnumerable <ChannelAction> GetAll(IrcLayer irc, NexmoClient nexmo, IConfiguration configuration)
        {
            yield return(new FloodProtector(irc, nexmo, configuration));

            yield return(new HighlightCount(irc, nexmo, configuration));
            //yield return new ZalgoProctection(irc, nexmo);
        }
        public void TestFailedAsyncRequest()
        {
            //ARRANGE
            var expectedResponse = @"{
              ""status"": 4
            }";
            var expectedUri      = $"{ApiUrl}/ni/advanced/async/json?callback={HttpUtility.UrlEncode("https://example.com/callback")}&ip={HttpUtility.UrlEncode("123.0.0.255")}&cnam=true&number=15555551212&country=GB&api_key={ApiKey}&api_secret={ApiSecret}&";
            var request          = new AdvancedNumberInsightAsynchronousRequest {
                Cnam = true, Country = "GB", Number = "15555551212", Ip = "123.0.0.255", Callback = "https://example.com/callback"
            };

            Setup(expectedUri, expectedResponse);
            //ACT
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            try
            {
                client.NumberInsightClient.GetNumberInsightAsync(request);
                //ASSERT
                Assert.True(false, "Auto fail because request returned without throwing exception");
            }
            catch (NumberInsights.NexmoNumberInsightResponseException ex)
            {
                //ASSERT
                Assert.Equal(4, ex.Response.Status);
            }
        }
Exemple #13
0
        public static Message Execute(string restaurantName, string deliveryTime, string customerPhoneNumber)
        {
            var TO_NUMBER        = customerPhoneNumber;
            var FROM_NAME        = "Takeaway.com";
            var TEXT             = $"Thank you for ordering from {restaurantName}! You will recieve your order in {deliveryTime}.";
            var NEXMO_API_KEY    = Environment.GetEnvironmentVariable("NEXMO_API_KEY");
            var NEXMO_API_SECRET = Environment.GetEnvironmentVariable("NEXMO_API_SECRET");

            var credentials = Credentials.FromApiKeyAndSecret(
                NEXMO_API_KEY,
                NEXMO_API_SECRET
                );

            var vonageClient = new NexmoClient(credentials);


            SendSmsResponse response = vonageClient.SmsClient.SendAnSms(new SendSmsRequest()
            {
                To   = TO_NUMBER,
                From = FROM_NAME,
                Text = TEXT
            });

            return(new Message(TEXT, response.Messages.FirstOrDefault().Status));
        }
        public void GetAccountBalance(bool passCreds)
        {
            //ARRANGE
            var expectedUri             = $"{RestUrl}/account/get-balance?api_key={ApiKey}&api_secret={ApiSecret}&";
            var expectedResponseContent = @"{""value"": 3.14159, ""autoReload"": false }";

            Setup(uri: expectedUri, responseContent: expectedResponseContent);

            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            Accounts.Balance balance;
            if (passCreds)
            {
                balance = client.AccountClient.GetAccountBalance(creds);
            }
            else
            {
                balance = client.AccountClient.GetAccountBalance();
            }

            //ASSERT
            Assert.Equal(3.14159m, balance.Value);
            Assert.False(balance.AutoReload);
        }
Exemple #15
0
        public void TestControlVerify(bool passCreds)
        {
            var expectedResponse = @"{
              ""status"": ""0"",
              ""command"": ""cancel""
            }";

            var expectedUri    = $"{ApiUrl}/verify/control/json";
            var requestContent = $"request_id=abcdef0123456789abcdef0123456789&cmd=cancel&api_key={ApiKey}&api_secret={ApiSecret}&";

            Setup(expectedUri, expectedResponse, requestContent);

            var request = new VerifyControlRequest {
                Cmd = "cancel", RequestId = "abcdef0123456789abcdef0123456789"
            };
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);
            VerifyControlResponse response;

            if (passCreds)
            {
                response = client.VerifyClient.VerifyControl(request, creds);
            }
            else
            {
                response = client.VerifyClient.VerifyControl(request, creds);
            }
            Assert.Equal("0", response.Status);
            Assert.Equal("cancel", response.Command);
        }
        public void StopTalk(bool passCreds)
        {
            var uuid             = "63f61863-4a51-4f6b-86e1-46edebcf9356";
            var expectedUri      = $"{ApiUrl}/v1/calls/{uuid}/talk";
            var expectedResponse = @"{
                  ""message"": ""Talk stopped"",
                  ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356""
                }";

            Setup(expectedUri, expectedResponse, "{}");

            var creds  = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey);
            var client = new NexmoClient(creds);

            CallCommandResponse response;

            if (passCreds)
            {
                response = client.VoiceClient.StopStream(uuid, creds);
            }
            else
            {
                response = client.VoiceClient.StopStream(uuid);
            }
            Assert.Equal("Talk stopped", response.Message);
            Assert.Equal(uuid, response.Uuid);
        }
Exemple #17
0
        public void SendSmsTypicalUsage()
        {
            var expectedResponse       = @"{
                  ""message-count"": ""1"",
                  ""messages"": [
                    {
                      ""to"": ""447700900000"",
                      ""message-id"": ""0A0000000123ABCD1"",
                      ""status"": ""0"",
                      ""remaining-balance"": ""3.14159265"",
                      ""message-price"": ""0.03330000"",
                      ""network"": ""12345"",
                      ""account-ref"": ""customer1234""
                    }
                  ]
                }";
            var expectedUri            = $"{RestUrl}/sms/json?";
            var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}&api_key={ApiKey}&api_secret={ApiSecret}&";

            Setup(expectedUri, expectedResponse, expectedRequestContent);
            var client   = new NexmoClient(Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret));
            var response = client.SmsClient.SendAnSms(new Messaging.SendSmsRequest {
                From = "AcmeInc", To = "447700900000", Text = "Hello World!"
            });

            Assert.Equal("1", response.MessageCount);
            Assert.Equal("447700900000", response.Messages[0].To);
            Assert.Equal("0A0000000123ABCD1", response.Messages[0].MessageId);
            Assert.Equal("0", response.Messages[0].Status);
            Assert.Equal(SmsStatusCode.Success, response.Messages[0].StatusCode);
            Assert.Equal("3.14159265", response.Messages[0].RemainingBalance);
            Assert.Equal("12345", response.Messages[0].Network);
            Assert.Equal("customer1234", response.Messages[0].AccountRef);
        }
Exemple #18
0
        public void SendSmsBadResponse()
        {
            var expectedResponse       = @"{
                  ""message-count"": ""1"",
                  ""messages"": [
                    {                      
                      ""status"": ""4"",
                      ""error-text"":""invalid credentials""
                    }
                  ]
                }";
            var expectedUri            = $"{RestUrl}/sms/json?";
            var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}&api_key={ApiKey}&api_secret={ApiSecret}&";

            Setup(expectedUri, expectedResponse, expectedRequestContent);
            var client = new NexmoClient(Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret));

            try
            {
                var response = client.SmsClient.SendAnSms(new Messaging.SendSmsRequest {
                    From = "AcmeInc", To = "447700900000", Text = "Hello World!"
                });
                Assert.True(false);
            }
            catch (Messaging.NexmoSmsResponseException nex)
            {
                Assert.Equal($"SMS Request Failed with status: {nex.Response.Messages[0].Status} and error message: {nex.Response.Messages[0].ErrorText}", nex.Message);
                Assert.Equal(SmsStatusCode.InvalidCredentials, nex.Response.Messages[0].StatusCode);
            }
        }
Exemple #19
0
        public void TestFailedPurchase()
        {
            var    expectedResponse      = @"{
              ""error-code"": ""401"",
              ""error-code-label"": ""authentifcation failed""
            }";
            var    expectedUri           = $"{RestUrl}/number/buy";
            string expectdRequestContent = $"country=GB&msisdn=447700900000&api_key={ApiKey}&api_secret={ApiSecret}&";

            Setup(expectedUri, expectedResponse, expectdRequestContent);
            var request = new NumberTransactionRequest {
                Country = "GB", Msisdn = "447700900000"
            };
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            try
            {
                client.NumbersClient.BuyANumber(request);
                Assert.True(false, "Failin because exception was not thrown");
            }
            catch (NexmoNumberResponseException ex)
            {
                Assert.Equal("401", ex.Response.ErrorCode);
                Assert.Equal("authentifcation failed", ex.Response.ErrorCodeLabel);
            }
        }
        public void TestFailedAdvancedRequest()
        {
            //ARRANGE
            var expectedResponse = @"{
              ""status"": 4,
              ""status_message"":""invalid credentials""
            }";
            var expectedUri      = $"{ApiUrl}/ni/advanced/json?number=15555551212&api_key={ApiKey}&api_secret={ApiSecret}&";
            var request          = new AdvancedNumberInsightRequest {
                Number = "15555551212"
            };

            Setup(expectedUri, expectedResponse);
            //ACT
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            try
            {
                client.NumberInsightClient.GetNumberInsightAdvanced(request);
                //ASSERT
                Assert.True(false, "Auto fail because request returned without throwing exception");
            }
            catch (NumberInsights.NexmoNumberInsightResponseException ex)
            {
                //ASSERT
                Assert.Equal(4, ex.Response.Status);
                Assert.Equal("invalid credentials", ((AdvancedInsightsResponse)ex.Response).StatusMessage);
            }
        }
Exemple #21
0
        public void GetPricingAllCountries(bool passCreds)
        {
            //ARRANGE
            var expectedUri      = $"{RestUrl}/account/get-pricing/outbound/sms?api_key={ApiKey}&api_secret={ApiSecret}&";
            var expectedResponse = @"{
                  ""count"": ""243"",
                  ""countries"": [
                    {
                      ""countryName"": ""Canada"",
                      ""countryDisplayName"": ""Canada"",
                      ""currency"": ""EUR"",
                      ""defaultPrice"": ""0.00620000"",
                      ""dialingPrefix"": ""1"",
                      ""networks"": [
                        {
                          ""type"": ""mobile"",
                          ""price"": ""0.00590000"",
                          ""currency"": ""EUR"",
                          ""mcc"": ""302"",
                          ""mnc"": ""530"",
                          ""networkCode"": ""302530"",
                          ""networkName"": ""Keewaytinook Okimakanak""
                        }
                      ]
                    }
                  ]
                }";

            Setup(uri: expectedUri, responseContent: expectedResponse);

            //ACT
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            Pricing.PricingResult pricing;
            if (passCreds)
            {
                pricing = client.PricingClient.RetrievePricingAllCountries("sms", creds);
            }
            else
            {
                pricing = client.PricingClient.RetrievePricingAllCountries("sms");
            }

            //ASSERT
            Assert.Equal("302530", pricing.Countries[0].Networks[0].NetworkCode);
            Assert.Equal("Keewaytinook Okimakanak", pricing.Countries[0].Networks[0].NetworkName);
            Assert.Equal("530", pricing.Countries[0].Networks[0].Mnc);
            Assert.Equal("302", pricing.Countries[0].Networks[0].Mcc);
            Assert.Equal("EUR", pricing.Countries[0].Networks[0].Currency);
            Assert.Equal("0.00590000", pricing.Countries[0].Networks[0].Price);
            Assert.Equal("mobile", pricing.Countries[0].Networks[0].Type);
            Assert.Equal("1", pricing.Countries[0].DialingPrefix);
            Assert.Equal("0.00620000", pricing.Countries[0].DefaultPrice);
            Assert.Equal("EUR", pricing.Countries[0].Currency);
            Assert.Equal("Canada", pricing.Countries[0].CountryDisplayName);
            Assert.Equal("Canada", pricing.Countries[0].CountryName);
            Assert.Equal("243", pricing.Count);
        }
Exemple #22
0
        public void TestSearchNumbers(bool passCreds, bool kitchenSink)
        {
            var expetedResponse = @"{
              ""count"": 1234,
              ""numbers"": [
                {
                  ""country"": ""GB"",
                  ""msisdn"": ""447700900000"",
                  ""type"": ""mobile-lvn"",
                  ""cost"": ""1.25"",
                  ""features"": [
                    ""VOICE"",
                    ""SMS""
                  ]
                }
              ]
            }";
            var expectedUri     = $"{RestUrl}/number/search";
            NumberSearchRequest request;

            if (kitchenSink)
            {
                expectedUri += $"?country=GB&type=mobile-lvn&pattern=12345&search_pattern=1&features=SMS&size=10&index=1&api_key={ApiKey}&api_secret={ApiSecret}&";
                request      = new NumberSearchRequest {
                    Country = "GB", Type = "mobile-lvn", Pattern = "12345", SearchPattern = SearchPattern.Contains, Features = "SMS", Size = 10, Index = 1
                };
            }
            else
            {
                expectedUri += $"?country=GB&api_key={ApiKey}&api_secret={ApiSecret}&";
                request      = new NumberSearchRequest {
                    Country = "GB"
                };
            }
            Setup(expectedUri, expetedResponse);
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            NumbersSearchResponse response;

            if (passCreds)
            {
                response = client.NumbersClient.GetAvailableNumbers(request, creds);
            }
            else
            {
                response = client.NumbersClient.GetAvailableNumbers(request);
            }

            var number = response.Numbers[0];

            Assert.Equal(1234, response.Count);
            Assert.Equal("GB", number.Country);
            Assert.Equal("447700900000", number.Msisdn);
            Assert.Equal("mobile-lvn", number.Type);
            Assert.Equal("1.25", number.Cost);
            Assert.Equal("VOICE", number.Features[0]);
            Assert.Equal("SMS", number.Features[1]);
        }
Exemple #23
0
 public HighlightCount(IrcLayer irc, NexmoClient nexmo, IConfiguration configuration)
     : base(irc, nexmo, configuration)
 {
     if (!int.TryParse(configuration["MaxHighlightCount"], out maxHighlightCount))
     {
         maxHighlightCount = 5;
     }
 }
Exemple #24
0
 public SpamFilter(IrcLayer irc, NexmoClient nexmo, IConfiguration configuration)
     : base(irc, nexmo, configuration)
 {
     opsignalChannel = configuration["OpsignalChannel"];
     if (string.IsNullOrWhiteSpace(opsignalChannel) || !opsignalChannel.StartsWith('#'))
     {
         opsignalChannel = null;
     }
 }
Exemple #25
0
        public void SearchMessage(bool passCreds)
        {
            var id = "0A00000000ABCD00";
            var expectedResponse = @" {""type"": ""MT"",
              ""message-id"": ""0A00000000ABCD00"",
              ""account-id"": ""API_KEY"",
              ""network"": ""012345"",
              ""from"": ""Nexmo"",
              ""to"": ""447700900000"",
              ""body"": ""A text message sent using the Nexmo SMS API"",
              ""date-received"": ""2020-01-01 12:00:00"",
              ""price"": 0.0333,
              ""date-closed"": ""2020-01-01 12:00:00"",
              ""latency"": 3000,
              ""client-ref"": ""my-personal-reference"",
              ""status"": ""abc123"",
              ""final-status"": ""DELIVRD"",
              ""error-code"": ""0"",
              ""error-code-label"": ""Delivered""}";

            var expectedUri = $"{RestUrl}/search/message?id={id}&api_key={ApiKey}&api_secret={ApiSecret}&";

            Setup(expectedUri, expectedResponse);
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            Common.Message message;
            if (passCreds)
            {
                message = client.MessageSearchClient.SearchMessage(new MessageSearch.MessageSearchRequest {
                    Id = id
                }, creds);
            }
            else
            {
                message = client.MessageSearchClient.SearchMessage(new MessageSearch.MessageSearchRequest {
                    Id = id
                });
            }
            Assert.Equal("MT", message.Type);
            Assert.Equal("0A00000000ABCD00", message.MessageId);
            Assert.Equal("API_KEY", message.AccountId);
            Assert.Equal("012345", message.Network);
            Assert.Equal("Nexmo", message.From);
            Assert.Equal("447700900000", message.To);
            Assert.Equal("A text message sent using the Nexmo SMS API", message.Body);
            Assert.Equal("2020-01-01 12:00:00", message.DateReceived);
            Assert.True((decimal)0.0333 == message.Price);
            Assert.Equal("2020-01-01 12:00:00", message.DateClosed);
            Assert.True((decimal)3000 == message.Latency);
            Assert.Equal("my-personal-reference", message.ClientRef);
            Assert.Equal("abc123", message.Status);
            Assert.Equal("DELIVRD", message.FinalStatus);
            Assert.Equal("0", message.ErrorCode);
            Assert.Equal("Delivered", message.ErrorCodeLabel);
        }
        public void CreateCall(bool passCreds)
        {
            var expectedUri             = "https://api.nexmo.com/v1/calls/";
            var expectedResponse        = @"{
              ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"",
              ""status"": ""started"",
              ""direction"": ""outbound"",
              ""conversation_uuid"": ""CON-f972836a-550f-45fa-956c-12a2ab5b7d22""
            }";
            var expectedRequesetContent = @"{""to"":[{""number"":""14155550100"",""dtmfAnswer"":""p*123#"",""type"":""phone""}],""from"":{""number"":""14155550100"",""dtmfAnswer"":""p*123#"",""type"":""phone""},""ncco"":[{""text"":""Hello World"",""action"":""talk""}],""answer_url"":[""https://example.com/answer""],""answer_method"":""GET"",""event_url"":[""https://example.com/event""],""event_method"":""POST"",""machine_detection"":""continue"",""length_timer"":1,""ringing_timer"":1}";

            Setup(expectedUri, expectedResponse, expectedRequesetContent);

            var request = new Voice.CallCommand
            {
                To = new[]
                {
                    new Voice.Nccos.Endpoints.PhoneEndpoint
                    {
                        Number     = "14155550100",
                        DtmfAnswer = "p*123#"
                    }
                },
                From = new Voice.Nccos.Endpoints.PhoneEndpoint
                {
                    Number     = "14155550100",
                    DtmfAnswer = "p*123#"
                },
                Ncco = new Voice.Nccos.Ncco(new Voice.Nccos.TalkAction {
                    Text = "Hello World"
                }),
                AnswerUrl        = new [] { "https://example.com/answer" },
                AnswerMethod     = "GET",
                EventUrl         = new[] { "https://example.com/event" },
                EventMethod      = "POST",
                MachineDetection = "continue",
                LengthTimer      = 1,
                RingingTimer     = 1,
            };
            var          creds  = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey);
            var          client = new NexmoClient(creds);
            CallResponse response;

            if (passCreds)
            {
                response = client.VoiceClient.CreateCall(request, creds);
            }
            else
            {
                response = client.VoiceClient.CreateCall(request);
            }
            Assert.Equal("63f61863-4a51-4f6b-86e1-46edebcf9356", response.Uuid);
            Assert.Equal("CON-f972836a-550f-45fa-956c-12a2ab5b7d22", response.ConversationUuid);
            Assert.Equal("outbound", response.Direction);
            Assert.Equal("started", response.Status);
        }
        /// <summary>
        /// Sends sms through primary sms service i.e Nexmo SMS Gateway.
        /// </summary>
        /// <param name="phoneNumber">A string containing the receiving phone number.</param>
        /// <param name="messageBody">A string containing the message body text.</param>
        /// <param name="enableBackupServiceSupport">A bool specifies whether backup service support is enabled or not.</param>
        public static void SendThroughPrimaryApi(string phoneNumber, string messageBody, bool enableBackupServiceSupport = false)
        {
            if (_nexmoApiKey == null)
            {
                _nexmoApiKey = ConfigurationManager.AppSettings[NeeoConstants.NexmoApiKey].ToString();
            }

            if (_nexmoApiSecret == null)
            {
                _nexmoApiSecret = ConfigurationManager.AppSettings[NeeoConstants.NexmoApiSecret].ToString();
            }

            NexmoClient   nexmoClient   = new NexmoClient(_nexmoApiKey, _nexmoApiSecret);
            NexmoResponse smsResponse   = nexmoClient.SendMessage(phoneNumber, NeeoConstants.AppName, messageBody);
            MessageStatus messageStatus = (MessageStatus)Convert.ToUInt16(smsResponse.Messages[0].Status);

            switch (messageStatus)
            {
            case MessageStatus.InvalidMessage:
                LogManager.CurrentInstance.ErrorLogger.LogError(
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "Nexmo - Phone # : " + phoneNumber + " Status : " + messageStatus.ToString() + ", Description : " + NexmoDictionaries.MessageStatusDescriptionDictionary[(short)messageStatus]);
                if (enableBackupServiceSupport)
                {
                    SendThroughSecondaryApi(phoneNumber, messageBody);
                }
                else
                {
                    throw new ApplicationException(CustomHttpStatusCode.InvalidNumber.ToString("D"));
                }
                break;

            case MessageStatus.Throttled:
            case MessageStatus.MissingParams:
            case MessageStatus.InvalidParams:
            case MessageStatus.InvalidCredentials:
            case MessageStatus.InternalError:
            case MessageStatus.NumberBarred:
            case MessageStatus.PartnerAccountBarred:
            case MessageStatus.PartnerQuotaExceeded:
            case MessageStatus.CommunicationFailed:
            case MessageStatus.InvalidSignature:
            case MessageStatus.InvalidSenderAddress:
                LogManager.CurrentInstance.ErrorLogger.LogError(
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "Nexmo - Phone # : " + phoneNumber + " Status : " + messageStatus.ToString() + ", Description : " + NexmoDictionaries.MessageStatusDescriptionDictionary[(short)messageStatus]);
                if (enableBackupServiceSupport)
                {
                    SendThroughSecondaryApi(phoneNumber, messageBody);
                }
                else
                {
                    throw new ApplicationException(CustomHttpStatusCode.SmsApiException.ToString("D"));
                }
                break;
            }
        }
Exemple #28
0
        protected Action(IrcLayer irc, NexmoClient nexmo, IConfiguration configuration)
        {
            this.irc   = irc;
            this.nexmo = nexmo;

            reportChannel = configuration["OperChannel"];
            if (string.IsNullOrWhiteSpace(reportChannel))
            {
                reportChannel = "#opers";
            }
        }
Exemple #29
0
        public void TestUpdateNumber(bool passCreds, bool kitchenSink)
        {
            var    expectedResponse = @"{
              ""error-code"": ""200"",
              ""error-code-label"": ""success""
            }";
            var    expectedUri      = $"{RestUrl}/number/update";
            string expectdRequestContent;
            UpdateNumberRequest request;

            if (kitchenSink)
            {
                expectdRequestContent = $"country=GB&msisdn=447700900000&app_id=aaaaaaaa-bbbb-cccc-dddd-0123456789abc&moHttpUrl={HttpUtility.UrlEncode("https://example.com/webhooks/inbound-sms")}&" +
                                        $"moSmppSysType=inbound&voiceCallbackType=tel&voiceCallbackValue=447700900000&voiceStatusCallback={HttpUtility.UrlEncode("https://example.com/webhooks/status")}&" +
                                        $"api_key={ApiKey}&api_secret={ApiSecret}&";
                request = new UpdateNumberRequest
                {
                    Country             = "GB",
                    Msisdn              = "447700900000",
                    AppId               = "aaaaaaaa-bbbb-cccc-dddd-0123456789abc",
                    MoHttpUrl           = "https://example.com/webhooks/inbound-sms",
                    MoSmppSysType       = "inbound",
                    VoiceCallbackType   = "tel",
                    VoiceCallbackValue  = "447700900000",
                    VoiceStatusCallback = "https://example.com/webhooks/status"
                };
            }
            else
            {
                expectdRequestContent = $"country=GB&msisdn=447700900000&api_key={ApiKey}&api_secret={ApiSecret}&";
                request = new UpdateNumberRequest {
                    Country = "GB", Msisdn = "447700900000"
                };
            }

            Setup(expectedUri, expectedResponse, expectdRequestContent);

            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);
            NumberTransactionResponse response;

            if (passCreds)
            {
                response = client.NumbersClient.UpdateANumber(request, creds);
            }
            else
            {
                response = client.NumbersClient.UpdateANumber(request);
            }

            Assert.Equal("200", response.ErrorCode);
            Assert.Equal("success", response.ErrorCodeLabel);
        }
        public void TestUpdateCall(bool passCreds, bool inlineNcco, bool testTransfer)
        {
            var             uuid             = "63f61863-4a51-4f6b-86e1-46edebcf9356";
            var             expectedUri      = $"{ApiUrl}/v1/calls/{uuid}";
            var             expectedResponse = "";
            string          expectedRequestContent;
            Destination     destination;
            CallEditCommand request;

            if (testTransfer)
            {
                if (inlineNcco)
                {
                    expectedRequestContent = @"{""action"":""transfer"",""destination"":{""type"":""ncco"",""ncco"":[{""text"":""hello world"",""action"":""talk""}]}}";
                    destination            = new Destination {
                        Type = "ncco", Ncco = new Voice.Nccos.Ncco(new Voice.Nccos.TalkAction {
                            Text = "hello world"
                        })
                    };
                }
                else
                {
                    expectedRequestContent = @"{""action"":""transfer"",""destination"":{""type"":""ncco"",""url"":[""https://example.com/ncco.json""]}}";
                    destination            = new Destination {
                        Type = "ncco", Url = new[] { "https://example.com/ncco.json" }
                    };
                }
                request = new CallEditCommand {
                    Destination = destination, Action = CallEditCommand.ActionType.transfer
                };
            }
            else
            {
                expectedRequestContent = @"{""action"":""earmuff""}";
                request = new CallEditCommand {
                    Action = CallEditCommand.ActionType.earmuff
                };
            }
            Setup(expectedUri, expectedResponse, expectedRequestContent);
            bool response;
            var  creds  = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey);
            var  client = new NexmoClient(creds);

            if (passCreds)
            {
                response = client.VoiceClient.UpdateCall(uuid, request, creds);
            }
            else
            {
                response = client.VoiceClient.UpdateCall(uuid, request);
            }
            Assert.True(response);
        }
        public void TestBasicNIRequest(bool passCreds, bool kitchenSink)
        {
            //ARRANGE
            var expectedUri = $"{ApiUrl}/ni/basic/json";
            BasicNumberInsightRequest request;
            var expectedResponseContent = "{\"status\": 0,\"status_message\": \"Success\",\"request_id\": \"ca4f82b6-73aa-43fe-8c52-874fd9ffffff\",\"international_format_number\": \"15555551212\",\"national_format_number\": \"(555) 555-1212\"," +
                                          "\"country_code\": \"US\",\"country_code_iso3\": \"USA\",\"country_name\": \"United States of America\",\"country_prefix\": \"1\"}";

            if (kitchenSink)
            {
                expectedUri += $"?number=15555551212&country=GB&api_key={ApiKey}&api_secret={ApiSecret}&";
                request      = new BasicNumberInsightRequest
                {
                    Country = "GB",
                    Number  = "15555551212"
                };
            }
            else
            {
                expectedUri += $"?number=15555551212&api_key={ApiKey}&api_secret={ApiSecret}&";
                request      = new BasicNumberInsightRequest
                {
                    Number = "15555551212"
                };
            }
            Setup(expectedUri, expectedResponseContent);

            //ACT
            BasicInsightResponse response;
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            if (passCreds)
            {
                response = client.NumberInsightClient.GetNumberInsightBasic(request, creds);
            }
            else
            {
                response = client.NumberInsightClient.GetNumberInsightBasic(request);
            }

            //ASSERT
            Assert.Equal(0, response.Status);
            Assert.Equal("Success", response.StatusMessage);
            Assert.Equal("ca4f82b6-73aa-43fe-8c52-874fd9ffffff", response.RequestId);
            Assert.Equal("15555551212", response.InternationalFormatNumber);
            Assert.Equal("(555) 555-1212", response.NationalFormatNumber);
            Assert.Equal("US", response.CountryCode);
            Assert.Equal("USA", response.CountryCodeIso3);
            Assert.Equal("United States of America", response.CountryName);
            Assert.Equal("1", response.CountryPrefix);
        }