PythonによるLINEbot作り方
こんにちは!
今回はPythonを使って、オウム返しをするLINEbotの作り方を解説します。
デプロイはしないため、ローカル環境だけでサクッと試すことができます。
これなら、初心者の方でも簡単に作れるかと思います。
是非、最後まで読んでみてください。
この記事でわかること
- LINEbotの作り方
- デプロイ無しでLINEbotを試す方法
- LINEbotを応用するためのヒント
準備
始めに、必要なものをすべて書き出してから1つずつ見ていきます。
今回、LINEbotを作るにあたって必要なものを以下に示します。
今回必要なもの
- LINEアカウント
- ngrok
LINEアカウント
LINEアカウントは、LINE Developersに登録するために必要となります。
では、こちら のリンクからLINE Developersに登録していきましょう。
STEP.1
リンク先に飛ぶと、このような画面が表示されているかと思います。
画面中央付近の「ログイン」をクリックします。
STEP.2
ログイン方法を選択できると思うので、自分のアカウントなどでログインしてください。
STEP.3
ログインできたら、このような画面になると思います。
空欄の名前とメールアドレスを埋めたら「Create my account」をクリックします。
STEP.4
次は、このような画面が表示されると思うので、ここで新規プロバイダーを作成します。
プロバイダーとは、アプリを提供する組織のことです。
よくわからなくてもいいので、とりあえず名前を入力して、「Create a new provider」をクリックしましょう。
STEP.5
次は、チャンネルを作成します。
チャンネルは、botアカウントのことだと思ってもらえれば大丈夫です。
LINEbotを作成するためには、オレンジで囲んだ「Messaging API」を選択します。
STEP.6
次は、このような画面が表示されると思うので、空欄を適当に埋めて「作成」をクリックしてください。
ここまでできれば、ひとまずLINE Developersでの作業は完了です。
ngrok
次は、公式サイトから、ngrokをダウンロードしていきましょう。
ngrokは、外部からローカルサーバーにアクセスできるようにするためのものです。
これを使うことによって、localhostでLINEbotを試すことができます。
デプロイまでやろうとすると少し難しくなってしまうので、初心者の方はこちらのngrokがおすすめです。
自分のPCのOSに合わせてダウンロードしてください。
これで下準備は完了です。
次の章からは、実際にPythonを使ってコーディングしていきます。
Pythonのコード解説
今回は、LINEbotというディレクトリの中に2つのファイルを作成します。
1つ目が、APIのキー情報を書き込む、「config.py」
2つ目が、実際にLINEbotを制御する、「app.py」
まあ、名前は適当につけてもらって構いません。
ただ、「linebot.py」というファイル名にしてしまうと、linebotというライブラリをインポートする際に、うまくいかなくなる恐れがあるので注意してください。
まずは、LINEbotに必要なライブラリをインストールします。
最初に、config.pyの中身を書き込んでいきます。
1 2 |
LINE_CHANNEL_SECRET = "*************************" # チャンネルシークレット LINE_CHANNEL_ACCESS_TOKEN = "*************************" # チャンネルアクセストークン |
それぞれのキーは、前の章で作成したLINEのチャンネルから取得できます。
作成したチャンネルにアクセスして、「チャンネル基本設定」の下付近を確認してもらうと、「チャンネルシークレット」という欄があると思います。
この黒塗りされたところを、config.pyの変数、LINE_CHANNEL_SECRETの「****」部分にコピペします。
表示されていない場合は、右側の「発行」ボタンをクリックしてください。
そうすれば表示されると思います。
次は、同じページ内にある「Messaging API設定」をクリックしてください。
こちらも下の方に「チャンネルアクセストークン」と書かれたところがあると思います。
先ほどと同様に、表示されていない場合は、右側の「発行」ボタンをクリックしてください。
これを、config.pyの変数、LINE_CHANNEL_ACCESS_TOKENの「****」部分にコピペします。
「config.py」の内容は以上です。
config.pyに入力したキーは外部に公開しないように気を付けてください。
今回は、LINE Developersが公式で公開しているひな形を利用します。
公式のリポジトリはこちら になります。
公式のコードを一部改変したものはこちらになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import config # 先ほど作成したconfig.pyをインポート 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__) line_bot_api = LineBotApi(config.LINE_CHANNEL_ACCESS_TOKEN) # config.pyで設定したチャネルアクセストークン handler = WebhookHandler(config.LINE_CHANNEL_SECRET) # config.pyで設定したチャネルシークレット @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: print("Invalid signature. Please check your channel access token/channel secret.") abort(400) return 'OK' @handler.add(MessageEvent, message=TextMessage) def handle_message(event): if event.reply_token == "00000000000000000000000000000000": return line_bot_api.reply_message( event.reply_token, TextSendMessage(text=event.message.text) ) if __name__ == "__main__": app.run(host="localhost", port=8000) # ポート番号を8000に指定 |
14 ~ 36行目までのコードは、基本的には変更する必要はありません。
( import部分は場合によって変わる )
39行目にある、 @handler.add(MessageEvent, message=TextMessage) から下の部分が、名前からわかるように、テキストメッセージを受け取った際に実行される関数です。
この、39 ~ 47行目の関数の中で、オウム返しを行っています。
41, 42行目は、LINE developers の方から動作確認をする際に、エラーが発生しないようにするために書き加えました。
44 ~ 47行目が、LINE側からメッセージを返信する部分となっています。
line_bot_api.reply_message() には2つの引数を指定しています。
1つ目の引数に指定されている event.reply_token は、メッセージの返信先の情報を与えています。
2つ目の引数に指定されている TextSendMessage(text=event.message.text) は、返信するメッセージの内容を指定しています。
event.message.textの部分は、LINEから受け取った値が格納されているため、この場合だと、受け取った値をそのまま返信している、ということになります。
つまり、この部分を別の文字列等に置き換えることで、自由に返信内容を指定することができます。
「app.py」の内容は以上です。
では、次の章で実際に実行してみましょう。
LINEbotの実行
まずは、LINEbotを動かすための手順を書き出してから1つずつ見ていきます。
- app.pyを実行する
- ngrokでローカルホストに外部からアクセスできるようにする
- 動作確認
では、さっそく見ていきましょう。
app.pyを実行してみます。
実行すると、以下のような画面が表示されると思います。
エラーが発生しなければ、とりあえず次に進みます。
記事の頭の方でダウンロードしたngrokを、解凍した後に実行します。
実行すると、このようなプロンプト画面が開くと思うので、 ngrok http 8000 と打ち込みます。
すると、以下のような画面が表示されるかと思います。
オレンジの線を引いたところにあるURLをコピペするなりしてください。
また、この画面を抜けるには Ctrl + C を押せばいいのですが、LINEbotを利用する間は常に起動させておいてください。
では、先ほどのURLをLINE Developersの方に張り付けていきます。
上の方で、チャンネルアクセストークンを取得するためにアクセスした「Messaging API設定」画面にアクセスします。
画面中央付近に、「Webhook設定」という項目があると思うので、「Webhook URL」の欄に先ほどコピペなりしたURLを貼り付けます。
「Webhookの利用」をオンにしていない場合はオンにしてください。
貼り付けたら、その後ろの方に「/callback」を追加してください。
そこまでできたら、検証をクリックしてみましょう。
このように表示されていたら成功です。
もしエラーが表示された場合は、Pythonを実行したプロンプトからエラー内容を確認してみてください。
では、実際にbotアカウントを友達追加して、メッセージを送ってみましょう。
botアカウントのQRコードは、「Messaging API設定」のページ内にあるので、そこから友達追加します。
オウム返しできていることが確認できました。
LINEbotの作り方は以上です。
今回のLINEbotは、ngrokを終了すると動かくなるので注意してください。
また、ngrokを起動し直す場合、再び「Webhook URL」のところでURLを設定し直す必要があります。
実用的なものを作りたいのであれば、デプロイ方法なども調べてみてください。
おわりに
LINEbot作成はどうだったでしょうか。
今回取り上げた例はチュートリアル的な内容なので、あまり面白くなかったかもしれませんが、LINEbotの雰囲気だけでもつかめてもらえれば、自分でアレンジできると思います。
ちなみに、僕が先日作ったものだと、Twitter APIも絡めることによって、LINEのメッセージからツイートできるというものを作ったりしてみました。
こんな感じで、他のAPIと絡めてみると面白いかもしれません。
Twitter APIの取得方法については、こちらで詳しく解説しています。
>>【2020年版】Twitter API 申請手順の解説【画像付き】
是非、いろいろ試してみてください!
では、今回はここまでとします。
お疲れさまでした!