サインイン

API と連携

自社のツールから HTTP で Cliqer Timer のルームを操作し、進行が動くたびに署名付きの Webhook を受け取れます。

すべてのルームに HTTP API があります。スクリプト、ショーコントロールシステム、その他 Web リクエストを送れるものなら何からでも、タイマーの開始と停止、メッセージの表示、時間の追加、ランダウンの読み取りができます。タイマーが開始または終了すると、Webhook でシステムに通知します。

API キーのページ。「キーを作成」ボタンがあり、キーはまだありません
アカウントの API キー(ダッシュボードのチーム内)。

はじめに

API キーを作成する

API キーを開き、キーを作成 をクリックします。キーは一度しか表示されないため、すぐにコピーしてください。詳しくは チームと API キー をご覧ください。

ルーム ID を確認する

コントロールルームのアドレスで /timer/r/ の後ろにある部分です。例:https://cliqer.io/timer/r/<room>/control

呼び出してみる

リクエストごとにキーを送信します。ping でルームが存在するかを確認できます。

API はコントロールルームと同じルームを操作します。ツールからの呼び出しは、すべての画面に同時に反映されます。

リクエスト

すべての呼び出しは https://cliqer.io/api/timer/v1/<room>/<action> の形式です。GET、POST、PUT、PATCH のいずれも使えます。パラメーターはクエリ文字列で渡すか、POST、PUT、PATCH では JSON ボディで渡します。両方に同じパラメーターがある場合はボディが優先されます。アクション名にはダッシュも使えるため、add-time は add_time と同じです。/api/timer/v0/ でも同じ呼び出しを受け付けます。

キーは次のいずれかで送信します。この順番で確認されます。

場所例
Authorization ヘッダーAuthorization: Bearer <key>
x-api-key ヘッダーx-api-key: <key>
api_key クエリ?api_key=<key>。アドレスはログに残るため、できるだけ避けてください。
curl -X POST https://cliqer.io/api/timer/v1/<room>/add_time \
  -H "Authorization: Bearer $CLIQER_KEY" \
  -H "content-type: application/json" \
  -d '{"timer_id": "<timer>", "amount": "2m"}'

キーと権限

アカウントの API キーは、自分が所有するルームですべての操作ができます。ルームに専用のキーを持たせることもでき、各キーには次の 3 つの権限から必要なものを付与します。

権限許可される操作
読み取りget_ アクションと export。
ショーコールトランスポート、時間、ブラックアウト、オンエア、メッセージ。
編集削除、インポート、raw インテント、Webhook。

キーに付与されていない権限が必要な呼び出しには 401 が返されます。ルームキーのシークレットは、作成時に一度だけ表示されます。API を利用するには、プランに API が含まれている必要があります。プランと制限 をご覧ください。

アクション

timer_id は ID でタイマーを指定し、index は 1 から数えた位置で指定します。両方を送った場合は timer_id が優先されます。どちらも省略すると、現在のタイマーが対象になります。

アクション返す内容
get_roomタイトル、日付、タイムゾーン、設定。
get_status現在実行中のもの。
get_timersランダウン。
get_messagesメッセージ。
get_questions聴衆からの質問。
get_connections接続中のデバイス。
get_logsルームのログ。limit、offset。
exportルーム全体を cliqer-timer-<room>.json としてダウンロード。

時間量 は 30s、5m、1h、250ms、または秒数の数値だけで指定します。amount の代わりに seconds も使え、マイナス記号を付けると逆方向になります。on、autostart、replace などの スイッチ は、0、false、off、no をオフ、それ以外をオンとして扱います。blackout で on を省略すると切り替えになります。

レスポンス

すべての応答は JSON です。成功時は {"ok": true, "message": "<action>", "data": ...}、失敗時は {"ok": false, "message": "...", "code": "..."} が返されます。

ステータスメッセージ理由
400Either timer_id OR index are requiredタイマーを指定せずに select を呼び出した。
400amount is required, like 30s, 5m or 1h時間量がない、または読み取れない。
400Refused: invalidルームが変更を適用できなかった。
401Access Denied: Valid API key requiredキーがない、キーが間違っている、または権限が不足している。
403The API is not in this planルームのプランに API が含まれていない。
403Refused: forbidden、Refused: readOnly、Refused: limitReached許可されていない、読み取り専用のルーム、またはプランの上限。
404Room not found、Unknown action <name>、Timer not foundルーム ID、アクション、タイマー ID を確認してください。
409Refused: staleEpoch呼び出しの処理中にルームの状態が先に進んだ。もう一度送信してください。
429Too many requests. Please try again later.レート制限。
503Refused: authorityOfflineルームがゴミ箱にある。先に復元してください。

レート制限: キーごとに 1 分あたり 100 回です。キーなしの呼び出しはアドレスごとにカウントされます。各応答には RateLimit-Limit、RateLimit-Remaining、RateLimit-Reset(次の 1 分が始まるまでの秒数)が含まれます。

Webhook

アドレスを設定する

https の url を指定して webhook を呼び出します。応答には whsec_ で始まる secret が含まれます。一度しか表示されないため、必ず保存してください。

イベントを受信する

ルームで何かが起きると、Cliqer Timer がそのアドレスに POST を送信します。

署名を検証する

すべてのリクエストを、信頼する前に検証してください。

解除する

url を指定せずに webhook を呼び出します。アドレスとシークレットの両方が削除されます。

イベントタイミング
timerStartedタイマーが開始したとき。
timerEndedタイマーがゼロになったとき。
wrapUpYellowタイマーが黄色の終了予告ポイントに達したとき。
wrapUpRedタイマーが赤色の終了予告ポイントに達したとき。
messageShownメッセージが表示されたとき。

ボディは {"event", "roomId", "timestamp", "payload"} です。x-cliqer-timestamp ヘッダーには Unix 時間(秒)が入り、x-cliqer-signature には sha256= に続けて、シークレットをキーとした <timestamp>.<body> の HMAC-SHA256 の 16 進値が入ります。

# Recompute the signature of a saved body.
printf '%s.%s' "$TIMESTAMP" "$(cat body.json)" \
  | openssl dgst -sha256 -hmac "$WHSEC" -hex

署名は、JSON を解析する前の、受信したままの生のボディで計算してください。5 分という時間枠は任意で決められます。古いリクエストが再送(リプレイ)されるのを防ぐためのものです。

配信は 1 回のみで、タイムアウトは 5 秒です。リダイレクトはたどらず、プライベートネットワークに解決されるアドレスへの配信は破棄されます。取りこぼしたイベントが重要な場合は、get_status を読み取って最新の状態を取得してください。

短縮リンク

GET https://cliqer.io/api/timer/link/<code> は、短縮リンクのコードを対応するルームに変換し、{"ok": true, "data": {"roomId", "link"}} を返します。不明、無効化済み、期限切れのコード、またはパスワードが間違っている場合は 404 Link not found が返されます。パスワード付きのリンクでは、パスワードをアドレスに含めず、必ず x-link-password ヘッダーで送信してください。

Companion と Stream Deck

Cliqer Timer のルーム用の Companion モジュールや Stream Deck プラグインはありません。Bitfocus Companion の Generic HTTP モジュールで上記のアクションを呼び出せます。Cliqer デスクトップアプリに内蔵されたタイマーには独自の REST API と Stream Deck 対応があります。Timer(デスクトップ) と ホストのタイマー をご覧ください。

よくある質問

次へ

オフラインと信頼性

ネットワークが切断されたときの動作。

プランと制限

API が含まれるプラン。