聊天機器人一直存在我的生活周遭 常常想著哪天我也自己來玩一個看看 所以就在空閒的時候做了一個 用來尋找附近美食的機器人 順便開了一個系列紀錄一下的過程
P.S.範例截的圖是另外一個做失敗的機器人但我又不想重新截圖,所以就用著了,但做法都是一樣的只是機器人名字不一樣而已
前置作業 開發環境與工具
Python (Anaconda)
VS Code
Ngork
Line方面設定 先到Line developer註冊 → Create Provider → 建立Messaging API
💡 在Basic Settings裡有Channel secret,在Messaging API settings裡有Channel access token
建立步驟 Anaconda Env 建議可以使用虛擬環境以保持套件的乾淨
1 2 3 conda create --name=django-env python=3.6.6 #建立環境 conda activate django-env #啟動環境 conda deactivate #關閉環境
Django
安裝套件
1 2 3 4 pip install django pip install line-bot-sdk pip install beautifulsoup4 pip install requests
建立Django專案
1 2 3 4 5 django-admin startproject mylinebot . #建立Django專案 python manage.py startapp weatherlinebot #建立Django應用程式(App) python manage.py migrate #執行資料遷移(Migration)
(1) 在專案主程式的settings.py
中加上line的access config
1 2 3 # Line Chat Bot Settings LINE_CHANNEL_ACCESS_TOKEN = 'AucguavwbkWCxY5FbQCwGhx2F6E7slhtxra4cKNgiXnKYEUcTCUe7b1kR09yKVrbtIYNqNw6jOTbTKrOVpK6ZKX0qHqbOsamrCdKJ4e+bSIiHmPppo2QljFEhZt3Unexv4h4A0IkNR9mo9KC95iC5gdB04t89/1O/w1cDnyilFU=' LINE_CHANNEL_SECRET = '32689659c38a00a77e0adbae0eedab36'
(2) 在INSTALLED_APPS
的地方加上自己的APP
開發Line bot應用程式
(1) 在應用程式下的views.py
加上下面程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 from django.shortcuts import renderfrom django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbiddenfrom django.views.decorators.csrf import csrf_exemptfrom django.conf import settings from linebot import LineBotApi, WebhookParserfrom linebot.exceptions import InvalidSignatureError, LineBotApiErrorfrom linebot.models import MessageEvent, TextSendMessageline_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()
其中line_bot_api.reply_message()
就是處理回傳的部分,也可以像下面改成這樣:
(2) 設定連結網址:在APP應用程式下新增urls.py
1 2 3 4 5 6 from django.urls import pathfrom . import views urlpatterns = [ path('callback' , views.callback) ]
(3) 在專案主程式下的urls.py
加入APP應用程式的連結網址
1 2 3 4 5 6 7 8 from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import includeurlpatterns = [ path('admin/' , admin.site.urls), path('weatherlinebot/' , include('weatherlinebot.urls' )) ]
開啟連線
(1) Ngrok本地port對外公開
1 ngrok http 8000 #Django在local運行的port
(2) 把網域填到APP應用程式下settings.py
的ALLOWED_HOSTS中 (或者是測試時直接放一個*
允許所有host)
(3) 執行Line bot的APP
1 python manage.py runserver
(4) 設定Line Bot的webhook(訂閱事件)
(5) 打開Use webhook
(7) 把下面的Auto-reply messages的Enable關閉
掃描QR code加入好友後的結果