すでに購入済みの日本の電話番号に対してBundleSidとAddressSidを割り当てる

:::note alert
2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
:::

# はじめに

みなさん、こんにちは。
KDDIウェブコミュニケーションズのTwilio事業部エバンジェリストの高橋です。

今回は、すでに購入済みの日本の電話番号に対して、申請の通ったBundleSidとAddressSidを書き込むプログラムをご紹介します。
2020年2月12日以降（日本時間は2月13日以降）、日本の電話番号の購入に際してBundlesの登録が必須になりました。それに伴い、過去に取得した電話番号にもBundleSidとAddressSidを登録しておく必要があります。
管理コンソールから手動で設定していくこともできますが、件数が多いとかなりの手間になります。

そこでプログラムを使ってBundleSidとAddressSidを書き込むサンプルを用意しました。

## 動作環境

- Node.jsが動作すること
- すでにBundleSidの登録が済んでいること

BundleSidの登録がまだの方は、以下の記事を参考にしてください。

[TwilioでBundles（本人認証）の設定を行う（法人編）](https://qiita.com/mobilebiz/items/4d09a15a355ae5df3d24)
[API経由でBundleSidを登録する（法人編）](https://qiita.com/mobilebiz/items/b2d8eb3d724210545aad)
[TwilioでBundles（本人認証）の設定を行う（個人編）](https://qiita.com/mobilebiz/items/579d1920a8b0bca96459)
[API経由でBundleSidを登録する（個人編）](https://qiita.com/mobilebiz/items/7bb6e9d94d4995a6c196)

## サンプルプログラム

以下のプログラムを適当な名前（例えば、setBundles.js）で保存します。

1,2,6,7,9,10行目はご自分の環境に合わせて変更してください。
なお、どのBundleSidとAddressSidは紐付いていますので、紐付いていない組み合わせで実行するとエラーになります。
組み合わせを確認する方法は、以下の記事を参考にしてください。

[TwilioでBundleSidに紐付いたAddressSidの見つけ方](https://qiita.com/mobilebiz/items/1f0aa4006dd00019b3bc)

```javascript
const accountSid = 'ACxxxxxxx';  // ご自分のAccountSidを指定します
const authToken = 'xxxxxxxxxx';  // ご自分のAuthTokenを指定します
const client = require('twilio')(accountSid, authToken);

// 更新したいBundleSidとAddressSid（National）
let addressSid = 'ADxxxxxxxxxxxxxxxxx';  // 050番号用AddressSid
let bundleSid = 'BUxxxxxxxxxxxxxxxxxx';  // 050番号用BundleSid
// 更新したいBundleSidとAddressSid（Toll-Free）
let addressSid_TF = 'ADxxxxxxxxxxxxxx';  // フリーダイヤル用AddressSid
let bundleSid_TF = 'BUxxxxxxxxxxxxxxx';  // フリーダイヤル用BundleSid

client.incomingPhoneNumbers
.list()
.then(async (incomingPhoneNumbers) => {
    for (number of incomingPhoneNumbers) {
        console.log(`Executing: ${number.phoneNumber}`);
        if (number.phoneNumber.slice(0,5) === '+8150') {
            // National Number
            await client.incomingPhoneNumbers(number.sid)
            .update({
                addressSid: addressSid,
                bundleSid: bundleSid,
            })
            .then(res => {
                console.log(`Updated(National). ${res.sid} => ${res.addressSid}, ${res.bundleSid}`);
            })
            .catch(err => {
                console.log(`Error. ${err}`);
            });
        } else if (number.phoneNumber.slice(0,6) === '+81800' || number.phoneNumber.slice(0,6) === '+81120') {
            // ToolFree Number
            await client.incomingPhoneNumbers(number.sid)
            .update({
                addressSid: addressSid_TF,
                bundleSid: bundleSid_TF,
            })
            .then(res => {
                console.log(`Updated(ToolFree). ${res.sid} => ${res.addressSid}, ${res.bundleSid}`);
            })
            .catch(err => {
                console.log(`Error. ${err}`);
            });
        } else {
            console.log('Non japanese number.');
        }
    };
});
```

# 実行

```sh
npm install twilio
node setBundles.js
```

# まとめ

フリーダイヤルを持っていない場合は、フリーダイヤル用のAddressSidとBundleSidはそのままでも大丈夫です。
日本以外の番号はスキップするようになっていますので、海外番号でBundlesが必要な場合は適宜プログラムを直してください。

---
### Twilio（トゥイリオ）とは

https://cloudapi.kddi-web.com
Twilioは音声通話、メッセージング（SMS/チャット）、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウドAPIサービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。