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); }
/// <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()); }
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..."); } }
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..."); } }
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; }
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); } }
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); }
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); }
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); }
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); } }
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); } }
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); }
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]); }
public HighlightCount(IrcLayer irc, NexmoClient nexmo, IConfiguration configuration) : base(irc, nexmo, configuration) { if (!int.TryParse(configuration["MaxHighlightCount"], out maxHighlightCount)) { maxHighlightCount = 5; } }
public SpamFilter(IrcLayer irc, NexmoClient nexmo, IConfiguration configuration) : base(irc, nexmo, configuration) { opsignalChannel = configuration["OpsignalChannel"]; if (string.IsNullOrWhiteSpace(opsignalChannel) || !opsignalChannel.StartsWith('#')) { opsignalChannel = null; } }
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; } }
protected Action(IrcLayer irc, NexmoClient nexmo, IConfiguration configuration) { this.irc = irc; this.nexmo = nexmo; reportChannel = configuration["OperChannel"]; if (string.IsNullOrWhiteSpace(reportChannel)) { reportChannel = "#opers"; } }
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); }