# @bandwidth/numbers 中文文档

规范地址：https://npmcn.com/package/%40bandwidth/numbers/

版本：2\.1\.0
npm 元数据更新时间：2026-10-13T20:18:59.008Z
中文译文更新时间：2026-11-07T16:19:24.623Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bandwidth/numbers
原文对照：https://npmcn.com/package/%40bandwidth/numbers/?lang=original
项目主页：https://github.com/bandwidth/node-numbers
源码仓库：https://github.com/Bandwidth/node-numbers

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：424 kB，100 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：4 个
- 首次发布：2020-01-03T20:46:09.857Z
- 最新版本发布：2026-10-13T20:18:58.671Z
- 近 30 天下载量：90231（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：17（近 12 个月 2 个）

## 中文简介

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

## 安装

```sh
npm install @bandwidth/numbers
```

也可以使用：`pnpm add @bandwidth/numbers`、`yarn add @bandwidth/numbers`、`bun add @bandwidth/numbers`

## README

# 节点数

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

## 开发者 Docs

-   [带宽 API 开发者 Docs](https://dev.bandwidth.com/)

## 其他节点 SDK

-   通讯: [https://github.com/ Bandwidth/node-messaging 页面存档备份,存于互联网档案馆](https://github.com/Bandwidth/node-messaging)
-   声音 : [https://github.com/ Bandwidth/node-voice 页面存档备份,存于互联网档案馆](https://github.com/Bandwidth/node-voice)

## 支持的版本

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

| 版本 | 支助级别 |  |
| :-- | :-- | :-- |
| < 7 个 | 不支持 |  |
| \> 7个 |  | 支助 |

## 发布注释

| 版本 | 页:1 |
| :-- | :-- |
| 1.1.0 国家 | 已添加导入 tn 功能, 基于附加承诺 `Async` 函数 |
| 1.2.0 (中文(简体) ) | 添加 CSR 查询功能 |
| 1.2.1 国家 | 固定订阅列表功能. 示例代码 : [示例/ 订阅 list and delete](https://npmcn.com/package/%40bandwidth/numbers/examples/subscription_list_and_delete.js) |
| 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
```

## 使用量

```js
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`)来自环境变量等安全来源或秘密管理器,例如:

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

### OAuth2 客户证书( 首选)

```js
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`数字 :

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

### 基本认证

```js
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`

### 列出可用数字的示例

#### 回电

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

#### 承诺链

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

```

#### 自动/等待

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

```

## 实例

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

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

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

```bash
node coveredRateCenters-sample.js
```

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

## API 对象

### 一般原则

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

示例

```Javascript
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 顺序

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

### 创建移动 Tns 顺序

```js
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 顺序信息

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

### 获得移动 Tns 顺序历史

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

## 应用程序

### 创建语音应用程序

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

### 创建信件应用程序

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

numbers.Application.createMessagingApplication(data, callback);
```

### 列出所有应用程序

```Javascript
numbers.Application.list(callback);
```

### 获取应用程序

```Javascript
numbers.Application.get(id, callback);
```

### 更新应用程序

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

### 删除应用程序

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

### 获取与 SippPeers 相关的应用程序

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

## 可用数字

### 可用数字区域代码

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

### 可用数字区码和本地名

```Javascript
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

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

## 城市

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

## 覆盖率中心

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

## 断开连接的数字

获取账户断开的数字列表

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

## 断开连接数字

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

### 创建断开连接

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

### 获取断开连接

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

### 向断开连接添加注释

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

### 获取断开连接的便条

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

## 德尔达

### 创建 Ddla

```Javascript
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

```Javascript
numbers.Dlda.get(id, callback);
```

### 获取 Dlda 历史

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

### 列表 Dldas

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

## 导入到账户

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

## 在服务编号中

### 列表服务数字

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

### 获取服务数字细节

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

## 标签

### 创建

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

### 带利德来

```Javascript
numbers.Lidbs.get(id, callback);
```

### 列表 属性

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

## 利比里亚国家警察检查员

### 检查利比里亚国家警察

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

## LSR 命令

### 创建 LSR 顺序

```Javascript
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 顺序

```Javascript
numbers.LsrOrder.get(id, callback);
```

### 列出 LSR 命令

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

### 更新 LSR 顺序

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

### 获取 LSR 顺序历史

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

### 获取 LSR 顺序注释

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

### 添加 LSR 顺序注释

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

## 命令

### 创建顺序

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

numbers.Order.create(order, callback);
```

### 获取顺序

```Javascript
numbers.Order.get(id, callback);
```

### 列表顺序

```Javascript
numbers.Order.list(query, callback);
```

### 顺序区域代码列表

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

```

### 实例方法

```Javascript
// 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

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

## 获取端口

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

## 列表端口

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

### 实例方法

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

```Javascript

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

## 端口输出

### 列表端口输出

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

### 获取端口

```Javascript
numbers.PortOut.get(id, callback);
```

## 费率中心

### 列表比率中心

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

## SIP 对等点

### 创建 SIP 端点

```Javascript
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 端点

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

### 列表 SIP 端点

```Javascript
numbers.SipPeer.list(siteId, callback);
```

### 更新 SIP 端点

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

### 删除 SIP 端点

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

### SipPeer TN 方法

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

### SipPeer 链接应用方法

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

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

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

## 站点

### 创建网站

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

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

### 更新网站

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

### 删除网站

```Javascript
site.delete(callback);
```

### 列出全部站点

```Javascript
numbers.Site.list(callback);
```

### 现场实例方法

```Javascript
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 方法

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

## 订阅

### 创建订阅

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

### 获取订阅

```Javascript
numbers.Subscription.get(id, callback);
```

### 列表订阅

```Javascript
numbers.Subscription.list(query, callback);
```

### 订阅实例方法

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

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

## 技术网

### 获取 TN

```Javascript
numbers.Tn.get(fullNumber, callback);
```

### 列表 TN

```Javascript
numbers.Tn.list(query, callback);
```

### TN 实例方法

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

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

### 获取 TN 保留

```Javascript
numbers.TnReservation.get(id, callback);
```

### 删除 TN 保留

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

## TN 选项

### 列出 TN 选项

```js
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 选项顺序

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

### 添加一个 PortOutPasscode

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

### 创建调用前号

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

### 启用短消息

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

## 主机发送

### 检查可导入性

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

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

### 创建导入TN命令

```js
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` 命令删除账户中的数字.

```js
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 顺序

```js
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 会丢出错误

#### 完成或处理

```js
const csrOrderId = "1234-abc"

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

#### 答错

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

## 紧急通知

### 列表收件人

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

### 获取收件人

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

### 替换收件人

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

### 创建收件人

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

### 删除收件人

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

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

### 列表组顺序

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

### 获取组顺序

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

### 创建组顺序

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

### 列表组

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

### 获取组

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

### 列出终点命令

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

### 获取端点顺序

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

### 创建端点命令

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

## 地理编码

### 提出地理代码请求

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

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

### 去买艾乌斯的

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

## 设置 Sippeer 来源设置

```js
var sipPeer = <create/get sip peer>;

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

## 获取账户产品

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

## 常见问题

### @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 和提交记录判断。

