ניהול טוקנים, קבוצות ולוגים
wa-bridge הוא גשר שמעביר הודעות WhatsApp מתור הודעות (Supabase) אל WhatsApp דרך ספק השליחה kailai.tech. אתה לא שולח דרך הממשק הזה — הממשק הוא לניהול ומעקב. ההודעות עצמן נשלחות אוטומטית.
הודעה נכנסת לתור → הגשר מושך כל דקה → שולח דרך kailai → WhatsApp (whatsapp_outbox) (round-robin בין טוקנים) (5/דק' + השהיה)
whatsapp_outbox ב-Supabase (סטטוס pending).GET /pending-messages — זה תופס את ההודעות אטומית (מסמן claimed) כדי שלא יישלחו פעמיים.failed.POST /message-status/{id} עם sent/failed, וגם זוכר מקומית (הגנה כפולה מפני שליחה כפולה).הממשק ב-https://wa.yotaro.online, מוגן בסיסמה. (גישה חלופית מאובטחת: SSH tunnel ל-127.0.0.1:8088.)
@g.us), עם כפתור "העתק ID".sent/FAILED) עם היעד והטוקן ששימש, ושגיאות.הגשר רק קורא מהתור. כדי שהודעה תישלח, צריך להוסיף שורה לטבלה whatsapp_outbox ב-Supabase (פרויקט klrsogrwpbkrshpubhao). הטבלה מוגנת ב-RLS וצמודה ל-service_role — ההכנסה נעשית מצד ה-backend שלך (Supabase client / SQL / מערכת אוטומציה), לא דרך הגשר.
{
"to_type": "phone" | "group", // phone = איש פרטי, group = קבוצה
"to": "0501234567" | "120363049493915403@g.us" | "צוות מכירות",
"message": "טקסט ההודעה", // או null אם משתמשים בתבנית
"variables": null | { "name":"דוד", "order_id":"12345" } // לתבנית
}
to_type:"phone", to = מספר טלפון.to_type:"group", to = מזהה קבוצה (@g.us, מומלץ — לא תלוי בשינוי שם) או שם מדויק. את ה-ID אפשר להעתיק מ"קבוצות לפי טוקן" למעלה.variables במקום message.pending; הגשר מעביר ל-claimed → sent/failed.curl -X POST 'https://klrsogrwpbkrshpubhao.supabase.co/rest/v1/whatsapp_outbox' \
-H "apikey: <SERVICE_ROLE_KEY>" \
-H "Authorization: Bearer <SERVICE_ROLE_KEY>" \
-H "Content-Type: application/json" \
-d '{ "to_type":"group", "to":"120363049493915403@g.us",
"message":"הזמנה #12345 יצאה למשלוח" }'
SERVICE_ROLE_KEY הוא סוד — רק בצד שרת, לעולם לא בדפדפן/קוד לקוח.GET /functions/v1/pending-messages?limit=100 · header x-api-key · תופס ומחזיר את התור.POST /functions/v1/message-status/{id} · header x-api-key · מדווח sent/failed.שליחה מהירה של אותה הודעה להרבה נמענים — במיוחד מספרים פרטיים שלא כתבו לבוט קודם — היא הדרך המהירה ביותר לחסימה (notAuthorized).
הגנות שתמיד פעילות (הגשר + kailai):
הגנות מומלצות (בהגדרות הבוט ב-kailai → טריגרים):
success:false עם error_code (dedup_window/hourly_cap) ו-retry_after_seconds.variables מפחית סיכון).