Skip to content

מבנה הבקשה

ה-API של TextMe מקבל את אותו מסמך בשני פורמטים. שלחו XML עם Content-Type: application/xml, או את ה-JSON המקביל עם Content-Type: application/json, והתשובה תחזור באותו פורמט שבו נשלחה הבקשה.

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

המעטפה

בקשה היא אלמנט שורש אחד שמציין את הפעולה, ובתוכו בלוק user והשדות של הפעולה עצמה.

xml
<?xml version="1.0" encoding="UTF-8"?>
<sms>
    <user>
        <username>Leeroy</username>
    </user>
    <source>DemoAPI</source>
    <destinations>
        <phone>5xxxxxxxx</phone>
    </destinations>
    <message>Hello</message>
</sms>
json
{
  "sms": {
    "user": { "username": "Leeroy" },
    "source": "DemoAPI",
    "destinations": { "phone": "5xxxxxxxx" },
    "message": "Hello"
  }
}

אלמנט השורש הוא בוחר הפעולה: sms, bulk, dlr, newCL, blacklist וכן הלאה. שליחת שורש שאינו מזוהה מחזירה סטטוס 997, Not a valid command sent.

אלמנטים חוזרים הופכים למערכים

ב-XML מבטאים רשימה על ידי חזרה על אלמנט. ב-JSON אותה רשימה היא מערך — וכשיש רק פריט אחד, ה-API מקבל גם את הערך עצמו ללא מערך.

xml
<destinations>
    <phone>5xxxxxxx1</phone>
    <phone>5xxxxxxx2</phone>
</destinations>
json
{
  "destinations": {
    "phone": ["5xxxxxxx1", "5xxxxxxx2"]
  }
}

תכונות הופכות ל-$, טקסט הופך ל-_

לחלק מאלמנטי ה-XML יש תכונות (attributes) — ה-id על <phone>, ה-id על <link>. ב-JSON אין תכונות, ולכן ה-API משתמש במוסכמה המקובלת בהמרות XML ל-JSON: $ מחזיק את התכונות, _ מחזיק את הטקסט של האלמנט.

xml
<destinations>
    <phone id="order-10052">5xxxxxxxx</phone>
    <phone>5xxxxxxxx</phone>
</destinations>
json
{
  "destinations": {
    "phone": [
      { "$": { "id": "order-10052" }, "_": "5xxxxxxxx" },
      { "_": "5xxxxxxxx" }
    ]
  }
}

אלמנט בלי תכונות יכול להישאר מחרוזת פשוטה, כמו בדוגמה הראשונה בעמוד הזה. המוסכמה מופיעה רק במקומות שבהם XML היה משתמש בתכונה — בפועל, ה-id על phone ועל link.

באיזה פורמט לבחור?

XML הוא הפורמט המקורי של ה-API, והדוגמאות של הספק עצמו כתובות בו. JSON קל יותר לבנייה ולפענוח ברוב הסביבות המודרניות, והוא זה שמופיע בדוגמאות הקוד באתר הזה. אף אחד מהם אינו מוקפא — בחרו את מה שהקוד שלכם מטפל בו בטבעיות.

מעטפת התשובה

כל תשובה נפתחת באותם שני שדות.

שדהסוגמשמעות
statusint0 בהצלחה. כל ערך אחר הוא שגיאה.
messagestringהערה קריאה לאדם. בהצלחה היא מתארת מה קרה (SMS will be sent); בכשל היא מסבירה את השגיאה.

לאחר מכן מגיעים הנתונים הספציפיים לפעולה: shipment_id אחרי שליחה, transactions בדוח, contact_lists בקריאת רשימות וכן הלאה.

xml
<?xml version="1.0" encoding="UTF-8"?>
<sms>
    <status>0</status>
    <message>SMS will be sent</message>
    <shipment_id>xxxxxxx</shipment_id>
</sms>
json
{
  "status": 0,
  "message": "SMS will be sent",
  "shipment_id": "XXXXXXX"
}

חלק מהפעולות מחזירות גם רשימת errors לצד status מוצלח: הבקשה כמכלול עבדה, אבל פריטים מסוימים בתוכה לא. יצירת רשימת תפוצה עם מספר טלפון שגוי אחד היא המקרה הנפוץ — הרשימה נוצרת, והשורה הפגומה מדווחת. תמיד קראו את errors כשהוא קיים.

status הוא לא סטטוס ה-HTTP

שכבת התעבורה עונה כמעט תמיד HTTP 200, כולל בכשלי אימות ובשגיאות ולידציה. התנו את הלוגיקה בשדה status שבגוף התשובה, ולא בקוד ה-HTTP לבדו.

ערכים ופורמטים

סוג שדהפורמטהערות
מספר טלפון5xxxxxxxx או 05xxxxxxxמספרים נייחים באותו מבנה (3xxxxxxx). מספרים קצרים או ארוכים מדי נדחים בסטטוס 9.
תאריך ושעהdd/mm/yy hh:mm30/03/26 10:10. שנה בשתי ספרות, שעון 24 שעות.
שולחעד 11 תוויםאותיות באנגלית וספרות בלבד, בלי +. חייב להיות מאומת, אחרת הקריאה נכשלת בסטטוס 515.
גוף ההודעהעד 1005 תוויםגוף ארוך יותר או ריק מחזיר סטטוס 989.
שם קמפייןעד 50 תוויםגם כאן סטטוס 989 כשהשם ארוך מדי.
דגלים1 או 0נשלחים כמחרוזות. כל ערך שאינו הערך המתועד נקרא כ"לא".

עברית, אמוג'י וטקסט לא-לטיני אחר עובדים ללא בעיה — כל ה-API הוא UTF-8. שימו לב שתווים שאינם GSM מקטינים את כמות הטקסט שנכנסת למקטע הודעה אחד לחיוב.

בדיקה בלי שליחה

http
POST https://my.textme.co.il/api/test

נקודת הקצה לבדיקות מפרסרת ומאמתת את גוף הבקשה, מפעילה את אותן בדיקות הרשאה ופורמט, ועונה באותו מבנה — אבל לא מבצעת דבר. שום הודעה לא נשלחת, לא נגרעים קרדיטים, ואף רשימה לא נוגעים בה.

זה המקום הנכון לוודא שגוף הבקשה תקין לפני שמפנים את אותו קוד אל /api. היא לא תגיד לכם אם מספר מסוים ניתן להשגה, והיא לא יוצרת shipment_id שאפשר להפיק עליו דוחות אחר כך.

מה יכול להשתבש

Statusמשמעות
1לא ניתן היה לפרסר את ה-XML — מסמך פגום, תג לא סגור, או גוף שאינו XML כלל.
2חסר שדה חובה. ה-message מציין איזה.
997אלמנט השורש אינו פעולה מזוהה.
998שגיאה לא ידועה בבקשה.

הרשימה המלאה, כולל קודים ספציפיים לכל פעולה, נמצאת בקודי סטטוס.