iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0
Modern Web

Django新手指南系列 第 28

成績單(?) 憑證設定 江狗(Django) 鐵人Day28

  • 分享至 

  • xImage
  •  


(Rrrrrr ! ! !)

上回取得LINE Bot憑證後,我們回到Django內設定憑證吧!

安裝相關套件

pip install line-bot-sdk

pip install requests

新增LINEBOT APP

安裝後我們在原專案下再新增一個APP用來放開發LINE Bot的程式碼:
還記得怎麼新增APP嗎?

#python manage.py startapp <APP名稱>
python manage.py startapp LINEBOT

這樣就新增好LINEBOT資料夾了

添加憑證

再來我們找到專案資料夾裡的settings.py,把上回的兩個憑證新增進去:

#拉到最下方新增:
LINE_CHANNEL_SECRET = '頻道密碼(Channel secret)'
LINE_CHANNEL_ACCESS_TOKEN = '頻道憑證(Channel access token)'
#要用單引號('')把憑證內容包起來

添加APP

完成後再拉到上方的INSTALLED_APPS新增我們的LINEBOT進去:

更新一下它python manage.py migrate

這樣就完成了,我們就可以正式開發屬於我們的LINE Bot機器人了,那麼我們就實現最基本的功能吧!

永不無聊的聊天回覆機器人,間單來說就是你打什麼傳送給機器人,機器人就回傳你傳送的訊息。
首先我們先到urls.py新增路徑:

<Project/urls.py>

urlpatterns = [
    (...)
    path('LINEBOT/', include('LINEBOT.urls'))
]


在LINEBOT資料夾中也新增urls.py

添加指令:

<LINEBOT/urls.py>


from django.urls import path
from . import views

urlpatterns = [
    path('chatbot/', views.chatbot)
]

切換到views.py填寫我們需要的讓機器人執行的程式吧!

<LINEBOT/views.py>

#引入參數
from django.shortcuts import render
from django.http import HttpResponse
from django.http import HttpResponseBadRequest
from django.http import HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
#引入linebot參數
from linebot import LineBotApi
from linebot import WebhookParser
from linebot.exceptions import InvalidSignatureError
from linebot.exceptions import 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 chatbot(request):
    if request.method == 'POST':
        signature = request.META['HTTP_X_LINE_SIGNATURE']
        body = request.body.decode('utf-8')
        try:
            chatinfo = parser.parse(body, signature)#解析傳入請求
        except InvalidSignatureError:#憑證失效時
            return HttpResponseForbidden()#禁止訪問
        except LineBotApiError:#機器人發生錯誤時
            return HttpResponseBadRequest()#回傳錯誤請求
        for chat in chatinfo:
            if isinstance(chat, MessageEvent):#當有訊息時
                line_bot_api.reply_message(chat.reply_token,#回傳相同訊息
                                     TextSendMessage(text=chat.message.text))
        return HttpResponse()
    else:
        return HttpResponseBadRequest()

到這裡我們程式碼的部分就完成了,我們RUN看看有沒有問題:

能成功RUN起來就沒有問題了,但還需要將網址透過一些方法能對外公開HTTPS網址才能與LINE連結起來,這個部分我們下回再處理。
今天先到這邊,大家掰掰~

圖片來源:memenow


上一篇
保濕護手霜(?) 取得LINE Bot憑證 江狗(Django) 鐵人Day27
下一篇
牛貓&貓牛(?) Ngrok連結LINE Bot 江狗(Django) 鐵人Day29
系列文
Django新手指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言