· Mac ・ Python
Erstellen Sie ein Verzeichnis test_linebot auf Ihrem Desktop. Erstellen Sie eine virtuelle Umgebung im Verzeichnis und starten Sie sie.
python3 -m venv .
source bin/activate
Die endgültige Verzeichnisstruktur lautet wie folgt
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__)
#LINE Entwickler greifen auf Token und Channel Secret zu, die in der Heroku-Umgebungsvariablen festgelegt sind
#Code zu bekommen
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, um zu überprüfen, ob die Bereitstellung für Heroku erfolgreich war
@app.route("/")
def hello_world():
return "hello world!"
#Geben Sie eine URL für den Webhook von LINE Developers an, damit der Webhook ein Ereignis an die URL sendet
@app.route("/callback", methods=['POST'])
def callback():
#Rufen Sie den Wert für die Signaturüberprüfung aus dem Anforderungsheader ab
signature = request.headers['X-Line-Signature']
#Anfragetext abrufen
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
#Überprüfen Sie die Signatur und rufen Sie die im Handle definierte Funktion auf, wenn kein Problem vorliegt
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
#Im Folgenden wird beschrieben, wie das vom Webhook gesendete Ereignis behandelt wird
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
#Einstellung der Portnummer
if __name__ == "__main__":
port = int(os.getenv("PORT", 5000))
app.run(host="0.0.0.0", port=port)
try:〜 Eine Beschreibung des Webhooks. Ein Webhook ist ein Prozess, der ein Ereignis an einen Server sendet, der das Ereignis verarbeitet, wenn ein Ereignis (Senden einer Nachricht, Hinzufügen eines Freundes usw.) auftritt (eine URL muss im Webhook von LINE Developers angegeben werden, um es an den Server zu senden).
@handler.add(MessageEvent, message=TextMessage) Geben Sie den Ereignistyp im ersten Argument ein (diesmal möchte ich antworten, wenn eine Nachricht gesendet wird, also habe ich MessageEvent ausgewählt). Im zweiten Argument möchte ich den Nachrichtentyp eingeben (diesmal möchte ich Text zurückgeben). Daher message = TextMessage).
def handle_message(event): Die Ereignisverarbeitungsfunktion handle_message wird aufgerufen, und der Wert des zweiten Arguments von reply_message wird als LINE-Antwort zurückgegeben. Verwenden Sie die Funktion reply_message von lineb_bot_api, um sie als Zeilennachricht zurückzugeben. Das erste Argument event.reply_token, das reply_message ist, enthält reply_token. Dies kann vom Webhook-Objekt abgerufen werden und gibt an, auf welches Ereignis geantwortet werden soll. Bedeutet das Antwort-Token für ein Ereignis. Fügen Sie im zweiten Argument eine Funktion namens TextSendMessage für die in linebot.models definierte Antwort ein, und diese Funktion fügt die zurückzugebende Nachricht in das Argument ein. Darüber hinaus speichert event.message.text die von LINE gesendete Nachricht. Wenn beispielsweise "Guten Morgen" gesendet wird, wird event.message.text = "Guten Morgen" gespeichert. Wenn TextSendMessage (text = 'Guten Morgen')), geben alle Antworten "Guten Morgen" zurück. Der Inhalt der Veranstaltung ist übrigens wie folgt.
{
"message": {
"id": "***************",
"text": "Guten Morgen",
"type": "text"
},
"replyToken": "***********************",
"source": {
"type": "user",
"userId": "************************"
},
"timestamp": *********************,
"type": "message"
}
port = int(os.getenv("PORT", 5000)) Heroku scheint Portnummern dynamisch zuzuweisen. Verwenden Sie daher os.getenv, um Folgendes zu tun: os.getenv ("PORT", 5000) versucht, die Umgebungsvariable 'PORT' zu erfassen. Wenn sie erfasst werden kann, wird der erfasste Wert zurückgegeben. Wenn er nicht erfasst werden kann, wird 5000 zurückgegeben. 5000 ist für die Arbeit in einer lokalen Umgebung vorgesehen.
#Einstellung der Portnummer
if __name__ == "__main__":
port = int(os.getenv("PORT", 5000))
app.run(host="0.0.0.0", port=port)
Greifen Sie auf LINE Developers zu und erstellen Sie nach der Registrierung einen "Anbieter", der den Dienstanbieter darstellt. Erstellen Sie einen neuen Kanal innerhalb des Anbieters. Wählen Sie als Kanaltyp die Nachrichten-API aus.
Melden Sie sich bei Heroku an und erstellen Sie eine App. Dieses Mal habe ich es testlinebot0319 genannt.
heroku login
heroku create testlinebot0319
Initialisieren
git init
Verknüpfe Herokus App mit Git,
heroku git:remote -a testlinebot0319
Legen Sie die "Zugriffstoken-Zeichenfolge" und "Kanal-Geheimzeichenfolge" der Zeilenentwickler in den Heroku-Umgebungsvariablen fest. Beispiel: heroku config: set YOUR_CHANNEL_ACCESS_TOKEN = "Zeichenfolge für Kanalzugriffstoken" -a (App-Name).
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="Kanalzugriffstoken-Zeichenfolge" -a testlinebot0319
heroku config:set YOUR_CHANNEL_SECRET="Geheime Zeichenfolge des Kanals" -a testlinebot0319
Überprüfen Sie, ob die Umgebungsvariable in Heroku richtig eingestellt ist.
heroku config
Erstellen Sie Procfile, runtime.txt, require.txt.
Erstellen Sie runtime.txt, nachdem Sie Ihre eigene Python-Version überprüft haben.
.txt:runtime.txt
python-3.8.0
Procfile beschreibt Folgendes.
Prockfile
web: python main.py
Beschreiben Sie die Datei "resources.txt", indem Sie im Terminal Folgendes eingeben.
pip freeze > requirements.txt
Initialisieren Sie git erneut, ordnen Sie es zu, fügen Sie es hinzu und schreiben Sie es zuerst mit dem Namen fest. Schieben Sie schließlich zu Heroku.
git init
heroku git:remote -a testlinebot0319
git add .
git commit -m'the-first'
git push heroku master
Heroku offen,
heroku open
Erfolg, wenn im Browser Folgendes angezeigt wird.
Legen Sie den Namen Ihrer Heroku-App im Feld LINE Developers Webhook wie unten gezeigt fest. App-Name auf Heroku = testlinebot0319
Aktivieren Sie zu diesem Zeitpunkt die Verwendung von Webhook. Wenn Sie den obigen QR-Code von LINE Developers lesen und sich als Freund registrieren, ist der Antrag auf Rückgabe von Papageien abgeschlossen. Wenn LINE BOT nicht funktioniert, z. B. wenn der Papagei nicht zurückgegeben wird, kann ich den Webhook wiederholt ein- und ausschalten (in meinem Fall hat das funktioniert).
Lassen Sie uns einen LINE BOT erstellen, der in einer Stunde auf Wikipedia gesucht werden kann! LINE BOT mit Python + Flask + Heroku [Python-Anfänger! - Papagei mit LINE Bot zurückgeben-]
Recommended Posts