[PYTHON] Système d'aide à la décision pour les personnes âgées réalisé avec LINE Messaging API + Serverless Framework

Cet article est l'article du 8ème jour du Calendrier de l'Avent Senior Maru.

Bonjour à tous. Comment allez-vous aujourd'hui, quand vous réalisez que vous êtes une personne âgée et que vous êtes sur le point de mettre fin à ce problème? À propos, en parlant de personnes âgées, elles ont la quarantaine. Parlant de 40, Confucius est dit "quarante nuisance" dans la théorie, et il est également appelé "désagréable". Mais les temps ont changé (peut-être). Même si je suis dans la quarantaine, je suis toujours perdu. Pour cette raison, la vitesse de jugement ralentit et je suis en difficulté.

Ici, nous vous livrerons un merveilleux système d'aide à la décision! (Hypothèse longue)

1. Configuration

Considérez la configuration globale. Après tout, faisons-le avec LINE Bot en utilisant l 'API de messagerie LINE qui vient de sortir en octobre 2016 en raison de la tendance. Même si vous dites les anciens, vous avez le rang LINE sur votre smartphone, non? Si vous ne l'avez pas, téléchargez-le maintenant. Je ne veux pas dépenser d'argent sur le backend, alors suivons la tendance et utilisons AWS Lambda (python). Et comme c'est un gros problème, faisons-le avec Severless Framework.

2. Inscrivez-vous à l'essai de développeur de LINE pour créer un bot

Enregistrez votre compte à partir de «Start Developer Trial» dans LINE BUSINESS CENTER. Après vous être enregistré, allez dans «Liste des comptes» sur l'écran de connexion et allez dans «Créer un compte professionnel». L'écran de sélection de service apparaîtra, alors sélectionnez "API de messagerie". Ici, le nom du compte a été créé avec "Senior Maru". Le type d'entreprise peut convenir, mais j'ai choisi ici «individu (personne fictive)». syorou-1.jpg

Une fois l'enregistrement terminé, passez à "LINE @ MANAGER". Nous allons créer un compte bot ici, mais activons d'abord l'API. syorou-2.jpg

Puis activez "Envoyer Webhook". Définissez également «Message de réponse automatique» sur «Ne pas utiliser». syorou-5.jpg

Lorsque vous avez terminé, appuyez sur "Définir avec les développeurs LINE" à partir de l'écran "Paramètres du bot" pour passer à la page "Développeurs LINE".

Appuyez sur le bouton "ISSUE" à côté du jeton d'accès au canal pour payer le jeton et prendre note de ce jeton et du secret du canal.

Pour le moment, les préparatifs sont maintenant terminés.

3. Préparation du cadre sans serveur

Installez avec la commande npm. Installez npm correctement comme yum.

#sudo npm install serverless -g

Vérifions s'il est installé normalement.

#sls --help

Commands
* Serverless documentation: http://docs.serverless.com
* You can run commands with "serverless" or the shortcut "sls"
* Pass "--help" after any <command> for contextual help

config credentials ............ Configures a new provider profile for the Serverless Framework
create ........................ Create new Serverless service
install ....................... Install a Serverless service from GitHub
deploy ........................ Deploy a Serverless service
deploy function ............... Deploy a single function from the service
deploy list ................... List deployed version of your Serverless Service
invoke ........................ Invoke a deployed function
invoke local .................. Invoke function locally
info .......................... Display information about the service
logs .......................... Output the logs of a deployed function
metrics ....................... Show metrics for a specific function
remove ........................ Remove Serverless service and all resources
rollback ...................... Rollback the Serverless service to a specific deployment
slstats ....................... Enable or disable stats

Plugins
AwsConfigCredentials, Config, Create, Deploy, Info, Install, Invoke, Logs, Metrics, Package, Remove, Rollback, SlStats

Si l'aide s'affiche comme ci-dessus, elle réussit. "Sls" est un alias court pour la commande sans serveur. Cet article a été confirmé pour fonctionner avec npm 3.9.2 et sans serveur 1.3.0 sur FreeBSD 11.0.

4. Codage

4.1 Créer un projet

Commencez par créer un projet sans serveur.

#mkdir line-syorou
#cd line-syorou
#sls create -t aws-python

Spécifiez le modèle avec -t. Étant donné qu'AWS Lambda (python) est utilisé ici, "aws-python" est spécifié.

Cela créera deux fichiers dans le répertoire courant, "handler.py" et "serverless.yml". hapdler.py est le programme lui-même et serverless.yml est le fichier de configuration. C'est très simple!

4.2 Paramètres

Définissez serverless.yml. Il n'y a presque pas de place pour réécrire cette fois. Lorsque HTTP GET et HTTP POST arrivent à https: // XXXXXXXX / syorou, appelons la fonction appelée syorou dans handler.py. Veuillez réécrire uniquement les endroits suivants.

functions:
  syorou:
    handler: handler.hello
    events:
      - http:
           path: syorou
           method: get
      - http:
           path: syorou
           method: post

4.3 Installation du SKD officiel

Il existe un SDK python LINE officiel, alors installez-le.

line-bot-sdk-python

#pip install line-bot-sdk -t ./

Lors du déploiement sur Lambda, les SDK installés doivent être consolidés dans un fichier ZIP, utilisez donc l'option "-t" pour les installer dans le répertoire actuel.

4.4 Ecrire le code

Écrivez le code dans handler.py. Enregistrez le fichier sous UTF-8.

Si vous écrivez selon Document officiel, il n'y a rien de particulièrement difficile, mais le flux est

--Vérifiez et analysez la demande en utilisant les informations de l'en-tête X-Line-Signature ainsi que le secret de canal --Dans l'en-tête de la demande, les événements (Message / Join, etc.) qui se sont produits dans le tableau "Events" sont inclus. Cette fois, je veux répondre à l'écriture de l'utilisateur, donc je vais cibler l'événement de message.

Ce sera.

# coding: utf-8
import json
import random
from linebot import (
    LineBotApi, WebhookHandler, WebhookParser
)
from linebot.exceptions import (
    InvalidSignatureError,LineBotApiError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,TemplateSendMessage,ButtonsTemplate,URITemplateAction,LocationSendMessage
)

def syorou(oevent, context):

    #Demander le corps et X-LINE-Extraire l'en-tête de la signature
    body = oevent['body']
    signature = oevent['headers']['X-Line-Signature']

    #Utilisez Channel Secret pour vérifier si l'entrée est correcte
    secret = 'Le secret de la chaîne que j'ai noté plus tôt'
    parser = WebhookParser(secret)

    try:
        events = parser.parse(body,signature)
    except InvalidSignatureError:
        return {"stautsCode" : 400,"body" : ""};

    #Créer un objet API LineBot
    token = 'Le jeton que vous avez noté plus tôt'
    line_bot_api = LineBotApi(token)
    
    try:
        events = parser.parse(body,signature)
    except InvalidSignatureError:
        return {"stautsCode" : 400,"body" : ""};

    for event in events:
        if event.type == 'message':
            reply_token = event.reply_token
            if random.randint(0,1) == 0:
                message = TextSendMessage(
                    text=u"Allez allez allez!"
                )
            else:
                message = TextSendMessage(
                    text=u"Eh bien, arrêtons..."
                )
                
            try:
                line_bot_api.reply_message(reply_token,message)
            except LineBotApiError as e:
                print(e.status_code)
                print(e.error.message)
                print(e.error.details)

    return {"stautsCode" : 200,"body" : "OK"};
            

5. Allons bouger

5.1 Déployer

Déployez sur Lambda. Pour déployer, les informations d'identification aws doivent être définies, définissez-les de manière appropriée. Écrivez-le dans ~ / .aws / credentials ou définissez une variable d'environnement.

#sls deploy
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
.....
Serverless: Stack create finished...
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading service .zip file to S3 (2.26 MB)...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
.................................
Serverless: Stack update finished...

Service Information
service: aws-python
stage: dev
region: us-east-1
api keys:
  None
endpoints:
  GET - https://*****us-east-1.amazonaws.com/dev/syorou
  POST - https://******us-east-1.amazonaws.com/dev/syorou
functions:
  aws-python-dev-syorou: arn:aws:lambda:us-east-1:********:function:aws-python-dev-syorou

En cas de succès, le point de terminaison sera affiché comme ceci, alors définissez-le sur l'URL du Webhook à partir de la page LINE Developers plus tôt.

5.2 Parlons

Il y a un code QR pour enregistrer le bot que vous avez créé cette fois dans "Paramètres du compte" sur la page LINE @ MANAGER plus tôt, alors lisez-le depuis l'application LINE et faites-vous des amis.

Et parlons de ce qui vous inquiète maintenant.

syorou-4.png

Vos soucis ont été résolus en toute sécurité! : v:

Résumé

J'ai donc essayé de créer un chat bot à l'aide de l'API de messagerie LINE sur AWS Lambda à l'aide de Serverless Framework. Il est très facile d'utiliser les deux, alors essayez-le. De plus, nous ne sommes pas responsables des accidents graves qui se produisent selon les instructions de ce chatbot, veuillez donc le faire à vos risques et périls: stuck_out_tongue:

Vous pouvez demander des amis à ce bot à partir du code QR ci-dessous, mais on ne sait pas combien de temps cela fonctionnera car il ne peut enregistrer que jusqu'à 64 personnes, donc je suis désolé si vous ne pouvez pas vous connecter. Après avoir tout essayé, j'apprécierais que vous puissiez le désamorcer pour la personne suivante.

QRコード

Recommended Posts

Système d'aide à la décision pour les personnes âgées réalisé avec LINE Messaging API + Serverless Framework
J'ai créé un Bot LINE avec Serverless Framework!
J'ai essayé de créer LINE-bot avec Python + Flask + ngrok + LINE Messaging API
API de reconnaissance faciale sans serveur conçue avec Python
Bot LINE sans serveur conçu avec IBM Cloud Functions
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
Création d'un BOT «Présentation non officielle du produit remis à neuf par Apple» avec l'API de messagerie LINE (v2) + API Gateway + lambda (python)
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python