Your AI Connector Docs

FAQs-API

FAQs är de frågor och svar som din AI-bot använder när den svarar kunder. Varje FAQ tillhör ditt konto och kan kopplas till en eller flera kampanjer, så att samma svar kan återanvändas överallt där det är relevant. Med FAQs-API:et kan du hantera detta bibliotek programmatiskt — skapa, uppdatera, massimportera, ändra ordning och koppla FAQs till kampanjer från din egen kod.

Alla slutpunkter nedan är relativa till bas-URL:en https://api.youraiconnector.com/v1. Varje anrop måste autentiseras — se API-åtkomst och Autentisering. API-åtkomst är en betalfunktion; utan den avvisas anrop med ett 403.

Hur boten använder en FAQ: När du skapar eller ändrar en FAQ förbereder plattformen dess sökdata (som används för att matcha FAQ:n med inkommande frågor) i bakgrunden. Detta tar vanligtvis några sekunder, varefter boten automatiskt börjar använda posten.


FAQ-objektet

Varje FAQ som returneras från API:et har följande struktur:

Fält Typ Beskrivning
id string FAQ-postens unika identifierare.
question string Kundfrågan som denna post besvarar.
answer string Svaret som AI-boten ger.
category string | null Valfri fritextetikett för kategori.
tags string[] Valfria etiketter för att organisera FAQ-poster.
is_active boolean Om boten får använda denna FAQ. Standardvärde är true.
is_global boolean Markerar att FAQ-posten inte är bunden till en specifik kampanj eller agent. Det innebär inte att FAQ-posten gäller överallt: en FAQ används endast av de kampanjer och agenter den är länkad till. Standardvärde är false.
usage_count integer Hur många gånger denna FAQ har använts i AI-svar.
order_index integer Visningsposition för denna FAQ inom dess kampanj.
campaign_ids string[] ID:n för de kampanjer som denna FAQ är länkad till.
created_at string | null ISO 8601-tidsstämpel för när FAQ-posten skapades.
updated_at string | null ISO 8601-tidsstämpel för den senaste ändringen.

Fälten du kan ange är: question, answer, is_active, is_global, category, tags och order_index. Plattformen hanterar allt annat (sökdata, användningsstatistik, tidsstämplar); alla andra fält i din anropskropp ignoreras.


Lista FAQs

GET /faqs

Returnerar FAQs på ditt konto, med de nyaste först. Filtrera valfritt efter en enskild kampanj eller aktivt tillstånd.

Frågeparametrar

Parameter Krävs Beskrivning
campaign_id Nej Returnera endast FAQs kopplade till denna kampanj.
is_active Nej Returnera endast FAQs med detta aktiva tillstånd (true eller false). Detta filter tillämpas per sida, så en sida kan innehålla färre objekt än limit.
limit Nej Maximalt antal FAQs per sida. Standard 50, max 100.
cursor Nej Ett FAQ-ID att fortsätta efter. Skicka med next_cursor-värdet från föregående sida.

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 är null finns det inga fler resultat.


Hämta en FAQ

GET /faqs/{faqId}

Returnerar en enskild FAQ baserat på dess 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"
  }
}

Skapa en FAQ

POST /faqs

Skapar en ny FAQ och kopplar den till en kampanj.

Begäransfält

Fält Krävs Beskrivning
campaign_id Ja Kampanjen som den nya FAQ:n ska kopplas till.
question Ja Kundfrågan som detta inlägg besvarar.
answer Ja Svaret som boten ska ge.
is_active Nej Huruvida boten får använda denna FAQ. Standardvärde är true.
is_global Nej Huruvida FAQ:n gäller för alla kampanjer. Standardvärde är false.
category Nej En fritextkategori-etikett.
tags Nej En lista med etiketter.
order_index Nej Visningsposition inom kampanjen. Standardvärde är 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"
}

Uppdatera en FAQ

PUT /faqs/{faqId}

Uppdaterar en FAQ delvis. Endast de angivna skrivbara fälten ändras; allt annat behåller sitt nuvarande värde. Ändring av question eller answer uppdaterar automatiskt FAQ:ns sökdata i bakgrunden.

Om du skickar question eller answer måste de vara icke-tomma strängar. Om inga kända skrivbara fält skickas returneras ett 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"
}

Ta bort en FAQ

DELETE /faqs/{faqId}

Tar permanent bort en FAQ. Skicka valfritt med campaign_id som en frågeparameter för att även ta bort FAQ:n från den kampanjens FAQ-lista.

Frågeparametrar

Parameter Krävs Beskrivning
campaign_id Nej Ta även bort FAQ:n från den här kampanjens FAQ-lista.

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
}

Massradera FAQ:er

POST /faqs/bulk-delete

Raderar upp till 500 FAQ:er i en enda begäran. När campaign_id anges tas de raderade FAQ:erna även bort från den kampanjens FAQ-lista.

Begäransfält

Fält Krävs Beskrivning
faq_ids Ja En icke-tom array med FAQ-ID:n som ska raderas (max 500).
campaign_id Nej Ta även bort de raderade FAQ:erna från den här kampanjens FAQ-lista.

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
}

Importera vanliga frågor (FAQ)

POST /faqs/import

Massimportera upp till 500 vanliga frågor och länka dem alla till en kampanj. Objekt vars question matchar en befintlig FAQ i ditt bibliotek (skiftlägesokänsligt) uppdaterar den FAQ:n istället för att skapa en dubblett.

Prestandatips: Matchning av dubbletter genomsöker hela ditt FAQ-bibliotek, så mycket stora bibliotek gör importen långsammare. Föredra färre, större importer framför många små.

Begäransfält

Fält Krävs Beskrivning
campaign_id Ja Kampanjen som alla importerade vanliga frågor länkas till.
faqs Ja En icke-tom array med FAQ-objekt (max 500). Varje objekt måste ha en icke-tom question och answer; det kan även inkludera is_active, is_global, category, tags och 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 är de skapade eller uppdaterade FAQ-ID:na, i den ordning du angav dem.


Ändra ordning på vanliga frågor

POST /faqs/reorder

Ställer in visningsordningen för en kampanjs vanliga frågor. Ange den fullständiga listan med FAQ-ID:n i önskad ordning; varje FAQ:s position uppdateras för att matcha dess plats i arrayen.

Begäransfält

Fält Krävs Beskrivning
campaign_id Ja Kampanjen vars FAQ:er ska sorteras om.
ordered_faq_ids Ja En icke-tom array med alla kampanjens FAQ-ID:n i önskad visningsordning (max 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
}

Om kampanjen eller något av FAQ-ID:na inte hittas i ditt konto, returnerar begäran 404 One or more FAQs were not found.


Länka en FAQ till en kampanj

POST /faqs/{faqId}/link

Länkar en befintlig FAQ till en ytterligare kampanj. En FAQ kan delas av valfritt antal kampanjer, så samma svar behöver bara underhållas en gång.

Begäransfält

Fält Krävs Beskrivning
campaign_id Ja Kampanjen som FAQ:n ska länkas till.

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"
}

Koppla bort en FAQ från en kampanj

POST /faqs/{faqId}/unlink

Tar bort en FAQ från en kampanj utan att radera själva FAQ:n. FAQ:n finns kvar i ditt bibliotek och förblir kopplad till alla andra kampanjer.

Begäransfält

Fält Krävs Beskrivning
campaign_id Ja Kampanjen som FAQ:n ska tas bort från.

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"
}

Återskapa sökdata för en FAQ

POST /faqs/{faqId}/rebuild-embeddings

Köar en återskapning av den data som AI-boten använder för att hitta denna FAQ (dess semantiska sökdata och sökordsdata). Detta är användbart om en FAQ inte visas i svar som förväntat. Återskapningen körs i bakgrunden och slutförs vanligtvis inom några sekunder; FAQ:n kan tillfälligt exkluderas från AI-svar medan den återskapas.

Denna slutpunkt returnerar 202 Accepted eftersom arbetet fortsätter efter att svaret har skickats. status är alltid "processing" — hämta FAQ:n igen senare om du behöver bekräfta att den är klar.

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-assisterad FAQ-hantering

Slutpunkterna nedan går utöver vanlig CRUD: de anropar samma AI-assisterade verktyg som instrumentpanelens FAQ-redigerare använder — för att hitta dubbletter, generera poster från ett dokument och matcha FAQ-poster mot öppna kunskapsluckor. Begäranskroppar i denna uppsättning använder camelCase-fältnamn (campaignId, taskId, sourceIds…), vilket matchar appens egna begäransformat, snarare än snake_case som används på andra ställen på denna sida — kopiera exemplen nedan istället för att gissa ett fältnamn.

Förgrena en FAQ till en kampanjspecifik kopia

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

Skapar en ny FAQ som är en kopia av en befintlig, begränsad till en enskild kampanj, och länkar om den kampanjen till den nya kopian istället för originalet. Använd detta när du vill anpassa ett svar för en kampanj utan att ändra det överallt där den ursprungliga FAQ-posten används. Den ursprungliga FAQ-posten lämnas kvar — den förlorar bara länken till denna kampanj.

Begäransfält

Fält Krävs Beskrivning
campaign_id Ja Kampanjen som den nya kopian ska begränsas till, och som ska länkas om från den ursprungliga FAQ-posten.
question Ja Frågan för den nya, kampanjspecifika kopian.
answer Ja Svaret för den nya, kampanjspecifika kopian.

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"
}

Hitta nästan identiska FAQ-poster

POST /faqs/dedupe

Startar ett bakgrundsjobb som skannar ditt FAQ-bibliotek efter nästan identiska och överlappande poster och slår samman eller tar bort dem där systemet är säkert på sin sak. Användbart efter en massimport, eller efter flera omgångar av AI-genererade FAQ-poster som lämnat biblioteket med överlappningar. Endast ett dedupliceringsjobb kan köras per konto åt gången — att starta ett andra jobb medan ett redan körs returnerar 409.

Begäransfält

Fält Krävs Beskrivning
sourceIds Nej Array med käll-ID:n för kunskapsbasen för att begränsa dedupliceringen. Utelämna för att skanna hela ditt 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örs i bakgrunden och tar vanligtvis några minuter för ett stort bibliotek. Det finns ingen separat status-slutpunkt — hämta GET /faqs igen efter en kort väntan för att se vad som ändrats. När du är klar med att granska resultatet, anropa slutpunkten för att avfärda nedan för att rensa det.

Avfärda ett resultat från dubblettkontroll

POST /faqs/dedupe/dismiss

Rensar det slutförda dedupliceringsjobbet så att det slutar visas som ett aktivt resultat. Idempotent — säkert att anropa även om det inte finns något att avfärda. Returnerar 409 om jobbet fortfarande är queued eller processing (du kan inte avfärda en körning som inte har slutförts).

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 }

Generera vanliga frågor från uppladdade dokument

POST /faqs/generate-from-documents

Läser ett eller flera dokument som redan finns i ditt kontos fillagring och låter AI:n utkastförfatta vanliga frågor från deras innehåll. Utkasten kontrolleras mot ditt befintliga bibliotek så att poster återanvänds eller uppdateras istället för att skapa dubbletter. Resultaten skrivs inte omedelbart — de lagras som en väntande ändringsuppsättning i kampanjen för att du ska kunna granska dem, och tillämpas (eller förkastas) sedan med Tillämpa granskade FAQ-ändringar nedan. Detta kostar krediter, eftersom det är en AI-genereringskörning över dokumenttexten.

Denna slutpunkt hanterar inte filen: storagePath måste peka på en fil som redan finns under din egen uppladdningsmapp (users/{your user id}/uploads/), samma konvention som Importera ett uppladdat dokument i Knowledge Base-API:et.

Begäransfält

Fält Krävs Beskrivning
campaignId Ja Kampanjen som de genererade vanliga frågorna föreslås för.
uploadedFiles Ja Icke-tom array med filer att läsa, varje { storagePath, fileName, mimeType }. storagePath måste börja 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 är det totala antalet föreslagna ändringar som väntar på granskning; reusedCount, modifiedCount och newCount bryter ner detta i vanliga frågor som matchade en befintlig post oförändrad, de som AI:n föreslår redigering av, och helt nya. Uppladdade filer raderas från lagringen när bearbetningen är klar, oavsett om den lyckas eller inte.

Tillämpa granskade FAQ-ändringar

POST /faqs/apply-optimization

Tillämpar (eller förkastar) en väntande uppsättning AI-föreslagna FAQ-ändringar — den typ som produceras av Generera vanliga frågor från dokument ovan, eller av instrumentpanelens granskning av FAQ-optimering. Du väljer exakt vilka föreslagna ändringar som ska accepteras; allt du inte nämner lämnas orört (en utelämnad ändring behandlas aldrig som ett avslag som raderar något).

Begäransfält

Fält Krävs Beskrivning
campaignId En av dessa två Kampanjen vars väntande FAQ-ändringar tillämpas.
agentId En av dessa två AI-agenten vars väntande FAQ-ändringar tillämpas, på ett agent-native konto. Ange exakt en av campaignId / agentId, aldrig båda.
acceptedChanges Ja Array med de ändringar du accepterar, varje { action, faq_id?, faq_ref_path?, question?, answer?, edit_scope? }. action är en av keep, remove, add_from_library, create_new, modify. Skicka en tom array för att förkasta den väntande uppsättningen utan att tillämpa något.

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 är kampanjens (eller agentens) totala antal länkade vanliga frågor efter tillämpning. Om det inte fanns någon väntande ändringsuppsättning att tillämpa är svaret { "success": true, "message": "No pending FAQ changes to apply" }.

Hitta vanliga frågor som liknar en uppgift

POST /faqs/similar-for-task

Rangordnar ditt FAQ-bibliotek efter relevans för en kunskapslucka-uppgifts fråga — samma sökning som ligger bakom instrumentpanelens “Använd en befintlig FAQ”-väljare. Skrivskyddad. taskId måste peka på en uppgift av typen faq_update.

Denna slutpunkt svarar alltid 200, även vid ett förväntat fel som en okänd uppgift — kontrollera success i brödtexten istället för HTTP-statusen.

Begäransfält

Fält Krävs Beskrivning
taskId Ja faq_update-uppgiften att hitta matchningar för.
limit Nej Maximalt antal matchningar att returnera. Standard är 20, max 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
      }
    ]
  }
}

Matchningar sorteras efter similarity (semantisk matchning när tillgänglig, annars nyckelordsöverlappning), bäst först. Vid ett mjukt fel är formen { "success": false, "error": "...", "error_code": 404 }error_code speglar vad HTTP-statusen normalt skulle vara.

Lös en uppgift med en befintlig FAQ

POST /faqs/resolve-task

Löser en kunskapslucka-uppgift genom att länka den till en FAQ du redan har (istället för att skriva en ny), skickar den FAQ:ns svar till kontakten som utlöste luckan och markerar uppgiften som slutförd. Använd detta efter att Hitta FAQ:er som liknar en uppgift har hittat en befintlig FAQ som redan täcker frågan.

Liksom slutpunkten ovan svarar denna alltid 200 — kontrollera success i brödtexten.

Begäransfält

Fält Krävs Beskrivning
taskId Ja faq_update-uppgiften att lösa.
faqId Ja Den befintliga FAQ:n att länka och skicka 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 berättar vad som hände med kontaktuppföljningen: published (skickades direkt), queued (AI:n var redan mitt uppe i ett svar till den kontakten, så det skickas härnäst), skipped_no_contact (uppgiften har ingen länkad kontakt), eller skipped_no_campaign (ingen kampanj att skicka det genom).


Vanliga frågor om API-fel

Slutpunkter för vanliga frågor (FAQ) returnerar standardfelmeddelandet:

{
  "success": false,
  "error": "FAQ not found"
}
Status När det händer på en FAQ-slutpunkt
400 Ett obligatoriskt fält saknas eller är ogiltigt (till exempel ett tomt question, ett saknat campaign_id eller fler än 500 objekt i en massbegäran).
404 FAQ:n eller kampanjen hittades inte — antingen existerar den inte eller så tillhör den ett annat konto.
409 POST /faqs/dedupe anropades medan ett dedupliceringsjobb redan är queued/processing, eller så anropades POST /faqs/dedupe/dismiss medan jobbet inte har slutförts än.

De delade koderna som alla slutpunkter kan returnera — 401, 403 (din plan inkluderar inte API-åtkomst), 429 (hastighetsbegränsning) och 500 — listas med vägledning för återförsök i Fel & Paginering.

POST /faqs/similar-for-task och POST /faqs/resolve-task är de två undantagen på denna sida: de svarar 200 även för ett förväntat fel (okänd uppgift, fel uppgiftstyp) och placerar den verkliga statusen i brödtextens error_code istället — se respektive slutpunkt ovan.


Relaterat

  • Kampanj-API — kampanjerna som dina FAQ:er är länkade till.
  • Kunskapsbas-API — importera webbplatser och dokument till FAQ:er automatiskt och bunta ihop FAQ:er till återanvändbara kunskapsgrupper.
  • API-åtkomst — generera din API-nyckel.
  • Autentisering — alla sätt att skicka med din nyckel.