API e MCP

API delle conversazioni

Una conversazione è un’intervista tra l’IA e un rispondente. L’API restituisce chi è il rispondente, il riepilogo IA con una risposta per ogni domanda e la trascrizione completa. Per autenticazione, paginazione ed errori, vedi la Panoramica dell’API.

Elenca le conversazioni#

HTTP
GET /api/v1/projects/{project_id}/conversations

Restituisce le conversazioni di un progetto, dalla più recente, ognuna con il suo riepilogo IA. Le trascrizioni non sono incluse nell’elenco. Recuperale con Ottieni una conversazione.

Parametri della query#

ParametroDescrizione
statusUno o più tra invited, opened, started, completed, cancelled, separati da virgole. Senza questo parametro vengono restituiti tutti gli stati tranne invited.
sentimentUno o più tra positive, negative, neutral, mixed, separati da virgole
created_afterSolo le conversazioni create a partire da questa data e ora ISO 8601, ad esempio 2026-05-01T00:00:00Z
created_beforeSolo le conversazioni create fino a questa data e ora
searchTesto da cercare nei riepiloghi, nelle citazioni e nei dati del rispondente. Fino a 200 caratteri.
limitDa 1 a 100. Predefinito 25.
cursorIl next_cursor della pagina precedente

Solo le conversazioni completate hanno un riepilogo completo, quindi la maggior parte delle integrazioni invia status=completed.

Esempio#

curl -G "https://diaform.io/api/v1/projects/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d/conversations" \
  -H "Authorization: Bearer $DIAFORM_API_KEY" \
  --data-urlencode "status=completed" \
  --data-urlencode "sentiment=negative,mixed" \
  --data-urlencode "created_after=2026-05-01T00:00:00Z" \
  --data-urlencode "limit=50"

Risposta#

JSON
{
  "data": [
    {
      "id": "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
      "project_id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
      "status": "completed",
      "created_at": "2026-05-07T12:00:00.123456+00:00",
      "started_at": "2026-05-07T12:01:11.482913+00:00",
      "ended_at": "2026-05-07T12:15:41.204+00:00",
      "duration_seconds": 870,
      "country": "DE",
      "overall_sentiment": "mixed",
      "respondent": {
        "label": "alex@acme.com",
        "email": null,
        "identities": [
          { "type": "email", "value": "alex@acme.com", "source": "owner" },
          { "type": "name", "value": "Alex", "source": "ai" }
        ]
      },
      "metadata": {},
      "invite": {
        "id": "3a4f49c7-b8f4-4c44-8f74-fd8e4277c3e4",
        "status": "completed",
        "created_at": "2026-05-07T12:00:00.123456+00:00",
        "opened_at": "2026-05-07T12:01:11.482913+00:00",
        "completed_at": "2026-05-07T12:15:41.204+00:00"
      },
      "summary": {
        "overall_sentiment": "mixed",
        "answers": [
          {
            "question_id": "V1StGXR8_Z5jdHi6B-myT",
            "question": "How did your first week with the product go?",
            "summary": "Setup was quick, but inviting teammates was confusing.",
            "sentiment": "mixed",
            "confidence": "high",
            "quotes": ["I had no idea where the invite button was"]
          }
        ],
        "urgent_issues": [],
        "additional_insights": "Would pay more for a Slack integration."
      }
    }
  ],
  "has_more": true,
  "next_cursor": "WyIyMDI2LTA1LTA3VDEyOjAwOjAwLjEyMzQ1NiswMDowMCIsIjBmOGQ0M2EyIl0"
}

Campi della conversazione#

CampoTipoDescrizione
idstringID della conversazione, lo stesso che i webhook inviano come conversation_id
project_idstringIl progetto a cui appartiene
statusstringinvited, opened, started, completed o cancelled. La dashboard mostra started come In corso.
created_atstringQuando è stata creata la conversazione. Per gli inviti, è il momento in cui è stato creato l’invito.
started_atstring o nullQuando è iniziata l’intervista
ended_atstring o nullQuando la conversazione è stata completata o annullata
duration_secondsnumber o nullTempo dall’inizio alla fine
countrystring o nullIl codice del paese del rispondente, se è noto
overall_sentimentstring o nullpositive, negative, neutral o mixed. Uguale a summary.overall_sentiment.
respondent.labelstring o nullIl nome migliore per il rispondente: la sua email, poi il suo nome, poi un’altra identità
respondent.emailstring o nullCampo legacy, null per le nuove conversazioni. Leggi le email da respondent.identities.
respondent.identitiesarrayTutto ciò che si sa del rispondente. source è owner (l’hai fornito tu), ai (estratto dai suoi messaggi) o system (aggiunto da Diaform).
metadataobjectVuoto per gli inviti e i link diretti. Per le conversazioni incorporate contiene i dettagli dell’embed, come "embed": true ed embed_parent_origin.
inviteobject o nullI dettagli dell’invito quando la conversazione arriva da un invito a un rispondente, altrimenti null
summaryobject o nullIl riepilogo IA. null finché la conversazione non finisce e il riepilogo non è pronto.
CampoTipoDescrizione
overall_sentimentstringpositive, negative, neutral o mixed
answersarrayUna voce per ogni domanda posta al rispondente
answers[].question_idstringL’ID della domanda nel progetto
answers[].questionstringLa domanda così com’è stata posta
answers[].summarystringBreve riepilogo della risposta
answers[].sentimentstringpositive, negative, neutral o mixed
answers[].confidencestringhigh, medium o low: quanto è completa la risposta alla domanda
answers[].quotesarrayCitazioni rilevanti, con le parole del rispondente. Spesso vuoto.
urgent_issuesarrayProblemi critici segnalati dal rispondente, come brevi stringhe
additional_insightsstring o nullFeedback utile che non rientrava in nessuna domanda

Ottieni una conversazione#

HTTP
GET /api/v1/conversations/{conversation_id}

Restituisce una conversazione con tutti i campi dell’elenco, più la trascrizione in messages.

Esempio#

curl "https://diaform.io/api/v1/conversations/0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee" \
  -H "Authorization: Bearer $DIAFORM_API_KEY"

Risposta#

I campi in comune con l’elenco qui sono abbreviati.

JSON
{
  "id": "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
  "project_id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
  "status": "completed",
  "overall_sentiment": "mixed",
  "summary": {},
  "messages": [
    {
      "role": "interviewer",
      "text": "Hi! Thanks for taking the time. How did your first week with the product go?"
    },
    {
      "role": "respondent",
      "text": "Setup was fast. But I had no idea where the invite button was."
    },
    {
      "role": "interviewer",
      "text": "Where did you expect to find it?"
    }
  ]
}
CampoTipoDescrizione
messagesarrayLa trascrizione, in ordine. Vuoto quando il rispondente non ha mai risposto.
messages[].rolestringinterviewer (l’IA) o respondent
messages[].textstringCiò che è stato detto. Le risposte a voce compaiono come trascrizione, e una scelta o una valutazione come testo, ad esempio Selected answers: Pro.