Node.jsで LINE BOT作ってみる のメモ【1時間でできる！】

# LINE BOTとは
自動的にメッセージを通知したり、返してくれたりするシステム

__Line Messaging API__
あなたのサービスとLINEユーザーの 双方向コミュニケーションを 可能にします。https://developers.line.me/ja/services/messaging-api/)

# LINE BOTの事例
+ LINEデリマ | LINEで簡単注文できる出前・宅配・デリバリーサイト
+ ヤマト運輸　不在通知、荷物のお届け予定の通知。配達状況の確認や日時変更もできる

# BOTとは
> botとは、人間に代わって作業を行うコンピュータープログラムの総称。
> 語源は人に代わって作業を行う機械「ロボット(ROBOT)」から。
> 冒頭ではコンピュータープログラムの総称と書いたが、単にBOTと言った場合、インターネットにおける何らかのタスクを自動で繰り返し続けるプログラムを指す。そのため、ローカルマシン内でのみ活動するプログラムは含まない事が多い。
> -ニコニコ大百科より

# やること

1. Botアカウントを作成する
2. プロジェクトを作成する（コピペ）
3. LocalHostで確認できるようにする
4. デプロイする

# 概要

1. Botアカウントを作成する
LINE developerのサイトMessaging APIのページでアカウントを作成
Developers Trialプランを選択（友だち追加は50人までです）
https://developers.line.me/ja/services/messaging-api/

2.プロジェクトを作成する

+ Node.js
+ npm
インストール済が前提。コードはコピペする。

3.LocalHostで確認できるようにする

+ 手元のPCのlocalhostにグローバルからアクセスできるようにするトンネリングツールを利用
+ ngrokでトンネリング
+ npm経由でngrokをインストール
+ サーバーの起動
+ WebhookURLをLINE developersに登録する
+ Botが動く！

4.デプロイする

+ nowでデプロイ
+ 無料プランでは、ソースコードが公開されるためSecretsを利用
+ WebhookURLをLINE developersに登録する
+ Botが動く！


参照させていただいた記事

+ [1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest](https://qiita.com/n0bisuke/items/ceaa09ef8898bee8369d) 
+ [Now.shを使って15分でLINE Botをデプロイする](https://qiita.com/vimyum/items/2226daa74444575811b5)

環境
node v9.4.0
npm v5.6.0
macOS El Capitan 10.11


メッセージをおうむ返しするBOTを作ってみる
# 1.Botアカウントを作成する

LINE Messaging API
LINE Developers https://developers.line.me/ja/

# 2.プロジェクトを作成する（コピペ）
プロジェクトを作成

```shell-session
$ mkdir myapp
$ cd myapp
$ npm -y init
$ npm i --save @line/bot-sdk express
```

LINE Botの本体server.jsを作成

```shell-session
$ touch server.js
```

ディレクトリ構成の確認

```shell-session
$ ls
server.js            node_modules      package-lock.json package.json
```

エディタでserver.jsを編集
公式のサンプルEcho botをコピペする
line/line-bot-sdk-nodejs
https://github.com/line/line-bot-sdk-nodejs/blob/master/examples/echo-bot/index.js

# 3.LocalHostで確認できるようにする
※server.jsの編集　アクセストークン、アクセスシークレットを入力する

```js:server.js
const config = {
  channelAccessToken: ‘ここ’,
  channelSecret: ‘ここ’,
};
```

## ngrokでトンネリング
手元のPCのlocalhostにグローバルからアクセスできるようにするトンネリングツールを利用
トンネリングとは、ある2点間のネットワークをインターネットの公衆回線を介し、パケットをカプセル化して通信を行うことである。
npm経由でngrokをインストール

```shell-session
$ npm i -g ngrok
```

別のタブを開いて作業
サーバーの起動

```shell-session
$ node server.js
```

トンネリングして外からアクセスできるようにする

```shell-session
$ ngrok http 3000
```

こんな感じで成功

```shell-session
ngrok by @inconshreveable                                                                             (Ctrl+C to quit)
                                                                                                                      
Session Status                online                                                                                  
Session Expires               7 hours, 55 minutes                                                                     
Version                       2.2.8                                                                                   
Region                        United States (us)                                                                      
Web Interface                 http://111.0.0.0                                                                   
Forwarding                    http://0000000.ngrok.io -> localhost:3000                                              
Forwarding                    https://0000000.ngrok.io -> localhost:3000 
```  

`https://0000000.ngrok.io` + `/webhook`がWebhookURLとなります！

WebhookURLをLINE developersに登録する
<img width="639" alt="スクリーンショット 2018-06-21 午後4.35.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/258078/bdff7cdc-6db9-521e-29e2-b50f92dd6cb0.png">

Botが動く！

# 4.デプロイする
nowのインストール

```shell-session
$ npm install -g now
```

nowの無料プランでは、ソースコードが公開される
公開したくない情報をSecretsに環境変数として登録する

※server.jsの編集　アクセストークン、アクセスシークレットを編集する

```js
const config = {
  channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN,
  channelSecret: process.env.CHANNEL_SECRET,
};
```

Secretsにアクセストークンとアクセスシークレットを登録

```shell-session
$ now secret add line-token XXXXXXXXXXXXXX
$ now secret add line-secret YYYYYYYYYYYYYY
```

デプロイ

```shell-session
$ now -e CHANNEL_ACCESS_TOKEN=@line-token -e CHANNEL_SECRET=@line-secret
```

LINE DecelopersのWebHookURLを更新する

Botがいつでも動く！

URLを固定する

+ nowでは、アプリのURLはデプロイのたびに変更される
+ デプロイバージョンに関わらず固定化されたURLを使うためAliasを登録する

```shell-session
$ now alias set https://xxx-abcyezicoh.now.shmyapp
```

+ LineDevのWebHookURLに登録する

以上！お疲れさまでした！


次回は
[RaspberryPi3を使ってLINE BOTに部屋の温度を教えてもらう 【node.js】](https://qiita.com/mochifuture/items/16085eca1d49ab9effaa)