LoginSignup
7
2

More than 3 years have passed since last update.

ラズパイ初心者がRaspberrypiZeroWHを使ってLINEで動くスマートロックを作ってみた(サーバー構築編2)

Posted at

前回のあらすじと今回の概要

前回は、docker-composeを用いてflaskとnginxをuwsgi繋げ、httpsでアクセスするところまで行った
今回はLINEのAPIを使ってオウム返しbotを作るところまでやろう

ディレクトリ構成

┣ ~
  ┣ app
    ┣ Dockerfile
    ┣ main.py
    ┣ requirements.txt
    ┣ uwsgi.ini
  ┣ docker-compose.yml
  ┣ nginx
    ┣ Dockerfile
    ┣ nginx.conf
    ┣ ssl
      ┣ fullchain.pem
      ┣ privkey.pem

LINEdevelopers登録・各種設定

Linebot作成、Messageing-APIを有効化

https://developers.line.biz/ja/
ここからログイン

公式ドキュメント参照
https://developers.line.biz/ja/docs/messaging-api/getting-started/

アクセストークンとチャネルシークレット発行

LINE Developersコンソールで、作成したチャネルを選択。
[チャネル基本設定]タブで、チャネルシークレット発行
[Messaging-API設定]タブで、チャネルアクセストークン(長期)を発行

Flaskサーバーの設定

~/appディレクトリ内のファイルを編集していく

requirement.txt

line-bot-sdkパッケージをインストールさせる

~/app/requirement.txt
Flask
uwsgi
line-bot-sdk     # 追加!!

main.py

以下のように4つのブロックを付け足す

~/app/main.py
from flask import Flask, render_template, request, abort
##1.line-bot-sdkの各モジュールをインポート################################
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
########################################################################

app = Flask(__name__)

##2.アクセストークンとチャネルシークレットを入力############################
line_bot_api = LineBotApi("YOUR_CHANNEL_ACCESS_TOKEN")    # アクセストークンを入力
handler = WebhookHandler("YOUR_CHANNEL_SECRET")           # チャネルシークレットを入力
########################################################################

@app.route("/")
def hello_world():
    return "hello world!"

@app.route("/.well-known/acme-challenge/<filename>")
def well_known(filename):
    return render_template('.well-known/acme-challenge/'+ filename)

##3.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)

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

    return 'OK'
########################################################################

##4.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__":
    app.run()

Webhookしてみる

Message-API基本設定タブからWebhookURLの欄にURLを入力
webhook1.png

更新→検証を押し、成功!が表示されたらOK
webhook2.png

自分のLINEに作成したbotを友達登録して、実際にbotにメッセージを送ってみる

success.JPG
オウム返しされたら成功!!
これにてサーバー構築終了!
お疲れ様!!

次回はLINEbotに送るメッセージに応じてサーボモーターを操作していくよ!
少し電気回路も触るけど、メインはコーディングだからソフトウェア編にかな

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