コンテンツにスキップ

API ポーリング

API ポーリングを使うと、エージェントが外部 REST API から定期的にデータを取得できます。外部システムからプッシュを受け取る Webhook とは異なり、ポーリングはスケジュールに基づいてデータをプルします——ブラウザが直接 HTTP リクエストを実行します。

設定、認証情報、スケジューリングはすべてブラウザ内で完結します。サーバーはポーリングの存在を一切認識しません。

API Poll データフロー: ブラウザが外部 API を呼び出し、マッピングと diff チェックを適用後、Bridge Webhook 経由で AnySoul サーバーに送信
  1. ブラウザの setInterval タイマーが発火
  2. ブラウザが外部 API を直接呼び出す(認証情報は AnySoul サーバーを経由しない)
  3. レスポンスをイベントフィールドにマッピング(Webhook と同じテンプレートエンジン)
  4. オプションの SHA-256 diff チェックで重複データをスキップ
  5. マッピング結果は自動作成された Bridge Webhook を通じてサーバーに送信——既存の Webhook ingest endpoint を再利用し、サーバー側の変更はゼロ
  1. エージェント設定 → API Poll を開く
  2. 追加 をクリック
  3. 以下を入力:
    • 名前 — この poll のラベル(例: tokyo-weatherbtc-price
    • URL — 呼び出す API endpoint(http://localhost も OK)
    • メソッドGET または POST
    • 認証認証モードを参照
    • 間隔 — ポーリング間隔(1 秒〜24 時間)
    • JSON Path — レスポンスからネストされたオブジェクトを抽出(例: data.items
    • 重複排除モードFull(毎回イベント作成)または Diff(データ変更時のみ)
  4. 作成 をクリック

新しい poll はテストモードで作成されます。Test Now でレスポンスを確認し、マッピングを設定してから正式上線してください。

poll がテストモードの場合:

  1. poll カードの Test Now をクリック
  2. ブラウザが外部 API を呼び出し、生のレスポンスを表示
  3. マッピング ダイアログでレスポンスからイベントフィールドへのマッピングを設定
  4. ライブプレビューを確認
  5. 正式上線 をクリックして有効化——ポーリングタイマーが開始し、成功するたびにイベントが作成される

テストモードでは、イベントを作成せずに設定を反復できます。

モードヘッダー / パラメータユースケース
None公開 API、localhost サービス
Bearer TokenAuthorization: Bearer <token>OAuth トークンまたは固定 Bearer トークンを使う API
API Key (Header)カスタムヘッダー(例: X-API-Key特定ヘッダーに key が必要な API
API Key (Query)クエリパラメータ(例: ?appid=xxxOpenWeatherMap のようにクエリ文字列で key を渡す API

すべての認証情報は IndexedDB に保存され、ブラウザの外に出ることはありません。

マッピングダイアログは Webhook のマッピングエディターと同一です:

  • 左パネル — テストレスポンスの JSON ツリー。フィールドをクリックするとマッピング式が自動挿入されます。
  • 右パネル — 5 つのターゲットフィールド:
フィールドキー必須
Platformplatformいいえapi-poll
Elementelementいいえweather
Event Typeevent_typeいいえupdate
Titletitleはい{{ payload.weather.0.description }} — {{ payload.main.temp }}°C
Payloadpayloadいいえ{{ payload.main }}

テンプレート構文は共通です——テンプレート構文を参照。

マッピング前に API レスポンスからネストされた値を抽出する JSON Path を指定します。例えば、レスポンスが:

{
"status": "ok",
"data": {
"temperature": 12.5,
"humidity": 80
}
}

JSON Path を data に設定すると、{ "temperature": 12.5, "humidity": 80 } がマッピング入力として抽出されます。

空にするとレスポンスオブジェクト全体が使われます。

モード動作
Full成功するたびにイベントを作成
Diffマッピング結果の SHA-256 ハッシュを前回と比較。マッピング出力が変化した場合のみイベントを作成。

Diff モードは、ほとんど同じデータを返す API(天気、システムステータスなど)に便利です。ハッシュはマッピング結果に対して計算されるため、マッピングしていないフィールド(タイムスタンプやリクエスト ID など)が変わっても重複イベントは発生しません。

ステータスバッジ動作
テストアンバーTest Now 可能、タイマー未起動、イベント作成なし
アクティブグリーンスケジュールに従いタイマー実行、成功ごとにイベント作成
無効グレータイマー停止、リクエストなし

利用可能な遷移:

  • テスト → 正式上線(アクティブ)または無効化
  • アクティブ → 一時停止(無効)またはテストモード(テスト)
  • 無効 → 有効化(アクティブ)

poll が 5 回連続で失敗すると自動的に無効化されます。poll カードにエラーメッセージが表示されます。原因(URL、認証情報、CORS)を修正してから手動で再有効化してください。

リクエストはブラウザから発信されるため、CORS ポリシーの対象となります:

ターゲットCORS の挙動状況
localhost / LAN通常 CORS 制限なし動作する
公開 API(CoinGecko、OpenWeatherMap 等)多くが Access-Control-Allow-Origin: * を設定通常動作する
制限付き APIブラウザリクエストをブロックする可能性動作しない場合あり

Test Now リクエストが CORS エラーで失敗した場合、エラーメッセージに表示されます。回避策:

  1. 代わりに Webhook を使用 — API が Webhook コールバックをサポートしている場合
  2. CORS プロキシを使用 — CORS ヘッダーを追加する軽量なローカルプロキシ
  3. ブラウザ拡張機能 — 拡張機能は CORS 制限の対象外

poll 設定は JSON としてエクスポートし、別のデバイスやブラウザにインポートできます。

  • エクスポート: 現在のエージェントのすべての poll 設定を含む JSON ファイルをダウンロード。ランタイム状態(最終ポーリング時刻、エラー)は除去、認証情報は含まれます。
  • インポート: JSON ファイルを読み込み、新しい poll エントリを作成。インポートされた poll はテストモードで開始。既存の poll は上書きされません。
制限
最小ポーリング間隔1 秒
最大ポーリング間隔86400 秒(24 時間)
エージェントあたりの最大 poll 数10
リクエストタイムアウト10 秒
最大レスポンスサイズ(マッピング用)50 KB
最大イベントペイロードサイズ10 KB
Webhook(プッシュ)API Poll(プル)
方向外部 → サーバーブラウザ → 外部 → ブラウザ → サーバー
トリガー外部システムが POST 送信ブラウザタイマー(setInterval)
稼働条件サーバー稼働中(常時)ブラウザ/Electron が開いている時
設定の保存先サーバー(D1 データベース)ブラウザ(IndexedDB)
認証情報サーバーが送信元を検証ブラウザが外部 API に送信
localhost到達不可ネイティブに到達可能
クロスデバイス自動同期インポート/エクスポート JSON
マッピング同じテンプレートエンジン同じテンプレートエンジン
サーバー変更Webhook テーブル + ルートなし