LoginSignup
0
2

農業用ハウスの開閉をLINEでリモート管理できるようにした話 Part4

Last updated at Posted at 2024-02-20

Part4です。今回はLINEbotとサーバーの設定、メッセージ送信のテスト等が中心となります。

LINEDevelopersへのログイン

先に楽な作業をこなしてしまいます。
個人で使っているLINEアカウントでこちらのページからログインしてください。
個人のアカウントを持っていない/使いたくない方はLINEビジネスアカウントを作成してログインしてください。
image.png
必要な情報を入力してLINEDevelopersコンソールに登録します。

botアカウントの作成

登録が完了するとDevelopersコンソールに入ります。「新規プロバイダー作成」をクリックして名前を入力してください。プロバイダー名はユーザーの同意画面に表示されるので、わかりやすい名前にしておきます。
image.png
つぎにMessagingAPIを選択します。
image.png
必要な情報を入力してください。
image.png
利用規約を確認したら作成します。
image.png
同意画面が出るので確認してください。

最後にMessaging API設定のタブを開き、下の方にあるチャネルアクセストークンの項目まで移動します。発行と書かれたボタンをクリックして、アクセストークンと呼ばれるbotを設定するための鍵を作ります。このトークンは重要なものなので、慎重に扱ってください。
image.png

次にMessagingAPIのタブを開いて、下にあるLINE公式アカウント機能の「編集」をクリックしてください。
image.png
次の画像のような設定ページに飛ぶので、画像のようにWebhookのみ設定を入れるように変更してください。
image.png

次に左の設定の欄からアカウント設定を開き、「写真や動画の受け取り」を「受け取らない」に変更します。
image.png

いったんLINEDevelopers側の設定は終了です。

サーバーの構築

ここからラズパイを使った作業に移ります。今回はラズパイのコマンド操作に慣れるための練習にしようと思うので、本番環境とは少しだけ違います。最初から本番環境で作業したい方は飛ばしてください。

なお、ここからは基本的にラズパイ上で作業をしています。

外部サイトの作業

今回はngrokと呼ばれる外部サービスを利用して、簡単にLINEbotを作りたいと思います。

こちらのngrok公式ページにアクセスして、右上のSign upからアカウントを作成してください。
そして、Welcomeと書いてあるところのしたのリストから「RaspberryPi」を選んで
image.png
Aptを選んで、赤い丸印のボタンを押してコマンドをコピーします。
image.png
ラズパイのコンソールを起動して、右クリックからPasteを選ぶかCtrl+Shift+Vキーでコンソールに貼り付けて実行します。

処理が終わったら、同じように一段下のコマンドも実行します。add-authtokenの後ろの文字列は認証キーなので扱いに気をつけてください。
image.png

botの作成

コンソールを開いて次のコマンドを実行します。
LINE_CHANNEL_SECRET=hogehoge
hogehogeの部分にはLINEDeveloppersのこの部分の文字列を入れてください。例によってCtrl+Shift+Vキーでペーストできます。これは環境変数と呼ばれる、システム側に情報を保存するための設定です。
ラズパイの電源が切れると消えてしまうので、作業中にフリーズして電源を落としたりした場合は打ち直してください。
image.png
同じように
LINE_CHANNEL_ACCESS_TOKEN=hogehoge
と入力します。ここのhogehogeにはMessaging API設定のタブの下にある、チャネルアクセストークンの長い文字列をコピペしてください。
image.png
botを作って作業するためのフォルダをデスクトップに作ります。名前は何でも良いですが、今回はlinebotという名前にしました。
作ったフォルダの中にテキストファイルを作成し、次のプログラムをコピペします。

# -*- coding: utf-8 -*-

import sys
import os

from flask import Flask, request, abort

from linebot.v3 import (
	WebhookHandler
)
from linebot.v3.exceptions import (
	InvalidSignatureError
)
from linebot.v3.webhooks import (
	MessageEvent,
	TextMessageContent,
)
from linebot.v3.messaging import (
	Configuration,
	ApiClient,
	MessagingApi,
	TextMessage,
	ReplyMessageRequest,
)

app = Flask(__name__)


channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN')
channel_secret = os.getenv('LINE_CHANNEL_SECRET')

handler = WebhookHandler(channel_secret)

configuration = Configuration(
	access_token=channel_access_token
)

@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=TextMessageContent)
def handle_message(event):
	with ApiClient(configuration) as api_client:

		if event.message.text == 'こんにちは':
			msg = 'こんにちは'

		elif event.message.text == 'こんばんは':
			msg = 'こんばんは'
		
		else:
			msg = 'なんて?'

		line_bot_api = MessagingApi(api_client)
		line_bot_api.reply_message_with_http_info(
			ReplyMessageRequest(
				reply_token=event.reply_token,
				messages=[TextMessage(text=msg)]
			)
		)


if __name__ == "__main__":
	app.run(host="localhost", port=5050)	# port5050

これは「こんにちは」「こんばんは」というメッセージには対応する挨拶を、それ以外には「なんて?」と返すプログラムです。
これをapp.pyという名前にして、先程作成したフォルダに保存します。

botの起動

テスト環境もできたのでbotを動かします。まずコンソールでsudo ngrok http 5050を実行してngrokクライアントを立ち上げます。
次に新しいコンソールを起動して、cd Desktop/linebotで作業ディレクトリに移動しpython app.pyと入力して実行します。プログラムのコピペがうまくできていれば、赤い文字で警告が出てbotが起動します。
image.png

botが起動したのでテスト...と行きたいのですが、LINEのサーバーとbotをつなぐ設定をまだしていません。

先ほど起動したngrokの画面を開くと以下のようなURLがあると思います。
image.png
画像の白い線で囲った部分だけをマウスで選択して、右クリックでコピーします。
次にLINEDevelopersコンソールを開きます。MessagingApi設定のタブを開き、WebhookURLの場所に貼り付けます。
image.png

そのあと、入力したURLの最後の部分に/callbackという文字を付け足してください。
image.png

次に、検証というボタンをクリックします。「200 OK」が表示されたら成功です。それ以外が出てしまったら、ngrokに何かエラーが出ていないか、ngrokのURLが正しいか、ラズパイがネットに接続されているか、app.pyの中身が正しいか等を確認してください。

image.png
失敗の例

botのテスト

LINEDevelopersコンソールのMessagingApi設定の場所にQRコードが表示されているので、お手持ちの携帯でスキャンしてください。でてきたbotを友達に登録して、「こんにちは」等のテキストメッセージを送信してください。返事が返ってくれば成功です。

botを終了させる場合はコンソールを開いてCtrl+Cキーで終了できます。コンソールをそのまま閉じることでも終了することができます。一度ngrokを終了するとURLが変わってしまうので、再度立ち上げるときはURLを入力しなおしてください。

ここまでお疲れさまでした。Part4はここまです。次回はモーターの回転プログラムの作成と、本番環境でのサーバー構築です。

0
2
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
0
2