RESTで、Twilioの電話番号管理をより便利に！

REST API経由で電話番号の管理を自由自在に、検索はもちろん購入、更新、削除も可能です。
新しい電話番号の検索や購入はもちろんのこと、契約中の電話番号の設定変更、削除、リストの出力など、電話番号に関する情報を管理できます。
今回はREST API経由で電話番号を管理する方法を紹介します！

本ブログではTwilioのPHPライブラリーを使います。
PHPライブラリーについては下のブログをご覧ください。
[Twilioのアプリケーションをより柔軟に、より手軽に、Twilio Helper ライブラリ。](http://blog.twilio.kddi-web.com/2014/05/07/twilio%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%82%88%E3%82%8A%E6%9F%94%E8%BB%9F%E3%81%AB-%E3%82%88%E3%82%8A%E6%89%8B%E8%BB%BD%E3%81%AB-twilio-helper-%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/)

TwiML(Twilio マークアップ言語)についてはこちら！
[TwiMLTM: Twilio マークアップ言語](https://jp.twilio.com/docs/api/twiml)

<h3>購入可能な電話番号検索</h3>
8行目に国コード「JP（日本）」を設定し、9行目に検索する電話番号の一部を設定します。
12行目の「available_phone_nubers」より検索結果が検索され、今現在有効な電話番号が出力されます。 

```php:search_tel_no.php
<?php
    require_once('../Services/Twilio.php'); // Loads the library
 
    $sid = "ACxxxxxxxxxxxxxxxxxxx";
    $token = "yyyyyyyyyyyyyyyyyy";
    $client = new Services_Twilio($sid, $token);
 
    $numbers = $client->account->available_phone_numbers->getList('JP', 'Local', array(
        "Contains" => "+8150*******"
    ));
 
    foreach($numbers->available_phone_numbers as $number) {
        echo $number->phone_number . "\n";
    }
?>
```

<h3>電話番号の購入</h3>

購入する際にはこちらの情報を設定できます。
・FriendlyNama：電話番号のテキスト識別文字列
・VoiceUrl：電話番号のTwiML URLを設定します。（Request URL）
・PhoneNumber：購入する電話番号を設定します。
・VoiceMethod：POSTもしくはGETを設定します。

このように電話番号の基本情報を設定し、購入することが可能です。 

```php:buy_tel_number.php
<?php
    require_once('../Services/Twilio.php'); // Loads the library
 
    $sid = "ACxxxxxxxxxxxxxxx";
    $token = "yyyyyyyyyyyyyyy";
    $client = new Services_Twilio($sid, $token);
 
    $number = $client->account->incoming_phone_numbers->create(array(
        "FriendlyName" => "REST電話番号購入テスト",
        "VoiceUrl" => "http://xxx.xxx.xxx.xxx/twiml.xml",
        "PhoneNumber" => "+8150xxxxyyyy",
        "VoiceMethod" => "GET"
    ));
?>
```

<h3>契約中の電話番号リストを検索</h3>
契約中（利用可能）の電話番号を検索してみます。
9行目の「incoming_phone_numbers」よりアカウントに設定されている有効な電話番号が検索されます。
10行目のphone_numberから電話番号が、11行目のsidからphone number sidが出力されます。

<b>※ phone number sid</b>
phone number sidは電話番号を管理する固有のsidを意味します。
この後も出ますが、このsidを利用してより細かな電話番号の操作が可能になります。 

```php:incoming_tel_number.php
<?php
    require_once('../Services/Twilio.php'); // Loads the library

    $sid = "ACxxxxxxxxxxxxx";
    $token = "yyyyyyyyyyyyyyy";
    $client = new Services_Twilio($sid, $token);
 
    // Loop over the list of numbers and echo a property for each one
    foreach ($client->account->incoming_phone_numbers as $number) {
        echo $number->phone_number . "\n";
        echo $number->sid . "\n";
    }
?>
```

<h3>電話番号の変更と削除</h3>
電話番号設定情報を更新してみたます。
まず、電話番号リストを出して、その中更新対象の電話番号に 12行目の updateから番号の設定情報を更新できます。
VoiceUrl（Request URL）はもちろん、フレンドリーネーム、メソッドなど、電話番号を構成している設定情報は全て更新可能です。 

```php:incoming_tel_number_update.php
<?php
    require_once('../Services/Twilio.php'); // Loads the library
 
    // Your Account Sid and Auth Token from twilio.com/user/account
    $sid = "ACxxxxxxxxxxxx";
    $token = "yyyyyyyyyyyy";
    $client = new Services_Twilio($sid, $token);

    foreach ($client->account->incoming_phone_numbers as $number) {
        if ( $number->phone_number == "+815031717476") {
            $number = $client->account->incoming_phone_numbers->get($number->sid);
            $number->update(array(
                "VoiceUrl" => "http://xxx.xxx.xxx.xxx/twiml.xml",
                "FriendlyName" => "フレンドリーネームが変更されます。"
            ));
        }
    }
?>
```

削除は、11行目の deleteから削除可能です。
ここでも、電話番号の sidを使って番号を削除しています。 

```php:incoming_tel_number_delete.php
<?php
    require_once('../Services/Twilio.php'); // Loads the library

    $sid = "ACxxxxxxxxxxxxxxxx";
    $token = "yyyyyyyyyyyy";
    $client = new Services_Twilio($sid, $token);

    foreach ($client->account->incoming_phone_numbers as $number) {
        if ( $number->phone_number == "+815031717476") {
            echo "電話番号：" . $number->phone_number . "を削除します。\n";
            $client->account->incoming_phone_numbers->delete($number->sid);
        }
    }
?>
```

<h3>最後に</h3>
このようにREST APIを経由しますと、ダッシュボードにログインする必要もなく、みなさん各自の電話番号管理システムの開発が可能になります。

電話番号の購入は、購入された時点で課金が発生しますので、ご注意ください。