טיפול במצבי שיחה#
גרסת בטא
הפונקציונליות נמצאת בגרסת בטא. הפונקציות עשויות להשתנות ועלולות לפעול באופן לא יציב. ייתכן שבעתיד תיגבה תשלום נוסף עבור הפונקציונליות.
ניתן לבקש גישה לפונקציונליות דרך התמיכה הטכנית של 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 |