#LINE #聊天機器人 #GCP #ChatGPT #LINE聊天機器人1 #序
LINE 聊天機器人 - 手把手教學,輕鬆學會模仿與互動的功能 on GCP Cloud Functions
在本篇文章中,將學習到一個實用且有趣的 LINE 聊天機器人應用實例。
將ㄧ步一步 👣 的實作包括 LINE BOT 設定、GCP Cloud Functions 開發與部署功能、LINE Request 解碼與回覆訊息,最後將兩者串接在一起實現模仿說話的機器人。
學會了最基本的功能,我們後續就可以利用它延伸出其他更多元的功能!
🔥 後記:將最近大受歡迎的 ChatGPT 集成到我們的 LINE 聊天機器人中,讓這隻鸚鵡機器人蛻變為一隻展翅翱翔的鳳凰
✍️ 番外篇:透過爬蟲與 ChatGPT ,打造個人股市的消息整理小幫手
Journey 🥾 :
流程概觀 🔍
1. 註冊成為 LINE 開發者,並設置 LINE Bot
2. 學習如何使用 GCP Cloud Functions 服務部署程式碼
3. 將 LINE 與 GCP Cloud Functions 連結在一起
4. 和它說聲Hi吧 👋 (實現與機器人的互動)
流程概觀 🔍
步驟 1:設置LINE Bot 🤖
首先第一部份將會介紹如何成為 LINE 的開發者,並建立起一個自己的LINE BOT Channel。
LINE Developers:https://developers.line.biz/zh-hant/
1.1 ) - 註冊並登入 LINE Developer
要開發一個 LINE BOT,需要先成為 LINE 的開發者。
- 我這邊是直接使用平常在用的 LINE 帳號去登入註冊
1.2 ) - 在LINE Developers建立一個Provide
1.3 ) - 建立一個Channel
- 選擇Messaging API的Channels形式
- 填入這個Channel必要的欄位資訊
1.4 ) - 獲取Channel Secret
至Basic settings頁籤,取得Channel Secret
- 可以先將Channel Secret憑證紀錄下來,稍後程式會用到
1.5 ) - 獲取Access Token
至Messaging API頁籤,取得Channel Access Token
- 點擊Issue,產生Channel Access Token
- 可以先將Channel Access Token紀錄下來,稍後程式會用到
1.6 ) - Line官方帳號平台設定
LINE Official : https://tw.linebiz.com/login/
- 關閉 聊天模式與自動回覆訊息
- 開啟 Webhook
- 將LINE預設的自動回覆關閉,才不會一發訊息就一直收到自動回覆
步驟 2:設置 GCP Cloud Functions ☁️
為什麼要使用 GCP Cloud Functions ❓
- 不用擔心伺服器的維護和管理工作,也不用在自己電腦上啟一個Flask環境 (雖然本次的小應用並不會用到什麼資源,就是懶…)
- Cloud Functions 是按需求付費的,根據實際使用的資源付費。
這意味著不需要為未使用的伺服器或閒置的資源付費 - 沒有為什麼,純粹想試試看 Cloud Funcitons
Cloud Functions 是一個 Serverless 的服務,這種架構可讓我們更專注於應用程式的功能和邏輯,而無需擔心底層基礎設施的管理和維護。
它允許在雲端環境中運行單一功能的程式碼片段
這種服務通常用於執行輕量的、事件驅動的任務,如處理 API 請求GCP Login : https://console.cloud.google.com
2.1 ) - 登入GCP,並至 Cloud Functions
2.2 ) - 建立一個函式
2.3 ) - 填入函式必要欄位
- 自由輸入你的函式名稱
- 地區選擇:台灣
- 驗證:允許未經驗證的叫用
- Memory allocated:選擇最小的128MB即可 (夠用也比較便宜哈哈)
2.4 ) -部署程式碼1 (main.py) 💻
- 選擇Python版本
- 確任目前是在編輯main.py
- 修改Entry point: linebot
在 main.py中引入以下套件
- 這次會用到的套件:
包括 json,linebot(用於實現 Line Bot 相關功能)和加密模塊。
# 這次會用到的套件
import json
import hmac
import hashlib
import base64
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
在 main.py中填入以下Code
- linebot函式:
用於處理來自 Line 平台的請求
將 CHANNEL_ACCESS_TOKEN , CHANNEL_SECRET_TOKEN 替換成上面設置 LINE BOT 所得到的值
❌ 這裡我們先偷懶,直接將 TOKEN Hard Code,但這樣不符合安全性,也缺乏彈性,最後會補充如何設置環境變數的方式
- 驗證請求:
檢查請求頭中是否存在 ‘X-Line-Signature’,若不存在則返回錯誤。
接著將請求頭中的 ‘X-Line-Signature’ 與計算出的數字簽名進行對比,若不一致則返回錯誤。 - 處理請求:
將request內容轉換成 JSON 格式,並取得 reply Token 和訊息內容。 - 回覆訊息:
使用 push_message 方法,將取得的 reply Token,加上收到的訊息原樣推送回給用戶。
這個程式碼主要實現了一個簡單的功能:當用戶向機器人發送訊息時,機器人會將訊息原樣返回給用戶
line_bot_api = LineBotApi('YOUR CHANNEL_ACCESS_TOKEN')
channel_secret = 'YOUR CHANNEL_SECRET_TOKEN'
handler = WebhookHandler(channel_secret)
def linebot(request):
if request.method == 'POST':
if 'X-Line-Signature' not in request.headers:
return 'Error: Invalid source', 403
else:
# get X-Line-Signature header value
x_line_signature = request.headers['X-Line-Signature']
# get body value
body = request.get_data(as_text=True)
# decode body
hash = hmac.new(channel_secret.encode('utf-8'),
body.encode('utf-8'), hashlib.sha256).digest()
signature = base64.b64encode(hash).decode('utf-8')
# Compare x-line-signature request header and the signature
if x_line_signature == signature:
try:
json_data = json.loads(body)
handler.handle(body, x_line_signature)
tk = json_data['events'][0]['replyToken'] # 取得 reply token
msg = json_data['events'][0]['message']['text'] # 取得 訊息
line_bot_api.reply_message(tk,TextSendMessage(msg)) # 回傳 訊息
# print(msg, tk)
return 'OK', 200
except:
print('error')
else:
return 'Invalid signature', 403
else:
return 'Method not allowed', 400
- 完成後的樣子,GCP 上的示意圖
2.5 ) -部署程式碼2 (requirements.txt) 💻
在 requirements.txt 中填入以下套件
line-bot-sdk
2.6 ) - DEPLOY 🚀
最後,確認以上步驟無誤,將程式碼部署上Cloud Functions
2.7 ) - TRIGGER測試 🔫
- 切換至TRIGGER頁籤,點擊觸發網址
- 因為在linebot的函式中,我們限制了Request的方法與格式(確認請求是從LINE發出的)
所以得到 Method not allowed 的結果是正確的
2.8 ) — 環境變數設定 (安全性優化) ✅
不知道大家有沒有注意到,我們前面是將 CHANNEL_ACCESS_TOKEN , CHANNEL_SECRET_TOKEN 直接放到程式碼內,但這樣會有安全性問題,所以這邊我們來調整一下
- 先點進我們剛剛建立的函式
- 點擊 編輯
- 將隱藏的選單打開來
- 新增環境變數,變數名稱為大寫字母,並使用下劃線分隔單詞
CHANNEL_ACCESS_TOKEN
CHANNEL_SECRET - 將你的 TOKEN 值填入對應的 Value 欄位
2.8 ) — import os
模塊,讓我們可以與系統進行交互。例:讀取環境變數
import os
- 將原本 Hard Code 的 Key 調整成去讀取設定的環境變數
# line_bot_api = LineBotApi('YOUR LINE_ACCESS_TOKEN')
# channel_secret = 'YOUR CHANNEL_SECRET_TOKEN'
line_bot_api = LineBotApi(os.environ.get('CHANNEL_ACCESS_TOKEN'))
channel_secret = os.environ.get('CHANNEL_SECRET')
2.9 ) — 調整完畢,重新 DEPLOY 🚀
https://cloud.google.com/functions/docs/configuring/env-var?hl=zh-cn#functions-deploy-command-python
步驟 3:將LINE與GCP連結在一起吧! 👉 👈
在此步驟,我們將透過 LINE 去觸發 Cloud Functions 的網址,並得到Success的訊息!
3.1 ) - 複製,Cloud Functions 的觸發網址
3.2 ) - 回到LINE Developer平台,做Webhook設定
LINE Developers:https://developers.line.biz/zh-hant/
- 至Messaging API頁籤
- 將剛剛複製的 Cloud Functions 觸發網址,貼至Webhook URL欄位
- 開啟 “Use webhook”
3.3 ) - 測試 Webhook 🪝
- 點擊 Verify 測試,確認收到 Success
👏 做到這一步,你已經成功將 LINE Bot 與 GCP Cloud Functions 連接起來了!
步驟 4:和它說聲Hi吧 👋
4.1 ) -至Messaging API頁籤,掃碼加入這個帳號
4.2 ) - 和它說聲Hi吧 👋
總結 👽
在本篇文章中,我們成功地掌握了如何創建一個 LINE 鸚鵡機器人
我們讓這個機器人具備了模仿用戶語言的能力,讓它成為一個有趣的模仿達人。
📔 以上內容部分參考自網路,並整理成自已的實作筆記分享給大家 📔
今天就先這樣
掰掰 🏊🏼 🏊🏼 🏊🏼 🏊🏼 🏊🏼 🏊🏼
後記 📖
在下一篇的文章中,我們將嘗試將最近大受歡迎的 ChatGPT 集成到我們的LINE機器人中,讓這隻鸚鵡機器人蛻變為一隻展翅翱翔的鳳凰 🔥
想像一下,隨時隨地擁有一個頂級的 AI 助理機器人 ( ChatGPT ),能回應你的問題,還能提供智能建議和實用的信息,讓日常的生活變得更加輕鬆、高效和有趣。