(最終更新月:2023年1月)
✔このような方へ向けて書かれた記事となります
「DjangoでLINEBotを構築したい」
「ローカル環境で試せるものってなにかあるのかな?」
「実例があるとわかりやすいんだけど。」
✔当記事を通じてお伝えすること
- LINEボットを作る手順
- LINEアカウントでの事前準備
- Python・DjangoでLINEボットを作る方法
当記事では、LINEボットを作る手順やコードはもちろん、実際のボット例を動画でご覧いただけます。
ぜひ最後までご覧ください。
✔LINEボット紹介ショートムービー
LINEボットを作るための手順
当記事でLINEボットを作るための手順は以下のとおりです。
- LINEアカウントでの事前準備
- Djangoで開発するための環境作りと設定
- DjangoでLINEBotを作る方法
- Djangoアプリの公開
LINEアカウントでの事前準備
LINEアカウントで事前におこなっておくことは以下のとおり。
- LINE公式アカウントの作成
- LINE Developersサイトの設定
- LINE公式アカウントの設定
LINE公式アカウントの作成
LINEの公式アカウントを作成します。
以下の2通りから適したものを選びましょう。
- 個人LINEアカウントを使う
- Eメールアドレスで登録する
どちらでもお好きな方をお使いください。
以下のページより作成可能です。
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を設定しました。
ローカル環境で試せるngrokとその設定
構築したアプリをローカル環境で試すためにはngrokの設定が必要です。
なぜならlocalhostというドメインでは、LINE公式アカウントのWebhookが利用できないから。
- ngrokとは
- Webhookの設定
ngrokとは
ngrokとは、ローカルホストのアドレスに外部からアクセスできるようにしたネットワークツールです。
ngrokを設定することで、httpsに対応したアドレスも発行できます。
以下のサイトで無料登録できますので、まずは登録してサーバーを立ち上げましょう。
使用する際は、Djangoのポート番号8000で立ち上げましょう。
ngrok http 8000
Webhookの設定
ngrokの設定と立ち上げが完了したら、以下にてWebhookの設定をします。
- LINE公式アカウント上
- LINE Developers上
LINEBotを公開しよう
LINEBotを公開するには以下の手順が必要です。
- 公開用のサーバーを準備する
- サーバーの設定をする
- 公開用サーバーにアプリをデプロイする
公開用のサーバーを準備する
DjangoなどのWebアプリは一般的なレンタルサーバーでは公開できません。
その理由は、Djangoアプリを公開するにはより高度な設定が必要になるからです。
例えば以下のようなVPSが使いやすいでしょう。
もしくはこちらからお好きなものを選んで契約してください。
サーバーの設定をする
VPS上でWebサーバーを構築するには以下の記事を参考にしてください。
公開用サーバーにアプリをデプロイする
以下の記事を参考にアプリをサーバーにデプロイしましょう。
まとめ:Python・DjangoでLINEBotは作れる
当記事の内容をまとめます。
- LINEBotを構築するにはアカウントと設定が必要
- LINEBotはDjangoで構築できる
- LINEBotを公開するにはVPSが必要になる
PythonをベースとしたDjangoフレームワークでのLINEBot構築方法をご紹介しました。
こちらのやり方を応用すればさまざまなLINEボットが作れます。
以下のITCブロブ公式LINEアカウントでは、当ブログ内の記事検索ができるボットとなっています。
最新の情報なども配信してますが、気軽にLINEから検索もできるので、ぜひお友だち登録をいただいて、試してみてください。
もしくはボット作成を依頼したいという方も、気軽にご連絡ください。