[PYTHON] Lassen Sie uns einen LINE-Bot mit verschiedenen Diensten erstellen [ngrok edition]

Überblick

Dies ist eine Reihe von Versuchen, mithilfe verschiedener Dienste ein Backend für LINEbot zu erstellen. Der erste verwendet ngrok. Nur für diesen Artikel wird das Verfahren wie die Registrierung bei LINE-Entwicklern als Einführung in die Beschreibung aufgenommen.

Informationen zum Erstellen mit anderen Diensten finden Sie im Folgenden.

--Erstens: ngrok * Dieser Artikel

Annahme

Gesamtbild

linebot_1-webhook.png

Vorbereitung der LINE-Entwickler

Dies ist das Erfassungsverfahren ab Oktober 2020. Bitte beachten Sie, dass sich in Zukunft möglicherweise Änderungen ergeben.

Einloggen

Um die Messaging-API zu verwenden, registrieren Sie sich zunächst für ein Konto bei LINE Developers. Greifen Sie zuerst auf hier zu und klicken Sie oben rechts auf die Anmeldeschaltfläche. Drücken Sie im nächsten Bildschirm auf "Mit LINE-Konto anmelden". Anschließend wird der folgende Bildschirm angezeigt. Melden Sie sich an, indem Sie entweder die in LINE registrierte E-Mail-Adresse und das Passwort eingeben oder den QR-Code scannen. Bei Erfolg werden Sie zum Startbildschirm der Konsole weitergeleitet. ログイン

Kanalerstellung

Auf dem Startbildschirm befindet sich ein Abschnitt mit dem Namen "Anbieter". Klicken Sie daher daneben auf die Schaltfläche "Erstellen" und geben Sie einen beliebigen Namen in das Feld "Anbietername" ein.

Der Bildschirm wechselt zum Startbildschirm des Anbieters. Klicken Sie daher auf den Block "Messaging-API-Kanal erstellen".

Provider

Der Bildschirm wechselt zum Informationseingabebildschirm. Geben Sie daher Folgendes ein (nur die minimal erforderlichen Elemente werden aufgelistet).

--Kanalsymbol: Das Symbol ist nicht unbedingt erforderlich, aber das weiße Symbol ist einsam, daher möchte ich alles einstellen.

Ausgabe von Channel Secret und Channel Access Token

Da es im Backend verwendet wird, wird es zu diesem Zeitpunkt ausgegeben. Bitte bewahren Sie diese beiden Werte außerdem sorgfältig auf, damit sie anderen nicht bekannt werden.

Die Zeichenfolge im Abschnitt "Kanalgeheimnis" der Registerkarte "Grundeinstellungen". Dies wird veröffentlicht, wenn der Kanal erstellt wird.

Secret

Die Zeichenfolge für den Teil "Channel Access Token" am unteren Rand der Registerkarte "Messaging API". Dies wird nicht standardmäßig veröffentlicht. Generieren Sie es also, indem Sie auf die Schaltfläche "Problem" klicken.

Token

Registriere dich als Freund

Auf der Registerkarte "Messaging-API" befindet sich ein QR-Code. Scannen Sie ihn daher mit der LINE-App und registrieren Sie sich als Freund.

Erstellen eines Backend-Servers

Quellcode

Kopieren Sie den Code für line-bot-sdk-python und speichern Sie ihn lokal als app.py .. Stellen Sie dann die geheimen Informationen wie folgt ein.

app.py


#Beispiel
line_bot_api = LineBotApi('YXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZGG==') #Dies ist die längere Zeichenfolge
handler = WebhookHandler('fxxxxxxxxxxxxxxxxxxxxx')

Bibliotheksinstallation

Der Quellcode verwendet eine Bibliothek, daher müssen Sie die Bibliothek installieren. Führen Sie den folgenden Befehl im Terminal aus:

Terminal


pip install Flask line-bot-sdk

ngrok Installation

Kurz gesagt, ngrok ist ein Dienst, mit dem Sie über das Internet von außen auf lokal ausgeführte Prozesse zugreifen können. Vor allem der Punkt, an dem ein öffentlicher Endpunkt auf "https" vorbereitet wird, ist sehr groß. (Die Webhook-URL muss "https" sein.)

Für MacOS empfehlen wir die Installation mit dem ersten "Homebrew". Ansonsten installieren Sie es mit dem zweiten Befehl.

Für MacOS

Terminal


brew cask install ngrok

In anderen Fällen

Terminal


wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip
mv ngrok /usr/local/bin/ngrok

Installationsbestätigung

Stellen Sie sicher, dass es richtig installiert ist. Wenn Sie den Befehl ngrok ausführen und die folgende Meldung angezeigt wird, liegt kein Problem vor. Geben Sie zum Stoppen "Strg + C" ein.

Terminal


ngrok http 80

Ausführungsergebnis

Terminal


ngrok by @inconshreveable                                                                                                                                                                          (Ctrl+C to quit)
                                                                                                                                                                                                                   
Session Status                online                                                                                                                                                                               
Session Expires               7 hours, 59 minutes                                                                                                                                                                  
Version                       2.3.35                                                                                                                                                                               
Region                        United States (us)                                                                                                                                                                   
Web Interface                 http://127.0.0.1:4040                                                                                                                                                                
Forwarding                    http://a9e65703bdfa.ngrok.io -> http://localhost:80                                                                                                                                  
Forwarding                    https://a9e65703bdfa.ngrok.io -> http://localhost:80                                                                                                                                 
                                                                                                                                                                                                                   
Connections                   ttl     opn     rt1     rt5     p50     p90                                                                                                                                          
                              0       0       0.00    0.00    0.00    0.00 

Bring den Papagei zurück

Starten wir nun den Server und sehen, wo die Nachricht zurückgegeben wird.

Starten Sie den Backend-Server

Führen Sie den folgenden Befehl im Terminal aus. Wenn der Python-Dateiname nicht "app.py" lautet, müssen Sie die Umgebungsvariable "FLASK_APP" auf diesen Dateinamen setzen.

Terminal


flask run --reload --port 8080

#Wenn Folgendes angezeigt wird, wird der Startstatus angezeigt
* Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)

Die folgende Abbildung zeigt den aktuellen Status.

linebot_1-local.png

Externe Offenlegung des Servers

Starten Sie ein anderes Terminal und führen Sie den folgenden Befehl aus. Kopieren Sie dann die URL in die Zeile "Weiterleitung", die mit "https" beginnt.

Terminal


ngrok http 8080

Forwarding    http://e5e58099a87e.ngrok.io -> http://localhost:8080                     
Forwarding    https://e5e58099a87e.ngrok.io -> http://localhost:8080 #Hier

Die folgende Abbildung zeigt den aktuellen Status.

linebot_1-ngrok.png

Webhook-URL-Einstellungen

An diesem Punkt kehren Sie zum Bildschirm LINE-Entwickler zurück. Geben Sie "** die gerade kopierte URL ** + / callback "in den Teil" Webhook-URL "der Registerkarte" Messaging-API "ein.

Webhook

Wechseln Sie außerdem über die Schaltfläche Bearbeiten im obigen Bild zum Bildschirm für die Antworteinstellung und stellen Sie Folgendes ein.

Wenn Sie jetzt eine Nachricht an LINE senden, wird die Anforderung über den ngrok-Endpunkt an den lokal ausgeführten Server gesendet.

linebot_1-webhook.png

eine Nachricht schicken

Senden wir tatsächlich eine Nachricht mit dem als Freund registrierten Bot. Wenn Sie die gleiche Nachricht erhalten, sind Sie erfolgreich! !!

wichtiger Punkt

Da ngrok bei jedem Start einen anderen Endpunkt ausgibt, müssen Sie auch die Webhook-URL von LINE-Entwicklern ändern, wenn Sie ihn nach dem Beenden erneut starten.

Steig auf

Ich habe die Erklärung des Quellcodes weggelassen, aber der SDK-Quellcode gibt nur einen Papagei einer Textnachricht zurück. Die folgenden zwei Beispiele für das Ändern des Verhaltens als Step-up werden als Probleme beschrieben. Versuchen Sie es daher, wenn Sie möchten.

1. Antworte immer "Danke für deine Nachricht!"

Antwort

Der durch text der Funktion handle_message angegebene Wert ist der Inhalt der Antwort. In der ursprünglichen Quelle wurde "event.message.text" festgelegt, und diese "event.message.text" war der Inhalt der von uns gesendeten Nachricht, sodass sie als Papagei zurückgegeben wurde. Mit anderen Worten, Sie können "text" auf "Danke für Ihre Nachricht!" Setzen.

app.py


def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
-        TextSendMessage(text=event.message.text))
+        TextSendMessage(text='Danke für die Nachricht!'))

2. Wenn Sie einen Stempel senden, antworten Sie unbedingt auf "Es ist ein süßer Stempel".

Antwort

Der Grund, warum nur Textnachrichten behandelt werden, besteht darin, dass der Dekorateur von "@ handler.add (MessageEvent, message = TextMessage)" dem WebhookHandler mitteilt, dass "wenn ein Nachrichtenereignis vom Typ TextMessage auftritt, die Funktion" handle_message "verarbeitet wird. Das liegt daran, dass wir es tun. Sie können eine Funktion hinzufügen, um Ereignisse vom Stempeltyp (StickerMessage) auf dieselbe Weise zu behandeln.

app.py


+ @handler.add(MessageEvent, message=StickerMessage)
+ def handle_sticker_message(event):
+     line_bot_api.reply_message(
+         event.reply_token,
+         TextSendMessage(text='Es ist eine süße Briefmarke'))

Unter API-Spezifikationen finden Sie Informationen zu den anderen verfügbaren Ereignistypen und Nachrichtentypen.

abschließend

Ich finde es sehr gut, dass Sie den Betrieb einfach lokal überprüfen können. Es ist jedoch ein Chaos, es ständig lokal starten zu müssen oder die Webhook-URL bei jedem Start zurückzusetzen. Diese Art von Mentalität kann gelöst werden, indem der Server über einen Cloud-Dienst gestartet wird. Daher möchte ich ihn ab dem nächsten Mal ansprechen.

Recommended Posts

Lassen Sie uns einen LINE-Bot mit verschiedenen Diensten erstellen [ngrok edition]
Machen wir einen Discord Bot.
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
[Super einfach] Machen wir einen LINE BOT mit Python.
Lassen Sie uns mit flask-babel eine mehrsprachige Site erstellen
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie mit Amazon Lex einen LINE WORKS-Bot
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Machen Sie einen LINE BOT
Machen wir einen Spot Sale Service 9 (Task Queue Edition)
Machen Sie mit LINE + Flask einen morphologischen Analyse-Bot
Machen wir einen Spot Sale Service 8 (Image Uploader Edition)
Lassen Sie uns mit Google Colaboratory ganz einfach ein mathematisches GIF erstellen
Erstellen Sie mit GoogleAppEngine / py einen LINE-Bot. Einfache nackte Version
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!
Machen wir eine Remote-Rumba [Hardware]
[Python] Erstelle deinen eigenen LINE-Bot
Lassen Sie uns eine Remote-Rumba erstellen [Software]
Lassen Sie uns eine GUI mit Python erstellen.
Machen wir einen Spot Sale Service 2
Erstellen Sie mit TensorFlow eine Gesichtserkennung
Wie man einen lockeren Bot macht
Machen wir einen Blockbruch mit wxPython
Machen wir einen Spot Sale Service 1
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Machen wir einen Spot Sale Service 3
Erstellen Sie mit Django einen LINE-Bot
Python-Anfänger haben beschlossen, einen LINE-Bot mit Flask zu erstellen (Flask-Kommentar)
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Hanashi, der beim Versuch, eine morphologische Analyse BOT mit der beliebten LINE BOT API durchzuführen, zum BOT durchgelesen wurde
Kenntnisse beim Erstellen eines Bots mit discord.py
Erstellen eines LINE-Bots ~ Erstellen, Bereitstellen und Starten von ~
Ich habe versucht, mit einer Schildkröte eine Linie zu ziehen
Lassen Sie uns mit Python langsam sprechen
[Python] [LINE Bot] Erstellen Sie einen LINE Bot mit Papageienrückgabe
Erstellen Sie ein Webframework mit Python! (1)
Lassen Sie uns eine Kombinationsberechnung mit Python durchführen
Erstellen Sie ein Webframework mit Python! (2)
Lassen Sie uns ein Backend-Plug-In für Errbot erstellen
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Erstellen eines LINE BOT, um zusätzliche AtCoder-Wettbewerbe mit AWS zu benachrichtigen
Ich habe versucht, einen Übersetzungs-BOT zu erstellen, der mit Discord unter Verwendung von Googletrans funktioniert
Wenn Sie einen Discord-Bot mit Python erstellen möchten, verwenden wir ein Framework