Skip to content

טיפול במצבי שיחה#

גרסת בטא

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

CallsConnection הוא EventTarget, וכל מחזור החיים של השיחה ניכר באירועים שלו. בנו את הממשק על סמך המצב שמגיע בחיבור, ולא על סמך התוצאות של השיטות שאתם קוראים להן: שיחה יכולה להסתיים גם ללא מעורבותכם — לדוגמה, אם יענו לה במכשיר אחר של אותו חשבון.

האירוע state#

האירוע state מגיע בכל שינוי במצב השיחה, וגם מיד לאחר התחברות והתחברות מחדש. לכן דף שנטען מחדש באמצע שיחה יציג מיד את המצב הנכון.

  • event.detail.state — אחד מהערכים: idle (אין שיחה), inc-call (התקבלה שיחה נכנסת), out-call (מתבצעת שיחה יוצאת), on-call (השיחה התחברה);
  • event.detail.info — תיאור השיחה עבור המצבים שבהם יש שיחה: id (מזהה השיחה), wid (מזהה הצד השני ב-WhatsApp) ו-name (השם, אם WhatsApp העביר אותו).
calls.addEventListener('state', (event) => {
  const { state, info } = event.detail;
  console.log('Call state:', state, info ?? '');

  // for example, show "Calling..." for 'out-call'
  // and the accept/reject buttons for 'inc-call'
});

ניתן לקרוא את המצב הנוכחי גם בלי להמתין לאירוע — ב-calls.state.state. השיטה client.getCallState() מחזירה את מצב השיחה דרך REST, אם הוא נדרש מחוץ לחיבור.

מי נמצא בצד השני#

השדה wid מכיל 79991234567@c.us — אם יש לכם את מספר הטלפון של הצד השני, או 1062110180230@lid — אם אין מספר. השדה info.name מתמלא רק כאשר ל-WhatsApp יש שם פרופיל (pushname), ועבור צד שמגיע עם @lid בדרך כלל אין שם כזה.

כדי להציג שם במקום ספרות, חפשו את איש הקשר לפי שתי הכתובות: השיטה getContacts מחזירה עבור אותו אדם גם id וגם lid, ולכן ניתן למצוא את איש הקשר לפי כל אחת מהן.

האירוע end-call#

האירוע end-call נשלח לאחר סיום השיחה. השדה event.detail.reason מציין מה בדיוק קרה:

  • call-ended — השיחה הסתיימה בצד השרת: הצד השני סיים את השיחה, זמן ההמתנה פג או שהשיחה התקבלה במכשיר אחר.
  • connection-lost — במהלך השיחה החיבור לשרת נותק ולא ניתן היה לשחזר אותו.

עבור call-ended, האירוע עשוי לכלול גם את השדה cause — ההסבר של השרת למה שקרה. ערכים ידועים: hangup, timeout, accepted_elsewhere (השיחה התקבלה במכשיר אחר של אותו חשבון, לדוגמה בטלפון), rejected_elsewhere, no-media, connect-timeout, instance-gone, rejected:<reason>. הרשימה פתוחה, ולכן עדיף להציג ערך לא מוכר כפי שהוא ולא להתעלם ממנו. אם השרת לא ציין סיבה, השדה cause לא יופיע; עם connection-lost הוא לעולם אינו מופיע.

calls.addEventListener('end-call', (event) => {
  const { reason, cause } = event.detail;

  if (reason === 'connection-lost') {
    console.log('Call ended: connection to the server was lost.');
  } else if (cause === 'accepted_elsewhere') {
    console.log('Call accepted on another device.');
  } else if (cause === 'timeout') {
    console.log('Call ended due to a timeout.');
  } else {
    console.log('Call ended.', cause ? `Reason: ${cause}` : '');
  }

  // Return the interface to its initial state here
});

בסיום השיחה הספרייה מכבה את העברת השמע בעצמה, ראו העברת שמע.

כל אירועי החיבור#

אירוע מה הוא מכיל
connect החיבור נוצר
disconnect החיבור נותק, הסיבה — ב-detail.reason
error שגיאה, הטקסט — ב-detail.message
state מצב השיחה: detail.state ו-detail.info
incoming-call התקבלה שיחה נכנסת: detail עם השדות id, wid, name
local-stream-ready זרם המיקרופון שלכם מוכן
remote-stream-ready הזרם של הצד השני מוכן
end-call השיחה הסתיימה: detail.reason ו-detail.cause