Webhooks של StreamLive Pro למפתחים: מוסיפים כתובת https בהגדרות, מקבלים את stream.started ואירועים נוספים, ובודקים את חתימת HMAC-SHA256 ב-Node או ב-Python.
Webhook מאפשר ל-StreamLive Pro להודיע לשרת שלכם ברגע שמשהו קורה בחשבון: שידור התחיל, שידור הסתיים, תשלום עבר. מוסיפים כתובת https בהגדרות, בחלק "API ו-Webhooks", מסמנים את האירועים הרצויים, ומאותו רגע כל אירוע נשלח לכתובת כבקשת POST חתומה עם גוף JSON קצר. Webhooks הם חלק ממסלול Studio.
זה עמוד העיון: איך מוסיפים Webhook, מה יש בכל בקשה, איך בודקים את החתימה, ומה בדיוק כללי השליחה. לרעיון הכללי ראו מה זה Webhook? כתובת ברשת שמקבלת הודעות. לקריאה ל-API עם מפתח ראו מפתחות API למפתחים: יצירה, שימוש וביטול.
https://example.com/hooks/streamlive.
כדי להסיר Webhook לוחצים מחק לידו ומאשרים. אפשר להחזיק עד 10 Webhooks בחשבון.
| אירוע | מתי נשלח | שדות ב-data, לדוגמה |
|---|---|---|
| stream.started | שידור עולה לאוויר (מהסטודיו, מתוכנת שידור ברגע שהזרם זוהה, או שידור מתוזמן) | stream_id, title |
| stream.ended | שידור נעצר ב-StreamLive Pro (עצירת השידור, או עצירה דרך ה-API) | stream_id, title, duration (בשניות) |
| payment.succeeded | תשלום של החשבון עבר, תשלום ראשון או חידוש | plan, currency, provider, ולפעמים renewal, plan_change, invoice_url |
| subscription.canceled | המנוי בוטל | provider |
| destination.disconnected | באמצע שידור, בדיקת התקינות שלנו מגלה שהשידור לאחד הערוצים נכשל, ומתחילה לחבר אותו מחדש | stream_id, dead (רשימה עם platform, target_key ו-state) |
השדות יכולים להשתנות בין ספקי תשלום, ושדות חדשים עשויים להתווסף. קוראים את השדות שצריך ומתעלמים מהשאר.
כל שליחה היא POST עם הכותרות (headers) האלה:
| כותרת | ערך |
|---|---|
| Content-Type | application/json |
| User-Agent | StreamLivePro-Webhooks/1.0 |
| X-StreamLive-Event | שם האירוע, למשל stream.started |
| X-StreamLive-Signature | HMAC-SHA256 של הגוף הגולמי עם הסוד שלכם, ב-hex באותיות קטנות |
הגוף הוא JSON עם שלושה שדות:
{"event":"stream.started","timestamp":"2026-11-05T18:00:00.000Z","data":{"stream_id":"...","title":"Weekly class"}}
השדה timestamp הוא זמן יצירת ההודעה, ב-UTC.
מחשבים HMAC-SHA256 על הבייטים הגולמיים של הגוף, בדיוק כפי שהגיעו, כשהמפתח הוא הסוד (הטקסט של הסוד כפי שהוצג לכם), ומשווים את תוצאת ה-hex לכותרת X-StreamLive-Signature. לא מפענחים ומקודדים מחדש את ה-JSON לפני כן: רווח אחד ששונה שובר את ההתאמה. ההשוואה צריכה להיות בזמן קבוע (constant-time).
Node.js (Express):
const express = require('express');
const crypto = require('crypto');
const app = express();
const SECRET = process.env.STREAMLIVE_WEBHOOK_SECRET;
app.post('/hooks/streamlive', express.raw({ type: 'application/json' }), (req, res) => {
const got = Buffer.from(req.get('X-StreamLive-Signature') || '', 'utf8');
const want = Buffer.from(crypto.createHmac('sha256', SECRET).update(req.body).digest('hex'), 'utf8');
if (got.length === want.length && crypto.timingSafeEqual(got, want)) {
res.sendStatus(200); // answer first
const msg = JSON.parse(req.body.toString('utf8'));
console.log(msg.event, msg.data); // then do the work
} else {
res.sendStatus(401);
}
});
app.listen(3000);
Python (Flask):
import hmac, hashlib, json, os
from flask import Flask, request
app = Flask(__name__)
SECRET = os.environ["STREAMLIVE_WEBHOOK_SECRET"].encode()
@app.post("/hooks/streamlive")
def streamlive():
raw = request.get_data()
want = hmac.new(SECRET, raw, hashlib.sha256).hexdigest()
got = request.headers.get("X-StreamLive-Signature", "")
if hmac.compare_digest(got, want):
msg = json.loads(raw)
print(msg["event"], msg["data"])
return "", 200
return "", 401
| מה רואים | סיבה סבירה | מה עושים |
|---|---|---|
| "נדרשת כתובת https:// תקינה" | הכתובת מתחילה ב-http:// או ריקה | משתמשים ב-https:// |
| "Webhook URL not allowed (must be a public address)" | הכתובת מצביעה על רשת מקומית או פרטית | משתמשים בכתובת ציבורית, או במנהרה עם שם https ציבורי |
| "עד 10 webhooks לחשבון" | בחשבון כבר יש 10 | מוחקים אחד שלא בשימוש |
| "Webhooks זמינים במסלול Studio." | החשבון לא במסלול Studio | ראו /pricing |
| החתימה אף פעם לא תואמת | הגוף פוענח וקודד מחדש, או שהסוד הודבק עם רווח | מחשבים על הגוף הגולמי ומעתיקים שוב את הסוד מהמקום ששמרתם. אם הוא אבד, מוחקים את ה-Webhook ומוסיפים חדש |
| לא מגיע כלום | נתיב שגוי, שרת איטי, או Webhook מושבת | בודקים ברשימה את "נשלח לאחרונה" ואת ההערה על השבתה, ואז את הלוגים בשרת |
במסלול Studio. במסלולים אחרים ובתקופת הניסיון החלק מסביר ש-Webhooks כלולים ב-Studio, והשרת מסרב להוסיף אחד.
מחשבים HMAC-SHA256 של הגוף הגולמי עם סוד החתימה ומשווים לכותרת X-StreamLive-Signature. אם יש הבדל, דוחים את הבקשה.
לא. כל אירוע נשלח פעם אחת, עם זמן המתנה של 10 שניות. אחרי 20 כישלונות ברצף ה-Webhook נכבה.
לא. הוא מוצג פעם אחת. מוחקים את ה-Webhook ומוסיפים אותו שוב כדי לקבל סוד חדש.
מקבלים stream.started כשהשידור עולה ב-StreamLive Pro, לא משנה לאילו ערוצים הוא יוצא. האירוע שייך לשידור, לא לרשת מסוימת.
כל נקודות הקצה של ה-REST API של StreamLive Pro תחת /api/v1, עם פרמטרים, שדות בקשה ושדות תשובה: שידורים, צ'אט, מפתחות שידור, שורטס, פוסטים ונתונים.
אילו הרשאות יש ל-ChatGPT ול-Claude בחשבון שלכםכל הרשאה ש-ChatGPT או Claude יכולים לקבל בחשבון StreamLive Pro: מה כל אחת מאפשרת, אילו כלים צריכים אותה, מה אפשר להשאיר כבוי, ואיך משנים.
מה זה MCP (Model Context Protocol)? הסבר בלי ז'רגוןמה זה MCP, ה-Model Context Protocol, במילים ברורות: שרתים, כלים, OAuth והרשאות, ואיך ChatGPT ו-Claude משתמשים בו כדי לעבוד עם StreamLive Pro.
כלי ה-MCP של StreamLive Pro: רשימה מלאה ל-ChatGPT ול-Claudeכל 24 כלי ה-MCP של StreamLive Pro ש-ChatGPT ו-Claude יכולים להשתמש בהם: מה כל כלי עושה, אילו רק קוראים, אילו משנים ואילו מחכים לאישור שלכם.
רוצים לנסות? 7 ימי ניסיון, בלי כרטיס אשראי.
להתחיל בחינם