Twilio上で電話番号に住所を登録する方法

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

# はじめに

みなさん、こんにちは。
Twilioエバンジェリストの高橋です。

<font color='red'>Bundlesの導入に伴い、この記事にあるような住所情報単独での登録では電話番号の購入ができなくなりました。
お手数ですが、以下の記事を参考に、Bundlesの登録をお願いします。</font>

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

---
今回は、Twilio上で購入した電話番号に、住所情報を登録する方法を解説します。
なお、本記事は執筆現在（2019/9/10）での状況となります。
（住所情報の登録が必須になりましたので、その内容に修正しました。）

# 住所登録の背景

現在、電話番号に関して世界各国で規制が強化されつつあり、2019/4/11に[ニュース](https://twilio.kddi-web.com/2019/4502/)でもお知らせしたように、Twilioでは日本を含めた13カ国について、電話番号の取得に際して住所の確認が必要になります。
日本においては、少なくとも住所の登録だけはしておかないと、管理コンソールならびに、REST API経由での電話番号の購入ができないようになりました。

住所登録をしていない状態で電話番号を購入しようとすると、管理コンソールでは以下の画面が表示されます。
![スクリーンショット 2019-05-05 07.21.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/71de4838-9c9b-956d-589d-5d31e30ba751.png)

また、REST API経由では以下のエラーが返ります。

```json
{
  "code": 21613,
  "message": "PhoneNumber Requires an Address",
  "more_info": "https://www.twilio.com/docs/errors/21613",
  "status": 400
}
```

# 住所の登録方法

住所登録は以下の２つの方法で実施が可能です。

- 管理コンソール上で登録する
- REST APIを使って登録する

**なお、住所登録はマスターアカウントだけでなく、サブアカウント単位で必要になりますので、サブアカウントをお持ちの方はそれぞれのアカウントごとに以下の手順が必要となります。**

## 管理コンソール上で登録する

- 管理コンソールにログインをします。
- スライドメニューから**電話番号（Phone Numbers）**を選択します。
- 電話番号メニューの中から、**Regulatory Compliance**の中の**住所**を選択します。
- **Add new Address**ボタンを押します。

<img width="198" alt="address.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/afdc19d4-225c-14e9-0bb6-2328fd78d689.png">


- **New Address**ダイアログが表示されるので、それぞれの項目に住所情報をいれていきます。なお、日本語での登録も可能ですが、会社名欄は全角で21文字までしか入りませんので、長い会社名については英語で入力しておいたほうがよいでしょう。

![スクリーンショット 2019-05-05 07.45.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/206d79f7-5a63-5b9b-0786-7cf7bddf2b46.png)

- **Create**ボタンを押すと住所が登録されます。

![スクリーンショット 2019-05-05 07.49.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/9785c446-1b18-e178-f177-448286e88b07.png)

住所登録が完了しているアカウントでは、電話番号の購入時に**規制情報**として先程作成した住所が選択できるようになります。

![電話番号の購入確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/2c741e94-4b1a-23fe-255e-e78b09bf9993.png)

また、すでに購入済みの電話番号に関しても、先程登録した住所を割り当てることができます（これは自動では行われないため、すべての番号に対して個別で行う必要があります）。

## REST APIを使って登録する

ドキュメントは[こちら](https://jp.twilio.com/docs/usage/api/address)にあります。

CURLを使って登録するサンプルは以下のとおりです（AccountSidとAuthTokenは、ご自分のアカウントに合わせて設定してください）。


```sh
curl -X POST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Addresses.json \
--data-urlencode "FriendlyName=HeadOffice" \
--data-urlencode "CustomerName=KDDI Web Communications Inc." \
--data-urlencode "Street=2-26-1 Minamiaoyama" \
--data-urlencode "City=Minato-ku" \
--data-urlencode "Region=Tokyo" \
--data-urlencode "PostalCode=1070062" \
--data-urlencode "IsoCountry=JP" \
-u ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token
```

登録された住所の一覧は、以下のREST APIで取得することができます。

```sh
curl -X GET ‘https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Addresses.json?PageSize=20’ 
-u ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token
```

一覧に表示された住所のSid（ADから始まる文字列）は、REST API経由で電話番号を操作する際に利用できます。
電話番号を新規で購入する場合も、このSidをAddressSidに指定してください。

# 住所情報と電話番号の紐付け

住所登録は購入する電話番号ごとに必要になるため、すでに購入済みの番号ごとに**Regulatory Information**のタブが用意されています。
![IncomingPhoneNumber.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/2ae56af6-d544-7c18-8057-f1297517e5d0.png)

2019年9月10日までに購入済みの**日本の**電話番号に関しては、当面は住所情報等が正しく登録されていなくとも規制（発着信規制や番号の停止などを含む）の対象にはならないとアナウンスされていますが、いずれ規制がかかります。また、日本以外で住所登録が必要となる国に関しては、2019年9月10日までに住所情報を登録するようにとアナウンスが出ています。
[IncomingPhoneNumberAPIに関するスケジュール変更のお知らせ](https://twilio.kddi-web.com/incomingphonenumber-api-%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E5%A4%89%E6%9B%B4%E3%81%AE%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B/)

最後に、すでに購入済みの電話番号に対して、APIを使って登録した住所情報（AddressSid）を割り当てるコードを載せておきます（Node.jsでのコードになりますので、Node.jsの環境が必要です）。
*2019年9月10日までは日本の番号は住所必須になっていないため、本コード（API）は実行してもエラーにはなりませんが、AddressSidの割当は行われません。*

```javascript
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';
const client = require('twilio')(accountSid, authToken);

// 更新したい住所SID
let addressSid = 'ADXXXXXXXXXXXXXXXXXXXXXXXXXX';

client.incomingPhoneNumbers
.list()
.then(async (incomingPhoneNumbers) => {
    for (number of incomingPhoneNumbers) {
        console.log(`Executing: ${number.sid}`);
        await client.incomingPhoneNumbers(number.sid)
        .update({
            addressSid: addressSid
        })
        .then(res => {
            console.log(`Updated. ${res.sid} => ${res.addressSid}`);
        })
        .catch(err => {
            console.log(`Error. ${err}`);
        });
    };
});
```

# まとめ

現在、世界各国で電話番号に関する規制が強化されつつあり、今回の仕様変更もそれに伴うものです。今後はさらに、住所を確認するための書類の提出（アイデンティティの登録）も必須となりますので、予め住所を証明する書類などを準備しておくことをおすすめします。

アイデンティティの登録方法については、以下の記事を参照してください。
[Twilioで本人認証の設定を行う（法人編）](https://qiita.com/mobilebiz/items/9f9d3cbb11cf795325e9)

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

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