@bandwidth/numbers

中文文档
2.1.0发布于 2026/10/14MITCommonJS构建来源已验证近 30 天下载 9万

NodeJs Client library for Bandwidth Numbers API

原始使用文档
文档目录144 节
  1. Developer Docs
  2. Other Node SDKs
  3. Supported Versions
  4. Release Notes
  5. Install
  6. Usage
  7. Authentication
  8. OAuth2 Client Credentials (Preferred)
  9. Basic Auth
  10. Async Methods
  11. Some Examples
  12. Example for listing Available Numbers
  13. Examples
  14. API Objects
  15. General principles
  16. Account
  17. Get Move Tns Orders
  18. Create Move Tns Order
  19. Get Move Tns Order Information
  20. Get Move Tns Order History
  21. Applications
  22. Create Voice Application
  23. Create Messaging Application
  24. List All Applications
  25. Get an Application
  26. Update an Application
  27. Delete an Application
  28. Get SipPeers Associated With and Application
  29. Available Numbers
  30. Available Numbers Area Code
  31. Available Numbers Area Code And Local Vanity
  32. Available NpaNxx
  33. Cities
  34. Covered Rate Centers
  35. Disconnected Numbers
  36. Disconnect Numbers
  37. Create Disconnect
  38. Get Disconnect
  39. Add Note to Disconnect
  40. Get Notes for Disconnect
  41. Dlda
  42. Create Ddla
  43. Get Dlda
  44. Get Dlda History
  45. List Dldas
  46. Import To Account
  47. In Service Numbers
  48. List InService Numbers
  49. Get InService Number Detail
  50. Lidb
  51. Create
  52. Get Lidb
  53. List Lidbs
  54. LNP Checker
  55. Check LNP
  56. LSR Orders
  57. Create LSR Order
  58. Get LSR Order
  59. List LSR Orders
  60. Update LSR Order
  61. Get LSR Order History
  62. Get LSR Order Notes
  63. Add LSR Order Note
  64. Orders
  65. Create Order
  66. Get Order
  67. List Orders
  68. List Area Codes for Order
  69. Order Instance Methods
  70. Port Ins
  71. Create PortIn
  72. Get PortIn
  73. List PortIns
  74. PortIn Instance methods
  75. PortIn File Management
  76. Port Out
  77. List PortOuts
  78. Get PortOut
  79. Rate Centers
  80. List Ratecenters
  81. SIP Peers
  82. Create SIP Peer
  83. Get SIP Peer
  84. List SIP Peers
  85. Update SIP Peer
  86. Delete SIP Peer
  87. SipPeer TN Methods
  88. SipPeer link Application Methods
  89. SipPeer SMS settings
  90. SipPeer SMS settings
  91. Sites
  92. Create A Site
  93. Updating a Site
  94. Deleting a Site
  95. Listing All Sites
  96. Site Instance Methods
  97. Site SipPeer Methods
  98. Subscriptions
  99. Create Subscription
  100. Get Subscription
  101. List Subscriptions
  102. Subscription Instance Methods
  103. TNs
  104. Get TN
  105. List TNs
  106. TN Instance Methods
  107. TN Reservation
  108. Create TN Reservation
  109. Get TN Reservation
  110. Delete TN Reservation
  111. TN Options
  112. List TN Options
  113. Find a specific TN Option Order
  114. Add a PortOutPasscode
  115. Create Call Forward Number
  116. Enable SMS
  117. Hosted Messaging
  118. Check importability
  119. Create importTNOrder
  120. Create removeImportedTnOrder
  121. CSR Lookup
  122. Create CSR Order
  123. Fetch Existing CSR Order
  124. Emergency Notification
  125. List Recipients
  126. Get Recipient
  127. Replace Recipient
  128. Create Recipient
  129. Delete Recipient
  130. List Group Orders
  131. Get Group Order
  132. Create Group Order
  133. List Group
  134. Get Group
  135. List Endpoint Orders
  136. Get Endpoint Order
  137. Create Endpoint Orders
  138. Geocoding
  139. Make a geocode request
  140. Aeuis
  141. List Aeuis's
  142. Get Aeuis's
  143. Set SipPeer Origination Settings
  144. Get Account Products

node-numbers

NodeJs Client library for Bandwidth Numbers API

Developer Docs

Other Node SDKs

Supported Versions

This SDK stable for node versions 7 and above

VersionSupport Level
<7Unsupported
> 7Supported

Release Notes

VersionNotes
1.1.0Added import tn functionality, added promise based Async functions
1.2.0Added CSR lookup functionality
1.2.1Fixed Subscription List functionality. Example code at: examples/subscription_list_and_delete
1.2.2Readme Typo for RemoveImportedTnOrder
1.3.0Added Emergency Calling Notification endpoints
1.4.0Added TnOptions endpoints and functionality, along with SMS options on sip peers.
1.6.0Added create origination settings for sip peers
1.7.0Added get products to account
1.7.1Fix TnOptions.create() callback bug

Install

Run

npm install @bandwidth/numbers

Usage

var numbers = require("@bandwidth/numbers");

//Using client directly
var client = new numbers.Client("accountId", "userName", "password");
numbers.Site.list(client, function(err, sites){...});

//Or you can use default client instance (do this only once)
numbers.Client.globalOptions.accountId = "accountId";
numbers.Client.globalOptions.userName = "userName";
numbers.Client.globalOptions.password = "password";

//Now you can call any functions without first arg 'client'

numbers.Site.list(function(err, sites){
  //Default client will be used to do this call
});

Authentication

The SDK supports two authentication methods: OAuth2 client credentials (preferred) and basic auth (username/password).

Never hard code credentials in source code. Load clientId/clientSecret (or userName/password) from a secure source such as environment variables or a secrets manager, e.g.:

numbers.Client.globalOptions.clientId = process.env.BANDWIDTH_CLIENT_ID;
numbers.Client.globalOptions.clientSecret = process.env.BANDWIDTH_CLIENT_SECRET;

OAuth2 Client Credentials (Preferred)

var numbers = require("@bandwidth/numbers");

//Using client directly
var client = new numbers.Client("accountId", null, null, process.env.BANDWIDTH_CLIENT_ID, process.env.BANDWIDTH_CLIENT_SECRET);
numbers.Site.list(client, function(err, sites){...});

//Or you can use default client instance (do this only once)
numbers.Client.globalOptions.accountId = "accountId";
numbers.Client.globalOptions.clientId = process.env.BANDWIDTH_CLIENT_ID;
numbers.Client.globalOptions.clientSecret = process.env.BANDWIDTH_CLIENT_SECRET;

//Now you can call any functions without first arg 'client'

numbers.Site.list(function(err, sites){
  //Default client will be used to do this call
});

When clientId/clientSecret are set, the client automatically fetches and refreshes an OAuth2 access token in the background, and transparently retries a request once if it gets a 401 response. If both OAuth credentials and a username/password are configured, the OAuth bearer token is used.

To manage the token yourself instead of relying on auto-refresh, pass { autoRefreshToken: false } as the client's options argument along with a tempAccessToken:

var client = new numbers.Client("accountId", null, null, "clientId", "clientSecret", {
  autoRefreshToken: false,
  tempAccessToken: "existingAccessToken"
});

Basic Auth

var numbers = require("@bandwidth/numbers");

//Using client directly
var client = new numbers.Client("accountId", process.env.BANDWIDTH_USERNAME, process.env.BANDWIDTH_PASSWORD);
numbers.Site.list(client, function(err, sites){...});

//Or you can use default client instance (do this only once)
numbers.Client.globalOptions.accountId = "accountId";
numbers.Client.globalOptions.userName = process.env.BANDWIDTH_USERNAME;
numbers.Client.globalOptions.password = process.env.BANDWIDTH_PASSWORD;

//Now you can call any functions without first arg 'client'

numbers.Site.list(function(err, sites){
  //Default client will be used to do this call
});

Async Methods

Each API Call also contains an async method that returns a promise for use with .then or async/await.

The async method is the original method name with Async added.

Some Examples

  • numbers.Site.create : numbers.Site.createAsync
  • numbers.AvailableNumbers.list : numbers.AvailableNumbers.listAsync
  • numbers.Order.create: numbers.Order.createAsync

Example for listing Available Numbers

Callbacks

// Callbacks
numbers.AvailableNumbers.list(query, (err, availableNumbers) => {
  if (err) {
    console.log(err);
  }
  else {
    console.log(availableNumbers);
  }
});

Promise Chaining

//Promise chaining
numbers.AvailableNumbers.listAsync(query)
.then(availableNumbers => {
  console.log(availableNumbers);
})
.catch(e => {
  console.log(e);
});

Async/Await

//Async/await
try {
  const availableNumbers = await numbers.AvailableNumbers.listAsync(query);
  console.log(availableNumbers);
}
catch (e) {
  console.log(e)
}

Examples

There is an 'examples' folder in the source tree that shows how each of the API objects work with simple example code. To run the examples:

$ cd examples
$ cp config.js.example config.js

Edit the config.js to match your IRIS credentials and run the examples individually. e.g.

node coveredRateCenters-sample.js

If the examples take command line parameters, you will get the usage by just executing the individual script.

API Objects

General principles

When fetching objects from the API, it will always return an object that has the client instantiated so that you can call dependent methods as well as update, delete.

Example:

numbers.Site.create({siteObject}, function(err,item){
  console.log("the site ID is: " + item.id);
  item.delete(function(err,res){ //no need to pass the client again
  });
});

Each entity has a get, list, create, update and delete method if appropriate.

All properties are camel-cased for Javascript readability, and are converted on the fly to the proper case by the internals of the API when converted to XML.

Account

Get Move Tns Orders

var orders = numbers.Account.getMoveTnsOrders(function(err, res){
    if (err){
        console.log(err)
    };
    console.log(res);
});

Create Move Tns Order

numbers = ["19195551234", "19195554321"]
data = {
  CustomerOrderId: "abc123",
  SiteId: "12345",    // DESTINATION sub-account (site)
  SipPeerId: "54321"    // DESTINATION location (sip-peer) (optional - if not inclided, tn(s) will provision to default sip-peer)
}
data.telephoneNumbers = [numbers.map(number => {return {telephoneNumber: number}})];
numbers.account.moveTns(client, data, callback);

Get Move Tns Order Information

numbers.account.getMoveTnsOrder(client, 'my-order-id-12345', callback);

Get Move Tns Order History

numbers.account.getMoveTnsOrderHistory(client, 'my-order-id-12345', callback);

Applications

Create Voice Application

var data = {
  appName:"test app",
  callInitiatedCallbackUrl: "http://example.com",
  callInitiatedMethod: "POST",
  callStatusCallbackUrl: "http://example.com",
  callStatusMethod: "POST"
  callbackCreds: {
    userId: 'my-id',
    password: 'my-password'
  }
};

numbers.Application.createVoiceApplication(data, callback);

Create Messaging Application

var data = {
  appName:"test app",
  msgCallbackUrl: "http://example.com",
  callbackCreds: {
    userId: 'my-id',
    password: 'my-password'
  }
};

numbers.Application.createMessagingApplication(data, callback);

List All Applications

numbers.Application.list(callback);

Get an Application

numbers.Application.get(id, callback);

Update an Application

numbers.Application.get(id, (err, app) => {
  app.appName = "new name";
  app.update(app, callback);
});

Delete an Application

numbers.Application.get(id, (err, app) => {
  app.delete(callback)
});

Get SipPeers Associated With and Application

numbers.Application.get(id, (err, app) => {
  app.getSipPeers(callback);
});

Available Numbers

Available Numbers Area Code

var res = await numbers.AvailableNumbers.listAsync({areaCode:"919", quantity:"5"});
console.log(res);

Available Numbers Area Code And Local Vanity

var res = await numbers.AvailableNumbers.listAsync({areaCode:"919", localVanity:"298", quantity:"5"});
console.log(res);

res = await numbers.AvailableNumbers.listAsync({areaCode:"919", localVanity:"2982", quantity:"5"});
console.log(res);

res = await numbers.AvailableNumbers.listAsync({areaCode:"919", localVanity:"29822", quantity:"5"});
console.log(res);

res = await numbers.AvailableNumbers.listAsync({areaCode:"919", localVanity:"298227", quantity:"5"});
console.log(res);

res = await numbers.AvailableNumbers.listAsync({areaCode:"919", localVanity:"2982272", quantity:"5"});
console.log(res);

Available NpaNxx

numbers.AvailableNpaNxx.list({areaCode:"818", quantity:5}, callback);

Cities

numbers.City.list({"available":true, "state":"CA"}, callback);

Covered Rate Centers

numbers.CoveredRateCenter.list({"zip":"27601"}, callback);

Disconnected Numbers

Retrieves a list of disconnected numbers for an account

numbers.DiscNumber.list({"areaCode":"919"}, callback);

Disconnect Numbers

The Disconnect object is used to disconnect numbers from an account. Creates a disconnect order that can be tracked

Create Disconnect

numbers.Disconnect.create("Disconnect Order Name", ["9195551212", "9195551213"], callback);

Get Disconnect

numbers.Disconnect.get("orderId", {tnDetail:true}, callback);

Add Note to Disconnect

var note = {userId: "my id", description: "Test"};
numbers.Disconnect.get("orderId", {tnDetail:true}, function(err,order){
  order.addNote(note, callback);
});

Get Notes for Disconnect

numbers.Disconnect.get("orderId", {tnDetail:true}, function(err,order){
  order.getNotes(callback);
});

Dlda

Create Ddla

var dlda = {
  customerOrderId:"Your Order Id",
  dldaTnGroups: [
    dldaTnGroup: {
      telephoneNumbers: ["9195551212"],
      subscriberType: "RESIDENTIAL",
      listingType: "LISTED",
      listingName:{
        firstName:"John",
        lastName:"Smith"
      },
      listAddress:true,
      address:{
        houseNumber: "123",
        streetName: "Elm",
        streetSuffix: "Ave",
        city: "Carpinteria",
        stateCode:"CA",
        zip:"93013",
        addressType: "DLDA"
      }
    }
  ]
}

numbers.Dlda.create(dlda, callback);

Get Dlda

numbers.Dlda.get(id, callback);

Get Dlda History

numbers.Dlda.get(id, function(err,dlda){
  dlda.getHistory(callback);
});

List Dldas

numbers.Dlda.list({telephoneNumber:"9195551212"}, callback);

Import To Account

This path is generally not available to Bandwidth accounts, and as such is not documented in this API

In Service Numbers

List InService Numbers

numbers.InServiceNumber.list({"areaCode":"919"}, callback);

Get InService Number Detail

numbers.InServiceNumber.get("9195551212", callback);

Lidb

Create

var data = {
  customerOrderId:"A test order",
  lidbTnGroups:{
    lidbTnGroup:{
      telephoneNumbers:["8048030097", "8045030098"],
      subscriberInformation:"Joes Grarage",
      useType: "RESIDENTIAL",
      visibility: "PUBLIC"
    }
  }
}
numbers.Lidbs.create(data, callback);

Get Lidb

numbers.Lidbs.get(id, callback);

List Lidbs

numbers.Lidbs.list({telephoneNumber:"9195551212"}, callback);

LNP Checker

Check LNP

var numbersList = ["9195551212", "9195551213"];
var fullCheck = true;
numbers.LnpChecker.check(numbersList, fullCheck, callback);

LSR Orders

Create LSR Order

var data = {
  pon:"Some Pon",
  customerOrderId: "MyId5",
  sPID:"123C",
  billingTelephoneNumber:"9192381468",
  requestedFocDate: "2015-11-15",
  authorizingPerson: "Jim Hopkins",
  subscriber:{
    subscriberType:"BUSINESS",
    businessName:"BusinessName",
    serviceAddress: {
      houseNumber:"11",
      streetName: "Park",
      streetSuffix: "Ave",
      city:"New York",
      stateCode: "NY",
      zip: "90025"
    },
    accountNumber:"123463",
    pinNumber:"1231"
  },
  listOfTelephoneNumbers: {
    telephoneNumber:["9192381848", "9192381467"]
  }
};

numbers.LsrOrder.create(data, callback);

Get LSR Order

numbers.LsrOrder.get(id, callback);

List LSR Orders

numbers.LsrOrder.list({pon:"Some Pon"}, callback);

Update LSR Order

numbers.LsrOrder.get("id", function(err, order){
  order.requestedFocDate = "2015-11-16";
  numbers.LsrOrder.update(order, callback);
})

Get LSR Order History

numbers.LsrOrder.get("id", function(err, order){
  order.getHistory(callback);
});

Get LSR Order Notes

numbers.LsrOrder.get("id", function(err,order){
  order.getNotes(callback);
});

Add LSR Order Note

var note = {userId: "my id", description: "Test"};
numbers.LsrOrder.get("id", function(err, order){
  order.addNote(note, callback);
});

Orders

Create Order

var order = {
  name:"A Test Order",
  siteId: 1111,
  existingTelephoneNumberOrderType: {
    telephoneNumberList:[
      {
        telephoneNumber:"9195551212"
      }
    ]
  }
};

numbers.Order.create(order, callback);

Get Order

numbers.Order.get(id, callback);

List Orders

numbers.Order.list(query, callback);

List Area Codes for Order

numbers.Order.get(id, function(err, order){
  order.getAreaCodes(callback);
});

Order Instance Methods

// get Area Codes
order.getAreaCodes(callback);

// add note to order
var note = {userId: "my id", description: "Test"};
order.addNote(note,callback);

//get Npa Nxxs
order.getNpaNxx(callback);

// get number totals
order.getTotals(callback);

// get all Tns for an order
order.getTns(callback)

// get order history
order.getHistory(callback);

// get order notes
order.getNotes(callback);

Port Ins

Create PortIn

var data = {
  siteId:1234,
  peerId:5678,
  billingTelephoneNumber: "9195551212",
  subscriber: {
    subscriberType: "BUSINESS",
    businessName: "Company",
    serviceAddress: {
      houseNumber: "123",
      streetName: "EZ Street",
      city: "Raleigh",
      stateCode: "NC",
      county: "Wake"
    }
  },
  loaAuthorizingPerson: "Joe Blow",
  listOfPhoneNumbers: {
    phoneNumber:["9195551212"]
  },
  billingType: "PORTIN"
};

numbers.PortIn.create(data, callback);

Get PortIn

numbers.PortIn.get("id", callback)

List PortIns

var query = {pon:"a pon"};
numbers.PortIn.list(query, function(err, list){
  console.log(JSON.stringify(list));
});

PortIn Instance methods

// fetch instance using PortIn.get(callback, portIn)
portIn.update(data, callback);
portIn.delete(callback);
portIn.getAreaCodes(callback);
portIn.getNpaNxx(callback);
portIn.getTotals(callback);
portIn.getTns(callback);
portIn.getNotes(callback);
portIn.addNote(callback);
portIn.getActivationStatus(callback);

PortIn File Management


numbers.PortIn.get("id", function(err, portIn){
  // Add File
  portIn.createFile(fs.createReadStream("myFile.txt"), callback);

  // Update File
  portIn.updateFile("myFile.txt", fs.createReadStream("myFile.txt"), callback);

  // Get File
  portIn.getFile("myFile.txt", callback);

  // Get File Metadata
  portIn.getFileMetadata("myFile.txt", callback);

  // Get Files
  portIn.getFiles(callback);
});

Port Out

List PortOuts

var query = {"status":"complete"}
numbers.PortOut.list(query, callback);

Get PortOut

numbers.PortOut.get(id, callback);

Rate Centers

List Ratecenters

var query = {"available":true, "state":"CA"}
numbers.RateCenter.list(query, callback);

SIP Peers

Create SIP Peer

var data = {
  peerName:"A New SIP Peer",
  isDefaultPeer:false,
  shortMessagingProtocol:"SMPP",    // `HTTP` for use with the v2 messaging API
  siteId:selectedSite,
  voiceHosts:[    // optional
    {
      host:{
        hostName:"1.1.1.1"
      }
    }
  ],
  smsHosts:[    // optional
    {
      host:{
        hostName:"1.1.1.1"
      }
    }
  ]
};

numbers.SipPeer.create(data, callback);

Get SIP Peer

numbers.SipPeer.get(siteId, sipPeerId, callback);

List SIP Peers

numbers.SipPeer.list(siteId, callback);

Update SIP Peer

sipPeer.peerName = "Some new name";
sipPeer.update(sipPeer, callback);

Delete SIP Peer

numbers.SipPeer.get(function(err, sipPeer){
  sipPeer.delete(callback);
});

SipPeer TN Methods

numbers.SipPeer.get(function(err,sipPeer){
  // get TN for this peer
  sipPeer.getTns(number, callback);

  // get all TNs for this peer
  sipPeer.getTns(callback);

  // Update TNs for this peer
  var tns = {fullNumber: "123456", rewriteUser: "test"};
  sipPeer.updateTns(number, tns, callback);

  // Move Tns to new peer
  var numbersToMove = ["9195551212", "9195551213"];
  sipPeer.moveTns(numbersToMove, callback);
});
numbers.SipPeer.get(function(err,sipPeer){
  // List application associated with this peer
  sipPeer.listApplication(callback);

  // Associate an application with this peer
  var appId = "my-application-id";
  sipPeer.editApplication({httpMessagingV2AppId: appId}, callback);

  // Dissociate all applications with this peer
  sipPeer.removeApplication(callback);

SipPeer SMS settings

numbers.SipPeer.get(function(err,sipPeer){
  // Get the sms settings associated with the peer
  sipPeer.getSmsSettings(callback);

  var desiredsettings = {
    sipPeerSmsFeatureSettings: {
      tollFree: true,
      zone1: false,
      zone2: true,
      protocol: "HTTP"
    }
  };
  //Change settings
  sipPeer.editSmsSettings(desiredsettings, callback);

  //Create settings
  sipPeer.createSmsSettings(desiredsettings, callback);

  //Delete
  sipPeer.deleteSmsSettings(callback);

SipPeer SMS settings

numbers.SipPeer.get(function(err,sipPeer){
  // Get the mms settings associated with the peer
  sipPeer.getMmsSettings(callback);

  var desiredsettings = {
      mmsSettings: {
        protocol: 'HTTP'
      },
      protocols: {
        HTTP: {
          httpSettings: {
            proxyPeerId: 500017
          }
        }
      }
    }
  //Change settings
  sipPeer.editMmsSettings(desiredsettings, callback);

  //Create settings
  sipPeer.createMmsSettings(desiredsettings, callback);

  //Delete
  sipPeer.deleteMmsSettings(callback);

Sites

Create A Site

A site is what is called Sub-Account in the web UI.

var site = {
  name:"A new site",
  description:"A new description",
  address:{
    houseNumber: "123",
    streetName: "Anywhere St",
    city: "Raleigh",
    stateCode:"NC",
    zip: "27609",
    addressType: "Service"
  }
};
numbers.Site.create(site, callback);

Updating a Site

site.name = "Some new name";
site.update(site, callback);

Deleting a Site

site.delete(callback);

Listing All Sites

numbers.Site.list(callback);

Site Instance Methods

numbers.Site.get(id, function(err,site){
  // getInService numbers
  site.getInserviceNumbers(query, callback);

  // get Orders
  site.getOrders(query, callback);

  // get PortIns
  site.getPortIns(query, callback);

  // get Total Tns
  site.getTotalTns(query, callback);
});

Site SipPeer Methods

numbers.Site.get(id, function(err,site){
  // get Sip Peers
  site.getSipPeers(callback);

  // get Sip Peer
  site.getSipPeer(id, callback);

  // create Sip Peer
  var sipPeer = {name:"SIP Peer"};
  site.createSipPeer(sipPeer, callback);
});

Subscriptions

Create Subscription

var subscription = {
  orderType:"orders",
  callbackSubscription: {
    URL:"http://mycallbackurl.com",
    user:"userid",
    expiry: 12000
  }
};
numbers.Subscription.create(subscription, callback);

Get Subscription

numbers.Subscription.get(id, callback);

List Subscriptions

numbers.Subscription.list(query, callback);

Subscription Instance Methods

numbers.Subscription.get(id, function(err, subscription){
  // update subscription
  var updatedData = {orderType:"portins"};
  subscription.update(updatedData, callback)

  // delete subscription
  subscription.delete(callback);
});

TNs

Get TN

numbers.Tn.get(fullNumber, callback);

List TNs

numbers.Tn.list(query, callback);

TN Instance Methods

numbers.Tn.get(fullNumber, function(err, tn){
  // Get TN Details
  tn.getTnDetails(callback);

  // Get Sites
  tn.getSites(callback);

  // Get Sip Peers
  tn.getSipPeers(callback);

  // Get Rate Center
  tn.getRateCenter(callback)
});

TN Reservation

Create TN Reservation

numbers.TnReservation.create({"reservedTn":"9195551212"}, callback);

Get TN Reservation

numbers.TnReservation.get(id, callback);

Delete TN Reservation

numbers.TnReservation.get(id, function(err, tn){
  tn.delete(callback);
});

TN Options

List TN Options

const query = {
  createdDateFrom : "2013-10-22T00:00:00.000Z",
  orderDetails: true,
  tn: 123456789
}
numbers.TnOption.list(client, query, (err, tnOptions) => {
  if (err) {
    console.error(err);
  }
  console.log(tnOptions);
})

Find a specific TN Option Order

const tnOptionOrderId = 'fakeOrderId';
numbers.TnOption.get(tnOptionOrderId, (err, tnOption) => {
  if (err) {
    console.error(err);
  }
  console.log(tnOptions);
})

Add a PortOutPasscode

const tnOptionsOrder = {
  customerOrderId: 'myOrderId',
  tnOptionGroups: [
    {
      portOutPasscode: 'mypass1',
      telephoneNumbers: ['1234567890']
    }
  ]
}
numbers.TnOption.create(tnOptionsOrder, callback) //for callback example see TnOption.get

Create Call Forward Number

const tnOptionsOrder = {
  customerOrderId: 'myOrderId',
  tnOptionGroups: [
    {
      callForward: '2345678901',
      telephoneNumbers: ['1234567890']
    }
  ]
}
numbers.TnOption.create(tnOptionsOrder, callback) //for callback example see TnOption.get

Enable SMS

const tnOptionsOrder = {
  customerOrderId: 'myOrderId',
  tnOptionGroups: [
    {
      sms: 'on',
      telephoneNumbers: ['1234567890']
    }
  ]
}
numbers.TnOption.create(tnOptionsOrder, callback) //for callback example see TnOption.get

Hosted Messaging

Check importability

const numbers = ["1111", "2222"];

try {
  const importResults = await ImportTnChecker.checkAsync(numbers);
  console.log(importResults);
}
catch (e) {
  console.log(e)
}

Create importTNOrder

const numbers = ["1111", "2222"];

const data = {
  customerOrderId: "1111",
  siteId: "222",
  sipPeerId: "333",
  loaAuthorizingPerson: "LoaAuthorizingPerson",
  subscriber: {
    name: "ABC Inc.",
    serviceAddress: {
      houseNumber: "11235",
      streetName: "StreetName",
      stateCode: "NC",
      city: "City",
      county: "county",
      zip: "27606"
    }
  }
};

try {
  const importTnOrder = await ImportTnOrder.createAsync(numbers);
  console.log(importTnOrder);
}
catch (e) {
  console.log(e)
}

Create removeImportedTnOrder

To restore the messaging functionality to the original owner, create a removeImportedTnOrder order to remove the numbers from your account.

const numbers = ["1111", "2222"];
const customerOrderId = "customerOrderId"

try {
  const importTnOrder = await RemoveImportedTnOrder.createAsync(customerOrderId, numbers);
  console.log(importTnOrder);
}
catch (e) {
  console.log(e)
}

CSR Lookup

Create CSR Order

const data = {
  customerOrderId: "MyId5",
  WorkingOrBillingTelephoneNumber:"9198675309",
  accountNumber:"123463",
  endUserPIN:"1231"
};

try {
  const csrOrderResponse = await CsrOrder.createAsync(data);
  console.log(csrOrderResponse.orderId);
  //31e0b16b-4720-4f2e-bb99-1399eeb2ff9e
}
catch (e) {
  console.log(e);
}

Fetch Existing CSR Order

If the CSR order is in an FAILED state, the SDK will throw an error

COMPLETE or PROCESSING resposne

const csrOrderId = "1234-abc"

try {
  const csrOrderData = await CsrOrder.getAsync(csrOrderId);
  console.log(csrOrderData.status);
  //COMPLETE
}
catch (e) {
  console.log(e);
}

FAILED response

const csrOrderId = "1234-abc"

try {
  const csrOrderData = await CsrOrder.getAsync(csrOrderId);
  console.log(csrOrderData.status);
  //Won't fire, as request is failed
}
catch (e) {
  console.log(e);
// [BandwidthError: CSR is not available for this TN] {
//   code: 26500,
//   message: 'CSR is not available for this TN',
//   httpStatus: 200
// }
}

Emergency Notification

List Recipients

try {
  const response = await EmergencyNotification.listRecipientsAsync(client, {"Size": "20"} );
  console.log(response.emergencyNotificationRecipients.emergencyNotificationRecipient.length);
  //4
}
catch (e) {
  console.log(e);
}

Get Recipient

try {
  const response = await EmergencyNotification.getRecipientAsync(client, "enrid" );
  console.log(response.emergencyNotificationRecipient.identifier);
  //63865500-0904-46b1-9b4f-7bd237a26363
}
catch (e) {
  console.log(e);
}

Replace Recipient

var en = new EmergencyNotification();
en.enrid = 123;

try {
  const response = await en.replaceRecipientAsync(client, recipient);
  console.log(response.emergencyNotificationRecipient.identifier);
  //63865500-0904-46b1-9b4f-7bd237a26363
}
catch (e) {
  console.log(e);
}

Create Recipient

try {
  const response = await EmergencyNotification.createRecipientAsync(client, recipient);
  console.log(response.emergencyNotificationRecipient.identifier);
  //63865500-0904-46b1-9b4f-7bd237a26363
}
catch (e) {
  console.log(e);
}

Delete Recipient

var en = new EmergencyNotification();
en.enrid = 123;

try {
  const response = await en.deleteRecipientAsync(client);
}
catch (e) {
  console.log(e);
}

List Group Orders

try {
  const response = await EmergencyNotification.listGroupOrdersAsync(helper.createClient(), {Size: "20"});
  console.log(response.emergencyNotificationGroupOrders.emergencyNotificationGroupOrder.length);
  //20
}
catch (e) {
  console.log(e);
}

Get Group Order

try {
  const response = await EmergencyNotification.getGroupOrderAsync(helper.createClient(), "orderId");
  console.log(response.emergencyNotificationGroup.orderId);
  //orderId
}
catch (e) {
  console.log(e);
}

Create Group Order

try {
  const response = EmergencyNotification.createGroupOrderAsync(helper.createClient(), groupOrder);
  console.log(response.OrderId);
  //900b3646-18df-4626-b237-3a8de648ebf6
}
catch (e) {
  console.log(e);
}

List Group

try {
  const response = await EmergencyNotification.listGroupsAsync(client, {"Size": "20"} );
  console.log(response.emergencyNotificationGroups.emergencyNotificationGroup.length);
  //20
}
catch (e) {
  console.log(e);
}

Get Group

try {
  const response = await EmergencyNotification.getGroupAsync(client, "engid");
  console.log(response.emergencyNotificationGroup.identifier);
  //63865500-0904-46b1-9b4f-7bd237a26363
}
catch (e) {
  console.log(e);
}

List Endpoint Orders

try {
  const response = await EmergencyNotification.listEnpointOrdersAsync(client, {"Size": "20"} );
  console.log(response.emergencyNotificationEndpointOrders.emergencyNotificationEndpointOrder.length);
  //20
}
catch (e) {
  console.log(e);
}

Get Endpoint Order

try {
  const response = await EmergencyNotification.getEndpointOrderAsync(client, "orderId" );
  console.log(response.emergencyNotificationEndpointOrder.orderId);
  //orderId
}
catch (e) {
  console.log(e);
}

Create Endpoint Orders

try {
  const response = await EmergencyNotification.createEndpointOrderAsync(client, endpoint );
  console.log(response.emergencyNotificationEndpointOrder.orderId);
  //3e9a852e-2d1d-4e2d-84c3-87223a78cb70
}
catch (e) {
  console.log(e);
}

Geocoding

Make a geocode request

var data = data = {
  addressLine1: "900 Main Campus Dr",
  city: 'raleigh',
  stateCode: 'nc',
  zip: 27606
}

numbers.Geocode.request(data, function(error, address) {
  if (error) {
    return callback(error)
  }
  console.log(address.stateCode, address.houseNumber, address.streetName, address.streetSuffix, address.city)
  //NC, 900, Main Campus, Dr, Raleigh
});

Aeuis

List Aeuis's

try {
  const response = await Aeuis.listAsync(client, {Size: 20} );
  console.log(response.AlternateEndUserIdentifiers.AlternateEndUserIdentifier.length);
  //20
}
catch (e) {
  console.log(e);
}

Get Aeuis's

try {
  const response = await Aeuis.getAsync(client, "acid" );
  console.log(response.AlternateEndUserIdentifier.Identifier);
  //acid
}
catch (e) {
  console.log(e);
}

Set SipPeer Origination Settings

var sipPeer = <create/get sip peer>;

var voiceHttpSettings = {
  httpVoiceV2AppId: "abcd-1234"
}
await sipPeer.createOriginationSettingsAsync({voiceProtocol: "HTTP", httpSettings: voiceHttpSettings})

Get Account Products

console.log(await numbers.Account.getProductsAsync());

版本与发布记录

@bandwidth/numbers 共发布 17 个版本,首次发布于 2020/01/04;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.1.0latest2026/10/1425 天前
2.0.02026/01/089 个月前
1.10.02024/06/052 年前
1.9.22024/01/032 年前
1.9.12023/03/293 年前
1.9.02022/03/014 年前

关于 @bandwidth/numbers 的常见问题

@bandwidth/numbers 是什么?

NodeJs Client library for Bandwidth Numbers API

如何安装 @bandwidth/numbers?

在项目目录运行 npm install @bandwidth/numbers,或使用 pnpm add / yarn add / bun add。

@bandwidth/numbers 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bandwidth__numbers 是否存在。

@bandwidth/numbers 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bandwidth/numbers 可以商用吗?

@bandwidth/numbers 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bandwidth/numbers 的下载量有多少?

根据 npm 官方下载统计,@bandwidth/numbers 在 2026/10/08 – 2026/11/06 这 30 天内被下载 90,231 次,日均约 3,008 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bandwidth/numbers 还在维护吗?

最新版本 2.1.0 发布于 2026/10/14(25 天前);至今共发布 17 个版本,其中过去 12 个月发布了 2 个;首次发布于 2020/01/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。