【超初心者向け】LINE Botの簡単な作り方(Heroku,Cloud9)

## LINE Bot作成の流れ


参考記事：

- [Line Messaging API オウム返しBot(rails × heroku)](http://qiita.com/YoheiMiyamoto/items/f6851cdb40891edf0e57)
- [Rails HerokuでLINE BOTを試してみた](http://qiita.com/Arahabica/items/98e3d0d5b65269386dc4)

プログラムとかよくわかんねえけどLINEのBot作ったらやべえの！？的な人向け。俺もそう。なので、間違っていることが多々あることを承知で、俺的なアレを超語彙力高めに丁寧に書く。とりあえずLINE Bot作成の手順は以下の通り。

* LINEでそれ用のアカウントを作る
* Cloud９、Herokuでプロジェクト作成
* 色々紐付ける

とりあえずLINEでBot用のアカウント（これはLINEがタダで作らせてくれる）を作る。それだと、普通に店とかが使う用のLINE＠的な感じになるので、それをBot化するために「MesseagingAPI」ってやつを使う。これを使うと、「こんなメッセージが来たときはこうする」的なやつが使えるようになる。さらに「こうする」の部分をプログラムを書いて設定するんだけど、その設定がcloud9、Herokuで無料でできる。

## LINEでそれ用のアカウント作成

LINEのアカウント作って、それをAPI使用できるようにする。

* LINEビジネスセンター…LINEアカウントを作る場所 自分のアカウント自体も
* LINEマネージャ…LINEアカウントの基本的な管理をする場所
* LINEデベロッパーズ…LINEアカウントのBotよりの管理をするところ

### LINEアカウント作成

とりあえず、LINEのアレ用のアカウントを作る

ラインビジネスセンター
https://business.line.me/ja/

アカウントリスト
＞ビジネスアカウントを作成する
＞Messaging APIを始める
＞個人とか適当に
＞確認する
＞申し込む

### LINEアカウントのBOT設定

LINEアカウントで、APIを使えるように（Bot設定を）する

ラインマネージャ
https://admin-official.line.me/
 
APIを利用する＞確認＞OK

BOT設定：

* Webhook送信→利用する
* 自動応答メッセージ→利用しない

ちなむと

* 「ホーム投稿」下の「メッセージ」で簡単な応答設定ができる
* アカウント設定＞基本設定 で、人に送る用のQRコード、URLがわかる

この時点で、もう友達追加とかはできる。

### アクセストークン等の取得

アクセスするための識別番号的なものを取得しておく。

ラインマネージャ
https://admin-official.line.me/

Bot設定＞ステータスの「LINE Developersで設定する」
デベロッパーズ＞Channel Access Token＞ISSUE

チャンネルアクセストークンを発行して、以下の情報をメモっておく

- Channel Secret
- Channel Access Token

## プロジェクトの作成
### Cloud9でプロジェクト作成

Cloud9っていう、ブラウザ(ChromeとかFirefoxっとか)上でプログラムが書けるサービスに登録する。

[Cloud9](https://c9.io)

Create a new workspace＞Public＞Rubyとか

並行して、Herokuに登録しておく。Cloud9で書いたプログラムを、Herokuに設置するイメージ。Herokuはプログラムを設置する場所的なもの。LINE Botにメッセージを送ると、Herokuにアクセスがいって、Herokuに置いてあるコードが実行される流れになる。

少し古いが参考にした記事。とりあえず、一番上のオウム返しBotと、注意点の記事をコピペしまくったら、Railsとかよくわからないけどいけた。

- [Line Messaging API オウム返しBot(rails × heroku)](http://qiita.com/YoheiMiyamoto/items/f6851cdb40891edf0e57)
- [LINE BOTを試してみる(Cloud9 + Heroku)](http://qiita.com/hatahata/items/b1705e2e3f64fed82a3f)
- [【メモ】Cloud9からHerokuにRailsプロジェクトをデプロイする際の注意点(2015年10月)](http://qiita.com/noriyotcp/items/26165a556f96a5e844fe)


プログラムを送ったりログを見たりする場所(Cloud9の作業画面の下のほう)でHerokuにコードを置いたり、更新したりするために、Gitを使う。Gitはそういうツール。とりあえずこれを入れる。

```
git init
heroku login アドレスとパス入れる
heroku create 適当な名前 ←適当な名前は適当に名前アレする
# Name is already takenになったら名前変えてもう一回
```


###Herokuにfixieをインストール

なんかFixieっていって、必要なものらしい。無料だけど、herokuにクレカ情報入れないといけない

```heroku addons:create fixie:tricycle```

コンソール上でこれでもいけるけど、まだクレカ情報入れてない場合はherokuのサイトにいって直接入れる

右上のメニューみたいなアイコン＞Elements＞「Fixie」で検索＞login to install

Fixie>Account Details で、以下の情報をメモる。

・Proxy URL
・Outbond IPs


## それぞれの紐付け
###Whitelist、WebhookURL登録

ラインデベロッパーズ（下リンクのラインマネージャから進んだほうがわかりやすい）
https://admin-official.line.me/

ホワイトリストって言って、「こいつからアクセス来たときだけコード実行する」的な設定をする。「Server IP Whitelist」に、Fixieでメモった「Outbond IPs」を登録する。右側の入力ボックスには何も入れなくて大丈夫。

Basic Information＞Webhook URLに
https://アプリ名.herokuapp.com:443/callback
みんな色々言ってるけど、これでOK。問題ない。普通のURLではなく、443とかcallbackとか書かないといけない決まりなだけ。

### コンソールでHerokuにキーとか色々送る

Cloud9のコンソールからHerokuに、こういいう感じでやりますよ、的なものを言っておく。ここで、FixieのProxy URLと、LINEのシークレットキー、アクセストークンを入れる。

```
heroku config:add OUTBOUND_PROXY='コピペ'
heroku config:add CHANNEL_SECRET='コピペ'
heroku config:add CHANNEL_ACCESS_TOKEN='コピペ'
```

FOO=barとか出るときは、イコールの前後にスペースいれんなって話

で、プッシュ。プッシュは、Cloud9で書いたコードをHerokuに更新してあげるって話。プログラムを書き直したときは、とりあえず下のコードを入れておけば大丈夫。

```
git add .
git commit -m 'love kana nishino'
git push heroku master
```

これで確認。ラインマネージャでQRコードを表示して、モバイルのLINEで読み込んで友達追加。

ラインマネージャ
https://admin-official.line.me/

アカウント＞アカウント設定＞基本情報

## LINE Botのいじり方

とりあえず、俺みたいなよくわかってない人は、上のほうでコピペした記事をいじる形式になると思う。なので簡単にわかったことを書いておく。

※わかりやすいように書いてるだけなので、これ以下はコピペしないように。

```
ruby:webhook_controller.rb
def callback
	event_type = “message”
		output_message
	res = client.reply(replyToken, output_message)
end
```

とりあえずメッセージが来たら、output_messageに何かを入れて、replyっていう関数使っている。

```ruby:line_client.rb
def reply(replyToken, text)
	messages = [{“type” => “text”, “text” => text}]
	body = {"replyToken" => replyToken , "messages" => messages}
	post('/v2/bot/message/reply', body.to_json)
end
```

で、messagesに色々入れて、って感じ。messagesには、配列で5つまで要素を入れることができる。なので、messages = [{},{},{}]って感じで、入れていける。で、その入れる中身は、下のリンクのSend message objectって部分を参考にすれば多分大丈夫。なんかURL入れるときに、httpsじゃなかったら動かないっぽい？

[API Reference](https://devdocs.line.me/ja/#webhooks)