Skip to content

עבודה עם webhooks נכנסות#

קבלת נתונים נכנסים ב-GREEN API מיושמת באמצעות הודעות נכנסות. ישנן 2 דרכים לקבל התראות HTTP API and Webhook Endpoint.

להלן המלצות לעבודה עם webhooks והתראות:

  1. קבלת הודעות נכנסות
  2. עיבוד הודעות נכנסות
  3. אבטחה בעת קבלת הודעות
  4. רישום וטיפול בשגיאות
  5. קנה מידה ואיזון עומסים

1. קבלת הודעות נכנסות#

עבודה עם HTTP API#

כאשר עובדים באמצעות שיטות API של HTTP, עליך לקרוא ל-2 שיטות API ברצף:

  1. קורא לשיטה receiveNotification בהתאם לנוכחות ההודעות, הגדרות השיטה והגדרות המופע בתגובה. תקבל אובייקט עם מספר וחפץ הודעה.

    אם אין התראות בתור, התגובה תהיה בטל.

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

    אם השיטה הסתיימה עם קוד סטטוס של 500 או יותר, יש לחזור על בקשת השיטה.

עבודה עם Webhook Endpoint#

במהלך העבודה עם שיטות Webhook Endpoint, עליך להגדיר שרת אינטרנט המסוגל לקבל בקשות HTTP.

שרת האינטרנט חייב להיות מסוגל:

  1. קבל נכנסות בקשות פוסט (webhook)

  2. עבד הודעה נכנסת.

  3. החזר תגובה עם קוד סטטוס 200 (לאחר קבלת קוד סטטוס 200 מהשרת, ההודעה תוסר מהתור).

    זמן ההמתנה לתגובה משרת האינטרנט שלך הוא 180 שניות; אם השרת לא מחזיר את קוד סטטוס 200, שרת ה-API של GREEN ישהה ​​למשך 60 שניות וישלח מחדש את ההודעה הנוכחית.

2. עיבוד הודעות נכנסות#

כל הסוגים והפורמטים של התראות מפורטים ב- תיעוד.

מומלץ לעבד הודעות נכנסות לפי ההנחיות שלהלן:

  1. לאחר קבלת הודעה על ידי שירות המטפל, רצוי לבדוק את סכימת ההתראות (JSONSchema).

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

  2. שירות המטפל חייב למצוא את הדרוש typeWebhook שדה ובהתאם לסוגו, עבד או אפס את ההודעה.

  3. לאחר עיבוד ההודעה, על המטפל להחזיר קוד סטטוס 200.

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

הדוגמה של שרת פשוט מ-GREEN API:

  • SDK Python
  • SDK GO
  • SDK NodeJS

3. אבטחה בעת קבלת הודעות#

במהלך עיצוב השירות חשוב לשים לב לאבטחה.

כשעובדים עם HTTP API טכנולוגיה, כתובת ה-IP שלך פרטית ואינה נגישה למשתמשי אינטרנט אחרים; טכנולוגיה זו פועלת היטב במערכות קטנות עם כמות קטנה של נתונים.

כשעובדים עם Webhook Endpoint טכנולוגיה, כתובת ה-IP שלך נגישה למשתמש אחר, יש צורך לא לכלול השפעות מזיקות על המערכת שלך מבחוץ.

המלצות אבטחה במהלך השימוש בטכנולוגיית Webhook Endpoint:

  1. הגדר חומת אש ואפשר גישה לשרת רק מכתובות ה-IP הדרושות לך.

  2. הגבלת גישה רק מכתובות IP מסוימות. אתה יכול להגדיר את שרת האינטרנט שלך לקבל בקשות נכנסות רק מהן GREEN API IP addresses.

  3. השתמש באסימון הרשאה בעת שליחת הודעות. ציין את אסימון ההרשאה ב- webhookUrlToken שדה דרך console או באמצעות setSettings שִׁיטָה.
קוד סינון כתובות IP לדוגמה בפיתון
from flask import Flask, request

from datetime import datetime
import json

app = Flask(**name**)

# List of Green Api IP addresses

ALLOWED_IPS = [
   "51.250.84.44",
   "51.250.94.65",
   "51.250.89.177",
   "64.226.125.75",
   "158.160.49.84",
   "46.101.109.139",
   "51.250.95.149",
   "51.250.12.167",
   "209.38.202.24"]

# Function to check allowed IP addresses

def check_ip():
client_ip = request.remote_addr
if client_ip not in ALLOWED_IPS:
return False
return True

@app.before_request
def before_request():
if not check_ip():
return "Access Denied", 403

# The rest of your application code...

if **name** == "**main**":
app.run()

4. רישום וטיפול בשגיאות#

מומלץ להקים מערכת רישום:

  1. השתמש במערכת רישום מותאמת אישית מרובת רמות. בעיות בסכימת יומן ברמת ERROR, סוגי התראות חדשים ברמת WARN, סוגי הודעות לא מעובדות ברמת DEBUG ותפעול מערכת ברמת INFO. על ידי הפעלת רמת הרישום הנדרשת, תוכל לבצע ניפוי באגים במערכת ולזהות את כל הבעיות הקשורות באינטגרציה.

  2. מומלץ ליידע את המפעיל על סוגי התראות ושגיאות הודעות לא ידועות; זה יאפשר לוקליזציה של הבעיה במהירות האפשרית ויספק מידע נוסף למפעיל מבלי לפספס סוגי הודעות שעדיין אינם נתמכים על ידי האינטגרציה.

הקפד לרשום נתוני התראות; הרשומה חייבת להכיל מידע כולל תאריך ושעה של הקבלה - timestamp, סוג הודעה - typeWebhook ונתוני הודעות אחרים. זה יאפשר לך לנתח את הפעולה תחת תרחישים בלתי צפויים של פעולת המערכת.

5. קנה מידה ואיזון עומסים#

ככל שתגדיל את גודל המערכת שלך, אתה עלול להיתקל בבעיות קנה מידה. מומלץ לשנות את קנה המידה של המערכת על ידי חלוקת העומס על פני מספר שירותי מיקרו-מטפלים; בשביל זה אתה יכול להשתמש באיזון עומסים.

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

Nginx הוא שרת אינטרנט בעל ביצועים גבוהים שיכול לשמש גם כאיזון עומסים (תהליך של הפצת תעבורת אינטרנט באופן שווה על פני מספר שרתים), ומונע עומס יתר על שרת אחד. Nginx משתמש באלגוריתמים שונים כדי להפיץ את התעבורה בצורה אופטימלית וניתן להגדיר אותו כדי להבטיח את אמינות המערכת כאשר שרת אחד או יותר נכשל.

השתמש באחת מהשיטות הבאות כדי לפרוס מופעי שרת מרובים:

פריסה ידנית על שרתים או מכונות וירטואליות שונות:#

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

שימוש במכולות עם Docker:#

  • צור תמונת Docker של היישום שלך.
  • הפעל קונטיינרים מרובים עם תמונה זו על מחשב מארח אחד או יותר.

שימוש בספקי ענן:#

  • פרוס מופעים מרובים של השרת שלך בפלטפורמת ספק ענן כגון שירותי האינטרנט של אמזון (AWS), Google Cloud Platform (GCP) or Microsoft Azure.
  • השתמש בכלי ניהול תשתית ענן כדי להפוך את הפריסה והקנה מידה של שרתים לאוטומטיים.
דוגמה לקובץ תצורה של nginx עבור מאזן עומסים
http {
   upstream app{
      server 10.2.0.100;
      server 10.2.0.101;
      server 10.2.0.102;
   }

   // This server accepts all traffic on port 80 and forwards it upstream.
   // Please note that the upstream name and proxy_pass must be the same.

   server {
      listen 80;

      server_name mydomain.com;

      location / {
         include proxy_params;

         proxy_pass http://app;


         proxy_redirect off;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
      }
   }
}