【Python】DjangoでLINEBot構築する方法と実例紹介

Django

(最終更新月:2023年1月)

✔このような方へ向けて書かれた記事となります

「DjangoでLINEBotを構築したい」

「ローカル環境で試せるものってなにかあるのかな?」

「実例があるとわかりやすいんだけど。」

✔当記事を通じてお伝えすること

  • LINEボットを作る手順
  • LINEアカウントでの事前準備
  • Python・DjangoでLINEボットを作る方法

当記事では、LINEボットを作る手順やコードはもちろん、実際のボット例を動画でご覧いただけます。

ぜひ最後までご覧ください。

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

以下のITCブログ公式アカウントでは、ボットにより、当ブログの記事検索が可能です。

ぜひお試しのうえ、当記事をご覧ください。

友だち追加

✔LINEボット紹介ショートムービー

LINEボットを作るための手順

当記事でLINEボットを作るための手順は以下のとおりです。

  • LINEアカウントでの事前準備
  • Djangoで開発するための環境作りと設定
  • DjangoでLINEBotを作る方法
  • Djangoアプリの公開

LINEアカウントでの事前準備

LINEアカウントで事前におこなっておくことは以下のとおり。

  • LINE公式アカウントの作成
  • LINE Developersサイトの設定
  • LINE公式アカウントの設定

LINE公式アカウントの作成

LINEの公式アカウントを作成します。

以下の2通りから適したものを選びましょう。

  • 個人LINEアカウントを使う
  • Eメールアドレスで登録する

どちらでもお好きな方をお使いください。

以下のページより作成可能です。

LINE Business ID

LINE Developersサイトの設定

LINE公式アカウントができたら、LINE Developersサイトへログインし、以下の設定をおこないましょう。

  • プロバイダ・チャネルの作成
  • チャネル > Messaging API設定

プロバイダ・チャネルの作成

プロバイダーとは開発者といえるでしょう。

その開発者がチャネルを持ち、チャネルと構築したボットを紐付けることになります。

まずはプロバイダーを作り、その中にチャネルを作ってください。

チャネル > Messaging API設定

Messaging API設定でおこなうことは2つ。

  • Webhookの利用:ON
  • チャネルアクセストークン(長期)の発行

チャネルアクセストークンは以下の場所で発行できます。

アプリの完成後、Webhook URLにボットのURLを入れることになります。

のちほどおこないましょう。

LINE公式アカウントの設定

Developerサイトの設定が終わったら、LINE公式アカウントへ戻ります。

Line Developersサイトで作成したチャネル名と同じアカウントが見つかるはずです。

そのアカウントの中で以下の設定をおこないましょう。

  • 設定 > 応答設定
  • 設定 > Messaging API

設定 > 応答設定

Webhookの設定をONにします。

設定 > Messaging API

こちらのURLはのちほど入力するので、覚えておきましょう。

Djangoでアプリを立ち上げる

PythonをベースとしたDjangoプロジェクトを立ち上げて準備しましょう。

  • 仮想環境を準備
  • 必要なモジュールをインポート
  • 初期設定

仮想環境を準備

プロジェクトのフォルダを決めたら、仮想環境を準備します。

ターミナルで以下のコマンドを実行します。

virtualenv -p python3 venv

Djangoプロジェクトのための仮想環境立ち上げを詳しく知りたい方はこちら。

必要なライブラリをインポート

仮想環境内で必要なライブラリをインポートしましょう。

pip install ライブラリ名

最低限必要なものは以下のとおりです。

  • Django
  • djangorestframework
  • requests
  • line-bot-sdk

初期設定

プロジェクト・アプリを立ち上げて初期設定をしましょう。

私はlinebotapiという名前のアプリを以下のようにして立ち上げて、設定をおこないました。

django-admin startproject main .

詳しい設定方法がわからない方はこちらの通りにおこないましょう。

✔Djangoのインストールからプロジェクトを立ち上げる方法

✔Djangoの初期設定

✔アプリの立ち上げ方

LINEBotの構築方法

アプリの立ち上げが完了したら、LINEボットを作っていきましょう。

以下のファイルを設定していきます。

  • bot_base.py
  • bot_messages.py
  • views.py
  • urls.py

ページを表示するわけではありませんので、HTMLテンプレートは不要です。

bot_base.py

LINEメッセージを返すためのクラスを定義します。

メッセージオブジェクトを受け取り、返信をする機能が付いています。

import urllib.request
import json, requests

REPLY_ENDPOINT_URL = "https://api.line.me/v2/bot/message/reply"
ACCESSTOKEN = "発行したアクセストークン"
HEADER = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + ACCESSTOKEN
}

class LineBotMSG():
    def __init__(self, messages):
        self.messages = messages

    def reply(self, reply_token):
        body = {
            'replyToken': reply_token,
            'messages': self.messages
        }
        req = urllib.request.Request(REPLY_ENDPOINT_URL, json.dumps(body).encode(), HEADER)

アクセストークンをコピペして入力してください。

bot_messages.py

シンプルなテキストを返す関数を定義します。

def create_message(msg):
    message = [
                {
                    'type': 'text',
                    'text': msg
                }
            ]
    return message

私が作成したアプリではカルーセルテンプレートを使用しているので以下のようになりました。

def create_carousel():
    msg = [
            {
            "type": "template",
            "altText": "ITCブログの検索一覧",
            "template": {
                "type": "carousel",
                "columns": [
                    {
                        "thumbnailImageUrl": thumbnail_url,#画像用のURLを入れる
                        "imageBackgroundColor": "#FFFFFF",
                        "title": title_text, #タイトルのテキストを入れる
                        "text": "", #テキストを入れたい場合はこちら
                        "actions": [
                        {
                            "type": "uri",
                            "label": "記事を読む",
                            "uri": link_to,#リンクURL
                        }
                        ]
                    },
                    #forループで複数作ります
                ],
                "imageAspectRatio": "rectangle",
                "imageSize": "cover"
            }
        }
    ]
    return msg

今回はシンプルなテキストを返すアプリとして進めていきます。

views.py

Django REST FrameworkのAPIViewを使った方法をご紹介します。

from linebotapi.bot_base import LineBotMSG
from linebotapi.bot_messages import create_message
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt

from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status

class LineBotApiView(APIView):
    @method_decorator(csrf_exempt)
    def post(self, request, format=None):
        res = request.data
        response_text = {"text": "正常に検索されました。"} #レスポンスとして返す
        code = status.HTTP_200_OK #レスポンスのステータスコード
        if len(res['events']) > 0:
            data = res['events'][0] #リストの中に辞書がひとつ
            message_obj = data['message']
            text = message_obj.get('text')
            reply_token = data['replyToken']
            msg = create_message("テスト用ボットのテキスト")
      line_message = LineBotMSG(msg)
            line_message.reply(reply_token)
        else:
            response_text["text"] = "Webhookの確認" #確認時に返すレスポンス
        return Response(response_text, status=code)

urls.py

urls.pyのURLがWebhookで設定するURLになります。

from django.urls import path
from linebotapi.views import LineBotApiView
urlpatterns = [
    #...
    path("linebot/webhook/", LineBotApiView.as_view(), name="linebot-webhook"),
]

以下のようなURLを設定しました。

ドメイン/linebot/webhook/

ローカル環境で試せるngrokとその設定

構築したアプリをローカル環境で試すためにはngrokの設定が必要です。

なぜならlocalhostというドメインでは、LINE公式アカウントのWebhookが利用できないから。

  • ngrokとは
  • Webhookの設定

ngrokとは

ngrokとは、ローカルホストのアドレスに外部からアクセスできるようにしたネットワークツールです。

ngrokを設定することで、httpsに対応したアドレスも発行できます。

以下のサイトで無料登録できますので、まずは登録してサーバーを立ち上げましょう。

ngrok - Online in One Line
ngrok is the fastest way to put anything on the internet with a single command.

使用する際は、Djangoのポート番号8000で立ち上げましょう。

ngrok http 8000

Webhookの設定

ngrokの設定と立ち上げが完了したら、以下にてWebhookの設定をします。

  • LINE公式アカウント上
  • LINE Developers上

LINEBotを公開しよう

LINEBotを公開するには以下の手順が必要です。

  • 公開用のサーバーを準備する
  • サーバーの設定をする
  • 公開用サーバーにアプリをデプロイする

公開用のサーバーを準備する

DjangoなどのWebアプリは一般的なレンタルサーバーでは公開できません。

その理由は、Djangoアプリを公開するにはより高度な設定が必要になるからです。

例えば以下のようなVPSが使いやすいでしょう。

>>ConoHaVPS<<

もしくはこちらからお好きなものを選んで契約してください。

サーバーの設定をする

VPS上でWebサーバーを構築するには以下の記事を参考にしてください。

公開用サーバーにアプリをデプロイする

以下の記事を参考にアプリをサーバーにデプロイしましょう。

まとめ:Python・DjangoでLINEBotは作れる

当記事の内容をまとめます。

  • LINEBotを構築するにはアカウントと設定が必要
  • LINEBotはDjangoで構築できる
  • LINEBotを公開するにはVPSが必要になる

PythonをベースとしたDjangoフレームワークでのLINEBot構築方法をご紹介しました。

こちらのやり方を応用すればさまざまなLINEボットが作れます。

以下のITCブロブ公式LINEアカウントでは、当ブログ内の記事検索ができるボットとなっています。

最新の情報なども配信してますが、気軽にLINEから検索もできるので、ぜひお友だち登録をいただいて、試してみてください。

友だち追加

もしくはボット作成を依頼したいという方も、気軽にご連絡ください。

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

「Djangoで開発したアプリをWebで公開するにはどうするの?」

✔当ブログ掲載の記事

  • Djangoで作る日報アプリ開発
  • WebアプリをWeb上に公開する方法
  • Webアプリ開発に必要なそのほかの情報
【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCへ投げ銭をする

タイトルとURLをコピーしました