StreamLive Pro

Webhooks למפתחים: אירועים, חתימה ושליחה

Webhooks של StreamLive Pro למפתחים: מוסיפים כתובת https בהגדרות, מקבלים את stream.started ואירועים נוספים, ובודקים את חתימת HMAC-SHA256 ב-Node או ב-Python.

עודכן · 4 דק׳ קריאה

Webhook מאפשר ל-StreamLive Pro להודיע לשרת שלכם ברגע שמשהו קורה בחשבון: שידור התחיל, שידור הסתיים, תשלום עבר. מוסיפים כתובת https בהגדרות, בחלק "API ו-Webhooks", מסמנים את האירועים הרצויים, ומאותו רגע כל אירוע נשלח לכתובת כבקשת POST חתומה עם גוף JSON קצר. Webhooks הם חלק ממסלול Studio.

זה עמוד העיון: איך מוסיפים Webhook, מה יש בכל בקשה, איך בודקים את החתימה, ומה בדיוק כללי השליחה. לרעיון הכללי ראו מה זה Webhook? כתובת ברשת שמקבלת הודעות. לקריאה ל-API עם מפתח ראו מפתחות API למפתחים: יצירה, שימוש וביטול.

לפני שמתחילים

שלבים

  1. פותחים את החלק. נכנסים להגדרות ובוחרים "API ו-Webhooks" בתפריט הצד. הכרטיס השני הוא Webhooks.
  2. מקלידים כתובת. בשדה "כתובת (https בלבד)" מדביקים את הכתובת של השרת, למשל https://example.com/hooks/streamlive.
  3. מסמנים אירועים. האירועים stream.started,‏ stream.ended ו-payment.succeeded מסומנים מראש. מורידים סימון ממה שלא צריך ומסמנים את מה שכן.
  4. לוחצים "הוסף webhook". ה-Webhook מופיע ברשימה שמתחת לטופס.
  5. מעתיקים עכשיו את סוד החתימה. תיבה בשם "סוד החתימה של ה-webhook" מציגה את הסוד פעם אחת, עם כפתור העתק. שומרים אותו בהגדרות השרת. הוא לא יוצג שוב.
  6. מפעילים אירוע אמיתי. אין כפתור בדיקה. מתחילים שידור פרטי קצר ומסיימים אותו: אמורים להגיע stream.started ואחריו stream.ended. ברשימה מופיע "נשלח לאחרונה" עם תאריך ההצלחה האחרונה.
מסך ההגדרות (חשבון בדיקה).
מסך ההגדרות (חשבון בדיקה).

כדי להסיר 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-Typeapplication/json
User-AgentStreamLivePro-Webhooks/1.0
X-StreamLive-Eventשם האירוע, למשל stream.started
X-StreamLive-SignatureHMAC-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 מושבתבודקים ברשימה את "נשלח לאחרונה" ואת ההערה על השבתה, ואז את הלוגים בשרת

שאלות נפוצות

באיזה מסלול יש Webhooks?

במסלול Studio. במסלולים אחרים ובתקופת הניסיון החלק מסביר ש-Webhooks כלולים ב-Studio, והשרת מסרב להוסיף אחד.

איך יודעים שהבקשה באמת הגיעה מ-StreamLive Pro?

מחשבים HMAC-SHA256 של הגוף הגולמי עם סוד החתימה ומשווים לכותרת X-StreamLive-Signature. אם יש הבדל, דוחים את הבקשה.

האם StreamLive Pro מנסה שוב כששליחה נכשלת?

לא. כל אירוע נשלח פעם אחת, עם זמן המתנה של 10 שניות. אחרי 20 כישלונות ברצף ה-Webhook נכבה.

איבדתי את סוד החתימה. אפשר לראות אותו שוב?

לא. הוא מוצג פעם אחת. מוחקים את ה-Webhook ומוסיפים אותו שוב כדי לקבל סוד חדש.

אפשר לקבל Webhook כשהשידור עולה ב-YouTube?

מקבלים stream.started כשהשידור עולה ב-StreamLive Pro, לא משנה לאילו ערוצים הוא יוצא. האירוע שייך לשידור, לא לרשת מסוימת.

המשך קריאה

תיעוד ה-REST API של 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 ימי ניסיון, בלי כרטיס אשראי.

להתחיל בחינם
האפליקציה לטלפון ראשי מרכז העזרה מדריכים פרטיותתנאי שימושהצהרת נגישות