שליחה וקבלה של WhatsApp מ-Python
קבלה היא נתיב במסגרת הווב שלכם שעונה לבקשת האימות GET של Meta ומקבל בקשות POST. שליחה היא בקשת HTTPS ל-Cloud API עם phone number id ואסימון. אין לנו SDK, ואין צורך להתקין דבר.
בקשת GET לאימות של Meta ובקשת POST לאירועים. זה צד הקבלה.
חלון הזמן לאחר הודעת לקוח שבו אפשר לשלוח טקסט חופשי.
קוד השגיאה שמוחזר כששולחים טקסט חופשי מחוץ לחלון הזה.
איך מקבלים הודעות ב-Python?
עם שני מטפלים על נתיב אחד, בכל מסגרת שכבר משמשת אתכם.
מטפל ה-GET עונה לאימות של Meta. הוא קורא את hub.mode, hub.verify_token ו-hub.challenge ממחרוזת השאילתה, בודק את האסימון מול האסימון שלכם ומחזיר את האתגר בגוף התגובה הגולמי. החזרת JSON כאן היא הטעות הנפוצה ביותר, והיא נכשלת בשקט.
מטפל ה-POST מקבל אירועים. מחזירים 200 במהירות ומבצעים את העבודה אחר כך, כי Meta מתייחסת לתגובה איטית כאל כישלון ותנסה שוב, מה שעלול לגרום לטיפול באותה הודעה פעמיים. מכניסים לתור או מעבירים למשימת רקע, במקום לעבד את ההודעה ישירות.
הודעות מגיעות עם מזהה הודעה wamid. כדאי למנוע כפילויות לפי המזהה הזה כבר מההתחלה, כי ניסיונות חוזרים הם דבר רגיל ולא חריג.
איך שולחים?
בקשת POST אחת לכתובת messages של ה-Cloud API עבור phone number id, עם אסימון bearer.
שני הערכים מגיעים מהחיבור: לוח הבקרה מציג אותם, ו-get_api_credentials מחזיר אותם אם אתם מעדיפים שעוזר ישלוף אותם. דבר בבקשה אינו ייחודי לנו, לכן כל ספריית HTTP מתאימה והבקשה נראית בדיוק כמו בתיעוד של Meta.
מה שמשתנה לפי התזמון הוא גוף הבקשה. בתוך 24 שעות מההודעה האחרונה של הלקוח שולחים אובייקט text. מחוץ לחלון שולחים אובייקט template עם שם של תבנית מאושרת והשפה שלה. לקוח שמכיר רק את המבנה הראשון עובד מצוין בבדיקות ונכשל בהודעה הראשונה שנשלחת בלילה, ומחזיר את קוד השגיאה 131047.
מה צריך מטפל בסביבת ייצור מעבר לזה?
שלושה דברים שקל לדלג עליהם ויקר להוסיף אחר כך.
מונעים כפילויות לפי מזהה ההודעה, כי Meta מנסה שוב. מאמתים את חתימת הבקשה אם אתם חשופים לציבור, כי אחרת כל מי שילמד את כתובת ה-URL שלכם יוכל לשלוח אליה בקשות. ובודקים כמה זמן עבר מאז שהאיש קשר כתב לאחרונה, כדי שנתיב השליחה יבחר טקסט או תבנית בלי שאדם יצטרך להחליט.
אף אחד מהדברים האלה לא דורש מסגרת או ספרייה. אלה קבוצה, בדיקה והשוואה, והכנה שלהם לפני הלקוח הראשון היא ההבדל בין אינטגרציה שפועלת בשקט לבין כזו ששולחת לכם התראות.
טעויות נפוצות
- החזרת JSON מבקשת האימות GET במקום ערך האתגר הגולמי.
- עיבוד ישיר לפני החזרת 200. Meta מנסה שוב כשיש תגובה איטית, ואתם מטפלים בהודעה פעמיים.
- שליחת טקסט חופשי בלי לבדוק את חלון הזמן. מוחזר 131047 ונראה כאילו דבר לא קרה.
מחברים את המספר ב-easycoexistence.com, מגדירים את יעד הוובהוק (Webhook) לנתיב שלכם וקוראים את phone number id והאסימון מלוח הבקרה. המחיר מתחיל ב-US$ 9 למספר בחודש ויורד ל-US$ 2 בכמות גדולה, עם 7 ימי ניסיון ראשונים בחינם.
שאלות נפוצות
יש SDK ל-Python?
לא מאיתנו, וגם אין צורך באחד. ה-API שייך ל-Meta, מתועד על ידי Meta ונגיש בכל ספריית HTTP.
באיזו מסגרת כדאי להשתמש?
בכל מסגרת. הדרישה היא לנתיב שעונה ל-GET ומקבל POST, וכל מסגרת ווב של Python עושה זאת.
איך מונעים טיפול באותה הודעה פעמיים?
מונעים כפילויות לפי מזהה ההודעה wamid בתוך ה-payload. Meta מנסה שוב בכוונה, לכן זה צפוי ולא מקרה קצה.
האם הצוות עדיין יכול להשתמש בטלפון?
כן. Coexistence משאיר את אפליקציית WhatsApp Business פעילה באותו מספר, והמטפל שלכם רואה את מה שנשלח כאירוע echo.
המשיכו לקרוא
מוכנים להתחיל?
מגדירים WhatsApp Coexistence בתוך דקות, לא חודשים. האפליקציה ממשיכה לעבוד בטלפון.
התחילו תקופת ניסיון בחינםנבדק ב-