BOG Banking Skill(読み取り専用)
ユーザーがBank of GeorgiaのBusiness Onlineアカウントを会話を通じて理解・管理できるように支援します。バンドルされたツール(scripts/bog.py)がデータアクセスを行いJSONを出力します。あなたは分析(分類、集計、突合、異常値の指摘)を行います。SKILL.md互換のエージェント(Claude Code、Codexなど)で動作します。
厳格なルール
- 常に読み取り専用。 ここに記載された
bog.pyコマンドのみを実行してください。支払い、送金、書類への署名、または書き込みエンドポイントの呼び出しは絶対に行わないでください。そのような操作はありません。資金移動を依頼された場合は、このスキルは読み取り専用であり、ユーザー自身がBOGアプリで行う必要があると伝えてください(準備の手伝いは可能です)。 - 金融データは慎重に扱い、求められない限り生のテーブルをそのまま表示するのではなく要約してください。
- 認証情報を尋ねるときは、Client Secretを返信に絶対に表示せず、印刷もしないでください。ツールはローカルに保存します。
ツールの実行
python3 scripts/bog.py <コマンド> [オプション]
実行ごとに1つの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つが必要であることを伝えます。
ステップ2 — ログイン。 Business Onlineの認証情報でhttps://bonline.bog.ge/ にログインするよう依頼してください。
ステップ3 — APIキーの作成。 https://bonline.bog.ge/admin/api を開き、Add newをクリックするよう指示します。以下を設定:
- Integration type — Client Credentials Flow(Client ID + Client Secretで自動認証、ユーザー名やパスワード不要のタイプ)を選択。
- API client name — 任意の名前(例:インターネットバンキングのユーザー名、または
Banking Assistant)。 - ワンタイムコード(OTP) で確認。
ステップ4 — キーのコピー。 BOGがClient IDとClient Secretを表示します(画面によってはPublic Key / Secret Keyと表記される場合があります。同じ値です)。ユーザーに両方を貼り付けてもらい、保存します。秘密情報がコマンドラインに残らないよう、JSONをstdinからパイプで渡します:
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 — 最初の口座を追加。 1つの口座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を収集します。一度に1つ、ユーザーが希望する数だけ追加できます。追加は常にマージ(既存のIBANは保持)です。IBANは永続化され、後続の呼び出しで再利用されます。一度保存されたIBANを再度尋ねたり、whoamiがokになった後に認証情報を再度尋ねたりしないでください。
- 「別の口座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を削除(または1通貨のみ) |
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とその保有通貨をカバーします(通貨を自動検出)。--accountや--currencyはユーザーが特定の要求をした場合のみ渡してください(「USD残高」「口座GE..123」)。これらのコマンドはリスト(IBAN+通貨ごとに1エントリ)を返します。エントリにはその口座が保有していない通貨に対するerrorが含まれる場合があります。その場合はスキップしてください。
集約する際は、異なる通貨の金額を決して合計しないでください。通貨ごとに別々に報告してください(例:GEL合計とUSD合計)。
例
- 「残高は?」→
balance(全口座+全通貨) - 「USD残高は?」→
balance --currency USD - 「先月の取引」→
statement --from 2026-05-01 --to 2026-05-31 - 「<仕入先>にいくら支払いましたか?」→
statementを実行し、自分でフィルタリング・集計。 - 「何か異常は?」→
statementを実行し、重複、端数、新しい取引相手、予想外の高額をフラグ付け。 - 「USDレートは?」→
rates --currency USD
モックモード
--mockを渡すか(またはBOG_MOCK=1を設定)、銀行アクセスなしで現実的なサンプルデータを返します。ユーザーの認証情報が準備できる前にスキルをデモするのに便利です。結果がサンプルデータである場合は常にユーザーに伝えてください。
結果の表示
- 金額は桁区切りと小数点以下2桁でフォーマット(例:
18,430.75 GEL)。 - 答えで始め、次に短い内訳、グループ化の前提を述べます。
- 突合の場合は、可能性のある重複、異常に高額な金額、新規/不明な取引相手、端数での支払いを明示的にフラグ付けします。
完全な認証情報の手順は reference/getting-credentials.md、基盤となるBOGエンドポイントについては reference/endpoints.md を参照してください。