動機

想要練習看看使用非常方便的 n8n 來建立屬於自己的 LINE 個人助理。

解決方法

透過 ngrok 反向代理,將本機的 n8n 服務公開到網路上,然後在 n8n 上透過 Webhook 接收 LINE 訊息,並搭配 AI Agent 來控制 Google 行事曆。

實作

建立 ngrok

https://ngrok.com/ 註冊一個帳戶,登入後可以看到右邊有很多啟動方式。
我們選擇使用 docker 來啟動。

使用下方的指令進行啟動。

1
docker run --net=host -it -e NGROK_AUTHTOKEN=<你的金鑰> ngrok/ngrok:latest http <n8n 的埠號>

看到這個畫面代表啟動成功。

創建 Webhook

剛開始先創建一個 Webhook 來接收訊號,這個 Webhook 會被網址使用 post 觸發。

連接 LINE BOT

把 Webhook 的 URL 複製到 LINE BOT 的 Webhook URL 裡。

注意紅色框框要改成 ngrok 提供的網址。

接下來到 Response settings 把 Webhooks 打開。

測試連線

點選 Listen for test event 進行測試。

https://developers.line.biz/console 找到自己的機器人,並進入到 Messaging API 後,可以點選 Verify 進行測試。

出現 Success 後,就可以在 Output 上看到回傳的結果。

建立一個表單

建立一個 Edit Fields 節點,把輸入資訊整理成一個表單。

建立一個 AI Agent

建立一個 AI Agent 後,我們可以看到它需要有三個元件,分別是:「模型」、「資料庫」、「工具」。

模型的部分選擇免費的 Google Gemini。

資料庫的部份選擇一般即可。

工具的部份可以依照自己的需求自行添加,稍後會添加。

輸入模型 API

點擊模型可以進入到此頁面,要先創建憑證,創建時會需要輸入 API key,輸入完後儲存,並選擇要使用的模型版本。

測試模型運作

我們在 LINE 上輸入"你好"後,模型成功回覆,代表模型正常運作。

GCP 憑證

因為我們等等會使用到 google 日曆,因此我們需要申請一個使用者憑證才能做使用。
首先要到 https://console.cloud.google.com/ ,進來後先創建一個專案,創建完後會看到這個頁面。

我們點選 API 和服務,後搜尋 Google Calendar API 進行安裝,我們等等會需要用到。

接著回到「API 和服務」頁面,點選憑證,然後創建一個 OAuth 用戶端 ID。
應用程式類型選擇「網頁應用程式」,名稱可以自定義。

接下來按建立,建立完畢後會出現 Client ID 和 Client Secret,這兩個要保存好,等等會用到。

新增一個日曆

在 Google 日曆中新增一個日曆。

串接實用工具

我們使用 Google Calendar 作為範例,讓 AI 能夠幫我們新增行事曆排程。

新增完節點後,我們要輸入憑證,會看到這個畫面。
要把 OAuth Redirect URL 複製到剛剛在 GCP 建立的憑證上 (已授權的重新導向 URI),然後儲存。
再把 Client ID 和 Client Secret 輸入進 n8n,再點擊 Sign in with Google 進行驗證。

紅色框的部分,要改為目標日曆,開始與結束日期由 AI 自動輸入。
(紅框上的部分,可以依照自己的需求進行設定)

新增當前時間

因為日曆排程需要日期與時間,因此我們要在 AI Agent 節點前新增一個 Date & Time 節點,讓 AI 知道當前時間。
紅框內的選項記得要打開,這樣才能引用之前的輸入。

優化模型

在 Option 選項裡新增 System Message 後,可以看到預設的 prompt 是告訴 AI「你是一個有用的助理」,我們可以透過下 prompt 來優化 AI,讓 AI 能夠更清楚的知道它要做什麼。

因此,我提供一個 prompt 給大家做參考。

1
2
3
4
你是一位個人助理,你的職責是協助使用者處理日常事務,你可以使用以下工具來完成任務:
- Google Calendar: 用於建立行事曆事件,當使用者需要安排行程或建立提醒時,請使用此工具,事件的摘要(Summary)是必填欄位。

目前時間為: {{ $json.currentDate }}

要記得改為 Expression 輸入模式

這樣就完成了 AI 助理的建置,還有很多方便的工具可以依照需求自行新增。

建立機器人回覆節點

建立一個 HTTP Request 節點,打一個 API 來回覆使用者。
使用 POST 模式,URL 為 https://api.line.me/v2/bot/message/reply,Authentication 要選擇 Generic Credential Type,然後選擇 Header Auth

創建一個 Header Auth,名稱為 Authorization,值要輸入 Bearer <access token>

打開 Send Body 選項,使用 Json 格式,並輸入以下 Json 內容。

1
2
3
4
5
6
7
8
9
{
"replyToken": "{{ $('Edit Fields').first().json.replyToken }}",
"messages": [
{
"type": "text",
"text": "{{ $json.output }}"
}
]
}

測試回覆

使用 LINE 和 Bot 進行對話,最後 Bot 有成功回覆訊息。

正式開放 Webhook

啟動我們的 Workflow。

最後,只需要把我們 Webhook 節點的 Test URL 改為 Production URL,這樣就能夠一直監聽。

也要記得把 LINE Bot 的 Webhook 替換成 Production URL 喔

如何使用

建置完畢後,我們就能夠在 LINE 上輸入需求,讓個人助理幫你完成事務。

總結

n8n 是一個非常好用的自動化工作流平台,使用者不需要寫大量的 Code,只需要透過建立節點來打造出自己的工作流程,節省大量的開發時間,重點它是免費開源的!!!

參考文獻