邊做邊學,順便留個紀錄。
一切的起源,都是因為我偶然看到 Evanlin 大大的文章(來源連結)。這篇文章介紹了如何使用 Golang 開發一個結合 Gemini Pro Vision 的名片管理聊天機器人。我想在原有的基礎上增加刪除和修改名片資料的功能,由於我對 Golang 並不熟悉,因此我決定以 Python 重寫這個專案,也算是一種開發練習。
目錄:
一、 取得程式碼
從 GitHub 取得程式碼
在選定的資料夾開啟命令提示字元(cmd),並執行以下指令從 GitHub Clone專案:
git clone https://github.com/KerKerJoking/BusinessCard_LineBot_Gemini_Notion
二、 Gemini、Line、Notion 環境準備
- 取得 Google API Key
前往 Google AI Studio,創建 API Key,這會用於將名片照面提交給 Google Gemini 模型進行識別並回傳 Json 格式資料。
- 取得 LINE Access Token / Channel Secret
登入 LINE Developers,如果還沒有建立Bot就先建立一個,Access Token 可以在 Messaging API 頁面找到,Channel Secret 可以在 Basic settings 頁面找到。
- 取得 Notion Integration Secret
登入 Notion,進入 Integrations,創建新的 Integration 並取得 Integration Secret。
- 建立 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 存取這裡面的資料。
三、 執行程式
- 執行 setup.bat
進入Clone下來的專案目錄,並執行 setup.bat,首次執行會自動建立一個venv環境,並安裝所有使用到的套件。
- 依序填入資訊
首次執行時程式會要求填入你所使用的API資訊,此時將稍早取得的所有 API 資訊依序填入即可,完成後會顯示 “Running on http://127.0.0.1:5000″,表示執行成功了。
四、 Ngrok 與 LINE Webhook 設定
這段主要是要讓我們執行的程式有一個對外服務的網址,若可以其實修改程式碼自行對外host是更好的做法,但測試上就可以用ngrok這種做法。
- 下載並設定 Ngrok
前往 Ngrok 官方網站,下載適用於 Windows 的 Ngrok 執行檔,並將兩行指令複製下來。
- 執行Ngrok
從ngrok 所在資料夾開啟命令提示字元(cmd),並執行剛剛從 ngrok 網站複製下來的兩條指令,不過第二條指令的 port 號 8000 要修改為 5000。執行成功後會出現一個 Forwarding 的網址,這個要複製起來貼給我們的 Linebot。
- 設定 Linebot Webhook
Webhook 就是當我們的 Linebot 收到訊息時要通知誰,一樣是在 LINE Developers 的 Messaging API 頁面設定,Webhook URL 填入 ngrok 的 Forwarding 網址,設定完成後可以點選 Verify 進行測試。若設定無誤的話應顯示 Success 提示視窗, ngrok 執行視窗也會顯示 200 OK。
要注意的是這個網址每次重啟 ngrok 時都是會變動的,所以要長期服務還是要想辦法用自己的 domain host。
五、功能實測
- 新增名片紀錄
透過 Linebot 對話視窗傳送名片照片,程式會將名片的資訊提取出來回復在對話視窗,並同時將資料儲存到 Notion Data Base。
- 查詢名片資料
直接輸入名片擁有者的名字、公司名稱、職稱等訊息片段,Linebot 會從Notion Data Base 查詢相關的名片資料,並直接回覆在對話視窗。
- 編輯名片資料
若需編輯某一筆名片資料,可以使用 /edit
指令,格式為:
/edit <UUID> <欄位名稱> <新值>
編輯成功後,Linebot 會回應該欄位已成功更新的訊息,並重新查詢該名片的資料以確認更新是否正確。
- 刪除名片資料
使用 /del
指令來刪除特定的名片資料,指令格式為:
/del <UUID>
刪除成功後,Linebot 會回應已成功刪除該 UUID 的訊息。
未來展望
在完成這個專案後,我有機會讓好朋友 Eric 大大看過我的成果。他提到如果能讓使用者快速、簡單、免費地將這段代碼部署到 AWS Lambda 環境中,應該會是一個非常不錯的提升。參考 Eric 大大在 lambda 部署Linebot 的文章(來源連結)後,感覺這確實是一個很有吸引力的想法。接下來可能可以實做一個可以部署到 lambda 的版本。