@bandwidth/numbers

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

Bandwidth 数字 API 的节点Js客户端库

中文使用文档
文档目录144 节
  1. 开发者 Docs
  2. 其他节点 SDK
  3. 支持的版本
  4. 发布注释
  5. 安装
  6. 使用量
  7. 认证
  8. OAuth2 客户证书( 首选)
  9. 基本认证
  10. 同步方法
  11. 一些实例
  12. 列出可用数字的示例
  13. 实例
  14. API 对象
  15. 一般原则
  16. 账户
  17. 获得移动 Tns 顺序
  18. 创建移动 Tns 顺序
  19. 获取移动 Tns 顺序信息
  20. 获得移动 Tns 顺序历史
  21. 应用程序
  22. 创建语音应用程序
  23. 创建信件应用程序
  24. 列出所有应用程序
  25. 获取应用程序
  26. 更新应用程序
  27. 删除应用程序
  28. 获取与 SippPeers 相关的应用程序
  29. 可用数字
  30. 可用数字区域代码
  31. 可用数字区码和本地名
  32. 可用的 NpaNxx
  33. 城市
  34. 覆盖率中心
  35. 断开连接的数字
  36. 断开连接数字
  37. 创建断开连接
  38. 获取断开连接
  39. 向断开连接添加注释
  40. 获取断开连接的便条
  41. 德尔达
  42. 创建 Ddla
  43. 获取 Dlda
  44. 获取 Dlda 历史
  45. 列表 Dldas
  46. 导入到账户
  47. 在服务编号中
  48. 列表服务数字
  49. 获取服务数字细节
  50. 标签
  51. 创建
  52. 带利德来
  53. 列表 属性
  54. 利比里亚国家警察检查员
  55. 检查利比里亚国家警察
  56. LSR 命令
  57. 创建 LSR 顺序
  58. 获取 LSR 顺序
  59. 列出 LSR 命令
  60. 更新 LSR 顺序
  61. 获取 LSR 顺序历史
  62. 获取 LSR 顺序注释
  63. 添加 LSR 顺序注释
  64. 命令
  65. 创建顺序
  66. 获取顺序
  67. 列表顺序
  68. 顺序区域代码列表
  69. 实例方法
  70. 导入端口
  71. 创建端口In
  72. 获取端口
  73. 列表端口
  74. 实例方法
  75. PortIn 文件管理
  76. 端口输出
  77. 列表端口输出
  78. 获取端口
  79. 费率中心
  80. 列表比率中心
  81. SIP 对等点
  82. 创建 SIP 端点
  83. 获取 SIP 端点
  84. 列表 SIP 端点
  85. 更新 SIP 端点
  86. 删除 SIP 端点
  87. SipPeer TN 方法
  88. SipPeer 链接应用方法
  89. SipPeer 短消息设置
  90. SipPeer 短消息设置
  91. 站点
  92. 创建网站
  93. 更新网站
  94. 删除网站
  95. 列出全部站点
  96. 现场实例方法
  97. 站点 sipPeer 方法
  98. 订阅
  99. 创建订阅
  100. 获取订阅
  101. 列表订阅
  102. 订阅实例方法
  103. 技术网
  104. 获取 TN
  105. 列表 TN
  106. TN 实例方法
  107. TN 保留
  108. 创建 TN 保留
  109. 获取 TN 保留
  110. 删除 TN 保留
  111. TN 选项
  112. 列出 TN 选项
  113. 找到特定的 TN 选项顺序
  114. 添加一个 PortOutPasscode
  115. 创建调用前号
  116. 启用短消息
  117. 主机发送
  118. 检查可导入性
  119. 创建导入TN命令
  120. 创建已删除导入 调序
  121. CSR 查询
  122. 创建 CSR 顺序
  123. 获取已存在的 CSR 顺序
  124. 紧急通知
  125. 列表收件人
  126. 获取收件人
  127. 替换收件人
  128. 创建收件人
  129. 删除收件人
  130. 列表组顺序
  131. 获取组顺序
  132. 创建组顺序
  133. 列表组
  134. 获取组
  135. 列出终点命令
  136. 获取端点顺序
  137. 创建端点命令
  138. 地理编码
  139. 提出地理代码请求
  140. 艾乌斯
  141. 列表 Aeuis 名称
  142. 去买艾乌斯的
  143. 设置 Sippeer 来源设置
  144. 获取账户产品

节点数

Bandwidth 数字 API 的节点Js客户端库

开发者 Docs

其他节点 SDK

支持的版本

节点版本 7 及以上 此 SDK 稳定

版本支助级别
< 7 个不支持
> 7个支助

发布注释

版本页:1
1.1.0 国家已添加导入 tn 功能, 基于附加承诺 Async 函数
1.2.0 (中文(简体) )添加 CSR 查询功能
1.2.1 国家固定订阅列表功能. 示例代码 : 示例/ 订阅 list and delete
1.2.2 国家读取 Typo 为 RemoveImportedTnOrder
1.3.0 (单位:千美元)添加紧急呼叫通知端点
1.4.0 (中文(简体) )添加了 Tnoptions 端点和功能,同时在 sip 端端添加了 SMS 选项.
1.6.0 (简体中文)为 sip 同伴添加创建源代码设置
1.7.0 (单位:千美元)添加产品入账
1.7.1 联合国修复 Tn 选项. create () 回调错误

安装

运行

npm install @bandwidth/numbers

使用量

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
});

认证

SDK支持两种认证方法: OAuth2 客户端证书(首选)和基本验证(用户名/密码).

源代码中永远不要硬代码证书. 装入 clientId编号 :clientSecret (或 userName编号 :password)来自环境变量等安全来源或秘密管理器,例如:

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

OAuth2 客户证书( 首选)

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
});

何时 clientId编号 :clientSecret 设置,客户端在背景中自动获取并刷新 OAuth2 访问令牌,并透明地重复请求一次,如果它得到一个 401 反应。 如果同时配置了OAuth证书和一个用户名/密码字,则使用OAuth无记名符号.

要自己管理这个标志 而不是依靠自动更新,通过 { autoRefreshToken: false } 作为客户的 options 参数和参数 tempAccessToken数字 :

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

基本认证

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
});

同步方法

每个 API 调用中还包含一个 async 方法, 它返回要使用的承诺 .then 或者说 async编号 :await。 。 。 .

合成法是原始方法名称,使用 Async 页:1.

一些实例

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

列出可用数字的示例

回电

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

承诺链

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

自动/等待

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

实例

源树上有一个"示例"文件夹,显示每个API对象如何用简单的示例代码工作. 举例来说:

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

编辑配置( config.js)以匹配您的 IRIS 证书并逐一运行示例 。 譬如说.

node coveredRateCenters-sample.js

如果实例使用命令行参数, 您只需执行单个脚本即可获得使用 .

API 对象

一般原则

在从 API 取出对象时, 它总是会返回拥有客户端的对象 即时化,以便您可以调用依赖方法以及更新,删除.

示例

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
  });
});

每个实体都有获取、列表、创建、更新和删除方法.

所有属性都符合Javascript可读性,在苍蝇上转换为正版 选项.

账户

获得移动 Tns 顺序

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

创建移动 Tns 顺序

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);

获取移动 Tns 顺序信息

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

获得移动 Tns 顺序历史

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

应用程序

创建语音应用程序

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);

创建信件应用程序

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

numbers.Application.createMessagingApplication(data, callback);

列出所有应用程序

numbers.Application.list(callback);

获取应用程序

numbers.Application.get(id, callback);

更新应用程序

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

删除应用程序

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

获取与 SippPeers 相关的应用程序

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

可用数字

可用数字区域代码

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

可用数字区码和本地名

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);

可用的 NpaNxx

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

城市

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

覆盖率中心

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

断开连接的数字

获取账户断开的数字列表

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

断开连接数字

断接对象用于断开账户中的数字. 创建可跟踪的断开命令

创建断开连接

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

获取断开连接

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

向断开连接添加注释

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

获取断开连接的便条

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

德尔达

创建 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);

获取 Dlda

numbers.Dlda.get(id, callback);

获取 Dlda 历史

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

列表 Dldas

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

导入到账户

此路径一般不为 Bandwidth 账户所使用, 因此在本 API 中没有记录

在服务编号中

列表服务数字

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

获取服务数字细节

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

标签

创建

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

带利德来

numbers.Lidbs.get(id, callback);

列表 属性

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

利比里亚国家警察检查员

检查利比里亚国家警察

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

LSR 命令

创建 LSR 顺序

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);

获取 LSR 顺序

numbers.LsrOrder.get(id, callback);

列出 LSR 命令

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

更新 LSR 顺序

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

获取 LSR 顺序历史

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

获取 LSR 顺序注释

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

添加 LSR 顺序注释

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

命令

创建顺序

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

numbers.Order.create(order, callback);

获取顺序

numbers.Order.get(id, callback);

列表顺序

numbers.Order.list(query, callback);

顺序区域代码列表

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

实例方法

// 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);

导入端口

创建端口In

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);

获取端口

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

列表端口

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

实例方法

// 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 文件管理


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);
});

端口输出

列表端口输出

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

获取端口

numbers.PortOut.get(id, callback);

费率中心

列表比率中心

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

SIP 对等点

创建 SIP 端点

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);

获取 SIP 端点

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

列表 SIP 端点

numbers.SipPeer.list(siteId, callback);

更新 SIP 端点

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

删除 SIP 端点

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

SipPeer TN 方法

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 短消息设置

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 短消息设置

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);

站点

创建网站

一个网站是网络用户界面中所谓的子账户.

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);

更新网站

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

删除网站

site.delete(callback);

列出全部站点

numbers.Site.list(callback);

现场实例方法

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);
});

站点 sipPeer 方法

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);
});

订阅

创建订阅

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

获取订阅

numbers.Subscription.get(id, callback);

列表订阅

numbers.Subscription.list(query, callback);

订阅实例方法

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

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

技术网

获取 TN

numbers.Tn.get(fullNumber, callback);

列表 TN

numbers.Tn.list(query, callback);

TN 实例方法

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 保留

创建 TN 保留

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

获取 TN 保留

numbers.TnReservation.get(id, callback);

删除 TN 保留

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

TN 选项

列出 TN 选项

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);
})

找到特定的 TN 选项顺序

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

添加一个 PortOutPasscode

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

创建调用前号

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

启用短消息

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

主机发送

检查可导入性

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

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

创建导入TN命令

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)
}

创建已删除导入 调序

要将信件功能恢复到原所有者,请创建 removeImportedTnOrder 命令删除账户中的数字.

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

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

CSR 查询

创建 CSR 顺序

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);
}

获取已存在的 CSR 顺序

如果CSR命令处于故障状态, SDK 会丢出错误

完成或处理

const csrOrderId = "1234-abc"

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

答错

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
// }
}

紧急通知

列表收件人

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

获取收件人

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

替换收件人

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);
}

创建收件人

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

删除收件人

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

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

列表组顺序

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

获取组顺序

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

创建组顺序

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

列表组

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

获取组

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

列出终点命令

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

获取端点顺序

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

创建端点命令

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

地理编码

提出地理代码请求

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 名称

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

去买艾乌斯的

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

设置 Sippeer 来源设置

var sipPeer = <create/get sip peer>;

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

获取账户产品

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

版本与发布记录

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

版本发布日期距今
2.1.0latest2026/10/1424 天前
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 是什么?

Bandwidth 数字 API 的节点Js客户端库

如何安装 @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(24 天前);至今共发布 17 个版本,其中过去 12 个月发布了 2 个;首次发布于 2020/01/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。