DataSpiderを使ってLINE Messaging APIを試してみる

#はじめに
LINE [Massaging API](https://business.line.me/ja/services/bot)を利用してプッシュ通知を試してみます。

#事前準備

1.[Masssaging API](https://business.line.me/ja/services/bot)から`Developer Trialを始める`を選択し、各種入力を行い、`LINE MANAGER`の管理画面まで進みます。
Webhookはあとから必要になる`userId`を取得するために必要なので`利用する`を選択して、保存します。
保存が完了したら`LINE Developersで設定する`をクリックして設定情報を確認します。

　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/6c665c84-f638-3219-9c5f-bb526092edad.png)

2.LINE Developersの画面下`Cannel Access Token`の`ISSUE`をクリックして表示されるTokenをコピーしておきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/5509001e-453d-c0ad-aa1a-b1e70e5ef91c.png)

3.`Webhook URL`は後から利用するので、`LINE Developers`に設定できるということを覚えておいたほうが便利です。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/1f0b6762-8740-b32b-e78f-c77541684b0a.png)

##API Referenceの確認
1.[API Reference](https://devdocs.line.me/ja/)の`Messaging API`→`Push Message`を確認します。

- Push Message APIの例

```shell-session
curl -X POST \
-H 'Content-Type:application/json' \
-H 'Authorization: Bearer {ENTER_ACCESS_TOKEN}' \
-d '{
    "to": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        },
        {
            "type":"text",
            "text":"Hello, world2"
        }
    ]
}' https://api.line.me/v2/bot/message/push
```
`Authorization`には、先ほど保存しておいたトークンを利用します。

2.`to`には`userId`を渡す必要があるのですが、この`userId`をどこから引っ張ってくればいいかがわからない。

色々と探してみたところ、こちら『[大人の自由研究](http://ukkey3.blog33.fc2.com/blog-entry-682.html)』さんに、`Webhook URLから送付されてくるJSONデータの中に自分のuserIdが保存されているよ！`という解決策が記載されていたので早速Webhookの設定を行うことにします。

#`userId`の取得
1.Webhookで指定するURLを用意します。Webhook URLの設定では`https`のアドレスしか設定することができないので注意が必要です。
処理の内容としては単純にリクエストを受け付けてJSONデータを取得するだけのもので大丈夫です。

私は、DataSpiderとThunderbusを利用して環境を整えました。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/38456812-ae96-1069-bb60-05b6e08fc714.png)

2.`LINE Developers`の設定画面にあるbotのQRコードを利用してLINEで友達追加を行い、なんでもよいのでメッセージを送信します。
すると、先ほど設定したWebhook URLに結果データが送信されます。
DataSpiderで取得したデータサンプルは以下の通りです。

```xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root type="object">
  <events type="array">
    <element type="object">
      <type type="string"><![CDATA[message]]></type>
      <replyToken type="string"><![CDATA[1e7ff872af874b01ae710fa628e65328]]></replyToken>
      <source type="object">
        <userId type="string"><![CDATA[u68221926560079bd60951e46d82b4827]]></userId>
        <type type="string"><![CDATA[user]]></type>
      </source>
      <timestamp type="number"><![CDATA[1477197586416]]></timestamp>
      <message type="object">
        <type type="string"><![CDATA[text]]></type>
        <id type="string"><![CDATA[5097934696094]]></id>
        <text type="string"><![CDATA[テスト]]></text>
      </message>
    </element>
  </events>
</root>
```
この`U`で始まる文字列を利用します。

#DataSpiderで処理を実装する
情報が揃ったのでDataSpiderで実装をします。

 1. Messaging APIはRESTアダプタでPOSTするだけでよいのでとても簡単です。完成イメージはこちら。

![image](https://qiita-image-store.s3.amazonaws.com/0/35843/8070bb5b-1071-572a-abf6-02017c8b2900.png)

 2.RESTアダプタの設定を確認します。

 - グローバルリソースを設定します。リクエストのURLは`https://api.line.me/v2/bot/message/push`ですが`https://api.line.me/v2/bot/`までは他のAPIでも共通的に利用できるので`message/push`はアダプタ側の`パス`に設定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/f6d4bed1-0f3d-8c9d-270b-cf89ad1ba8b7.png)


 - `必須設定`タブの`パス`を設定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/e13820ee-f27e-65ca-616d-a0ca3d8019ea.png)


 - `リクエスト設定`タブでデータ入力元を`データ`、データ形式を`JSON`に設定します。指定するJSONのファイルは上記`API Referenceの確認`にある'Push Message APIの例'からコピーして利用します。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/d37d67d7-5d80-e1bb-ba56-48b7c390be29.png)

```json:JSONファイル
{
    "to": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        }
    ]
}
```

 - `レスポンス設定`ではファイルに出力するように設定しました。
 ![image](https://qiita-image-store.s3.amazonaws.com/0/35843/c5cb5b2b-a7fe-ab4f-bf84-599a0ed02964.png)

 - `ヘッダ設定`タブでは`Conten-Type`と`Authorization`ヘッダを利用します。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/2968fee9-bc4f-d1bb-62fa-89551e4ba4ad.png)

 3.マッパーの設定を行います。
ここではすべて`単一行文字列定数`を利用して固定値を設定しています。
赤い枠で囲まれているのはJSONスキーマの定義、青い枠が実際の設定値となります。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/24210aaf-4ed9-fcb7-96ac-9e3d2cc595c8.png)

送付するメッセージはこちら。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/d5c6c386-9f2a-da91-5a90-96fdbf7f8505.png)

以上で設定は完了です。

#実行する
 - デバッグ実行ボタンをクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/d739fca2-d777-0a8a-ddb0-bd75bdab8667.png)

 - LINEにメッセージが届きました。
<img width="375" alt="IMG_0321.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/35843/e48459e0-d337-5e42-a91b-840de9446be9.png">

#さいごに
LINE側の設定に少し手間取り、userIdをどうやって取得するのかということに悩みましたが、結果としてこんなに簡単にプッシュ通知を実現できるということはとても面白かったです。