Twilio Programmable Wireless を使ってみた。

# Twilio Programmable Wireless とは
2018年のTwilio SIGNALで発表されたTwilio Programmable Wirelessは、いわゆるSIMのサービスになります。IoT向けでもあるのですが、SIMフリーのスマートフォンにいれて使うことも可能です。
発表当時の動画はこちら[こちら](https://www.youtube.com/watch?v=B67d3BYapWI)

## サービスの特徴について
- いわゆる「縛り」である、最低利用期間は存在しません。
- Twilio アカウントがあれば、誰でも使えます。
- データ通信、音声通話(米国)、SMS(米国)の利用が可能です。
- T-Mobileのネットワークを利用しており、米国内だけでなく世界各国のネットワークを用いたローミング利用できます。
![image_2019_11_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/cbfa1fe0-7084-f6b6-63d1-76d669d7c4d3.png)

# Twilio Programmable Wirelessを使ってみる
以下に使うための流れを記載します。
## Twilio Programmable Wirelessの入手する
使用するためには、SIMを発注する必要があります。SIMカードはTwilioのコンソールページから注文することができます。今回はSIMが3枚入っているStarterKitを購入します。
![image_2019_11_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/48fb2c7a-db09-bf6b-0a82-0b224b08c1b7.png)
※今回はスマートフォンに入れて利用することが目的であるので、「Narrowband SIM Starter Pack」ではなく、「SIM Starter Pack」を購入しました。

発注後、数日には、国際便で手元に届きました。![2019-11-16_08-55-22_884.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/cd00976b-f221-5bb4-637b-00a63fa5d65e.jpeg)中を開けると、こんなかんじでした。![2019-11-16_09-16-44_668.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/59498870-8f11-24ab-799d-24bd3d04ad72.jpeg)箱の中身は、3枚のSIMとブランドブック的な本。![2019-11-16_09-17-20_960.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/fb0b2c5a-9194-e12e-df2a-5569260e6a8a.jpeg)Twilio大好きな私としては、このブランドブックは非常に嬉しいですね。![2019-11-16_09-18-25_247.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/b4907be8-d56a-ad0e-3b27-213b8c1b3673.jpeg)

## Twilio Programmable Wirelessを設定する
届いたSIMカードは自身のTwilioアカウントでアクティベートをします。
アクティベートするためには、まず料金プラン(RatePlan)を作成する必要があります。

### 料金プラン(RatePlan)を作成する
左メニューからProgrammableWirelessを選択し、そこから料金プラン(RatePlan)を選択します。
このRatePlanでは、

- SIMが利用する用途(2G/3G/LTEなのか、NARROWBANDなのか)
- SIMが利用するサービス(データ、音声、SMS)
- 米国内ローミングと国際ローミングを利用するか
- Quotaの設定
- データ上限の設定
が設定できます。
![image_2019_11_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/c4572487-bace-83c0-3504-93906ae15774.png)
今回、私はスマートフォンにSIMカードを挿入して使う予定なので、以下の設定としました。

|項目  |設定値  |
|---|---|
|1. What type of SIM are you making a Rate Plan for?  |2G/3G/LTE  |
|2. Which services would you like to enable?  |Dataのみにチェック※  |
|3. Set roaming preferences|INTERNATIONAL ROAMINGをENABLED※ |
|4. Set Data Metering plan | $10 QUOTA※ |
|5. Set Data Limits | INTERNATIONAL ROAMING DATA LIMIT 250MB /Month|

※利用するサービスについては、VoiceとMessagingは基本的に米国 onlyなので、Dataだけにしました。
※このSIMは米国のSIMなので、日本で使う場合は国際ローミングとなる。
※ウィザードも用意してありますし、詳しくは[料金](https://jp.twilio.com/wireless/pricing)を参照するとよいです。

### SIMカードを登録する
左メニューからProgrammableWirelessを選択し、そこからSiMを選択します。左上のプラスマークをクリックし、「Register a SIM」を選択します。以下のような画面がでてきますので、SIMカードに記載されている10桁のREGISTRATION CODEを入力します。
![image_2019_11_21 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/b6047110-5409-ad95-625d-723e5101cea3.png)
その他、SIMのユニーク名や先程作成したデータプランを選択します。
「Register SIM Cord」をクリックすると、数分でアクティベートが完了します。

### スマートフォンにSIMを挿入。
今回はiPhoneを利用しました。SIMを挿入します。
![2019-11-21_22-30-06_052.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/0a47dd66-187b-1fd1-7c2c-1f15bd4f4cca.jpeg)
設定→モバイル通信を選択します。

|項目  |設定値  |
|---|---|
|モバイルデータ通信|ON|
|通信のオプション|ローミングオン|
|モバイルデータ通信ネットワーク| APNを「wireless.twilio.com」 |
<img width="320" alt="2019-12-09_11-01-44_000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/88f4e435-ec87-3c08-2ce0-799a28a15427.png">

<img width="320" alt="2019-11-21_05-45-39_000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/d835a2fc-5aae-6410-a53b-f64673db201d.png">

通信できるようになると、NTT DocomoかSoftbankのローミングとなります。ただし、日本では、データ通信のみとなります。
例えば、[SIPレジストを使って、Twilio環境だけでSIPソフトフォンを使ってみた](https://qiita.com/moroshi/items/44b71dd2843350813b94)を使えば、実質電話もできるような状態となります。
ちなみに、このSIPレジストは、データ通信ができていれば、どこでも利用できるので、海外に行ったときも利用可能です。私が1週間米国に滞在したときは、ケータイ電話にかかってきた電話はSIPレジストしたTwilio番号に転送するようにしていました。いわゆるキャリアの国際ローミングよりも非常に安価です。

# Twilio Programmable Wirelessを米国に持っていってみた。
さて、このTwilio Programmable Wirelessは、日本で使うときは国際ローミングをONにする必要がありました。これはSIMが米国のものだからです。(日本で使うのにローミングONというのは、ちょっとややこしいのですが)
このSIM、米国に持ち込んで使えるかどうか、確認してきました。
2019/12/02〜06に開催された、AWS re:Inventへ、Twilio Programmable Wireless SIMを導入したスマートフォンを持っていきました。
作業としては、料金プランの変更と、Voice・Messagingの設定追加が必要となります。

## 料金プランを作成する
日本では、VoiceやSMSは対応しないプランとしましたが、米国ではそれも利用可能となるため、別途米国用のプランを作成しました。

|項目  |設定値  |
|---|---|
|1. What type of SIM are you making a Rate Plan for?  |2G/3G/LTE  |
|2. Which services would you like to enable?  |Data、Voice、Messagingにチェック  |
|3. Set roaming preferences|両方ともDISABLED※ |
|4. Set Data Metering plan | $10 QUOTA |
|5. Set Data Limits | INTERNATIONAL ROAMING DATA LIMIT 250MB /Month|
※米国なのでroamingはOFFとする。

## 音声発信の設定
SIMから音声が発信できるように設定をします。

左メニューからProgrammable Wireless→SIMを選択し、Programmable Voice & SMSタブを開きます。Programmable Voice欄のプラスマークをクリックし、TwiML Binを作成します。
内容は以下のとおりです。※デフォルトでこの内容が入っています。

```xml:Route_as_dialed
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial callerId="自分のTwilio番号を記載する">
    <Number>{{To}}</Number>
  </Dial>
</Response>
```
![image_2019_12_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/bc8a9ac0-cb09-2d8a-f555-fd0d3829c383.png)

## メッセージ送信の設定
上記の音声発信設定画面の下部にProgrammable SMS があります。
プラスマークをクリックし、TwiML Bin作成します。
内容は以下のとおりです。※デフォルトでこの内容が入っています。

```xml:Deliver_message_as_intended_by_device
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Message from="自分のTwilio番号を記載する" to="{{To}}">{{Body}}</Message>
</Response>
```
![image_2019_12_10 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/01ff11df-553e-a629-331d-53bc4903aead.png)

## 音声着信の設定
Programmable Voiceの着信設定で、SIMに転送する設定を行います。
まずTwiML Binsで以下の内容を作成します。

```xml:incomingToVoice
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Dial>
 	<Sim>自分のSIMのSIDを記載する</Sim>
    </Dial>
</Response>
```
これを、該当の電話番号のA CALL COMES INに設定しておきます。

## メッセージ受信の設定
まずTwiML Binsで以下の内容を作成します。

```xml:incomingToSMS
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Message to="sim:自分のSIMのSIDを記載する" from="{{From}}">
         {{Body}}
    </Message>
</Response>
```
これを、該当の電話番号のA MESSAGE COMES INに設定しておきます。

## iPhone側の設定
国際ローミングではなくなるので、ローミングをOFFにします。以下のような感じになります。
<img width="320" alt="2019-12-07_04-39-39_000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/3d6c2391-af3b-2a65-3c0e-8bc4f2504766.png">
ネットワーク選択や画面左上のキャリア表示が、「Twilio」になるのが感慨深いですね。


## 検証してみた。
米国番号で電話をかけたり、受けたりすることができるか、実験しました。
[米国TwilioSIM → 日本Twilio番号 (動画)](http://www.youtube.com/watch?v=ILBSjrPfDTI)
[日本Twilio番号 → 米国TwilioSIM (動画)](http://www.youtube.com/watch?v=_EKY5BI-H-M)
SMSの受信も確認できました。※Uberを登録する際のSMS認証で確認しました。

これにより、米国の番号が必要なサービス（例えばUberやlyftなど)への登録や、現地でなにか電話が必要な場合でも、気軽に使うことができます。Twilio Programmable Wireless SIMを持っておくと安心ですね。

# おまけ
AWS re:InventにてTwilio社がEXPOブースに出店されていたので、訪問してきました。![2019-12-05_15-47-02_844 (1).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110436/89aef720-c58e-e072-0d92-d6b0cec3b6dc.jpeg)

いきなり拙い英語で話しかけてきた日本人に、優しくご対応いただき、感謝しています。
来年の[Twilio SIGNAL](https://signal.twilio.com/)は参加しますよ！