J'ai résumé l'article sur l'utilisation de LINE Bot avec Django car il semblait être un peu recherché, voire même s'il était ancien.
Pour le moment, je vais créer un Bot Umu-return qui répondra au texte envoyé en guise d'introduction à LINE Bot.
L'article ici utilise le SDK, mais je suis un débutant en Python et je ne peux même pas faire de requêtes HTTP avec Python, donc je le ferai moi-même pour la formation. J'aimerais le faire.
Je suis un débutant Django avec moins d'une semaine d'histoire Django. De plus, comme le langage que j'utilise habituellement est Elixir fonctionnel, l'implémentation peut ne pas être orientée objet.
Si vous avez des conseils sur ce qui ne va pas ou ce que vous devez améliorer, veuillez laisser un commentaire.
Bien que ce soit mon article précédent, je me référerai aux articles suivants dans leur ensemble. Utilisation de l'API de messagerie LINE avec Elixir / Phoenix
↓ Inscrivez-vous d'ici https://developers.line.biz/ja/
Bien qu'elle diffère de la situation actuelle de différentes manières, nous enregistrerons la chaîne en se référant à l'article suivant https://qiita.com/nkjm/items/38808bbc97d6927837cd
Créez un projet comme vous le souhaitez.
$ 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'),
]
Réfléchissez dans 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),
]
Je ne suis pas doué pour la réflexion orientée objet parce que j'utilise généralement uniquement Elixir, mais je pense qu'il est préférable d'encapsuler (?) Dans un tel cas, créez une classe LineMessage
et créez-y une méthode de réponse. Faire.
Envoyez une requête HTTP à l'API de messagerie LINE en vous référant à l'article suivant Urllib.request est suffisant pour le client HTTP Python
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 = 'Votre jeton d'accès' #Paramètres de l'API de messagerie|>Obtenir le jeton d'accès à partir du jeton d'accès au canal
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)
Ici, le message
passé à la méthode response
prend le format suivant.
{
type: "text",
text: "hogehoge" #Cette fois, le message reçu est renvoyé tel quel
}
Regarde ça "Vous n'avez qu'à prendre le message à envoyer (" hogehoge "dans ce qui précède) comme argument." Comme vous pouvez le penser, l'API de messagerie LINE prend également en charge l'envoi de plusieurs messages en même temps. De plus, «type» existe en plus du texte.
J'ai pensé à diviser davantage la classe, mais cette fois je vais l'implémenter de cette façon pour le moment.
util/message.creater.py
def create_single_text_message(message):
test_message = [
{
'type': 'text',
'text': message
}
]
return test_message
Créez un module message_creater
pour l'argument message utilisé dans LineMessage.reply
.
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")
Ceci termine la mise en œuvre.
Je vais vraiment l'essayer. Puisque localhost ne peut pas être spécifié dans l'URL du Webhook, ngrok est utilisé.
Veuillez installer ngrok en vous référant à l'article suivant. ngrok est trop pratique
Une fois installé
$ ngrok http 8000
Puis
Vous pouvez le démarrer comme ça. Veuillez remplacer l'URL ngrok qui apparaît après cela par la vôtre, le cas échéant.
Paramètres de l'API de messagerie|>Paramètres du webhook|>WebhookURL
De
Entrez https: // ecdb2a20.ngrok.io / qiita_linebot_ai /
.
Ajoutez ngrok à ALLOWED_HOSTS comme suit.
settings.py
ALLOWED_HOSTS = ["ecdb2a20.ngrok.io"]
Vous êtes prêt à partir!
Si vous démarrez le serveur et obtenez le message suivant, vous avez réussi!
Recommended Posts