#LINE #聊天機器人 #GCP #ChatGPT #LINE聊天機器人1 #序

LINE 聊天機器人 - 手把手教學,輕鬆學會模仿與互動的功能 on GCP Cloud Functions

LINE聊天機器人1創建一個模仿你說話的 LINE 聊天機器人

Jerry Wen
14 min readMay 4, 2023

--

在本篇文章中,將學習到一個實用且有趣的 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 Developers Login
  • 我這邊是直接使用平常在用的 LINE 帳號去登入註冊
LINE Login

1.2 ) - 在LINE Developers建立一個Provide

建立一個你的Providers
自由輸入自己的Provider名稱

1.3 ) - 建立一個Channel

  • 選擇Messaging API的Channels形式
選擇Messaging API
  • 填入這個Channel必要的欄位資訊

Hi圖片網址:https://www.flaticon.com/free-icon/hi_4666748?term=hi&page=1&position=8&origin=search&related_id=4666748

填入必要欄位

1.4 ) - 獲取Channel Secret
至Basic settings頁籤,取得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

  1. 不用擔心伺服器的維護和管理工作,也不用在自己電腦上啟一個Flask環境 (雖然本次的小應用並不會用到什麼資源,就是懶…)
  2. Cloud Functions 是按需求付費的,根據實際使用的資源付費。
    這意味著不需要為未使用的伺服器或閒置的資源付費
  3. 沒有為什麼,純粹想試試看 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 設定

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

DEPLOY

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頁籤
Messaging API頁籤
  • 將剛剛複製的 Cloud Functions 觸發網址,貼至Webhook URL欄位
  • 開啟 “Use webhook”
Webhook設定

3.3 ) - 測試 Webhook 🪝

  • 點擊 Verify 測試,確認收到 Success
Verify
Webhook Success

👏 做到這一步,你已經成功將 LINE Bot 與 GCP Cloud Functions 連接起來了!

步驟 4:和它說聲Hi吧 👋

4.1 ) -至Messaging API頁籤,掃碼加入這個帳號

4.2 ) - 和它說聲Hi吧 👋

Hi LINE Bot

總結 👽

在本篇文章中,我們成功地掌握了如何創建一個 LINE 鸚鵡機器人
我們讓這個機器人具備了模仿用戶語言的能力,讓它成為一個有趣的模仿達人。

📔 以上內容部分參考自網路,並整理成自已的實作筆記分享給大家 📔

今天就先這樣
掰掰 🏊🏼 🏊🏼 🏊🏼 🏊🏼 🏊🏼 🏊🏼

後記 📖

在下一篇的文章中,我們將嘗試將最近大受歡迎的 ChatGPT 集成到我們的LINE機器人中,讓這隻鸚鵡機器人蛻變為一隻展翅翱翔的鳳凰 🔥

想像一下,隨時隨地擁有一個頂級的 AI 助理機器人 ( ChatGPT ),能回應你的問題,還能提供智能建議和實用的信息,讓日常的生活變得更加輕鬆、高效和有趣。

--

--