מוניטור SIP בזמן אמת - מערכת SiP_panel
שימו לב, שירות זה דורש רישיון פעיל (חבילה בתשלום מול שירות הלקוחות, או התנסות). ניתן לבדוק את מצב הרישיון גם ללא רישיון באמצעות getLicenseInfo.
הפקודה היא - SipRealtimeMonitor
ניתן לקרוא לשירות ב-GET (פרמטרים ב-query string) או ב-POST עם JSON ב-body.
מתי חובה להשתמש ב-POST:
- כשמועבר פרמטר
accounts (מערך)
- כשמועבר אחד מהפרמטרים:
startDateTime, endDateTime, afterCallId
בכל פניה יש לצרף:
| פרמטר |
תיאור |
סוג |
| token |
טוקן |
string |
| action |
הפעולה לביצוע - יבואר |
string |
פעולות:
קבלת מצב הרישיון - getLicenseInfo
הפעולה היא - getLicenseInfo
מענה בעת הצלחה
| מאפיין |
סוג |
הסבר |
דוגמא |
| responseStatus |
string |
סטטוס הפעולה |
OK |
| license.allowed |
boolean |
האם יש גישה לשירות |
true |
| license.trial |
boolean |
האם זהו רישיון ניסיון |
true |
| license.trialStart |
number |
Unix timestamp של תחילת הניסיון |
1779705344 |
| license.trialEnd |
number |
Unix timestamp של סיום הניסיון |
1780310144 |
| license.trialAvailable |
boolean |
האם ניסיון זמין להפעלה |
false |
דוגמא לתגובה כאשר השירות בניסון פעיל:
{
"responseStatus": "OK",
"license": {
"allowed": true,
"trial": true,
"trialStart": 1779705344,
"trialEnd": 1780310144
}
}
דוגמא לתגובה - אין רישיון, ניסיון זמין:
{
"responseStatus": "OK",
"license": {
"allowed": false,
"reason": "no_license",
"trialAvailable": true
}
}
הפעלת ניסיון חינם - startTrial
הפעולה היא - startTrial
מפעיל ניסיון חינם של 7 ימים. ניתן לבצע את הפעולה בכל מערכת פעם אחת בלבד!.
מענה בעת הצלחה
| מאפיין |
סוג |
הסבר |
דוגמא |
| responseStatus |
string |
סטטוס הפעולה |
OK |
| trialStarted |
boolean |
האם הניסיון הופעל כעת |
true |
| alreadyLicensed |
boolean |
האם כבר היה רישיון פעיל |
true |
| license |
object |
פרטי הרישיון לאחר הפעלה |
|
{
"responseStatus": "OK",
"trialStarted": true,
"license": {
"allowed": true,
"trial": true,
"trialStart": 1779705344,
"trialEnd": 1780310144
}
}
קבלת שיחות - getCalls
הפעולה היא - getCalls
שירות זה דורש רישיון פעיל.
הפרמטרים הנדרשים בנוסף (אופציונליים):
| פרמטר |
תיאור |
סוג |
ברירת מחדל |
| includeEnded |
כלול שיחות שהסתיימו (ended[]) בתגובה לצד הפעילות |
0 או 1 |
0 |
| onlyEnded |
החזר רק שיחות שהסתיימו, ללא שיחות פעילות |
0 או 1 |
0 |
| endedLimit |
מגבלת מספר שיחות שהסתיימו להחזיר (החדשות ביותר לפי זמן ניתוק) |
number |
30 |
| accounts |
מערך חשבונות לסינון - רק חשבונות אלו יוחזרו. מצריך POST |
string[] |
ללא סינון |
| startDateTime |
סינון שיחות שהסתיימו - החזר רק שיחות שניתקו אחרי תאריך/שעה זה. מצריך POST |
string / number |
ללא סינון |
| endDateTime |
סינון שיחות שהסתיימו - החזר רק שיחות שניתקו לפני תאריך/שעה זה. מצריך POST |
string / number |
ללא סינון |
| afterCallId |
החזר רק שיחות שניתקו אחרי שיחה זו (לפי זמן ניתוקה). שימושי לspolling יעיל - ראה הרחבה למטה. מצריך POST |
string |
ללא |
פרמטר startDateTime / endDateTime - פורמטים תקינים:
| פורמט |
דוגמא |
| תאריך ושעה (רווח) |
"2026-06-21 08:00:00" |
| ISO 8601 |
"2026-06-21T08:00:00" |
| ISO 8601 עם UTC |
"2026-06-21T08:00:00Z" |
| Unix timestamp (שניות) |
1750489200 |
| Unix timestamp (מילישניות) |
1750489200000 |
פרמטר afterCallId:
מיועד לשימוש בסקריפטים שמבצעים שליפה כל הזמן, ואז במקום לשלוף בכל פעם את כל הרשימה, מעבירים את ה-id של השיחה האחרונה שקיבלתם - והשרת מחזיר רק שיחות שניתקו אחריה.
אם ה-id כבר פג תוקף (20 דקות) - אין לי דרך לדעת מאיזה שיחה אתם רוצים ותקבלו את כל הרשימה עד endedLimit.
מענה בעת הצלחה
| מאפיין |
סוג |
הסבר |
| responseStatus |
string |
סטטוס הפעולה |
| summary |
object |
סיכום מצטבר מכלל החשבונות שנבחרו |
| accounts |
object |
המפתח הוא שם החשבון, הערך הוא נתוני החשבון |
| license |
object |
מצורף רק כשהרישיון הוא רישיון התנסות |
מבנה summary:
| מאפיין |
סוג |
הסבר |
| totalActive |
number |
סה"כ שיחות פעילות כרגע |
| dialing |
number |
שיחות במצב חיוג |
| inCall |
number |
שיחות בשיחה ממש |
| totalCalls |
number |
סה"כ שיחות (סטטיסטיקה שבועית) |
| totalIncoming |
number |
סה"כ נכנסות |
| totalOutgoing |
number |
סה"כ יוצאות |
| totalAnswered |
number |
סה"כ נענו |
| totalMissed |
number |
סה"כ לא נענו |
| totalAnsweredIncoming |
number |
נענו נכנסות |
| totalAnsweredOutgoing |
number |
נענו יוצאות |
| totalMissedIncoming |
number |
לא נענו נכנסות |
| totalMissedOutgoing |
number |
לא נענו יוצאות |
| totalTalkTimeSeconds |
number |
סה"כ זמן שיחה בשניות |
| totalRecorded |
number |
סה"כ שיחות שהוקלטו |
מבנה כל חשבון ב-accounts:
| מאפיין |
סוג |
הסבר |
| summary |
object |
סטטיסטיקות החשבון (אותם שדות כמו summary הכללי) |
| calls |
array |
שיחות פעילות כרגע |
| ended |
array |
שיחות שהסתיימו (רק אם includeEnded=1 או onlyEnded=1) |
| extensionClass |
string|null |
קוד איזור השלוחה של החשבון (נכון לזמן הקריאה). null אם אין, או אם החשבון כבר נמחק. |
| extensionNote |
string|null |
תיאור השלוחה של החשבון (נכון לזמן הקריאה). null אם אין. |
extensionClass הוא הקוד הגולמי. שם התצוגה (התרגום) נשמר בהגדרות (SipAccountsSettings) וצריך להיות מיושם, ככל שתרצו, בצד הלקוח / היישום שלכם.
מבנה שיחה (calls / ended):
| מאפיין |
סוג |
הסבר |
דוגמא |
| id |
string |
מזהה שיחה ייעודי |
"xSP-3f2a1b4c-..." |
| account |
string |
שם חשבון ה-SIP |
"06558877=2" |
| callType |
string |
סוג שיחה |
"IN" / "OUT" |
| source |
string |
מספר מקור |
"050000000" |
| destination |
string |
מספר יעד |
"0773133333=2" |
| startTime |
number |
Unix timestamp - תחילת השיחה |
1779710278 |
| answeredTime |
number|null |
Unix timestamp - מענה (null אם לא נענה) |
1779710282 |
| endTime |
number|null |
Unix timestamp - ניתוק (null אם עדיין פעיל) |
null |
| status |
string |
מצב השיחה |
"dialing" / "in_call" / "ended" |
| hasRecord |
boolean |
האם יש הקלטה |
true |
| recordPath |
string|null |
נתיב ההקלטה |
"ivr2://Trash/SIPRecord/DID-..." |
| history |
array |
רצף אירועי השיחה |
|
מבנה history event:
| מאפיין |
סוג |
הסבר |
דוגמא |
| event |
string |
סוג האירוע |
"start" / "answer" / "transfer" / "end" |
| time |
number |
Unix timestamp |
1779710278 |
| to |
string |
יעד ההעברה (רק באירוע transfer) |
"05200000" |
דוגמא לתגובה מלאה:
{
"responseStatus": "OK",
"summary": {
"totalActive": 2,
"dialing": 1,
"inCall": 1,
"totalCalls": 4395,
"totalAnswered": 219,
"totalMissed": 4176,
"totalIncoming": 4380,
"totalOutgoing": 15,
"totalAnsweredIncoming": 211,
"totalAnsweredOutgoing": 8,
"totalMissedIncoming": 4169,
"totalMissedOutgoing": 7,
"totalTalkTimeSeconds": 13515,
"totalRecorded": 16
},
"accounts": {
"0888888888=2": {
"summary": {
"totalActive": 1,
"dialing": 0,
"inCall": 1,
"totalCalls": 250,
"totalAnswered": 8,
"totalMissed": 242,
"totalAnsweredIncoming": 7,
"totalAnsweredOutgoing": 1,
"totalMissedIncoming": 240,
"totalMissedOutgoing": 2,
"totalTalkTimeSeconds": 480,
"totalRecorded": 1
},
"calls": [
{
"id": "xSP-3f2a1b4c-5d6e-7f8a-9b0c-1d2e3f4a5b6c",
"account": "0888888888=2",
"callType": "IN",
"source": "050000000",
"destination": "0888888888=2",
"startTime": 1779710278,
"answeredTime": 1779710282,
"endTime": null,
"status": "in_call",
"hasRecord": true,
"recordPath": "ivr2://Trash/SIPRecord/DID-xxxx-Phone-xxxx-routing-0888888888=2-Date-2026-05-25-19-00-00.wav",
"history": [
{ "event": "start", "time": 1779710278 },
{ "event": "answer", "time": 1779710282 },
{ "event": "transfer", "time": 1779710290, "to": "079999999" }
]
}
],
"ended": [
{
"id": "xSP-7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
"account": "0888888888=2",
"callType": "IN",
"source": "052111111",
"destination": "0888888888=2",
"startTime": 1779709000,
"answeredTime": null,
"endTime": 1779709045,
"status": "ended",
"hasRecord": false,
"recordPath": null,
"history": [
{ "event": "start", "time": 1779709000 },
{ "event": "end", "time": 1779709045 }
]
}
]
}
}
}
קבלת שיחות לחשבון ספציפי - getCallsByAccount
הפעולה היא - getCallsByAccount
שירות זה דורש רישיון פעיל.
הפרמטרים:
| פרמטר |
תיאור |
סוג |
חובה |
| account |
שם חשבון ה-SIP |
string |
כן |
| includeEnded |
כלול שיחות שהסתיימו (ended[]) |
0 או 1 |
לא (ברירת מחדל: 0) |
| startDateTime |
סינון שיחות שהסתיימו - החזר רק שיחות שניתקו אחרי תאריך/שעה זה. מצריך POST |
string / number |
לא |
| endDateTime |
סינון שיחות שהסתיימו - החזר רק שיחות שניתקו לפני תאריך/שעה זה. מצריך POST |
string / number |
לא |
| afterCallId |
החזר רק שיחות שניתקו אחרי שיחה זו. מצריך POST |
string |
לא |
ראה הסבר מפורט על הפרמטרים startDateTime, endDateTime, afterCallId בסעיף getCalls למעלה - ההתנהגות זהה.
מענה בעת הצלחה
| מאפיין |
סוג |
הסבר |
| responseStatus |
string |
סטטוס הפעולה |
| account |
string |
שם החשבון שנשאל |
| summary |
object |
סטטיסטיקות החשבון |
| calls |
array |
שיחות פעילות |
| ended |
array |
שיחות שהסתיימו (רק אם includeEnded=1) |
| extensionClass |
string|null |
קוד איזור השלוחה של החשבון (נכון לזמן הקריאה). null אם אין, או אם החשבון כבר נמחק. |
| extensionNote |
string|null |
תיאור השלוחה של החשבון (נכון לזמן הקריאה). null אם אין. |
{
"responseStatus": "OK",
"account": "09948949494=2",
"summary": {
"totalActive": 1,
"dialing": 0,
"inCall": 1,
"totalCalls": 250,
"totalAnswered": 8,
"totalMissed": 242,
"totalAnsweredIncoming": 7,
"totalAnsweredOutgoing": 1,
"totalMissedIncoming": 240,
"totalMissedOutgoing": 2,
"totalTalkTimeSeconds": 480,
"totalRecorded": 1
},
"calls": [],
"ended": []
}
שימו לב:
השירות מיועד לקבל מידע בזמן אמת על מצב חשבונות ה-SIP במערכת - ועל כן כל הנתונים לא נשמרים לטווח ארוך.
נכון לכתיבת שורות אלה - אלה פחות או יותר הזמנים שנשמרים הנתונים לאחר שהם כבר לא ״זמן אמת״:
| נתון |
זמן שמירה |
| שיחה בחיוג (dialing) |
5 דקות - פג תוקף אוטומטית אם לא נענתה |
| שיחה פעילה (in_call) |
עד 2.5 שעות מרגע המענה |
| שיחה שהסתיימה |
20 דקות |
| סטטיסטיקות |
7 ימים |
שיחות שמועברות: כל העברה מתועדת כ-event מסוג transfer ב-history עם שדה to המכיל את מספר היעד, אבל לא יוצרת שיחה חדשה או מזהה שיחה ייחודי.
מזהי שיחה - id: המזהה נוצר בעת תחילת השיחה ונשמר, כולל אחרי ניתוק, עד פקיעת התוקף של 20 דקות. קיימים שני סוגים:
xSP-{uuid} - מזהה שנוצר על ידי השרת
xCP-{uuid} - מזהה שסופק על ידי הלקוח בכותרת X-YemotSiPanel-NewCallID בINVITE של השיחת SIP.