Bluemix Node-red上のTwilio APIを使って、天気情報をスマホのSMSに送信してみる

#はじめに
[Bluemix](http://bluemix.net/)のnode-redのOutput Nodeに[Twilio](http://twilio.kddi-web.com/)のAPIがあったので試してみました。

今回は、[Twilio](http://twilio.kddi-web.com/)のトライアルアカウントを使用し、[OpenWeatherMap](http://openweathermap.org/)のAPIを叩き、現在の天気と気温を自分のスマートフォンのSMSに送付してみました。朝出かける前に、SMSに天気と気温の情報が飛んでくるとうれしいですよね。

![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/86169/ea37ef95-ef49-394e-7a3d-47bc1d344da0.jpeg)

これを実現するアプリはいくらでもあると思いますが、Node-redとTwilio APIを使うことで、ほぼコーディングレスで、30分程度で実現できてしまいます。

#前提 & 注意事項

* Bluemixは登録済みの前提で記載しています。登録はこの[あたり](https://www.ibm.com/developerworks/community/wikis/home?lang=ja#!/wiki/W044bb4f15419_49d8_bf9e_55d2d43ad744/page/Bluemix%20%E3%83%95%E3%83%AA%E3%83%BC%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB%20%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E6%89%8B%E9%A0%86)を参考にして下さい。
* Twilioのトライアルアカウント取得済み。またトライアルアカウントからSMSを送信する際には下記の点に注意が必要です。（こちらの[投稿](http://qiita.com/zaru/items/079fa96cba1081a76b10)を参考にさせて頂きました。）
  * **+81から始まる日本の番号ではSMSは送信できず、+1から始まる米国の電話番号を取得する必要が有る**
  * **検証済みの電話番号（自分スマホの番号）にのみSMSを送信可**

#Node-Redプロジェクトの準備
BluemixのカタログのボイラープレートからNode-redを選択し、プロジェクト名を入力し、アプリケーションを作成します。

![Picture2.png](https://qiita-image-store.s3.amazonaws.com/0/86169/e8086b04-322a-d642-1b8e-1a2a14662199.png)

ステージングが完了後、作成したアプリケーションをダッシュボード上で開き、表示されるURLをクリックし、Node-Redのフローエディタを開きます。
![Picture3.png](https://qiita-image-store.s3.amazonaws.com/0/86169/154f6c85-4109-6c18-97c9-359ac5b11eac.png)

# フローの作成
使うNodeは下記の5種類です。()内はNodeのカテゴリ、及び、使用目的です。

* **Inject** ( Input, SMS送信時刻の設定、OpenWeatherMap APIにHttp Get Requestを送信するトリガー) 
* **http request** ( Function, OpenWeatherMapにHttp Get Requestを送信)
* **function** ( function, OpenWeatherMap APIからのJSON Formatの天気情報からSMSメッセージを作成)
* **Twilio** ( Output, SMSをスマートフォンに送信)
* **Debug** ( Output, デバッグ用の情報の出力)

これらを下記のようにつなぎます。
![Picture6.png](https://qiita-image-store.s3.amazonaws.com/0/86169/a2909ce0-101d-b5fc-190a-307392a91ccc.png)

# 各Nodeの設定
**1. Inject Node** 
Repeatの設定を「at a specific time」とし、データがInjectされるスケジュールを設定。ここでは、平日の毎朝7時に、その時点の天気と気温がSMSで送付されるように設定します。

![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/86169/df210fa1-136a-439f-0daf-4071f0cfa0c3.jpeg)

**2. http Request** 
OpenWeatherMapの[Current Weather Data API](http://openweathermap.org/current)にhttp GET Requestを送信し、現在時点の東京の天気情報を取得します。Nodeのプロパティーを下記のように設定。

* Method: GET
* URL: `http://api.openweathermap.org/data/2.5/find?q=Tokyo&units=metric`
* Return: a parsed JSON object

![WS000012.JPG](https://qiita-image-store.s3.amazonaws.com/0/86169/3e7ac4f2-a179-fdfa-02b8-e302221a8006.jpeg)

**3. function**
[OpenWeatherMapのAPI](http://openweathermap.org/current)からは、最高・最低気温やら湿度やら様々な情報がJSON形式で帰ってきます。今回は「晴れなのか、曇りなのか」といった天気の概要と、その時点での気温のみを使用。
Function Nodeの機能としては、JSON形式の返答から天気と気温のValueを取り出し、Messageを作成してそれをReturnする関数を作成すれば良いので、下記のように関数を定義してやればよいです。

    var tenki = "現在の天気は" + msg.payload.list[0].weather[0].description + "/";
    var kion = msg.payload.list[0].main.temp + "°Cです。";
    return {payload: tenki + kion};

**4. Twilio**
Twilio APIを使用してSMSでを送付するための設定をしていきますが、まず、Twilioにログインし、TwilioのAPI クレデンシャルを確認します。API クレデンシャル情報は「アカウントセッティング」で確認することができます。
![Picture8.png](https://qiita-image-store.s3.amazonaws.com/0/86169/96a64e99-a160-af7f-acd3-b4762399c960.png)

Node-RedのTwilio Nodeで、AccountSID, Authtokenを設定します。また「From」には、取得した米国のtwilio電話番号をセットします。
![Picture9.png](https://qiita-image-store.s3.amazonaws.com/0/86169/88260e09-b3a3-ff53-f103-fc3fd9fb0432.png)

「SMS to」には、検証済み電話番号を記入します。この時、電話番号の先頭の「0」は不要で、080で始まる電話番号ならば、国番号をつけて、「+8180********」といったように記載します。
![Picture10.png](https://qiita-image-store.s3.amazonaws.com/0/86169/6e12a853-21d8-eb5a-743b-0fd05fee272a.png)

# 動作確認
Debug Nodeは特に設定は不要で、Nodeのフローと各Nodeの設定が完了したら、Deployボタンを押すと、稼働準備が完了します。

土日以外07:00に動作するように設定しましたが、Inject Nodeの左側をクリックすることで、Manualで動作させることが可能です。設定がうまく行っていれば、ケータイにその時点の天気と気温がSMSで送られます。
![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/86169/ea37ef95-ef49-394e-7a3d-47bc1d344da0.jpeg)