J'ai essayé de faire LINE BOT avec Python et Heroku

J'ai créé un LINE BOT qui renvoie des perroquets dans le cadre de l'apprentissage de Python.

Image complète

スクリーンショット 2020-11-23 210818.png Image from iOS.png

Composition environnementale

・ Python ・ Heroku ・ Développeurs LINE ・ Flacon

Procédure de développement

  1. Enregistrement et paramètres des développeurs LINE
  2. Enregistrement et paramètres Heroku
  3. Implémenté en Python
  4. Paramètres de LINE Developers à nouveau
  5. Déployer sur Heroku

Enregistrement et paramètres des développeurs LINE

スクリーンショット 2020-11-23 230638.png Créez un compte, un fournisseur et une chaîne LINE Developers via le lien ci-dessous. https://developers.line.biz/ja/services/messaging-api/

Créer un compte

Vous pouvez créer un compte avec votre nom et votre adresse e-mail.

Création de fournisseur

Créé avec le nom du fournisseur (votre nom ou le nom de votre entreprise)

Création de chaîne

・ Type de canal → API de messagerie ・ Fournisseur · Nom du canal ・ Description de la chaîne · Catégorie ・ Sous-catégorie ·adresse e-mail Créez en acceptant les conditions d'utilisation.

Inscrivez-vous comme ami

Paramètres de base du canal → Inscrivez-vous en tant qu'ami avec le code QR de l'API de message.

Confirmation des informations requises

Paramètres de base → Vérifier le secret du canal Paramètres de l'API de message → Émission et confirmation du jeton d'accès au canal

Enregistrement et paramètres Heroku

スクリーンショット 2020-11-23 230824.png Heroku est simplement un service qui vous prépare à publier votre candidature. Qu'est-ce que Heroku

Installation d'Heroku

Pour les paramètres d'installation, etc., je me suis référé à l'article suivant. https://uepon.hatenadiary.com/entry/2018/07/27/002843

Paramètres Heroku

Connectez-vous avec GitCMD

GitCMD


heroku login

heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/XXXX
Logging in... done
Logged in as XXXX@XXXX

Enregistrement de l'application

GitCMD


heroku créez le nom de votre application(Sous le nom de l'application)

Création ● du nom de l'application... done
https://nom de l'application.herokuapp.com/ | https://git.heroku.com/nom de l'application.git

Définition des variables d'environnement → Référence: Que sont les variables d'environnement Définissez le secret du canal et le jeton d'accès au canal confirmé dans LINE Developers plus tôt.

GitCMD


heroku config:set YOUR_CHANNEL_SECRET="Chaîne secrète de canal" --app Nom de l'application
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="Chaîne de jeton d'accès" --app Nom de l'application

Avec ce paramètre "YOUR_CHANNEL_SECRET" est un secret de chaîne "YOUR_CHANNEL_ACCESS_TOKEN" est un jeton d'accès à la chaîne Sera disponible dans Heroku en tant que.

Vérifier les paramètres

GitCMD


heroku config --app Nom de l'application

Implémenté en Python

スクリーンショット 2020-11-23 233037.png

Installation de la bibliothèque

Entrez le contenu suivant dans GitCMD.

GitCMD


pip3 install flask
pip3 install line-bot-sdk

-Flask est un framework d'application Web Python adapté à la création d'applications Web simples à petite échelle. → Référence: Qu'est-ce que Flask

-Line-bot-sdk contient les fonctions requises pour créer un LINE BOT. → Référence: Qu'est-ce que line-bot-sdk

Pour le code réel, j'ai fait référence à main.py sur le site suivant. https://uepon.hatenadiary.com/entry/2018/07/27/002843 De plus, je me suis référé au site suivant pour comprendre ce qui est écrit. https://www.wantedly.com/companies/casley/post_articles/139107

main.py


#Chargement des modules requis
from flask import Flask, request, abort
import os
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

#Attribuez Flask à l'application variable. Instanciation
app = Flask(__name__)

#Obtenir des variables d'environnement
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

#Méthode de confirmation de la connexion Heroku
#Lorsque je me connecte à Heroku, «bonjour le monde» s'affiche dans le navigateur
@app.route("/")
def hello_world():
    return "hello world!"

#Lorsqu'un message est envoyé par l'utilisateur, cette méthode est appelée à partir de l'API de message LINE.
@app.route("/callback", methods=['POST'])
def callback():
    #Obtenez la valeur pour la vérification de la signature à partir de l'en-tête de la demande
    signature = request.headers['X-Line-Signature']

    #Obtenir le corps de la demande
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    #Validez la signature et appelez la fonction définie dans handle s'il n'y a pas de problème.
    try:
        handler.handle(body, signature)
    #Si la vérification de la signature échoue, une exception est émise.
    except InvalidSignatureError:
        abort(400)
    #OK si vous avez terminé le traitement de la poignée
    return 'OK'

#Lorsqu'un événement de message (lorsqu'un message normal est envoyé) se produit sur LINE,
#def Exécutez la fonction suivante.
# reply_événement du premier argument du message.reply_token est le token utilisé pour répondre à l'événement.
#Le deuxième argument est linebot.Nous transmettons l'objet TextSendMessage pour la réponse définie dans les modèles.
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))

#Réglage du numéro de port
if __name__ == "__main__":
#    app.run()
    port = int(os.getenv("PORT"))
    app.run(host="0.0.0.0", port=port)

Paramètres du webhook

Revenez à nouveau à l'API de message LINE et définissez la destination de connexion Heroku dans l'URL du Webhook du Webhook. URL du webhook: https: // nom de l'application.herokuapp.com/callback * N'oubliez pas de renseigner la méthode de rappel à la fin </ font>

Création et déploiement de fichiers de configuration

Voir: Qu'est-ce que le déploiement Créez des fichiers à installer dans Heroku (y compris le code source Python "main.py" mentionné précédemment). Vérifiez la version de Python etc. pour créer un fichier

GitCMD


python --version

GitCMD


pip freeze

Créez un répertoire à déployer (cette fois, le nom du dossier est linebot) Fichiers dans le répertoire main.py → code source runtime.txt → Décrivez la version de Python requirements.txt → Description de la bibliothèque à installer Procfile → Définir comment exécuter le programme

runtime.txt


Python 3.9.0

requirements.txt


Flask==1.1.2
line-bot-sdk==1.17.0

Procfile web: python main.py

  • Procfile est créé en entrant "echo web: python main.py> Procfile" à une invite de commande ou autre.

Installé dans Heroku à l'aide de Git

スクリーンショット 2020-11-24 152809.png

GitCMD



cd linebot  
git init
git add .
git commit -am "make it better"
git push heroku master

Déplacé dans le répertoire créé par "cd", et installé dans Heroku dans les 4 lignes suivantes. Voir: Qu'est-ce que Git

Vérifiez s'il a été déployé

heroku open

Si hello World s'affiche, cela signifie qu'il a été déployé avec succès.

Vérification du journal

heroku logs --tail

Vous pouvez vérifier le journal avec la commande ci-dessus.

Où ça se coince

Lors de la copie du jeton d'accès au canal de l'API de message LINE, je l'ai copié dans l'état traduit et il a été pris dans la vérification de la signature et le perroquet n'a pas été retourné, mais lorsque j'ai annulé la traduction et copié, la valeur attendue a été renvoyée.

Références

https://www.casleyconsulting.co.jp/blog/engineer/3028/ https://www.sejuku.net/blog/7858 https://uepon.hatenadiary.com/entry/2018/07/27/002843 https://www.wantedly.com/companies/casley/post_articles/139107

Recommended Posts

J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai créé un Bot LINE avec Serverless Framework!
Made Mattermost Bot avec Python (+ Flask)
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
J'ai créé un bot de livre de compte de ménage avec LINE Bot
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
[Python] J'ai créé un LINE Bot qui détecte les visages et effectue le traitement de la mosaïque.
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
[AWS] J'ai créé un BOT de rappel avec LINE WORKS (implémentation)
J'ai fait un compteur de caractères avec Python
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
Créer un LINE BOT avec Minette pour Python
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai fait un jeu de cueillette avec Python
J'ai fait un blackjack avec du python!
J'ai fait un texte Python
J'ai fait un robot discord
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
[Super facile] Faisons un LINE BOT avec Python.
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
En Python, j'ai créé un LINE Bot qui envoie des informations sur le pollen à partir des informations de localisation.
J'ai créé un robot musical en utilisant discord.py et l'API Google Drive (testé avec Docker → déployé sur Heroku)
J'ai fait un Line-bot avec Python!
J'ai fait un wikipedia gacha bot
J'ai joué avec PyQt5 et Python3
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
Jusqu'à ce que Django retourne quelque chose avec un robot de ligne!
Je souhaite envoyer un message de Python à LINE Bot
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
J'ai créé un bot LINE qui me dit le type et la force de Pokémon dans la région de Garal avec Heroku + Flask + PostgreSQL (Heroku Postgres)
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
Je veux connaître la météo avec LINE bot avec Heroku + Python
J'ai fait un programme de gestion de la paie en Python!
J'ai dessiné une carte thermique avec Seaborn [Python]
Création d'un bot LINE ~ Création, déploiement et lancement ~
Un mémo contenant Python2.7 et Python3 dans CentOS
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
[Python] [LINE Bot] Créer un robot LINE de retour de perroquet