ספק SMS API נבחר לפי חמישה דברים שקשה לשנות אחר כך: איכות התיעוד, חיווי מסירה אמיתי ולא רק אישור שליחה, מחיר שקוף לכל הודעה במקום חבילות, הסרה נאכפת ברמת המערכת, ולוג מלא שאפשר להציג. השאר ניתן להחלפה.
ההחלטה הזו יקרה לשינוי יותר משהיא נראית. המספרים, ההיסטוריה של מי הסיר את עצמו ומתי, והאינטגרציות שבניתם - כולם נשארים אצל הספק. החלפה אחרי שנה היא לא החלפת ספק אלא הגירה.
תיעוד: הקריטריון שמנבא את כל השאר
תתחילו מכאן, כי זה הסימן היחיד שאפשר לבדוק בחינם ובחמש דקות.
פתחו את התיעוד והריצו את הדוגמה הראשונה כמו שהיא, בלי לתקן כלום. אם היא לא רצה, זה לא פרט קטן - זה אומר שאף אחד לא הריץ אותה מאז שנכתבה. אותה תרבות תפגוש אתכם כשתפתחו קריאה בתמיכה.
מה לחפש:
- קודי שגיאה יציבים ומתועדים, לא מחרוזות באנגלית שאפשר לנתח. קוד כמו
INSUFFICIENT_CREDITSאפשר לבדוק מולו ב-if. הודעה חופשית משתנה בגרסה הבאה ושוברת לכם את הקוד. - דוגמאות ביותר משפה אחת, ורצוי
curlשאפשר להדביק. - תיעוד של מה שלא עובד - הגבלות קצב, תקרות אורך, מה קורה בכשל.
ספק שמתעד רק את המסלול המוצלח הוא ספק שלא חשב על היום שבו משהו יישבר.
חיווי מסירה, לא רק אישור שליחה
זו השאלה שהכי הרבה עסקים מגלים מאוחר מדי.
יש הבדל מהותי בין "ההודעה יצאה מהמערכת" לבין "ההודעה הגיעה למכשיר". הראשון הוא אישור שהבקשה שלכם התקבלה. השני הוא מה שקורה בעולם.
הבדיקה: שאלו את הספק אילו מצבים ההודעה יכולה להיות בהם. אם התשובה היא "נשלח / נכשל", אתם מקבלים אישור קליטה בלבד. מה שאתם רוצים הוא רצף מלא - בתור, נשלח, נמסר, לא נמסר - עם חותמת זמן לכל מעבר.
למה זה משנה בפועל: לקוח פותח קריאה ואומר שלא קיבל קוד אימות. בלי חיווי מסירה אתם יכולים רק לומר "שלחנו". עם חיווי מסירה אתם יכולים לומר מתי בדיוק ההודעה הגיעה למכשיר שלו, או שהיא נכשלה ולמה.
מחיר: לכל הודעה או בחבילות
שלוש שאלות שמפרקות כל מחירון:
איך נספרת הודעה בעברית? זו השאלה שקובעת את המחיר בפועל, והתשובה משתנה דרמטית בין ספקים. אצל חלקם אותה הודעה נספרת כמה פעמים, ואתם מגלים את זה רק בחשבונית. שאלו במפורש: הודעה אחת בעברית - כמה יחידות אתם מחייבים עליה, ומאיזה אורך זה משתנה? התשובה צריכה להיות שני מספרים פשוטים. אצלנו, לשם השוואה, קרדיט אחד הוא הודעה אחת עד 201 תווים, בעברית כמו באנגלית.
האם המחיר נחשף בקוד? ספק שמחזיר בתגובה כמה חויב וכמה נשאר מאפשר לכם לבנות התראות ולראות חריגה לפני החשבונית. ספק שלא - אתם מגלים בסוף החודש.
מה קורה ליתרה שלא נוצלה? חבילה שפגה היא הנחה מדומה. שאלו אם הקרדיטים פגים, ומתי.
הסרה: נאכפת או רק רשומה
כאן ההבדל בין ספקים גדול, והוא נראה זהה עד הרגע שנשבר.
הרבה מערכות שומרות רשימת הסרות ומסננות מולה בשליחה. זה עובד - עד שמישהו מייבא קובץ אנשי קשר מעודכן מהמערכת הישנה. הקובץ מכיל את כל המספרים, כולל מי שביקש להסיר, והם נכנסים בחזרה. ההודעה הבאה יוצאת אליהם, והפעם עם תיעוד שהם ביקשו להסיר וקיבלו בכל זאת.
השאלה לספק: אם אעלה קובץ שמכיל מספר שהוסר, מה יקרה? התשובה הנכונה היא שהמספר יידחה בייבוא עצמו, ולא שהוא ייכנס ותסננו אותו אחר כך.
זה לא רק היגיינה. חוק הספאם מחייב שהסירוב ייאכף, והפער בין "יש לנו רשימה" ל"המערכת אוכפת" הוא בדיוק הפער שמכתב דרישה נכנס דרכו. פירטנו את הדרישות במדריך לחוק הספאם לעסקים.
שם השולח: החיכוך שאף אחד לא מזהיר עליו מראש
זה הסעיף שהכי מפתיע מפתחים שמגיעים משוק אחר, והוא רלוונטי לכל ספק ישראלי בלי יוצא מן הכלל.
אי אפשר לשלוח מטקסט שרירותי. שם שולח - בין אם הוא מספר טלפון ובין אם הוא שם מותג באותיות - עובר תהליך אישור לפני שאפשר להשתמש בו, והוא לא מיידי. עד שהוא מאושר, הקוד שלכם לא ישלח.
מה שחשוב לשאול, ומה שאף מחירון לא כותב:
- כמה זמן לוקח אישור שם שולח? אם התשובה היא ימי עסקים, זה משפיע על לוח הזמנים של ההשקה שלכם ולא רק על ההטמעה.
- מה קורה בסביבת פיתוח? האם צריך שם מאושר גם כדי לבדוק, או שיש מסלול נפרד.
- מה קורה אם שם שולח נשלל אחרי שאושר? ספק רציני יגיד לכם שזה מצב אפשרי ומה קורה לשליחות שבדרך.
תכננו את האישור לפני ההטמעה ולא אחריה. זו הסיבה הנפוצה ביותר לכך שאינטגרציה מוכנה עומדת שבוע בלי לשלוח.
אינטגרציות קיימות מול קוד
לפני שכותבים שורה, בדקו אם בכלל צריך.
חלק ניכר ממקרי השימוש - אישור הזמנה מחנות, ליד מטופס, תזכורת מיומן - נפתרים דרך מחבר קיים ל-Zapier, Make או n8n, או דרך תוסף לחנות. זה לא פתרון נחות: הוא מתוחזק על ידי מישהו אחר, ואין לכם קוד לתחזק כשה-API משתנה.
השאלה לספק: אילו מחברים קיימים ומי מתחזק אותם? מחבר רשמי שהספק מתחזק שווה יותר מאחד קהילתי שנטוש כבר שנתיים. הקוד שלכם שווה לשמור למקומות שבהם באמת אין ברירה.
מה קורה כשמשהו נשבר
שלוש שאלות שמפרידות בין API שאפשר לסמוך עליו לבין אחד שעובד ביום טוב:
האם יש idempotency? הודעת SMS שיצאה אי אפשר להחזיר. אם השרת שלכם עשה ריטריי אחרי timeout, בלי מפתח idempotency הלקוח מקבל שתי הודעות ואתם משלמים פעמיים. הרחבנו על זה במדריך שליחת קוד אימות ב-SMS.
מה הגבלת הקצב, והאם היא מתועדת? מספר מפורש שאפשר לתכנן מולו עדיף על "אל תעמיסו". וחשוב לא פחות: מה חוזר כשחורגים, ואיך יודעים מתי לנסות שוב.
האם יש לוג לכל הודעה, ולכמה זמן? לא דוח מצטבר - שורה לכל הודעה, עם מי קיבל, מה נשלח ומתי. זה מה שתצטרכו כשמישהו ישאל, ובדרך כלל תצטרכו אותו חודשים אחרי השליחה.
צ'ק ליסט לשיחה עם ספק
שמונה שאלות. שלחו אותן במייל וקבלו תשובות בכתב:
- הודעה אחת בעברית - כמה יחידות אתם מחייבים, ומאיזה אורך זה משתנה?
- אילו מצבי מסירה קיימים, והאם יש חותמת זמן לכל מעבר?
- האם תגובת ה-API מחזירה כמה חויב וכמה נשאר?
- אם אעלה קובץ שמכיל מספר שהוסר - הוא נדחה או נכנס?
- האם יש idempotency, ואיך הוא נשלח?
- מה הגבלת הקצב, ומה חוזר כשחורגים?
- כמה זמן נשמר לוג ההודעות, ומה יש בו?
- קרדיטים שלא נוצלו - פגים?
תשובה מהירה ומדויקת לשמונה האלה אומרת יותר על הספק מכל עמוד שיווקי.
שאלות נפוצות
מה הכי חשוב בבחירת ספק SMS API? איכות התיעוד, כי היא מנבאת את כל השאר. אחריה: חיווי מסירה אמיתי, שקיפות מחיר ברמת ההודעה, והסרה נאכפת ברמת המערכת.
מה ההבדל בין נשלח לנמסר? נשלח אומר שההודעה יצאה מהמערכת של הספק. נמסר אומר שהיא הגיעה למכשיר. ספק שמדווח רק על הראשון לא יוכל לענות ללקוח שטוען שלא קיבל.
למה הודעות בעברית עולות יותר אצל חלק מהספקים? כי אותה הודעה נספרת אצלם כמה יחידות במקום אחת. שאלו כל ספק כמה יחידות הוא מחייב על הודעה אחת בעברית ומאיזה אורך זה משתנה - שם נמצא ההבדל האמיתי במחיר, ולא במספר שבעמוד הראשי.
איך בודקים שהסרה באמת נאכפת? העלו קובץ שמכיל מספר שהוסר וראו מה קורה. אם הוא נכנס חזרה לרשימה, האכיפה היא סינון ולא מבנה.
האם צריך idempotency ב-SMS? כן, בכל שליחה שנוצרת מקוד. ריטריי אחרי timeout בלי מפתח idempotency שולח פעמיים ומחייב פעמיים.
רוצים לבדוק בעצמכם? 30 ההודעות הראשונות חינם, בלי כרטיס אשראי, והתיעוד פתוח בעמוד ה-Docs. הריצו את שמונה השאלות עלינו ועל כל ספק אחר.
