[PYTHON] Lassen Sie einen Papagei LINE Bot mit AWS Cloud9 zurückgeben

Einführung

Ein Memo zum Erstellen eines LINE-Bots, der einen Papagei mit "SAM Local" in AWS Cloud9 zurückgibt

Diagramm

Ich werde das machen.

image.png

Verfahrensbeschreibung

Referenz

1. [LINE-Entwickler] Anbieter erstellen

Erstellen Sie einen Anbieter in LINE Developers.

image.png

2. [LINE-Entwickler] Legen Sie den Kanal für den erstellten Anbieter fest

Stellen Sie den Kanal auf den gerade erstellten Anbieter ein.

image.png

Wählen Sie die Messaging-API aus.

image.png

3. [LINE-Entwickler] Ruft zwei Informationen zum erstellten Kanal ab

Holen Sie sich Informationen zu Kanalgeheimnissen und Kanalzugriffstoken.

Geheime Informationen kanalisieren image.png

Klicken Sie auf die Schaltfläche Veröffentlichen, um Informationen zum Kanalzugriffstoken anzuzeigen. image.png

4. [AWS] Bereiten Sie die Cloud9-Umgebung vor

Erstellen Sie in der AWS-Konsole Cloud9. Erstellt in der Region Tokio (ap-Nordosten-1).

image.png

5. [AWS-Cloud9] Erstellen Sie Lambda

Erstellen Sie Lambda mit SAM Local. Klicken Sie auf der rechten Seite von Cloud9 auf λ->λ +, um eine neue zu erstellen.

image.png

Stellen Sie eine beliebige Zeichenfolge in das rote Rahmenfeld ein und klicken Sie auf die Schaltfläche "Weiter"

image.png

Ich habe Python gewählt.

image.png

Erstellen Sie das API-Gateway als Ganzes.

image.png

Ich habe es zur Standardeinstellung gemacht.

image.png

Klicken Sie auf die Schaltfläche "Fertig stellen", um mit der Erstellung zu beginnen.

image.png

Wenn die Erstellung abgeschlossen ist, wird ein Bildschirm wie dieser angezeigt.

image.png

* Nebenbei * [AWS] Bestätigung der erstellten AWS-Ressourcen

Sie können die AWS-Ressourcen, die Sie bisher erstellt haben, im CloudFormation-Stapel anzeigen. Es werden zwei Stapel erstellt, der erste Stapel (aws-cluod9-xxx) ist der Stapel, als Cloud9 erstellt wurde, und der nächste Stapel (cloud9-app1) ist der Stapel, als Lambda erstellt wurde.

image.png

Sie können die AWS-Ressourcen sehen, die beim Erstellen von Lambda auf der Registerkarte Ressourcen des Stapels erstellt wurden.

image.png

6. [AWS] Lambda-Skript-Update

Löschen Sie alle vorhandenen Lambda-Skripte und kopieren Sie das folgende Skript.

Lambda-Schrift


#Umgebungsvariable
# LINE_CHANNEL_SECRET-Kanalgeheimnis
# LINE_CHANNEL_ACCESS_TOKEN-Kanalzugriffstoken

import json  
import os  
import logging  
import urllib.request
import base64  
import hashlib  
import hmac

#Vorbereitung für die Protokollausgabe
logger = logging.getLogger()  
logger.setLevel(logging.INFO)  

def lambda_handler(event, context):  
    #Protokollausgabe des Anforderungsinhalts
    logger.info(event)  

    ###
    #Holen Sie sich das Geheimnis des LINE-Kanals aus der Umgebungsvariablen
    channel_secret = os.environ['LINE_CHANNEL_SECRET']  
    #HMAC mit LINE-Kanalgeheimnis als Schlüssel-Berechnen Sie den Hash-Wert des Anforderungshauptteils mit dem SHA256-Algorithmus
    hash = hmac.new(channel_secret.encode('utf-8'), event['body'].encode('utf-8'), hashlib.sha256).digest()
    #Base64-codierter Hashwert
    signature = base64.b64encode(hash)

    # X-Line-Unterschrift erhalten
    xLineSignature = event['headers']['X-Line-Signature'].encode('utf-8')  
    #Überprüfen Sie die Signaturübereinstimmung und die Protokollausgabe, wenn eine Nichtübereinstimmung vorliegt
    if xLineSignature != signature:  
        logger.info('Signaturfehlanpassung')  
        return {  
            'statusCode': 200,  
            'body': json.dumps('Es sieht so aus, als ob die Signatur falsch ist.')  
        } 
    ###

    # 1.Extrahieren Sie den Inhalt eines Webhook-Ereignisses
    body = json.loads(event['body'])  

    for event in body['events']:  
        #Definieren Sie eine Liste von Nachrichtenobjekten für die Antwort
        messages = []  
        # 2.Der Webhook-Ereignistyp ist eine Nachricht
        if event['type'] == 'message':  
            # 3.Wenn der Nachrichtentyp Text ist
            if event['message']['type'] == 'text':  
                # 4.Verwenden Sie den Inhalt des empfangenen Textes als Nachrichtenobjekt
                messages.append({  
                        'type': 'text',  
                        'text': event['message']['text']  
                    })  

                #Definieren Sie Anforderungsinformationen für Antwortnachrichten
                url = 'https://api.line.me/v2/bot/message/reply'  
                headers = {  
                    'Content-Type': 'application/json',  
                    #Holen Sie sich das LINE-Kanalzugriffstoken von der Umgebungsvariablen
                    'Authorization': 'Bearer ' + os.environ['LINE_CHANNEL_ACCESS_TOKEN']  
                    }  
                data = {  
                    #Antworttoken und Nachrichtenobjekt festlegen
                    'replyToken': event['replyToken'],  
                    'messages': messages  
                }  
                request = urllib.request.Request(url, data = json.dumps(data).encode('utf-8'), method = 'POST', headers = headers)  
                with urllib.request.urlopen(request) as response:  
                    #Protokollausgabe des Antwortinhalts
                    logger.info(response.read().decode("utf-8"))  

    return {  
        'statusCode': 200,  
        'body': json.dumps('Hello from Lambda!')  
    }

Stellen Sie das Lambda-Skript nach dem Aktualisieren mit der Schaltfläche "Bereitstellen" (Symbol mit dem Aufwärtspfeil) bereit.

image.png

7. [AWS] Umgebungsvariablen in Lambda festlegen

Öffnen Sie Lambda in der AWS-Konsole und legen Sie das "Kanalgeheimnis" und das "Kanalzugriffstoken" des in LINE Developers erstellten Kanals als Umgebungsvariablen fest.

image.png

8. [AWS] API-Gateway-URL-Aufruf bestätigen

Überprüfen Sie den API Gateway URL-Aufruf.

image.png

9. Aktualisieren Sie die Kanaleinstellungen von [LINE Developers]

Stellen Sie den zuvor bestätigten API-Gateway-URL-Aufruf als Webhook-URL des von LINE-Entwicklern erstellten Kanals ein und aktivieren Sie die Verwendung von Webhooks. Außerdem wird die Antwortnachricht deaktiviert.

image.png

Damit ist die Einstellung von "LINE Bot für die Rückgabe von Papageien" abgeschlossen.

[LINE Bot] Funktionsprüfung

Registrieren Sie den erstellten Kanal als Freund aus dem QR-Code und prüfen Sie, ob Sie den Papagei zurückgeben möchten.

image.png

Auf diese Weise haben Sie Erfolg, wenn Sie den Papagei zurückgeben

* Ergänzung * [AWS] Wenn es nicht gut funktioniert

Es kann sinnvoll sein, zu überprüfen, ob Fehler in der CloudWatch-Protokollgruppe vorliegen

image.png

line.png

Diesmal ist dies das Ende

Recommended Posts

Lassen Sie einen Papagei LINE Bot mit AWS Cloud9 zurückgeben
[Python] [LINE Bot] Erstellen Sie einen LINE Bot mit Papageienrückgabe
Machen Sie einen LINE BOT (Chat)
Papagei gibt LINE BOT-Erstellung zurück
Vorgehensweise zum Erstellen eines Linienbot in AWS Lambda
Checkpoint, wenn der LINE Parrot Return Bot von Heroku abhängig ist
Erstellen Sie einen Bot für Skype unter EC2 (CentOS)
Erstellen Sie mit Amazon Lex einen LINE WORKS-Bot
Machen Sie einen LINE BOT
[AWS] Ich habe BOT mit LINE WORKS daran erinnert
Machen Sie mit LINE + Flask einen morphologischen Analyse-Bot
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
[Super einfach] Machen wir einen LINE BOT mit Python.
[LINE Messaging API] Erstellen Sie einen Papageienrückgabe-BOT mit Python
Machen wir einen Discord Bot.
Erstellen Sie mit GoogleAppEngine / py einen LINE-Bot. Einfache nackte Version
Bis Django etwas mit einem Linienbot zurückgibt!
Lassen Sie uns einen LINE-Bot mit verschiedenen Diensten erstellen [ngrok edition]
[AWS] Ich habe BOT mit LINE WORKS (Implementierung) in Erinnerung gerufen.
[Python] Erstelle deinen eigenen LINE-Bot
Machen Sie Perl Segfo in einer Zeile
Wie man einen lockeren Bot macht
[LINE Bot] Ich bin ein Ranger! Teil 2
[AWS / Tello] Aufbau eines Systems zum Betrieb von Drohnen in der Cloud
Erstellen Sie mit Django einen LINE-Bot
Python ruft die Google Cloud Vision API von LINE BOT über AWS Lambda auf
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
Führen Sie TensorFlow auf einer GPU-Instanz in AWS aus
Erstellen eines LINE-Bots ~ Erstellen, Bereitstellen und Starten von ~
Machen Sie Jupyter Notebook zu einem Dienst unter CentOS
Machen Sie Unity Accelerator zu einem Dienst unter Linux
Erstellen Sie eine Python + OpenCV-Umgebung in Cloud9
Machen wir einen Twitter-Bot mit Python!
Ich habe einen LINE-Bot erstellt, der jeden Tag pünktlich empfohlene Bilder sendet
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
Ich habe einen Stempelersatzbot mit Linie gemacht
Stellen Sie sich eine Cloud-native WebSocket-Anwendung vor, die unter AWS ausgeführt wird
Erstellen Sie mit pulumi eine WardPress-Umgebung auf AWS
Machen Sie Twitter Trend Bot mit Heroku + Python
Versuchen Sie Tensorflow mit einer GPU-Instanz unter AWS
Erstellen Sie mit Minette für Python einen LINE BOT
LINE BOT mit Python + AWS Lambda + API Gateway
Einfache Anzeige des Liniendiagramms auf dem Jupyter Notebook
Mach ein Janken-Spiel in einer Zeile (Python)
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Serverloser LINE-Bot mit IBM Cloud-Funktionen
Wie auch immer, ich bin zu Hause, also machen wir mit Discord einen (Site-) Screenshot-Funktionsbot!
Die weltweit am einfachsten zu verstehende Erklärung zur Herstellung von LINE BOT (1) [Kontoerstellung]