MENU
  • ホーム
  • サービス
  • 記事一覧
  • お問い合わせ
プログラミングやサーバー設定など様々な内容を紹介しています。
HIROTRONの部屋
  • ホーム
  • サービス
  • 記事一覧
  • お問い合わせ
HIROTRONの部屋
  • ホーム
  • サービス
  • 記事一覧
  • お問い合わせ
  1. ホーム
  2. Django
  3. Django ✕ LINE Messaging APIでWebhookの設定の方法を解説

Django ✕ LINE Messaging APIでWebhookの設定の方法を解説

2025 12/02
Django LINE_Messaging_API
2025年12月4日

Django ✕ LINE Messaging APIでWebhookの設定の方法を解説

LINE Bot開発の基本である、Webhookの設定について解説します。基本からの説明を行います。
あくまで一例ですので、参考程度に留めてください。

あわせて読みたい
Messaging APIリファレンス

目次

  前提

この記事では以下の技術を使います:

  • 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_TOKEN

LINEユーザーを管理するモデルを作成する

参考例ですので、この通りにしなくても構いませんが、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_TOKEN

webhookで受け取った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担当として様々システム構築などを行っています。今回、スタンプラリー作成でかなり大変だったということから、開発秘話…
Django LINE_Messaging_API
Django LINE LINE Messaging API
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
  • Django ✕ LINE Messaging APIでPush送信とBroadcast送信の関数を作成する
  • 例のRTX3080 20Gを中国から購入してみた。AI生成に最適だった!

この記事を書いた人

hiroto121022のアバター hiroto121022

医学生でありながら、さどんでこプロジェクトのITリーダーを務めるフルスタック開発者。LINE BotやGPS連携スタンプラリー、NFT販売サイトなどをすべて独学で開発。使用言語はPython、Typescript、Javascript。Django、Next.js、Reactなどのフレームワークを駆使し、サーバー構築・デプロイ・SSL対応まで一貫して担当。AIによるアートのアニメーション化にも取り組み、伝統文化とテクノロジーを融合させた新しい地域体験の創出に挑戦している。

関連記事

  • Django ✕ LINE Messaging APIでPush送信とBroadcast送信の関数を作成する
    2025年12月3日
  • Django ✕ LINE Messaging APIで画像やマップを送信する関数を作成する
    2025年12月1日
  • Django ✕ LINE Messaging APIでメッセージを送信する関数を作成する
    2025年12月1日
  • Django ✕ LINE Messaging APIで簡易的なユーザー登録を作成する②
    2025年11月30日
  • Django ✕ LINE Messaging APIで簡易的なユーザー登録を作成する①
    2025年11月30日
  • Django ✕ LINE Messaging APIでローディングアニメーションを出す方法
    2025年6月25日
  • 第4話:位置情報でスタンプ獲得!LIFFとLINE Botの連携の裏側
    2025年6月22日
  • 第3話:地図の中にスタンプ!?Google Maps × Django管理画面の作成
    2025年6月22日

コメント

コメントする コメントをキャンセル


hiroto121022
医学生でありながら、さどんでこプロジェクトのITリーダーを務めるフルスタック開発者。LINE BotやGPS連携スタンプラリー、NFT販売サイトなどをすべて独学で開発。使用言語はPython、Typescript、Javascript。Django、Next.js、Reactなどのフレームワークを駆使し、サーバー構築・デプロイ・SSL対応まで一貫して担当。
GitHub
新着記事
  • ISDBScannerをCATVに対応させてみた 録画鯖
  • Dockerで構築したWordPressの最大アップロードサイズを変更する。一時しのぎと永久的な対処を紹介
  • Docker Composeで依存関係に関係なく、コンテナを再構築する方法
  • VMwareのvdmkファイルを分割する方法
  • 例のRTX3080 20Gを中国から購入してみた。AI生成に最適だった!

© HIROTRONの部屋.

目次