כל הפרויקטים

WhatsApp Keyword Monitor & Listener — אפליקציות אנדרואיד

שתי אפליקציות Android (notification-listener + accessibility-service) שדוחפות matches של keywords מ-WhatsApp ל-webhook.

המטרה

לעקוב אחר WhatsApp אחרי הודעות עם keywords ולדחוף matches ל-webhook. שתי גרסאות: notification-listener קליל ו-accessibility-service עמוק עם חילוץ שולח + טלפון.

הפתרון

שתי אפליקציות Android. WhatsAppListener עם NotificationListenerService, UI ל-keywords, ID לכל מכשיר, dedup ו-POST ל-webhook. WhatsAppMonitor עם AccessibilityService + Jetpack Compose + Room, עובר על עץ ה-UI של WhatsApp, מחלץ מספרי טלפון עם prefixes מדינה (1/972/…), מתמיד עם DAOs ו-Reps, ו-Compose UI עם navigation. KeyStore משותף לחתימה.

עיקרי הדברים

  • שתי רמות הרשאה (notification קליל / accessibility עמוק) במשפחת אפליקציות אחת
  • WhatsAppSelectors.kt מרכזי שורד עדכוני WhatsApp עם patch בקובץ אחד
  • Dedup בין input paths שומר על ה-webhook שפוי
  • Room DB + Compose UI ב-Monitor; Listener קליל לפריסה בסיכון נמוך

האתגר

ל-WhatsApp אין API לקריאת הודעות ב-Android — כל scraping עוין.

שתי אפליקציות לשתי רמות אמון. Listener עם NotificationListenerService (הרשאה מינימלית). Monitor עם AccessibilityService (עץ UI מלא, טלפון + שולח + הקשר — דורש accessibility).

מספרי טלפון גולמיים מה-UI דורשים נרמול עקבי בין אזורים.

setSupportedCountryPrefixes(prefixes) (default ['1','972']) מסיר לא-ספרות ומנרמל + / 0 / country code למספר canonical.

Listener ו-Monitor יכולים לראות את אותה הודעה בשתי דרכים.

Deduplicator.kt עם fingerprint (שולח + טקסט + timestamp bucket) — פעם אחת לחלון.

עץ ה-accessibility של WhatsApp משתנה עם עדכוני app.

WhatsAppSelectors.kt מרכז את כל ה-selectors — עדכון WhatsApp = patch בקובץ אחד.

Android המודרני מגביל וזורק שירותים ארוכים.

NotificationListenerService רץ ב-process של המערכת (חסין ל-Doze); Accessibility רץ על runtime של OS — שניהם חוסכים foreground-service drain.

מה נמסר

  • WhatsAppListener/ — app של NotificationListenerService
  • WhatsAppMonitor/ — app של AccessibilityService + Compose עם Room
  • KeyStore/ — ניהול מפתח חתימה
  • שניהם ל-API 26+ / compile SDK 35 / Kotlin 1.9 / Compose

תוצאות

2 + shared KeyStore

אפליקציות

Notification / Accessibility

רמות הרשאה

HTTP webhook POST

פלט

API 26+

Min SDK

מה זה לימד אותי

  • מסלול קליל (notification) + מסלול עמוק (accessibility) יותר שימושיים מאחד
  • ריכוז selectors של WhatsApp בקובץ אחד הופך עדכון ל-patch
  • Dedup בין input paths חובה — אחרת ה-webhook מוצף