
# Annonceklik-attribuering for WhatsApp

Hvis du kører Meta- eller Google-annoncer til en side på dit eget website, og den side har en WhatsApp-knap, kan <span data-t="appName">Your AI Connector</span> fortælle dig, hvilket annonceklik hver WhatsApp-samtale kom fra. Du indsætter et lille script på dit website. Når en besøgende trykker på din WhatsApp-knap, huskes klikket og matches med den første besked, de sender til dig. Kontakten viser derefter den kampagne, den kom fra, og klikdataene følger med kontakten ind i webhooks, API'et og, hvis du ønsker det, tilbage til Meta.

Dette fungerer for enhver side med en WhatsApp-knap: en landingsside, en bookingside, en prisside eller en quiz, der slutter med "Send mine svar på WhatsApp".

> Denne side handler om annoncer, der sender folk til **dit website** først. Hvis dine annoncer åbner WhatsApp direkte (Metas "Click to WhatsApp"-annoncer), dækkes det automatisk, uden et script, i [Click-to-WhatsApp annonceattribuering](click-to-whatsapp-attribution.md).

---

## Opsætning

1. Gå til **Indstillinger → Annonceklik-sporing** (Integrationsgruppen).
2. Klik på **Slå til og hent mit script**. Din konto får sin egen nøgle og et script på én linje.
3. Kopiér scriptet og indsæt det lige før det afsluttende `</body>`-tag på hver side, der har en WhatsApp-knap:

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

4. Valgfrit: under **WhatsApp-nummer**, indtast det nummer, dine knapper linker til. Kun links til det nummer spores derefter. Lad det stå tomt for at spore alle WhatsApp-links på websitet.
5. Vælg ordlyden for forespørgselsnummeret (se nedenfor) og klik på **Gem**. Du behøver ikke at ændre scriptet på dit website efter en indstillingsændring.
6. Test det: åbn din side fra et link med et kampagnetag på, for eksempel `https://yoursite.com/?utm_source=test&utm_campaign=setup-check`, tryk på din egen WhatsApp-knap og send beskeden. Åbn den kontakt i Chats: kontaktpanelet viser **Kom fra et annonceklik** med kampagnen.

Websitenøglen er allerede inde i scriptet. Det er ikke en adgangskode, så det er fint at have den på en offentlig side.


---

## Hvad scriptet gør

- **Når siden indlæses**, gemmer det annonceklik-id'er og kampagnetags ( `utm_`-parametrene) fra sidens adresse i browserfanens sessionslagring, så de stadig er der, hvis den besøgende kigger på en anden side først. Det sætter ingen cookies, indlæser intet andet og sender intet.
- **Når den besøgende trykker på et WhatsApp-link** (`wa.me`, `api.whatsapp.com/send` eller `whatsapp://send`), tilføjer det forespørgselsnummeret til beskeden, registrerer besøget og lader trykket fortsætte til WhatsApp som normalt.

Intet sendes til <span data-t="appName">Your AI Connector</span> før trykket.

---

## Forespørgselsnummeret

Et kort nummer, ligesom den reference en butik eller klinik giver dig, tilføjes til den besøgendes WhatsApp-besked. Det er sådan, <span data-t="appName">Your AI Connector</span> ved præcis, hvilket annonceklik der hører til hvilken samtale. En besked ser sådan ud:

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

- **Ordlyd:** "Forespørgselsnr." er standarden. Du kan bruge enhver tekstlinje, der lyder naturlig for din virksomhed, såsom "Bookingref" eller "Ref". Ingen cifre.
- **Hvor:** **På sin egen sidste linje** (standard) eller **I slutningen af teksten**. Indstillingssiden viser et live-eksempel.
- **Længde:** 4 cifre, eller 5 når dit site har meget travlt.
- **Din AI-agent ser det aldrig** og gentager det aldrig. Indbakken viser hele beskeden, inklusive nummeret.

Du kan slå forespørgselsnummeret fra. Matchning fungerer derefter kun på selve beskedteksten, hvilket betyder, at to besøgende, der sender nøjagtig den samme tekst (f.eks. de samme quizsvar), ikke kan skelnes fra hinanden, og nogle klik vil ikke blive matchet.

---

## Din egen quiz- eller knapkode

Hvis din side selv opbygger WhatsApp-beskeden (en quiz, der indsætter svarene i teksten, eller din egen knapkode), skal du tilføje `data-manual` til script-tagget:

{% 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` ændrer scriptet ikke længere WhatsApp-links af sig selv. Din egen kode kalder det lige før, WhatsApp åbnes, så hvert besøg registreres én gang:

- `window.ChatAttribution.text(finalText, number)` returnerer din tekst med forespørgselsnummeret tilføjet og registrerer besøget. Brug den returnerede tekst i dit WhatsApp-link.
- `window.ChatAttribution.link(finalText, number)` gør det samme og returnerer et færdigt `wa.me`-link med den tekst. Udelad nummeret for at bruge det, der står under **WhatsApp-nummer** i indstillingerne.

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

Den `else`-gren sørger for, at knappen stadig virker, hvis scriptet ikke er indlæst, for eksempel hvis en browserudvidelse blokerer det. En tekst, der allerede indeholder et nummer, som scriptet har udstedt, ændres aldrig en anden gang.

---

## Hvad der bliver registreret

Ved trykket indeholder besøgsregistreringen:

- annonce-klik-id'er i sidens adresse, såsom `fbclid` (Meta) og `gclid` (Google)
- `_fbc`- og `_fbp`-cookies, hvis din egen Meta-pixel har sat dem på dit websted (scriptet læser dem, det sætter dem aldrig)
- kampagnetags (`utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, `utm_term`)
- landingssiden, siden den besøgende kom fra, browseren og beskedteksten
- IP-adressen og tidspunktet, tilføjet af <span data-t="appName">Your AI Connector</span>, når besøget ankommer

Når et besøg matches, finder <span data-t="appName">Your AI Connector</span> også ud af, hvor den besøgende omtrent befandt sig ud fra disse data (by og land, omtrentligt, baseret på IP-adressen) og hvilken enhed de brugte (telefon, tablet eller computer, styresystemet og browseren, for eksempel Instagrams in-app browser). Placering forbliver tom, når den ikke kan bestemmes, hvilket er almindeligt på mobilnetværk.

Besøgsregistreringer gemmes i **90 dage**. Når et besøg matches, gemmes en kopi af dets klikdata på kontakten og bliver hos kontakten, indtil du sletter den.

**Din privatlivspolitik:** scriptet kører på dit websted, så dit websteds privatlivspolitik bør nævne det: hvad det registrerer (listen ovenfor), og at det gør det, når en besøgende trykker på en WhatsApp-knap.

---

## Hvordan matchning fungerer

Når en kontakts første besked ankommer, leder <span data-t="appName">Your AI Connector</span> efter et besøg fra de **15 minutter** før:

1. **Først via forespørgselsnummer.** En besked, der indeholder et nummer, som scriptet har udstedt, matches med det besøg.
2. **Ellers via identisk tekst.** En besked med nøjagtig samme tekst som et besøg matches med det. Når to forskellige besøgende sender den samme tekst inden for tidsvinduet, matches ingen af dem med vilje, så en kontakt aldrig fejlagtigt tilskrives den forkerte annonce.

En senere besked, der indeholder forespørgselsnummeret, matches også, så længe kontakten endnu ikke har et match.

Når en kontaktperson, der allerede har et match, vender tilbage via en anden annonce og sender en besked med et nyere forespørgselsnummer, gemmes dette klik som kontaktpersonens **seneste klik**. Det første match forbliver uændret.

- **Første klik, til din rapportering:** kontaktpersonen bliver ved med at vise, hvor leadet oprindeligt kom fra. Det ændrer sig aldrig.
- **Seneste klik, til Meta:** hændelser sendt til Meta bruger det nyeste klik, fordi Meta krediterer den annonce, der bragte personen tilbage, og kun inden for sit attributionsvindue. Rapportering af et gammelt klik ville kreditere den forkerte annonce eller slet ingen.
- Det seneste klik hentes kun fra et forespørgselsnummer, aldrig fra matchende tekst alene, og et ældre besøg erstatter aldrig et nyere.

Begrænsninger:

- **Det første match bliver aldrig overskrevet.** Nyere klik placeres i det seneste klik.
- **Kun WhatsApp:** WhatsApp Business API og WhatsApp Web-kanaler.
- **15 minutter:** en besøgende, der trykker på knappen, men sender beskeden meget senere, matches ikke.
- **Kun fremadrettet:** kontaktpersoner fra før du installerede scriptet, har intet match.

---

## Hvor du ser det

- **Kontaktpanel:** **Kom fra et annonceklik** med kampagnen eller kilden og datoen for det første klik. Hold musen over for at se detaljerne: kampagnen, **Annoncen** (`utm_content`) og **Annoncesættet** (`utm_term`), den omtrentlige **Placering** og **Enheden**, hver især kun når de er kendte, plus det samme for det seneste klik, hvis der er et. Kampagnetags, der aldrig blev udfyldt (et tryk på en annoncevisning sender tag-skabelonen i stedet for navnene), er udeladt. Et besøg tæller kun som et annonceklik, når siden blev åbnet fra et annoncelink (et Meta- eller Google-klik-id eller kampagnetags). Enhver, der nåede siden på en anden måde, for eksempel fra en Google-søgning, ved at indtaste din adresse eller ved at klikke sig igennem dit websted, viser **Kom fra dit websted** med oplysning om, hvor de kom fra, såsom **Google-søgning** eller **Webstedsbesøg, ingen henvisning registreret**, når browseren ikke oplyste det.
- **Kontaktside:** den samme linje står under kontaktens navn i **Kontakter**, så du ser den med det samme, også på din telefon. Hold musen over eller tryk på den for at se detaljerne.
- **Aktivitet:** kontaktens tidslinje starter med **Trykkede på din WhatsApp-knap efter en annonce** (eller **på dit websted**) på tidspunktet for klikket, før deres første besked. Chattens kontaktpanel viser den samme linje under **Aktivitet**.
- **Webhooks:** `contact.ad_attribution` i [agent-tag-webhooks](webhooks.md#contact-tags-updated-webhook) og i enhver webhook-abonnement-begivenhed, der indeholder en kontakt.
- **API:** `ad_attribution` på kontaktlisten og `adAttribution` på en enkelt kontakt, i afsnittet Kontakter i API-referencen.
- **MCP-værktøjer:** det samme objekt på hver kontakt, de returnerer.

Værdien er `null`, når kontaktpersonen ikke har noget match. Felterne nedenfor beskriver det første klik. Når et senere klik blev matchet, indeholder `latest` det med de samme felter; det er fraværende indtil da.

| Felt | Hvad det er |
|---|---|
| `visit_at` | Hvornår den besøgende trykkede på WhatsApp-knappen. |
| `matched_at` | Hvornår besøget blev matchet med kontakten. |
| `match_method` | `reference` (matchet via forespørgselsnummer) eller `text` (matchet via identisk beskedtekst). |
| `reference` | Forespørgselsnummeret, eller `null` når det var slået fra. |
| `fbc` / `fbp` | Meta-klikket og browser-cookies fra din egen Meta-pixel, hvis de findes. |
| `fbclid` | Meta-annonceklik-id'et fra sideadressen. |
| `gclid` / `gbraid` / `wbraid` | Google-annonceklik-id'erne fra sideadressen. |
| `utm_source` / `utm_medium` / `utm_campaign` / `utm_content` / `utm_term` | Kampagnetags fra sideadressen. |
| `landing_url` | Siden, den besøgende landede på. |
| `referrer` | Siden, den besøgende kom fra. |
| `client_ip` | Den besøgendes IP-adresse. |
| `user_agent` | Den besøgendes browser. |
| `geo_country` / `geo_region` / `geo_city` / `geo_timezone` | Omtrentlig placering fra IP-adressen: to-bogstavs landekode, regionskode, by og tidszone. Fraværende når ukendt. |
| `device_type` / `device_os` / `device_browser` | Enheden fra browseren: `mobile`, `tablet` eller `desktop`, styresystemet med dets version (såsom `iOS 18.3`) og browseren (såsom `Safari` eller `Instagram in-app`). Fraværende når ukendt. |
| `site_key` | Webstedsnøglen for scriptet, der registrerede besøget. |
| `visit_id` | Id'et for besøgsregistreringen. |
| `latest` | Det nyeste klik matchet efter det første, med de samme felter. Bruges til begivenheder sendt til Meta. Fraværende når der ikke er nogen. |

---

## Send resultater til Meta (valgfrit)

Du kan lade <span data-t="appName">Your AI Connector</span> rapportere resultater tilbage til din Meta-annoncekonto, så Meta lærer, hvilke annoncer der skaber reelle kundeemner og salg, og optimerer mod dem. Dette bruger dine egne Meta Conversions API-detaljer.

1. Find dit pixel-id (også kaldet datasæt-id) i Meta Events Manager under Datakilder, og opret et adgangstoken under Indstillinger, Conversions API, **Generer adgangstoken**.
2. I **Indstillinger → Annoncekliksporing**, under **Send resultater til Meta (valgfrit)**, skal du indtaste **Pixel / datasæt-id** og **Adgangstoken**. Klik på **Gem Meta-detaljer**.
3. Valgfrit: tjek forbindelsen. I Meta Events Manager skal du åbne din pixel og gå til fanen **Testbegivenheder**, kopiere testkoden, der vises der, indsætte den under **Send en testbegivenhed** og klikke på **Send testbegivenhed**. Linjen under knappen siger "Meta modtog 1 testbegivenhed" (kig efter den under Testbegivenheder i Meta), eller viser Metas årsag, hvis den blev afvist, for eksempel et forkert token. Koden bruges kun til den ene test og gemmes aldrig.
4. Åbn agenteditoren, gå til fanen **Tags** og åbn et tag. Under **Send til Meta** skal du vælge begivenheden: **Lead**, **Kontakt**, **Booket**, **Køb** eller et brugerdefineret navn. Tilføj eventuelt en værdi og en valuta.

Fra da af, hver gang det tag tilføjes til en kontaktperson (af AI'en, manuelt, via API'et eller via en automatisering), sender <span data-t="appName">Your AI Connector</span> hændelsen til Meta med kontaktpersonens nyeste klikdata (`fbc`, `fbp`, IP-adresse, browser, landingsside, fra det seneste klik, hvis der er et, ellers det første) plus deres telefonnummer, e-mail og navn, hashet, så Meta kan linke det til annoncen. En kontaktperson uden et match sender stadig hændelsen, kun med det hashede telefonnummer, e-mail og navn.

- **Live-begivenheder tæller altid:** en testbegivenhedskode gemmes aldrig sammen med dine Meta-detaljer, så de begivenheder, dine tags og automatiseringer sender, går altid til dine rigtige data i Meta, aldrig til fanen Testbegivenheder.
- **Ingen dobbeltoptælling:** hver begivenhed har et fast id bestående af kontakt-id'et og tag-navnet. Hvis dit CRM sender den samme begivenhed til Meta med det samme id, beholder Meta kun én.
- **Metas attributionsvindue:** Meta krediterer kun en begivenhed til en annonce inden for sit attributionsvindue, som som standard er 7 dage efter klikket. En handel, der afsluttes uger senere, tæller ikke i sig selv, så send også en tidligere begivenhed, for eksempel et tag for den bookede eller betalte konsultation.

---

## Send konverteringer fra automatiseringer

Et tag sender sin hændelse, når tagget bliver tilføjet. Når resultatet sker et andet sted, f.eks. når en handel lukkes i dit CRM-system eller en konsultation bliver booket, skal du bruge handlingen **Send konvertering til Meta** i en automatisering. Den rapporterer én hændelse til dit Meta-datasæt via Conversions API, så Meta optimerer dine annoncer baseret på faktiske resultater og ikke kun på beskeder.

Den bruger de samme Meta-oplysninger som tags: **Pixel / datasæt-id** og **Adgangstoken** under **Indstillinger → Annoncekliksporing**. Uden disse vil trinnet fejle med "Meta er ikke forbundet".

**Felterne**

| Felt | Hvad det gør |
|---|---|
| **Begivenhedsnavn** | Påkrævet. **Køb**, **Booket**, **Lead** eller dit eget navn. Dit eget navn bruger bogstaver, tal, mellemrum og understregninger, starter med et bogstav og er på højst 40 tegn. |
| **Værdi** og **Valuta** | Beløbet for konverteringen, såsom handelsbeløbet. Valuta er en 3-bogstavskode og er som standard EUR. Værdien sendes kun, når du udfylder den. |
| **Kontakt** | Valgfrit. Den kontakt, som konverteringen tilhører. |
| **E-mail**, **Telefon**, **Fornavn**, **Efternavn** | Detaljer om personen. Udfyld disse, når personen ikke er en kontakt, eller for at tilføje til det, kontakten allerede har. |
| **Dit eget ID for personen** | Et id for personen fra dit eget system, såsom et CRM-id. |
| **Begivenheds-ID** | Det id, Meta bruger til at tælle begivenheden én gang. Se nedenfor. |
| **Begivenhedstidspunkt** | Hvornår konverteringen skete, som unix-sekunder eller en dato. Højst 7 dage siden. Lad den stå tom for at bruge det tidspunkt, hvor trinnet kører. |
| **Side-URL** | Den side, konverteringen er knyttet til, hvis nogen. |
| **Testbegivenhedskode** | Kun til en testkørsel: koden fra Metas fane Testbegivenheder. En begivenhed sendt med denne vises under Testbegivenheder og tæller ikke med i dine annoncer. Lad den stå tom for live-begivenheder. |

Udfyld mindst ét af felterne **Kontakt**, **E-mail** eller **Telefon**. Personen behøver ikke at være en kontakt: en HubSpot-handel, der når status "Closed Won", kan sende en "Purchase" med handelsbeløbet og køberens e-mail.

Når du vælger en **Kontakt**, bruges vedkommendes telefonnummer, e-mail og navn. Hvis de kom fra et annonceklik, som scriptet matchede, sendes klikoplysningerne også med, hvilket hjælper Meta med at matche hændelsen til annoncen. E-mail, telefonnummer og navne hashes, før de sendes. Klik-id, IP-adresse og browser sendes, som Meta kræver.

**Hændelses-ID og dobbeltoptælling**

Meta tæller hændelser med samme hændelsesnavn og samme Hændelses-ID én gang. Brug et fast id, f.eks. handels-id'et, når et andet værktøj også rapporterer den samme konvertering, eller når automatiseringen kan køre to gange for den. Lad feltet stå tomt, så oprettes et nyt id ved hver kørsel, hvilket betyder, at hver kørsel tælles med.

**Hvordan det adskiller sig fra tag-hændelser**

Et tags **Send til Meta**-hændelse sendes én gang pr. kontakt for det pågældende tag (højst én gang på 30 dage). Denne handling sender hver gang, den kører. Hændelses-ID'et er det, der forhindrer, at en konvertering tælles to gange.

**Eksempel: en lukket handel og en booket konsultation**

1. Start en automatisering, der kører, når en handel er vundet: en **App-begivenhed**-udløser på dit CRM-systems handelsbegivenhed, med en **Betingelse**, så kun vundne handler fortsætter. HubSpot sender kun handelsfase-begivenheder til udvikler-apps, så for HubSpot skal du bruge en **Tidsplan**-udløser med en HubSpot-søgning efter handler, der har nået Lukket vundet siden sidste kørsel, og en **Løkke** over dem.
2. Tilføj **Send konvertering til Meta**. Sæt **Begivenhedsnavn** til **Køb**, **Værdi** til handelsbeløbet (indsæt det med **+**-knappen) og **Valuta** til din valuta. Indsæt køberens e-mail i **E-mail** og handels-id'et i **Begivenheds-id**, så den samme handel aldrig tælles to gange.
3. For en booket konsultation skal du starte en anden automatisering med **Aftale booket**-udløseren og tilføje **Send konvertering til Meta** med **Begivenhedsnavn** sat til **Planlæg** og kontakten fra udløseren i **Kontakt**. Hvis du ønsker det, kan du tilføje et andet **Send konvertering til Meta**-trin, der sender et **Køb** med en fast værdi, såsom prisen på konsultationen.

Du kan også sende en konvertering via API'et med `POST https://api.youraiconnector.com/v1/ad-attribution/meta-event`. Det bruger de samme felter i snake case: `event_name`, `value`, `currency`, `contact_id`, `email`, `phone`, `first_name`, `last_name`, `external_id`, `event_id`, `event_time`, `event_source_url` og `test_event_code`.

---

## FAQ

**Virker dette, hvis min annonce åbner WhatsApp direkte?**
Disse annoncer går ikke gennem dit websted, så scriptet kører aldrig. Meta sender annonceoplysningerne med den første besked i stedet, se [Click-to-WhatsApp Ad Attribution](click-to-whatsapp-attribution.md).

**Gør scriptet mit websted langsommere, eller sætter det cookies?**
Det indlæses i baggrunden (`async`), sætter ingen cookies og indlæser intet andet. Det sender kun noget, når en besøgende trykker på en WhatsApp-knap.

**Kan jeg spore Google Ads såvel som Meta-annoncer?**
Ja. Google-klik-id'er (`gclid`, `gbraid`, `wbraid`) og alle kampagnetags registreres og vises på kontakten. Afsendelse af resultater tilbage er kun tilgængelig for Meta.

**Hvorfor fik en kontakt ikke et match?**
De mest almindelige årsager: beskeden ankom mere end 15 minutter efter trykket, forespørgselsnummeret blev fjernet fra beskeden, forespørgselsnummeret er slået fra, og en anden besøgende sendte den samme tekst, eller siden har ikke scriptet.

**Mit websted linker til to WhatsApp-numre. Kan jeg kun spore det ene?**
Ja. Indtast det nummer under **WhatsApp-nummer** i indstillingerne. Lad det stå tomt for at spore alle WhatsApp-links.

**Kan jeg ændre ordlyden senere?**
Ja. Ændringer træder i kraft på din hjemmeside med det samme; du behøver ikke at indsætte scriptet igen.
