[PYTHON] Senden Sie eine Push-Nachricht an LINE Bot, wenn die LTE-M-Taste gedrückt wird [SORACOM]

Einführung

Dieser Artikel ist das zweite Kapitel eines Artikels mit vier Kapiteln.

  1. SORACOM Summer Challenge 2020
  2. Senden Sie eine Push-Nachricht an LINE Bot, wenn die LTE-M-Taste gedrückt wird [SORACOM]: arrow_backward: Jetzt hier
  3. [Raspberry Pi] Wenn der menschliche Sensor dies erkennt, speichern Sie den Zeitstempel in der Firebase-Echtzeitdatenbank
  4. SORACOM mit Haushaltsgeräten und LINE Bot [Python / Flask / Raspberry Pi] verknüpfen ** Alle Quellen veröffentlicht **

Auslösen

Es wird angenommen, dass die LTE-M-Taste gedrückt wird, wenn einem älteren Elternteil, der weg wohnt, etwas passiert. Es gibt eine Funktion zum Benachrichtigen von LINE Notify von SORACOM Lagoon, aber ich habe mich für einen LINE Bot entschieden, da ich die Aktion nicht auswählen kann, nachdem die Benachrichtigung nur per SMS erfolgt. Es ist schön, einen einfachen Mechanismus mit nur einem Knopf wie diesem zu haben, denn selbst ältere Menschen, die nicht gut mit Maschinen umgehen können, können ihn visuell sehen. LTE-M Button

Betriebsumgebung

Raspberry Pi 3 Model B Python 3.7.3 Flask==1.1.2 line-bot-sdk==1.16.0

Bis LTE-M Button und LINE Bot verbunden sind

Für eine bestimmte Verwendung die offiziellen Erstellen eines Dashboards mit SORACOM Lagoon und [Benachrichtigung mit SORACOM Lagoon] Es wird ausführlich in Einstellung beschrieben, daher werde ich es weglassen. Die LTE-M-Taste sendet Daten vom Typ Int, z. B. 1 für 1 Klick, 2 für Doppelklick und 3 für langes Drücken. Da dies ein Notfall ist, weiß ich nicht, welche Art von Tastenbedienung ausgeführt wird. Aus diesem Grund haben wir beschlossen, eine Warnung zu senden, wenn der Wert 0,5 oder mehr beträgt (alle Tastenoperationen) (siehe Abbildung). Wählen Sie außerdem "Webhook" für den Benachrichtigungskanal. Die URL wird später festgelegt. Verwenden Sie daher zunächst nur "https: // test.example". ② Registrieren Sie den LINE-Bot. Erstellen Sie einen neuen Kanal von LINE Developers. Verwenden Sie unter "Wählen Sie einen Kanaltyp aus, um fortzufahren" die Messaging-API. Notieren Sie sich das "Kanalgeheimnis" in den "Grundeinstellungen" und das "Kanalzugriffstoken" in der "Messaging-API" zur späteren Verwendung.

③ Verwenden Sie Raspeye als Server

Führen Sie Flask auf dem Raspberry Pi aus, um Webhooks zu empfangen und Nachrichten zurückzugeben. Für verschiedene Einstellungen [Versuchen Sie, einen LINE BOT mit Python / Raspeye zu erstellen! ](Versuche einen LINE BOT mit Python / Raspeye zu machen!).

wichtiger Punkt

Sie können die Einstellungen der obigen Site und von pyenv-virtualenv ignorieren, aber stellen Sie sicher, dass Sie andere .bash_profile usw. neu schreiben. Sonst funktioniert es nicht. Stellen Sie außerdem sicher, dass das Kanalgeheimnis und das Kanalzugriffstoken in den Umgebungsvariablen festgelegt sind, wie auf der obigen Site beschrieben.

④ Senden Sie eine Push-Nachricht

Sie müssen die Benutzer-ID kennen, um eine Push-Nachricht senden zu können. Diese "Benutzer-ID" unterscheidet sich von der persönlich festgelegten ID, die beim Hinzufügen von Freunden verwendet wird. Sie müssen sie daher auf andere Weise kennen. Der folgende Code gibt eine Benutzer-ID zurück, wenn Sie eine Textnachricht senden.

line_bot.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__)

LINE_BOT_ACCESS_TOKEN = os.environ["LINE_BOT_ACCESS_TOKEN"]
LINE_BOT_CHANNEL_SECRET = os.environ["LINE_BOT_CHANNEL_SECRET"]

line_bot_api = LineBotApi(LINE_BOT_ACCESS_TOKEN)
handler = WebhookHandler(LINE_BOT_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):
    profile = line_bot_api.get_profile(event.source.user_id)
    messages = str(profile.user_id)
    line_bot_api.reply_message(event.reply_token, TextSendMessage(text=messages))

if __name__ == "__main__":
    port = int(os.getenv("PORT", 6000))
    app.run(host="0.0.0.0", port=port)

Wenn Sie es richtig einstellen können, sollten Sie eine ID erhalten, die mit U wie diesem beginnt.

Sobald Sie dies getan haben, ist es endlich Zeit, mit SORACOM Lagoon zu arbeiten. Ich werde ein wenig zum vorherigen Code hinzufügen. Ermöglicht das Senden einer Push-Nachricht an den Benutzer, wenn sich ein "POST" im "/ webhook" befindet. Bitte beachten Sie, dass wir auch "Import" hinzugefügt haben.

line_bot.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
import json  #hinzufügen

app = Flask(__name__)

LINE_BOT_ACCESS_TOKEN = os.environ["LINE_BOT_ACCESS_TOKEN"]
LINE_BOT_CHANNEL_SECRET = os.environ["LINE_BOT_CHANNEL_SECRET"]

line_bot_api = LineBotApi(LINE_BOT_ACCESS_TOKEN)
handler = WebhookHandler(LINE_BOT_CHANNEL_SECRET)

#Unten hinzugefügt
@app.route("/webhook", methods=['POST'])
def webhook():
    print(json.dumps(request.get_json(), indent=2))
    object = request.get_json()
    if object['title'] == "[Alerting] Emergency alert":
        user_id = "U03xxxxxx(Die zuvor erhaltene Benutzer-ID)"
        messages = TextSendMessage(text="Ich habe eine Warnung bekommen")
        line_bot_api.push_message(user_id, messages=messages)

    return request.get_data()
#Bisher

@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):
    profile = line_bot_api.get_profile(event.source.user_id)
    messages = str(profile.user_id)
    line_bot_api.reply_message(event.reply_token, TextSendMessage(text=messages))

if __name__ == "__main__":
    port = int(os.getenv("PORT", 6000))
    app.run(host="0.0.0.0", port=port)

Richten Sie abschließend den Benachrichtigungskanal für SORACOM Lagoon ein. Geben Sie die URL des auf dem Raspberry Pi ausgeführten ngrok ein und fügen Sie am Ende / webhook hinzu. Auf diese Weise können Sie Webhooks von Lagoon erhalten.

Demo-Video

[YouTube] Der SORACOM LTE-M-Button benachrichtigt LINE Die Reaktion ist schneller als erwartet! Damit können Sie im Notfall so schnell wie eine Sekunde handeln.

Recommended Posts

Senden Sie eine Push-Nachricht an LINE Bot, wenn die LTE-M-Taste gedrückt wird [SORACOM]
Ich möchte eine Nachricht von Python an LINE Bot senden
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
So senden Sie eine Nachricht mit Curl an LINE
[LINE Messaging API] Ich möchte eine Nachricht vom Programm an alle LINE senden
So installieren Sie NPI + Senden Sie eine Nachricht an Python
Was tun, wenn eine Warnmeldung in der Pip-Liste angezeigt wird?
Hanashi, der beim Versuch, eine morphologische Analyse BOT mit der beliebten LINE BOT API durchzuführen, zum BOT durchgelesen wurde
Senden Sie eine direkte Liebes-E-Mail an einen neuen Benutzer, wenn ein neuer Benutzer dem Slack-Team beitritt
Senden Sie eine Nachricht von Slack an einen Python-Server
[Python] Wirf eine Nachricht an den Slack-Kanal
Ein Befehl zum Überprüfen, wenn etwas schief geht, wenn der Server nichts tut
Die weltweit am einfachsten zu verstehende Erklärung zur Herstellung von LINE BOT (1) [Kontoerstellung]
Der einfachste Linienbot der Welt, um Gewicht zu verlieren
Erstellen einer Liste, wenn die Nomenklatur für einen bestimmten Zeitraum gültig ist
Senden Sie mithilfe von Google Cloud Messaging für Chrome eine Nachricht vom Server an die Chrome-Erweiterung
Wenn sich eine Zeichenfolge einer bestimmten Reihe im Schlüssel des Wörterbuchs befindet, wird die Zeichenfolge in den Wert des Wörterbuchs konvertiert.
So erstellen Sie einen interaktiven LINE BOT 004 (beantworten Sie den Stichtag eines börsennotierten Unternehmens)