Je n'ai pas fait la queue avec une fille ces derniers temps ... N'y a-t-il pas une jolie fille qui vous répondra immédiatement? N'est-il pas possible d'y parvenir en utilisant linebot?
Je vais créer un linebot pour une raison si terrible.
・ Mac Catalina ・ Version Docker 19.03.13 ・ Flacon 1.1.2 ・ Python 3.8.3 ・ Docker-compose la version 1.27.4 ・ Heroku 7.45.0 ・ Bash
Tout d'abord, en tant que construction d'environnement, déplacez le conteneur de docker vers heroku et démarrez-le. LINE BOT crée un beau bot qui reviendra bonjour quand vous dites bonjour. Notez que ce n'est pas le cas car il est non arrière!
Le déroulement de la première fois est décrit.
** 1. Enregistrement des développeurs LINE ** ** 2. Création d'un fichier python ** ** 3. Créez Dockerfile et docker-compose.yml ** ** 4. Télécharger sur heroku **
La structure finale du fichier est la suivante.
bijobot ├── Dockerfile ├── app.py ├── docker-compose.yml └── requirements.txt
Accédez au site à partir de ce qui suit. LINE Developers
Tout d'abord, connectez-vous et sélectionnez créer à partir des fournisseurs. Je m'en fiche s'il y a déjà une notification disny.
Il dira Créer un nouveau fournisseur, alors donnez-lui le nom que vous voulez, comme une notification disny. Je l'ai nommé "Free Image Child".
Ensuite, "Ce fournisseur n'a pas encore de canaux" apparaît. Sélectionnez donc Créer un canal d'API de messagerie.
Après cela, vous serez redirigé vers l'écran ci-dessous, alors remplissez chacun comme il convient. L'icône de chaîne est souvent utilisée dans les images gratuites, et j'ai personnellement adopté un type enfant.
Si vous acceptez les conditions et vérifiez Admin, vous pouvez voir que de nouvelles chaînes ont été ajoutées comme indiqué ci-dessous.
Accédez à la chaîne que vous avez créée ici et dans les paramètres de base
Channnel secret
Dans l'API de messagerie
Channel access token
Quant à, il est nécessaire, alors prenez-en note.
Messaging API SDKs Étant donné que la procédure de création d'un fichier à l'aide de flask est décrite à partir des SDK officiels de, nous l'appliquerons pour le créer.
Commencez par créer un répertoire de travail pour créer une application. Bijo irait bien.
terminal
mkdir bijo
cd bijo
Ensuite, créez un fichier python.
Le fichier python créé est le suivant. Assurez-vous de le nommer app.py.
app.py
from flask import Flask, request, abort
#Bibliothèque qui gère l'environnement dans OS
import os
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
#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)
app = Flask(__name__)
@app.route("/")
def hello_world():
return "hello!"
@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):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
if __name__ == "__main__":
app.run()
YOUR_CHANNEL_ACCESS_TOKEN
YOUR_CHANNEL_ACCESS_TOKEN
Je me suis abstenu de
Channnel secret
Channel access token
Utiliser.
Utilisez os pour récupérer des informations à partir des variables d'environnement heroku.
Cela sera défini plus tard dans heroku.
** 3. Créez Dockerfile et docker-compose.yml **
Créer Procfile etc. avec heroku est gênant, et je voulais utiliser la technologie moderne si possible, alors j'utilise docker. Créez le Dockerfile et docker-compose.yml dans le répertoire bijo comme indiqué ci-dessous.
Il semble que je doive créer une version heroku de docker-compose.yml appelée heroku.yml, mais cela semble gênant, alors j'ai passé cette fois.
docker-compose.yml
#Pour le travail local:Ne fonctionne pas dans heroku.
#Pour le travail local:Ne fonctionne pas dans heroku.
version: '3'
services:
app:
build: .
container_name: bijobot
tty: true
ports:
- 5000:5000
environment:
FLASK_ENV: 'development' #Mode de débogage activé
FLASK_APP: "app.py" #app.Démarrer py
YOUR_CHANNEL_ACCESS_TOKEN:Une copie du jeton d'accès
YOUR_CHANNEL_SECRET:Secret de chaîne retenu
volumes:
- ./:/code/
command: flask run -h 0.0.0.0
# command: gunicorn -b 0.0.0.0:$PORT app:app --log-file=-
En définissant FLASK_ENV: 'development'
, le fichier sera automatiquement reflété sur le serveur lors de l'enregistrement.
Dockerfile
FROM python:3.7-alpine
#Créez un répertoire appelé code et utilisez-le comme dossier de travail
WORKDIR /code
#Mode de débogage activé
ENV FLASK_ENV: 'development'
#magie alpine
RUN apk add --no-cache gcc musl-dev linux-headers
# requirements.Déplacez le txt dans le code
COPY requirements.txt requirements.txt
# requirements.Installez la bibliothèque en txt
RUN pip install -r requirements.txt
#Montez tous les fichiers dans le code.
COPY . .
# $Notez que cela ne fonctionnera que si PORT est spécifié.
CMD gunicorn -b 0.0.0.0:$PORT app:app --log-file=-
De plus, créez requirements.txt.
Cela peut être décompressé en appuyant sur la commande squid, mais cette fois, nous allons suivre la procédure créée à l'avance.
terminal
pip freeze > requirements.txt
Entrez ce qui suit dans requirements.txt.
certifi==2020.11.8
chardet==3.0.4
click==7.1.2
Flask==1.1.2
future==0.18.2
gunicorn==20.0.4
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.2
line-bot-sdk==1.17.0
MarkupSafe==1.1.1
requests==2.25.0
urllib3==1.26.2
Werkzeug==1.0.1
requirements.txt consiste à écrire la bibliothèque python à l'avance afin qu'elle puisse être installée.
pip install gunicorn flask line-bot-sdk
Vous n'avez pas besoin de ce que vous n'êtes pas allé.
terminal
touch requirements.txt
Ensuite, tapez la commande suivante pour lancer le conteneur Docker.
terminal
docker-compose build
docker-compose up -d
Accédez maintenant à localhost: 5000 et vérifiez que bonjour! S'affiche.
Nous vous recommandons d'enregistrer heroku à l'avance. Tout d'abord, connectez-vous à heroku.
terminal
heroku login
heroku container:login
Ensuite, créez une application dans heroku.
Vous pouvez utiliser heroku create comme nom de l'application que vous souhaitez ajouter
.
Cette fois, je lui ai donné un nom d'application approprié de bijobijo.
Si vous obtenez une erreur ici, vous devez la renommer car il s'agit d'un nom d'application existant.
heroku create bijobijo
Ensuite, il est nécessaire de lier le git local et le git distant. La liaison est possible avec la commande suivante.
terminal
heroku git:remote -un nom d'application
prochain
heroku config: set Nom de la variable d'environnement que vous voulez ajouter =" Chaîne de caractères de la variable d'environnement à définir "--app Nom de votre application
Vous pouvez définir la variable d'environnement dans heroku en faisant.
Par conséquent, définissez les paramètres suivants.
heroku config:set YOUR_CHANNEL_SECRET="Chaîne secrète de canal" --app le nom de votre application
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="Chaîne de jeton d'accès" --app le nom de votre application
En ce qui concerne la configuration, vous pouvez également vérifier les paramètres de configuration à partir de votre propre application sur le site d'heroku comme suit.
La variable d'environnement définie est
heroku config
Vous pouvez également vérifier avec.
Maintenant que les variables d'environnement ont été définies, nous les téléchargerons.
Tout le monde facilement
heroku container:push web
Je pensais que c'était le nom de docker-compose.yml
heroku container:push app
Mais ça n'a pas bien commencé.
Lorsque je cherchais quelque chose, la réponse a été écrite dans l'article suivant.
Container Registry & Runtime (Docker Deploys)
heroku container:push <process-type>
To push multiple images, rename your Dockerfiles using Dockerfile.
:
En d'autres termes, si vous le nommez Dockerfile.web, vous pouvez le démarrer.
Réécrivez immédiatement le Dockerfile dans Dockerfile.web et appuyez sur les commandes suivantes dans l'ordre.
terminal
heroku container:push web
heroku container:release web
L'application est maintenant disponible.
Si vous appuyez sur la commande suivante ici et passez à la page qui dit bonjour!, C'est ok.
terminal
heroku open
Vous pouvez vérifier le conteneur qui s'exécute réellement à partir de Resources à partir de votre propre application à partir du fonctionnaire heroku. Si c'est le cas, vous pouvez voir que le Web est en cours d'exécution.
Enfin, passez à votre propre chaîne depuis LINE Developer et depuis l'API de messagerie
Sélectionnez les paramètres du Webhook,
https: // {nom de l'application} .herokuapp.com / callback
Si vous définissez, vous avez terminé.
Notez également que linebot ne fonctionnera que si vous activez Utiliser le webhook
comme indiqué ci-dessous.
Vous pouvez désormais échanger des messages avec de belles personnes tous les jours! !!
Il semble qu'un message fixe arrive, alors je vais m'en occuper.
Sélectionnez "Messages de relecture automatique" dans l'API de messagerie.
Paramètres de réponse → Paramètres avancés → Message de réponse → Paramètres du message de réponse → Désactivé Cela sera résolu.
À bientôt,
Vous êtes bien rentré.
Mon cœur est vide.
Il semble que les affaires peuvent être automatisées en utilisant linebot, alors j'aimerais continuer à relever des défis.
Vue d'ensemble
C'est facile même pour les débutants! Créons un bot de chat LINE avec Python!
** Comment définir l'environnement dans heroku **
J'ai créé un LINE BOT avec Python + Heroku
** Gestion des exigences.txt **
Consultez la liste des packages installés avec Python, pip list / freeze
** pousser docker vers heroku **
Container Registry & Runtime ↑ C'était le plus utile lors de la sortie.
[Local Development with Docker Compose] (https://devcenter.heroku.com/articles/local-development-with-docker-compose) Les débutants en Python créeront LINEbot avec Flask (édition Heroku + ClearDB)
Recommended Posts