Site icon KerKer 的模組世界

[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 AI Studio,創建 API Key,這會用於將名片照面提交給 Google Gemini 模型進行識別並回傳 Json 格式資料。

Google API

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

Line Access Token
Line Channel Secret

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

Notion API

在你的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

三、 執行程式

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

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

首次執行setup.bat

四、 Ngrok 與 LINE Webhook 設定

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

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

下載 ngrok

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

執行cmd
配置 authtoken 及執行 ngrok
ngrok 執行成功

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 的版本。

Exit mobile version