לעתים קרובות אנו נתקלים במצב הבא: לקוח כבר משתמש ב-Twilio אך מחפש חלופה עם כיסוי טוב יותר באירופה או תנאים גמישים יותר. או — MVP זקוק לשיחות קוליות אך התקציב אינו מאפשר Video API. Vonage (לשעבר Nexmo, לאחר רכישה על ידי Ericsson) הוא מתחרה ישיר ל-Twilio, עם ניואנסים משלו. בואו נחקור כיצד אנו משלבים את Vonage Client SDK ו-Video API, אילו מלכודות נתקלנו בהן, ומה חשוב לקחת בחשבון.
Vonage מספקת מספר SDK עצמאיים לאפליקציות מובייל: Vonage Client SDK לשיחות קוליות והודעות בתוך האפליקציה, Vonage Video API (לשעבר TokBox OpenTok) לוידאו, ו-REST API נפרדים ל-SMS/WhatsApp. חשוב לא לבלבל בין מוצרים אלה — יש להם חיוב שונה, SDK שונים ותיעוד שונה. בחירת SDK שגוי היא אחת הבעיות הנפוצות ביותר בתחילת הדרך.
כיצד להגדיר Push Notifications לשיחות נכנסות?
ללא push, שיחה נכנסת לא תגיע אם האפליקציה ברקע. עבור iOS אנו משתמשים ב-VoIP PushKit, עבור Android — FCM (Firebase Cloud Messaging). ההתקנה דורשת:
- העלאת אישור APNs (או מפתח) ב-Vonage Dashboard.
- ציון מפתח FCM עבור Android.
- ב-SDK, הפעלת ערוץ המסירה המתאים במהלך התחברות.
// Android: включить push-уведомления
val config = VGClientConfig()
config.pushConfig = VGPushConfig.Builder(context)
.setChannel(VGPushConfig.Channel.FCM)
.build()לאחר מכן, שיחות נכנסות יגיעו גם במצב סגור, והמערכת תציג את ממשק השיחה המקורי (iOS — CallKit, Android — שיחה מבוססת התראות).
Vonage Client SDK: שיחות קוליות
ה-// Android: включить push-уведомления val config = VGClientConfig() config.pushConfig = VGPushConfig.Builder(context) .setChannel(VGPushConfig.Channel.FCM) .build() לשיחות קוליות בנוי על WebRTC, אך מספק API ברמה גבוהה עם אימות JWT ואינטגרציה עם Vonage Voice API.
יצירת JWT בצד השרת היא נקודה מרכזית. Vonage משתמשת ב-JWT חתום ב-RSA, לא ב-HMAC. המפתח הפרטי נוצר בעת יצירת Vonage Application ב-Dashboard — זהו קובץ Vonage Client SDK שיש לאחסן על השרת, לא באפליקציית המובייל.
import jwt, time
payload = {
"application_id": VONAGE_APP_ID,
"iat": int(time.time()),
"exp": int(time.time()) + 3600,
"sub": user_id,
"acl": {
"paths": {
"/*/users/**": {},
"/*/conversations/**": {},
"/*/legs/**": {}
}
}
}
token = jwt.encode(payload, private_key, algorithm="RS256")דוגמה לאתחול ב-Android:
// build.gradle
implementation 'com.vonage:client-sdk-android:8.x.x'
// Инициализация
val client = VonageClient.Builder(context)
.build()
client.setConnectionListener { connectionStatus, connectionStatusReason ->
// CONNECTED, DISCONNECTED, etc.
}
// Логин с JWT
client.login(jwt) { loginResult ->
when (loginResult) {
is LoginResult.Success -> {
/* готов к звонкам */
}
is LoginResult.Failure -> {
/* обработать ошибку */
}
}
} למה Vonage Client SDK קשה יותר מ-Twilio?
החיסרון המעשי העיקרי הוא התיעוד. גרסאות .key 7.x ו-8.x כוללות API שאינם תואמים, ומדריך ההעברה אינו שלם. מספר פעמים נאלצנו לנתח את יומן השינויים של ה-SDK כדי להבין מדוע קריאות חוזרות הפסיקו לפעול לאחר עדכון תלות. Twilio עושה כאן עבודה טובה יותר: הדוגמאות מעודכנות, שינויים שוברי תאימות נדירים. עם זאת, Vonage מנצחת בעלות של מספרים אירופיים (עד 40% זול יותר מ-Twilio עבור נתיבים מסוימים) ובגמישות של רישוי Video API.
Vonage Video API (OpenTok)
אם המשימה היא שיחות וידאו או ועידות וידאו, Vonage Video API (OpenTok) הוא מוצר נפרד עם פונקציונליות עשירה יותר: שיתוף מסך, הקלטה, שידור, איתות דרך ערוצים מובנים.
// Android OpenTok SDK implementation
// 'com.vonage:client-sdk-video:x.x.x'
val session = Session.Builder(context, API_KEY, sessionId).build()
session.setSessionListener(sessionListener)
session.connect(token)
val publisher = Publisher.Builder(context).build()
session.publish(publisher)הסשן נוצר על השרת דרך REST API; הלקוח מקבל import jwt, time payload = { "application_id": VONAGE_APP_ID, "iat": int(time.time()), "exp": int(time.time()) + 3600, "sub": user_id, "acl": { "paths": { "/*/users/**": {}, "/*/conversations/**": {}, "/*/legs/**": {} } } } token = jwt.encode(payload, private_key, algorithm="RS256") ו-// build.gradle implementation 'com.vonage:client-sdk-android:8.x.x' // Инициализация val client = VonageClient.Builder(context) .build() client.setConnectionListener { connectionStatus, connectionStatusReason -> // CONNECTED, DISCONNECTED, etc. } // Логин с JWT client.login(jwt) { loginResult -> when (loginResult) { is LoginResult.Success -> { /* готов к звонкам */ } is LoginResult.Failure -> { /* обработать ошибку */ } } } . המודל דומה ל-Twilio Video, אך OpenTok קיים זמן רב יותר, ולכן הוא פועל בצורה יציבה יותר ברשתות חלשות (עד 30% פחות שיחות שנפלו בתנאי 3G).
Vonage SMS ו-WhatsApp Business
SMS דרך Vonage REST API הוא התרחיש הפשוט ביותר, אין צורך ב-SDK:
POST https://rest.nexmo.com/sms/json api_key=xxx&api_secret=yyy&from=Vonage&to=79001234567&text=Hello WhatsApp Business דרך Vonage Messages API דורש תבנית מאושרת מ-Meta להודעה היוצאת הראשונה; כל תגובה של משתמש פותחת חלון של 24 שעות למסרים חינמיים.
השוואה עם Twilio
| קריטריון | Vonage | Twilio |
|---|---|---|
| בשלות SDK ל-iOS/Android | מספק, עדכונים פחות תכופים | טוב, תמיכה פעילה |
| כיסוי PSTN | חזק באירופה (עד 40% זול יותר) | חזק בארה"ב, טוב גלובלית |
| Video API | OpenTok — מוצר בוגר (יציב מאז 2010) | Twilio Video — בפיתוח פעיל |
| תיעוד | גרוע יותר מ-Twilio | אחד הטובים בתעשייה |
| עלות שיחות קוליות | דומה ל-Twilio | דומה ל-Vonage |
Vonage מנצחת באירופה בכיסוי PSTN אך מפסידה באיכות התיעוד. לפי המדידות שלנו, אינטגרציה של Client SDK ב-Android אורכת 20–30% יותר זמן מאשר המקבילה ב-Twilio בשל הצורך לפענח דוגמאות מיושנות.
מה כלול בעבודה
אנו יוצרים ומגדירים את Vonage Application, מייצרים זוג מפתחות RSA, מיישמים את השרת ל-JWT, משלבים את Client SDK או Video API ב-Android/iOS, מגדירים push לשיחות נכנסות, ובודקים על מכשירים אמיתיים. כבר השלמנו למעלה מ-15 אינטגרציות Vonage עבור לקוחות מאירופה ומחבר העמים — כולן מגובות בניסיון של 5+ שנים עם SDK למובייל.
לוח זמנים: 1–3 שבועות תלוי בפונקציונליות הנדרשת (רק שיחות או פלטפורמת תקשורת מלאה). הזמינו אינטגרציית Vonage SDK — אנו נבחן את הפרויקט שלכם ונציע את הסט האופטימלי. תוצרים אופייניים כוללים:
- מודול יצירת JWT בשרת (Python/Node/Java)
- אינטגרציית SDK ב-Android ו/או iOS עם קוד לדוגמה
- הגדרת Push Notifications (APNs, FCM)
- דוח בדיקות מקצה לקצה עם מדדים (זמן הקמת שיחה, שיעור נפילות)
- תמיכה חודש לאחר האינטגרציה והעברת ידע
טעויות אינטגרציה נפוצות
- בלבול בין Client SDK ל-Video API — גישות אימות שונות.
- שימוש ב-HMAC במקום RSA עבור JWT — Vonage דוחה אסימונים כאלה.
- אחסון המפתח הפרטי על הלקוח — דליפה מובילה לפריצה מלאה.
- הגדרה שגויה של ערוץ מסירה ל-push — שיחות לא מגיעות ברקע.
על ידי הימנעות מטעויות אלה, אתם חוסכים עד יומיים של ניפוי באגים. אם אתם זקוקים לעזרה, צרו קשר. אנו מבטיחים אינטגרציה חלקה בגיבוי מהנדסי Vonage מוסמכים.
מקור: תיעוד מפתחים של Vonage







