今天要來正式建立 Chatbot 的 Python 專案!
進入 Line Developers 直接登入自己的 Line 帳號。
如果是第一次建立開發者帳號,需要先填寫一些基本資料(僅限第一次登入時才要)。
之後,建立一個 Provider
。Provider
指的是提供服務的個人或公司。
接著我們就要建立一個 Messaging API 的 channel。
繼續填寫資料~
基本設定
項目 | 畫面 |
---|---|
Channel icon(optional) | Chatbot 的大頭貼 |
Channel name | Chatbot 名字 |
Channel description | 啟動時的同意權限畫面(僅針對有建立 LIFF 的 Channel) |
Privacy policy URL(optional) | - |
Terms of use URL(optional) | - |
這之後我們就可以在主頁上看到我們建立好的 channel 了!!
在 Line Developers 上該建立的東西到這邊基本上就幾乎完成了,但是先不要把網頁關掉!
在建立 Python 專案時,還需要回來這個網頁複製兩個憑證。(等我們要用到的時候再回來)
首先,我們要建置環境,安裝以下之後會使用到的 Python 套件
$ pip install django
$ pip install line-bot-sdk
$ pip install requests
接著建立 Django 專案
#建立Django專案
$ django-admin startproject mylinebot .
#建立Django應用程式 程式名稱 django_chatbot
$ python manage.py startapp django_chatbot
$ python manage.py migrate
此時
mylinebot
是專案主程式
django_chatbot
是應用程式
我們可以回到 Line Developers,需要拿到以下兩個憑證。
Basic Settings 裡的 Channel Secret
Messaging API 裡的 Channel access token,是 long-lived 的
之後開啟專案,我們在 mylinebot/settings.py
裡增加上面提到的兩個憑證。
LINE_CHANNEL_ACCESS_TOKEN = 'Messaging API > Channel access token'
LINE_CHANNEL_SECRET = 'Basic settings > Channel secret'
直接把兩個憑證複製上去(type: str
)。
然後在同一個 settings.py
檔裡面的 INSTALLED_APPS
加上剛剛所建立的 Django 應用程式,如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_chatbot.apps.DjangoChatbotConfig', #新增APP名稱
]
也就是在 django_chatbot/apps.py
裡的 class
class DjangoChatbotConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'django_chatbot'
echo
Chatbot我們先來看另一個檔案 django_chatbot/views.py
,這個檔案可以算是 Chatbot 的主程式(?)。
我們會把 Chatbot 接收訊息後要執行的內容寫在 def callback(request):
裡。
我們來試寫一個最基本的 Chatbot,echo
,Chatbot 會回傳使用者輸入的文字內容。
範例取自官方 documentation
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
from linebot import LineBotApi, WebhookParser
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextSendMessage
line_bot_api = LineBotApi(settings.LINE_CHANNEL_ACCESS_TOKEN)
parser = WebhookParser(settings.LINE_CHANNEL_SECRET)
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
events = parser.parse(body, signature) # 傳入的事件
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
for event in events:
if isinstance(event, MessageEvent): # 如果有訊息事件
line_bot_api.reply_message( # 回復傳入的訊息文字
event.reply_token,
TextSendMessage(text=event.message.text)
)
return HttpResponse()
else:
return HttpResponseBadRequest()
雖然目前我們把 Chatbot 的主要功能都寫出來的,可是到目前為止,還不能執行。
我們要把網址公開才可以讓這個機器人連結到我們的 channel,這樣機器人才可以回應我們寫的主要功能。
明天會繼續講解如何公開網址連結 channel。
之後的幾天都會慢慢把挖出來的坑給填起來!
Ref.