חיברתי בוט לווטסאפ: באיזו ספרייה ואיזה מספר
Published on

חיברתי בוט לווטסאפ: באיזו ספרייה ואיזה מספר

Authors

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

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

באיזו ספרייה אני משתמש?

הכלי שעושה את העבודה מול ווטסאפ נקרא WAHA, קיצור של WhatsApp HTTP API. בגדול זה שירות קטן שאני מריץ אצלי בDocker (כן, כמו כל השאר), והוא נותן לי REST API מעל ווטסאפ. מתחברים אליו בדיוק כמו לWhatsApp Web: סורקים QR מהטלפון, וזהו, יש לי ווטסאפ שאפשר לדבר איתו בקוד.

חשוב לי להגיד את זה בכנות: WAHA הוא לא הAPI הרשמי של ווטסאפ. הAPI הרשמי (WhatsApp Business) עולה כסף, דורש אישורים ותבניות הודעה מאושרות מראש, וכל הסיפור. WAHA לעומת זה פשוט מפעיל מאחורי הקלעים קליינט של ווטסאפ ומדבר איתו. זה בדיוק סוג הדבר שאני אוהב, חינמי ואצלי, אבל יש לזה מחיר שאספר עליו בשאלה הבאה.

ופה מגיע החלק היפה: אני לא באמת כותב "בוט" עם קוד. את כל ההיגיון אני בונה בn8n, אותו כלי אוטומציות שכבר הזכרתי בפוסטים קודמים. יש לn8n רכיב קהילתי לWAHA, אז אני פשוט מחבר תיבות אחת לשנייה: הודעה נכנסת בווטסאפ, WAHA שולח webhook לn8n, n8n מחליט מה לעשות וקורא בחזרה לWAHA כדי לענות. פחות קוד, פחות תחזוקה, וקל מאוד לראות מה קורה.

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

עשיתי מספר נפרד בשביל זה?

כן. ובמודע.

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

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

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

  • רק בתגובה. הבוט אף פעם לא פותח שיחה מעצמו. אנשים שולחים אליו קודם (אני משתף קישור wa.me).
  • משהה ומקליד. לפני שהוא עונה, הוא מסמן שההודעה נקראה, מראה "מקליד...", מחכה כמה שניות אקראיות ורק אז שולח. אף פעם לא מיידי, אף פעם לא בתזמון קבוע.
  • לא משכפל הודעות. אותה הודעה בדיוק לעשרות אנשים זה דגל אדום, אז אני מגוון את הנוסח.
  • מגביל קצב. מקסימום כמה הודעות בשעה לאותו איש קשר, ואז עוצר.

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

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

אני אוסף איתו היסטוריית שיחות מקבוצות?

זאת אולי השאלה הכי מסקרנת שקיבלתי, והתשובה הכנה היא: עדיין לא.

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

למה לא מימשתי? כמה סיבות:

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

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

אז מה כן?

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

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