Comme le titre l'indique, j'ai créé un bot LINE avec une simple fonction de minuterie à l'aide de l'API de messagerie Python + Flask + ngrok + LINE. Il peut être créé en peu de temps, donc si vous êtes intéressé, n'hésitez pas à l'essayer.
-Connectez-vous avec votre compte LINE, etc. sur LINE Developers
Cette fois, nous utiliserons venv
pour construire un environnement virtuel avec le nom lineVenv
dans le répertoire Workspace
.
% mkdir Workspace
% cd Workspace
% python3 -m venv lineVenv
Après avoir exécuté la commande suivante, s'il y a une notation (lineVenv)
au début de la ligne du terminal, cela réussit.
% . lineVenv/bin/active
Ensuite, utilisez «pip» pour installer «Flask» et «LINE Messaging API SDK for Python». Les packages requis peuvent être installés avec la commande suivante.
% pip3 install flask
% pip3 install line-bot-sdk
Ceci termine la construction de l'environnement virtuel.
Au fait, un programme de bot avec une fonction de minuterie tout en faisant référence à README.rst
dans GitHub de l'API de messagerie LINE pour SDK installée plus tôt. Sera mis en œuvre.
Créez ʻapp.py` dans le répertoire précédent et écrivez comme suit.
app.py
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
from time import time
from datetime import timedelta
app = Flask(__name__)
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN') #Jeton d'accès au canal
handler = WebhookHandler('YOUR_CHANNEL_SECRET') #Secret de chaîne
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
user = {}
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
id = event.source.user_id #Obtention d'un ID utilisateur LINE
if event.message.text == "start":
if not id in user: #Pour les nouveaux utilisateurs
user[id] = {}
user[id]["total"] = 0
user[id]["start"] = time() #obtenir l'heure à laquelle le démarrage est exécuté
totalTimeStr = timedelta(seconds = user[id]["total"]) #s -> h:m:s
reply_message = f"Start Timer\n\nTotal: {totalTimeStr}"
elif event.message.text == "stop":
end = time() #end Obtenir le temps d'exécution
dif = int(end - user[id]["start"]) #Obtenez le temps écoulé
user[id]["total"] += dif #Mettre à jour le temps total
timeStr = timedelta(seconds = dif)
totalTimeStr = timedelta(seconds = user[id]["total"])
reply_message = f"Stop Timer\n\nTime: {timeStr}s\nTotal: {totalTimeStr}"
elif event.message.text == "reset":
user[id]["total"] = 0 #Réinitialiser le temps total à 0
totalTimeStr = timedelta(seconds = user[id]["total"])
reply_message = f"Reset Timer\n\nTotal: {totalTimeStr}"
else:
reply_message = "Please send \"start\" or \"stop\"or \"reset\"" #Réponse à 3 mots non spécifiés
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=reply_message))
if __name__ == "__main__":
app.run()
Il semble que c'est fait, mais il y a deux autres changements à ce qui suit:
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN') #Jeton d'accès au canal
handler = WebhookHandler('YOUR_CHANNEL_SECRET') #Secret de chaîne
Ce dont vous avez besoin ici, c'est le jeton d'accès au canal et le secret de canal que vous avez noté dans ①. Copiez et collez respectivement dans «YOUR_CHANNEL_ACCESS_TOKEN» et «YOUR_CHANNEL_SECRET».
Maintenant, passons à l'exécution.
Si vous exécutez flask run
dans l'environnement virtuel, vous verrez ce qui suit.
% flask run
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Il existe une adresse «http: //127.0.0.1: 5000», mais comme il s'agit d'un hôte local, il n'est pas accessible depuis l'extérieur du LAN.
(En d'autres termes, il n'est pas accessible depuis le serveur LINE et le webhook ne peut pas être utilisé)
Il existe un moyen de le déployer, mais lorsque je cherchais une autre méthode, un outil appelé ngrok
me semblait utile.
Comment utiliser ngrok https://qiita.com/hirokisoccer/items/7033c1bb9c85bf6789bd
Alors, ouvrez un terminal différent du terminal exécutant flask run
et installez-le avec la commande suivante.
% brew install ngrok
Vous pouvez également télécharger le fichier exécutable à partir du site Web officiel de ngrok.
Une fois l'installation terminée, exécutez ngrok http 5000
et vous verrez ce qui suit:
% ngrok http 5000
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Session Expires 7 hours, 59 minutes
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://xxxxxxxxxxxx.ngrok.io -> http://localhost:5000
Forwarding https://xxxxxxxxxxxx.ngrok.io -> http://localhost:5000
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
Vous pouvez maintenant accéder à http: //127.0.0.1: 5000
via l'URL publique https: // xxxxxxxxxxxx.ngrok.io
.
Maintenant que nous avons l'URL du webhook, nous sommes de retour chez LINE Developers. Modifiez les deux points suivants dans Paramètres de l'API de messagerie -> Paramètres du Webhook.
https://xxxxxxxxxxxx.ngrok.io
--Utilisation du Webhook: valideLes deux points suivants de la fonction de compte officiel LINE seront modifiés.
--Autoriser la participation à un chat en groupe / à plusieurs personnes: non valide
C'est la fin de toutes les étapes.
Ajoutez des amis LINE parmi les suivants et envoyez la demande spécifiée dans le programme. Paramètres de l'API de messagerie -> Code QR / ID de base du bot
Here est un bot qui reproduit le contenu de cet article. (Déployé) Vous pouvez le référer si vous le souhaitez.
Heroku (version gratuite) n'était pas adapté pour déployer le bot LINE créé cette fois. Dans Heroku, le numéro de port public n'est pas fixe, de sorte que le processus de création de plusieurs requêtes et de leur regroupement n'est pas stable. PythonAnywhere fonctionnait bien, à condition qu'il soit gratuit et stable.
LINE Developers - Documents - Messaging API LINE Messaging API SDK for Python Comment utiliser ngrok
Recommended Posts