# LINEのチャットbotを作る1
### <font color='red'>コロナの大きな影響</font>
---
学部2年になる時ですね. 新型コロナウイルスの大流行. 言うまでもなく, 多くの人が影響を受けたと思う. 自分は, 週1回続けていたバドミントンにも行かず, 家で授業を受けるだけの生活を続けてた. 不幸中の幸いで, 友達には本当に恵まれていたからなんとかやってけてた. そんな中でインターンシップを2年のうちに経験しておきたいなと思い, 8月のKITサマーインターンに応募してた. KITサマーインターンとは, 工大が紹介してくれるインターンで, 学内選考さえ通ってしまえば希望したとこに行けるよってやつです. 学校の成績は良かったからか, 神奈川の企業に2週間インターンに行くことになりました. いっておいで〜って学校から連絡が来たと同時くらいに, 神奈川の感染者数爆増. 学校から, 指定都府県のインターン参加は見送ってねと言われ行けなくなりました. さぁどうしようか, 2週間バイトも, 友達との予定も全部消してるよ. その時たまたま, 小学生の頃に通ってたバドミントンクラブのコーチが足りないと言う話を聞いて, 時間もあったし先生への恩返しで指導に携わってみようかなって思い参加しました.
### <font color='red'>指導を始めてから</font>
---
これだけバドミントンをやってきてたけど, 本格的な指導をするのは初めてで. その上, 3週間後に大会が控えているとなれば考えることは本当に多くて, 試行錯誤で今までやってきました. その時たまたまみたYouTubeでLINEアカウントを作れる情報を手に入れた. それを見て, 「クロネコヤマトの公式アカウントみたいに話してくれるLINEアカウントを自作して, 小中学生の遅刻•欠席の連絡対応自動化したらおもしいんじゃね」って. なーんも知識ないくせに, とりあえず突っ込んでみる精神でやってきてたから今回もとりあえず突っ込んでみた.
> ### LINEbot 自作 |検索|
### <font color='red'>LINEbotのチュートリアルはオウム返し</font>
---
だそうです. そこで見つけたのが次のサイト
https://qiita.com/kaonashikun/items/8004dfc9deea6c25754b
環境構築に2日かかったって. そんなわけあるかいと. こっちはもうまとめられたことやるだけなんだから, 初心者でもなんとかなるだろ. ここで使用したのは以下のものになります.
* Windows10
* Python
* flask
* heroku
* line-bot-sdk
なぜこれらを使用したのか. 単純にそれしか使えなかったからです. 当時はWindowsPCしか持っていないし, 言語としてもPythonが唯一入門レベルは分かるかなって理由です. flask以下なんて聞いたことすらなかったし, 推奨環境使うしかなかったんです. だってこのコード書いてる時のエディタ**秀丸**だからね. 静かにしてください.
### <font color='red'>大きすぎた第1の壁環境構築</font>
---
初心者です. 対戦お願いします. へ,
#### 環境変数?Git?Webhook?なにそれおいしいの.
対戦ありがとうございました. てな感じで結果, まとめられたとこ見てやるだけなのに, ガチで2日間かかりました. なんならそれ以上. Qiitaみたいに誰かに説明するために解説するページじゃないから, 自分のコード以外の部分はまたやったら迷うかもなってとこだけ, 備忘録として解説残しておきます.
```python=
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot. exceptions import (
InvalidSignatureError
)
from linebot. models import (
MessageEvent, TextMessage, TextSendMessage,
)
import os
app = Flask(__name__)
#herokuの環境変数に設定された, LINE DevelopersのアクセストークンとChannelSecretを
#取得するコード
YOUR_CHANNEL_ACCESS_TOKEN = os. environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os. environ["YOUR_CHANNEL_SECRET"]
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)
#herokuへのデプロイが成功したかどうかを確認するためのコード
@app. route("/")
def hello_world():
return "hello world!"
#LINE DevelopersのWebhookにURLを指定してWebhookからURLにイベントが送られるようにする
@app. route("/callback", methods=['POST'])
def callback():
# リクエストヘッダーから署名検証のための値を取得
signature = request. headers['X-Line-Signature']
# リクエストボディを取得
body = request. get_data(as_text=True)
app. logger. info("Request body: " + body)
# 署名を検証し, 問題なければhandleに定義されている関数を呼ぶ
try:
handler. handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
#以下でWebhookから送られてきたイベントをどのように処理するかを記述する
@handler. add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api. reply_message(
event. reply_token,
TextSendMessage(text=event. message. text))
# ポート番号の設定
if __name__ == "__main__":
port = int(os. getenv("PORT", 5000))
app. run(host="0. 0. 0. 0", port=port)
```
今回使わせてもらったコードです. ここから細分化して自分なりの解説と詰まったところ書いていこうかなと思います.
```python=
YOUR_CHANNEL_ACCESS_TOKEN = os. environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os. environ["YOUR_CHANNEL_SECRET"]
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)
```
* YOUR_CHANNEL_ACCESS_TOKEN
* YOUR_CHANNEL_SECRET
この部分は
https://developers.line.biz/ja/
ここからLINEアカウントでログインして, Messaging APIから今回作るアカウントを作成. そこで上記に対応する
* チャンネルアクセストークン(長期)の文字列
* チャンネルシーレットの文字列
をメモしておく. これらをこのままコードに書いていくのも良いんだけど, なにやら環境変数というものがあり, 良い感じにこいつらを扱えるみたい. 今回はherokuの環境変数を設定しました. 環境変数を設定する前に必要な準備をします.
```
$heroku login
$heroku create アプリ名
$git init // 初期化
$heroku git:remote -a アプリ名 // herokuのアプリとgitを紐付け
```
ここまで出来たら, 環境変数を設定できる環境が整う. 環境変数は以下の通り
```
$heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="チャネルアクセストークンの文字列" -a アプリ名
$heroku config:set YOUR_CHANNEL_SECRET="チャネルシークレットの文字列" -a アプリ名
```
環境変数が正しく設定できたか確認します.
```
$heroku config
```
正しく設定できてたらOK. 長くなってきたから一旦終了します. よかったら「LINEのチャットbotを作る2」書くので見てください!