התחברות

API ושילובים

הפעלת חדר Cliqer Timer מהכלים שלכם דרך HTTP, וקבלת webhook חתום בכל פעם שמשהו משתנה בהופעה.

לכל חדר יש HTTP API. אפשר להפעיל ולעצור טיימרים, להציג הודעות, להוסיף זמן ולקרוא את סדר ההופעה מסקריפט, ממערכת בקרת הופעה או מכל דבר שיכול לשלוח בקשת רשת. webhook מודיע למערכת שלכם כשטיימר מתחיל או מסתיים.

דף מפתחות ה-API עם כפתור יצירת מפתח, עדיין בלי מפתחות
מפתחות API של החשבון, תחת Team בלוח הבקרה.

תחילת העבודה

יצירת מפתח API

לפתוח את מפתחות API וללחוץ על יצירת מפתח. להעתיק אותו עכשיו: הוא מוצג פעם אחת בלבד. ראו צוות ומפתחות API.

איתור מזהה החדר

זה החלק שאחרי /timer/r/ בכתובת של חדר הבקרה, לדוגמה https://cliqer.io/timer/r/<room>/control.

שליחת קריאה

לשלוח את המפתח עם כל בקשה. ping בודק שהחדר קיים.

ה-API מפעיל את אותו חדר כמו חדר הבקרה: קריאה מהכלי שלכם מופיעה בכל המסכים בבת אחת.

בקשות

כל קריאה היא https://cliqer.io/api/timer/v1/<room>/<action>. GET, POST, PUT ו-PATCH עובדים כולם. הפרמטרים נשלחים במחרוזת השאילתה, או בגוף JSON ב-POST, PUT ו-PATCH; כשיש ערך בשניהם, הגוף גובר. גם מקפים בשם הפעולה עובדים, כך ש-add-time הוא add_time. /api/timer/v0/ מקבל את אותן קריאות.

שולחים את המפתח באחת מהדרכים הבאות, שנבדקות לפי הסדר הזה:

מיקוםדוגמה
כותרת AuthorizationAuthorization: Bearer <key>
כותרת x-api-keyx-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 של החשבון שלכם יכול לעשות הכול בחדרים שבבעלותכם. לחדר יכולים להיות גם מפתחות משלו, ולכל אחד מהם חלק משלוש הרשאות:

הרשאהמאפשרת
קריאהפעולות ה-get_ ו-export.
ניהול הופעההפעלה ועצירה, זמן, האפלה, On air והודעות.
עריכהמחיקה, ייבוא, intents גולמיים וה-webhook.

קריאה שדורשת הרשאה שאין למפתח מקבלת 401. הסוד של מפתח חדר מוצג פעם אחת, כשהוא נוצר. כדי להשתמש ב-API בכלל, ה-API צריך להיות כלול בתוכנית שלכם, ראו תוכניות ומגבלות.

פעולות

timer_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, או מספר שניות בלי יחידה. seconds עובד במקום amount, וסימן מינוס מזיז אחורה. מתגים כמו on, autostart ו-replace מפרשים 0, false, off ו-no ככבוי וכל ערך אחר כפועל. בלי on ב-blackout, ההאפלה מחליפה מצב.

תגובות

כל תשובה היא JSON: {"ok": true, "message": "<action>", "data": ...} בהצלחה, {"ok": false, "message": "...", "code": "..."} בכישלון.

סטטוסהודעהסיבה
400Either timer_id OR index are requiredselect בלי טיימר.
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יש לבדוק את מזהה החדר, את הפעולה או את מזהה הטיימר.
409Refused: staleEpochהחדר התקדם בזמן הקריאה. יש לשלוח אותה שוב.
429Too many requests. Please try again later.מגבלת קצב.
503Refused: authorityOfflineהחדר נמצא באשפה. יש לשחזר אותו קודם.

מגבלת קצב: 100 קריאות בדקה לכל מפתח; קריאות בלי מפתח נספרות לפי כתובת. כל תשובה כוללת RateLimit-Limit, RateLimit-Remaining ו-RateLimit-Reset (מספר השניות עד שהדקה מתחילה מחדש).

Webhooks

הגדרת הכתובת

לקרוא ל-webhook עם url מסוג https. התשובה כוללת secret שמתחיל ב-whsec_. לשמור אותו: הוא מוצג פעם אחת בלבד.

קבלת אירועים

Cliqer Timer שולח POST לכתובת הזו כשמשהו קורה בחדר.

בדיקת החתימה

לאמת כל בקשה לפני שסומכים עליה.

ניקוי

לקרוא ל-webhook בלי url. הכתובת והסוד שלה נמחקים שניהם.

אירועמתי
timerStartedטיימר מתחיל.
timerEndedטיימר מגיע לאפס.
wrapUpYellowטיימר מגיע לנקודת התראת הסיום הצהובה שלו.
wrapUpRedטיימר מגיע לנקודת התראת הסיום האדומה שלו.
messageShownהודעה מוצגת.

הגוף הוא {"event", "roomId", "timestamp", "payload"}. הכותרת x-cliqer-timestamp מכילה את זמן Unix בשניות, ו-x-cliqer-signature מכילה sha256= ואחריו HMAC-SHA256 בהקסדצימלי של <timestamp>.<body>, עם הסוד שלכם כמפתח.

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

יש לחשב את החתימה על הגוף הגולמי בדיוק כפי שהגיע, לפני כל פענוח JSON. חלון חמש הדקות הוא לבחירתכם; הוא מונע שליחה חוזרת של בקשה ישנה.

המסירה היא ניסיון אחד עם זמן קצוב של 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

אין מודול Companion או פלאגין Stream Deck לחדרי Cliqer Timer. המודול Generic HTTP של Bitfocus Companion יכול לקרוא לפעולות שלמעלה. לטיימר של אפליקציית Cliqer לשולחן העבודה יש REST API משלו ותמיכה ב-Stream Deck, ראו Timer (שולחן עבודה) ו-טיימר המארח.

שאלות נפוצות

השלב הבא

אופליין ואמינות

מה קורה כשהרשת נופלת.

תוכניות ומגבלות

אילו תוכניות כוללות את ה-API.