מדריך וואטסאפ ל-AI בעברית

תיעוד 1

Go WhatsApp: בנוי לשימוש יעיל בזיכרון

GoWA Logo

GitHub Sponsors Greptile: The War on Bugs

#תמיכה ב-GOWA

GOWA חוסך לכם זמן פיתוח או מפעיל את העסק שלכם? עזרו לקיים את הפרויקט דרך GitHub Sponsors.

חסות עוזרת לפנות זמן עבור:

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

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

לתת חסות ל-GOWA ב-GitHub →

עדיין לא מוכנים לתת חסות? גם דיווחי באגים שניתן לשחזר, שיפורי תיעוד ושיתוף של GOWA עוזרים.


release version Build Image Binary Release

#תמיכה ב-ARM, ב-AMD64 וב-MCP

הורדה:

#תיעוד

קראו את תיעוד GOWA המפורט להתקנה, לאימות, לניהול מכשירים, ל-webhooks, לדוגמאות ולחומר העזר של ה-API. התיעוד עוקב אחרי main שמוזג, כולל שינויים אחרי v9.7.0. בדקו את הערות הגרסה ואת GET /app/info כשמשתמשים בקובץ בינארי או בתג קונטיינר נעוץ.

#צומת קהילה של n8n

  • חבילת n8n
  • עברו אל Settings → Community Nodes, הזינו @aldinokemal2104/n8n-nodes-gowa, ובחרו Install.

#שינויים שוברים

  • v6

    • מצב REST דורש <binary> rest במקום <binary>.
      • דוגמה: ./whatsapp rest במקום ./whatsapp.
    • מצב MCP דרש <binary> mcp.
      • דוגמה: ./whatsapp mcp.
  • v7

    • החל מגרסה 7.x, הקבצים הבינאריים נבנים עם GoReleaser ואפשר להוריד אותם מגרסת latest.
  • v8

    • תמיכה בריבוי מכשירים: אפשר עכשיו לחבר ולנהל כמה חשבונות WhatsApp בו זמנית במופע שרת יחיד.

    • API חדש לניהול מכשירים: נקודות קצה חדשות תחת /devices מנהלות כמה מכשירים.

    • נדרש תיחום מכשיר: כל קריאות REST API שתחומות למכשיר דורשות עכשיו אחד מאלה:

      • כותרת X-Device-Id, או
      • פרמטר שאילתה device_id.
      • אם רשום מכשיר אחד בלבד, הוא משמש כברירת מחדל.
    • בחירת מכשיר ב-WebSocket: התחברו אל /ws?device_id=<id> עבור תווכת המכשיר. רכזת ה-WebSocket הנוכחית משדרת אירועי לוח בקרה לכל המנויים המאומתים. הפרמטר הזה לא מבודד אירועים בין חשבונות. לאינטגרציות של יישומים השתמשו ב-webhooks לכל מכשיר.

    • תמיכה בממשק מרוחק: CORS מתיר את הכותרות Authorization ו-X-Device-Id, כך שממשק ווב עצמאי (למשל gowa-ui) שמתארח במקור אחר יכול לקרוא ל-API ישירות. GET /app/info חושף את הגרסה ואת מגבלות גודל המדיה. מאחר שדפדפנים לא יכולים להגדיר כותרות בחיבורי WebSocket, העבירו /ws?device_id=<id>&authorization=<base64(user:pass)> כש-Basic Auth מופעל (השתמשו ב-TLS: האישור גלוי בכתובת).

    • שינויים במטען webhook: כל מטעני ה-webhook כוללים עכשיו שדה device_id ברמה העליונה, שמזהה איזה מכשיר קיבל את האירוע:

      {
        "event": "message",
        "device_id": "[email protected]",
        "payload": { ... }
      }
  • v9

    • MCP וה-API מאוחדים תחת rest: MCP כבר אינו מצב או תהליך נפרד. הריצו ./whatsapp rest כדי לשרת גם את REST API וגם את MCP. MCP זמין ב-/mcp (אין תת פקודה עצמאית mcp). ראו שרת MCP (Model Context Protocol) לפרטי מעבר.
    • הממשק עבר למאגר נפרד: לוח הבקרה הווב כבר אינו ארוז במאגר הזה. הוא נמצא עכשיו ב-aldinokemal/gowa-ui ונשלח כקובץ gowa-ui.html יחיד שמכיל את עצמו. השרת מוריד את גרסת לוח הבקרה העדכנית בהפעלה, מאמת את תקציר ה-SHA-256 שלה, שומר אותה במטמון תחת storages/ui/, ומגיש אותה ב-/. ראו לוח בקרה ווב (gowa-ui) להגדרות APP_UI_*, לנעיצת שרשרת אספקה ולפריסה מנותקת רשת.

#יכולות

  • שליחת הודעות WhatsApp דרך HTTP API. ראו docs/openapi.yaml לפרטים.

  • תמיכה בשרת MCP (Model Context Protocol): שילוב עם סוכני AI ועם כלים באמצעות פרוטוקול אחיד.

  • MCP OAuth 2.1 אופציונלי: חיבור לקוחות MCP מרוחקים שלא יכולים לספק כותרת Basic Auth. ראו MCP OAuth.

  • אזכור משתמשים בטקסט הודעה ובכיתוב של תמונה, וידאו או קובץ:

    • @phoneNumber
    • דוגמה: Hello @628974812XXXX, @628974812XXXX
  • אזכורי רפאים (אזכור כולם): אזכור משתתפי קבוצה בלי להציג @phone בטקסט ההודעה.

    • העבירו מספרי טלפון בשדה mentions כדי לאזכר משתמשים בלי @ גלוי בהודעה.
    • השתמשו במילת המפתח המיוחדת @everyone כדי לאזכר אוטומטית את כל משתתפי הקבוצה.
  • פרסום עדכוני סטטוס ב-WhatsApp.

  • סימון הודעות שמע נכנסות והודעות קוליות כהודעות שהושמעו.

  • שליחות מתוזמנות: תזמון סוגי שליחה נתמכים פעם אחת, או בחזרה יומית, שבועית או חודשית.

    • הוסיפו scheduled_at (RFC3339) ו-timezone (IANA) לבקשת שליחה. recurrence, weekdays, day_of_month, end_at ו-occurrence_limit שולטים בחזרות.
    • תזמונים שורדים הפעלות מחדש וממתינים למכשיר לא מקוון. אפשר לרשום, להשהות, לחדש או לבטל אותם ב-/send/schedules.
    • מופע שנכשל מנוסה שוב תחת אותו מזהה הודעת WhatsApp, כך ששליחה שאישור שלה אבד לא מנוסה שוב תחת זהות חדשה. גם ניסיונות חוזרים של סקר משתמשים מחדש בסוד השמור. מופעים בפרוטוקול החדש שהופסקו בהפעלה מחדש ממשיכים באותה דרך. ניסיונות ישנים עם תוצאה לא ידועה מדולגים או נכשלים. זה לא מבטיח מסירה של פעם אחת בדיוק.
  • ערוצי ניוזלטר: מעקב או ביטול מעקב אחרי ערוצים, שליפת מטא-נתונים לפי JID או הזמנה, שאילתת ספריית הערוצים והורדת מדיה של ערוץ.

    • קריאת הודעות עם /newsletter/messages, רענון מונים עם /newsletter/message-updates, וניהול מנויי מונה חי מתחדשים עם /newsletter/live-updates.
    • מנויים חיים נמצאים בזיכרון. הירשמו שוב אחרי הפעלת שרת מחדש. אירועי מונה מגיעים כ-webhooks מסוג newsletter.message.
  • מדדי שרת: GET /app/metrics מאומת מדווח על תהליך, זיכרון, דיסק, ספירת מכשירים ומטא-נתוני אחסון בלי כותרת מכשיר. הוא מחזיר JSON, לא טקסט Prometheus.

  • נוכחות אנשי קשר: POST /user/presence/subscribe נרשם לעדכוני מחובר או לא מחובר של איש קשר, והם נמסרים דרך אירוע ה-webhook presence. שליחת הנוכחות שלכם נשארת תחת /send/presence.

  • שגיאות אווטאר: GET /user/avatar מבדיל בין 404 AVATAR_NOT_SET ל-403 AVATAR_HIDDEN. השתמשו בקוד השגיאה לפני שפוסלים תמונה שנשמרה במטמון.

  • שליחת מדבקות: המרה אוטומטית של תמונות לפורמט מדבקת WebP.

    • תומך בפורמטים JPG, JPEG, PNG, WebP ו-GIF.
    • משנה אוטומטית את גודל התמונות ל-512×512 פיקסלים.
    • שומר על שקיפות בתמונות PNG.
    • מדבקות WebP מונפשות נתמכות, אבל חייבות לעמוד בדרישות WhatsApp:
      • בדיוק 512×512 פיקסלים.
      • פחות מ-500 KB.
      • אורך של לא יותר מ-10 שניות.
      • אם מדבקה מונפשת לא עומדת בדרישות האלה, שנו את גודלה לפני ההעלאה בכלי כמו ezgif.com.
  • דחיסת תמונות לפני שליחה.

  • דחיסת סרטונים לפני שליחה.

  • התאמה של שם מערכת ההפעלה שמוצג כשם המכשיר המקושר ב-WhatsApp:

    • --os=Chrome או --os=MyApplication
  • Basic Auth עם כמה פרטי גישה:

    • --basic-auth=kemal:secret,toni:password,userName:secretPassword
    • צורה קצרה: -b=kemal:secret,toni:password,userName:secretPassword
  • תמיכה בפריסה תחת נתיב משנה:

    • --base-path="/gowa" מאפשר פריסה תחת נתיב כמו /gowa.
  • פורט שניתן להתאמה ומצב ניפוי שגיאות:

    • --port 8000
    • --debug true
  • תשובות אוטומטיות להודעות נכנסות:

    • --autoreply="Don't reply to this message"
  • סימון אוטומטי של הודעות נכנסות כנקראו:

    • --auto-mark-read=true
  • הורדה אוטומטית של מדיה מהודעות נכנסות:

    • --auto-download-media=false מבטל הורדות מדיה אוטומטיות (ברירת מחדל: true).
    • ראו אחסון מדיה וניקוי למיקומי אחסון ולפקודות שמירה ידנית.
  • התעלמות מהורדת מדיה של סטטוס:

    • --ignore-status-media=true מבטל הורדת מדיה של סטטוס (ברירת מחדל: false).
  • דחייה אוטומטית של שיחות נכנסות:

    • --auto-reject-call=true או WHATSAPP_AUTO_REJECT_CALL=true (ראו מטען Webhook לאירועי שיחה).
  • נוכחות ניתנת להגדרה בעת החיבור:

    • --presence-on-connect=unavailable או WHATSAPP_PRESENCE_ON_CONNECT=unavailable
    • available: סימון החשבון כמקוון (מדכא התראות בטלפון).
    • unavailable: רישום שם ה-push בלי מעבר למצב מקוון (ברירת מחדל, שומר על התראות הטלפון).
    • none: דילוג על נוכחות לגמרי (שם ה-push לא נרשם, ולכן אנשי קשר עשויים לראות - כשם).
  • פעימת נוכחות יומית:

    • --presence-pulse-enabled=true או WHATSAPP_PRESENCE_PULSE_ENABLED=true (ברירת מחדל: true).
    • --presence-pulse-interval=24h שולט באיזו תדירות כל מכשיר מחובר מקבל פעימה.
    • --presence-pulse-duration=5m שולט כמה זמן החשבון נשאר available לפני החזרה ל-unavailable.
  • Webhooks להודעות שהתקבלו ולאירועים אחרים:

    • --webhook="http://yourwebhook.site/handler"
    • צורה קצרה: -w="http://yourwebhook.site/handler"
    • ראו תיעוד מטען Webhook לפרטים.
  • Webhooks לכל מכשיר: לכל מכשיר יכולה להיות כתובת webhook ומסנני אירועים משלו.

    • הגדרה דרך API: PATCH /devices/:device_id/webhook עם {"webhook_url": "https://device-webhook.site/handler"}.
    • קבלה דרך API: GET /devices/:device_id/webhook.
    • כשלמכשיר יש webhook מותאם, אירועים של המכשיר נשלחים לכתובת הייחודית למכשיר.
    • כשלא מוגדר webhook למכשיר, האירועים חוזרים ל-webhook הגלובלי (--webhook).
    • הגדירו את webhook_url למחרוזת ריקה עם PATCH כדי לנקות אותו ולהשתמש ב-webhook הגלובלי.
    • הגדירו WHATSAPP_WEBHOOK_DEVICE_MERGE_GLOBAL=true (או --webhook-device-merge-global=true) כדי ש-webhook של מכשיר יהיה תוספת במקום החלפה: כתובות --webhook הגלובליות עדיין מקבלות את אירועי המכשיר (חתומים בסוד הגלובלי, מסוננים לפי WHATSAPP_WEBHOOK_EVENTS), בעוד כתובת המכשיר שומרת על הסוד ועל מסנן האירועים שלה.
  • חתימות webhook: בקשות webhook כוללות חתימת HMAC-SHA-256 בכותרת X-Hub-Signature-256. הגדירו מפתח פרטי עם --webhook-secret או WHATSAPP_WEBHOOK_SECRET. ברירת המחדל הישנה שפורסמה, secret, לא בשימוש. אם לא מוגדר סוד, התהליך יוצר מפתח אקראי ורושם אזהרה. המפתח הזה משתנה בהפעלה מחדש, ולכן מקלטים לא צריכים להסתמך עליו.

    צרו מפתח יציב פעם אחת, למשל עם openssl rand -hex 32, והגדירו אותו עם:

    • --webhook-secret="<generated key>"
  • תיעוד מטען webhook: לסכמות מפורטות, ליישום אבטחה ולדוגמאות אינטגרציה, ראו תיעוד מטען Webhook.

  • סינון אירועי webhook: סננו אילו אירועים מועברים ל-webhook שלכם עם:

    • --webhook-events="message,message.ack" (רשימה מופרדת בפסיקים), או
    • WHATSAPP_WEBHOOK_EVENTS=message,message.ack.

    אירועי Webhook זמינים:

אירועתיאור
messageהודעות טקסט, מדיה, איש קשר ומיקום
message.reactionתגובות אמוג'י להודעות
message.revokedהודעות שנמחקו או בוטלו
message.editedהודעות שנערכו
message.ackאישורי מסירה וקריאה
message.deletedהודעות שנמחקו עבור המשתמש
presenceשינויי מחובר או לא מחובר של איש קשר אחרי הרשמה ל-presence
chat_presenceחיווי הקלדה והקלטה מאנשי קשר
group.participantsאירועי הצטרפות, עזיבה, קידום או הורדת דרגה של חברי קבוצה
group.infoשם הקבוצה (subject) השתנה
group.joinedנוספתם לקבוצה
label.editמטא-נתונים של תווית WhatsApp השתנו
label.associationתווית הוחלה על צ'אט או הוסרה ממנו
newsletter.joinedנרשמתם לניוזלטר או לערוץ
newsletter.leftביטלתם הרשמה לניוזלטר
newsletter.messageעדכוני מונה חיים ממנוי פעיל ל-/newsletter/live-updates
newsletter.muteהגדרת ההשתקה של הניוזלטר השתנתה
call.offerהתקבלה שיחה נכנסת
device.logged_outהמכשיר נותק, עם הסיבה
device.temporary_banWhatsApp חסם את החשבון זמנית
device.reachout_timelockWhatsApp הגביל פתיחת צ'אטים חדשים

אם ההגדרה הזו ריקה, כל האירועים מועברים.

  • סינון JID ב-webhook

    אפשר לדלג על אירועים של צ'אטים או שולחים מסוימים (למשל, להשתיק את כל הקבוצות) לפני שהם מועברים:

    • --webhook-ignore-jids="@g.us,[email protected]" (רשימה מופרדת בפסיקים), או
    • [email protected].
    • תומך בתווי הכל @g.us / @s.whatsapp.net / @lid (התאמה למרחב כתובות שלם) וב-JID מדויקים.
    • זה מסנן לפי שיחה או שולח, והוא עצמאי מ---webhook-events, שמסנן לפי סוג אירוע. לאינטגרציית Chatwoot יש הגדרה נפרדת CHATWOOT_IGNORE_JIDS.
  • הגדרת TLS ל-webhook

    אם נתקלים בשגיאות אימות אישור TLS בשימוש ב-webhooks (למשל עם מנהרות Cloudflare או עם אישורים בחתימה עצמית):

    tls: failed to verify certificate: x509: certificate signed by unknown authority

    אפשר לבטל אימות אישור TLS עם:

    • --webhook-insecure-skip-verify=true, או
    • WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true.

    אזהרת אבטחה: האפשרות הזו מבטלת אימות אישור TLS, ויש להשתמש בה רק ב:

    • סביבות פיתוח או בדיקה.
    • רשתות פנימיות עם אישורים בחתימה עצמית.

    מנהרת Cloudflare לא הופכת חיבור TLS יוצא לא מאומת לבטוח. לסביבות ייצור, השתמשו באישור TLS תקף (למשל מ-Let's Encrypt) במקום לבטל את האימות.

#הגדרות

כדי לאחסן הפעלות ומפתחות של WhatsApp ב-PostgreSQL מנוהל, עקבו אחרי מדריך ההגדרה של Neon.

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

דגלים מפורשים גוברים בהגדרות MCP OAuth, ב---allow-unauthenticated, ב---trusted-origins, ב---chatwoot-webhook-allow-unsigned וב- --webhook-all-device-receipts. הגדירו כל אפשרות במקום אחד כדי להימנע מערכים סותרים. לדוגמה, WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true דורס את --webhook-insecure-skip-verify=false.

#משתני סביבה

כדי להשתמש במשתני סביבה:

  1. משורש המאגר, העתיקו את קובץ הדוגמה: cp src/.env.example src/.env.
  2. עדכנו את הערכים ב-src/.env לפי הצורך.
  3. לחלופין, הגדירו את אותם משתנים בסביבת התהליך.

#משתני סביבה זמינים

משתנהתיאורברירת מחדלדוגמה
APP_PORTפורט היישום3000APP_PORT=8080
APP_HOSTכתובת מארח לקישור השרת0.0.0.0APP_HOST=127.0.0.1
APP_DEBUGהפעלת יומן ניפוי שגיאותfalseAPP_DEBUG=true
APP_OSשם מערכת ההפעלה (שם המכשיר ב-WhatsApp)GOWAAPP_OS=MyApp
APP_BASIC_AUTHפרטי אימות Basic. נדרש לקישור שאינו loopback, עם שם משתמש וסיסמה בכל רשומה. loopback נשאר פתוח לפיתוח מקומי-APP_BASIC_AUTH=user1:pass1,user2:pass2
APP_ALLOW_UNAUTHENTICATEDחשיפת ה-API בלי Basic Auth בקישור שאינו loopback (לא מאובטח, עבור פרוקסי הפוך)falseAPP_ALLOW_UNAUTHENTICATED=true
APP_TRUSTED_ORIGINSמקורות דפדפן נוספים לבקשות שמשנות מצב (מארח הבקשה ומקורות CORS ספציפיים כלולים). פרוקסי הפוך שמשכתב את Host זקוק ל-proxy_set_header Host $host, או ל-APP_TRUSTED_PROXIES עם X-Forwarded-Host, או למקור הציבורי שרשום כאן. מקורות של יישומים ותוספים כמו capacitor://localhost מותאמים כפי שנכתבו. null אף פעם לא מהימן: gowa-ui שנפתח מכתובת file:// לא יכול לבצע שינויים או לפתוח את /ws, לכן הגישו אותו מ-gowa (ברירת המחדל) או ממקור http(s) שרשום כאן-APP_TRUSTED_ORIGINS=https://ui.example.com
APP_BASE_PATHנתיב בסיס לפריסה בתת נתיב-APP_BASE_PATH=/gowa
APP_TRUSTED_PROXIESטווחי IP של פרוקסי מהימן עבור פרוקסי הפוך-APP_TRUSTED_PROXIES=0.0.0.0/0
APP_CORS_ALLOWED_ORIGINSמקורות CORS מותרים (כל מקור כשהערך ריק). תו כללי (*, ברירת המחדל) לא מאשר בקשות שמשנות מצב או את /ws. לוח בקרה במקור נפרד חייב להופיע ב-APP_TRUSTED_ORIGINS או כאן כמקור ספציפי-APP_CORS_ALLOWED_ORIGINS=https://ui.example.com
APP_UI_ENABLEDהגשת לוח הבקרה gowa-ui שהורדtrueAPP_UI_ENABLED=false
APP_UI_AUTO_UPDATEהורדה ורענון תקופתי של לוח הבקרה העדכניtrueAPP_UI_AUTO_UPDATE=false
APP_UI_REPOמאגר GitHub שמכיל מהדורות gowa-uialdinokemal/gowa-uiAPP_UI_REPO=my-org/gowa-ui
APP_UI_ASSET_NAMEשם קובץ נכס המהדורה של לוח הבקרהgowa-ui.htmlAPP_UI_ASSET_NAME=gowa-ui.html
APP_UI_UPDATE_INTERVALמרווח בין בדיקות עדכון של לוח הבקרה3hAPP_UI_UPDATE_INTERVAL=6h
APP_UI_GITHUB_TOKENאסימון GitHub אופציונלי למכסת קצב API גבוהה יותר-APP_UI_GITHUB_TOKEN=github_pat_xxx
APP_UI_ASSET_SHA256נעילת SHA-256 אופציונלית לנכס לוח הבקרה-APP_UI_ASSET_SHA256=<hex-digest>
MCP_ENABLEDהגשת נקודת קצה MCP ב-HTTP הניתן להזרמה ב-/mcptrueMCP_ENABLED=false
MCP_OAUTH_ENABLEDהפעלת אימות OAuth 2.1 עבור MCPfalseMCP_OAUTH_ENABLED=true
MCP_OAUTH_ISSUER_URLכתובת URL ציבורית של מנפיק OAuth ב-HTTPS-MCP_OAUTH_ISSUER_URL=https://gowa.example.com
MCP_OAUTH_RESOURCE_URLכתובת URL ציבורית קנונית אופציונלית של MCPנגזר מהמנפיק ומנתיב הבסיסMCP_OAUTH_RESOURCE_URL=https://gowa.example.com/mcp
MCP_OAUTH_DB_URIURI של SQLite עבור לקוחות OAuth, קודים וגיבובי אסימוניםfile:storages/oauth.dbMCP_OAUTH_DB_URI=file:storages/oauth.db
DB_URIURI לחיבור מסד נתונים. URI של Postgres בלי sslmode (או PGSSLMODE) משתמש ב-verify-full עבור מארחים מרוחקים וב-disable עבור יעדי loopback (localhost, 127.0.0.1, ::1) או שקעי unix. הגדירו sslmode=require כדי לשמור TLS לא מאומת.file:storages/whatsapp.dbDB_URI=postgres://user:pass@host/db
DB_KEYS_URIURI אופציונלי של מסד נתונים למטמון מפתחות הצפנה והפעלה. השאירו ריק כדי להשתמש ב-DB_URI. הימנעו מאחסון בזיכרון בסביבת ייצור כי הפעלה מחדש עלולה לאבד את מצב ההפעלה של WhatsApp. URI של Postgres מקבל את אותה ברירת מחדל של sslmode כמו DB_URI.-DB_KEYS_URI=file:storages/whatsapp-keys.db?_foreign_keys=on
CHAT_STORAGE_MAX_OPEN_CONNSמספר מרבי של חיבורי SQLite במקביל לאחסון צ'אט5CHAT_STORAGE_MAX_OPEN_CONNS=10
WHATSAPP_AUTO_REPLYהודעת מענה אוטומטי-WHATSAPP_AUTO_REPLY="Auto reply message"
WHATSAPP_AUTO_MARK_READסימון אוטומטי של הודעות נכנסות כנקראוfalseWHATSAPP_AUTO_MARK_READ=true
WHATSAPP_AUTO_DOWNLOAD_MEDIAהורדה אוטומטית של מדיה מהודעות נכנסותtrueWHATSAPP_AUTO_DOWNLOAD_MEDIA=false
WHATSAPP_IGNORE_STATUS_MEDIAהתעלמות מהורדת מדיה של סטטוס (status@broadcast)falseWHATSAPP_IGNORE_STATUS_MEDIA=true
WHATSAPP_AUTO_REJECT_CALLדחייה אוטומטית של שיחות WhatsApp נכנסותfalseWHATSAPP_AUTO_REJECT_CALL=true
WHATSAPP_WEBHOOKכתובות URL של webhook לאירועים (מופרדות בפסיקים)-WHATSAPP_WEBHOOK=https://webhook.site/xxx
WHATSAPP_WEBHOOK_SECRETסוד HMAC של webhook. צרו אחד באמצעות openssl rand -hex 32. ערך ריק או ערך שפורסם (secret, super-secret-key, your-private-key) מוחלף במפתח אקראי לכל תהליך-WHATSAPP_WEBHOOK_SECRET=<generated key>
WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFYדילוג על אימות TLS עבור webhooks (לא מאובטח)falseWHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true
WHATSAPP_WEBHOOK_EVENTSרשימת היתר של אירועים להעברה (מופרדים בפסיקים, ריק = הכול)-WHATSAPP_WEBHOOK_EVENTS=message,message.ack
WHATSAPP_WEBHOOK_IGNORE_JIDSJID או תווים כלליים לדילוג בהעברה (מופרדים בפסיקים)-[email protected]
WHATSAPP_WEBHOOK_ALL_DEVICE_RECEIPTSהעברת כל אישורי המכשירים המקושרים. צרכנים חייבים לטפל בכפילויות ובעדכונים שלא לפי הסדרfalseWHATSAPP_WEBHOOK_ALL_DEVICE_RECEIPTS=true
WHATSAPP_WEBHOOK_DEVICE_MERGE_GLOBALwebhook לפי מכשיר מתווסף לכתובות ה-URL הגלובליות במקום להחליף אותןfalseWHATSAPP_WEBHOOK_DEVICE_MERGE_GLOBAL=true
WHATSAPP_ACCOUNT_VALIDATIONהפעלת אימות חשבוןtrueWHATSAPP_ACCOUNT_VALIDATION=false
WHATSAPP_PRESENCE_ON_CONNECTנוכחות בחיבור: available, unavailable או noneunavailableWHATSAPP_PRESENCE_ON_CONNECT=unavailable
WHATSAPP_PROXYפרוקסי יוצא עבור WebSocket של WhatsApp (SOCKS5/HTTP/HTTPS)-WHATSAPP_PROXY=socks5://user:pass@host:1080
WHATSAPP_PRESENCE_PULSE_ENABLEDהפעלת פעימת נוכחות יומית של available/unavailabletrueWHATSAPP_PRESENCE_PULSE_ENABLED=false
WHATSAPP_PRESENCE_PULSE_INTERVALמרווח בין פעימות נוכחות24hWHATSAPP_PRESENCE_PULSE_INTERVAL=24h
WHATSAPP_PRESENCE_PULSE_DURATIONמשך השהייה במצב available במהלך כל פעימה5mWHATSAPP_PRESENCE_PULSE_DURATION=5m
CHATWOOT_ENABLEDהפעלת שילוב ChatwootfalseCHATWOOT_ENABLED=true
CHATWOOT_URLכתובת URL של מופע Chatwoot-CHATWOOT_URL=https://app.chatwoot.com
CHATWOOT_API_TOKENאסימון גישה ל-API של Chatwoot-CHATWOOT_API_TOKEN=your-api-token
CHATWOOT_ACCOUNT_IDמזהה חשבון Chatwoot-CHATWOOT_ACCOUNT_ID=12345
CHATWOOT_INBOX_IDמזהה תיבת דואר נכנס של Chatwoot-CHATWOOT_INBOX_ID=67890
CHATWOOT_DEVICE_IDמזהה מכשיר WhatsApp עבור Chatwoot (גיבוי למכשיר יחיד או לסביבה)-[email protected]
CHATWOOT_ALLOWED_HOSTSרשימת היתר של מארחי Chatwoot להגדרות לפי מכשיר (הגנה מפני SSRF)-CHATWOOT_ALLOWED_HOSTS=app.chatwoot.com,chat.example.com
CHATWOOT_IMPORT_MESSAGESהפעלת סנכרון היסטוריית הודעות אל ChatwootfalseCHATWOOT_IMPORT_MESSAGES=true
CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGESימי היסטוריה לייבוא3CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES=7
CHATWOOT_IMPORT_DB_URIURI ישיר של PostgreSQL של Chatwoot לסנכרון היסטוריה-CHATWOOT_IMPORT_DB_URI=postgresql://user:pass@host:5432/chatwoot_production?sslmode=disable
CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGEהוספת מצייני מקום טקסטואליים לשורות מדיה במהלך ייבוא ישיר ממסד הנתוניםtrueCHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE=true
CHATWOOT_IMPORT_MEDIA_WITH_RESTהעלאת שורות מדיה מייבוא ישיר ממסד הנתונים דרך REST של ChatwootfalseCHATWOOT_IMPORT_MEDIA_WITH_REST=true
CHATWOOT_AUTO_CREATEיצירה אוטומטית או שימוש חוזר בתיבת הדואר הנכנס של API של Chatwoot בהפעלהfalseCHATWOOT_AUTO_CREATE=true
CHATWOOT_INBOX_NAMEשם תיבת הדואר הנכנס בשימוש כשיצירה אוטומטית מופעלתWhatsAppCHATWOOT_INBOX_NAME=WhatsApp Support
CHATWOOT_WEBHOOK_URLכתובת URL ציבורית של webhook לתשובות Chatwoot של GOWA-CHATWOOT_WEBHOOK_URL=https://api.example.com/chatwoot/webhook
CHATWOOT_WEBHOOK_SECRETסוד עבור webhooks נכנסים של Chatwoot (מאמת את החתימה של Chatwoot). ערך ריק דוחה קריאות-CHATWOOT_WEBHOOK_SECRET=channel-webhook-secret
CHATWOOT_WEBHOOK_ALLOW_UNSIGNEDקבלת webhooks של Chatwoot כשלא הוגדר סוד (לא מאובטח)falseCHATWOOT_WEBHOOK_ALLOW_UNSIGNED=true
CHATWOOT_WEBHOOK_SIGNATURE_TOLERANCEגיל מרבי של חותמת זמן של webhook חתום של Chatwoot5mCHATWOOT_WEBHOOK_SIGNATURE_TOLERANCE=2m
CHATWOOT_REOPEN_CONVERSATIONפתיחה מחדש של שיחות Chatwoot שסומנו כפתורות עבור אנשי קשר שחוזריםtrueCHATWOOT_REOPEN_CONVERSATION=false
CHATWOOT_CONVERSATION_PENDINGיצירת שיחות Chatwoot חדשות כממתינותfalseCHATWOOT_CONVERSATION_PENDING=true
CHATWOOT_IGNORE_JIDSJID או תווים כלליים להחרגה מהעברה אל Chatwoot-[email protected],[email protected]
CHATWOOT_SIGN_MSGקידומת שם הסוכן לתשובות סוכן ChatwootfalseCHATWOOT_SIGN_MSG=true
CHATWOOT_SIGN_DELIMITERמפריד בין חתימת סוכן Chatwoot לגוף ההודעה\n\nCHATWOOT_SIGN_DELIMITER=" - "
CHATWOOT_FORWARD_EDITSשיקוף עריכות WhatsApp לתוך הערות משורשרות ב-ChatwoottrueCHATWOOT_FORWARD_EDITS=false
CHATWOOT_FORWARD_DELETESשיקוף אירועי מחיקה לכולם של WhatsApp לתוך הערות ChatwoottrueCHATWOOT_FORWARD_DELETES=false
CHATWOOT_MESSAGE_READסנכרון מצב קריאה עבור הודעות WhatsApp ו-Chatwoot מקושרותfalseCHATWOOT_MESSAGE_READ=true
CHATWOOT_MESSAGE_DELETEמחיקת הודעות מקושרות בצד הנגדי כשמדווחת מחיקהfalseCHATWOOT_MESSAGE_DELETE=true

תיעוד:

הריצו ./whatsapp --help כדי לראות את כל דגלי שורת הפקודה.

#דרישות

#דרישות מערכת

  • Go 1.26.0 ואילך (בעת בנייה ממקור)
  • FFmpeg (לעיבוד מדיה)

#פלטפורמות נתמכות

  • Linux (x86_64, ARM64)
  • macOS (Intel, Apple Silicon)
  • Windows (x86_64, מומלץ WSL)

#תלויות (בלי Docker)

  • macOS:
    • brew install ffmpeg webp
    • export CGO_CFLAGS_ALLOW="-Xpreprocessor"
  • Linux:
    • sudo apt update
    • sudo apt install ffmpeg webp
  • Windows (מומלץ WSL, ראו התקנת WSL):
    • התקינו FFmpeg.
    • התקינו libwebp, ואז חלצו אותו והוסיפו את ספריית bin שלו ל-PATH.

הערה: חבילת webp מספקת את הכלים cwebp (מקודד), dwebp (מפענח) ו-webpmux (מחלץ פריימים). FFmpeg נדרש לעיבוד מדיה. כלי libwebp (webpmux + dwebp) משמשים לתמיכה במדבקות WebP מונפשות.

#איך להשתמש

#בסיסי

  1. שכפל את המאגר: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice.
  2. פתח את התיקייה המשוכפלת בטרמינל.
  3. הרץ cd src.
  4. הרץ go run . rest.
  5. פתח את http://localhost:3000.

#Docker

Docker מונע את הצורך להתקין את Go, FFmpeg ו-libwebp ישירות על המארח.

  1. שכפל את המאגר: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice.
  2. פתח את התיקייה המשוכפלת בטרמינל.
  3. העתק את קובץ הסביבה: cp src/.env.example src/.env.
  4. הרץ docker compose up -d --build.
  5. פתח את http://localhost:3000.

#בניית קובץ בינארי משלך

  1. שכפל את המאגר: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice.
  2. פתח את התיקייה המשוכפלת בטרמינל.
  3. הרץ cd src.
  4. בנה את הקובץ הבינארי:
    • Linux ו-macOS: go build -o whatsapp
    • Windows (שורת פקודה או PowerShell): go build -o whatsapp.exe
  5. הפעל את השרת:
    • Linux ו-macOS: ./whatsapp rest
    • Windows: .\whatsapp.exe rest
  6. פתח את http://localhost:3000 בדפדפן.

הרץ ./whatsapp --help (או .\whatsapp.exe --help ב-Windows) כדי לראות את כל הדגלים. הרץ ./whatsapp version כדי להדפיס רק את מספר הגרסה (לדוגמה, 9.6.0).

#קומפילציה צולבת ל-Raspberry Pi (ARM)

כדי לבנות עבור Raspberry Pi או מכשיר ARM אחר בלי שרשרת כלים של C (CGO), השתמש בתג הבנייה purego. זה בוחר מימוש SQLite ב-Go טהור.

  1. שכפל את המאגר: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice.

  2. פתח את התיקייה המשוכפלת בטרמינל.

  3. הרץ cd src.

  4. בנייה עבור Raspberry Pi Zero / 1 (ARMv6):

    CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -tags purego -o whatsapp-armv6
  5. בנייה עבור Raspberry Pi 2 / 3 / 4 (ARMv7 32-bit):

    CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -tags purego -o whatsapp-armv7
  6. העבר את הקובץ הבינארי ל-Pi שלך, תן לו הרשאת הרצה (chmod +x), והרץ אותו:

    • אם בנית ARMv6: ./whatsapp-armv6 rest
    • אם בנית ARMv7: ./whatsapp-armv7 rest

#שרת MCP (Model Context Protocol)

MCP אינו מצב או תהליך נפרד, הוא מוגש על ידי שרת ה-REST עצמו. בכל פעם ש-./whatsapp rest רץ, נקודת הקצה של MCP זמינה ב-http://<host>:<port><base-path>/mcp (ברירת המחדל http://localhost:3000/mcp) באמצעות תעבורת HTTP ניתנת להזרמה. השבת אותו עם MCP_ENABLED=false או --mcp-enabled=false (ברירת מחדל: מופעל).

#כלי MCP זמינים

יש שבעה כלים מאוחדים. סוכנים בוחרים התנהגות דרך ארגומנט type/action במקום כלי אחד לכל פעולה:

כליערכי type / action
whatsapp_sendtext, image, video, audio, document, sticker, location, contact, poll, link, forward
whatsapp_schedulelist, get, pause, resume, cancel
whatsapp_messagereact, edit, revoke, delete, mark_read, mark_played, star, unstar, download_media
whatsapp_chatlist_chats, list_contacts, get_messages, archive
whatsapp_groupcreate, join_with_link, leave, info, participants, add_participants, remove_participants, promote, demote, invite_link, set_name, set_topic, set_settings, join_requests, manage_join_requests
whatsapp_appstatus, login_qr, login_code, logout, reconnect
whatsapp_newsletterfollow, unfollow, info, directory, messages, message_updates, live_updates_subscribe, live_updates_unsubscribe, live_updates_list

whatsapp_send מקבל גם את scheduled_at, timezone, recurrence, weekdays, day_of_month, end_at ו-occurrence_limit כדי לתזמן את ההודעה במקום לשלוח אותה עכשיו. נהל את התוצאה עם whatsapp_schedule.

#בחירת מכשיר

בפריסות מרובות מכשירים, הכותרת X-Device-Id בחיבור לקוח ה-MCP בוחרת את המכשיר שמשמש בכל קריאת כלי באותו חיבור. אם היא מושמטת, מתבצעת חזרה למכשיר ברירת המחדל, בדיוק כמו ב-REST. כל קריאה בודדת יכולה לעקוף זאת עם ארגומנט device_id אופציונלי.

#הגדרת MCP

כוון את לקוח ה-MCP שלך לנקודת הקצה /mcp. הוא יורש את ה-Basic Auth של שרת ה-REST, ולכן כלול את אותה כותרת Authorization שבה משתמשות קריאות ה-REST שלך:

{
  "mcpServers": {
    "whatsapp": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "Basic dXNlcjpzZWNyZXQ=",
        "X-Device-Id": "628123456789"
      }
    }
  }
}

headers אופציונלי: כלול את Authorization רק כאשר Basic Auth מוגדר, ואת X-Device-Id רק עבור הגדרות מרובות מכשירים.

#OAuth עבור לקוחות MCP מרוחקים

OAuth 2.1 זמין ללקוחות מרוחקים שאינם יכולים לצרף כותרת Basic Auth. הוא מושבת כברירת מחדל. הגדרה מינימלית היא:

APP_BASIC_AUTH=admin:replace-with-a-strong-password
MCP_ENABLED=true
MCP_OAUTH_ENABLED=true
MCP_OAUTH_ISSUER_URL=https://gowa.example.com

כאשר OAuth מופעל, /mcp מקבל או אסימון Bearer או את אישורי Basic Auth המוגדרים. OAuth אינו מאמת נתיבי REST או ממשק משתמש. ראה MCP OAuth להגדרת לקוח, דרישות לפרוקסי הפוך, התנהגות של תת-נתיב ומודל האבטחה.

#מעבר ממצב MCP עצמאי

  • ./whatsapp mcp → ./whatsapp rest (MCP כלול כעת באופן אוטומטי).
  • http://localhost:8080/sse → http://localhost:3000/mcp.
  • 40 כלים מפורטים → 5 כלים מאוחדים (סוכנים בוחרים פעולות דרך השדה type/action).

#שרת REST לייצור (Docker)

באמצעות Docker Hub:

docker volume create whatsapp-storages
docker volume create whatsapp-statics
docker run --detach \
  --publish 3000:3000 \
  --name whatsapp \
  --restart always \
  --volume whatsapp-storages:/app/storages \
  --volume whatsapp-statics:/app/statics \
  aldinokemal2104/go-whatsapp-web-multidevice \
  rest --autoreply="Don't reply to this message, please"

באמצעות GitHub Container Registry:

docker volume create whatsapp-storages
docker volume create whatsapp-statics
docker run --detach \
  --publish 3000:3000 \
  --name whatsapp \
  --restart always \
  --volume whatsapp-storages:/app/storages \
  --volume whatsapp-statics:/app/statics \
  ghcr.io/aldinokemal/go-whatsapp-web-multidevice \
  rest --autoreply="Don't reply to this message, please"

#שרת REST לייצור (Docker Compose)

צור קובץ docker-compose.yml עם אחת מההגדרות הבאות.

באמצעות Docker Hub:

services:
  whatsapp:
    image: aldinokemal2104/go-whatsapp-web-multidevice
    container_name: whatsapp
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - whatsapp_storages:/app/storages
      - whatsapp_statics:/app/statics
    command:
      - rest
      - --basic-auth=admin:admin
      - --port=3000
      - --debug=true
      - --os=Chrome
      - --account-validation=false

volumes:
  whatsapp_storages:
  whatsapp_statics:

באמצעות GitHub Container Registry:

services:
  whatsapp:
    image: ghcr.io/aldinokemal/go-whatsapp-web-multidevice
    container_name: whatsapp
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - whatsapp_storages:/app/storages
      - whatsapp_statics:/app/statics
    command:
      - rest
      - --basic-auth=admin:admin
      - --port=3000
      - --debug=true
      - --os=Chrome
      - --account-validation=false

volumes:
  whatsapp_storages:
  whatsapp_statics:

באמצעות משתני סביבה עם Docker Hub:

services:
  whatsapp:
    image: aldinokemal2104/go-whatsapp-web-multidevice
    container_name: whatsapp
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - whatsapp_storages:/app/storages
      - whatsapp_statics:/app/statics
    environment:
      - APP_BASIC_AUTH=admin:admin
      - APP_PORT=3000
      - APP_DEBUG=true
      - APP_OS=Chrome
      - WHATSAPP_ACCOUNT_VALIDATION=false

volumes:
  whatsapp_storages:
  whatsapp_statics:

באמצעות משתני סביבה עם GitHub Container Registry:

services:
  whatsapp:
    image: ghcr.io/aldinokemal/go-whatsapp-web-multidevice
    container_name: whatsapp
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - whatsapp_storages:/app/storages
      - whatsapp_statics:/app/statics
    environment:
      - APP_BASIC_AUTH=admin:admin
      - APP_PORT=3000
      - APP_DEBUG=true
      - APP_OS=Chrome
      - WHATSAPP_ACCOUNT_VALIDATION=false

volumes:
  whatsapp_storages:
  whatsapp_statics:

הפעל את המחסנית שנבחרה עם docker compose up -d.

#שרת לייצור (קובץ בינארי)

הורד קובץ בינארי מדף הגרסאות, ואז הרץ אותו עם פקודת המשנה rest.

אפשר גם לעשות fork או לשנות את קוד המקור.

#ה-API הנוכחי

#API של MCP (Model Context Protocol)

  • מוגש ב-/mcp על ידי שרת ה-REST באמצעות HTTP ניתן להזרמה בכל פעם ש-MCP_ENABLED הוא true. כאשר APP_BASE_PATH מוגדר, הנתיב הוא <base-path>/mcp.
  • הכלים הזמינים מפורטים בסעיף "כלי MCP זמינים" למעלה.
  • תואם לכלי AI ולסוכנים שתומכים ב-MCP.

#API של HTTP REST

סטטוספעולהשיטהכתובת
✅מדדי שרתGET/app/metrics
✅הרשמה לנוכחות איש קשרPOST/user/presence/subscribe
ניסיונישליחת כפתורים, בקשת מיקום, קרוסלהPOST/send/interactive
✅בדיקת תקינותGET/health
✅רשימת מכשיריםGET/devices
✅הוספת מכשירPOST/devices
✅קבלת מידע על מכשירGET/devices/:device_id
✅הסרת מכשירDELETE/devices/:device_id
✅התחברות למכשיר (QR)GET/devices/:device_id/login
✅התחברות למכשיר (קוד)POST/devices/:device_id/login/code
✅התנתקות ממכשירPOST/devices/:device_id/logout
✅חיבור מחדש של מכשירPOST/devices/:device_id/reconnect
✅קבלת סטטוס מכשירGET/devices/:device_id/status
✅קבלת Webhook של מכשירGET/devices/:device_id/webhook
✅הגדרת Webhook של מכשירPATCH/devices/:device_id/webhook
✅התחברות עם קוד QRGET/app/login
✅התחברות עם קוד צימודGET/app/login-with-code
✅סטטוס צימוד PasskeyGET/app/passkey
✅תגובת צימוד PasskeyPOST/app/passkey/response
✅אישור צימוד PasskeyPOST/app/passkey/confirm
✅התנתקותGET/app/logout
✅חיבור מחדשGET/app/reconnect
✅מכשיריםGET/app/devices
✅סטטוס חיבורGET/app/status
✅מידע על האפליקציה (גרסה, מגבלות)GET/app/info
✅מידע על משתמשGET/user/info
✅תמונת משתמשGET/user/avatar
✅שינוי תמונת משתמשPOST/user/avatar
✅שינוי שם ה-Push של המשתמשPOST/user/pushname
✅רשימת הקבוצות שלי*GET/user/my/groups
✅רשימת הניוזלטרים שליGET/user/my/newsletters
✅קבלת הגדרות הפרטיות שליGET/user/my/privacy
✅רשימת אנשי הקשר שליGET/user/my/contacts
✅בדיקת משתמש וואטסאפGET/user/check
✅קבלת פרופיל עסקיGET/user/business-profile
✅שליחת הודעהPOST/send/message
✅שליחת תמונהPOST/send/image
✅שליחת שמעPOST/send/audio
✅שליחת קובץPOST/send/file
✅שליחת וידאוPOST/send/video
✅שליחת מדבקהPOST/send/sticker
✅שליחת איש קשרPOST/send/contact
✅שליחת קישורPOST/send/link
✅שליחת מיקוםPOST/send/location
✅שליחת סקר / הצבעהPOST/send/poll
✅שליחת נוכחותPOST/send/presence
✅שליחת נוכחות בצ'אט (מחוון הקלדה)POST/send/chat-presence
✅רשימת שליחות מתוזמנותGET/send/schedules
✅קבלת שליחה מתוזמנתGET/send/schedules/:schedule_id
✅השהיית שליחה מתוזמנתPOST/send/schedules/:schedule_id/pause
✅חידוש שליחה מתוזמנתPOST/send/schedules/:schedule_id/resume
✅ביטול שליחה מתוזמנתPOST/send/schedules/:schedule_id/cancel
✅ביטול הודעהPOST/message/:message_id/revoke
✅תגובה להודעהPOST/message/:message_id/reaction
✅מחיקת הודעהPOST/message/:message_id/delete
✅עריכת הודעהPOST/message/:message_id/update
✅סימון הודעה כנקראהPOST/message/:message_id/read
✅סימון הודעת שמע כמושמעתPOST/message/:message_id/played
✅סימון הודעה בכוכבPOST/message/:message_id/star
✅הסרת כוכב מהודעהPOST/message/:message_id/unstar
✅העברת הודעהPOST/message/:message_id/forward
✅הורדת מדיה של הודעהGET/message/:message_id/download
✅דחיית שיחהPOST/call/reject
✅הצטרפות לקבוצה באמצעות קישורPOST/group/join-with-link
✅קבלת מידע על קבוצה מקישורGET/group/info-from-link
✅קבלת מידע על קבוצהGET/group/info
✅עזיבת קבוצהPOST/group/leave
✅יצירת קבוצהPOST/group
✅רשימת משתתפי קבוצהGET/group/participants
✅הוספת משתתפי קבוצהPOST/group/participants
✅הסרת משתתפי קבוצהPOST/group/participants/remove
✅קידום משתתפי קבוצהPOST/group/participants/promote
✅הורדת דרגה של משתתפי קבוצהPOST/group/participants/demote
✅ייצוא משתתפי קבוצה (CSV)GET/group/participants/export
✅רשימת בקשות הצטרפות לקבוצהGET/group/participant-requests
✅אישור בקשות הצטרפות לקבוצהPOST/group/participant-requests/approve
✅דחיית בקשות הצטרפות לקבוצהPOST/group/participant-requests/reject
✅הגדרת תמונת קבוצהPOST/group/photo
✅הגדרת שם קבוצהPOST/group/name
✅נעילה או ביטול נעילה של הגדרות קבוצהPOST/group/locked
✅הגדרת מצב הכרזה בקבוצהPOST/group/announce
✅הגדרת נושא קבוצהPOST/group/topic
✅קבלת קישור הזמנה לקבוצהGET/group/invite-link
✅מעקב אחרי ניוזלטרPOST/newsletter/follow
✅ביטול מעקב אחרי ניוזלטרPOST/newsletter/unfollow
✅קבלת מידע על ניוזלטר (JID או הזמנה)GET/newsletter/info
✅חיפוש במדריך ניוזלטריםGET/newsletter/directory
✅קבלת הודעות ניוזלטרGET/newsletter/messages
✅קבלת עדכוני הודעות ניוזלטרGET/newsletter/message-updates
✅רשימת עדכונים חיים של ניוזלטרGET/newsletter/live-updates
✅הרשמה לעדכונים חיים של ניוזלטרPOST/newsletter/live-updates
✅ביטול הרשמה לעדכונים חיים של ניוזלטרDELETE/newsletter/live-updates
✅הורדת מדיה של הודעת ניוזלטרGET/newsletter/messages/{server_id}/download
✅קבלת רשימת צ'אטיםGET/chats
✅קבלת הודעות צ'אטGET/chat/:chat_jid/messages
✅נעיצת צ'אטPOST/chat/:chat_jid/pin
✅ארכוב צ'אטPOST/chat/:chat_jid/archive
✅הגדרת הודעות נעלמותPOST/chat/:chat_jid/disappearing
✅בקשת היסטוריית צ'אט (טעינת הודעות ישנות יותר)POST/chat/:chat_jid/history
✅סנכרון היסטוריה של ChatwootPOST/chatwoot/sync
✅סטטוס סנכרון של ChatwootGET/chatwoot/sync/status
✅רשימת הגדרות ChatwootGET/chatwoot/configs
✅קבלת הגדרת Chatwoot של מכשירGET/devices/:device_id/chatwoot/config
✅הגדרת תצורת Chatwoot של מכשירPUT/devices/:device_id/chatwoot/config
✅מחיקת הגדרת Chatwoot של מכשירDELETE/devices/:device_id/chatwoot/config
✅Webhook לתגובה של ChatwootPOST/chatwoot/webhook
✅Webhook לתגובה של Chatwoot לפי מכשירPOST/chatwoot/webhook/:device_id

✅ = זמין. * = יש מגבלות ידועות. ראה את ההערות למטה.

הערות:

  • *List My Groups: מחזיר לכל היותר 500 קבוצות בגלל מגבלה של פרוטוקול וואטסאפ. השרתים של וואטסאפ, לא ה-API הזה, אוכפים את המגבלה. ראה את קוד המקור של whatsmeow לפרטים.
  • /health ציבורי ותמיד רשום בנתיב השורש, גם כאשר APP_BASE_PATH מוגדר.
  • נתיבי Chatwoot נרשמים רק כאשר CHATWOOT_ENABLED=true.

#ממשק משתמש

#ממשק MCP

  • הגדרת MCP (נבדק ב-Cursor) הגדרת MCP
  • בדיקת MCP בדיקת MCP
  • הגדרת MCP מוצלחת MCP מוצלח

#לוח בקרה באינטרנט (gowa-ui)

לוח הבקרה נמצא במאגר משלו: aldinokemal/gowa-ui. כל מהדורה של gowa-ui מפרסמת קובץ gowa-ui.html עצמאי אחד. השרת מוריד את המהדורה האחרונה בעת ההפעלה (ובכל APP_UI_UPDATE_INTERVAL, שברירת המחדל שלו היא 3h), מאמת את תקציר ה-SHA-256 שלה, שומר אותה במטמון תחת storages/ui/, ומגיש אותה ב-/ מאחורי Basic Auth.

הגדרהברירת מחדלמטרה
APP_UI_ENABLEDtrueהגשת לוח הבקרה ב-/. הערך false מחזיר באנר JSON (רק API)
APP_UI_AUTO_UPDATEtrueהורדה או רענון מ-GitHub. השבתה לפריסות מבודדות מהרשת
APP_UI_REPOaldinokemal/gowa-uiהמאגר שהמעדכן עוקב אחריו, תמיד המהדורה האחרונה שלו, בלי נעיצת גרסה
APP_UI_ASSET_NAMEgowa-ui.htmlשם קובץ הנכס במהדורה להורדה
APP_UI_UPDATE_INTERVAL3hבאיזו תדירות לבדוק את releases/latest
APP_UI_GITHUB_TOKEN(ריק)אסימון אופציונלי להעלאת מגבלת הקצב של ה-API של GitHub
APP_UI_ASSET_SHA256(ריק)נעיצת שרשרת אספקה: סירוב לכל לוח בקרה שה-SHA-256 שלו שונה

מודל האמון: תקציר המהדורה מוכיח שההורדה תואמת את מה ש-GitHub מפרסם, ולא את זהות מי שפרסם אותה. מפעילים שמבצעים ביקורת על build מסוים יכולים לנעוץ אותו עם APP_UI_ASSET_SHA256 (כל מהדורה כוללת נכס .sha256. זו ההגדרה היחידה שנועצת build מדויק), להפנות את APP_UI_REPO למזלג שבשליטתם (המעדכן עדיין עוקב אחרי המהדורה האחרונה של המאגר הזה), או לאכלס מראש את המטמון ולהשבית את העדכון האוטומטי לגמרי.

שרתים מבודדים מהרשת: מקמו קובץ gowa-ui.html שהורד בנתיב storages/ui/index.html והגדירו APP_UI_AUTO_UPDATE=false. אפשר גם לארח את לוח הבקרה בעצמכם בכל מקום סטטי ולהפנות אותו לכתובת ה-URL של השרת הזה (ראו את ה-README של gowa-ui).

#הערה ל-macOS

אם מופיעה השגיאה invalid flag in pkg-config --cflags: -Xpreprocessor, הריצו:

export CGO_CFLAGS_ALLOW="-Xpreprocessor"

#חשוב

  • הפרויקט הזה אינו רשמי ואינו מסונף ל-WhatsApp.
  • השתמשו בפלטפורמת WhatsApp Business הרשמית כאשר אתם זקוקים לשילוב נתמך ברמת ייצור.