API経由でBundleSidを登録する（法人編）

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

# はじめに

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

Twilio側の仕様変更に伴い従来のアイデンティティがBundlesに変わりました。また、この変更に併せてドキュメントのアップロードを始めとしたAPIも公開されています。
[APIドキュメント](https://www.twilio.com/docs/phone-numbers/regulatory/getting-started/create-new-bundle-public-rest-apis)

<font color='red'>注意</font>
過去に単独で登録したAddressSidや、AddressSidだけをAPIで登録したものは、Bundlesに紐付けがされてないため電話番号の購入時には利用できませんので、この記事にあるように一連の書類とともに再度AddressSidも登録しなおしが必要です。

今回は、Node.jsを使ったプログラムを使って、BundleSidを登録するサンプルを紹介します。

本記事はAPIを使って法人での利用におけるBundlesの登録方法となります。
管理コンソール上からの登録方法については、以下の記事を御覧ください。
[TwilioでBundles（本人認証）の設定を行う（法人編）](https://qiita.com/mobilebiz/private/4d09a15a355ae5df3d24)

~~また、個人利用におけるBundlesの登録については、以下の記事を御覧ください。
[TwilioでBundles（本人認証）の設定を行う（個人編）](https://qiita.com/mobilebiz/items/579d1920a8b0bca96459)
[API経由でBundleSidを登録する（個人編）](https://qiita.com/mobilebiz/items/7bb6e9d94d4995a6c196)~~

:::note warn
日本におけるTwilioの個人利用は利用規約により禁止されています。
:::

このプログラムは、Twilio（KWCアカウント）におけるBundleSidの登録を自動化するものです。
法人でのBundleSidの登録には、パターンが２種類あります。

## パターン１　代表者が申請作業を行うケース

会社の代表者の方が申請を行うケースです。
代表者の方の身分証明書が必要です。

## パターン２　担当者が申請作業を行うケース

会社の担当者の方が申請を行うケースです。
申請者の身分証明書と会社が発行した**委任状が必要**です。

委任状については、[こちら](https://skillful-pancake-7200.twil.io/assets/PowerOfAttorneyTemplate.docx)にひな形を用意してあるので、別途ダウンロードして記載してください。
記載の際の注意点は、以下のとおりです。
![委任状説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/7ae544d1-6dd7-8158-47b3-a753e3549b28.png)

本プログラム以下の条件でのみ動作します。

- 法人での申請
- 国税庁に法人番号が登録されていること（[こちら](https://www.houjin-bangou.nta.go.jp/)で検索できます）
- 担当者が申請をする場合には、委任状を用意すること
- 申請者の運転免許証を用意してあること
- Node.js（バージョン10以降）がインストールされていること


## 準備

- [こちらのリンク](https://fs.hubspotusercontent00.net/hubfs/6881002/%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B%E9%96%A2%E9%80%A3/%E6%B3%95%E4%BA%BA%E7%95%AA%E5%8F%B7%E7%94%B3%E8%AB%8B/%E6%B3%95%E4%BA%BA%E7%95%AA%E5%8F%B7%E7%94%B3%E8%AB%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0.docx)から、法人番号申請フォームの雛形をダウンロードしてください。
- ダウンロードしたファイルにAccountSid、法人名、法人番号を記載して、PDF形式で保存します（捺印は不要です）。
- 申請者の運転免許証のコピーを**JPEG形式**で準備してください（サイズは5MB以内）。  スマホのカメラで撮影したものでも大丈夫ですが、免許証のみが写るように周りの画像は削除してください。

## インストール

適当なフォルダに移動し、GitHubリポジトリを取得します（法人用のブランチを利用します）。

```
$ git clone -b create-bundle-business https://github.com/twilioforkwc/create-bundle.git ./create-bundle-business
$ cd create-bundle-business
$ npm install
$ mv .env.example .env
```

法人番号申請フォームのPDF、委任状、運転免許証の各ファイルを、imagesフォルダにコピーしておきます。  
`.env`ファイルをエディタで開き、以下の項目をすべて申請者の内容に置き換えます。

|項目名|内容|
|:--|:--|
|ACCOUNT_SID|TwilioアカウントのAccountSid（ACから始まる文字列）|
|AUTH_TOKEN|AccountSidに対応するAuthToken|
|NUMBER_TYPE|national もしくは toll-free を指定（050番号はnationalになります）|
|BUSINESS_NAME|法人番号検索結果に記載されいている商号を記載通りに（社名に「・」が入っている場合は、APIがエラーを出すので削除してください）|
|BUSINESS_DESCRIPTION|法人番号検索結果に記載されいている会社法人等番号を記載通りに|
|BUSINESS_ADDRESS|法人番号検索結果に記載されている本店住所の町村名と丁目番地を記載されている通りに（例：大手町一丁目１番地１号）|
|BUSINESS_CITY|法人番号検索結果に記載されている本店住所の市区名を記載されている通りに（例：千代田区）|
|BUSINESS_REGION|法人番号検索結果に記載されている都道府県名を記載されている通りに（例：東京都）|
|BUSINESS_POSTAL_CODE|会社の郵便番号をハイフンなしで（例：1000001）|
|BUSINESS_ISO_COUNTRY|会社の住所が日本の場合はJPのままで|
|CORPORATE＿REGISTRY_FILE|法人番号申請フォームのPDFファイル名|
|POWER_OF_ATTORNEY_FILE|委任状のPDFファイル名（なしの場合は未指定）|
|FIRST_NAME|申請者の名前（名）を免許証に記載されている通りに（日本語OK）|
|LAST_NAME|申請者の名前（姓）を免許証に記載されている通りに（日本語OK）|
|BIRTH_DATE|申請者の誕生日をYYYY-MM-DD形式で|
|STREET|住所（町丁目と建物名）を免許証に記載されている通りに|
|CITY|住所（市区町村）を免許証に記載されている通りに|
|REGION|住所（都道府県）を免許証に記載されている通りに|
|POSTAL_CODE|郵便番号をハイフンなしで|
|ISO_COUNTRY|日本の場合はJPのままで|
|DRIVERS_LICENSE_FILE|免許証の画像ファイル名|
|EMAIL|申請者のメールアドレス（審査結果が通知されます）|

## プログラムの実行

```
$ npm start

...最初にテストコードが走って`.env`の内容をチェックします。
...テストがすべてPASSすると申請が始まります。

>>> BusinessAddressSid:AD8b1e9d1bb77e15fc6f35cfb655822b7a created.
>>> AddressSid:AD380e6c9d32b880f61295997f57bb9290 created.
>>> BundleSid:BU654cedd57e8d1dbe883b1f6e64f79524 created.
>>> UserSid:IT64d005a291d9d525a2c815d7dd2abcb0 created.
>>> CorporateRegistrySid:RD03c8155f5cdcb714cb526d5c33811212 created.
>>> PowerOfAttorneySid:RD59ee9826f674023d99b6ce63090a4e4a created.
>>> DriverLicenseSid:RDc2cf8e42e765440bcc31ddca255d43e5 created.
>>> Corporate Registry Assign completed.
>>> Power of Attorney Assign completed.
>>> Driver's License Assign completed.
>>> End User Assign completed.
>>> Submitted.
```

上記のように`Submitted.`が表示されれば成功です。  
管理コンソールにログインし、電話番号 > Regulatory Complience > Bundlesを確認し、STATUSが`Pending Review`になっていることを確認しましょう。

## KWCにBundlesの登録申請

続けて、[こちらのサイト](https://cloudapi.zendesk.com/hc/ja/requests/new?)にアクセスしてBundlesの登録申請をします。**こちらの申請がされないと審査が行われませんので必ず行ってください。**
<font color='red'>残念ながら、こちらの手順はまだAPIでは提供されていませんので手動で行う必要があります。</font>
登録内容は以下のとおりです。

入力項目|記入内容
:--|:--
メールアドレス|ご自分のメールアドレス
お問い合わせの種類|「新規Bundle作成依頼」を選択
アカウントの種類|すでに課金済みの場合は「アップグレードアカウント」、それ以外は「トライアルアカウント」を選択
Account SID|今回Bundleを申請したAccountSID（ACから始まる文字列）
Bundle SID|先ほど申請したBundleSID（BUから始まる文字列）
BundleSID（複数ある場合）|Bundleを複数登録した場合に記載、3つ以上ある場合は「お問い合わせの内容」欄に追記も可能
企業名|会社名
お名前|担当者名
件名|「新規Bundle作成依頼」と記載
お問い合わせ内容|「新規Bundle作成依頼」と記載
取引時確認は完了していますか？|チェックする
申請書類のアップロードは完了していますか？|チェックする
添付ファイル|不要

あとは審査を待つだけです。
しばらくすると（３営業日以内）に、Twilioからメールが届きますので、審査が通れば上記STATUSが`Twilio Approved`になります。


# まとめ

詳しいコードの内容は、ぜひ`createBundle.js`の中身を見ていただければと思いますが、大まかな流れは以下のようになっています。

1. 法人住所を登録する（37行目）。
2. 個人住所を登録する（52行目）。
2. Bundleリソースを作成する（67行目）。
3. エンドユーザを作成する（90行目）。
4. ドキュメント（法人番号申請フォーム）を作成してアップロードする（119行目）。
5. ドキュメント（委任状）を作成してアップロードする（151行目）。
6. ドキュメント（運転免許証）を作成してアップロードする（186行目）。
7. Bundleリソースにドキュメント（法人番号申請フォーム）を紐付ける（217行目）。
8. Bundleリソースにドキュメント（委任状）を紐付ける（233行目）。
9. Bundleリソースにドキュメント（運転免許証）を紐付ける（253行目）。
10. Bundleリソースにエンドユーザを紐付ける（269行目）。
11. Bundleを申請する（287行目）。

法人住所は4と5、個人住所は5と6のドキュメントを作成するときに利用します。
審査のポイントは、書類に書かれた内容と申請内容が一致することなので、住所や名前などに間違いがないことを確認してからプログラムを実行してください。

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

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