· Mac ・ Python
Créez un répertoire test_linebot sur votre bureau. Créez un environnement virtuel dans le répertoire et démarrez-le.
python3 -m venv .
source bin/activate
La structure finale du répertoire est la suivante
test_linebot
├main.py
├runtime.txt
├Procfile
└requirements.txt
pip install flask
pip install gunicorn
pip install line-bot-sdk
.py:main.py
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
import os
app = Flask(__name__)
#Le jeton d'accès des développeurs LINE et le secret de canal sont définis dans la variable d'environnement heroku
#Code à obtenir
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)
#Code pour vérifier si le déploiement sur heroku a réussi
@app.route("/")
def hello_world():
return "hello world!"
#Spécifiez une URL pour le webhook LINE Developers afin que le webhook envoie un événement à l'URL
@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 le handle s'il n'y a pas de problème
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
#Ci-dessous décrit comment gérer l'événement envoyé depuis le webhook
@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__":
port = int(os.getenv("PORT", 5000))
app.run(host="0.0.0.0", port=port)
try:〜 Une description du webhook. Un webhook est un processus qui envoie un événement à un serveur qui traite l'événement lorsqu'un événement (envoi d'un message, ajout d'un ami, etc.) se produit (une URL doit être spécifiée dans le webhook LINE Developers pour l'envoyer au serveur).
@handler.add(MessageEvent, message=TextMessage) Entrez le type d'événement dans le premier argument (cette fois, je veux répondre lorsqu'un message est envoyé, j'ai donc choisi MessageEvent) Dans le deuxième argument, je veux entrer le type de message (cette fois je veux retourner du texte) Par conséquent, message = TextMessage).
def handle_message(event): La fonction de traitement d'événements handle_message est appelée et la valeur du deuxième argument de reply_message est renvoyée sous forme de réponse LINE. Pour le renvoyer sous forme de message de ligne, utilisez la fonction reply_message de lineb_bot_api. Le premier argument event.reply_token, qui est reply_message, contient reply_token. Ceci peut être obtenu à partir de l'objet webhook et identifie à quel événement répondre. Désigne le jeton de réponse pour un événement. Dans le deuxième argument, placez une fonction appelée TextSendMessage pour la réponse définie dans linebot.models, et cette fonction place le message à renvoyer dans l'argument. De plus, event.message.text stocke le message envoyé depuis LINE. Par exemple, si "Bonjour" est envoyé, event.message.text = "Bonjour" est stocké. Si TextSendMessage (text = 'Good morning')), toutes les réponses renverront "Good morning". En passant, le contenu de l'événement est le suivant.
{
"message": {
"id": "***************",
"text": "Bonjour",
"type": "text"
},
"replyToken": "***********************",
"source": {
"type": "user",
"userId": "************************"
},
"timestamp": *********************,
"type": "message"
}
port = int(os.getenv("PORT", 5000)) Heroku semble attribuer des numéros de port de manière dynamique, utilisez donc os.getenv pour effectuer les opérations suivantes: os.getenv ("PORT", 5000) tente d'acquérir la variable d'environnement'PORT ', et si elle peut être acquise, la valeur acquise est retournée, et si elle ne peut pas être acquise: 5000 est retournée. 5000 est conçu pour travailler dans un environnement local.
#Réglage du numéro de port
if __name__ == "__main__":
port = int(os.getenv("PORT", 5000))
app.run(host="0.0.0.0", port=port)
Accédez à LINE Developers, et après l'enregistrement, créez un "fournisseur" qui représente le fournisseur de services. Créez un nouveau canal au sein du fournisseur. Sélectionnez Message API comme type de canal.
Connectez-vous à Heroku et créez une application. Cette fois, je l'ai nommé testlinebot0319.
heroku login
heroku create testlinebot0319
Initialiser
git init
Liez l'application de heroku avec git,
heroku git:remote -a testlinebot0319
Définissez la "chaîne de jeton d'accès" et la "chaîne secrète de canal" des développeurs Line dans les variables d'environnement heroku. Par exemple, heroku config: set YOUR_CHANNEL_ACCESS_TOKEN = "Chaîne de caractères du jeton d'accès au canal" -a (nom de l'application).
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="Chaîne de jeton d'accès au canal" -a testlinebot0319
heroku config:set YOUR_CHANNEL_SECRET="Chaîne secrète de canal" -a testlinebot0319
Vérifiez si la variable d'environnement est correctement définie sur heroku.
heroku config
Créez Procfile, runtime.txt, requirements.txt.
Créez runtime.txt après avoir vérifié votre propre version de python.
.txt:runtime.txt
python-3.8.0
Procfile décrit ce qui suit.
Prockfile
web: python main.py
Décrivez requirements.txt en saisissant ce qui suit dans le terminal.
pip freeze > requirements.txt
Initialisez à nouveau git, associez-le, ajoutez-le et validez-le avec le nom the-first. Poussez enfin vers Heroku.
git init
heroku git:remote -a testlinebot0319
git add .
git commit -m'the-first'
git push heroku master
heroku ouvert,
heroku open
Succès si ce qui suit apparaît dans le navigateur.
Définissez le nom de votre application Heroku dans le champ LINE Developers Webhook comme indiqué ci-dessous. Nom de l'application sur Heroku = testlinebot0319
À ce stade, activez l'utilisation de Webhook. Avec cela, si vous lisez le code QR ci-dessus de LINE Developers et que vous vous inscrivez comme ami, la demande de retour de perroquet est terminée. Si LINE BOT ne fonctionne pas, par exemple ne pas retourner le perroquet, je peux allumer et éteindre le Webhook à plusieurs reprises (dans mon cas, cela a fonctionné).
Faisons un LINE BOT qui peut être recherché sur Wikipedia en une heure! LINE BOT avec Python + Flask + Heroku [Python débutant! -Retour perroquet avec LINE Bot-]
Recommended Posts