
# ייחוס לחיצות על מודעות עבור WhatsApp

אם אתם מריצים מודעות Meta או Google לדף באתר האינטרנט שלכם, ובדף זה יש כפתור WhatsApp, <span data-t="appName">DM Champ</span> יכול לומר לכם מאיזו לחיצה על מודעה הגיעה כל שיחת WhatsApp. אתם מדביקים סקריפט קטן אחד באתר שלכם. כאשר מבקר מקיש על כפתור ה-WhatsApp שלכם, הלחיצה נשמרת ומותאמת להודעה הראשונה שהוא שולח לכם. לאחר מכן, איש הקשר מציג את הקמפיין שממנו הגיע, ונתוני הלחיצה עוברים עם איש הקשר לתוך webhooks, ל-API, ואם תרצו, בחזרה ל-Meta.

זה עובד עבור כל דף עם כפתור WhatsApp: דף נחיתה, דף הזמנות, דף מחירים או שאלון שמסתיים ב-"שלח את התשובות שלי ב-WhatsApp".

> דף זה עוסק במודעות ששולחות אנשים ל**אתר האינטרנט שלכם** תחילה. אם המודעות שלכם פותחות את WhatsApp ישירות (מודעות "Click to WhatsApp" של Meta), זה מכוסה באופן אוטומטי, ללא סקריפט, ב-[ייחוס מודעות Click-to-WhatsApp](click-to-whatsapp-attribution.md).

---

## הגדרה

1. עברו אל **הגדרות → מעקב אחר לחיצות על מודעות** (קבוצת אינטגרציות).
2. לחצו על **הפעל וקבל את הסקריפט שלי**. החשבון שלכם מקבל מפתח אתר משלו וסקריפט בשורה אחת.
3. העתיקו את הסקריפט והדביקו אותו ממש לפני תגית ה-</body> הסוגרת (`</body>`) בכל דף שיש בו כפתור WhatsApp:

{% code overflow="wrap" %}
```html
<script src="https://api.dmchamp.com/v1/ad-visit/YOUR_SITE_KEY.js" async></script>
```
{% endcode %}

4. אופציונלי: תחת **מספר WhatsApp**, הקלידו את המספר שאליו מקשרים הכפתורים שלכם. רק קישורים למספר זה ינוטרו לאחר מכן. השאירו ריק כדי לנטר כל קישור WhatsApp באתר.
5. בחרו את הניסוח של מספר הפנייה (ראו להלן) ולחצו על **שמור**. אינכם צריכים לשנות את הסקריפט באתר שלכם לאחר שינוי הגדרות.
6. בדקו זאת: פתחו את הדף שלכם מקישור עם תגית קמפיין עליו, לדוגמה `https://yoursite.com/?utm_source=test&utm_campaign=setup-check`, הקישו על כפתור ה-WhatsApp שלכם ושלחו את ההודעה. פתחו את איש הקשר הזה ב-Chats: לוח איש הקשר מציג **הגיע מלחיצה על מודעה** עם הקמפיין.

מפתח האתר כבר נמצא בתוך הסקריפט. הוא אינו סיסמה, לכן הוא בטוח לשימוש בדף ציבורי.

::: master-only
**סוכנויות:** לכל חשבון לקוח יש מפתח אתר וסקריפט משלו, כך שאתר האינטרנט של כל לקוח מדווח לחשבון שלו. ניתן להסתיר את המקטע עבור לקוח באמצעות נראות תפריט, כמו כל מקטע הגדרות אחר.
:::

---

## מה הסקריפט עושה

- **כאשר הדף נטען**, הוא שומר את מזהי הלחיצה על המודעה ותגיות הקמפיין (פרמטרי ה-`utm_`) מכתובת הדף באחסון הסשן של כרטיסיית הדפדפן, כך שהם עדיין שם אם המבקר צופה בדף אחר תחילה. הוא לא מגדיר עוגייה, לא טוען שום דבר אחר ולא שולח דבר.
- **כאשר המבקר מקיש על קישור WhatsApp** (`wa.me`, `api.whatsapp.com/send` או `whatsapp://send`), הוא מוסיף את מספר הפנייה להודעה, מתעד את הביקור ומאפשר להקשה להמשיך ל-WhatsApp כרגיל.

שום דבר לא נשלח ל-<span data-t="appName">DM Champ</span> לפני ההקשה.

---

## מספר הפנייה

מספר קצר, כמו האסמכתא שחנות או מרפאה נותנות לכם, מתווסף להודעת ה-WhatsApp של המבקר. כך <span data-t="appName">DM Champ</span> יודע בדיוק איזו לחיצה על מודעה שייכת לאיזו שיחה. הודעה נראית כך:

```
Hi, I would like to know more.
Enquiry no. 4827
```

- **ניסוח:** "Enquiry no." הוא ברירת המחדל. ניתן להשתמש בכל שורת טקסט שנשמעת טבעית לעסק שלכם, כגון "Booking ref" או "Ref". ללא ספרות.
- **מיקום:** **בשורה נפרדת משלו** (ברירת המחדל) או **בסוף הטקסט**. דף ההגדרות מציג תצוגה מקדימה חיה.
- **אורך:** 4 ספרות, או 5 כשהאתר שלכם עמוס מאוד.
- **סוכן ה-AI שלכם לעולם לא רואה אותו** ולעולם לא חוזר עליו. תיבת הדואר הנכנס מציגה את ההודעה המלאה, כולל המספר.

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

---

## קוד חידון או כפתור משלך

אם הדף שלך בונה את הודעת ה-WhatsApp בעצמו (חידון שמכניס את התשובות לתוך הטקסט, או קוד כפתור משלך), הוסף את `data-manual` לתגית ה-script:

{% code overflow="wrap" %}
```html
<script src="https://api.dmchamp.com/v1/ad-visit/YOUR_SITE_KEY.js" data-manual async></script>
```
{% endcode %}

עם `data-manual`, הסקריפט לא משנה יותר קישורי WhatsApp באופן עצמאי. הקוד שלך קורא לו ממש לפני פתיחת ה-WhatsApp, כך שכל ביקור מתועד פעם אחת:

- `window.ChatAttribution.text(finalText, number)` מחזיר את הטקסט שלך בתוספת מספר הפנייה, ומתעד את הביקור. השתמש בטקסט המוחזר בקישור ה-WhatsApp שלך.
- `window.ChatAttribution.link(finalText, number)` מבצע פעולה דומה ומחזיר קישור `wa.me` מוכן עם הטקסט הזה. השאר את המספר ריק כדי להשתמש במספר המופיע תחת **מספר WhatsApp** בהגדרות.

{% code overflow="wrap" %}
```html
<script>
  function sendAnswers(answers) {
    var text = "Hi, my answers: " + answers.join(", ");
    if (window.ChatAttribution) {
      window.location.href = window.ChatAttribution.link(text, "+15551234567");
    } else {
      window.location.href = "https://wa.me/15551234567?text=" + encodeURIComponent(text);
    }
  }
</script>
```
{% endcode %}

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

---

## מה מתועד

ברגע הלחיצה, תיעוד הביקור כולל:

- מזהי לחיצות על מודעות בכתובת הדף, כגון `fbclid` (Meta) ו-`gclid` (Google)
- עוגיות `_fbc` ו-`_fbp`, אם הפיקסל של Meta שהטמעת הגדיר אותן באתר שלך (הסקריפט קורא אותן, הוא לעולם לא מגדיר אותן)
- תגיות קמפיין (`utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, `utm_term`)
- דף הנחיתה, הדף שממנו הגיע המבקר, הדפדפן וטקסט ההודעה
- כתובת ה-IP והזמן, שנוספים על ידי <span data-t="appName">DM Champ</span> כאשר הביקור מגיע

תיעודי ביקורים נשמרים למשך **90 יום**. כאשר מתבצעת התאמה לביקור, עותק של נתוני הלחיצה שלו נשמר אצל איש הקשר ונשאר איתו עד למחיקתו.

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

---

## איך עובדת ההתאמה

כאשר מגיעה ההודעה הראשונה מאיש קשר, <span data-t="appName">DM Champ</span> מחפש ביקור מ-**15 הדקות** שקדמו לה:

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

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

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

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

מגבלות:

- **התואם הראשון לעולם לא נדרס.** לחיצות חדשות יותר נכנסות ללחיצה האחרונה.
- **WhatsApp בלבד:** ערוצי WhatsApp Business API ו-WhatsApp Web.
- **15 דקות:** מבקר שמקיש על הכפתור אך שולח את ההודעה זמן רב לאחר מכן לא יותאם.
- **קדימה בלבד:** לאנשי קשר מלפני התקנת הסקריפט אין תואם.

---

## היכן ניתן לראות זאת

- **לוח איש קשר:** **הגיע מלחיצה על מודעה** עם הקמפיין או המקור ותאריך הלחיצה הראשונה. רחף מעל לפרטים, כולל הלחיצה האחרונה כאשר קיימת כזו.
- **Webhooks:** `contact.ad_attribution` ב-[webhooks של תגיות סוכן](webhooks.md#contact-tags-updated-webhook) ובכל אירוע מנוי webhook שנושא איש קשר.
- **API:** `ad_attribution` ברשימת אנשי הקשר ו-`adAttribution` על איש קשר בודד, במקטע אנשי הקשר של תיעוד ה-API.
- **כלי MCP:** אותו אובייקט על כל איש קשר שהם מחזירים.

הערך הוא `null` כאשר לאיש הקשר אין תואם. השדות להלן מתארים את הלחיצה הראשונה. כאשר לחיצה מאוחרת יותר הותאמה, `latest` מחזיק אותה עם אותם שדות; הוא נעדר עד אז.

| שדה | מה זה |
|---|---|
| `visit_at` | מתי המבקר הקיש על כפתור ה-WhatsApp. |
| `matched_at` | מתי הביקור הותאם לאיש הקשר. |
| `match_method` | `reference` (הותאם לפי מספר פנייה) או `text` (הותאם לפי טקסט הודעה זהה). |
| `reference` | מספר הפנייה, או `null` כאשר הוא היה כבוי. |
| `fbc` / `fbp` | לחיצת ה-Meta ועוגיות הדפדפן מה-Meta pixel שלך, אם קיימים. |
| `fbclid` | מזהה לחיצת מודעת ה-Meta מכתובת הדף. |
| `gclid` / `gbraid` / `wbraid` | מזהי לחיצת מודעת ה-Google מכתובת הדף. |
| `utm_source` / `utm_medium` / `utm_campaign` / `utm_content` / `utm_term` | תגיות הקמפיין מכתובת הדף. |
| `landing_url` | הדף שאליו הגיע המבקר. |
| `referrer` | הדף שממנו הגיע המבקר. |
| `client_ip` | כתובת ה-IP של המבקר. |
| `user_agent` | הדפדפן של המבקר. |
| `site_key` | מפתח האתר של הסקריפט שתיעד את הביקור. |
| `visit_id` | המזהה של רשומת הביקור. |
| `latest` | הלחיצה החדשה ביותר שהותאמה לאחר הראשונה, עם אותם שדות. משמש לאירועים שנשלחו ל-Meta. נעדר כאשר אין כזו. |

---

## שליחת תוצאות ל-Meta (אופציונלי)

ניתן לאפשר ל-<span data-t="appName">DM Champ</span> לדווח על תוצאות בחזרה לחשבון מודעות ה-Meta שלך, כך ש-Meta תלמד אילו מודעות מביאות לידים ומכירות אמיתיים ותבצע אופטימיזציה עבורן. פעולה זו משתמשת בפרטי ה-Conversions API של Meta שלך.

1. ב-Meta Events Manager, מצא את מזהה הפיקסל שלך (נקרא גם dataset) תחת Data sources, וצור אסימון גישה (access token) תחת Settings, Conversions API, **Generate access token**.
2. ב-**Settings → Ad click tracking**, תחת **Send results to Meta (optional)**, הזן את ה-**Pixel / dataset ID** ואת ה-**Access token**. לחץ על **Save Meta details**.
3. אופציונלי: בדוק את החיבור. ב-Meta Events Manager, פתח את הפיקסל שלך ועבור ללשונית **Test events**, העתק את קוד הבדיקה שמופיע שם, הדבק אותו תחת **Send a test event** ולחץ על **Send test event**. השורה מתחת לכפתור תציג "Meta received 1 test event" (חפש זאת תחת Test events ב-Meta), או תציג את הסיבה של Meta במקרה של סירוב, למשל אסימון שגוי. הקוד משמש לבדיקה זו בלבד ולעולם אינו נשמר.
4. פתח את עורך הסוכנים (agent editor), עבור ללשונית **Tags** ופתח תג. תחת **Send to Meta**, בחר את האירוע: **Lead**, **Contact**, **Schedule**, **Purchase** או שם מותאם אישית. אופציונלית, הוסף ערך ומטבע.

מאותו רגע ואילך, בכל פעם שתגית זו מוחלת על איש קשר (על ידי ה-AI, ידנית, דרך ה-API או על ידי אוטומציה), <span data-t="appName">DM Champ</span> שולח את האירוע ל-Meta עם נתוני הלחיצה החדשים ביותר של איש הקשר (`fbc`, `fbp`, כתובת IP, דפדפן, דף נחיתה, מהלחיצה האחרונה אם קיימת, אחרת הראשונה) בתוספת הטלפון, האימייל והשם שלהם, מוצפנים (hashed), כך ש-Meta תוכל לקשר זאת למודעה. איש קשר ללא תואם עדיין שולח את האירוע, עם הטלפון, האימייל והשם המוצפנים בלבד.

- **אירועים חיים נספרים תמיד:** קוד אירוע בדיקה לעולם אינו נשמר עם פרטי ה-Meta שלך, לכן האירועים שהתגים והאוטומציות שלך שולחים מגיעים תמיד לנתונים האמיתיים שלך ב-Meta, ולעולם לא ללשונית Test events.
- **ללא כפילות בספירה:** לכל אירוע יש מזהה קבוע המורכב ממזהה איש הקשר ושם התג. אם ה-CRM שלך שולח את אותו אירוע ל-Meta עם אותו מזהה, Meta שומרת רק אחד.
- **חלון הייחוס של Meta:** Meta מזכה אירוע בפרסומת רק בתוך חלון הייחוס שלה, שהוא כברירת מחדל 7 ימים לאחר הקליק. עסקה שנסגרת שבועות לאחר מכן לא תיספר בפני עצמה, לכן שלח גם אירוע מוקדם יותר, למשל תג עבור התייעצות שנקבעה או שולמה.

---

## שליחת המרות מאוטומציות

תגית שולחת את האירוע שלה ברגע שהיא מוחלת. כאשר התוצאה מתרחשת במקום אחר, כגון סגירת עסקה ב-CRM שלך או קביעת פגישת ייעוץ, השתמש בפעולה **שלח המרה ל-Meta** בתוך אוטומציה. פעולה זו מדווחת על אירוע אחד ל-dataset של Meta דרך ה-Conversions API, כך ש-Meta תבצע אופטימיזציה למודעות שלך על סמך תוצאות אמיתיות ולא רק על סמך הודעות.

היא משתמשת באותם פרטי Meta כמו התגיות: **מזהה פיקסל / dataset** ו-**אסימון גישה (Access token)** תחת **הגדרות ← מעקב אחר לחיצות על מודעות**. ללא פרטים אלו, השלב ייכשל עם ההודעה "Meta אינה מחוברת".

**השדות**

| שדה | מה הוא עושה |
|---|---|
| **Event name** | חובה. **Purchase**, **Schedule**, **Lead** או שם משלך. שם משלך משתמש באותיות, ספרות, רווחים וקווים תחתונים, מתחיל באות ואורכו לכל היותר 40 תווים. |
| **Value** ו-**Currency** | סכום ההמרה, כגון סכום העסקה. המטבע הוא קוד בן 3 אותיות וברירת המחדל היא EUR. הערך נשלח רק כאשר אתה ממלא אותו. |
| **Contact** | אופציונלי. איש הקשר שאליו שייכת ההמרה. |
| **Email**, **Phone**, **First name**, **Last name** | פרטי האדם. מלא אותם כאשר האדם אינו איש קשר, או כדי להוסיף על מה שכבר קיים עבור איש הקשר. |
| **Your own ID for the person** | מזהה עבור האדם מהמערכת שלך, כגון מזהה CRM. |
| **Event ID** | המזהה ש-Meta משתמשת בו כדי לספור את האירוע פעם אחת. ראה להלן. |
| **Event time** | מתי התרחשה ההמרה, בשניות unix או כתאריך. לכל היותר לפני 7 ימים. השאר ריק כדי להשתמש ברגע שבו השלב מופעל. |
| **Page URL** | הדף שאליו מקושרת ההמרה, אם יש כזה. |
| **Test event code** | רק עבור הרצת בדיקה: הקוד מלשונית Test events של Meta. אירוע שנשלח איתו יופיע תחת Test events ולא ייספר עבור הפרסומות שלך. השאר ריק עבור אירועים חיים. |

מלא לפחות אחד מהשדות: **איש קשר**, **אימייל** או **טלפון**. האדם אינו חייב להיות איש קשר: עסקה ב-HubSpot שמגיעה למצב 'נסגר כזכייה' (Closed Won) יכולה לשלוח אירוע 'רכישה' (Purchase) עם סכום העסקה והאימייל של הקונה.

כאשר בוחרים **איש קשר**, נעשה שימוש בטלפון, באימייל ובשם שלו. אם הוא הגיע מלחיצה על מודעה שהסקריפט זיהה, פרטי הלחיצה עוברים גם הם, מה שעוזר ל-Meta לשייך את האירוע למודעה. אימייל, טלפון ושמות עוברים גיבוב (hashing) לפני שהם נשלחים. מזהה הלחיצה, כתובת ה-IP והדפדפן נשלחים כפי ש-Meta דורשת.

**מזהה אירוע וספירה כפולה**

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

**במה זה שונה מאירועי תגית**

אירוע **שלח ל-Meta** של תגית יוצא פעם אחת לכל איש קשר עבור אותה תגית (לכל היותר פעם ב-30 יום). פעולה זו שולחת בכל פעם שהיא מופעלת. מזהה האירוע הוא מה שמונע מהמרה להיספר פעמיים.

**דוגמה: עסקה שנסגרה ופגישת ייעוץ שנקבעה**

1. התחל אוטומציה עם הטריגר **אירוע אפליקציה**, בחר ב-**HubSpot** וב-**שלב עסקה עודכן**, והוסף **תנאי** כך שרק 'נסגר כזכייה' ימשיך הלאה.
2. הוסף **שלח המרה ל-Meta**. הגדר את **שם אירוע** ל-**Purchase**, את **ערך** לסכום העסקה (הכנס אותו באמצעות כפתור ה-**+**) ואת **מטבע** למטבע שלך. שים את האימייל של הקונה ב-**אימייל** ואת מזהה העסקה ב-**מזהה אירוע**, כך שאותה עסקה לעולם לא תיספר פעמיים.
3. עבור פגישת ייעוץ שנקבעה, התחל אוטומציה שנייה עם הטריגר **פגישה נקבעה** והוסף **שלח המרה ל-Meta** עם **שם אירוע** מוגדר ל-**Schedule** ואיש הקשר מהטריגר ב-**איש קשר**. אם תרצה, הוסף שלב **שלח המרה ל-Meta** שני ששולח **Purchase** עם ערך קבוע, כגון מחיר הייעוץ.

ניתן גם לשלוח המרה דרך ה-API עם `POST https://api.dmchamp.com/v1/ad-attribution/meta-event`. היא מקבלת את אותם שדות בפורמט snake case: `event_name`, `value`, `currency`, `contact_id`, `email`, `phone`, `first_name`, `last_name`, `external_id`, `event_id`, `event_time`, `event_source_url` ו-`test_event_code`.

---

## שאלות נפוצות

**האם זה עובד אם המודעה שלי פותחת את WhatsApp ישירות?**
מודעות אלו אינן עוברות דרך האתר שלך, לכן הסקריפט לעולם לא מופעל. Meta שולחת את פרטי המודעה עם ההודעה הראשונה במקום זאת, ראה [ייחוס מודעות Click-to-WhatsApp](click-to-whatsapp-attribution.md).

**האם הסקריפט מאט את האתר שלי או מגדיר עוגיות?**
הוא נטען ברקע (`async`), אינו מגדיר עוגיות ואינו טוען שום דבר אחר. הוא שולח משהו רק כאשר מבקר לוחץ על כפתור WhatsApp.

**האם ניתן לעקוב אחר Google Ads בנוסף למודעות Meta?**
כן. מזהי לחיצה של Google (`gclid`, `gbraid`, `wbraid`) וכל תגיות הקמפיין מתועדים ומוצגים על איש הקשר. שליחת תוצאות בחזרה זמינה עבור Meta בלבד.

**מדוע איש קשר לא קיבל התאמה?**
הסיבות הנפוצות ביותר: ההודעה הגיעה יותר מ-15 דקות לאחר הלחיצה, מספר הפנייה הוסר מההודעה, מספר הפנייה כבוי ומבקר אחר שלח את אותו טקסט, או שהדף אינו מכיל את הסקריפט.

**האתר שלי מקשר לשני מספרי WhatsApp. האם ניתן לעקוב רק אחרי אחד?**
כן. הקלד את המספר הזה תחת **מספר WhatsApp** בהגדרות. השאר ריק כדי לעקוב אחר כל קישור WhatsApp.

**האם אוכל לשנות את הניסוח מאוחר יותר?**
כן. שינויים חלים על האתר שלך באופן מיידי; אין צורך להדביק את הסקריפט שוב.
