InforU חושפת שליחת SMS מעל HTTP. האינטגרציה פשוטה - מה שמפתיע אנשים הוא שהודעה בעברית עולה יותר מפי שניים מהודעה באנגלית באותו אורך, ולמה.
עיקרי הדברים
- הודעת SMS בעברית מכילה 70 תווים למקטע, לא 160. תו עברי אחד מכריח את כל ההודעה לקידוד הרחב, ולכן אימוג'י בודד בהודעה באנגלית מכפיל את עלותה ויותר.
- לספור מקטעים לפני השליחה, לא אחרי החשבונית. תבנית שנראית תקינה בבדיקות יכולה לחצות גבול מקטע ברגע ששם לקוח אמיתי ארוך יותר.
- SMS הוא שגר-ושכח אלא אם מטפלים בדוחות מסירה. התקבל אצל הספק אינו נמסר למכשיר, וההבדל משמעותי לכל דבר תלוי-זמן.
- הסרה אינה פיצ'ר שמוסיפים אחר כך. יש לבנות את מסלול ההסרה ואת רשימת החסימה לפני הדיוור הראשון, ולשמור תיעוד של ההסכמה.
InforU היא פלטפורמת מסרים ישראלית, והיא חושפת שליחת SMS דרך HTTP - גם בממשק REST וגם בממשקי Web Service, עם דוגמאות קוד בשפות הנפוצות. החיבור הראשון הוא עניין של שעה. מה שמפתיע אנשים מגיע אחר כך, בחשבונית.
את מבנה הבקשה המדויק יש לקחת מהתיעוד הרשמי של InforU - הוא כולל את נקודת הקצה לשליחה, טבלת פרמטרים ודוגמאות מוכנות. המאמר הזה עוסק במה שהתיעוד לא מסביר: כמה זה יעלה, ומה נשבר בפועל.
מלכודת העלות: עברית עולה יותר מפי שניים
זו הנקודה החשובה ביותר, והיא לא ספציפית ל-InforU - היא איך ש-SMS עובד בכל העולם.
הודעת SMS נשלחת במקטעים, ואורך המקטע תלוי בקידוד:
| קידוד | מתי משמש | תווים למקטע | בהודעה מרובת מקטעים |
|---|---|---|---|
| GSM-7 | אנגלית ותווים בסיסיים | 160 | 153 |
| UCS-2 | כל הודעה שיש בה עברית | 70 | 67 |
המשמעות: הודעה בעברית מכילה פחות מחצי מהתווים של הודעה באנגלית באותו מקטע. הודעה עברית של 100 תווים היא שני מקטעים - כלומר עלות כפולה - בזמן שהודעה אנגלית של 100 תווים היא מקטע אחד.
הפרט שתופס אנשים לא מוכנים
תו אחד לא-לטיני מכריח את כל ההודעה לקידוד הרחב.
הדוגמה שממחישה: הודעה באנגלית באורך 150 תווים היא מקטע אחד. מוסיפים לה אימוג'י אחד - וכעת היא בקידוד UCS-2, כלומר 70 תווים למקטע, כלומר שלושה מקטעים במקום אחד. פי שלושה בעלות, בגלל תו אחד.
אותו דבר קורה עם גרשיים מיוחדים שעורכי טקסט מחליפים אוטומטית, או עם קו מפריד ארוך.
מה לעשות
- לספור מקטעים בקוד לפני השליחה, לא אחרי החשבונית. פונקציה קטנה שמזהה אם יש תו לא-GSM ומחשבת מקטעים בהתאם.
- לבדוק את התבנית עם ערכים אמיתיים ארוכים. תבנית שנראית תקינה עם "דני" חוצה גבול מקטע עם "אלכסנדר בן-שמעון". זה בדיוק סוג הדבר שמתגלה בחשבונית ולא בבדיקות.
- אם ההודעה חוצה מקטע - לשקול לקצר. קישור קצר במקום ארוך, ובלי חתימה מיותרת.
הודעה שהתקבלה אינה הודעה שנמסרה
הטעות התכנונית הנפוצה השנייה: תשובה חיובית מה-API אומרת שהספק קיבל את ההודעה - לא שהיא הגיעה למכשיר.
בין השניים יכולים לעמוד: מספר לא תקין, מכשיר כבוי, מספר שנותק, חסימה של הרשת. וכל אלה יקרו אחרי שכבר קיבלת 200.
אם ההודעה תלוית-זמן - קוד חד-פעמי, תזכורת לפגישה, התראה תפעולית - צריך לטפל בדוחות המסירה ולא להסתפק בתשובה של השליחה. אחרת אתה מאמין שהלקוח קיבל תזכורת, והוא לא.
ומה שעושים עם המידע: מספר שמחזיר כשל מסירה קבוע צריך להיות מסומן על כרטיס הלקוח, כדי שהמערכת תדע בפעם הבאה ליפול חזרה למייל או לוואטסאפ.
מספרי טלפון - לנרמל לפני שליחה
אותה בעיה שחוזרת בכל אינטגרציה ישראלית: מספר בכרטיס לקוח נשמר בכל צורה - 052-1234567, 0521234567, +972521234567, ולפעמים שניים באותו שדה.
לנרמל לפני השליחה, ומספר שלא נפתר בוודאות - לא לשלוח אליו ולסמן לטיפול. עדיף הודעה שלא נשלחה מהודעה שנשלחה למספר שגוי, במיוחד כשיש עלות לכל הודעה.
שם השולח
שם השולח האלפאנומרי - מה שהנמען רואה במקום מספר - הוא נכס. שווה לדעת שני דברים:
- הוא לרוב דורש רישום מראש מול הספק ולא סתם שדה שממלאים. לברר לפני שמבטיחים ללקוח שההודעות יגיעו בשם המותג.
- נמען לא יכול להשיב לשם אלפאנומרי. אם התהליך שלך מצפה לתשובה - למשל אישור פגישה ב-"כן" - זה לא יעבוד. צריך לתכנן מסלול אחר, וזו החלטה שצריכה לעלות באפיון ולא בבדיקות.
הסרה - לבנות לפני הדיוור הראשון
שליחת הודעות שיווקיות בישראל כפופה לרגולציה, וההיבט המשפטי שלה אינו נושא למאמר טכני. מה שכן טכני:
- מסלול הסרה שעובד - ורשימת חסימה שנבדקת לפני כל שליחה, לא אחריה.
- תיעוד ההסכמה - מתי ואיפה הנמען נרשם. אם אין לך את זה, אין לך תשובה כשמישהו שואל.
- הפרדה בין תפעולי לשיווקי. אישור הזמנה ומבצע אינם אותו דבר, ואסור שהסרה משיווק תחסום גם התראה תפעולית.
לגבי מה בדיוק החוק דורש - זו שאלה לעורך דין, לא למפתח ולא למאמר. מה שכן: לבנות את התשתית מראש זול פי כמה מלהוסיף אותה אחרי שהתחילו לשלוח.
מה שחייב להיות
- ספירת מקטעים לפני שליחה - זו ההגנה על התקציב.
- נרמול מספרים ל-E.164, ודילוג על מה שלא נפתר.
- אידמפוטנטיות. אותו טריגר שנורה פעמיים לא שולח שתי הודעות. ללקוח שמקבל תזכורת כפולה זה נראה כמו תקלה, כי זו תקלה.
- בדיקת רשימת חסימה לפני כל שליחה.
- תור שגיאות שאדם רואה.
- הטוקן כסוד בצד השרת. לכל הודעה יש עלות ישירה - טוקן שדלף הוא חשבון שמתנפח.
צ'קליסט
- לפתוח את התיעוד הרשמי ולקחת ממנו את מבנה הבקשה.
- לכתוב פונקציית ספירת מקטעים לפני שכותבים את השליחה.
- לבדוק כל תבנית עם ערכים ארוכים אמיתיים.
- להחליט אם צריך דוחות מסירה - ולטפל בהם אם כן.
- לברר רישום שם שולח לפני שמבטיחים ללקוח.
- לבנות הסרה ורשימת חסימה לפני הדיוור הראשון.
- לוודא שהטוקן לא נמצא בשום קוד לקוח.
שאלות נפוצות
למה SMS בעברית עולה יותר מאשר באנגלית?
כי עברית מכריחה את קידוד UCS-2, שמכיל 70 תווים למקטע במקום 160 של GSM-7 - ו-67 במקום 153 בהודעה מרובת מקטעים. הודעה עברית של 100 תווים היא לכן שני מקטעים בעוד שאותו אורך באנגלית הוא מקטע אחד, כך שאותו טקסט עולה כפול.
האם אימוג'י אחד באמת יכול לשלש את עלות ה-SMS?
כן. תו אחד שאינו לטיני מכריח את כל ההודעה ל-UCS-2, ולכן הודעה אנגלית של 150 תווים שהייתה מקטע אחד הופכת לשלושה של 70 תווים כל אחד. אותו דבר קורה עם גרשיים טיפוגרפיים שעורכים מחליפים אוטומטית. יש לספור מקטעים בקוד לפני השליחה ולא לגלות את זה בחשבונית.
האם תשובה מוצלחת מ-API של SMS אומרת שההודעה הגיעה?
לא - זה אומר שהספק קיבל אותה. מספר לא תקין, מכשיר כבוי, קו מנותק או חסימת רשת - כולם קורים אחרי שקיבלת תשובה חיובית. לכל דבר תלוי-זמן כמו קוד חד-פעמי או תזכורת לפגישה, יש לטפל בדוחות מסירה, ולסמן מספרים עם כשל קבוע כדי שהמערכת תוכל ליפול חזרה לערוץ אחר.
האם לקוחות יכולים להשיב לשם שולח אלפאנומרי ב-SMS?
לא. אם התהליך שלך מצפה לתשובה - למשל אישור פגישה ב"כן" - שם שולח אלפאנומרי ישבור אותו, וצריך מסלול אחר כמו קישור. שמות שולח אלפאנומריים גם דורשים בדרך כלל רישום מראש מול הספק, ולכן כדאי לברר את זה לפני שמבטיחים ללקוח שההודעות יגיעו בשם המותג שלו.
מה צריך לבנות לפני הדיוור הראשון ב-SMS?
מסלול הסרה שעובד, רשימת חסימה שנבדקת לפני כל שליחה ולא אחריה, תיעוד של מתי ואיפה כל נמען הסכים, והפרדה בין הודעות תפעוליות לשיווקיות כך שהסרה ממבצעים לא תחסום אישור הזמנה. מה בדיוק החוק דורש היא שאלה לעורך דין, אבל התשתית זולה הרבה יותר לבנייה מראש.
להמשך קריאה
שירות רלוונטי
אינטגרציות
לגרום למערכות שאתם כבר משלמים עליהן לדבר זו עם זו.
על הכותב
יהונתן סעדיה
מהנדס פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מהנדס בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה מנסה להפוך לאוטומטי או לבנות, ואומר לך מהי הדרך המהירה והאמינה ביותר ליישם את זה.
