Ich habe den Artikel über die Verwendung von LINE Bot mit Django zusammengefasst, weil er ein wenig recherchiert zu sein schien oder auch wenn er alt war.
Vorerst werde ich einen Umu-Return-Bot erstellen, der so wie er ist auf den Text antwortet, der als Einführung in LINE Bot gesendet wurde.
Der Artikel hier verwendet das SDK, aber ich bin ein Python-Anfänger und kann mit Python nicht einmal HTTP-Anfragen stellen, also mache ich es selbst für das Training. Ich würde es gerne machen.
Ich bin ein Django-Anfänger mit weniger als einer Woche Django-Geschichte. Da die Sprache, die ich normalerweise verwende, funktionales Elixier ist, ist die Implementierung möglicherweise nicht objektorientiert.
Wenn Sie Ratschläge dazu haben, was falsch ist oder was Sie verbessern müssen, hinterlassen Sie bitte einen Kommentar.
Obwohl es mein früherer Artikel ist, werde ich auf die folgenden Artikel als Ganzes verweisen. Verwenden der LINE Messaging-API mit Elixir / Phoenix
↓ Registrieren Sie sich von hier aus https://developers.line.biz/ja/
Obwohl es sich in verschiedener Hinsicht von der aktuellen Situation unterscheidet, werden wir den Kanal anhand des folgenden Artikels registrieren https://qiita.com/nkjm/items/38808bbc97d6927837cd
Erstellen Sie ein Projekt nach Ihren Wünschen.
$ django-admin startproject qiita_linebot
$ cd qiita_linebot/
$ python manage.py startapp qiita_linebot_ai
qiita_linebot_ai/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='callback'),
]
Reflektieren Sie in qiita_linebot / urls.py
.
qiita_linebot/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('qiita_linebot_ai/', include('qiita_linebot_ai.urls')), #add
path('admin/', admin.site.urls),
]
Ich bin nicht gut im objektorientierten Denken, weil ich normalerweise nur Elixir verwende, aber ich denke, es ist besser, (?) Zu kapseln. Erstellen Sie in einem solchen Fall eine LineMessage-Klasse und erstellen Sie eine Antwortmethode darin. Machen.
Senden Sie eine HTTP-Anforderung an die LINE Messaging-API, indem Sie auf den folgenden Artikel verweisen Urllib.request ist für Python-HTTP-Client ausreichend
line_message.py
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
import urllib.request
import json
REPLY_ENDPOINT_URL = "https://api.line.me/v2/bot/message/reply"
ACCESSTOKEN = 'Ihr Zugriffstoken' #Messaging-API-Einstellungen|>Zugriffstoken vom Kanalzugriffstoken abrufen
HEADER = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + ACCESSTOKEN
}
class LineMessage():
def __init__(self, messages):
self.messages = messages
def reply(self, reply_token):
body = {
'replyToken': reply_token,
'messages': self.messages
}
print(body)
req = urllib.request.Request(REPLY_ENDPOINT_URL, json.dumps(body).encode(), HEADER)
try:
with urllib.request.urlopen(req) as res:
body = res.read()
except urllib.error.HTTPError as err:
print(err)
except urllib.error.URLError as err:
print(err.reason)
Hier nimmt die an die Methode "reply" übergebene "Nachricht" das folgende Format an.
{
type: "text",
text: "hogehoge" #Dieses Mal wird die empfangene Nachricht so zurückgegeben, wie sie ist
}
Schau dir das an "Sie müssen nur die zu sendende Nachricht (" hogehoge "oben) als Argument nehmen." Wie Sie vielleicht denken, unterstützt die LINE Messaging-API auch das gleichzeitige Senden mehrerer Nachrichten. Zusätzlich zu Text gibt es auch "Typ".
Ich habe darüber nachgedacht, die Klasse weiter aufzuteilen, aber dieses Mal werde ich es vorerst auf diese Weise implementieren.
util/message.creater.py
def create_single_text_message(message):
test_message = [
{
'type': 'text',
'text': message
}
]
return test_message
Erstellen Sie ein Modul message_creater
für die in LineMessage.reply
verwendete Argumentnachricht.
view.py
from django.shortcuts import render
from django.http import HttpResponse
import json
from django.views.decorators.csrf import csrf_exempt
from utils import message_creater
from qiita_linebot_ai.line_message import LineMessage
@csrf_exempt
def index(request):
if request.method == 'POST':
request = json.loads(request.body.decode('utf-8'))
events = request['events']
for event in events:
message = event['message']
reply_token = event['replyToken']
line_message = LineMessage(message_creater.create_single_text_message(message['text']))
line_message.reply(reply_token)
return HttpResponse("ok")
Damit ist die Implementierung abgeschlossen.
Ich werde es tatsächlich versuchen. Da localhost nicht in der Webhook-URL angegeben werden kann, wird ngrok verwendet.
Bitte installieren Sie ngrok gemäß dem folgenden Artikel. ngrok ist zu bequem
Einmal installiert
$ ngrok http 8000
Dann
Sie können es so starten. Bitte ersetzen Sie die danach angezeigte ngrok-URL durch Ihre eigene.
Messaging-API-Einstellungen|>Webhook-Einstellungen|>WebhookURL Von Geben Sie "https: // ecdb2a20.ngrok.io / qiita_linebot_ai /" ein.
Fügen Sie ALLOWED_HOSTS wie folgt ngrok hinzu.
settings.py
ALLOWED_HOSTS = ["ecdb2a20.ngrok.io"]
Du bist bereit zu gehen!
Wenn Sie den Server starten und die folgende Meldung erhalten, sind Sie erfolgreich!
Recommended Posts