先至LINE Developers登入,後點選Console home,再點選Create,建立provider name(與機器人無關),
之後請點選Create a Messaging API channel。
進入設定頁面,請依自己的需求設定(主要是大頭貼及機器人名稱),設定完後就建立好了!
因為我們之後要用 Heroku,需要用Git來做版本控制。
先至Git網站,依您的需求點選需要下載的類型。
下載完後都先按確認,直到這一步,
請選擇Use the Nano editor by default
這邊請選擇 Use Windows' default console window
安裝完成後,可以至命令提示字元(cmd)輸入 git --version,如果沒出錯代表成功安裝完成了。
之後設定名字及email,使每次我們更改程式或版本更新時,Git就能夠註記是誰做的。
C:\Users\azxa3>git config --global user.name 名字
C:\Users\azxa3>git config --global user.email 信箱
完成後Git這邊就初始化完成了。
至Heroku網站,Sign up一個帳號,並認證Email,都完成後即可登入。
登入後需要再安裝軟體使其能與Git溝通,至The Heroku CLI依您的需求下載並安裝(一直點選下一步即可安裝完成)。
安裝完畢後,請再至命令提示字元(cmd)輸入heroku -v,如果沒出錯代表安裝成功。
首先至LINE Developers,登入後點選您剛剛建立的channels。
進入後點選Messaging API,滑到最下面,會看到Channel access token,請點選Issue,就能取得token。
之後再回到Basice settings,滑到最下面,就能看到Channel secret。
Channel access token與Channel secret 就如同您機器人的帳號密碼,十分重要,不宜外洩。
都用完後,就可以使用命令提示字元(cmd)登入Heroku了。
進入命令提示字元(cmd):
並輸入 heroku login,然後任意點一個鍵,就會跳入Heroku網頁,即可登入。
登入後,即可利用heroku create建立一個Heroku的應用。
heroku create 你App的名字
建立完成後,至Heroku就能看到你剛剛建立的App了。
之後我們要建立一個資料夾(我這邊取名LineBot),在裡面設置幾個檔案。
Procfile:跟Heroku說明我們是哪種應用程式以及執行哪個py檔案,假設我們執行的是line.py,則Procfile內容就會是
web: gunicorn line:app –preload
Procfile是一個沒有副檔名的檔案,因此可以先用記事本將上述文字打進去後再另存一個沒有副檔名的版本。
requirements.txt:
此為告訴Heroku需要安裝哪些套件,內容為:
Flask==2.0.2
gunicorn==19.9.0
line-bot-sdk==2.0.1
requests==2.27.1
psycopg2==2.9.3
numpy==1.19.4
Pillow==8.0.1
pygsheets==2.0.5
runtime.txt :告訴Heroku要用哪種版本的Python來執行我們的程式
內容為:
python-3.8.6
line.py:主程式檔,這邊範例是會學使用者說話的程式碼
from flask import Flask, request, abort
from urllib.request import urlopen
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError,LineBotApiError
)
################################
from linebot.models import *
app = Flask(__name__)
# Channel Access Token
line_bot_api = LineBotApi("您的Channel Access Token")
# Channel Secret
handler = WebhookHandler("您的Channel Secret")
# 監聽所有來自 /callback 的 Post Request
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
# 處理訊息
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
print(event)
text=event.message.text
if (text=="Hi"):
reply_text = "Hello"
elif(text=="哈囉"):
reply_text = "你好嗎"
else:
reply_text = text
#如果非以上的選項,就會學你說話
message = TextSendMessage(reply_text)
line_bot_api.reply_message(event.reply_token, message)
import os
if __name__ == "__main__":
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
因此資料夾內容會有以下檔案:
打開命令提示字元(cmd),將資料夾的路徑設為剛剛所設的LineBot資料夾內
初始化Git
git init
跟Git說明要將資料推到Heroku剛剛建立的專案內
heroku git:remote -a 你App的名字
將所有檔案推入Git
git add .
接著輸入
git commit -m "註解"
Push
git push heroku master
出現 Verifying deploy... done.
大功告成
回到LINE Developers,登入後到Messaging API,找到Webhook settings內的Use webhook,點選後再找到Webhook URL,點選Edit,後輸入
https://你App的名字.herokuapp.com/callback
然後點選Verify,成功就會出現Success ,但即使沒成功不代表出錯,可以直接從Line上測試。
若沒有回應,可以至Heroku右上角More內的View logs查看錯誤原因。
當你命令提示字元(cmd)關掉後,突然想再更改程式碼並重新上傳,只要重新開啟命令提示字元(cmd),並輸入指令
heroku login
此時會請您任按一鍵進入網站登入,登入後再輸入
heroku git:remote -a 你App的名字
將您的檔案指定推送在你App的名字這個專案
之後就像git一樣
git add .
git commit -m "更新的註解"
git push heroku master
!pip install django
!pip install line-bot-sdk
!pip install beautifulsoup4
!pip install requests
在終端機輸入
django-admin startproject Linebot . #建立專案
python manage.py startapp foodbot #建立應用程式
python manage.py migrate #執行資料遷移(Migration)
此時會看到資料夾中有自動產生的 myfirstlinebot資料夾及firstlinebot資料夾及manage.py
開啟專案主程式(Linebot)資料夾下的settings.py檔案,並在程式碼中增加LINE Developerse上所取得的兩個憑證(LINE_CHANNEL_ACCESS_TOKEN、LINE_CHANNEL_SECRET)來與LINE CHANNEL進行連接
LINE_CHANNEL_ACCESS_TOKEN = 'Messaging API的Channel access token'
LINE_CHANNEL_SECRET = 'Basic settings的Channel Secret'
並在INSTALL_APPS的地方加上剛剛建立的Django應用程式
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'foodbot.apps.FoodbotConfig',
]
進入Line Developer後點選Messaging API,滑到最下面,會看到Channel access token,請點選Issue,就能取得token。
之後再回到Basice settings,滑到最下面,就能看到Channel secret。
開啟Django應用程式(foodbot)的views.py檔案,這邊就是撰寫LINE Bot接收訊息後該做何運算的地方,這邊以回覆使用者傳送的訊息為例。
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()
接下來就要設定這個LINE Bot應用程式(APP)的連結網址,所以在Django應用程式(foodbot)下建立一個urls.py檔案,加入以下的網址設定:
from django.urls import path
from . import views
urlpatterns = [
path('callback', views.callback)
]
為了將Django應用程式(foodbot)的網址也加入道專案主程式中,所以在Django專案主程式(Linebot)下的urls.py檔案中,加入以下網址設定
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('foodbot/', include('foodbot.urls')) # 包含應用程式的網址
]
LINE Bot應用程式(APP)都完備後,接下來就要讓網址能夠公開(Public)且具有HTTPS,LINE Channel才有辦法連結。
這時候除了可以將LINE Bot應用程式(APP)部署到像Heroku雲端平台,擁有對外公開的HTTPS網址外,還可以使用一個非常強大的工具-Ngrok。
Ngrok簡單來說,就是能夠將你本機的IP埠號(http://127.0.0.1:8000),對應到一個隨機產生的HTTPS網址,並且這個HTTPS網址是對外公開的(Public)的,這透過這個HTTPS網址,就能夠存取本機所運行的服務。
首先,前往Ngrok官網,點選Sing up for free,創建完帳號後,在主畫面Getting Started 內有Setup & Installation,進入後可以先Download ngrok,並複製 2. Connect your account 下方的憑證(Token) :ngrok config add-authtoken 您的憑證(Token)
或至Getting Started 內的Your-authtoken 也能複製憑證(Token),複製完後打開Ngrok,輸入以下指令
ngrok authtoken 您的憑證
ngrok http 8000
執行結果會隨機產生一個HTTPS的網址,只要把這個網址填入LINE Webhook URL(後方要加上/foodbot/callback)及Line Bot應用程式(foodbot)的settings.py檔案中的ALLOWED_HOSTS即可。
接著在終端機輸入以下指令
python manage.py runserver
此時在Webhook URL上點選Verify會顯示Success ,即可測試LINE機器人有無作用。