0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Github ActionsでAIのAPIトークン消費量を毎日telegramに通知する

0
Last updated at Posted at 2026-04-28

トークン従量課金制のAPIでAIを使っていて、日々どれくらい使ったかを自動でサクッと確認したかったのでtelegramに自動で送るようにしてみました。

OpenRouterのusageをGitHub Actionsで毎日定期実行してTelegramに送っています。

やっていることはシンプルで、

  1. OpenRouter の activity API から利用実績を取得する
  2. 過去 3 日分の usage を集計する
  3. Telegram Bot 経由でメッセージを送る

という流れです。

できあがり

毎日 Telegram にこんな感じで届きます。

用意する変数

いずれもGithub リポジトリの Secrets に入れます。

telegramの2つについてはこちらの↓手順で取得できます

ワークフロー全体

実装は GitHub リポジトリの .github/workflows/openrouter-usage.yml に置きました。

  name: OpenRouter usage notify

  on:
    schedule:
      - cron: "5 15 * * *" # 0:05(JST)
    workflow_dispatch:

  jobs:
    notify:
      runs-on: ubuntu-latest
      environment: PROD
      steps:
        - name: Compute & post to Telegram
          env:
            TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
            TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
            OPENROUTER_PROVISIONING_KEY: ${{ secrets.OPENROUTER_PROVISIONING_KEY }}
          run: |
            set -euo pipefail

            : "${TELEGRAM_BOT_TOKEN:?TELEGRAM_BOT_TOKEN is missing}"
            : "${TELEGRAM_CHAT_ID:?TELEGRAM_CHAT_ID is missing}"
            : "${OPENROUTER_PROVISIONING_KEY:?OPENROUTER_PROVISIONING_KEY is missing}"

            DATA=$(curl -sS -H "Authorization: Bearer $OPENROUTER_PROVISIONING_KEY" \
              https://openrouter.ai/api/v1/activity)

            TEXT='OpenRouter Usage'
            for offset in 3 2 1; do
              DAY=$(TZ=Asia/Tokyo date -d "$offset days ago" +%Y-%m-%d)
              USAGE=$(echo "$DATA" | jq -r --arg d "$DAY" '
                (.data // .items // [])
                | map(select((.date // "") | startswith($d)))
                | (map(.usage // 0) | add) // 0
              ')
              USAGE=$(printf '%.2f' "$USAGE")
              TEXT+=$'\n'
              TEXT+="$DAY: \$${USAGE}"
            done

            curl -sS -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
              -H 'Content-Type: application/json' \
              -d "$(jq -n --arg chat_id "$TELEGRAM_CHAT_ID" --arg text "$TEXT" \
                '{chat_id:$chat_id, text:$text}')" >/dev/null

ポイント

1. 定期実行は GitHub Actions の schedule

on:
  schedule:
    - cron: "5 15 * * *"

GitHub Actions の cron は UTC 基準です。
なのでこの設定は、JST だと毎日 00:05 に実行されます。
(時間はぴったりではないので注意。〜数十分のラグがあります)

2. OpenRouter の activity API を叩く

curl -sS -H "Authorization: Bearer $OPENROUTER_PROVISIONING_KEY" \
  https://openrouter.ai/api/v1/activity

OpenRouter 側の activity API から usage 情報を取得します。
認証には provisioning key を使っています。

3. 過去 3 日分を集計する

for offset in 3 2 1; do

ここでは「昨日、一昨日、その前日」の 3 日分を出しています。

日付は JST 基準で計算しています。

DAY=$(TZ=Asia/Tokyo date -d "$offset days ago" +%Y-%m-%d)

GitHub Actions の runner は Ubuntu なので、date -d が使えます。

4. jq で JSON を集計する

USAGE=$(echo "$DATA" | jq -r --arg d "$DAY" '
  (.data // .items // [])
  | map(select((.date // "") | startswith($d)))
  | (map(.usage // 0) | add) // 0
')

ここでは API レスポンスの構造差異に少しだけ耐えられるようにしています。

  • .data があればそれを使う
  • なければ .items を見る
  • date が指定した日付で始まるものだけを対象にする
  • usage を合計する

もし該当データがなければ 0 を返します。

5. Telegram Bot API に送信する

curl -sS -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H 'Content-Type: application/json' \
  -d "$(jq -n --arg chat_id "$TELEGRAM_CHAT_ID" --arg text "$TEXT" \
    '{chat_id:$chat_id, text:$text}')" >/dev/null

Telegram への送信は sendMessage を使っています。
JSON の組み立ては jq -n に任せているので、文字列のエスケープで事故りにくいです。

実装してみてよかった点

  • OpenRouter の usage を web ページから手動で見に行かなくてよくなった
  • Telegram で流れるので見落としにくい
  • GitHub Actions だけで完結するので、別サーバーを立てる必要がない

まとめ

GitHub Actions を使うと、OpenRouter の usage を毎日自動で Telegram に送る仕組みをかなり簡単に作れます。
slackやLINEに送るなど拡張も可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?