[PYTHON] Créer un robot LINE de retour de perroquet avec AWS Cloud9

introduction

Un mémo pour créer un LINE Bot qui renvoie un perroquet en utilisant SAM Local sur AWS Cloud9

Diagramme

Je vais faire ça.

image.png

Aperçu de la procédure

référence

1. [LINE Developers] Créer un fournisseur

Créez un fournisseur dans LINE Developers.

image.png

2. [LINE Developers] Définissez le canal du fournisseur créé

Définissez le canal sur le fournisseur que vous venez de créer.

image.png

Sélectionnez l'API de messagerie.

image.png

3. [LINE Developers] Obtenez deux informations sur la chaîne créée

Obtenez des informations sur le secret du canal et le jeton d'accès au canal.

Informations secrètes de la chaîne image.png

Cliquez sur le bouton Publier pour obtenir des informations sur le jeton d'accès au canal. image.png

4. [AWS] Préparer l'environnement Cloud9

Dans la console AWS, créez Cloud9. Créé dans la région de Tokyo (ap-nord-est-1).

image.png

5. [AWS-Cloud9] Créer Lambda

Créez Lambda à l'aide de SAM Local. Cliquez sur λ->` λ + ʻ sur le côté droit de Cloud9 pour en créer un nouveau.

image.png

Définissez une chaîne de caractères dans le champ de cadre rouge et cliquez sur le bouton Suivant

image.png

J'ai choisi Python.

image.png

Créez une passerelle API dans son ensemble.

image.png

J'en ai fait le paramètre par défaut.

image.png

Cliquez sur le bouton «Terminer» pour commencer la création.

image.png

Lorsque la création est terminée, vous verrez un écran comme celui-ci.

image.png

* En plus * [AWS] Confirmation des ressources AWS créées

Vous pouvez voir les ressources AWS que vous avez créées jusqu'à présent dans la pile CloudFormation. Deux piles sont créées, la première pile (aws-cluod9-xxx) est la pile lorsque Cloud9 a été créé, et la pile suivante (cloud9-app1) est la pile lorsque Lambda a été créée.

image.png

Vous pouvez voir les ressources AWS créées dans l'onglet Ressources de la pile lorsque vous avez créé Lambda.

image.png

6. Mise à jour du script Lambda [AWS]

Supprimez tous les scripts Lambda existants et copiez le script suivant.

Script Lambda


#Variable d'environnement
# LINE_CHANNEL_SECRET canal secret
# LINE_CHANNEL_ACCESS_Jeton d'accès au canal TOKEN

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

#Préparation de la sortie du journal
logger = logging.getLogger()  
logger.setLevel(logging.INFO)  

def lambda_handler(event, context):  
    #Sortie du journal du contenu de la demande
    logger.info(event)  

    ###
    #Obtenir le secret du canal LINE à partir de la variable d'environnement
    channel_secret = os.environ['LINE_CHANNEL_SECRET']  
    #HMAC avec le secret du canal LINE comme clé-Calculer la valeur de hachage du corps de la requête à l'aide de l'algorithme SHA256
    hash = hmac.new(channel_secret.encode('utf-8'), event['body'].encode('utf-8'), hashlib.sha256).digest()
    #Valeur de hachage encodée en base64
    signature = base64.b64encode(hash)

    # X-Line-Obtenez la signature
    xLineSignature = event['headers']['X-Line-Signature'].encode('utf-8')  
    #Vérifiez la correspondance de signature et la sortie du journal en cas d'incohérence
    if xLineSignature != signature:  
        logger.info('Non-concordance de signature')  
        return {  
            'statusCode': 200,  
            'body': json.dumps('Il semble que la signature soit incorrecte.')  
        } 
    ###

    # 1.Extraire le contenu d'un événement Webhook
    body = json.loads(event['body'])  

    for event in body['events']:  
        #Définir une liste d'objets de message pour la réponse
        messages = []  
        # 2.Le type d'événement Webhook est message
        if event['type'] == 'message':  
            # 3.Si le type de message est du texte
            if event['message']['type'] == 'text':  
                # 4.Utiliser le contenu du texte reçu comme objet de message
                messages.append({  
                        'type': 'text',  
                        'text': event['message']['text']  
                    })  

                #Définir les informations de demande pour les messages de réponse
                url = 'https://api.line.me/v2/bot/message/reply'  
                headers = {  
                    'Content-Type': 'application/json',  
                    #Obtenir le jeton d'accès au canal LINE à partir de la variable d'environnement
                    'Authorization': 'Bearer ' + os.environ['LINE_CHANNEL_ACCESS_TOKEN']  
                    }  
                data = {  
                    #Définir le jeton de réponse et l'objet de message
                    '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:  
                    #Sortie du journal du contenu de la réponse
                    logger.info(response.read().decode("utf-8"))  

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

Après avoir mis à jour le script lambda, déployez-le avec le bouton de déploiement (icône de flèche vers le haut).

image.png

7. [AWS] Définir les variables d'environnement dans Lambda

Ouvrez Lambda dans la console AWS et définissez le «secret de canal» et le «jeton d'accès au canal» du canal créé dans LINE Developers en tant que variables d'environnement.

image.png

8. [AWS] Confirmer l'appel d'URL de la passerelle API

«Vérifiez l'appel d'URL de la passerelle API».

image.png

9. Mettre à jour les paramètres de la chaîne [LINE Developers]

Définissez l '«Appel d'URL de la passerelle API» confirmé précédemment comme l'URL Webhook du canal créé par les développeurs LINE et activez l'utilisation des Webhooks. De plus, il désactive le message de réponse.

image.png

Ceci termine le paramétrage de "LINE Bot pour le retour des perroquets".

[LINE Bot] Vérification du fonctionnement

Enregistrez la chaîne créée en tant qu'ami à partir du code QR et vérifiez si vous souhaitez renvoyer le perroquet.

image.png

De cette façon, si vous renvoyez le perroquet, vous réussirez

* Supplément * [AWS] Quand cela ne fonctionne pas bien

Il peut être bon de vérifier s'il y a des erreurs dans le groupe de journaux CloudWatch

image.png

line.png

Cette fois, c'est la fin

Recommended Posts

Créer un robot LINE de retour de perroquet avec AWS Cloud9
[Python] [LINE Bot] Créer un robot LINE de retour de perroquet
Créer un LINE BOT (chat)
Création du LINE BOT Parrot Return
Procédure de création d'un Line Bot sur AWS Lambda
Point de contrôle lorsque le robot de retour LINE Parrot est accro à Heroku
Créer un bot pour Skype sur EC2 (CentOS)
Créer un bot LINE WORKS avec Amazon Lex
Créer un LINE BOT
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
Faire un bot d'analyse morphologique de manière lâche avec LINE + Flask
[Pour jouer] Essayez de faire de Yuma un robot LINE (Python)
[Super facile] Faisons un LINE BOT avec Python.
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
Faisons un robot Discord.
Créez un bot LINE avec GoogleAppEngine / py. Version nue simple
Jusqu'à ce que Django retourne quelque chose avec un robot de ligne!
Créons un bot LINE en utilisant divers services [ngrok edition]
[AWS] J'ai créé un BOT de rappel avec LINE WORKS (implémentation)
[Python] Créez votre propre bot LINE
Créer un segfo Perl en une seule ligne
Comment créer un bot slack
[LINE bot] Je suis un ranger! Partie 2
[AWS / Tello] Construction d'un système d'exploitation de drones sur le cloud
Créer un bot LINE avec Django
Python appelant l'API Google Cloud Vision depuis LINE BOT via AWS Lambda
Les débutants en Python ont décidé de créer un bot LINE avec Flask (commentaire approximatif de Flask)
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
Exécutez TensorFlow sur une instance GPU sur AWS
Création d'un bot LINE ~ Création, déploiement et lancement ~
Faire de Jupyter Notebook un service sur CentOS
Faire de Unity Accelerator un service sous Linux
Créer un environnement Python + OpenCV sur Cloud9
Faisons un bot Twitter avec Python!
J'ai créé un robot LINE qui envoie des images recommandées tous les jours à l'heure
Création d'un LINE BOT pour notifier d'autres concours AtCoder à l'aide d'AWS
J'ai essayé de créer un BOT de traduction qui fonctionne avec Discord en utilisant googletrans
J'ai fait un robot de remplacement de tampon avec une ligne
Envisagez une application WebSocket native pour le cloud qui s'exécute sur AWS
Créez un environnement WardPress sur AWS avec Pulumi
Créer un bot Twitter Trend avec heroku + Python
Essayez Tensorflow avec une instance GPU sur AWS
Créer un LINE BOT avec Minette pour Python
LINE BOT avec Python + AWS Lambda + API Gateway
Affichage simple du graphique linéaire sur Jupyter Notebook
Créez un jeu Janken en une seule ligne (python)
J'ai créé un Bot LINE avec Serverless Framework!
Bot LINE sans serveur conçu avec IBM Cloud Functions
Quoi qu'il en soit, je suis à la maison, alors faisons un bot de fonction de capture d'écran (site) avec Discord!
L'explication la plus simple au monde sur la création de LINE BOT (1) [Account preparation]