Your AI Connector Docs

API FAQ

Le FAQ sono le voci di domanda e risposta a cui il tuo bot AI attinge quando risponde ai clienti. Ogni FAQ appartiene al tuo account e può essere collegata a una o più campagne, in modo che la stessa risposta possa essere riutilizzata ovunque sia pertinente. L’API FAQ ti consente di gestire tale libreria a livello programmatico: creare, aggiornare, importare in blocco, riordinare e collegare le FAQ alle campagne dal tuo codice.

Tutti gli endpoint seguenti sono relativi all’URL di base https://api.youraiconnector.com/v1. Ogni richiesta deve essere autenticata: consulta Accesso API e Autenticazione. L’accesso all’API è una funzionalità a pagamento; in caso contrario, le richieste verranno rifiutate con un 403.

Come il bot utilizza una FAQ: Quando crei o modifichi una FAQ, la piattaforma prepara i suoi dati di ricerca (utilizzati per abbinare la FAQ alle domande in arrivo) in background. Questa operazione solitamente si conclude in pochi secondi, dopodiché il bot inizia a utilizzare la voce automaticamente.


L’oggetto FAQ

Ogni FAQ restituita dall’API ha questa struttura:

Campo Tipo Descrizione
id string L’identificativo univoco della FAQ.
question string La domanda del cliente a cui questa voce risponde.
answer string La risposta fornita dal bot AI.
category string | null Etichetta di categoria facoltativa a formato libero.
tags string[] Etichette facoltative per organizzare le FAQ.
is_active boolean Indica se al bot è consentito utilizzare questa FAQ. Il valore predefinito è true.
is_global boolean Contrassegna la FAQ come non legata a una specifica campagna o ad un Agente. Non rende la FAQ applicabile ovunque: una FAQ viene utilizzata solo dalle campagne e dagli Agenti a cui è collegata. Il valore predefinito è false.
usage_count integer Quante volte questa FAQ è stata utilizzata nelle risposte dell’AI.
order_index integer Posizione di visualizzazione di questa FAQ all’interno della sua campagna.
campaign_ids string[] ID delle campagne a cui questa FAQ è collegata.
created_at string | null Timestamp ISO 8601 di quando la FAQ è stata creata.
updated_at string | null Timestamp ISO 8601 dell’ultima modifica.

I campi che puoi impostare sono: question, answer, is_active, is_global, category, tags e order_index. La piattaforma gestisce tutto il resto (dati di ricerca, conteggi di utilizzo, timestamp); qualsiasi altro campo nel corpo della richiesta viene ignorato.


Elenca FAQ

GET /faqs

Restituisce le FAQ nel tuo account, dalla più recente alla meno recente. Filtra facoltativamente per una singola campagna o per stato attivo.

Parametri di query

Parametro Obbligatorio Descrizione
campaign_id No Restituisce solo le FAQ collegate a questa campagna.
is_active No Restituisce solo le FAQ con questo stato attivo (true o false). Questo filtro viene applicato per pagina, quindi una pagina potrebbe contenere meno elementi di limit.
limit No Numero massimo di FAQ per pagina. Predefinito 50, massimo 100.
cursor No Un ID FAQ da cui continuare. Passa il valore next_cursor dalla pagina precedente.

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"])

Risposta

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

Quando next_cursor è null, non ci sono più risultati.


Ottieni una FAQ

GET /faqs/{faqId}

Restituisce una singola FAQ tramite il suo 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"]

Risposta

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

Crea una FAQ

POST /faqs

Crea una nuova FAQ e la collega a una campagna.

Campi della richiesta

Campo Obbligatorio Descrizione
campaign_id La campagna a cui collegare la nuova FAQ.
question La domanda del cliente a cui risponde questa voce.
answer La risposta che il bot dovrebbe fornire.
is_active No Indica se il bot può utilizzare questa FAQ. Il valore predefinito è true.
is_global No Indica se la FAQ si applica a tutte le campagne. Il valore predefinito è false.
category No Un’etichetta di categoria a formato libero.
tags No Una matrice di etichette.
order_index No Posizione di visualizzazione all’interno della campagna. Il valore predefinito è 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"]

Risposta

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

Aggiorna una FAQ

PUT /faqs/{faqId}

Aggiorna parzialmente una FAQ. Vengono modificati solo i campi scrivibili forniti; tutto il resto mantiene il suo valore attuale. La modifica di question o answer aggiorna automaticamente i dati di ricerca della FAQ in background.

Se invii question o answer, devono essere stringhe non vuote. L’invio di campi scrivibili non riconosciuti restituisce un 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()

Risposta

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

Elimina una FAQ

DELETE /faqs/{faqId}

Elimina definitivamente una FAQ. Passa facoltativamente campaign_id come parametro di query per rimuovere la FAQ anche dall’elenco FAQ di quella campagna.

Parametri di query

Parametro Obbligatorio Descrizione
campaign_id No Rimuovi anche le FAQ dall’elenco FAQ di questa campagna.

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()

Risposta

{
  "success": true
}

Eliminazione in blocco delle FAQ

POST /faqs/bulk-delete

Elimina fino a 500 FAQ in un’unica richiesta. Quando viene fornito campaign_id, le FAQ eliminate vengono rimosse anche dall’elenco FAQ di quella campagna.

Campi della richiesta

Campo Obbligatorio Descrizione
faq_ids Un array non vuoto di ID FAQ da eliminare (max 500).
campaign_id No Rimuovi anche le FAQ eliminate dall’elenco FAQ di questa campagna.

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()

Risposta

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

FAQ sulle importazioni

POST /faqs/import

Importa in blocco fino a 500 FAQ e le collega tutte a una campagna. Gli elementi il cui question corrisponde a una FAQ esistente nella tua libreria (senza distinzione tra maiuscole e minuscole) aggiornano tale FAQ invece di crearne un duplicato.

Suggerimento sulle prestazioni: la ricerca di duplicati analizza l’intera libreria di FAQ, pertanto librerie molto grandi rallentano le importazioni. È preferibile effettuare poche importazioni di grandi dimensioni piuttosto che molte piccole.

Campi della richiesta

Campo Obbligatorio Descrizione
campaign_id La campagna a cui sono collegate tutte le FAQ importate.
faqs Un array non vuoto di elementi FAQ (max 500). Ogni elemento deve avere question e answer non vuoti; può includere anche is_active, is_global, category, tags e 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()

Risposta

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

faq_ids sono gli ID delle FAQ create o aggiornate, nell’ordine in cui sono stati forniti.


Riordina FAQ

POST /faqs/reorder

Imposta l’ordine di visualizzazione delle FAQ di una campagna. Fornisci l’elenco completo degli ID delle FAQ nell’ordine desiderato; la posizione di ogni FAQ viene aggiornata per corrispondere al suo posto nell’array.

Campi della richiesta

Campo Obbligatorio Descrizione
campaign_id La campagna le cui FAQ devono essere riordinate.
ordered_faq_ids Un array non vuoto di tutti gli ID delle FAQ della campagna nell’ordine di visualizzazione desiderato (massimo 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()

Risposta

{
  "success": true
}

Se la campagna o uno qualsiasi degli ID delle FAQ non viene trovato nel tuo account, la richiesta restituisce 404 One or more FAQs were not found.


Collega una FAQ a una campagna

POST /faqs/{faqId}/link

Collega una FAQ esistente a una campagna aggiuntiva. Una FAQ può essere condivisa da un numero qualsiasi di campagne, quindi la stessa risposta deve essere gestita una sola volta.

Campi della richiesta

Campo Obbligatorio Descrizione
campaign_id La campagna a cui collegare la FAQ.

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()

Risposta

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

Scollegare una FAQ da una campagna

POST /faqs/{faqId}/unlink

Rimuove una FAQ da una campagna senza eliminare la FAQ stessa. La FAQ rimane nella tua libreria e resta collegata a qualsiasi altra campagna.

Campi della richiesta

Campo Obbligatorio Descrizione
campaign_id La campagna da cui rimuovere la FAQ.

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()

Risposta

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

Ricostruire i dati di ricerca di una FAQ

POST /faqs/{faqId}/rebuild-embeddings

Accoda una ricostruzione dei dati utilizzati dal bot AI per trovare questa FAQ (i suoi dati di ricerca semantica e per parole chiave). Questo è utile se una FAQ non viene rilevata nelle risposte come previsto. La ricostruzione viene eseguita in background e solitamente si completa in pochi secondi; la FAQ potrebbe essere temporaneamente esclusa dalle risposte dell’AI mentre viene ricostruita.

Questo endpoint restituisce 202 Accepted perché il lavoro continua dopo l’invio della risposta. Lo status è sempre "processing": recupera nuovamente la FAQ in seguito se hai bisogno di confermare il completamento.

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()

Risposta

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

Gestione delle FAQ assistita dall’IA

Gli endpoint sottostanti vanno oltre il semplice CRUD: richiamano gli stessi strumenti di assistenza IA utilizzati dall’editor delle FAQ della dashboard, per trovare duplicati, generare voci da un documento e abbinare le FAQ a task aperti relativi a lacune di conoscenza. I corpi delle richieste in questo set utilizzano nomi di campo camelCase (campaignId, taskId, sourceIds…), che corrispondono alle strutture di richiesta dell’app, anziché i snake_case utilizzati altrove in questa pagina: copia gli esempi sottostanti invece di indovinare il nome di un campo.

Crea una copia di una FAQ specifica per una campagna

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

Crea una nuova FAQ che è una copia di una esistente, limitata a una singola campagna, e ricollega tale campagna alla nuova copia invece che all’originale. Utilizza questa funzione quando desideri personalizzare una risposta per una campagna senza modificarla ovunque venga utilizzata la FAQ originale. La FAQ originale rimane al suo posto: perde solo il collegamento con questa campagna.

Campi della richiesta

Campo Obbligatorio Descrizione
campaign_id La campagna a cui limitare la nuova copia e da cui ricollegare la FAQ originale.
question La domanda per la nuova copia specifica per la campagna.
answer La risposta per la nuova copia specifica per la campagna.

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()

Risposta201 Created

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

Trova FAQ quasi duplicate

POST /faqs/dedupe

Avvia un processo in background che scansiona la tua libreria di FAQ alla ricerca di voci quasi duplicate o sovrapposte e le unisce o le rimuove dove il sistema è sicuro. Utile dopo un’importazione massiva o dopo diversi cicli di FAQ generate dall’IA che hanno lasciato sovrapposizioni nella libreria. È possibile eseguire solo un processo di deduplicazione alla volta per account: avviare un secondo processo mentre uno è ancora in esecuzione restituisce 409.

Campi della richiesta

Campo Obbligatorio Descrizione
sourceIds No Array di ID di origine della knowledge base a cui limitare la deduplicazione. Ometti per scansionare l’intera libreria di FAQ.

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()

Risposta202 Accepted

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

Il processo viene eseguito in background e solitamente richiede alcuni minuti su una libreria di grandi dimensioni. Non esiste un endpoint di stato separato: recupera nuovamente GET /faqs dopo una breve attesa per vedere cosa è cambiato. Quando hai finito di esaminare il risultato, chiama l’endpoint di chiusura sottostante per cancellarlo.

Chiudi un risultato di controllo duplicati

POST /faqs/dedupe/dismiss

Cancella il processo di deduplicazione terminato in modo che smetta di apparire come risultato attivo. Idempotente: è sicuro chiamarlo anche se non c’è nulla da chiudere. Restituisce 409 se il processo è ancora queued o processing (non è possibile chiudere un’esecuzione che non è ancora terminata).

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()

Risposta

{ "success": true }

Genera FAQ dai documenti caricati

POST /faqs/generate-from-documents

Legge uno o più documenti già presenti nell’archivio file del tuo account e fa sì che l’IA rediga le FAQ dal loro contenuto, confrontando le bozze con la tua libreria esistente in modo da riutilizzare o aggiornare le voci invece di creare duplicati. I risultati non vengono scritti immediatamente: vengono archiviati come un set di modifiche in sospeso nella campagna affinché tu possa esaminarli, per poi essere applicati (o eliminati) con Applica le modifiche alle FAQ revisionate qui sotto. Questa operazione comporta un costo in crediti, poiché si tratta di un passaggio di generazione tramite IA sul testo del documento.

Questo endpoint non gestisce il file: storagePath deve puntare a un file già presente nella tua cartella di caricamento (users/{your user id}/uploads/), seguendo la stessa convenzione di Importa un documento caricato nell’API della Knowledge Base.

Campi della richiesta

Campo Obbligatorio Descrizione
campaignId La campagna per cui vengono proposte le FAQ generate.
uploadedFiles Array non vuoto di file da leggere, ciascuno { storagePath, fileName, mimeType }. storagePath deve iniziare con 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()

Risposta202 Accepted

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

faqCount è il numero totale di modifiche proposte in attesa di revisione; reusedCount, modifiedCount e newCount suddividono tale numero in FAQ che corrispondono a una voce esistente invariata, quelle che l’IA propone di modificare e quelle nuove di zecca. I file caricati vengono eliminati dall’archivio una volta terminata l’elaborazione, indipendentemente dal fatto che abbia avuto successo o meno.

Applica le modifiche alle FAQ revisionate

POST /faqs/apply-optimization

Applica (o elimina) un set in sospeso di modifiche alle FAQ proposte dall’IA — il tipo prodotto da Genera FAQ dai documenti qui sopra, o dalla revisione dell’ottimizzazione delle FAQ della dashboard. Scegli esattamente quali modifiche proposte accettare; tutto ciò che non viene menzionato rimane invariato (una modifica omessa non viene mai trattata come un rifiuto che elimina qualcosa).

Campi della richiesta

Campo Obbligatorio Descrizione
campaignId Uno dei due La campagna le cui modifiche alle FAQ in sospeso vengono applicate.
agentId Uno dei due L’Agente IA le cui modifiche alle FAQ in sospeso vengono applicate, su un account nativo dell’agente. Fornisci esattamente uno tra campaignId / agentId, mai entrambi.
acceptedChanges Array delle modifiche che accetti, ciascuna { action, faq_id?, faq_ref_path?, question?, answer?, edit_scope? }. action è uno tra keep, remove, add_from_library, create_new, modify. Invia un array vuoto per eliminare il set in sospeso senza applicare nulla.

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()

Risposta

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

faq_count è il conteggio totale delle FAQ collegate della campagna (o dell’Agente) dopo l’applicazione. Se non c’era alcun set di modifiche in sospeso da applicare, la risposta è { "success": true, "message": "No pending FAQ changes to apply" }.

Trova FAQ simili a un task

POST /faqs/similar-for-task

Classifica la tua libreria di FAQ in base alla rilevanza rispetto alla domanda di un task di lacuna di conoscenza (knowledge-gap) — la stessa ricerca alla base del selettore “Usa una FAQ esistente” della dashboard. Sola lettura. taskId deve puntare a un task di tipo faq_update.

Questo endpoint risponde sempre 200, anche in caso di errore previsto come un task sconosciuto: controlla success nel corpo della risposta invece dello stato HTTP.

Campi della richiesta

Campo Obbligatorio Descrizione
taskId Il task faq_update per cui trovare corrispondenze.
limit No Numero massimo di corrispondenze da restituire. Il valore predefinito è 20, con un limite massimo di 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()

Risposta

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

Le corrispondenze sono ordinate per similarity (corrispondenza semantica quando disponibile, altrimenti sovrapposizione di parole chiave), dalla migliore alla peggiore. In caso di errore lieve, la struttura è { "success": false, "error": "...", "error_code": 404 }: error_code rispecchia quello che sarebbe normalmente lo stato HTTP.

Risolvere un task con una FAQ esistente

POST /faqs/resolve-task

Risolve un task di lacuna informativa collegandolo a una FAQ già esistente (invece di scriverne una nuova), invia la risposta di tale FAQ al contatto che ha generato la lacuna e contrassegna il task come completato. Utilizza questa funzione dopo che Trova FAQ simili a un task ha individuato una FAQ esistente che copre già la domanda.

Come l’endpoint precedente, questo risponde sempre 200: controlla success nel corpo della risposta.

Campi della richiesta

Campo Obbligatorio Descrizione
taskId Il task faq_update da risolvere.
faqId La FAQ esistente da collegare e inviare come risposta.

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()

Risposta

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

follow_up_status indica cosa è successo al follow-up del contatto: published (inviato immediatamente), queued (l’IA stava già rispondendo a quel contatto, quindi verrà inviato in seguito), skipped_no_contact (il task non ha un contatto collegato) o skipped_no_campaign (nessuna campagna attraverso cui inviarlo).


FAQ errori API

Gli endpoint delle FAQ restituiscono il formato di errore standard:

{
  "success": false,
  "error": "FAQ not found"
}
Stato Quando si verifica su un endpoint FAQ
400 Un campo obbligatorio manca o non è valido (ad esempio un question vuoto, un campaign_id mancante o più di 500 elementi in una richiesta massiva).
404 La FAQ o la campagna non è stata trovata: o non esiste o appartiene a un altro account.
409 POST /faqs/dedupe è stato chiamato mentre un processo di deduplicazione è già queued/processing, oppure POST /faqs/dedupe/dismiss è stato chiamato mentre il processo non è ancora terminato.

I codici condivisi che ogni endpoint può restituire — 401, 403 (il tuo piano non include l’accesso all’API), 429 (limite di frequenza) e 500 — sono elencati con indicazioni sui tentativi in Errori e Paginazione.

POST /faqs/similar-for-task e POST /faqs/resolve-task sono le due eccezioni in questa pagina: rispondono 200 anche per un errore previsto (task sconosciuto, tipo di task errato) e inseriscono lo stato reale nel campo error_code del corpo della risposta: vedi i singoli endpoint sopra.


Correlati

  • API Campagne — le campagne a cui sono collegate le tue FAQ.
  • API Knowledge Base — importa automaticamente siti web e documenti nelle FAQ e raggruppa le FAQ in gruppi di conoscenza riutilizzabili.
  • Accesso API — genera la tua chiave API.
  • Autenticazione — tutti i modi per trasmettere la tua chiave.