Je vais vous présenter ce que vous pouvez faire avec le cadre gratuit de GCP en plusieurs parties. Le contenu de l'offre gratuite est sujet à changement, et les paiements à l'utilisation peuvent être facturés si la limite est dépassée, donc Informations officielles Veuillez utiliser à vos risques et périls en vérifiant = ja).
Cette fois, nous associerons ** Cloud Run ** et ** Datastore ** à la ** API de messagerie ** de LINE pour créer le robot simple suivant. À la fin de l'article, je présenterai un bot plus pratique créé de la même manière, alors jetez-y également un œil (je l'ai implémenté avec App Engine, mais il y a beaucoup de choses en commun).
Cloud Run Un service GCP qui permet aux conteneurs sans état de s'exécuter dans un environnement sans serveur. Cette fois, il n'exécute que le serveur Web de Flask, donc utiliser App Engine peut être la voie royale, mais Cloud Run semble avoir moins d'articles, donc je vais le présenter.
Datastore Base de données NoSQL évolutive de GCP. Comme il est actuellement intégré à Firestore, nous utiliserons Firestore en mode Datastore pour être exact. À propos, l'utilisation du mode Datastore et du mode natif est expliquée dans Officiel comme suit.
Pour les nouveaux projets de serveur, utilisez Cloud Firestore en mode Datastore.
Messaging API Vous pouvez créer un bot qui s'exécute sur LINE. Le bot créé est lié au compte LINE officiel, de sorte que les personnes qui se sont inscrites en tant qu'amis peuvent l'utiliser.
Les 3 fichiers suivants sont préparés cette fois. Placez-les tous dans le même répertoire.
app.py Le premier est app.py, qui décrit le contenu principal du traitement. Le plan est basé sur ici.
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
import config #Jeton d'accès à l'API de messagerie, etc.
from google.cloud import datastore
import datetime
import os
app = Flask(__name__)
client = datastore.Client()
line_bot_api = LineBotApi(config.token)
handler = WebhookHandler(config.secret)
@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'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
user_id = event.source.user_id
user_key = client.key("TestTable", user_id) #Obtenir la clé avec kind et id comme arguments
user_entity = client.get(user_key) #Obtenir l'entité avec la clé comme argument
if user_entity is None:
user_entity = datastore.Entity(key=user_key, exclude_from_indexes=("timestamp",))
msg = "Ravi de vous rencontrer!"
else:
timestamp = user_entity["timestamp"]
ts = datetime.datetime.fromtimestamp(timestamp/1000)
msg = "{}Année{}Mois{}journée{}Temps{}Depuis quelques minutes!".format(ts.year, ts.month, ts.day, ts.hour, ts.minute)
user_entity.update({ #Mettre à jour l'entité
"timestamp": event.timestamp
})
client.put(user_entity) #Enregistrer l'argument Entity dans le magasin de données
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=msg))
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
handle_message
immédiatement après le décorateur @ handler.add
est la fonction correspondant au message de l'API de messagerie. L'événement d'argument contient diverses informations telles que l'identifiant_utilisateur de l'expéditeur (répertorié dans ici). Peut être vu). Je ne suis pas familier avec les fonctions liées à Datastore, j'ai donc fait un bref commentaire, mais veuillez consulter la Documentation pour plus de détails.
config.py Il s'agit du fichier lu par ʻimport config` dans app.py. Les jetons d'accès sont définis pour être liés à l'API de messagerie (la méthode de confirmation sera décrite plus tard). Vous pouvez l'écrire directement dans app.py, mais il est recommandé d'en faire un fichier séparé afin qu'il puisse être facilement géré avec .gitignore.
config.py
token = "xxxxx"
secret = "xxxxx"
Dockerfile
Enfin, le Dockerfile. Les packages Python requis sont installés avec RUN pip install ...
.
# Use the official Python image.
# https://hub.docker.com/_/python
FROM python:3.7
# Copy local code to the container image.
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . .
# Install production dependencies.
RUN pip install Flask gunicorn line-bot-sdk google-cloud-datastore
# Run the web service on container startup. Here we use the gunicorn
# webserver, with one worker process and 8 threads.
# For environments with multiple CPU cores, increase the number of workers
# to be equal to the cores available.
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app
Lorsque vous atteignez ce point, déployez avec la commande suivante. Veuillez lire le nom du projet et la région selon le cas. En chemin, il vous sera demandé ʻAutoriser les invocations non authentifiées à [qiita-sample](y / N)? , Mais cette fois c'est un test, alors réglez-le sur
y`. Lorsque vous avez terminé, vérifiez l'URL depuis la console GCP.
gcloud builds submit --tag gcr.io/$gcp_project/qiita-sample
gcloud beta run deploy qiita-sample --image gcr.io/$gcp_project/qiita-sample --platform managed --region us-west1
Tout d'abord, connectez-vous à LINE Developers, accédez à Console et sélectionnez Fournisseur (sinon) Créer).
S'il n'y a pas encore de chaîne, l'écran ci-dessous s'affiche. Accédez à Créer un canal API de messagerie et remplissez les informations requises.
Vient ensuite le changement de réglage et la confirmation.
/ callback
à la fin de l'URL confirmée sur la console Cloud Run, et l'URL comme indiqué dans l'image ci-dessous. Après la saisie, activez ʻUtiliser webhook`.Le réglage est terminé jusqu'à ce point.
Ajoutez-le à vos amis LINE avec le code QR ou l'ID sur l'écran des paramètres et parlez-leur. Si vous avez déjà déployé Cloud Run, vous obtiendrez une réponse comme indiqué dans l'image au début. Vous pouvez également confirmer que le dernier temps de réponse est enregistré normalement à partir de la console Datastore.
En fait, c'était mon premier message, donc je pense qu'il y avait beaucoup de parties qui étaient difficiles à lire, mais j'espère que cela sera utile autant que possible. Enfin, je vais vous présenter le bot que j'ai créé comme dans cet article.
Le parc est fermé à cause de Corona, mais c'est un bot pratique dans le parc à thème que j'ai fait rêver d'aller à nouveau à Disney. Si vous invitez avec un code QR ou un ID (@ 541rhynx
), vous pouvez ** diviser ** et ** paire ** de véhicules en conversation LINE. Cette implémentation est App Engine, mais vous devriez pouvoir faire de même en réécrivant simplement l'app.py du bot que j'ai créé cette fois. Le code et les instructions sont disponibles sur github.
Recommended Posts