10
11

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 3 years have passed since last update.

【Python】【LINE Bot】オウム返しLINE Botを作成する

Last updated at Posted at 2020-05-12

今さらながらですが、ふとLINE Botを作成してみようと思い、
ただただオウム返しをするLINE Botを作ってみました。
スクリーンショット 2020-05-12 20.39.28.png

#1.LineMessagingAPIのチャネルを作る
##LINE Developersでチャネルを作成
基本的に以下の公式ページに従って特に問題なく登録できるはず
Messaging APIを利用するには | LINE Developers

スクリーンショット 2020-05-12 20.48.49.png

無事チャネルが登録できると↓のような状態に
スクリーンショット 2020-05-12 20.58.26.png

あとで必要になるので以下の2つを確認しておく
 ・ Channel secret ← Basic Settingタブの中にあります
 ・ Channel access token (long-lived) ← MessagingAPIタブの中にあります

#2.Heroku
##アカウントを作成する
基本的に以下の公式ページに従って特に問題なく登録できるはず
Heroku Dev Center

スクリーンショット 2020-05-12 21.14.40.png

##Heroku CLI をダウンロード
以下のページからHeroku CLIをダウンロード・インストールする
The Heroku CLI | Heroku Dev Center

スクリーンショット 2020-05-12 21.21.03.png

無事インストールが完了すると、ターミナルでherokuコマンドが使用できるようになっているはず
スクリーンショット 2020-05-12 21.24.23.png

#3.デプロイするファイルの作成
##ファイルの構成
以下の構成でファイルを作成する
スクリーンショット 2020-05-12 21.29.07.png

###main.py
プログラムの本体部分

main.py
# -*- coding: utf-8 -*-
#  Licensed under the Apache License, Version 2.0 (the "License"); you may
#  not use this file except in compliance with the License. You may obtain
#  a copy of the License at
#
#       https://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#  License for the specific language governing permissions and limitations
#  under the License.

import os
import sys
from argparse import ArgumentParser

from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

# get channel_secret and channel_access_token from your environment variable
channel_secret = os.getenv('LINE_CHANNEL_SECRET', None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)
if channel_secret is None:
    print('Specify LINE_CHANNEL_SECRET as environment variable.')
    sys.exit(1)
if channel_access_token is None:
    print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.')
    sys.exit(1)

line_bot_api = LineBotApi(channel_access_token)
handler = WebhookHandler(channel_secret)


@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def message_text(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)

###Procfile
プログラムの実行方法

web: python main.py

###requirements.txt
使用するモジュール

Flask==0.12.2
line-bot-sdk==1.8.0

###runtime.txt
pythonのバージョンを記載

python-3.6.6

#4.Herokuにデプロイ
##gitレポジトリを作成し、コミット
ターミナルなどから以下のコマンドを実行する

$ cd line-bot
$ git init
$ git config user.name "名前"
$ git config user.email メールアドレス
$ git add .
$ git commit -m "コメント"

$ cd line-bot : ルートディレクトリへ移動
$ git init : gitレポジトリの初期化
$ git config user.name "名前" : configの設定
$ git config user.email メールアドレス : configの設定
$ git add . : 追加
$ git commit -m "コメント" : コミット

##Herokuへログイン
以下のコマンドを実行しHerokuへログイン

$ heroku login

実行すると以下のような状態になるので何かキーを押すとブラウザでログイン画面が表示されるので、
Log Inボタンをクリックしてログイン状態にする
スクリーンショット 2020-05-12 21.46.31.png
スクリーンショット 2020-05-12 21.46.39.png

##アプリケーションを作成し、デプロイ
以下のコマンドを実行し、Herokuにアプリケーションを作成・デプロイする

$ heroku create アプリケーション名
$ heroku config:set LINE_CHANNEL_SECRET="Channel Secret" --app アプリケーション名
$ heroku config:set LINE_CHANNEL_ACCESS_TOKEN="アクセストークン" --app アプリケーション名
$ git push heroku master

アプリケーション名は任意の名前
「Channel Secret」と「アクセストークン」はLINE Developersでチャネルを作った時に確認したものを設定する

##build packの設定
build pack の設定ができてないとデプロイに失敗する場合がある。
その場合は以下のコマンドを実行し、build packを設定する

$ heroku buildpacks:set heroku/python

#5.LINE Bot側でwebhookの設定
LineDevelopersのコンソールから作成しておいたチャネルのWebhook settingsを設定する
Webhookを使用するにし、webhook URLに以下のURLを指定する

https://アプリケーション名.herokuapp.com/callback

#完成
ここまでの作業が完了するとオウム返ししてくれるボットが完成しました!
HerokuもGitもMessagingAPIも使ったことない初心者でしたが、意外と簡単に作成できました
今後はこれをもとに何か作れたらいいなぁ
スクリーンショット 2020-05-12 22.16.00.png

10
11
0

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
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?