情報収集は Bot にお任せ！Qiita 記事を自動で送信してくれる LINE Bot -GAS編-


# 経緯
Qiita の記事を自動で送信してくれるLINE Bot を GAS で作成してました。
勉強のための情報収集の際に、毎日 Qiita で検索とかして情報を集めるのが面倒だったからです。
機会があって以下の LT で発表したところ、興味を持った方がいらっしゃったので、少しでも参考になればと思い、簡素ではありますが記事にしました。


エンジニアの勉強法ハックLT- vol.2 #studyhacklt
https://rakus.connpass.com/event/184999/

発表で使用した資料は以下の Slide Share から見れるので興味のある方はどうぞ
https://www.slideshare.net/MinoruIto3/rebot-238431101?ref=https://rakus.connpass.com/event/184999/presentation/

＊Azure Bot Service 側に関しては本記事の最後リンク等を貼っておきます。

システムの構成だとかに関してはまた追加するかもですが、とりあえずはサクッとお試しいただけるものを用意しました。

# 概要
下記の Git Hub の README.md にも書いてますが機能としては以下のようなことを行う LINE Bot です。

- 「Article」というWordに反応してQiita の記事を返す（ランダムワード）
- 「#azure」のような形式で入力することで特定のタグの記事を返す
- GAS の時刻指定実行の機能でProactive にQiita の記事を送信（ランダムワード）
- いずれの場合も最新 100 件のうち LGTM の多いものから7件をカルーセルで表示する

ざっくりとした構成は以下のようになってます。
主には 2. Proactive Message にて毎日自動で記事を取得してきてもらうのが情報収集の上では良いかなと思ってます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/c20280eb-e6de-1b2a-79a2-d590c47c3a62.png)



なお、使用している API のバージョンは以下の通りです。
より新しい ver にしたい等がある場合は注意してください。

- LINE Messageing API : v2
- Qiita : v2

# 作成した sample の試し方
## LINE Bot のリソース（？）の作成
LINE Bot のリソース作成等に関しましても一旦本記事では割愛いたします。
とりあえずは、以下の公式documentを参考いただけたらと思います。

LINE Developersコンソールでチャネルを作成する
https://developers.line.biz/ja/docs/messaging-api/getting-started/#using-console

適宜修正いただけたらと思いますが、とりあえず

- REPLY_MESSAGE が有効であること
- PUSH_MESSAGE が有効であること

くらいを確認いただけたらと思います。


## GAS 側の設定
clasp を用いて GAS に以下のコードを Deploy(?) していただけたらお手軽にお試しできるかと思います。
（clasp については詳しくないので、ご自身で調べていただいた方が良いかと）

Git Hub のコード
https://github.com/MinoMinoMinoru/QiitaBot-LINE

もし難しいようであれば、一つ一つファイルを作成して、コピペしてくのもありかと思います（そんな大きなプロジェクトじゃないので）

### GAS のコードの編集
LINE Bot との会話をする際に必要なアクセス トークン等を一部 Git Hub では消してますので、それぞれ値を入れる必要があります。2 つの js file に編集箇所があります。

#### push.js
以下の値をそれぞれ設定します。(コードの頭にてハードコーディングしてる)
- CHANNEL_ACCESS_TOKEN : LINE Bot との認証なんかで使用 
- USER_ID:Proactive Message の送信先を指定するのに使用

チャネルアクセストークンの値は LINE DEveloper の「Messaging API」から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/5e3e3795-cd3b-f481-8041-7da1b0c5b0b3.png)

また、ユーザ ＩＤ の値は LINE DEveloper の「チャネル基本設定」から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/d7f2735e-46be-0a5c-4403-1e12018e9310.png)


#### reply.js
以下の値を設定します。(コードの頭にてハードコーディングしてる)
もし Reply 機能を使わない場合には入れなくても大丈夫かと思いますが、念のためにどうぞ。

- CHANNEL_ACCESS_TOKEN : LINE Bot との認証なんかで使用

値は上記の push.js と同様に確認してください。

### GAS のtriggerの設定
時間駆動でmainfunction を実行するようにします。
mainfunction を見ていただくとカルーセルで記事を送信する function を呼び出してるだけになってます。
（なので、呼び出してる function を直接呼ぶのでも良いかもです。）

### GAS のtrigger設定：時間駆動の設定
Proactive Message(ユーザのアクションによらない、Bot からのメッセージ) を送信するには時間駆動で GAS を実行します。

「編集」の「現在のプロジェクトのトリガー」をクリックして
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/a2dd378b-9b15-4aef-bbf1-da18bd7915ab.png)

以下のような条件でtriggerをお好みで設定してください。

| 項目| 値 |
|:-:|:-:|
|   デプロイ時に実行|Head   |
|イベントのソース   |時間主導型   |
| 時間ベースのtriggerのタイプ  |日付ベースのタイマー   |

時刻に関してはお好みの時刻を入れてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/618cddb8-5d95-38cd-5b61-5a82f6d2eb14.png)

ちなみに、同じように設定して時刻をずらしたtriggerを複数設定することで一日に何回か Proactive Message を受け取ることもできます。

#LINE Developers 側の編集
LINE Developers 側はリソース作成時でほとんどの必要な動作は終わってます。
最後に Webhook の URL に GAS のエンドポイント（実行時に HTTP リクエストを送信する送信先の URL）を指定します。
これにより、Proactive Message だけでなくこちらから話しかける機能も実装できます。

Google App Script のプロジェクトを開いて「公開」より「ウェブ アプリケーションとして導入」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/11f22420-bb01-6408-6d1b-670652bdcc49.png)

すると、その GAS のエンドポイントが発行できるかと思います。
その URL をコピーして、LINE Developer で該当の LINE Bot を開いて、「Messaging API」からWebhook を有効にして、Webhook の URL に先ほどコピーした GAS のエンドポイントを指定します。 (一応、検証ボタンを押して有効かどうか検証しておきましょう。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/980ea41a-3c6e-5206-8f2a-67654205fc99.png)



ここまででとりあえず私の作成したサンプルに関しては動作するかと思います。
お疲れ様でした。

取り急ぎ、簡易なサンプルをサクッとお試しいただくために簡素な記事にしましたが、必要に応じてまた適宜書き足していこうかと思います。


# 最後に
多くの方が Bot に興味をもっていただけたらうれしいです。
冒頭でお話していた Azure Bot Service に関して、2020年4月頃に発表した際の資料ですが、興味がおありの方は以下をどうぞ。

Azure Bot Service を用いた Bot 開発 - CosmosDB と Logic Apps を添えて -
https://www.slideshare.net/MinoruIto3/azure-bot-service-bot-cosmosdb-logic-apps

また、もし他にIT系の情報収集として良い API 等ご存知の方は教えていただけるとうれしいです(笑)