13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonでオウム返しをするLine botを作成

Last updated at Posted at 2018-10-25

##はじめに
プログラミング初心者こそChatbotを開発すべき理由とは?[from CodeIQ]をみてLine botを作ってみたいと思いました。

##環境
・windows
・Python 3.6.3
・Heroku

##概要
・Line developersに登録
・実装
・Herokuの設定

#Line developersに登録
Line developersの準備については以下を参照してください。
LINEのBot開発 超入門

#実装
コードはこちらに載せておきます。
基本的にはサンプルをベースにしています。
はじめにflaskとline-bot-sdkをインストールします。

terminal.
pip install flask
pip install line-bot-sdk

サンプルだと最後がapp.run()となっていますが、それだと応答しないので変更します。

main.py
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__)
#環境変数の取得
YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンを入力"
YOUR_CHANNEL_SECRET="Channel Secretを入力"
line_bot_api=LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler=WebhookHandler(YOUR_CHANNEL_SECRET)

@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)

    try:
        handler.handle(body,signature)
    except InvalidSignatureError:
        abort(400)
    return "OK"

@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)
    

#Herokuの設定
Herokuの準備はHeroku初心者がHello, Herokuをしてみるを参照してください。
アカウント認証まで完了したら、アプリケーションを作成します。
コマンドからheroku createで作れます。
なお、アプリケーション名を入れなかった場合は自動的にアプリケーション名が決められます。

terminal.

heroku create 任意のアプリケーション名

次に環境変数を設定します。
ここでLine developersで作成したアクセストークンとChannel Secretを使います。

heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" 
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" 

###設定ファイルの作成
mian.pyと同じ階層にruntime.txtとrequirements.txtとProcfileを作成します。

runtime.txt(Pythonのバージョンを記載)
python-3.6.3
Procfile.(プログラムの実行方法を定義)
web: python main.py

requirementsは

terminal.

pip freeze > requirements.txt

で準備ができます。なお、手動でもよいです。

requirements.txt
Flask==1.0.2
line-bot-sdk==1.8.0

#Webhookの設定
Line developersに戻り、Webhook URLを設定します。
2018-10-25 (4).png
ここでは、接続確認は不要です。

###ファイルのデプロイ
main.pyなどがある階層で

terminal.
git init
git add .
git commit -m "first commit"
git push heroku master

を入力します。
コマンドからgitが使えない場合はコマンドラインからGitを使うを参照してください。

###うまくいかない場合
heroku logs --tailでエラーを確認してください。

####個人的によくあるエラー
git push heroku masterをして以下のようなエラーがでた場合は

fatal: 'heroku' does not appear to be a git repository
fatal: Could not read from remote repository.

heroku git:remote -a herokuで作成したアプリケーション名
を入力してから再びpushすると上手くいくと思います。

##注意
自分のアクセストークンをリモートリポジトリにpushしないでください。

13
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?