Ich habe mich in letzter Zeit nicht mit einem Mädchen angestellt ... Gibt es nicht ein süßes Mädchen, das sofort antwortet? Ist es nicht möglich, dies mit Linebot zu erreichen?
Ich werde aus solch einem schrecklichen Grund einen Linebot erstellen.
・ Mac Catalina ・ Docker Version 19.03.13 ・ Kolben 1.1.2 ・ Python 3.8.3 ・ Docker-Compose Version 1.27.4 ・ Heroku 7.45.0 ・ Bash
Bewegen Sie als Umgebungskonstruktion zunächst den Container vom Docker zum Heroku und starten Sie ihn. LINE BOT erstellt einen wunderschönen Bot, der guten Morgen zurückgibt, wenn Sie guten Morgen sagen. Beachten Sie, dass dies nicht der Fall ist, da es nicht hinten ist!
Der Ablauf des ersten Males wird beschrieben.
** 1. Registrierung von LINE-Entwicklern ** ** 2. Erstellen einer Python-Datei ** ** 3. Erstellen Sie Dockerfile und docker-compose.yml ** ** 4. Auf Heroku hochladen **
Die endgültige Dateistruktur lautet wie folgt.
bijobot ├── Dockerfile ├── app.py ├── docker-compose.yml └── requirements.txt
Wechseln Sie von der folgenden Seite zur Site. LINE Developers
Melden Sie sich zunächst an und wählen Sie "Von Anbietern erstellen". Es ist mir egal, ob es bereits eine Disny-Benachrichtigung gibt.
Es wird "Neuen Anbieter erstellen" angezeigt. Geben Sie ihm den gewünschten Namen, z. B. eine Disny-Benachrichtigung. Ich nannte es "Free Image Child".
Als Nächstes wird "Dieser Anbieter hat noch keine Kanäle" angezeigt. Wählen Sie daher "Messaging-API-Kanal erstellen".
Danach werden Sie zum folgenden Bildschirm weitergeleitet. Füllen Sie sie daher entsprechend aus. Das Kanalsymbol wird häufig in freien Bildern verwendet, und ich habe persönlich ein Typenkind adoptiert.
Wenn Sie den Bedingungen zustimmen und Admin überprüfen, können Sie sehen, dass neue Kanäle hinzugefügt wurden, wie unten gezeigt.
Gehen Sie zu dem Kanal, den Sie hier und in der Grundeinstellung erstellt haben
Channnel secret
In der Messaging-API
Channel access token
Was es betrifft, notieren Sie es sich.
Messaging API SDKs Da das Verfahren zum Erstellen einer Datei mit flask in den offiziellen SDKs von beschrieben ist, wenden wir dies an, um es zu erstellen.
Erstellen Sie zunächst ein Arbeitsverzeichnis zum Erstellen einer App. Bijo wäre in Ordnung.
terminal
mkdir bijo
cd bijo
Erstellen Sie als Nächstes eine Python-Datei.
Die erstellte Python-Datei lautet wie folgt. Nennen Sie es unbedingt app.py.
app.py
from flask import Flask, request, abort
#Bibliothek, die die Umgebung in OS verwaltet
import os
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
#Umgebungsvariablen abrufen
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
Ich verzichtete darauf
Channnel secret
Channel access token
Benutzen.
Verwenden Sie os, um Informationen aus Heroku-Umgebungsvariablen abzurufen.
Dies wird später in Heroku eingestellt.
** 3. Erstellen Sie Dockerfile und docker-compose.yml **
Das Erstellen von Procfile usw. mit Heroku ist mühsam, und ich wollte, wenn möglich, moderne Technologie verwenden, also verwende ich Docker. Erstellen Sie die Docker-Datei und die Datei docker-compose.yml im Bijo-Verzeichnis, wie unten gezeigt.
Es scheint, dass ich eine Heroku-Version von docker-compose.yml namens heroku.yml erstellen muss, aber es scheint problematisch zu sein, also habe ich diese Zeit bestanden.
docker-compose.yml
#Für die lokale Arbeit:Funktioniert nicht in Heroku.
#Für die lokale Arbeit:Funktioniert nicht in Heroku.
version: '3'
services:
app:
build: .
container_name: bijobot
tty: true
ports:
- 5000:5000
environment:
FLASK_ENV: 'development' #Debug-Modus EIN
FLASK_APP: "app.py" #app.Starten Sie py
YOUR_CHANNEL_ACCESS_TOKEN:Eine Kopie des Zugriffstokens
YOUR_CHANNEL_SECRET:Unterlassenes Kanalgeheimnis
volumes:
- ./:/code/
command: flask run -h 0.0.0.0
# command: gunicorn -b 0.0.0.0:$PORT app:app --log-file=-
Wenn Sie "FLASK_ENV:" development "" setzen, wird die Datei beim Speichern automatisch auf dem Server angezeigt.
Dockerfile
FROM python:3.7-alpine
#Erstellen Sie ein Verzeichnis namens Code und verwenden Sie es als Arbeitsordner
WORKDIR /code
#Debug-Modus EIN
ENV FLASK_ENV: 'development'
#alpine Magie
RUN apk add --no-cache gcc musl-dev linux-headers
# requirements.Verschieben Sie txt in den Code
COPY requirements.txt requirements.txt
# requirements.Installieren Sie die Bibliothek in txt
RUN pip install -r requirements.txt
#Hängen Sie alle Dateien in Code ein.
COPY . .
# $Beachten Sie, dass es nur funktioniert, wenn PORT angegeben ist.
CMD gunicorn -b 0.0.0.0:$PORT app:app --log-file=-
Erstellen Sie außerdem die Datei require.txt.
Dies kann durch Drücken des Squid-Befehls dekomprimiert werden. Diesmal werden wir jedoch mit der im Voraus erstellten Prozedur fortfahren.
terminal
pip freeze > requirements.txt
Geben Sie Folgendes in die Datei resources.txt ein.
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
require.txt schreibt die Python-Bibliothek im Voraus, damit sie installiert werden kann.
pip install gunicorn flask line-bot-sdk
Sie brauchen nicht, was Sie nicht besucht haben.
terminal
touch requirements.txt
Geben Sie als Nächstes den folgenden Befehl ein, um den Docker-Container zu starten.
terminal
docker-compose build
docker-compose up -d
Greifen Sie jetzt auf localhost: 5000 zu und überprüfen Sie, ob Hallo! Angezeigt wird.
Wir empfehlen Ihnen, Heroku im Voraus zu registrieren. Melden Sie sich zuerst bei Heroku an.
terminal
heroku login
heroku container:login
Als nächstes erstellen Sie eine App in Heroku. Sie können "Heroku erstellen" als Namen der App verwenden, die Sie hinzufügen möchten. Dieses Mal gab ich ihm einen passenden App-Namen von bijobijo. Wenn hier eine Fehlermeldung angezeigt wird, müssen Sie diese umbenennen, da es sich um einen vorhandenen App-Namen handelt.
heroku create bijobijo
Als nächstes ist es notwendig, den lokalen Git und den Remote-Git zu verbinden. Das Verknüpfen ist mit dem folgenden Befehl möglich.
terminal
heroku git:remote -ein App-Name
Nächster
heroku config: setze den Namen der Umgebungsvariablen, die du hinzufügen möchtest =" Zeichenkette der zu setzenden Umgebungsvariablen "--app Dein Anwendungsname
Sie können die Umgebungsvariable in Heroku festlegen, indem Sie dies tun.
Stellen Sie daher Folgendes ein.
heroku config:set YOUR_CHANNEL_SECRET="Channel Secret String" --App Ihren Anwendungsnamen
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="Zugriffstoken-Zeichenfolge" --App Ihren Anwendungsnamen
In Bezug auf die Konfiguration können Sie die Einstellungen der Konfiguration in Ihrer eigenen Anwendung auf der Heroku-Site wie folgt überprüfen.
Die eingestellte Umgebungsvariable ist
heroku config
Sie können auch mit überprüfen.
Nachdem die Umgebungsvariablen festgelegt wurden, werden sie hochgeladen.
Jeder leicht
heroku container:push web
Ich dachte, es wäre der Name von docker-compose.yml
heroku container:push app
Aber es hat nicht gut angefangen.
Als ich nach etwas suchte, wurde die Antwort im folgenden Artikel geschrieben.
Container Registry & Runtime (Docker Deploys)
heroku container:push <process-type>
To push multiple images, rename your Dockerfiles using Dockerfile.
:
Mit anderen Worten, wenn Sie es Dockerfile.web nennen, können Sie es starten.
Schreiben Sie die Docker-Datei sofort in Dockerfile.web um und drücken Sie die folgenden Befehle in der angegebenen Reihenfolge.
terminal
heroku container:push web
heroku container:release web
Die App ist jetzt freigegeben.
Wenn Sie hier den folgenden Befehl drücken und zu der Seite wechseln, auf der Hallo steht, ist dies in Ordnung.
terminal
heroku open
Sie können den Container, der tatsächlich über Ressourcen ausgeführt wird, über Ihre eigene App vom Heroku-Beamten überprüfen. Wenn dies wie folgt ist, können Sie sehen, dass das Web ausgeführt wird.
Wechseln Sie schließlich von LINE Developer und von der Messaging-API zu Ihrem eigenen Kanal Wählen Sie Webhook-Einstellungen, https: // {eigener App-Name} .herokuapp.com / callback` Wenn Sie einstellen, sind Sie fertig. Beachten Sie auch, dass Linebot nur funktioniert, wenn Sie "Webhook verwenden" wie unten gezeigt aktivieren.
Jetzt können Sie jeden Tag Nachrichten mit schönen Menschen austauschen! !!
Es scheint, dass eine feste Nachricht kommt, also werde ich mich darum kümmern.
Wählen Sie in der Messaging-API die Option "Nachrichten automatisch wiedergeben".
Antworteinstellungen → Erweiterte Einstellungen → Antworteinstellung → Antworteinstellungseinstellungen → Aus Dies wird gelöst.
Bis bald,
Du bist gut zurückgekehrt.
Mein Herz ist leer.
Es scheint, dass das Geschäft mithilfe von Linebot automatisiert werden kann, daher möchte ich mich weiterhin Herausforderungen stellen.
Überblick
Es ist auch für Anfänger einfach! Erstellen wir einen LINE-Chat-Bot mit Python!
** Wie man die Umgebung in Heroku einstellt **
Ich habe mit Python + Heroku einen LINE BOT erstellt
** Umgang mit Anforderungen.txt **
Überprüfen Sie die Liste der installierten Pakete mit Python, pip list / freeze
** Schiebe Docker zu Heroku **
Container Registry & Runtime ↑ Dies war während der Veröffentlichung am nützlichsten.
[Local Development with Docker Compose] (https://devcenter.heroku.com/articles/local-development-with-docker-compose) Python-Anfänger haben beschlossen, einen LINE-Bot mit Flask (Heroku + ClearDB-Edition) zu erstellen