BOG 銀行技能(唯讀)
透過對話協助使用者了解並管理其 Bank of Georgia Business Online 帳戶。內建工具(scripts/bog.py)負責資料存取並輸出 JSON;您則進行分析(分類、加總、對帳、標記異常)。適用於任何相容 SKILL.md 的代理(Claude Code、Codex 等)。
嚴格規則
- 永遠唯讀。 僅執行此處列出的
bog.py指令。絕不發送付款、轉帳、簽署文件或呼叫任何寫入端點——此處沒有這樣的端點。若被要求動用資金,請說明此技能為唯讀,使用者必須自行在其 BOG 應用程式中操作(您仍可協助他們準備)。 - 謹慎處理金融資料;除非被要求,否則以摘要呈現而非傾印原始表格。
- 當您詢問憑證時,絕不在回覆中回顯 Client Secret,也不要把它印出來。該工具會將其儲存在本地端供您使用。
執行工具
python3 scripts/bog.py <command> [options]
每次執行會輸出一個 JSON 物件:command、mode(live/mock)、ok,以及 data 或 error+message。解析後,再以白話回答。
每次對話:先檢查狀態
在執行任何需要資料的操作之前,請先執行:
python3 scripts/bog.py whoami
ok: true且data.accounts_configured> 0 → 已完全設定;直接處理使用者的請求。絕不重新詢問憑證或已儲存的 IBAN。ok: true但accounts_configured為0→ 金鑰可用,但尚無帳戶 → 執行 步驟 6 的入職流程(新增 IBAN)。error: "no_keys"→ 全新使用者 → 執行下方的首次設定。error: "invalid_credentials"→ 金鑰被拒絕 → 請見下方的步驟 5。
首次設定(入職流程)—— 引導使用者完成此流程一次
態度要親切,並逐步進行。完整的逐步點擊版本(包含確切的 BOG 畫面與連結)位於 reference/getting-credentials.md —— 請用自己的話轉述,並提供使用者下方的連結。
步驟 1 — 說明與安撫。 告訴使用者此技能是唯讀(絕不能動用資金),並且您需要 Bank of Georgia 的兩項資訊:Client ID 和 Client Secret。
步驟 2 — 登入。 請使用者使用其 Business Online 憑證,登入其商務銀行網站 **https://bonline.bog.ge/**。
步驟 3 — 建立 API 金鑰。 請使用者開啟 https://bonline.bog.ge/admin/api 並點擊 新增,然後:
- 整合類型 — 選擇 Client Credentials Flow(自動授權類型,使用 Client ID + Client Secret,無需使用者名稱或密碼)。
- API 客戶端名稱 — 任意名稱(例如其網路銀行使用者名稱,或
Banking Assistant)。 - 使用一次性驗證碼(OTP) 確認。
步驟 4 — 複製金鑰。 BOG 接著會顯示 Client ID 和 Client Secret(部分畫面標示為 Public Key / Secret Key —— 內容相同)。請使用者貼上兩者,然後儲存 —— 透過 stdin 傳入 JSON,這樣機密就不會出現在命令列上:
python3 scripts/bog.py save-credentials <<'JSON'
{"client_id":"<Client ID>","client_secret":"<Client Secret>"}
JSON
絕不回顯 Client Secret。
步驟 5 — 確認登入。 再次執行 whoami。
ok: true→ 金鑰可用。繼續進行步驟 6。error: "invalid_credentials"→ 可能是金鑰錯誤,或者使用者的 BOG 商務銀行專員尚未啟用 API 存取權限。請告知使用者這兩種可能性,並提供重新輸入的選項(必要時先清除:python3 scripts/bog.py forget-credentials)。
步驟 6 — 新增第一個帳戶。 詢問一個帳戶 IBAN(例如 GE..BG...)。此資訊可在其對帳單和 BOG 應用程式中找到,而且並非機密。無需詢問幣別。然後:
python3 scripts/bog.py add-account --iban <IBAN>
python3 scripts/bog.py discover --account <IBAN>
discover 會自動偵測該 IBAN 持有的幣別(GEL/USD/EUR/GBP)。
步驟 7 — 首次即時結果。 執行 balance 並以美觀方式呈現(請見呈現結果)。恭喜他們 —— 設定完成 —— 然後詢問是否要新增另一個帳戶,並回答他們原本的問題。
想在準備好金鑰之前先展示?
python3 scripts/bog.py --mock balance會傳回逼真的範例資料,無需存取銀行(請務必說明這是範例資料)。
後續設定 / 管理帳戶
BOG 無法列出公司的帳戶,因此您需要向使用者收集 IBAN —— 一次一個,僅收集他們想要的部分。新增時一律是合併(保留現有 IBAN)。IBAN 會持續存在,並在後續每次呼叫時重複使用 —— 一旦 whoami 回傳 ok,絕不再重新詢問已儲存的 IBAN,也絕不再重新詢問憑證。
- "新增另一個帳戶 GE.." →
add-account --iban <IBAN>然後discover --account <IBAN>(然後詢問是否還要再加) - "移除 / 忘記帳戶 GE.." →
remove-account --iban <IBAN>(僅在使用者明確要求時執行) - "你有哪些帳戶?" →
accounts
唯讀指令
| 指令 | 回傳內容 |
|---|---|
whoami | 憑證是否存在及是否可用 |
add-account --iban GE.. [--currency GEL] | 新增一個 IBAN(合併;保留直到被移除) |
remove-account --iban GE.. [--currency GEL] | 移除一個 IBAN(或僅移除一個幣別) |
discover [--account IBAN] [--currencies GEL,USD] | 探查已儲存 IBAN 的幣別,並儲存它們 |
accounts | 已儲存的 IBAN 及其幣別 |
balance [--account IBAN] [--currency GEL] | 可用餘額 + 當前餘額 |
statement [--account IBAN] [--currency GEL] [--from YYYY-MM-DD] [--to YYYY-MM-DD] | 指定期間的交易記錄(自動分頁) |
today [--account IBAN] [--currency GEL] | 當日盤中活動 |
rates [--currency USD] | NBG 官方匯率 + BOG 商業買入/賣出價 |
預設 = 全部。 如果您沒有傳入 --account/--currency,指令會自動涵蓋所有已設定的 IBAN 及其持有的每種幣別(它會自動偵測幣別)。僅在使用者指定時(例如「我的美元餘額」、「帳戶 GE..123」)才傳入 --account 和/或 --currency。這些指令會回傳一個清單(每個 IBAN+幣別一個條目);某個條目可能因該帳戶未持有該幣別而帶有 error —— 直接跳過即可。
彙總時,絕不將不同幣別的金額相加 —— 請分別報告每種幣別(例如 GEL 總額和 USD 總額)。
範例
- "我的餘額是多少?" →
balance(涵蓋所有帳戶 + 幣別) - "我的美元餘額?" →
balance --currency USD - "上個月的交易記錄" →
statement --from 2026-05-01 --to 2026-05-31 - "我付給<供應商>多少錢?" → 執行
statement,然後自行篩選/加總。 - "有任何異常嗎?" → 執行
statement,然後標記重複項目、整數金額、新的交易對手、異常大的金額。 - "美元匯率?" →
rates --currency USD
模擬模式
傳入 --mock(或設定 BOG_MOCK=1)以回傳逼真的範例資料,無需存取銀行 —— 可在使用者準備好憑證之前用來展示此技能。當結果為範例資料時,務必告知使用者。
呈現結果
- 金額格式請使用千分位分隔符號 + 2 位小數(例如
18,430.75 GEL)。 - 先給答案,再附上簡短細項說明;說明分組假設。
- 進行對帳時,明確標記可能的重複項目、異常大的金額、新的/不明的交易對手,以及整數付款。
請參閱 reference/getting-credentials.md 取得完整的憑證操作說明,以及 reference/endpoints.md 了解底層的 BOG 端點。