
# Annonsklicksattribuering för WhatsApp

Om du kör Meta- eller Google-annonser till en sida på din egen webbplats, och den sidan har en WhatsApp-knapp, kan <span data-t="appName">Your AI Connector</span> berätta för dig vilket annonsklick varje WhatsApp-konversation kom ifrån. Du klistrar in ett litet skript på din webbplats. När en besökare trycker på din WhatsApp-knapp sparas klicket och matchas med det första meddelandet de skickar till dig. Kontakten visar sedan vilken kampanj den kom ifrån, och klickdatan följer med kontakten in i webhooks, API:et och, om du vill, tillbaka till Meta.

Detta fungerar för alla sidor med en WhatsApp-knapp: en målsida, en bokningssida, en prissida eller ett frågeformulär som avslutas med "Skicka mina svar på WhatsApp".

> Den här sidan handlar om annonser som skickar folk till **din webbplats** först. Om dina annonser öppnar WhatsApp direkt (Metas "Klicka för att chatta på WhatsApp"-annonser), täcks det automatiskt, utan ett skript, i [Attribuering för Klicka för att chatta på WhatsApp-annonser](click-to-whatsapp-attribution.md).

---

## Konfigurera

1. Gå till **Inställningar → Annonsklickspårning** (Integrationsgruppen).
2. Klicka på **Aktivera och hämta mitt skript**. Ditt konto får sin egen webbplatsnyckel och ett skript på en rad.
3. Kopiera skriptet och klistra in det precis före den avslutande `</body>`-taggen på varje sida som har en WhatsApp-knapp:

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

4. Valfritt: under **WhatsApp-nummer**, skriv in numret som dina knappar länkar till. Endast länkar till det numret spåras då. Lämna det tomt för att spåra varje WhatsApp-länk på webbplatsen.
5. Välj formuleringen för förfrågningsnumret (se nedan) och klicka på **Spara**. Du behöver inte ändra skriptet på din webbplats efter en inställningsändring.
6. Testa det: öppna din sida från en länk med en kampanjtagg på, till exempel `https://yoursite.com/?utm_source=test&utm_campaign=setup-check`, tryck på din egen WhatsApp-knapp och skicka meddelandet. Öppna den kontakten i Chattar: kontaktpanelen visar **Kom från ett annonsklick** med kampanjen.

Webbplatsnyckeln finns redan i skriptet. Det är inte ett lösenord, så det är helt säkert att ha på en offentlig sida.


---

## Vad skriptet gör

- **När sidan laddas**, sparar det annonsklick-ID:n och kampanjtaggar ( `utm_` -parametrarna) från sidans adress i webbläsarflikens sessionslagring, så att de finns kvar om besökaren tittar på en annan sida först. Det sätter ingen cookie, laddar inget annat och skickar ingenting.
- **När besökaren trycker på en WhatsApp-länk** (`wa.me`, `api.whatsapp.com/send` eller `whatsapp://send`), lägger det till förfrågningsnumret i meddelandet, registrerar besöket och låter trycket fortsätta till WhatsApp som vanligt.

Ingenting skickas till <span data-t="appName">Your AI Connector</span> före trycket.

---

## Förfrågningsnumret

Ett kort nummer, likt referensen en butik eller klinik ger dig, läggs till i besökarens WhatsApp-meddelande. Det är så <span data-t="appName">Your AI Connector</span> vet exakt vilket annonsklick som hör till vilken konversation. Ett meddelande ser ut så här:

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

- **Formulering:** "Förfrågningsnr" är standard. Du kan använda vilken textrad som helst som låter naturlig för din verksamhet, till exempel "Bokningsref" eller "Ref". Inga siffror.
- **Var:** **På en egen sista rad** (standard) eller **I slutet av texten**. Inställningssidan visar en förhandsgranskning i realtid.
- **Längd:** 4 siffror, eller 5 när din webbplats är mycket välbesökt.
- **Din AI-agent ser det aldrig** och upprepar det aldrig. Inkorgen visar hela meddelandet, inklusive numret.

Du kan stänga av förfrågningsnumret. Matchning fungerar då endast baserat på meddelandets text, vilket innebär att två besökare som skickar exakt samma text (till exempel samma frågesportssvar) inte kan särskiljas, och vissa klick kommer inte att matchas.

---

## Din egen kod för frågesport eller knapp

Om din sida bygger WhatsApp-meddelandet själv (en frågesport som lägger in svaren i texten, eller din egen knappkod), lägg till `data-manual` i script-taggen:

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

Med `data-manual` ändrar skriptet inte längre WhatsApp-länkar på egen hand. Din egen kod anropar det precis innan WhatsApp öppnas, så att varje besök registreras en gång:

- `window.ChatAttribution.text(finalText, number)` returnerar din text med förfrågningsnumret tillagt och registrerar besöket. Använd den returnerade texten i din WhatsApp-länk.
- `window.ChatAttribution.link(finalText, number)` gör samma sak och returnerar en färdig `wa.me`-länk med den texten. Utelämna numret för att använda det som står under **WhatsApp-nummer** i inställningarna.

{% 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 %}

Grenen `else` ser till att knappen fungerar även om skriptet inte har laddats, till exempel om ett webbläsartillägg blockerar det. En text som redan innehåller ett nummer som skriptet utfärdat ändras aldrig en andra gång.

---

## Vad som registreras

Vid klicket innehåller besöksloggen:

- annonsklick-id:n i sidans adress, såsom `fbclid` (Meta) och `gclid` (Google)
- `_fbc`- och `_fbp`-cookies, om din egen Meta-pixel har satt dem på din webbplats (skriptet läser dem, det sätter dem aldrig)
- kampanjtaggar (`utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, `utm_term`)
- målsidan, sidan besökaren kom ifrån, webbläsaren och meddelandetexten
- IP-adressen och tiden, som läggs till av <span data-t="appName">Your AI Connector</span> när besöket anländer

När ett besök matchas räknar <span data-t="appName">Your AI Connector</span> även ut ungefär var besökaren befann sig baserat på den datan (stad och land, ungefärligt, från IP-adressen) samt vilken enhet de använde (telefon, surfplatta eller dator, operativsystem och webbläsare, till exempel Instagrams inbyggda webbläsare). Plats förblir tom när den inte kan fastställas, vilket är vanligt på mobilnätverk.

Besöksloggar sparas i **90 dagar**. När ett besök matchas lagras en kopia av dess klickdata på kontakten och stannar kvar hos kontakten tills du tar bort den.

**Din integritetspolicy:** skriptet körs på din webbplats, så din webbplats integritetspolicy bör nämna det: vad det registrerar (listan ovan) och att det gör det när en besökare trycker på en WhatsApp-knapp.

---

## Hur matchning fungerar

När en kontakts första meddelande anländer letar <span data-t="appName">Your AI Connector</span> efter ett besök från de **15 minuter** som föregick det:

1. **I första hand via förfrågningsnummer.** Ett meddelande som innehåller ett nummer som skriptet utfärdat matchas mot det besöket.
2. **Annars via identisk text.** Ett meddelande med exakt samma text som ett besök matchas mot det. När två olika besökare skickar samma text inom tidsfönstret matchas ingen av dem, avsiktligt, så att en kontakt aldrig tillskrivs fel annons.

Ett senare meddelande som innehåller förfrågningsnumret matchas också, så länge kontakten inte har någon matchning ännu.

När en kontakt som redan har en matchning kommer tillbaka via en annan annons och skickar ett meddelande med ett nyare förfrågningsnummer, sparas det klicket som kontaktens **senaste klick**. Den första matchningen förblir oförändrad.

- **Första klicket, för din rapportering:** kontakten fortsätter att visa var leadet ursprungligen kom ifrån. Det ändras aldrig.
- **Senaste klicket, för Meta:** händelser som skickas till Meta använder det nyaste klicket, eftersom Meta krediterar annonsen som förde tillbaka personen och endast inom sitt attributionsfönster. Att rapportera ett gammalt klick skulle kreditera fel annons, eller ingen alls.
- Det senaste klicket hämtas endast från ett förfrågningsnummer, aldrig enbart från matchande text, och ett äldre besök ersätter aldrig ett nyare.

Begränsningar:

- **Den första matchningen skrivs aldrig över.** Nyare klick hamnar i det senaste klicket.
- **Endast WhatsApp:** WhatsApp Business API och WhatsApp Web-kanaler.
- **15 minuter:** en besökare som trycker på knappen men skickar meddelandet långt senare matchas inte.
- **Endast framåt:** kontakter från tiden innan du installerade skriptet har ingen matchning.

---

## Var du ser det

- **Kontaktpanel:** **Kom från ett annonsklick** med kampanj eller källa och datum för det första klicket. Håll muspekaren över för detaljer: kampanjen, **Annonsen** (`utm_content`) och **Annonsuppsättningen** (`utm_term`), den ungefärliga **Platsen** och **Enheten**, var och en endast när den är känd, plus samma information för det senaste klicket när ett sådant finns. Kampanjtaggar som aldrig fylldes i (ett tryck på en annonsförhandsgranskning skickar taggmallen istället för namnen) utelämnas. Ett besök räknas endast som ett annonsklick när sidan öppnades från en annonslänk (ett Meta- eller Google-klick-id, eller kampanjtaggar). Alla som nådde sidan på annat sätt, till exempel från en Google-sökning, genom att skriva in din adress eller genom att klicka sig fram via din webbplats, visas som **Kom från din webbplats** med information om varifrån de kom, såsom **Google-sökning**, eller **Webbplatsbesök, ingen referens registrerad** när webbläsaren inte angav någon.
- **Kontaktsida:** samma rad finns under kontaktens namn i **Kontakter**, så att du ser det direkt, även på din telefon. Håll muspekaren över eller tryck på den för detaljer.
- **Aktivitet:** kontaktens tidslinje börjar med **Tryckte på din WhatsApp-knapp efter en annons** (eller **på din webbplats**) vid tidpunkten för klicket, före deras första meddelande. Chattens kontaktpanel visar samma rad under **Aktivitet**.
- **Webhooks:** `contact.ad_attribution` i [agent-tagg-webhooks](webhooks.md#contact-tags-updated-webhook) och i varje webhook-prenumerationshändelse som innehåller en kontakt.
- **API:** `ad_attribution` i kontaktlistan och `adAttribution` för en enskild kontakt, i avsnittet Kontakter i API-referensen.
- **MCP-verktyg:** samma objekt för varje kontakt de returnerar.

Värdet är `null` när kontakten inte har någon matchning. Fälten nedan beskriver det första klicket. När ett senare klick har matchats, innehåller `latest` det med samma fält; det är frånvarande fram till dess.

| Fält | Vad det är |
|---|---|
| `visit_at` | När besökaren tryckte på WhatsApp-knappen. |
| `matched_at` | När besöket matchades med kontakten. |
| `match_method` | `reference` (matchad via förfrågningsnummer) eller `text` (matchad via identisk meddelandetext). |
| `reference` | Förfrågningsnumret, eller `null` när det var avstängt. |
| `fbc` / `fbp` | Meta-klicket och webbläsarcookies från din egen Meta-pixel, om de finns. |
| `fbclid` | Meta-annonsklick-id från sidans adress. |
| `gclid` / `gbraid` / `wbraid` | Google-annonsklick-id från sidans adress. |
| `utm_source` / `utm_medium` / `utm_campaign` / `utm_content` / `utm_term` | Kampanjtaggarna från sidans adress. |
| `landing_url` | Sidan besökaren landade på. |
| `referrer` | Sidan besökaren kom ifrån. |
| `client_ip` | Besökarens IP-adress. |
| `user_agent` | Besökarens webbläsare. |
| `geo_country` / `geo_region` / `geo_city` / `geo_timezone` | Ungefärlig plats från IP-adressen: tvåbokstavig landskod, regionkod, stad och tidszon. Saknas när den är okänd. |
| `device_type` / `device_os` / `device_browser` | Enheten från webbläsaren: `mobile`, `tablet` eller `desktop`, operativsystemet med dess version (såsom `iOS 18.3`) och webbläsaren (såsom `Safari` eller `Instagram in-app`). Saknas när den är okänd. |
| `site_key` | Webbplatsnyckeln för skriptet som registrerade besöket. |
| `visit_id` | Id för besöksregistreringen. |
| `latest` | Det nyaste klicket som matchades efter det första, med samma fält. Används för händelser som skickas till Meta. Saknas när inget finns. |

---

## Skicka resultat till Meta (valfritt)

Du kan låta <span data-t="appName">Your AI Connector</span> rapportera utfall tillbaka till ditt Meta-annonskonto, så att Meta lär sig vilka annonser som ger faktiska leads och försäljningar och optimerar mot dem. Detta använder dina egna uppgifter för Meta Conversions API.

1. I Meta Events Manager, hitta ditt pixel-ID (även kallat dataset-ID) under Datakällor, och skapa en åtkomsttoken under Inställningar, Conversions API, **Generera åtkomsttoken**.
2. I **Inställningar → Annonsklickspårning**, under **Skicka resultat till Meta (valfritt)**, ange **Pixel / dataset-ID** och **Åtkomsttoken**. Klicka på **Spara Meta-detaljer**.
3. Valfritt: kontrollera anslutningen. I Meta Events Manager, öppna din pixel och gå till fliken **Testa händelser**, kopiera testkoden som visas där, klistra in den under **Skicka en testhändelse** och klicka på **Skicka testhändelse**. Raden under knappen visar "Meta tog emot 1 testhändelse" (leta efter den under Testa händelser i Meta), eller visar Metas orsak om den avvisades, till exempel en felaktig token. Koden används endast för det testet och sparas aldrig.
4. Öppna agentredigeraren, gå till fliken **Taggar** och öppna en tagg. Under **Skicka till Meta**, välj händelse: **Lead**, **Kontakt**, **Bokning**, **Köp** eller ett anpassat namn. Lägg eventuellt till ett värde och en valuta.

Från och med då, när den taggen appliceras på en kontakt (av AI:n, manuellt, via API:et eller genom en automatisering), skickar <span data-t="appName">Your AI Connector</span> händelsen till Meta med kontaktens nyaste klickdata (`fbc`, `fbp`, IP-adress, webbläsare, landningssida, från det senaste klicket när ett sådant finns, annars det första) plus deras telefonnummer, e-post och namn, hashade, så att Meta kan koppla det till annonsen. En kontakt utan matchning skickar fortfarande händelsen, med endast hashade telefonnummer, e-post och namn.

- **Live-händelser räknas alltid:** en testhändelsekod lagras aldrig med dina Meta-detaljer, så händelserna som dina taggar och automatiseringar skickar går alltid till din riktiga data i Meta, aldrig till fliken Testa händelser.
- **Ingen dubbelräkning:** varje händelse har ett fast ID som består av kontakt-ID och taggnamn. Om ditt CRM skickar samma händelse till Meta med samma ID, behåller Meta endast en.
- **Metas attributionsfönster:** Meta krediterar endast en händelse till en annons inom dess attributionsfönster, vilket som standard är 7 dagar efter klicket. En affär som avslutas veckor senare räknas inte av sig själv, så skicka även en tidigare händelse, till exempel en tagg för den bokade eller betalda konsultationen.

---

## Skicka konverteringar från automatiseringar

En tagg skickar sin händelse när taggen appliceras. När resultatet sker någon annanstans, till exempel att en affär stängs i ditt CRM eller att en konsultation bokas, använd åtgärden **Skicka konvertering till Meta** i en automatisering. Den rapporterar en händelse till din Meta-datamängd via Conversions API, så att Meta optimerar dina annonser baserat på faktiska resultat och inte bara på meddelanden.

Den använder samma Meta-uppgifter som taggarna: **Pixel / dataset-ID** och **Åtkomsttoken** under **Inställningar → Spårning av annonsklick**. Utan dessa misslyckas steget med meddelandet "Meta är inte anslutet".

**Fälten**

| Fält | Vad det gör |
|---|---|
| **Händelsenamn** | Obligatoriskt. **Köp**, **Bokning**, **Lead** eller ditt eget namn. Ditt eget namn använder bokstäver, siffror, mellanslag och understreck, börjar med en bokstav och är högst 40 tecken långt. |
| **Värde** och **Valuta** | Konverteringsbeloppet, till exempel affärsvärdet. Valuta är en tresiffrig kod och är som standard EUR. Värdet skickas endast när du fyller i det. |
| **Kontakt** | Valfritt. Kontakten som konverteringen tillhör. |
| **E-post**, **Telefon**, **Förnamn**, **Efternamn** | Uppgifter om personen. Fyll i dessa när personen inte är en kontakt, eller för att lägga till information till vad kontakten redan har. |
| **Ditt eget ID för personen** | Ett ID för personen från ditt eget system, till exempel ett CRM-ID. |
| **Händelse-ID** | ID:t som Meta använder för att räkna händelsen en gång. Se nedan. |
| **Händelsetid** | När konverteringen skedde, som unix-sekunder eller ett datum. Högst 7 dagar sedan. Lämna tomt för att använda tidpunkten då steget körs. |
| **Sid-URL** | Sidan som konverteringen är kopplad till, om någon. |
| **Testhändelsekod** | Endast för ett testkörning: koden från Metas flik Testa händelser. En händelse som skickas med denna visas under Testa händelser och räknas inte för dina annonser. Lämna tomt för live-händelser. |

Fyll i minst ett av fälten **Kontakt**, **E-post** eller **Telefon**. Personen behöver inte vara en kontakt: en HubSpot-affär som når statusen "Closed Won" kan skicka en "Purchase" med affärsvärdet och köparens e-postadress.

När du väljer en **Kontakt** används personens telefonnummer, e-postadress och namn. Om personen kom från ett annonsklick som skriptet matchade, skickas även klickuppgifterna med, vilket hjälper Meta att matcha händelsen med annonsen. E-post, telefon och namn hashas innan de skickas. Klick-ID, IP-adress och webbläsare skickas enligt Metas krav.

**Händelse-ID och dubbelräkning**

Meta räknar händelser med samma händelsenamn och samma Händelse-ID endast en gång. Använd ett fast ID, till exempel affärens ID, när ett annat verktyg också rapporterar samma konvertering, eller när automatiseringen kan komma att köras två gånger för samma händelse. Lämna det tomt så skapas ett nytt ID vid varje körning, vilket innebär att varje körning räknas.

**Hur det skiljer sig från tagghändelser**

En taggs **Skicka till Meta**-händelse skickas en gång per kontakt för den taggen (högst en gång var 30:e dag). Denna åtgärd skickar varje gång den körs. Händelse-ID:t är det som förhindrar att en konvertering räknas två gånger.

**Exempel: en avslutad affär och en bokad konsultation**

1. Starta en automatisering som körs när en affär har vunnits: en **App-händelse**-utlösare för ditt CRM:s affärshändelse, med ett **Villkor** så att endast vunna affärer fortsätter. HubSpot skickar endast affärsstegshändelser till utvecklarappar, så för HubSpot, använd en **Schema**-utlösare med en HubSpot-sökning efter affärer som har nått statusen "Closed Won" sedan den senaste körningen, och en **Loop** över dem.
2. Lägg till **Skicka konvertering till Meta**. Ställ in **Händelsenamn** till **Purchase**, **Värde** till affärsbeloppet (infoga det med **+**-knappen) och **Valuta** till din valuta. Ange köparens e-postadress i **E-post** och affärs-ID i **Händelse-ID**, så att samma affär aldrig räknas två gånger.
3. För ett bokat möte, starta en andra automatisering med utlösaren **Möte bokat** och lägg till **Skicka konvertering till Meta** med **Händelsenamn** inställt på **Schedule** och kontakten från utlösaren i **Kontakt**. Om du vill kan du lägga till ett andra **Skicka konvertering till Meta**-steg som skickar ett **Purchase**-event med ett fast värde, till exempel priset för mötet.

Du kan också skicka en konvertering via API:et med `POST https://api.youraiconnector.com/v1/ad-attribution/meta-event`. Det använder samma fält i snake_case: `event_name`, `value`, `currency`, `contact_id`, `email`, `phone`, `first_name`, `last_name`, `external_id`, `event_id`, `event_time`, `event_source_url` och `test_event_code`.

---

## Vanliga frågor

**Fungerar detta om min annons öppnar WhatsApp direkt?**
De annonserna går inte via din webbplats, så skriptet körs aldrig. Meta skickar annonsdetaljerna med det första meddelandet istället, se [Click-to-WhatsApp Ad Attribution](click-to-whatsapp-attribution.md).

**Gör skriptet min webbplats långsammare eller sätter det cookies?**
Det laddas i bakgrunden (`async`), sätter inga cookies och laddar inget annat. Det skickar bara information när en besökare trycker på en WhatsApp-knapp.

**Kan jag spåra Google Ads utöver Meta-annonser?**
Ja. Google-klick-id:n (`gclid`, `gbraid`, `wbraid`) och alla kampanjtaggar registreras och visas på kontakten. Att skicka tillbaka resultat är endast tillgängligt för Meta.

**Varför fick en kontakt ingen matchning?**
De vanligaste orsakerna: meddelandet anlände mer än 15 minuter efter trycket, förfrågningsnumret togs bort från meddelandet, förfrågningsnumret är avstängt och en annan besökare skickade samma text, eller så saknar sidan skriptet.

**Min webbplats länkar till två WhatsApp-nummer. Kan jag spåra bara ett?**
Ja. Skriv in det numret under **WhatsApp-nummer** i inställningarna. Lämna det tomt för att spåra alla WhatsApp-länkar.

**Kan jag ändra formuleringen senare?**
Ja. Ändringar tillämpas på din webbplats omedelbart; du behöver inte klistra in skriptet igen.
