Ein Memo zum Erstellen eines LINE-Bots, der einen Papagei mit "SAM Local" in AWS Cloud9 zurückgibt
Ich werde das machen.
Erstellen Sie einen Anbieter in LINE Developers.
Stellen Sie den Kanal auf den gerade erstellten Anbieter ein.
Wählen Sie die Messaging-API aus.
Holen Sie sich Informationen zu Kanalgeheimnissen und Kanalzugriffstoken.
Geheime Informationen kanalisieren
Klicken Sie auf die Schaltfläche Veröffentlichen, um Informationen zum Kanalzugriffstoken anzuzeigen.
Erstellen Sie in der AWS-Konsole Cloud9. Erstellt in der Region Tokio (ap-Nordosten-1).
Erstellen Sie Lambda mit SAM Local. Klicken Sie auf der rechten Seite von Cloud9 auf λ
->λ +
, um eine neue zu erstellen.
Stellen Sie eine beliebige Zeichenfolge in das rote Rahmenfeld ein und klicken Sie auf die Schaltfläche "Weiter"
Ich habe Python gewählt.
Erstellen Sie das API-Gateway als Ganzes.
Ich habe es zur Standardeinstellung gemacht.
Klicken Sie auf die Schaltfläche "Fertig stellen", um mit der Erstellung zu beginnen.
Wenn die Erstellung abgeschlossen ist, wird ein Bildschirm wie dieser angezeigt.
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.
Sie können die AWS-Ressourcen sehen, die beim Erstellen von Lambda auf der Registerkarte Ressourcen des Stapels erstellt wurden.
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.
Öffnen Sie Lambda in der AWS-Konsole und legen Sie das "Kanalgeheimnis" und das "Kanalzugriffstoken" des in LINE Developers erstellten Kanals als Umgebungsvariablen fest.
Überprüfen Sie den API Gateway URL-Aufruf
.
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.
Damit ist die Einstellung von "LINE Bot für die Rückgabe von Papageien" abgeschlossen.
Registrieren Sie den erstellten Kanal als Freund aus dem QR-Code und prüfen Sie, ob Sie den Papagei zurückgeben möchten.
Auf diese Weise haben Sie Erfolg, wenn Sie den Papagei zurückgeben
Es kann sinnvoll sein, zu überprüfen, ob Fehler in der CloudWatch-Protokollgruppe vorliegen
Diesmal ist dies das Ende