Django ✕ LINE Messaging APIでWebhookの設定の方法を解説
LINE Bot開発の基本である、Webhookの設定について解説します。基本からの説明を行います。
あくまで一例ですので、参考程度に留めてください。
目次
前提
この記事では以下の技術を使います:
- Django
- LINE Messaging API
Webhookの設定方法
チャネルアクセストークンを設定する
.envファイルに記載した LINE_CHANNEL_ACCESS_TOKEN を、settings.py で読み込んで設定しておきます。
LINE_CHANNEL_ACCESS_TOKEN=チャネルアクセストークンLINE_CHANNEL_ACCESS_TOKEN = os.environ.get('LINE_CHANNEL_ACCESS_TOKEN')LINE_CHANNEL_ACCESS_TOKEN = settings.LINE_CHANNEL_ACCESS_TOKENLINEユーザーを管理するモデルを作成する
参考例ですので、この通りにしなくても構いませんが、LINEユーザーIDは必須項目です。
from django.db import models
class User(models.Model):
line_id = models.CharField(max_length=100, unique=True) # LINEユーザーID
name = models.CharField(max_length=100, blank=True) # ニックネーム
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.name or self.line_id}(登録日: {self.created_at.date()})"Webhookの関数の分岐処理について
必要なものをインポートします。
import json
import requests
from .models import User
from django.conf import settings
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
LINE_CHANNEL_ACCESS_TOKEN = settings.LINE_CHANNEL_ACCESS_TOKENwebhookで受け取ったjsonから、ユーザーID、リプライトークンを受け取り、event[“type”]の属性に応じて処理を分岐させます。postbackはユーザーに見せない形でデータなどを送信できる形式で、裏で処理する場合などに重宝します。
# LINEのWebhookを受け取る
@csrf_exempt
def line_webhook(request):
body = json.loads(request.body.decode("utf-8"))
for event in body.get("events", []):
reply_token = event["replyToken"]
line_id = event["source"]["userId"]
start_loading_animation(line_id)
# ユーザーが初めて登録した場合
if event["type"] == "follow":
user, created = User.objects.get_or_create(line_id=line_id)
# ユーザーが初めてユーザー登録した場合の処理
# Postback イベントの処理
elif event["type"] == "postback":
postback_data = event["postback"]["data"]
try:
user = User.objects.get(line_id=line_id)
except User.DoesNotExist:
user, created = User.objects.get_or_create(line_id=line_id)
continue
# Postbackイベントの処理
# ユーザーがメッセージを送信した場合
elif event["type"] == "message" and event["message"]["type"] == "text":
message = event["message"]["text"]
try:
user = User.objects.get(line_id=line_id)
except User.DoesNotExist:
user, created = User.objects.get_or_create(line_id=line_id)
continue
# メッセージ送信の処理
return JsonResponse({"status": "ok"})urls.pyを設定する
from django.urls import path
from . import views
urlpatterns = [
path('webhook/', views.line_webhook, name='line_webhook')
]webhookのURLをLINE Developerに登録する


これでwebhookの最低限の設定は完了です
あわせて読みたい


第1話:WordPressじゃ物足りない!?LINE✕鬼太鼓スタンプラリー開発のはじまり
私は、友達の紹介でさどんでこプロジェクトのIT担当として様々システム構築などを行っています。今回、スタンプラリー作成でかなり大変だったということから、開発秘話…

コメント