Your AI Connector Docs

WhatsApp Templates API

WhatsApp-beskedskabeloner er forudskrevne beskeder, der er godkendt til afsendelse uden for det normale 24-timers samtalevindue — for eksempel en velkomstbesked, en aftalepåmindelse eller et lille puf til genaktivering. Denne API giver dig mulighed for programmatisk at liste, oprette, redigere, indsende, kontrollere, slette og sende skabeloner.

Alle stier herunder er relative til API’ets base-URL:

https://api.youraiconnector.com/v1

Enhver anmodning skal godkendes. Se Godkendelse for de fire accepterede metoder. Eksemplerne på denne side bruger X-API-Key-headeren (og én forespørgselsparameter-form til cURL).

Bemærk: Skabeloner kører på WhatsApp Business API-kanalen, så denne del af API’en kræver både API-adgang og en plan, der inkluderer WhatsApp-kanaler. Uden disse vil anmodninger blive afvist med en 403.


Arbejde med underkonti (bureauer)


Godkendelsesstatusser

Da beskeder, der sendes uden for en åben samtale, først skal gennemgås af WhatsApp, har hver skabelon en godkendelses-status:

Status Betydning
draft Oprettet eller gemt, men endnu ikke sendt til gennemsyn. Du kan stadig redigere den.
received Indsendt og accepteret i køen til gennemsyn.
pending Under gennemsyn.
approved Godkendt til afsendelse.
rejected Afvist. Feltet rejection_reason forklarer hvorfor; ret det, og indsend derefter igen.

Kun draft- og rejected-skabeloner kan redigeres eller (gen)indsendes. Når en skabelon er approved, er den låst — opret en ny, hvis du har brug for ændringer.

Automatisk godkendelse: Nogle kanaler kræver ikke et eksternt gennemsynstrin. Skabeloner, der oprettes eller indsendes til en kampagne på en sådan kanal, gemmes straks som approved uden et indholds-id (sid).


Skabeloner på Meta-forbundne konti

Disse slutpunkter fungerer på samme måde, uanset hvilken WhatsApp-forbindelse din konto kører på, men hvad der sker bag dem, er forskelligt:

  • På en administreret WhatsApp-forbindelse registreres skabeloner hos beskedudbyderen, og sid er udbyderens indholds-id (HXXXXXXXX…).
  • På en konto, hvis nummer kører på sin egen WhatsApp Business-konto (begge Meta-forbindelsesmuligheder), oprettes og gennemgås skabeloner i den pågældende WhatsApp Business-konto, og sid er Metas eget skabelon-id — en numerisk streng såsom "3394843740694756". status bruger stadig værdierne i tabellen ovenfor, og rejection_reason indeholder stadig Metas forklaring.

Der findes to ekstra slutpunkter til dette: et til at spørge, hvilken forbindelse du er på, og et til at afstemme din skabelonliste med din WhatsApp Business-konto. Skabeloner, der allerede findes i WhatsApp Business-kontoen, importeres til dit bibliotek ved synkroniseringen, så en GET /whatsapp-templates bagefter viser dem som enhver anden skabelon.

Tjek hvilken forbindelse skabeloner kører på

GET /whatsapp-templates/provider

Felt Beskrivelse
provider twilio når skabeloner er registreret hos den administrerede beskedudbyder, meta når de ligger i din egen WhatsApp Business-konto.
lane Hvilken Meta-forbindelse der er i brug — meta_cloud_api (din egen Meta-app) eller meta_embedded (forbundet via vores Meta-app). null på en administreret forbindelse.
waba_id Den WhatsApp Business-konto, som skabelonerne er oprettet i, eller null.
templates_enabled false når Meta-forbindelsen endnu ikke er færdig (ingen WhatsApp Business-konto eller adgangstoken gemt). Oprettelse eller indsendelse af skabeloner fejler med en 400, indtil den er det.

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates/provider?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/provider", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/provider",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "provider": "meta",
  "lane": "meta_cloud_api",
  "waba_id": "2357661648036355",
  "templates_enabled": true
}

Synkroniser skabeloner fra Meta

Opdaterer godkendelsesstatus for hver skabelon, der ligger i din WhatsApp Business-konto, og importerer enhver skabelon, der findes der, men som endnu ikke er i dit bibliotek. Det er sikkert at kalde så ofte, du vil. På en administreret forbindelse er der intet at synkronisere, så kaldet gør intet og rapporterer blot, hvor mange skabeloner du har.

POST /whatsapp-templates/meta-sync

Felt Beskrivelse
imported Skabeloner fundet i WhatsApp Business-kontoen, som blev tilføjet til dit bibliotek ved dette kald.
updated Eksisterende skabeloner, hvis status eller detaljer er ændret.
total Skabeloner i dit bibliotek efter synkroniseringen.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "provider": "meta",
  "imported": 2,
  "updated": 5,
  "total": 12
}

Kommuniker direkte med Meta (avanceret)

Hvis du har brug for noget, som slutpunkterne ovenfor ikke eksponerer — skabelonoverskrifter, sidefødder, knapper eller en fuldt manuelt opbygget skabelon — sender /v1/meta-templates din anmodning direkte videre til Metas egen skabelon-API uden at gemme noget i dit skabelonbibliotek. Det virker kun på konti, hvis nummer kører på deres egen WhatsApp Business-konto; på en administreret forbindelse returnerer hvert kald 400 med anmodning om først at forbinde en Meta-app.

Slutpunkt Hvad det gør
GET /meta-templates Lister skabelonerne på din WhatsApp Business-konto med deres seneste status. Tilføj ?name= for at filtrere til ét specifikt skabelonnavn. Returnerer { "success": true, "templates": [...] }.
POST /meta-templates Opretter en skabelon og indsender den til Meta-gennemgang i ét trin. Kræver name, language og body (eller et komplet components-array i stedet for body). Valgfrit: variables (array af strenge), category (MARKETING, UTILITY eller AUTHENTICATION), header, footer, buttons. Returnerer 201 med { "success": true, "template": {...} }.
DELETE /meta-templates/{name} Sletter skabelonen ud fra dens Meta-navn — alle sprog af den. Tilføj ?hsm_id= med Metas skabelon-id for kun at fjerne ét sprog. Returnerer { "success": true, "name": "..." }.

En skabelon, som Meta afviser, returnerer 400 med Metas egen forklaring i error.


List skabeloner

Returnerer alle skabeloner på din konto med et let resumé af hver enkelt.

GET /whatsapp-templates

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "data": [
    {
      "id": "template_abc123",
      "name": "welcome_message",
      "status": "approved",
      "language": "en",
      "body": "Hi {{first_name}}, thanks for reaching out!"
    },
    {
      "id": "template_def456",
      "name": "appointment_reminder",
      "status": "pending",
      "language": "en",
      "body": "Hi {{first_name}}, this is a reminder about your appointment."
    }
  ]
}

Hent en skabelon

Returnerer alle detaljer om en enkelt skabelon, herunder dens variabler, status og tidsstempler.

GET /whatsapp-templates/{templateId}

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "template": {
    "id": "template_abc123",
    "name": "welcome_message",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "language": "en",
    "variables": ["first_name"],
    "status": "approved",
    "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "type": "general",
    "category": "marketing",
    "rejection_reason": null,
    "campaign_id": "campaign123",
    "date_created": "2026-06-01T10:00:00.000Z",
    "date_updated": "2026-06-02T08:30:00.000Z",
    "submitted_at": "2026-06-01T10:05:00.000Z",
    "approved_at": "2026-06-02T08:30:00.000Z"
  }
}

En skabelon, der ikke findes på din konto, returnerer 404 med { "success": false, "error": "Template not found" }.


Opret en skabelon

Opretter en skabelon til en kampagnes åbningsbesked og sender den til godkendelse i ét trin.

POST /whatsapp-templates

Felt Påkrævet Beskrivelse
campaign_id Ja Den kampagne, som skabelonen tilhører.
name Ja Et navn til skabelonen.
language Ja Sprogkode, for eksempel en, es, de, pt_BR, zh_CN.
body Ja Beskedteksten, op til 1024 tegn.
variables Nej Ordnet liste over variabelnavne, der bruges i brødteksten.

Variabel-pladsholdere kan skrives som {{first_name}}, {first_name} eller [first_name] — de bliver alle normaliseret til formen med dobbelte krøllede parenteser.

Resultatet afhænger af kampagnens kanaler:

  • WhatsApp Business API-kampagne: indholdet sendes til WhatsApp-gennemgang. Svaret indeholder campaign_status (received eller pending) og en template_sid.
  • En kanal uden et eksternt gennemgangstrin: skabelonen gemmes og godkendes automatisk (campaign_status: "approved", template_sid: null).
  • Ingen WhatsApp-kanal på kampagnen: intet oprettes, og campaign_status er not_applicable.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
    },
)
data = res.json()

Svar (sendt til gennemgang)

{
  "success": true,
  "campaign_status": "pending",
  "template_sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Opret en selvstændig skabelon

Opretter en skabelon i dit skabelonbibliotek uden at knytte den til en kampagnes åbningsbesked. Dette er oprettelsestrinnet i den livscyklus, som resten af denne side følger: opret den her, rediger den, indsend den til gennemgang, forespørg om dens status, og slet den, når du ikke længere har brug for den.

POST /whatsapp-templates/docs

Felt Påkrævet Beskrivelse
name Ja Et navn til skabelonen.
language Ja Sprogkode, for eksempel en, es, de, pt_BR, zh_CN.
body Ja Beskedteksten, op til 1024 tegn.
variables Nej Ordnet liste over variabelnavne, der bruges i brødteksten.
status Nej draft (standard) gemmer den uden at indsende; submitted sætter den i kø til WhatsApp-gennemgang med det samme.
type Nej general (standard) eller smart_followup.
category Nej marketing, utility, authentication eller authentication-international.
campaign_id Nej Knytter skabelonen til en af dine kampagner.

Skabeloner til godkendelse (engangskode). WhatsApp accepterer ikke fritekst-skabeloner til godkendelse: beskedteksten er foruddefineret af WhatsApp, og skabelonen skal indeholde en “kopiér kode”-knap. Når du opretter en skabelon med category: "authentication", indsender vi den i den faste form for dig. Din body bevares som det eksempel, der vises i appen, men den tekst, din kontaktperson modtager, er WhatsApps egen ordlyd (koden, en sikkerhedspåmindelse og en note om, at den udløber om 10 minutter). Angiv præcis én variabel, for eksempel ["code"], og send koden, når du sender beskeden (se feltet variables under Send en skabelon til en kontaktperson). Koden skal være kortere end 15 tegn.

Hvilken oprettelse skal jeg bruge? Brug denne, når du ønsker en skabelon, som du selv kan redigere og indsende. Brug POST /whatsapp-templates (ovenfor), når du vil indstille en kampagnes åbningsbesked — den kræver campaign_id og skriver direkte ind i kampagnen.

En skabelon oprettet som submitted sendes til WhatsApp-gennemgang i baggrunden, så tjek status-slutpunktet for resultatet i stedet for at forvente det i svaret.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/docs?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"],
    "status": "draft",
    "category": "marketing"
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/docs", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
    status: "draft",
    category: "marketing",
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/docs",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
        "status": "draft",
        "category": "marketing",
    },
)
data = res.json()

Svar

{
  "success": true,
  "template_id": "template_abc123",
  "status": "draft"
}

En manglende name, language eller body, et sprog der ikke understøttes, en status der ikke er draft eller submitted, en ukendt type eller category, eller en brødtekst på over 1024 tegn returnerer 400 med en forklarende error. En campaign_id, der ikke er en af dine kampagner, returnerer 404.


Opdater en skabelon

Redigerer en skabelon, der endnu ikke er blevet godkendt. Kun skabeloner med status draft eller rejected kan redigeres. Angiv en vilkårlig kombination af name, body, language og variables — kun de felter, du sender, bliver ændret.

PUT /whatsapp-templates/{templateId}

Redigering sender ikke skabelonen til gennemgang igen. Brug submit-endepunktet bagefter.

cURL

curl -X PUT "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "body": "Hi {{first_name}}, here is an update for you.",
    "variables": ["first_name"]
  }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  {
    method: "PUT",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      body: "Hi {{first_name}}, here is an update for you.",
      variables: ["first_name"],
    }),
  }
);
const data = await res.json();

Python

import requests

res = requests.put(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "body": "Hi {{first_name}}, here is an update for you.",
        "variables": ["first_name"],
    },
)
data = res.json()

Svar

{
  "success": true,
  "template_id": "template_abc123"
}

Forsøg på at redigere en skabelon, der allerede er approved (eller på anden måde ikke kan redigeres), afsendelse af tomme felter eller afsendelse af en ugyldig værdi returnerer 400 med en forklarende error.


Indsend en skabelon til godkendelse

Indsender en draft- eller rejected-skabelon til gennemgang. Skabeloner på en kanal, der ikke kræver ekstern gennemgang, godkendes med det samme; alle andre sendes til WhatsApp, og den returnerede status (typisk received eller pending) gemmes på skabelonen.

POST /whatsapp-templates/{templateId}/submit

Opfølgningsskabeloner skal deklarere og bruge deres påkrævede variabler, før de kan indsendes: en pladsholder til fornavn samt en pladsholder til personlig kontekst for smarte opfølgninger.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit",
  { method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "template_id": "template_abc123",
  "status": "pending",
  "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Tjek godkendelsesstatus

Et letvægts-endepunkt til polling af en skabelons aktuelle status. Status læses fra den gemte post, som opdateres periodisk i baggrunden, så en meget nylig godkendelse eller afvisning kan tage et kort øjeblik om at blive vist.

GET /whatsapp-templates/{templateId}/status

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "template_id": "template_abc123",
  "name": "welcome_message",
  "status": "approved",
  "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "rejection_reason": null,
  "date_updated": "2026-06-02T08:30:00.000Z"
}

Slet en skabelon

Fjerner skabelonposten fra din konto.

DELETE /whatsapp-templates/{templateId}

Vigtigt: Ved en administreret forbindelse fjernes kun den gemte post – indhold, som WhatsApp allerede har godkendt, kan forblive registreret hos beskedudbyderen. På en konto, der kører på sin egen WhatsApp Business-konto, slettes skabelonen også fra den konto. Uanset hvad, hvis en kampagne stadig bruger denne skabelon, skal du omdirigere kampagnen til en anden skabelon, før du sletter, ellers vil afsendelser, der er afhængige af den, fejle.

cURL

curl -X DELETE "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  { method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.delete(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "template_id": "template_abc123",
  "note": "The template record was removed from your account. Content already approved by WhatsApp may remain registered with the messaging provider."
}

Send en skabelon til en kontakt

Sender en godkendt skabelon til en kontakt, selv når der ikke er nogen åben samtale — dette genåbner chatsessionen. Du kan målrette kontakten via contactId eller via phoneNumber, og vælge skabelonen via whatsappTemplateId eller via templateName.

POST /whatsapp-templates/send

Felt Påkrævet Beskrivelse
contactId En af disse to Kontaktpersonens ID.
phoneNumber En af disse to Kontaktpersonens telefonnummer (med landekode, ingen mellemrum). Slås op eller oprettes efter behov.
whatsappTemplateId En af disse to Skabelonens ID.
templateName En af disse to Skabelonens navn, som det vises i appen.
firstName Nej Bruges til at udfylde en nyoprettet kontaktperson.
lastName Nej Bruges til at udfylde en nyoprettet kontaktperson.
email Nej Bruges til at udfylde en nyoprettet kontaktperson.
variables Nej Eksplicitte værdier for skabelonens variabler, angivet efter variabelnavn, for eksempel { "code": "482913" }. En værdi angivet her har forrang over kontaktpersonens felter for den pågældende variabel; variabler, du udelader, udfyldes stadig fra kontaktpersonen som beskrevet nedenfor. Dette er måden, du sender en engangskode til en godkendelsesskabelon på.

Skabelonens brødtekst understøtter avanceret variabel-substitution:

  • Grundlæggende variabler: {{first_name}}, {{email}}, {{company}}
  • Standardværdier: {{first_name|there}} viser there, hvis feltet er tomt
  • Transformationer: {{company|uppercase}}, {{name|lowercase}}, {{name|capitalize}}
  • Kombineret: {{company|Your Company|uppercase}}

Kreditter: Afsendelse af en skabelon forbruger kreditter. Den nøjagtige pris afhænger af modtagerens land og skabelonens kategori.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/send?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contactId": "contact123",
    "whatsappTemplateId": "template_abc123"
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/send", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    contactId: "contact123",
    whatsappTemplateId: "template_abc123",
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/send",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "contactId": "contact123",
        "whatsappTemplateId": "template_abc123",
    },
)
data = res.json()

Svar

{
  "success": true,
  "data": "WhatsApp template message sent successfully"
}

En anmodning, der mangler både en kontaktidentifikator og begge skabelonidentifikatorer, returnerer 400. Hvis din konto mangler de besked-legitimationsoplysninger, der kræves for at sende, er svaret 403.


Opret eller opdater en kampagnes live-skabelon

Et andet par slutpunkter til en kampagnes åbningsskabelon, afgrænset af sti i stedet for af en campaign_id i brødteksten. Disse skal bruges til en kampagne, der allerede er live: i modsætning til Opret en skabelon ovenfor, genindsender opdatering her også kampagnens opfølgningskladder til gennemsyn, så åbningsskabelonen og dens opfølgninger forbliver synkroniserede.

POST /whatsapp-templates/campaign/{campaignId} opretter kampagnens åbningsskabelon. PUT /whatsapp-templates/campaign/{campaignId} redigerer den — kampagnen skal allerede have en skabelon, ellers returneres 400.

Felt Påkrævet Beskrivelse
name Ja Et navn til skabelonen.
language Ja Sprogkode, for eksempel en, es, de, pt_BR, zh_CN.
body Ja Beskedteksten, op til 1024 tegn.
variables Ja Sorteret liste over variabelnavne brugt i brødteksten. Send et tomt array, hvis skabelonen ikke bruger nogen.

cURL (opret)

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
    },
)
data = res.json()

Svar

{
  "success": true,
  "campaign_status": "pending",
  "template_sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "message": "WhatsApp template created and campaign updated successfully."
}

For at redigere skal du skifte metoden til PUT og bruge de samme felter — dette genindsender åbningsskabelonen (og kampagnens opfølgningskladder på en WhatsApp API-kampagne) til gennemsyn.

En kampagne, der ikke tilhører din konto, returnerer 404; en kampagne, der tilhører en anden konto, du ikke har tilladelse til, returnerer 403. Redigering af en kampagne uden en eksisterende skabelon returnerer 400.


Send en skabelon til en eksisterende kontakt

Et enklere, sti-afgrænset alternativ til Send en skabelon til en kontakt ovenfor: både skabelonen og kontakten skal allerede eksistere — intet bliver slået op efter navn eller oprettet på stedet.

POST /whatsapp-templates/{templateId}/send-to-contact

Felt Påkrævet Beskrivelse
contactId Ja Kontaktens ID. Skal tilhøre din konto.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactId": "contact123" }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactId: "contact123" }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactId": "contact123"},
)
data = res.json()

Svar

{
  "success": true,
  "data": "WhatsApp template message sent successfully"
}

Kreditter: Afsendelse forbruger kreditter, prissat på samme måde som slutpunktet ovenfor. En contactId, der mangler eller ikke er på din konto, returnerer 403; en templateId, der ikke eksisterer, returnerer 404.


Masseafsendelse af en skabelon

Send én skabelon til mange kontakter i et enkelt kald, med et prisoverslag, som du kan vise, før du bekræfter.

Estimer prisen først

Returnerer hvad afsendelse vil koste, opdelt efter destinationsland, uden at sende noget eller bruge kreditter. Skabelonpriser er pr. destinationsland, så dette skal beregnes på serversiden mod de faktiske kontakter i stedet for at blive estimeret på klientsiden.

POST /whatsapp-templates/{templateId}/estimate-bulk-cost

Felt Påkrævet Beskrivelse
contactIds Ja Kontakter der skal prissættes, op til 500 pr. kald. Dubletter tælles én gang.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactIds": ["contact123", "contact456"] }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactIds: ["contact123", "contact456"] }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactIds": ["contact123", "contact456"]},
)
data = res.json()

Svar

{
  "success": true,
  "data": {
    "countries": [
      {
        "countryCode": "1",
        "name": "United States",
        "iso": "US",
        "flag": "🇺🇸",
        "contactCount": 120,
        "costPerContact": 0.5,
        "subtotal": 60.0
      }
    ],
    "totalContacts": 120,
    "totalTemplateCost": 60.0,
    "templateCategory": "marketing",
    "skippedContacts": 2
  }
}

skippedContacts tæller id’er, der manglede, ikke var dine, eller ikke havde et telefonnummer — estimatet dækker kun resten, så en værdi, der ikke er nul, betyder, at den faktiske afsendelse vil nå færre kontakter, end du valgte.

Send batchet

Sender skabelonen til hver kontakt på listen, løser eventuelle smarte variabler pr. kontakt og trækker kreditter pr. afsendelse.

POST /whatsapp-templates/{templateId}/bulk-send

Felt Påkrævet Beskrivelse
contactIds Ja Kontakter der skal sendes til, op til 5000 pr. kald.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactIds": ["contact123", "contact456"] }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactIds: ["contact123", "contact456"] }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactIds": ["contact123", "contact456"]},
)
data = res.json()

Svar

{
  "success": true,
  "data": { "sent": 118, "failed": 2, "total": 120 }
}

En kontakt, der fejler (ikke fundet, ikke på din konto, eller en afsendelsesfejl), springes over og tælles i failed i stedet for at stoppe batchet. Et tomt contactIds, mere end 5000 id’er ved en afsendelse (500 ved et estimat), eller et manglende templateId returnerer 400.


Forsøg en fejlet besked igen

To slutpunkter til genafsendelse af en besked, der fejlede, uden at oprette en ny beskedpost eller bruge kreditter igen.

POST /whatsapp-templates/messages/{contactId}/{messageId}/retry-template forsøger specifikt en fejlet skabelonbesked igen — den løser skabelonindholdet fra kampagnen igen, hvis den fejlede besked ikke allerede indeholder det. Kun beskeder med status failed og type template kan forsøges igen på denne måde.

POST /whatsapp-templates/messages/{contactId}/{messageId}/retry er kanal-agnostisk og fungerer til enhver fejlet ikke-skabelonbesked (f.eks. WhatsApp Web), og sender den til den rigtige afsendelsesvej baseret på beskedens kanal. Den accepterer status failed, failed_connection, limit_exceeded eller queued_retry.

Ingen af slutpunkterne tager en anmodningskrop.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template",
  { method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "data": "Message retry initiated successfully"
}

For den kanal-agnostiske version skal du skifte stien til .../msg_abc789/retry. En besked, hvis status ikke er berettiget til et nyt forsøg, eller (på skabelonslutpunktet) som ikke er en skabelonbesked, returnerer 400. En manglende kontakt eller besked returnerer 404.


WhatsApp Business-profil

Administrer den WhatsApp Business-profil (om, adresse, beskrivelse, e-mail, websteder, virksomhedskategori og logo), der vises for kontakter på WhatsApp. Fungerer både på en administreret forbindelse og en konto, der kører sin egen WhatsApp Business-konto.

Gem profilen

PUT /whatsapp-templates/profile

Felt Påkrævet Beskrivelse
phoneNumber Ja Det WhatsApp-nummer, som denne profil tilhører. Skal være forbundet til din konto.
about Nej Kort “Om”-tekst, der vises på profilen.
address Nej Virksomhedsadresse.
description Nej Længere virksomhedsbeskrivelse.
email Nej Kontakt-e-mail, der vises på profilen.
websites Nej Array af websteds-URL’er. Hver skal være en gyldig URL.
vertical Nej Virksomhedskategori, for eksempel Retail eller Professional Services.
profilePictureHandle Nej Det håndtag, der returneres af billed-upload-slutpunktet nedenfor, for at indstille profilbilledet.

cURL

curl -X PUT "https://api.youraiconnector.com/v1/whatsapp-templates/profile?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "+31612345678",
    "about": "We reply within a few hours",
    "email": "support@example.com",
    "websites": ["https://example.com"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/profile", {
  method: "PUT",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phoneNumber: "+31612345678",
    about: "We reply within a few hours",
    email: "support@example.com",
    websites: ["https://example.com"],
  }),
});
const data = await res.json();

Python

import requests

res = requests.put(
    "https://api.youraiconnector.com/v1/whatsapp-templates/profile",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "phoneNumber": "+31612345678",
        "about": "We reply within a few hours",
        "email": "support@example.com",
        "websites": ["https://example.com"],
    },
)
data = res.json()

Svar

{
  "success": true,
  "data": "WhatsApp Business profile updated successfully"
}

Et manglende phoneNumber, en ugyldig websteds-URL eller et phoneNumber, der ikke er forbundet til din konto, returnerer 400 eller 404.

Upload et profilbillede

Downloader et billede fra en URL, du angiver, og uploader det til WhatsApp, hvorefter et håndtag returneres. Send dette håndtag som profilePictureHandle i kaldet til at gemme profilen ovenfor for at indstille det som foto – dette slutpunkt uploader kun billedet, det indstiller det ikke af sig selv.

POST /whatsapp-templates/profile/picture

Felt Påkrævet Beskrivelse
phoneNumber Ja Det WhatsApp-nummer, som denne profil tilhører.
fileUrl Ja En offentligt tilgængelig URL til billedet, der skal uploades.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "+31612345678",
    "fileUrl": "https://example.com/logo.png"
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phoneNumber: "+31612345678",
    fileUrl: "https://example.com/logo.png",
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "phoneNumber": "+31612345678",
        "fileUrl": "https://example.com/logo.png",
    },
)
data = res.json()

Svar

{
  "success": true,
  "data": "1234567890123456"
}

data er det uploadede billedes håndtag. Et manglende phoneNumber eller fileUrl, eller et phoneNumber uden et WhatsApp-adgangstoken i arkivet, returnerer 400; en utilgængelig eller ugyldig fileUrl returnerer en fejl, der beskriver, hvorfor downloadet mislykkedes.


Tjek en afsenders status

Poller (og opdaterer) et forbundet WhatsApp-nummers live-afsendelsesstatus hos beskedudbyderen. Nyttigt til at bekræfte, at et nummer faktisk er i stand til at sende, før du stoler på det.

GET /whatsapp-templates/sender-status/{phoneNumber}

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "data": "ONLINE"
}

data er en af ONLINE (sender normalt), PENDING (bliver stadig verificeret) eller DELETED (udbyderen genkender ikke længere denne afsender – genforbind nummeret). Et phoneNumber uden WhatsApp-virksomhedsoplysninger i arkivet returnerer 404.


Generer opfølgningsskabeloner med AI

Platformen kan skrive en kampagnes WhatsApp-opfølgningsskabeloner for dig — de påmindelser, der sendes, når en samtale går i stå — ud fra kampagnens egne instruktioner og mål. Der er ét job-endepunkt, der kører i baggrunden, plus tre ældre endepunkter, der bevares til eksisterende integrationer. De bruger alle AI-kreditter.

Start et genereringsjob

POST /campaigns/{campaignId}/template-generation

Felt Påkrævet Beskrivelse
type Nej all (standard) skriver hele opfølgningssættet. cold_only skriver kun beskederne til kontakter, der aldrig svarede.

cURL

curl -X POST "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "type": "all" }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ type: "all" }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"type": "all"},
)
data = res.json()

Respons (202)

{ "success": true, "campaign_id": "campaign_abc123", "type": "all" }

Kaldet returnerer, så snart jobbet er sat i kø. Læs kampagnen (GET /campaigns/{campaignId}, se Campaigns API) og hold øje med dens template_generation_status-objekt, indtil det er færdigt:

Felt Beskrivelse
status processing mens jobbet kører, derefter completed eller failed.
progress 0 til 100.
current_template, total_templates Hvor mange skabeloner der er skrevet indtil videre, ud af hvor mange jobbet vil skrive — 11 for en udgående eller kombineret kampagne, 9 ellers.
error Hvorfor et failed-job stoppede, for eksempel ikke nok kreditter.
started_at, completed_at Hvornår jobbet startede og sluttede.

De genererede skabeloner lander på kampagnen som alle andre, så de vises i List templates og skal stadig gennem WhatsApp-godkendelse, før de kan sendes. En 400 betyder, at type var noget andet end all eller cold_only; en 404 betyder, at kampagnen ikke eksisterer eller tilhører en anden konto.

Agenter har en tvilling af dette kald, POST /agents/{agentId}/template-generation, som skriver opfølgningerne for en agent og afsluttes under selve kaldet i det normale tilfælde — se Generate follow-up messages i AI Agents API’et.

De ældre genererings-endepunkter

Tre tidligere endepunkter udfører det samme arbejde og bevares, så eksisterende integrationer fortsat kan køre. Ny kode bør bruge job-endepunktet ovenfor.

Endepunkt Hvad det gør
POST /whatsapp-templates/campaign/{campaignId}/generate-async Starter opfølgningsgenerering for kampagnen i baggrunden og returnerer 202 med { "success": true, "data": { "result": "success", "message": "..." } }. Kreditter trækkes på forhånd (springes over på en konto, der medbringer sin egen AI-nøgle), og kampagnens template_generation_status rapporterer status præcis som ovenfor.
POST /whatsapp-templates/campaign/{campaignId}/generate-followups Genererer alle ni opfølgningsskabeloner under kaldet — til en kampagne oprettet før automatiske opfølgninger eksisterede, eller en der skal have dem skrevet igen — og returnerer 200 med templatesGenerated inde i data.
POST /whatsapp-templates/agent/{agentId}/generate-followups Den samme synkrone generering adresseret af Agent. Svaret tilføjer agent_id, campaign_id og target: "campaign" når skabelonerne blev skrevet på agentens kampagne, "agent" (med campaign_id: null) når agenten ikke har nogen kampagne, og de blev gemt på selve agenten. En manglende eller fremmed agent er en 404.

Alle tre kræver automatiske opfølgninger på kontoen og nok kreditter — en 400 angiver hvilken der mangler — og parret adresseret til kampagnen returnerer 403, når kampagnen tilhører en anden konto.


Skabelon-API-fejl

Skabelon-slutpunkter returnerer standardfejlkuverten:

{
  "success": false,
  "error": "Template not found"
}

En 404 på disse slutpunkter betyder normalt, at ressourcen ikke blev fundet — enten eksisterer den ikke, eller også tilhører den en anden konto. Et par slutpunkter (oprettelse/opdatering med kampagne-scope og afsendelser til en eksisterende kontakt) returnerer i stedet 403, når kampagnen eller kontakten tilhører en anden person frem for slet ikke at eksistere. Nogle slutpunkter inkluderer også et error_code-felt, der afspejler HTTP-statuskoden. De delte koder, som alle slutpunkter kan returnere — 400, 401, 403 (din plan inkluderer ikke API-adgang), 429 (rate limit) og 500 — er angivet med vejledning om genforsøg i Fejl & Sidetal.


Næste skridt