ノーコードで作る~売れ筋の本を教えてくれるLINE Bot

普段はインフラの運用などをしているので、アプリケーション開発的なことはほとんどしないのですが、ノーコードで何かやってみようと思って本を探せるLINE Botを作ってみました。

# 使用したツール
Line Developers

https://developers.line.biz/console/

Make

https://www.make.com/en/register

楽天ブックス書籍検索API

https://webservice.rakuten.co.jp/documentation/books-book-search

# 1. Line Developers
アカウントを作った後プロバイダーの設定、新規チャネル作成と進みます。
チャンネルの種類はMessaging APIを選択し、必要な情報を入力します。次のMakeの設定をするために、この段階で必要なのはMessaging API設定でチャネルアクセストークンを取得することです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/d8851d78-8716-aa52-9d98-d7829f54c92c.png)

# 2. Make
Line Developers同様アカウントを作り、新しいScenarioを作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/53aa548d-e8a5-e4f7-0098-4d672a6cdb04.png)

数ある、Lineの機能より"Watch Events"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/c8fce1ff-c512-3e2d-fa6e-0e054e4803e5.png)

Webhookを追加すると、Connectionを設定する画面が現れます。ここで、先ほどLine Developersで取得したチャネルアクセストークンをこちらにコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/2384ed28-be44-a98a-fe96-cce2821931d0.png)

そうするとこのようにWebhookのURLが生成されます。このURLは後でLine Developersで使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/e033798e-e0f7-f8be-205c-d7e23bb2d0a7.png)

作ったWebhookやConnectionはメニュー画面からも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/0b0827e5-c23d-d554-1123-e3648f4a1ae1.png)

# 3. Line DevelopersでWebhookの設定
Line Developersに戻りMessaging APIからWebhookの設定をします。先ほどMakeで作成したWebhookのURLをこちらにコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/12853254-0435-7123-0882-36b1e4bba5e1.png)

# 4. 楽天ブックス書籍検索API
楽天ブックス書籍検索APIでも同じくアカウントを作った後に、アプリIDの発行をします。これがないとAPIを呼び出せません。
APIのテストをするだけだと、アカウントがなくてもこちらからもできます。

https://webservice.rakuten.co.jp/explorer/api/BooksBook/Search

APIの詳細はこちらです。

https://webservice.rakuten.co.jp/documentation/books-book-search

今回は検索ワードを含んだ売れ筋の小説を見つけたいので、基本のURLはこのようになります。
```
https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?
        format=json
        &applicationId=[発行したアプリID]
        &booksGenreId=001004008
        &sort=sales
```

# 5. MakeでScenarioを設定
次にMakeに戻り、残りのScnarioを完成させます。下の通りすごくシンプルな設定です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/a302d3d8-688a-6ef6-0631-dbbbb846f4c1.png)

していることはLineから検索ワードを送り楽天ブックス書籍検索APIを呼び込み、戻されたJSONをパースしてLineに返すだけです。

## HTTP
すでに設定してあるLine Watch EventsにHTTP Make a requestを繋げます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/3d955fb0-cacd-0f00-8e2e-6dfff6b56762.png)

そこで、楽天ブックス書籍検索APIで作った基本のURLをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/d2fa4cd9-9436-1803-9515-78168a6dfb13.png)

Lineからは検索ワードを送るので、それをクエリーとして追加します。`Name`は`title`、`Value`はLineのEventsから`Message.Text`を設定します。これでLineで送った検索ワードがtitleのクエリーとしてURLに追加されます。

## JSON
楽天ブックス書籍検索APIで`format=json`と指定しているので、JSONをパースする機能を追加しHTTP Make a requestからParse JSONを繋げます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/28699cec-d78c-d7e5-1e86-673f3d729a1c.png)

JSONはHTTPのDataを設定します。

## LINE
最後にLINEから結果を送り返すために、Parse JSONからLINE Send a Reply Messageを繋げます。
まずこの段階で一度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/535be162-0473-f889-7dfd-78c6b14bbf14.png)
をクリックして、LINEでチャンネルを追加して一度試してみます。失敗してエラーを出しますが、それによってTextボックスをクリックしたときにJSONのパースされた結果を見ることができるので次の設定が楽になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/8ba75556-fca6-4908-cd12-5c1cd5b91715.png)

検索ワードにあった小説の売れ筋上位２冊を表示する事として、次のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/4ccb20fe-7514-4225-0ba8-45ba376f2277.png)

# 実際にLINE Botで本を探してみる
すでにチャネルはLINEに追加しているので、`Run once`をクリックして検索ワードを送ってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/15b4ab0a-a7b8-7ba2-20d3-ea703385b3d6.png)

# 最後に
ノーコードツールを使ってみたのですが、本当に全くコードを触ることなくLINE Botができました。コードらしいところといえば楽天ブックス書籍検索APIのURLを作ったところぐらいで、それ以外はすべてMake上の設定で行えます。JSON、HTTPヘッダー、トークン認証などの知識は若干必要ですが、これだったら初歩的な開発を始めるにはかなり簡単になったと思います。