[PYTHON] Ich habe einen LINE Bot mit Serverless Framework erstellt!

Was ist Serverless Framework?

https___camo.githubusercontent.jpeg

Serverless Framework ist ein Rahmen zum Konfigurieren von Anwendungen mit FaaS (Function as a Service), DB und Speicher in der Cloud. Es ist eine Arbeit. Neben AWS werden auch GCP und Azure unterstützt. Informationen zur Installationsmethode finden Sie in diesem Artikel .

Vorsichtsmaßnahmen

Erstellen Sie einen LINE-Bot

Erstellen Sie einen LINE-Bot mit LINE-Entwicklern . Klicken Sie nach dem Anmelden unten auf dem Bildschirm auf Erstellen. スクリーンショット 2020-11-04 12.49.01.png

Anschließend wird der Bildschirm zur Eingabe des Anbieternamens angezeigt. Geben Sie also den gewünschten Namen ein. スクリーンショット 2020-11-04 12.53.55.png

Sie haben jetzt einen Anbieter erstellt. Erstellen Sie als Nächstes einen Kanal (LINE Bot). Dieses Mal erstellen wir einen LINE-Bot, der zurückgibt. Wählen Sie daher die Messaging-API aus. スクリーンショット 2020-11-04 12.55.23.png

Ein Bildschirm zur Eingabe des LINE Bot-Symbols und des Namens wird angezeigt. Geben Sie ihn ein. スクリーンショット 2020-11-04 12.59.58.png

Damit ist die Erstellung von LINE Bot abgeschlossen.

Systemkonfiguration

Das System, das wir dieses Mal erstellen, scheint die Lambda-Funktion auf dem Webhook ausgeführt zu haben, wenn der Benutzer eine Nachricht an den LINE-Bot sendet. Der von Rot umgebene Bereich wird von Serverless Framework implementiert. スクリーンショット 2020-11-04 13.08.13.png

Verknüpfen Sie ein AWS-Konto mit einem PC

Verwenden Sie AWS-CLI, um AWS-Informationen auf Ihrem PC festzulegen. Siehe diesen Artikel

Let's Serverless Wechseln Sie nach der Installation des Serverless Framework auf Ihrem PC in Ihr Arbeitsverzeichnis im Terminal und führen Sie den folgenden Befehl aus. Die Option --template gibt die von Lambda verwendete Programmiersprache an, und die Option --path gibt den Projektnamen und den Projektspeicherort an. Bitte entsprechend ändern.

$ serverless create --template aws-python3 --path line-bot

Wenn Sie den Befehl ausführen, wird ein Projekt mit der folgenden Verzeichnisstruktur erstellt.

line-bot
    ├ .gitignore
    ├ handler.py
    └ serverless.yml

Schreiben Sie serverless.yml neu

Schreiben Sie serverless.yml wie folgt neu.

serverless.yml


service: line-bot
frameworkVersion: '2'

provider:
  name: aws
  runtime: python3.8
  region: ap-northeast-1  #Geben Sie die Region Tokio an

#Lambda-Funktionseinstellungen
functions:
  callback:
    handler: handler.callback

    #API-Gateway-Einstellungen
    events:
      - http:
          path: callback
          method: post

Damit sind die API-Gateway- und Lambda-Einstellungen abgeschlossen. Es ist zu einfach ...

Implementieren Sie die Lambda-Funktion

Implementieren Sie als Nächstes die Funktion, die Lambda ausführt.

Erstellen Sie eine virtuelle Umgebung für Python

Da es sich um Python handelt, erstellen Sie zunächst eine virtuelle Umgebung. Ich erstelle eine virtuelle Umgebung mit venv, aber ich denke, es gibt Leute, die sie mit conda oder virtualenv erstellen. Bitte ändern Sie dies entsprechend.

$ python3 -m venv line-bot

Dadurch wird ein Verzeichnis namens Line-Bot erstellt.

line-bot
    ├ line-bot/  <--Verzeichnis der virtuellen Umgebung
    ├ .gitignore
    ├ handler.py
    └ serverless.yml

Einmal generiert, aktivieren Sie es mit dem folgenden Befehl.

$ source line-bot/bin/activate

Bibliothek für LINE Bot verwendet

Eine Bibliothek namens line-bot-sdk wird verwendet, um LINE Bot zu betreiben.

$ pip3 install line-bot-sdk

Implementiert in handler.py

Nachdem Sie fertig sind, schreiben wir den Code.

handler.py


from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage, ImageMessage
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot import (
    LineBotApi, WebhookHandler
)
import os

access_token = os.environ['LINE_CHANNEL_ACCESS_TOKEN']  //Wird aus Lambda-Umgebungsvariablen erhalten
secret_key = os.environ['LINE_CHANNEL_SECRET']          //Wird aus Lambda-Umgebungsvariablen erhalten

line_bot_api = LineBotApi(access_token)
handler = WebhookHandler(secret_key)

//Von LINE Bot-Webhooks ausgeführte Funktionen
def callback(event, context):
    try:
        signature = event["headers"]["x-line-signature"]
        event_body = event["body"]
        handler.handle(event_body, signature)
    except InvalidSignatureError as e:
        logger.error(e)
        return {"statusCode": 403, "body": "Invalid signature. Please check your channel access token/channel secret."}
    except Exception as e:
        logger.error(e)
        return {"statusCode": 500, "body": "exception error"}
    return {"statusCode": 200, "body": "request OK"}

//Funktion zum Zurückgeben
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text)
    )

Damit ist die Implementierung der Lambda-Funktion abgeschlossen.

Ausgabeanforderungen.txt

Druckt eine Liste der von Lambdas Python verwendeten Bibliotheken. Führen Sie den folgenden Befehl im aktivierten Zustand aus.

$ pip3 freeze > requirements.txt

Wenn Sie die in der Datei require.txt aufgeführte Bibliothek bereitstellen, fügen Sie das Plugin zum Serverless Framework hinzu, damit Lambda es installiert.

$ npm install --save serverless-python-requirements

Die Bibliothek, die Sie lokal verwenden, ist jetzt in Lambda verfügbar.

Vorerst bereitstellen

Lassen Sie uns an dieser Stelle einmal bereitstellen Sie können mit dem folgenden Befehl bereitstellen. sls ist eine Abkürzung für serverless.

$ sls deploy

Gehen wir danach zum AWS-Konsolenbildschirm und sehen Lambda in der Region Tokio. Dann können Sie sehen, dass es tatsächlich bereitgestellt wird.

Sehen Sie sich das LINE Bot-Zugriffstoken und den geheimen Schlüssel an

Um die implementierte Lambda-Funktion ausführen zu können, benötigen Sie das Zugriffstoken und den geheimen Schlüssel von LINE Bot. Sehen Sie sich diese also auf dem Konsolenbildschirm von LINE Developers an.

Das Zugriffstoken befindet sich unten in den Messaging-API-Einstellungen. スクリーンショット 2020-11-04 14.40.37.png

Der geheime Schlüssel befindet sich am Ende der Kanaleinstellungen. スクリーンショット 2020-11-04 14.38.04.png

Legen Sie Umgebungsvariablen in Lambda fest

Stellen Sie den oben angegebenen Wert in der Lambda-Umgebungsvariablen ein. Am unteren Rand dieses Bildschirms können Sie Umgebungsvariablen festlegen. Speichern Sie diese also auf diese Weise.

Schlüssel Wert
LINE_CHANNEL_ACCESS_TOKEN ✖️✖️✖️✖️✖️✖️
LINE_CHANNEL_SECRET ✖️✖️✖️✖️✖️✖️

スクリーンショット 2020-11-04 14.30.44.png

API-Gateway-URL anzeigen

Sie können die von API Gateway ausgegebene URL überprüfen, indem Sie auf Folgendes klicken. Schauen wir uns das an. スクリーンショット 2020-11-04 14.30.44.png

Legen Sie die URL der Lambda-Funktion im LINE Bot-Webhook fest

Geben Sie die API-Gateway-URL im Webhook auf dem Einstellungsbildschirm der LINE Bot Messaging-API ein. スクリーンショット 2020-11-04 14.48.12.png Klicken Sie nach der Eingabe auf die Schaltfläche zur Bestätigung. Wenn der Erfolgsbildschirm angezeigt wird, ist er abgeschlossen. Ich denke, dass der QR-Code von LINE Bot oben angezeigt wird. Wenn Sie also einen Freund von dort hinzufügen, können Sie mit Umu-return Bot spielen.

Wenn es stecken bleibt

Wenn Sie auf die obige Überprüfung klicken und ein Antwortfehler angezeigt wird, liegt meines Erachtens ein Fehler in der Lambda-Funktion vor, also aus der folgenden Überwachung スクリーンショット 2020-11-04 14.28.54.png

Wenn Sie auf dieses "CloudWatch-Protokoll anzeigen" klicken, wird das Protokoll der Lambda-Funktion angezeigt. Sehen Sie es sich also an und debuggen Sie es. スクリーンショット 2020-11-04 15.03.52.png

Recommended Posts

Ich habe einen LINE Bot mit Serverless Framework erstellt!
Ich habe einen Stempelersatzbot mit Linie gemacht
[AWS] Ich habe BOT mit LINE WORKS daran erinnert
Ich habe mit LINE Bot ein Haushaltsbuch für Bot erstellt
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
[AWS] Ich habe BOT mit LINE WORKS (Implementierung) in Erinnerung gerufen.
Serverloser LINE-Bot mit IBM Cloud-Funktionen
Mattermost Bot mit Python gemacht (+ Flask)
Ich habe einen Zwietrachtbot gemacht
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe einen Wikipedia Gacha Bot gemacht
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Bis Django etwas mit einem Linienbot zurückgibt!
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe mit Python eine Hex-Map erstellt
Ich habe ein Lebensspiel mit Numpy gemacht
Ich habe einen Hanko-Generator mit GAN gemacht
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe eine WEB-Bewerbung bei Django gemacht
Ich habe mit Python einen Neuronensimulator erstellt
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Ich habe einen Twitter-Bot mit Go x Qiita API x Lambda erstellt
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
〇✕ Ich habe ein Spiel gemacht
Erstellen Sie mit Minette für Python einen LINE BOT
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich habe eine einfache Brieftasche aus Bitcoin mit Pycoin gemacht
Erstellen Sie mit Amazon Lex einen LINE WORKS-Bot
Ich habe mit Numpy eine Grafik mit Zufallszahlen erstellt
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
Ich habe einen LINE-Bot erstellt, der jeden Tag pünktlich empfohlene Bilder sendet
[Python] Ich habe einen LINE-Bot erstellt, der Gesichter erkennt und Mosaikverarbeitungen durchführt.
Entscheidungsunterstützungssystem für ältere Menschen mit LINE Messaging API + Serverless Framework
[Für Anfänger] Ich habe mit Raspberry Pi einen menschlichen Sensor erstellt und LINE benachrichtigt!
In Python habe ich einen LINE-Bot erstellt, der Polleninformationen aus Standortinformationen sendet.
Machen Sie mit LINE + Flask einen morphologischen Analyse-Bot
Ich habe mit Play with Docker einen gebrauchsfertigen Syslog-Server erstellt
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Tkinter ein Fenster für die Protokollausgabe erstellt
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
[Valentine Spezialprojekt] Ich habe eine LINE-Kompatibilitätsdiagnose gestellt!
[Super einfach] Machen wir einen LINE BOT mit Python.
Ich habe mit Sense HAT ein gefallenes Monospiel gemacht
Ich habe einen Blackjack mit Python gemacht!
Ich habe einen Python-Text gemacht
Ich habe COVID19_simulator mit JupyterLab erstellt
Ich habe Word2Vec mit Pytorch gemacht
Ich habe mit Python einen Blackjack gemacht.
Ich habe Wordcloud mit Python gemacht.
Eine Geschichte, die stolperte, als ich mit Transformer einen Chat-Chat-Bot erstellte
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Erstellen Sie mit GoogleAppEngine / py einen LINE-Bot. Einfache nackte Version
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot