Your AI Connector Docs

FAQs API

FAQ’er er de spørgsmål-og-svar-poster, som din AI-bot trækker på, når den svarer kunder. Hver FAQ tilhører din konto og kan linkes til en eller flere kampagner, så det samme svar kan genbruges overalt, hvor det er relevant. FAQs API’et lader dig administrere dette bibliotek programmatisk — opret, opdater, importér i bulk, omarrangér og link FAQ’er til kampagner fra din egen kode.

Alle endpoints herunder er relative til basis-URL’en https://api.youraiconnector.com/v1. Hver anmodning skal godkendes — se API-adgang og Godkendelse. API-adgang er en betalt funktion; uden den afvises anmodninger med en 403.

Hvordan botten bruger en FAQ: Når du opretter eller ændrer en FAQ, forbereder platformen dens søgedata (der bruges til at matche FAQ’en med indgående spørgsmål) i baggrunden. Dette tager normalt få sekunder, hvorefter botten automatisk begynder at bruge posten.


FAQ-objektet

Hver FAQ, der returneres fra API’et, har denne form:

Felt Type Beskrivelse
id string FAQ’ens unikke identifikator.
question string Kundespørgsmålet, som dette punkt besvarer.
answer string Svaret, som AI-botten giver.
category string | null Valgfri kategorimærkat i frit format.
tags string[] Valgfrie mærkater til organisering af FAQ’er.
is_active boolean Om botten har tilladelse til at bruge denne FAQ. Standard er true.
is_global boolean Marker FAQ’en som ikke bundet til en specifik kampagne eller agent. Det gør ikke, at FAQ’en gælder overalt: en FAQ bruges kun af de kampagner og agenter, den er linket til. Standard er false.
usage_count integer Hvor mange gange denne FAQ er blevet brugt i AI-svar.
order_index integer Visningsposition for denne FAQ inden for dens kampagne.
campaign_ids string[] ID’er på de kampagner, som denne FAQ er linket til.
created_at string | null ISO 8601-tidsstempel for hvornår FAQ’en blev oprettet.
updated_at string | null ISO 8601-tidsstempel for den seneste ændring.

De felter, du kan indstille, er: question, answer, is_active, is_global, category, tags og order_index. Platformen administrerer alt andet (søgedata, brugstællinger, tidsstempler); alle andre felter i din anmodningskrop ignoreres.


List FAQ’er

GET /faqs

Returnerer FAQ’erne på din konto, nyeste først. Filtrér eventuelt til en enkelt kampagne eller efter aktiv status.

Forespørgselsparametre

Parameter Påkrævet Beskrivelse
campaign_id Nej Returnér kun FAQ’er linket til denne kampagne.
is_active Nej Returnér kun FAQ’er med denne aktive status (true eller false). Dette filter anvendes pr. side, så en side kan indeholde færre elementer end limit.
limit Nej Maksimalt antal FAQ’er pr. side. Standard 50, maksimum 100.
cursor Nej Et FAQ-ID at fortsætte efter. Indsæt next_cursor-værdien fra den forrige side.

cURL

curl "https://api.youraiconnector.com/v1/faqs?campaign_id=campaign123&limit=50&apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs?campaign_id=campaign123&limit=50",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.faqs, data.next_cursor);

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/faqs",
    params={"campaign_id": "campaign123", "limit": 50},
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["faqs"], data["next_cursor"])

Svar

{
  "success": true,
  "faqs": [
    {
      "id": "aBcD1234eFgH5678",
      "question": "How long does shipping take?",
      "answer": "Standard shipping takes 3-5 business days.",
      "category": "shipping",
      "tags": ["logistics", "delivery"],
      "is_active": true,
      "is_global": false,
      "usage_count": 12,
      "order_index": 0,
      "campaign_ids": ["campaign123"],
      "created_at": "2026-01-01T12:00:00.000Z",
      "updated_at": "2026-01-02T08:30:00.000Z"
    }
  ],
  "next_cursor": "aBcD1234eFgH5678"
}

Når next_cursor er null, er der ikke flere resultater.


Hent en FAQ

GET /faqs/{faqId}

Returnerer en enkelt FAQ via dens ID.

cURL

curl "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?apiKey=YOUR_API_KEY"

JavaScript

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

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
faq = res.json()["faq"]

Svar

{
  "success": true,
  "faq": {
    "id": "aBcD1234eFgH5678",
    "question": "How long does shipping take?",
    "answer": "Standard shipping takes 3-5 business days.",
    "category": "shipping",
    "tags": ["logistics"],
    "is_active": true,
    "is_global": false,
    "usage_count": 12,
    "order_index": 0,
    "campaign_ids": ["campaign123"],
    "created_at": "2026-01-01T12:00:00.000Z",
    "updated_at": "2026-01-02T08:30:00.000Z"
  }
}

Opret en FAQ

POST /faqs

Opretter en ny FAQ og linker den til en kampagne.

Anmodningsfelter

Felt Påkrævet Beskrivelse
campaign_id Ja Kampagnen, som den nye FAQ skal linkes til.
question Ja Kundespørgsmålet, som dette punkt besvarer.
answer Ja Svaret, som botten skal give.
is_active Nej Hvorvidt botten må bruge denne FAQ. Standard er true.
is_global Nej Hvorvidt FAQ’en gælder for alle kampagner. Standard er false.
category Nej En frit definerbar kategorietiket.
tags Nej Et array af etiketter.
order_index Nej Visningsposition inden for kampagnen. Standard er 0.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "question": "How long does shipping take?",
    "answer": "Standard shipping takes 3-5 business days.",
    "category": "shipping",
    "tags": ["logistics"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    question: "How long does shipping take?",
    answer: "Standard shipping takes 3-5 business days.",
    category: "shipping",
    tags: ["logistics"],
  }),
});
const { faq_id } = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "question": "How long does shipping take?",
        "answer": "Standard shipping takes 3-5 business days.",
        "category": "shipping",
        "tags": ["logistics"],
    },
)
faq_id = res.json()["faq_id"]

Svar

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678"
}

Opdater en FAQ

PUT /faqs/{faqId}

Opdaterer delvist en FAQ. Kun de angivne skrivbare felter ændres; alt andet beholder sin nuværende værdi. Ændring af question eller answer opdaterer automatisk FAQ’ens søgedata i baggrunden.

Hvis du sender question eller answer, skal de være ikke-tomme strenge. Hvis der ikke sendes nogen genkendte skrivbare felter, returneres en 400.

cURL

curl -X PUT "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "is_active": false }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
  {
    method: "PUT",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ is_active: false }),
  }
);
const data = await res.json();

Python

import requests

res = requests.put(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"is_active": False},
)
data = res.json()

Svar

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678"
}

Slet en FAQ

DELETE /faqs/{faqId}

Sletter en FAQ permanent. Send eventuelt campaign_id som en forespørgselsparameter for også at fjerne FAQ’en fra den kampagnes FAQ-liste.

Forespørgselsparametre

Parameter Påkrævet Beskrivelse
campaign_id Nej Fjern også FAQ’en fra denne kampagnes FAQ-liste.

cURL

curl -X DELETE "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?campaign_id=campaign123&apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?campaign_id=campaign123",
  { 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/faqs/aBcD1234eFgH5678",
    params={"campaign_id": "campaign123"},
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true
}

Massesletning af FAQ’er

POST /faqs/bulk-delete

Sletter op til 500 FAQ’er i en enkelt anmodning. Når campaign_id angives, fjernes de slettede FAQ’er også fra den pågældende kampagnes FAQ-liste.

Anmodningsfelter

Felt Påkrævet Beskrivelse
faq_ids Ja Et ikke-tomt array af FAQ-id’er, der skal slettes (maks. 500).
campaign_id Nej Fjern også de slettede FAQ’er fra denne kampagnes FAQ-liste.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/bulk-delete?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "faq_ids": ["faqId1", "faqId2"], "campaign_id": "campaign123" }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/bulk-delete", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    faq_ids: ["faqId1", "faqId2"],
    campaign_id: "campaign123",
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/bulk-delete",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"faq_ids": ["faqId1", "faqId2"], "campaign_id": "campaign123"},
)
data = res.json()

Svar

{
  "success": true,
  "deleted_count": 2
}

Importér FAQ’er

POST /faqs/import

Masseimportér op til 500 FAQ’er og link dem alle til én kampagne. Elementer, hvis question matcher en eksisterende FAQ i dit bibliotek (uafhængigt af store/små bogstaver), opdaterer den pågældende FAQ i stedet for at oprette en dublet.

Ydelsestip: Duplikatsøgning scanner hele dit FAQ-bibliotek, så meget store biblioteker gør importer langsommere. Foretræk færre, større importer frem for mange små.

Anmodningsfelter

Felt Påkrævet Beskrivelse
campaign_id Ja Den kampagne, som alle importerede FAQ’er er knyttet til.
faqs Ja Et ikke-tomt array af FAQ-elementer (maks. 500). Hvert element skal have et ikke-tomt question og answer; det kan også indeholde is_active, is_global, category, tags og order_index.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/import?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "faqs": [
      { "question": "Do you ship internationally?", "answer": "Yes, we ship to most countries worldwide." },
      { "question": "What is your return policy?", "answer": "You can return any item within 30 days." }
    ]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/import", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    faqs: [
      {
        question: "Do you ship internationally?",
        answer: "Yes, we ship to most countries worldwide.",
      },
      {
        question: "What is your return policy?",
        answer: "You can return any item within 30 days.",
      },
    ],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/import",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "faqs": [
            {"question": "Do you ship internationally?", "answer": "Yes, we ship to most countries worldwide."},
            {"question": "What is your return policy?", "answer": "You can return any item within 30 days."},
        ],
    },
)
data = res.json()

Svar

{
  "success": true,
  "faq_ids": ["aBcD1234eFgH5678", "iJkL9012mNoP3456"],
  "imported_count": 2
}

faq_ids er de oprettede eller opdaterede FAQ-id’er i den rækkefølge, du angav dem.


Omorganiser FAQ’er

POST /faqs/reorder

Angiver visningsrækkefølgen for en kampagnes FAQ’er. Angiv den fulde liste over FAQ-id’er i den ønskede rækkefølge; hver FAQ’s position opdateres, så den matcher dens plads i arrayet.

Anmodningsfelter

Felt Påkrævet Beskrivelse
campaign_id Ja Den kampagne, hvis FAQ’er skal omorganiseres.
ordered_faq_ids Ja Et ikke-tomt array af alle kampagnens FAQ-id’er i den ønskede visningsrækkefølge (maks. 500).

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/reorder?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "ordered_faq_ids": ["faqId2", "faqId1", "faqId3"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/reorder", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    ordered_faq_ids: ["faqId2", "faqId1", "faqId3"],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/reorder",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "ordered_faq_ids": ["faqId2", "faqId1", "faqId3"],
    },
)
data = res.json()

Svar

{
  "success": true
}

Hvis kampagnen eller nogen af FAQ-id’erne ikke findes på din konto, returnerer anmodningen 404 One or more FAQs were not found.


Knyt en FAQ til en kampagne

POST /faqs/{faqId}/link

Knytter en eksisterende FAQ til en yderligere kampagne. En FAQ kan deles af et vilkårligt antal kampagner, så det samme svar behøver kun at blive vedligeholdt én gang.

Anmodningsfelter

Felt Påkrævet Beskrivelse
campaign_id Ja Kampagnen, som FAQ’en skal linkes til.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "campaign_id": "campaign456" }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ campaign_id: "campaign456" }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"campaign_id": "campaign456"},
)
data = res.json()

Svar

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678",
  "campaign_id": "campaign456"
}

POST /faqs/{faqId}/unlink

Fjerner en FAQ fra en kampagne uden at slette selve FAQ’en. FAQ’en forbliver i dit bibliotek og forbliver linket til alle andre kampagner.

Anmodningsfelter

Felt Påkrævet Beskrivelse
campaign_id Ja Kampagnen, som FAQ’en skal fjernes fra.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "campaign_id": "campaign456" }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ campaign_id: "campaign456" }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"campaign_id": "campaign456"},
)
data = res.json()

Svar

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678",
  "campaign_id": "campaign456"
}

Gendan en FAQ’s søgedata

POST /faqs/{faqId}/rebuild-embeddings

Sætter en gendannelse af de data, som AI-botten bruger til at finde denne FAQ (dens semantiske og søgeordsdata), i kø. Dette er nyttigt, hvis en FAQ ikke bliver fundet i svar som forventet. Gendannelsen kører i baggrunden og fuldføres normalt inden for få sekunder; FAQ’en kan være midlertidigt udelukket fra AI-svar, mens den gendannes.

Dette endpoint returnerer 202 Accepted, fordi arbejdet fortsætter, efter svaret er sendt. status er altid "processing" — hent FAQ’en igen senere, hvis du har brug for at bekræfte fuldførelsen.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/rebuild-embeddings?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/rebuild-embeddings",
  { 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/faqs/aBcD1234eFgH5678/rebuild-embeddings",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678",
  "status": "processing"
}

AI-assisteret FAQ-styring

Slutpunkterne herunder går ud over almindelig CRUD: De kalder de samme AI-assistentværktøjer, som dashboardets FAQ-editor bruger — de finder dubletter, genererer indlæg fra et dokument og matcher FAQ’er med åbne videnshulsopgaver. Anmodningsorganer i dette sæt bruger camelCase feltnavne (campaignId, taskId, sourceIds…), der matcher appens egne anmodningsformer, frem for de snake_case, der bruges andre steder på denne side — kopier eksemplerne herunder i stedet for at gætte et feltnavn.

Forgren en FAQ til en kampagne-specifik kopi

POST /faqs/{faqId}/fork-for-campaign

Opretter en ny FAQ, der er en kopi af en eksisterende, begrænset til en enkelt kampagne, og genforbinder den kampagne til den nye kopi i stedet for den originale. Brug dette, når du vil tilpasse et svar til én kampagne uden at ændre det alle andre steder, hvor den originale FAQ bruges. Den originale FAQ forbliver intakt — den mister blot linket til denne kampagne.

Anmodningsfelter

Felt Påkrævet Beskrivelse
campaign_id Ja Kampagnen, som den nye kopi skal begrænses til, og som skal genforbindes fra den originale FAQ.
question Ja Spørgsmålet til den nye, kampagnespecifikke kopi.
answer Ja Svaret til den nye, kampagnespecifikke kopi.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign456",
    "question": "How long does shipping take to the EU?",
    "answer": "For EU orders, shipping takes 7-10 business days."
  }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      campaign_id: "campaign456",
      question: "How long does shipping take to the EU?",
      answer: "For EU orders, shipping takes 7-10 business days.",
    }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign456",
        "question": "How long does shipping take to the EU?",
        "answer": "For EU orders, shipping takes 7-10 business days.",
    },
)
data = res.json()

Svar201 Created

{
  "success": true,
  "faq_id": "nEwFaQiD9012mNoP",
  "campaign_id": "campaign456",
  "original_faq_id": "aBcD1234eFgH5678"
}

Find næsten identiske FAQ’er

POST /faqs/dedupe

Starter et baggrundsjob, der scanner dit FAQ-bibliotek for næsten identiske og overlappende indlæg og fletter eller fjerner dem, hvor det er sikkert. Nyttigt efter en bulk-import, eller efter flere runder med AI-genererede FAQ’er har efterladt biblioteket med overlap. Kun ét deduplikeringsjob kan køre pr. konto ad gangen — hvis du starter et andet, mens et job stadig kører, returneres 409.

Anmodningsfelter

Felt Påkrævet Beskrivelse
sourceIds Nej Array af vidensbase-kilde-ID’er til at begrænse deduplikeringen til. Udelad for at scanne hele dit FAQ-bibliotek.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/dedupe?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

JavaScript

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

Python

import requests

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

Svar202 Accepted

{
  "success": true,
  "job_id": "dedupJob_aBc123"
}

Jobbet kører i baggrunden og tager typisk et par minutter på et stort bibliotek. Der er ikke et separat statusslutpunkt — hent GET /faqs igen efter en kort ventetid for at se, hvad der er ændret. Når du er færdig med at gennemgå resultatet, skal du kalde afvisnings-slutpunktet herunder for at rydde det.

Afvis et resultat fra dublet-tjek

POST /faqs/dedupe/dismiss

Rydder det afsluttede deduplikeringsjob, så det ikke længere vises som et aktivt resultat. Idempotent — sikkert at kalde, selvom der ikke er noget at afvise. Returnerer 409, hvis jobbet stadig er queued eller processing (du kan ikke afvise en kørsel, der ikke er færdig).

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/dedupe/dismiss?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/dedupe/dismiss", {
  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/faqs/dedupe/dismiss",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Svar

{ "success": true }

Generer ofte stillede spørgsmål (FAQ) fra uploadede dokumenter

POST /faqs/generate-from-documents

Læser et eller flere dokumenter, der allerede findes i din kontos filarkiv, og får AI’en til at udarbejde FAQ’er ud fra deres indhold. Den tjekker udkastene mod dit eksisterende bibliotek, så den genbruger eller opdaterer poster i stedet for at oprette dubletter. Resultaterne skrives ikke med det samme — de gemmes som et afventende ændringssæt på kampagnen, som du kan gennemse, og derefter anvende (eller kassere) med Anvend gennemsete FAQ-ændringer nedenfor. Dette koster kreditter, da det er en AI-genereringsproces baseret på dokumentteksten.

Dette slutpunkt medfører ikke filen: storagePath skal pege på en fil, der allerede findes i din egen upload-mappe (users/{your user id}/uploads/), samme konvention som Importer et uploadet dokument i vidensbase-API’et.

Anmodningsfelter

Felt Påkrævet Beskrivelse
campaignId Ja Kampagnen, som de genererede FAQ’er foreslås til.
uploadedFiles Ja Ikke-tomt array af filer, der skal læses, hver { storagePath, fileName, mimeType }. storagePath skal starte med users/{your user id}/uploads/.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/generate-from-documents?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaignId": "campaign123",
    "uploadedFiles": [
      { "storagePath": "users/abc123uid/uploads/handbook.pdf", "fileName": "handbook.pdf", "mimeType": "application/pdf" }
    ]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/generate-from-documents", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaignId: "campaign123",
    uploadedFiles: [
      { storagePath: "users/abc123uid/uploads/handbook.pdf", fileName: "handbook.pdf", mimeType: "application/pdf" },
    ],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/generate-from-documents",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaignId": "campaign123",
        "uploadedFiles": [
            {"storagePath": "users/abc123uid/uploads/handbook.pdf", "fileName": "handbook.pdf", "mimeType": "application/pdf"},
        ],
    },
)
data = res.json()

Svar202 Accepted

{
  "success": true,
  "faqCount": 6,
  "reusedCount": 2,
  "modifiedCount": 1,
  "newCount": 3
}

faqCount er det samlede antal foreslåede ændringer, der venter på gennemgang; reusedCount, modifiedCount og newCount opdeler dette i FAQ’er, der matchede en eksisterende post uændret, dem AI’en foreslår at redigere, og helt nye. Uploadede filer slettes fra lageret, når behandlingen er færdig, uanset om den lykkes eller ej.

Anvend gennemsete FAQ-ændringer

POST /faqs/apply-optimization

Anvender (eller kasserer) et afventende sæt af AI-foreslåede FAQ-ændringer — den type, der produceres af Generer FAQ’er fra dokumenter ovenfor, eller af dashboardets FAQ-optimeringsgennemgang. Du vælger præcis, hvilke foreslåede ændringer der skal accepteres; alt, hvad du ikke nævner, forbliver uberørt (en udeladt ændring behandles aldrig som en afvisning, der sletter noget).

Anmodningsfelter

Felt Påkrævet Beskrivelse
campaignId En af disse to Kampagnen, hvis afventende FAQ-ændringer anvendes.
agentId En af disse to AI-agenten, hvis afventende FAQ-ændringer anvendes, på en agent-baseret konto. Angiv præcis én af campaignId / agentId, aldrig begge.
acceptedChanges Ja Array af de ændringer, du accepterer, hver { action, faq_id?, faq_ref_path?, question?, answer?, edit_scope? }. action er en af keep, remove, add_from_library, create_new, modify. Send et tomt array for at kassere det afventende sæt uden at anvende noget.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/apply-optimization?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaignId": "campaign123",
    "acceptedChanges": [
      { "action": "create_new", "question": "Do you ship to the EU?", "answer": "Yes, EU shipping takes 7-10 business days." },
      { "action": "remove", "faq_ref_path": "users/abc123uid/faqs/oldFaqId" }
    ]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/apply-optimization", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaignId: "campaign123",
    acceptedChanges: [
      { action: "create_new", question: "Do you ship to the EU?", answer: "Yes, EU shipping takes 7-10 business days." },
      { action: "remove", faq_ref_path: "users/abc123uid/faqs/oldFaqId" },
    ],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/apply-optimization",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaignId": "campaign123",
        "acceptedChanges": [
            {"action": "create_new", "question": "Do you ship to the EU?", "answer": "Yes, EU shipping takes 7-10 business days."},
            {"action": "remove", "faq_ref_path": "users/abc123uid/faqs/oldFaqId"},
        ],
    },
)
data = res.json()

Svar

{
  "success": true,
  "message": "Applied 2 FAQ changes",
  "faq_count": 7
}

faq_count er kampagnens (eller agentens) samlede antal linkede FAQ’er efter anvendelse. Hvis der ikke var noget afventende ændringssæt at anvende, er svaret { "success": true, "message": "No pending FAQ changes to apply" }.

Find FAQ’er, der ligner en opgave

POST /faqs/similar-for-task

Rangerer dit FAQ-bibliotek efter relevans i forhold til spørgsmålet i en videnskløft-opgave — det samme opslag, der ligger bag dashboardets “Brug en eksisterende FAQ”-vælger. Skrivebeskyttet. taskId skal pege på en opgave af typen faq_update.

Dette slutpunkt svarer altid 200, selv ved en forventet fejl som f.eks. en ukendt opgave — tjek success i brødteksten i stedet for HTTP-status.

Anmodningsfelter

Felt Påkrævet Beskrivelse
taskId Ja Den faq_update opgave, der skal findes match til.
limit Nej Maksimalt antal match, der skal returneres. Standard er 20, begrænset til 50.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/similar-for-task?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "taskId": "task789", "limit": 10 }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/similar-for-task", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ taskId: "task789", limit: 10 }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/similar-for-task",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"taskId": "task789", "limit": 10},
)
data = res.json()

Svar

{
  "success": true,
  "data": {
    "task_id": "task789",
    "matches": [
      {
        "faq_id": "aBcD1234eFgH5678",
        "question": "How long does shipping take?",
        "answer": "Standard shipping takes 3-5 business days.",
        "category": "shipping",
        "created_at": "2026-01-01T12:00:00.000Z",
        "similarity": 0.81,
        "embedding_similarity": 0.81,
        "keyword_similarity": 0.6,
        "bm25_score": 4.2,
        "distance": 0.19
      }
    ]
  }
}

Match sorteres efter similarity (semantisk match når tilgængelig, ellers søgeordsoverlap), med det bedste først. Ved en blød fejl er formen { "success": false, "error": "...", "error_code": 404 }error_code afspejler, hvad HTTP-statussen normalt ville være.

Løs en opgave med en eksisterende FAQ

POST /faqs/resolve-task

Løser en videnskløft-opgave ved at linke den til en FAQ, du allerede har (i stedet for at skrive en ny), sender den pågældende FAQ’s svar til kontakten, der udløste kløften, og markerer opgaven som fuldført. Brug denne, efter at Find FAQ’er, der ligner en opgave har fundet en eksisterende FAQ, der allerede dækker spørgsmålet.

Ligesom slutpunktet ovenfor svarer dette altid 200 — tjek success i brødteksten.

Anmodningsfelter

Felt Påkrævet Beskrivelse
taskId Ja Den faq_update opgave, der skal løses.
faqId Ja Den eksisterende FAQ, der skal linkes og sendes som svar.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/resolve-task?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "taskId": "task789", "faqId": "aBcD1234eFgH5678" }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/resolve-task", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ taskId: "task789", faqId: "aBcD1234eFgH5678" }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/resolve-task",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"taskId": "task789", "faqId": "aBcD1234eFgH5678"},
)
data = res.json()

Svar

{
  "success": true,
  "data": {
    "task_id": "task789",
    "faq_id": "aBcD1234eFgH5678",
    "follow_up_status": "published"
  }
}

follow_up_status fortæller dig, hvad der skete med opfølgningen på kontakten: published (sendt med det samme), queued (AI’en var allerede i gang med at svare den kontakt, så den sendes næste gang), skipped_no_contact (opgaven har ingen linket kontakt), eller skipped_no_campaign (ingen kampagne at sende den igennem).


FAQ API-fejl

FAQ-endpoints returnerer standardfejl-konvolutten:

{
  "success": false,
  "error": "FAQ not found"
}
Status Hvornår det sker på et FAQ-slutpunkt
400 Et påkrævet felt mangler eller er ugyldigt (f.eks. en tom question, en manglende campaign_id eller mere end 500 elementer i en bulk-anmodning).
404 FAQ’en eller kampagnen blev ikke fundet — enten eksisterer den ikke, eller også tilhører den en anden konto.
409 POST /faqs/dedupe blev kaldt, mens et dedupe-job allerede er queued/processing, eller POST /faqs/dedupe/dismiss blev kaldt, mens jobbet ikke er færdigt endnu.

De delte koder, som ethvert endpoint kan returnere — 401, 403 (din plan inkluderer ikke API-adgang), 429 (rate limit) og 500 — er angivet med vejledning om genforsøg i Errors & Pagination.

POST /faqs/similar-for-task og POST /faqs/resolve-task er de to undtagelser på denne side: de svarer 200 selv ved en forventet fejl (ukendt opgave, forkert opgavetype) og placerer i stedet den rigtige status i brødtekstens error_code — se hvert slutpunkt ovenfor.


Relateret

  • Kampagne-API — de kampagner, dine FAQ’er er linket til.
  • Vidensbase-API — importér automatisk websteder og dokumenter til FAQ’er, og saml FAQ’er i genanvendelige vidensgrupper.
  • API-adgang — generér din API-nøgle.
  • Godkendelse — alle måder at angive din nøgle på.