[Python] Line名片機器人(Gemini、Notion)

邊做邊學,順便留個紀錄。

一切的起源,都是因為我偶然看到 Evanlin 大大的文章(來源連結)。這篇文章介紹了如何使用 Golang 開發一個結合 Gemini Pro Vision 的名片管理聊天機器人。我想在原有的基礎上增加刪除和修改名片資料的功能,由於我對 Golang 並不熟悉,因此我決定以 Python 重寫這個專案,也算是一種開發練習。

目錄:

一、 取得程式碼

從 GitHub 取得程式碼

在選定的資料夾開啟命令提示字元(cmd),並執行以下指令從 GitHub Clone專案:

git clone https://github.com/KerKerJoking/BusinessCard_LineBot_Gemini_Notion
開啟cmd
從 github clone 專案

二、 Gemini、Line、Notion 環境準備

  • 取得 Google API Key

前往 Google AI Studio,創建 API Key,這會用於將名片照面提交給 Google Gemini 模型進行識別並回傳 Json 格式資料。

Google API
  • 取得 LINE Access Token / Channel Secret

登入 LINE Developers,如果還沒有建立Bot就先建立一個,Access Token 可以在 Messaging API 頁面找到,Channel Secret 可以在 Basic settings 頁面找到。

Line Access Token
Line Channel Secret
  • 取得 Notion Integration Secret

登入 Notion,進入 Integrations,創建新的 Integration 並取得 Integration Secret。

Notion API
  • 建立 Notion DB

在你的Notion頁面建立一個新的Data Base用來儲存名片資訊,Data Base ID會是DB頁面網址中 “/” 之後 “?v=” 之前的中間這段文字。

Data Base 的 Tittle 欄位名稱改為 “UUID” ,另外分別建立欄位: “Name”、”Phone”、”Email”、”Address”、”Tittle”、”Company”,欄位格式一律使用 Text。

另外需要將剛剛建立的 Integration 連結到這個Data Base,這樣我們才能透過 API 存取這裡面的資料。

Notion DB

三、 執行程式

  • 執行 setup.bat

進入Clone下來的專案目錄,並執行 setup.bat,首次執行會自動建立一個venv環境,並安裝所有使用到的套件。

  • 依序填入資訊

首次執行時程式會要求填入你所使用的API資訊,此時將稍早取得的所有 API 資訊依序填入即可,完成後會顯示 “Running on http://127.0.0.1:5000″,表示執行成功了。

首次執行setup.bat

四、 Ngrok 與 LINE Webhook 設定

這段主要是要讓我們執行的程式有一個對外服務的網址,若可以其實修改程式碼自行對外host是更好的做法,但測試上就可以用ngrok這種做法。

  • 下載並設定 Ngrok

前往 Ngrok 官方網站,下載適用於 Windows 的 Ngrok 執行檔,並將兩行指令複製下來。

下載 ngrok
  • 執行Ngrok

從ngrok 所在資料夾開啟命令提示字元(cmd),並執行剛剛從 ngrok 網站複製下來的兩條指令,不過第二條指令的 port 號 8000 要修改為 5000。執行成功後會出現一個 Forwarding 的網址,這個要複製起來貼給我們的 Linebot。

執行cmd
配置 authtoken 及執行 ngrok
ngrok 執行成功
  • 設定 Linebot Webhook

Webhook 就是當我們的 Linebot 收到訊息時要通知誰,一樣是在 LINE Developers 的 Messaging API 頁面設定,Webhook URL 填入 ngrok 的 Forwarding 網址,設定完成後可以點選 Verify 進行測試。若設定無誤的話應顯示 Success 提示視窗, ngrok 執行視窗也會顯示 200 OK。

要注意的是這個網址每次重啟 ngrok 時都是會變動的,所以要長期服務還是要想辦法用自己的 domain host。

設定 Linebot Webhook
測試 設定 Linebot Webhook

五、功能實測

  • 新增名片紀錄

透過 Linebot 對話視窗傳送名片照片,程式會將名片的資訊提取出來回復在對話視窗,並同時將資料儲存到 Notion Data Base。

新增名片紀錄
  • 查詢名片資料

直接輸入名片擁有者的名字、公司名稱、職稱等訊息片段,Linebot 會從Notion Data Base 查詢相關的名片資料,並直接回覆在對話視窗。

查詢名片資料
  • 編輯名片資料

若需編輯某一筆名片資料,可以使用 /edit 指令,格式為:

/edit <UUID> <欄位名稱> <新值>

編輯成功後,Linebot 會回應該欄位已成功更新的訊息,並重新查詢該名片的資料以確認更新是否正確。

編輯名片資料
  • 刪除名片資料

使用 /del 指令來刪除特定的名片資料,指令格式為:

/del <UUID>

刪除成功後,Linebot 會回應已成功刪除該 UUID 的訊息。

未來展望

在完成這個專案後,我有機會讓好朋友 Eric 大大看過我的成果。他提到如果能讓使用者快速、簡單、免費地將這段代碼部署到 AWS Lambda 環境中,應該會是一個非常不錯的提升。參考 Eric 大大在 lambda 部署Linebot 的文章(來源連結)後,感覺這確實是一個很有吸引力的想法。接下來可能可以實做一個可以部署到 lambda 的版本。