Twilioを利用してJavaで絵文字つきSMS送ってみたメモ

# Twilioを利用してJavaで絵文字つきSMS送ってみたメモ
少し前、知り合いの方に教えてもらったサービスを触ってみたかったのでそのメモです。

## そもそもTwilio って？
すごく端的に言うと、APIで電話が関連する下記のような機能を利用できる。
- 電話の発信（音声通話や録音など）
- 電話の着信（どの数字押したとか情報を受け取れる）
- SMSの送受信

詳細は[こちら](http://twilio.kddi-web.com/function/)の公式サイト参照


## アカウントと電話番号の取得
下記の記事を参考にアカウントの取得と電話番号の取得します。
[twilioのトライアル登録してみた](http://qiita.com/tukiyo3/items/e41f94a9e74379c5bbe0)
[TwilioでSMSを送信してみた](http://qiita.com/key/items/10c5374e7cfc178aeb72)
- 取得する番号が日本の番号(050～)だとSMSが利用できませんので注意
- トライアルでいくら分利用できるのかは明らかにされていないよう
参照
[無料トライアルアカウントの制限事項は何ですか?](https://twilioforkwc.zendesk.com/entries/53884648-%E7%84%A1%E6%96%99%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E5%88%B6%E9%99%90%E4%BA%8B%E9%A0%85%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B-)

## Javaで実装
### 下記のサポートページを参考にJavaで実装します

[Twilio Java ヘルパーライブラリー](https://jp.twilio.com/docs/java/install)

```Java:Example.java
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.MessageFactory;
import com.twilio.sdk.resource.instance.Message;

public class Example {

  // Find your Account Sid and Token at twilio.com/user/account
  public static final String ACCOUNT_SID = "****";
  public static final String AUTH_TOKEN = "****";

  public static void main(String[] args) throws TwilioRestException {
    TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);

    // Build a filter for the MessageList
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("Body", "Test Message"));
    params.add(new BasicNameValuePair("To", "+8190********"));
    params.add(new BasicNameValuePair("From", "+1********"));

    MessageFactory messageFactory = client.getAccount().getMessageFactory();
    Message message = messageFactory.create(params);
    System.out.println(message.getSid());
  }
}
```

### 上記のクラスを実行しSMSの着信を確認
![Screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/70168/679fb664-96ba-4108-9e31-5f7e6f03ef90.png)
来た来た、非常に簡単に実装できました。


### ただ、それだけでは、あまりにも芸がないので絵文字くらい埋め込んでみよう。
下記のページを参考に絵文字のUnicode情報を確認します。
ファイル名0219の猫に決定！！
[au/docomo共通絵文字データ ダウンロード](http://www.au.kddi.com/developer/android/kaihatsu/emoji_download/)

ソースのメッセージボディを猫絵文字に！！

```Java:Example.java
    params.add(new BasicNameValuePair("Body", "猫 " + "\u1F63B"));
```

### 実行！
![Screenshot2.png](https://qiita-image-store.s3.amazonaws.com/0/70168/c391eca8-7e91-7aaa-2e58-4c94555dd554.png)
あれ、猫出ない。っと思ったら、テスト端末がAuのAndroid4.2系だった。上記絵文字は4.4系からとな！


### 仕方ないので、古い形式の絵文字に変更
下記のページを参考に絵文字のunicodeを取得します。（なんかガラケーを思い出す。。。）
絵文字番号251の猫に決定！！
[絵文字](http://www.au.kddi.com/ezfactory/tec/spec/3.html)

```Java:Example.java
    params.add(new BasicNameValuePair("Body", "猫 " + "\uE4DB"));
```

### 実行！！
![Screenshot3.png](https://qiita-image-store.s3.amazonaws.com/0/70168/1468d8cc-a190-a4bf-11d9-5d1345a789f7.png)
猫でました！


## 感想
思ったより簡単にSMSが送信出来た印象でした。電話の発信も簡単にできた。
※電話の発信は海外からかけるのは怖かったので、日本の番号に変更してからやってみました。
次は、電話の着信をやってみよう！（トライアルでとこまで出来るのか次第ですが）