――Es ist interessant, die Bilder von der High School und dem College in letzter Zeit zu sehen »Aber es ist ärgerlich, es jeden Tag zu finden
"Ich möchte einen Bot, der jeden Tag pünktlich Fotos veröffentlicht"
Ich möchte AWS berühren
Es ist mühsam, einen Server einzurichten und die Frustrationsrate zu erhöhen
Dieser Artikel wurde entdeckt
Lambda macht den Serveraufbau einfach! !! !!
tl;dr Das Ziel ist ** in einem Gruppenraum mit Bot. Wenn ein bestimmtes Wort erscheint, wird ein Bild zufällig aus dem in S3 platzierten Bild erfasst und Bot gibt das Foto zurück **
Ist es der Fluss?
Darüber hinaus werden wir es implementieren, damit wir auch die "Quellkennung" erhalten können, was ein Engpass bei der Erstellung eines LINE-Bots ist.
In diesem Artikel möchte ich als ersten Schritt Lambda verwenden, um die Kommunikation zu überprüfen und mit verschiedenen Dingen zu spielen.
https://business.line.me/ja/
Lassen Sie uns zunächst hier ein Geschäftskonto registrieren.
Sie werden nach der Art des Jobs gefragt, aber es ist im Allgemeinen angemessen und in Ordnung (ich erinnere mich nicht an die Details, weil ich letztes Jahr einen Account erstellt habe ,,,) Der Beruf des Schriftstellers ist Schönheit
Dann gibt es "Erstellen eines Geschäftskontos" am unteren Rand des Bildschirms "Kontoliste". Gehen Sie also hier.
Dann werden Sie gefragt, welche Art von Service Ihr Konto anbietet. Wählen Sie hier jedoch die kleine "Entwickler-Testversion starten" unten in der ** Messaging-API ** aus.
Dadurch wird Ihr Kontoplan zu einer Entwickler-Testversion. Der große Unterschied zum allgemeinen kostenlosen Plan ist
developper | frei | |
---|---|---|
pushAPI | OK | NG |
Anzahl der Freunde, die hinzugefügt werden können | 50 | Keine Begrenzung |
Entwickler-Test ist genug, wenn Sie es als Hobby machen
Geben Sie den Kontonamen, das Bild, den Jobtyp usw. ein und bewerben Sie sich Danach ist es leicht, diesen Teil zu vergessen, aber bitte gehen Sie zu ** LINE @ MANAGER **
Dann sollten Sie auf diesen Bildschirm stoßen (Kontoeinstellungen> Messaging-API-Einstellungen)
Fahren wir so fort, wie es ist Jetzt ist es sonnig und die Erstellung des Bot-Kontos ist abgeschlossen
Hier notieren wir uns ** CHANNEL_ACCESS_TOKEN ** für die Verbindung von LINE-Server und Lambda.
Als nächstes möchte ich mit Lambda einen Server ohne Server erstellen und auch die Verbindung zum Lambda => LINE-Server herstellen.
Mit AWS Lambda können Sie Ihren Code ohne Serverbereitstellung oder -verwaltung ausführen. Sie zahlen nur für die tatsächliche Rechenzeit, die Sie verwenden, und Sie zahlen nicht, wenn der Code nicht ausgeführt wird. Mit Lambda können Sie praktisch jede Art von Anwendung oder Backend-Service ausführen, ohne dass eine Verwaltung erforderlich ist. Sobald Sie Ihren Code hochgeladen haben, erledigt Lambda alles, was Sie zum Ausführen und Skalieren Ihres Codes für eine hohe Verfügbarkeit benötigen. Der Code kann so eingestellt werden, dass er automatisch von anderen AWS-Diensten ausgelöst wird, oder er kann so eingestellt werden, dass er direkt aus dem Web oder einer mobilen Anwendung aufgerufen wird.
Funktion erstellen
API Gateway
open
, zu implementierende Phase: prod
python3.6
Dieses Mal werde ich python3.6
verwenden (w weil es mir kürzlich gefällt)
Wenn Sie versuchen, mithilfe der Messagein-API von LINE etwas für einen bestimmten Benutzergruppenraum zu tun, erhalten Sie eine Zielkennung. das ist,
Sie können die Quellbenutzer-, Gruppen- und Gesprächsraumkennungen für Webhook-Ereignisse als Zielkennungen angeben. Sie können die in der LINE-App verwendete LINE-ID nicht angeben.
Es scheint, dass. Selbst wenn der Benutzer, der den Bot entwickelt, seine eigene Zielkennung in LINE Developers geschrieben hat, kennt er die Kennungen anderer Benutzergruppenräume überhaupt nicht.
Zuallererst gibt der in Lambda implementierte Code ** die Zielkennung des Gruppenbenutzers zurück, der an Bot gesendet hat **.
Unten ist der Beispielcode, den ich gemacht habe
import urllib.request, json, os, ast
def lambda_handler(event, context):
#Vorbereitung für den LINE-Server
url = "https://api.line.me/v2/bot/message/push"
method = "POST"
headers = {
'Authorization': os.getenv("CHANNEL_ACCESS_TOKEN"),
'Content-Type': 'application/json'
}
#Analysieren Sie die Zeichenfolge, um den Typ zu diktieren
apiParam = ast.literal_eval(event['body'])
source = apiParam['events'][0]['source']
sourceList = []
for key, value in source.items():
sourceList.append({"type": "text", "text": key + "#" + value})
obj = {
#Anfragen aus dem Raum werden an den Raum zurückgeschickt. Andere kehren zum Anrufer zurück.
"to": source["roomId"] if "roomId" in source else source["userId"],
"messages": sourceList
}
json_data = json.dumps(obj).encode("utf-8")
#Bereiten Sie die http-Anfrage und den POST vor
request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
with urllib.request.urlopen(request) as response:
response_body = response.read().decode("utf-8")
return 0
Handler: index.lambda_handler Rolle: Erstellen Sie eine benutzerdefinierte Rolle => Fügen Sie nun der Richtlinienvorlage "Nur-Lese-Zugriff für S3-Objekte" hinzu. Lassen Sie uns die anderen angemessen machen.
Stellen Sie außerdem Folgendes im Teil der Umgebungsvariablen ein
CHANNEL_ACCESSS_TOKEN:{KANAL, den ich zuvor auf dem LINE-Bildschirm notiert habe_ACCESS_TOKEN}
Fügen Sie dies ein und lassen Sie uns "speichern"
Schließlich werden wir die Verbindung vom LINE-Server zu Lambda herstellen.
Aus dem zuvor erstellten Lambda-Triggerelement (siehe Abbildung unten)
Ich werde die URL abholen, ich bin Methode: AMY. Wenn Sie diese URL also mit GET oder POST treffen, wird der in Lambda geschriebene Code ausgeführt.
Legen Sie nun die URL für dieses Auslösen auf dem LINE-Server fest.
Melden Sie sich bei LINE Developers an und setzen Sie es auf "Webhook URL"
Stellen Sie zu diesem Zeitpunkt sicher, dass Sie die Portnummer 443 hinzufügen. Scheint gespielt zu werden (nicht ausprobiert)
Damit ist der LINE Bot an einem sonnigen Tag fertig.
Registrieren Sie sich als Freund aus dem QR-Code von LINE Developers und senden Sie etwas in den entsprechenden Raum 1to1 Es sollte so aussehen Dies sind die Zielkennungen. In diesem Fall werden meine eigene Kennung und die Kennung des Raums angezeigt, an den ich gesendet habe
In Lambda können Sie nur Code schreiben und darauf zugreifen, sodass Sie im Ausgangszustand nur Basisbibliotheken verwenden können. Als ich die API von Lambda aufgerufen habe, konnte ich urllib2 nicht verwenden und habe urllib durch Drücken verwendet. Wenn Sie die Postleitzahl und die Bibliotheken hochladen, können Sie die Bibliothek verwenden, aber ich werde sie beim nächsten Mal vorstellen
Ein kurzer Überblick über die LINE API-Referenz Die Webhook-Anfrage wurde wie folgt geschrieben.
{
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
},
"message": {
"id": "325708",
"type": "text",
"text": "Hello, world"
}
}
]
}
Andererseits sind die Argumente von Lambda wie folgt
def lambda_handler(event, context):
Sie sind im Argument "Ereignis" enthalten.
{
~~~~~Abkürzung~~~~~~~
"body": "{"events":[{"type":"message","replyToken":"cd8477b1e2844fb7ac535ba8cfb7e604","source":{"userId":"Ue49159d045ba254087865fb1c09ce0e7","type":"user"},"timestamp":1504100774524,"message":{"type":"text","id":"6623088374597","text":"fewgvlkwgw"}}]}"
~~~~~Abkürzung~~~~~~~
}
Es ist als Zeichenkette gespeichert ... Ich dachte, es wäre ein "Dikt" -Typ, und ich war süchtig danach ...
Damit
apiParam = ast.literal_eval(event['body'])
So analysiere ich
――Weil es serverlos ist, gibt es nur wenige süchtig machende Elemente
――Ich habe die Push-API nicht verwendet, obwohl ich sie mit meinem LINE-Entwicklerkonto verwenden kann.
――Das Gefühl, dass die Verschwendung von Python entfernt wurde
- ||
Aberor
Oder in PHParray_key_exist()
Aber in PythonA in B
Kann von gefühlt werden
nächstes Mal ** RDS & S3 Interlocking Edition ** Wenn Sie also "Bitte" senden, erstellen wir etwas, das auf zufällige Fotos von RDS (S3) reagiert.
Recommended Posts