תיעוד 1
Go WhatsApp: בנוי לשימוש יעיל בזיכרון
#תמיכה ב-GOWA
GOWA חוסך לכם זמן פיתוח או מפעיל את העסק שלכם? עזרו לקיים את הפרויקט דרך GitHub Sponsors.
חסות עוזרת לפנות זמן עבור:
- חקירת באגים והתעדכנות בשינויים של WhatsApp ושל whatsmeow.
- שיפור בדיקות רגרסיה, תיעוד ודוגמאות אינטגרציה.
- סקירת תרומות והכנת גרסאות.
חסות חודשית עוזרת להפוך את התחזוקה השוטפת לבת קיימא יותר. יחידים וצוותים מוזמנים.
עדיין לא מוכנים לתת חסות? גם דיווחי באגים שניתן לשחזר, שיפורי תיעוד ושיתוף של GOWA עוזרים.
#תמיכה ב-ARM, ב-AMD64 וב-MCP
הורדה:
#תיעוד
קראו את תיעוד GOWA המפורט להתקנה, לאימות, לניהול מכשירים, ל-webhooks, לדוגמאות ולחומר העזר של ה-API.
התיעוד עוקב אחרי main שמוזג, כולל שינויים אחרי v9.7.0. בדקו את הערות הגרסה ואת GET /app/info כשמשתמשים בקובץ בינארי או בתג קונטיינר נעוץ.
- הודעות אינטראקטיביות ניסיוניות מכסה כפתורי native-flow, בקשות מיקום וקרוסלות תמונה.
POST /send/interactiveהוא מיידי בלבד ו-REST בלבד. התאימות אצל הנמען משתנה. - מטעני webhook מתאר סכמות אירועים וחתימה.
- Chatwoot, MCP OAuth, Neon ואחסון מדיה מספקים מדריכי אינטגרציה ותפעול.
- OpenAPI מגדיר את חוזה ה-REST הקריא למכונה, כולל
/send/interactive.
#צומת קהילה של n8n
- חבילת n8n
- עברו אל Settings → Community Nodes, הזינו
@aldinokemal2104/n8n-nodes-gowa, ובחרו Install.
#שינויים שוברים
v6- מצב REST דורש
<binary> restבמקום<binary>.- דוגמה:
./whatsapp restבמקום./whatsapp.
- דוגמה:
- מצב MCP דרש
<binary> mcp.- דוגמה:
./whatsapp mcp.
- דוגמה:
- מצב REST דורש
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_*, לנעיצת שרשרת אספקה ולפריסה מנותקת רשת.
- MCP וה-API מאוחדים תחת
#יכולות
שליחת הודעות 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נרשם לעדכוני מחובר או לא מחובר של איש קשר, והם נמסרים דרך אירוע ה-webhookpresence. שליחת הנוכחות שלכם נשארת תחת/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=unavailableavailable: סימון החשבון כמקוון (מדכא התראות בטלפון).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), בעוד כתובת המכשיר שומרת על הסוד ועל מסנן האירועים שלה.
- הגדרה דרך API:
חתימות 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_ban | WhatsApp חסם את החשבון זמנית |
device.reachout_timelock | WhatsApp הגביל פתיחת צ'אטים חדשים |
אם ההגדרה הזו ריקה, כל האירועים מועברים.
סינון 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.
#משתני סביבה
כדי להשתמש במשתני סביבה:
- משורש המאגר, העתיקו את קובץ הדוגמה:
cp src/.env.example src/.env. - עדכנו את הערכים ב-
src/.envלפי הצורך. - לחלופין, הגדירו את אותם משתנים בסביבת התהליך.
#משתני סביבה זמינים
| משתנה | תיאור | ברירת מחדל | דוגמה |
|---|---|---|---|
APP_PORT | פורט היישום | 3000 | APP_PORT=8080 |
APP_HOST | כתובת מארח לקישור השרת | 0.0.0.0 | APP_HOST=127.0.0.1 |
APP_DEBUG | הפעלת יומן ניפוי שגיאות | false | APP_DEBUG=true |
APP_OS | שם מערכת ההפעלה (שם המכשיר ב-WhatsApp) | GOWA | APP_OS=MyApp |
APP_BASIC_AUTH | פרטי אימות Basic. נדרש לקישור שאינו loopback, עם שם משתמש וסיסמה בכל רשומה. loopback נשאר פתוח לפיתוח מקומי | - | APP_BASIC_AUTH=user1:pass1,user2:pass2 |
APP_ALLOW_UNAUTHENTICATED | חשיפת ה-API בלי Basic Auth בקישור שאינו loopback (לא מאובטח, עבור פרוקסי הפוך) | false | APP_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 שהורד | true | APP_UI_ENABLED=false |
APP_UI_AUTO_UPDATE | הורדה ורענון תקופתי של לוח הבקרה העדכני | true | APP_UI_AUTO_UPDATE=false |
APP_UI_REPO | מאגר GitHub שמכיל מהדורות gowa-ui | aldinokemal/gowa-ui | APP_UI_REPO=my-org/gowa-ui |
APP_UI_ASSET_NAME | שם קובץ נכס המהדורה של לוח הבקרה | gowa-ui.html | APP_UI_ASSET_NAME=gowa-ui.html |
APP_UI_UPDATE_INTERVAL | מרווח בין בדיקות עדכון של לוח הבקרה | 3h | APP_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 הניתן להזרמה ב-/mcp | true | MCP_ENABLED=false |
MCP_OAUTH_ENABLED | הפעלת אימות OAuth 2.1 עבור MCP | false | MCP_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_URI | URI של SQLite עבור לקוחות OAuth, קודים וגיבובי אסימונים | file:storages/oauth.db | MCP_OAUTH_DB_URI=file:storages/oauth.db |
DB_URI | URI לחיבור מסד נתונים. URI של Postgres בלי sslmode (או PGSSLMODE) משתמש ב-verify-full עבור מארחים מרוחקים וב-disable עבור יעדי loopback (localhost, 127.0.0.1, ::1) או שקעי unix. הגדירו sslmode=require כדי לשמור TLS לא מאומת. | file:storages/whatsapp.db | DB_URI=postgres://user:pass@host/db |
DB_KEYS_URI | URI אופציונלי של מסד נתונים למטמון מפתחות הצפנה והפעלה. השאירו ריק כדי להשתמש ב-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 במקביל לאחסון צ'אט | 5 | CHAT_STORAGE_MAX_OPEN_CONNS=10 |
WHATSAPP_AUTO_REPLY | הודעת מענה אוטומטי | - | WHATSAPP_AUTO_REPLY="Auto reply message" |
WHATSAPP_AUTO_MARK_READ | סימון אוטומטי של הודעות נכנסות כנקראו | false | WHATSAPP_AUTO_MARK_READ=true |
WHATSAPP_AUTO_DOWNLOAD_MEDIA | הורדה אוטומטית של מדיה מהודעות נכנסות | true | WHATSAPP_AUTO_DOWNLOAD_MEDIA=false |
WHATSAPP_IGNORE_STATUS_MEDIA | התעלמות מהורדת מדיה של סטטוס (status@broadcast) | false | WHATSAPP_IGNORE_STATUS_MEDIA=true |
WHATSAPP_AUTO_REJECT_CALL | דחייה אוטומטית של שיחות WhatsApp נכנסות | false | WHATSAPP_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 (לא מאובטח) | false | WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true |
WHATSAPP_WEBHOOK_EVENTS | רשימת היתר של אירועים להעברה (מופרדים בפסיקים, ריק = הכול) | - | WHATSAPP_WEBHOOK_EVENTS=message,message.ack |
WHATSAPP_WEBHOOK_IGNORE_JIDS | JID או תווים כלליים לדילוג בהעברה (מופרדים בפסיקים) | - | [email protected] |
WHATSAPP_WEBHOOK_ALL_DEVICE_RECEIPTS | העברת כל אישורי המכשירים המקושרים. צרכנים חייבים לטפל בכפילויות ובעדכונים שלא לפי הסדר | false | WHATSAPP_WEBHOOK_ALL_DEVICE_RECEIPTS=true |
WHATSAPP_WEBHOOK_DEVICE_MERGE_GLOBAL | webhook לפי מכשיר מתווסף לכתובות ה-URL הגלובליות במקום להחליף אותן | false | WHATSAPP_WEBHOOK_DEVICE_MERGE_GLOBAL=true |
WHATSAPP_ACCOUNT_VALIDATION | הפעלת אימות חשבון | true | WHATSAPP_ACCOUNT_VALIDATION=false |
WHATSAPP_PRESENCE_ON_CONNECT | נוכחות בחיבור: available, unavailable או none | unavailable | WHATSAPP_PRESENCE_ON_CONNECT=unavailable |
WHATSAPP_PROXY | פרוקסי יוצא עבור WebSocket של WhatsApp (SOCKS5/HTTP/HTTPS) | - | WHATSAPP_PROXY=socks5://user:pass@host:1080 |
WHATSAPP_PRESENCE_PULSE_ENABLED | הפעלת פעימת נוכחות יומית של available/unavailable | true | WHATSAPP_PRESENCE_PULSE_ENABLED=false |
WHATSAPP_PRESENCE_PULSE_INTERVAL | מרווח בין פעימות נוכחות | 24h | WHATSAPP_PRESENCE_PULSE_INTERVAL=24h |
WHATSAPP_PRESENCE_PULSE_DURATION | משך השהייה במצב available במהלך כל פעימה | 5m | WHATSAPP_PRESENCE_PULSE_DURATION=5m |
CHATWOOT_ENABLED | הפעלת שילוב Chatwoot | false | CHATWOOT_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 | הפעלת סנכרון היסטוריית הודעות אל Chatwoot | false | CHATWOOT_IMPORT_MESSAGES=true |
CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES | ימי היסטוריה לייבוא | 3 | CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES=7 |
CHATWOOT_IMPORT_DB_URI | URI ישיר של PostgreSQL של Chatwoot לסנכרון היסטוריה | - | CHATWOOT_IMPORT_DB_URI=postgresql://user:pass@host:5432/chatwoot_production?sslmode=disable |
CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE | הוספת מצייני מקום טקסטואליים לשורות מדיה במהלך ייבוא ישיר ממסד הנתונים | true | CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE=true |
CHATWOOT_IMPORT_MEDIA_WITH_REST | העלאת שורות מדיה מייבוא ישיר ממסד הנתונים דרך REST של Chatwoot | false | CHATWOOT_IMPORT_MEDIA_WITH_REST=true |
CHATWOOT_AUTO_CREATE | יצירה אוטומטית או שימוש חוזר בתיבת הדואר הנכנס של API של Chatwoot בהפעלה | false | CHATWOOT_AUTO_CREATE=true |
CHATWOOT_INBOX_NAME | שם תיבת הדואר הנכנס בשימוש כשיצירה אוטומטית מופעלת | WhatsApp | CHATWOOT_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 כשלא הוגדר סוד (לא מאובטח) | false | CHATWOOT_WEBHOOK_ALLOW_UNSIGNED=true |
CHATWOOT_WEBHOOK_SIGNATURE_TOLERANCE | גיל מרבי של חותמת זמן של webhook חתום של Chatwoot | 5m | CHATWOOT_WEBHOOK_SIGNATURE_TOLERANCE=2m |
CHATWOOT_REOPEN_CONVERSATION | פתיחה מחדש של שיחות Chatwoot שסומנו כפתורות עבור אנשי קשר שחוזרים | true | CHATWOOT_REOPEN_CONVERSATION=false |
CHATWOOT_CONVERSATION_PENDING | יצירת שיחות Chatwoot חדשות כממתינות | false | CHATWOOT_CONVERSATION_PENDING=true |
CHATWOOT_IGNORE_JIDS | JID או תווים כלליים להחרגה מהעברה אל Chatwoot | - | [email protected],[email protected] |
CHATWOOT_SIGN_MSG | קידומת שם הסוכן לתשובות סוכן Chatwoot | false | CHATWOOT_SIGN_MSG=true |
CHATWOOT_SIGN_DELIMITER | מפריד בין חתימת סוכן Chatwoot לגוף ההודעה | \n\n | CHATWOOT_SIGN_DELIMITER=" - " |
CHATWOOT_FORWARD_EDITS | שיקוף עריכות WhatsApp לתוך הערות משורשרות ב-Chatwoot | true | CHATWOOT_FORWARD_EDITS=false |
CHATWOOT_FORWARD_DELETES | שיקוף אירועי מחיקה לכולם של WhatsApp לתוך הערות Chatwoot | true | CHATWOOT_FORWARD_DELETES=false |
CHATWOOT_MESSAGE_READ | סנכרון מצב קריאה עבור הודעות WhatsApp ו-Chatwoot מקושרות | false | CHATWOOT_MESSAGE_READ=true |
CHATWOOT_MESSAGE_DELETE | מחיקת הודעות מקושרות בצד הנגדי כשמדווחת מחיקה | false | CHATWOOT_MESSAGE_DELETE=true |
תיעוד:
- לסכמות מפורטות של מטען webhook, למימוש האבטחה ולדוגמאות שילוב, ראו תיעוד מטען Webhook.
- למדריך המקיף לשילוב Chatwoot, ראו תיעוד שילוב Chatwoot.
- לפרטי פריסה ואבטחה של OAuth, ראו MCP OAuth.
הריצו ./whatsapp --help כדי לראות את כל דגלי שורת הפקודה.
#דרישות
#דרישות מערכת
- Go 1.26.0 ואילך (בעת בנייה ממקור)
- FFmpeg (לעיבוד מדיה)
#פלטפורמות נתמכות
- Linux (x86_64, ARM64)
- macOS (Intel, Apple Silicon)
- Windows (x86_64, מומלץ WSL)
#תלויות (בלי Docker)
- macOS:
brew install ffmpeg webpexport CGO_CFLAGS_ALLOW="-Xpreprocessor"
- Linux:
sudo apt updatesudo apt install ffmpeg webp
- Windows (מומלץ WSL, ראו התקנת WSL):
הערה: חבילת
webpמספקת את הכליםcwebp(מקודד),dwebp(מפענח) ו-webpmux(מחלץ פריימים). FFmpeg נדרש לעיבוד מדיה. כלי libwebp (webpmux+dwebp) משמשים לתמיכה במדבקות WebP מונפשות.
#איך להשתמש
#בסיסי
- שכפל את המאגר:
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice. - פתח את התיקייה המשוכפלת בטרמינל.
- הרץ
cd src. - הרץ
go run . rest. - פתח את
http://localhost:3000.
#Docker
Docker מונע את הצורך להתקין את Go, FFmpeg ו-libwebp ישירות על המארח.
- שכפל את המאגר:
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice. - פתח את התיקייה המשוכפלת בטרמינל.
- העתק את קובץ הסביבה:
cp src/.env.example src/.env. - הרץ
docker compose up -d --build. - פתח את
http://localhost:3000.
#בניית קובץ בינארי משלך
- שכפל את המאגר:
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice. - פתח את התיקייה המשוכפלת בטרמינל.
- הרץ
cd src. - בנה את הקובץ הבינארי:
- Linux ו-macOS:
go build -o whatsapp - Windows (שורת פקודה או PowerShell):
go build -o whatsapp.exe
- Linux ו-macOS:
- הפעל את השרת:
- Linux ו-macOS:
./whatsapp rest - Windows:
.\whatsapp.exe rest
- Linux ו-macOS:
- פתח את
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 טהור.
שכפל את המאגר:
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice.פתח את התיקייה המשוכפלת בטרמינל.
הרץ
cd src.בנייה עבור Raspberry Pi Zero / 1 (ARMv6):
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -tags purego -o whatsapp-armv6בנייה עבור Raspberry Pi 2 / 3 / 4 (ARMv7 32-bit):
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -tags purego -o whatsapp-armv7העבר את הקובץ הבינארי ל-Pi שלך, תן לו הרשאת הרצה (
chmod +x), והרץ אותו:- אם בנית ARMv6:
./whatsapp-armv6 rest - אם בנית ARMv7:
./whatsapp-armv7 rest
- אם בנית ARMv6:
#שרת 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_send | text, image, video, audio, document, sticker, location, contact, poll, link, forward |
whatsapp_schedule | list, get, pause, resume, cancel |
whatsapp_message | react, edit, revoke, delete, mark_read, mark_played, star, unstar, download_media |
whatsapp_chat | list_chats, list_contacts, get_messages, archive |
whatsapp_group | create, 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_app | status, login_qr, login_code, logout, reconnect |
whatsapp_newsletter | follow, 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
- בדוק את docs/openapi.yaml למפרטי API מפורטים.
- השתמש ב-Swagger Editor כדי להציג את ה-API.
- צור לקוחות HTTP באמצעות openapi-generator.
| סטטוס | פעולה | שיטה | כתובת |
|---|---|---|---|
| ✅ | מדדי שרת | 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 |
| ✅ | התחברות עם קוד QR | GET | /app/login |
| ✅ | התחברות עם קוד צימוד | GET | /app/login-with-code |
| ✅ | סטטוס צימוד Passkey | GET | /app/passkey |
| ✅ | תגובת צימוד Passkey | POST | /app/passkey/response |
| ✅ | אישור צימוד Passkey | POST | /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 |
| ✅ | סנכרון היסטוריה של Chatwoot | POST | /chatwoot/sync |
| ✅ | סטטוס סנכרון של Chatwoot | GET | /chatwoot/sync/status |
| ✅ | רשימת הגדרות Chatwoot | GET | /chatwoot/configs |
| ✅ | קבלת הגדרת Chatwoot של מכשיר | GET | /devices/:device_id/chatwoot/config |
| ✅ | הגדרת תצורת Chatwoot של מכשיר | PUT | /devices/:device_id/chatwoot/config |
| ✅ | מחיקת הגדרת Chatwoot של מכשיר | DELETE | /devices/:device_id/chatwoot/config |
| ✅ | Webhook לתגובה של Chatwoot | POST | /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 מוצלחת

#לוח בקרה באינטרנט (gowa-ui)
לוח הבקרה נמצא במאגר משלו: aldinokemal/gowa-ui. כל מהדורה של gowa-ui מפרסמת קובץ gowa-ui.html עצמאי אחד. השרת מוריד את המהדורה האחרונה בעת ההפעלה (ובכל APP_UI_UPDATE_INTERVAL, שברירת המחדל שלו היא 3h), מאמת את תקציר ה-SHA-256 שלה, שומר אותה במטמון תחת storages/ui/, ומגיש אותה ב-/ מאחורי Basic Auth.
| הגדרה | ברירת מחדל | מטרה |
|---|---|---|
APP_UI_ENABLED | true | הגשת לוח הבקרה ב-/. הערך false מחזיר באנר JSON (רק API) |
APP_UI_AUTO_UPDATE | true | הורדה או רענון מ-GitHub. השבתה לפריסות מבודדות מהרשת |
APP_UI_REPO | aldinokemal/gowa-ui | המאגר שהמעדכן עוקב אחריו, תמיד המהדורה האחרונה שלו, בלי נעיצת גרסה |
APP_UI_ASSET_NAME | gowa-ui.html | שם קובץ הנכס במהדורה להורדה |
APP_UI_UPDATE_INTERVAL | 3h | באיזו תדירות לבדוק את 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 הרשמית כאשר אתם זקוקים לשילוב נתמך ברמת ייצור.