Référence API

Écrit par Stanislas

Dernière mise à jour Il y a 7 mois


Référence complète pour tous les types GraphQL, les requêtes, les mutations et les abonnements dans l'API Swiftask Public Bot. Utilisez-la comme guide de consultation lors de la construction de votre intégration.

Présentation

Ce document de référence répertorie tous les types GraphQL, types d'entrée, requêtes, mutations et abonnements disponibles dans l'API Swiftask. Chaque entrée comprend le schéma GraphQL, les descriptions des champs et des exemples d'utilisation courants. Utilisez ce guide en complément des exemples pratiques présentés dans d'autres guides.

L'API est organisée en trois catégories principales : les types de données (ce que l'API renvoie), les types d'entrée (ce que vous envoyez à l'API) et les opérations (requêtes, mutations et abonnements).


Types GraphQL

TodoChatMessage

Représente un seul message dans une session de chat.

Type GraphQL :

type TodoChatMessage {
  id: Int!
  message: String
  createdAt: DateTime!
  updatedAt: DateTime!
  sessionId: Int!
  sentBy: User!
  isBotReply: Boolean
  files: [File]
  parentMessageId: Int
}

Descriptions des champs :

Champ

Type

Description

id

Int

Identifiant unique du message

message

Chaîne

Contenu du texte du message

createdAt

Date

Horodatage de création du message

updatedAt

Date

Horodatage de la dernière mise à jour

sessionId

Int

ID de la session à laquelle appartient ce message

sentBy

Utilisateur

Utilisateur qui a envoyé le message (comprend l'ID, le prénom et le nom)

isBotReply

Booléen

S'il s'agit d'une réponse d'un bot (vrai) ou d'un message d'utilisateur (faux)

files

[Fichier]

Tableau des fichiers joints (le cas échéant)

parentMessageId

Int

ID du message parent (pour les réponses en fil de discussion)

Exemple d'utilisation :

const message = {
  id: 12345,
  message: 'What is your pricing?',
  createdAt: '2024-01-29T19:50:13.631Z',
  updatedAt: '2024-01-29T19:50:13.631Z',
  sessionId: 67890,
  sentBy: {
    id: 1,
    firstName: 'John',
    lastName: 'Doe',
  },
  isBotReply: false,
  files: null,
  parentMessageId: null,
};

TodoChatSession

Représente une session de chat contenant plusieurs messages.

Type GraphQL :

type TodoChatSession {
  id: Int!
  title: String
  createdAt: DateTime!
  updatedAt: DateTime!
  todoId: Int!
  defaultBotId: Int
  messages: [TodoChatMessage]
  uiLayout: String
}

Descriptions des champs :

Champ

Type

Description

id

Int

Identifiant unique de session

title

Chaîne

Titre de la session (nom convivial)

createdAt

Date

Horodatage de création de la session

updatedAt

Date

Horodatage de la dernière mise à jour

todoId

Int

ID associé à la tâche/au conteneur

defaultBotId

Int

Bot/agent par défaut pour cette session

messages

[TodoChatMessage]

Tableau de tous les messages de cette session

uiLayout

Chaîne

Préférence de disposition de l'interface utilisateur (« DEFAULT » ou « COMPACT »)

Exemple d'utilisation :

const session = {
  id: 67890,
  title: 'Customer Support',
  createdAt: '2024-01-29T19:50:13.631Z',
  updatedAt: '2024-01-29T20:15:45.123Z',
  todoId: 12345,
  defaultBotId: 789,
  messages: [
    { id: 1, message: 'Hello', isBotReply: false },
    { id: 2, message: 'Hi there!', isBotReply: true },
  ],
  uiLayout: 'DEFAULT',
};

ChatStreamMessage

Représente un fragment d'un message en streaming.

Type GraphQL :

type ChatStreamMessage {
  messageChunk: String!
  userId: Int!
  id: Int!
  botId: Int!
  botResponseMessageId: Int!
  isStoppable: Boolean!
}

Descriptions des champs :

Champ

Type

Description

messageChunk

Chaîne

Morceau de texte à ajouter au message en cours de rédaction

userId

Int

ID de l'utilisateur recevant le flux

id

Int

ID du message du flux

botId

Int

ID du bot générant la réponse

botResponseMessageId

Int

ID du message de réponse complet (une fois terminé)

isStoppable

Bool

Possibilité d'arrêter la génération

Exemple d'utilisation :

// Each subscription event looks like this:
const streamChunk = {
  messageChunk: 'Hello, ',
  userId: 1,
  id: 54321,
  botId: 789,
  botResponseMessageId: 12345,
  isStoppable: true,
};

// Next chunk:
const nextChunk = {
  messageChunk: 'how can I help?',
  userId: 1,
  id: 54322,
  botId: 789,
  botResponseMessageId: 12345,
  isStoppable: true,
};

AgentToolCall

Représente un événement d'appel d'outil d'agent.

Type GraphQL :

type AgentToolCall {
  tool: String!
  toolImage: String
  botId: Int!
  id: Int!
  status: String!
}

Descriptions des champs :

Champ

Type

Description

tool

Chaîne

Nom de l'outil utilisé (par exemple, « web_search », « calculator »)

toolImage

Chaîne

URL de l'icône ou de l'image de l'outil

botId

Int

ID du bot utilisant l'outil

id

Int

ID de l'événement d'appel de l'outil

status

Chaîne

Statut actuel : « START », « END » ou « ERROR »

Noms d'outils courants :

  • web_search — Recherche sur le Web

  • calculator — Calculs mathématiques

  • knowledge_base — Recherche dans une base de connaissances

  • api_call — Appels API externes

  • database_query — Requêtes de base de données

  • file_search — Recherche de fichiers

Exemple d'utilisation :

const toolCall = {
  tool: 'web_search',
  toolImage: 'https://...',
  botId: 789,
  id: 99999,
  status: 'START',
};

// Later:
const toolEnd = {
  tool: 'web_search',
  toolImage: 'https://...',
  botId: 789,
  id: 100000,
  status: 'END',
};

SyncBotResponse

Réponse à une requête synchrone d'un bot.

Type GraphQL :

type SyncBotResponse {
  text: String!
  botId: Int
  botSlug: String
  isBotError: Boolean
  sessionId: Int
  files: JSON
  sourceMetadatas: JSON
  sources: JSON
  responseJson: JSON
  jobId: String
}

Descriptions des champs :

Champ

Type

Description

text

Chaîne

Texte complet de la réponse

botId

Int

ID du bot qui répond

botSlug

Chaîne

Identifiant du bot qui répond

isBotError

Booléen

Indique si une erreur s'est produite pendant le traitement

sessionId

Int

ID de session où la réponse a été générée

files

JSON

Fichiers joints (le cas échéant)

sourceMetadatas

JSON

Métadonnées sur les sources utilisées

sources

JSON

Sources utilisées pour générer la réponse

responseJson

JSON

Données de réponse complètes au format JSON

jobId

Chaîne

ID de la tâche en arrière-plan (le cas échéant)

Exemple d'utilisation :

const response = {
  text: 'The capital of France is Paris.',
  botId: 789,
  botSlug: 'knowledge-bot',
  isBotError: false,
  sessionId: 67890,
  sources: [
    { title: 'Wikipedia', url: 'https://...' },
    { title: 'Britannica', url: 'https://...' },
  ],
  sourceMetadatas: { count: 2 },
  files: null,
  responseJson: { answer: 'Paris', confidence: 0.99 },
  jobId: 'job_123456',
};

Utilisateur

Représente un utilisateur dans le système.

Type GraphQL :

type User {
  id: Int!
  firstName: String
  lastName: String
  email: String
}

Descriptions des champs :

Champ

Type

Description

id

Int

Identifiant unique de l'utilisateur

firstName

Chaîne

Prénom de l'utilisateur

lastName

Chaîne

Nom de famille de l'utilisateur

email

Chaîne

Adresse e-mail de l'utilisateur

Types de saisie

NewMessageInput

Entrée pour l'envoi d'un nouveau message.

Type d'entrée GraphQL :

input NewMessageInput {
  message: String
  todoChatId: Int
  fileIds: [Int]
  mentionedUserId: Int
  mentionedUserIds: [Int]
  mentionedBotId: Int
  parentMessageId: Int
  botPromptId: Int
  sessionId: Int
  command: String
  extraConfig: JSON
  isForAiReply: Boolean
}

Descriptions des champs :

Champ

Type

Obligatoire

Description

message

Chaîne

Non

Texte du message à envoyer

sessionId

Int

Oui

ID de session (obligatoire)

isForAiReply

Booléen

Non

Si vrai, déclenche une réponse de l'IA

fileIds

[Int]

Non

Tableau d'identifiants de fichiers à joindre

mentionedUserId

Int

Non

Utilisateur unique à mentionner

mentionedUserIds

[Int]

Non

Plusieurs utilisateurs à mentionner

mentionedBotId

Int

Non

Bot à mentionner/invoquer

parentMessageId

Int

Non

ID du message parent (pour le threading)

botPromptId

Int

Non

Invite prédéfinie à utiliser

command

Chaîne

Non

Commande spéciale pour l'agent

extraConfig

JSON

Non

Configuration supplémentaire

todoChatId

Int

Non

(Obsolète) Utilisez plutôt sessionId

Exemple d'utilisation :

const messageInput = {
  message: 'What is the weather?',
  sessionId: 67890,
  isForAiReply: true,
};

const messageWithFiles = {
  message: 'Analyze these documents',
  sessionId: 67890,
  fileIds: [101, 102, 103],
  isForAiReply: true,
};

const threadedReply = {
  message: 'Can you elaborate?',
  sessionId: 67890,
  parentMessageId: 12345,
  isForAiReply: true,
};

TodoChatSessionInput

Entrée pour créer ou mettre à jour une session.

Type d'entrée GraphQL :

input TodoChatSessionInput {
  title: String
  todoChatId: Int
  todoId: Int
  createFromChatAsDataSourceId: Int
  defaultBotId: Int
  fromBotPromptId: Int
  toogleChatGptVersion: Boolean
  autoReplyLMM: Boolean
  chatCollectionId: Int
  uiLayout: String
}

Descriptions des champs :

Champ

Type

Obligatoire

Description

title

Chaîne

Non

Titre de la session (200 caractères maximum)

todoId

Int

Oui

Todo/ID du conteneur (obligatoire pour la création)

defaultBotId

Int

Non

Bot par défaut pour cette session

uiLayout

Chaîne

Non

Disposition de l'interface utilisateur (« PAR DÉFAUT » ou « COMPACT »)

createFromChatAsDataSourceId

Int

Non

Créer une session à partir de la source de données

fromBotPromptId

Int

Non

Initialiser à partir de l'invite

chatCollectionId

Int

Non

Associer à la collection

autoReplyLMM

Booléen

Non

Activer la réponse automatique

toogleChatGptVersion

Booléen

Non

(Obsolète) Basculer la version ChatGPT

todoChatId

Int

Non

(Obsolète) Utiliser todoId à la place

Exemple d'utilisation :

const basicSession = {
  title: 'Support Chat',
  todoId: 12345,
};

const sessionWithBot = {
  title: 'Sales Inquiry',
  todoId: 12345,
  defaultBotId: 789,
};

const compactSession = {
  title: 'Quick Chat',
  todoId: 12345,
  uiLayout: 'COMPACT',
};

BotCustomConfigInput

Entrée pour la configuration personnalisée du bot.

Type d'entrée GraphQL :

input BotCustomConfigInput {
  botId: Int!
  sessionId: Int
  model: String
  temperature: Float
}

Descriptions des champs :

Champ

Type

Obligatoire

Description

botId

Int

Oui

ID du bot (obligatoire)

sessionId

Int

Non

ID de session (si spécifique à la session)

model

Chaîne

Non

Nom du modèle LLM (par exemple, « gpt-4 », « claude-3 »)

temperature

Flottant

Non

Température (0-1, contrôle le caractère aléatoire)

Exemple d'utilisation :

const botConfig = {
  botId: 123,
  sessionId: 67890,
  model: 'gpt-4',
  temperature: 0.7,
};

Requêtes

getTodoChatSessions

Obtenir une liste paginée des sessions de chat.

Requête GraphQL :

query GetTodoChatSessions($todoId: Float!, $limit: Int, $offset: Int) {
  getTodoChatSessions(todoId: $todoId, limit: $limit, offset: $offset) {
    sessions {
      id
      title
      createdAt
      updatedAt
      defaultBotId
    }
    totalCount
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Par défaut

Description

todoId

Float

Oui

ID Todo pour récupérer les sessions

limit

Int

Non

20

Nombre de sessions par page

offset

Int

Non

0

Décalage de pagination

Renvoie : Objet avec un tableau d'sessionss et totalCount

Exemple :

const result = await client.query({
  query: gql`
    query GetTodoChatSessions($todoId: Float!, $limit: Int, $offset: Int) {
      getTodoChatSessions(todoId: $todoId, limit: $limit, offset: $offset) {
        sessions {
          id
          title
          createdAt
        }
        totalCount
      }
    }
  `,
  variables: { todoId: 12345, limit: 20, offset: 0 },
});

console.log(`Total sessions: ${result.data.getTodoChatSessions.totalCount}`);

getOneTodoChatSession

Obtenir les détails d'une session spécifique, y compris tous les messages.

Requête GraphQL :

query GetOneTodoChatSession($sessionId: Float!) {
  getOneTodoChatSession(sessionId: $sessionId) {
    id
    title
    createdAt
    updatedAt
    defaultBotId
    todoId
    messages {
      id
      message
      createdAt
      sentBy {
        id
        firstName
      }
      isBotReply
    }
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session à récupérer

Renvoie : Objet TodoChatSession complet avec les messages

getOrCreateUserStartTodoChatSession

Obtenir ou créer la session de démarrage par défaut pour un utilisateur.

Requête GraphQL :

query GetOrCreateUserStartTodoChatSession($botSlug: String) {
  getOrCreateUserStartTodoChatSession(botSlug: $botSlug) {
    id
    title
    defaultBotId
    todoId
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

botSlug

Chaîne

Non

Slug du bot (facultatif)

Renvoie : objet TodoChatSession (créé s'il n'existe pas)

getSearchTodoChatSessions

Recherche les sessions de chat par chaîne de requête.

Requête GraphQL :

query GetSearchTodoChatSessions($todoId: Float!, $searchQuery: String) {
  getSearchTodoChatSessions(todoId: $todoId, searchQuery: $searchQuery) {
    id
    title
    createdAt
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

todoId

Float

Oui

Todo ID à rechercher dans

searchQuery

Chaîne

Non

Terme de recherche

Renvoie : tableau d'objets TodoChatSession correspondants

getSpeechFromText

Obtenir l'URL audio pour la conversion texte-parole.

Requête GraphQL :

query GetSpeechFromText($messageId: Float!) {
  getSpeechFromText(messageId: $messageId)
}

Paramètres :

Paramètre

Type

Obligatoire

Description

messageId

Float

Oui

ID du message à convertir

Renvoie : chaîne URL audio

Mutations

sendNewMessage

Envoie un nouveau message et déclenche une réponse en streaming.

Mutation GraphQL :

mutation SendNewMessage($newMessageData: NewMessageInput!) {
  sendNewMessage(newMessageData: $newMessageData) {
    id
    message
    createdAt
    sessionId
    sentBy {
      id
      firstName
      lastName
    }
    isBotReply
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

newMessageData

NewMessageInput

Oui

Objet d'entrée de message

Renvoie : objet TodoChatMessage

Exemple :

const { data } = await client.mutate({
  mutation: gql`
    mutation SendNewMessage($newMessageData: NewMessageInput!) {
      sendNewMessage(newMessageData: $newMessageData) {
        id
        message
      }
    }
  `,
  variables: {
    newMessageData: {
      message: 'Hello!',
      sessionId: 67890,
      isForAiReply: true,
    },
  },
});

syncBotRequest

Envoie un message et obtient une réponse complète (non streaming).

Mutation GraphQL :

mutation SyncBotRequest($newMessageData: NewMessageInput!) {
  syncBotRequest(newMessageData: $newMessageData) {
    text
    botId
    botSlug
    isBotError
    sessionId
    files
    sourceMetadatas
    sources
    responseJson
    jobId
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

newMessageData

NewMessageInput

Oui

Objet d'entrée de message

Renvoie : objet SyncBotResponse

regenerateResponse

Régénère la réponse du bot pour un message.

Mutation GraphQL :

mutation RegenerateResponse($messageId: Float!) {
  regenerateResponse(messageId: $messageId) {
    id
    message
    createdAt
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

messageId

Float

Oui

ID du message à régénérer

Renvoie : objet TodoChatMessage (nouvelle réponse)

stopAIResponse

Arrête la génération de réponse IA en cours.

Mutation GraphQL :

mutation StopAIResponse($sessionId: Float!, $botId: Float!) {
  stopAIResponse(sessionId: $sessionId, botId: $botId)
}

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session

botId

Float

Oui

ID du bot

Renvoie : booléen (vrai si l'arrêt a réussi)

retryBotMessage

Réessayer d'envoyer un message qui a échoué.

Mutation GraphQL :

mutation RetryBotMessage($sessionId: Float!) {
  retryBotMessage(sessionId: $sessionId)
}

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session

Renvoie : booléen (vrai si la nouvelle tentative a réussi)

createTodoChatSession

Crée une nouvelle session de chat.

Mutation GraphQL :

mutation CreateTodoChatSession($data: TodoChatSessionInput!) {
  createTodoChatSession(data: $data) {
    id
    title
    createdAt
    defaultBotId
    todoId
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

data

TodoChatSessionInput

Oui

Objet d'entrée de session

Renvoie : objet TodoChatSession

updateTodoChatSession

Mettre à jour une session existante.

Mutation GraphQL :

mutation UpdateTodoChatSession($data: TodoChatSessionInput!, $id: Float!) {
  updateTodoChatSession(data: $data, id: $id) {
    id
    title
    updatedAt
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

data

TodoChatSessionInput

Oui

Données de session mises à jour

id

Float

Oui

ID de session à mettre à jour

Renvoie : objet TodoChatSession

deleteTodoChatSession

Supprimer une seule session.

Mutation GraphQL :

mutation DeleteTodoChatSession($id: Float!) {
  deleteTodoChatSession(id: $id) {
    id
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

id

Float

Oui

ID de session à supprimer

Renvoie : objet TodoChatSession

deleteManyTodoChatSession

Supprime plusieurs sessions en une seule opération.

Mutation GraphQL :

mutation DeleteManyTodoChatSession($ids: [Int!]!) {
  deleteManyTodoChatSession(ids: $ids)
}

Paramètres :

Paramètre

Type

Obligatoire

Description

ids

[Int]

Oui

Tableau des identifiants de session à supprimer

Renvoie : nombre de sessions supprimées

updateTodoChatSessionCustomBotConfig

Mettre à jour la configuration du bot pour une session.

Mutation GraphQL :

mutation UpdateCustomBotConfig($data: BotCustomConfigInput!) {
  updateTodoChatSessionCustomBotConfig(data: $data) {
    id
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

data

BotCustomConfigInput

Oui

Objet d'entrée de configuration du bot

Renvoie : Objet TodoChatSession

Abonnements

onMessageStream

S'abonner au flux de messages en temps réel.

Abonnement GraphQL :

subscription OnMessageStream($sessionId: Float!) {
  onMessageStream(sessionId: $sessionId) {
    messageChunk
    userId
    id
    botId
    botResponseMessageId
    isStoppable
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session à laquelle s'abonner

Émet : objets ChatStreamMessage

newMessage

S'abonner aux nouveaux messages complets.

Abonnement GraphQL :

subscription NewMessage($sessionId: Float!) {
  newMessage(sessionId: $sessionId) {
    id
    message
    createdAt
    sentBy {
      firstName
    }
    isBotReply
  }
} 

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session à laquelle s'abonner

Émet : objets TodoChatMessage

newIntermediateMessage

S'abonner aux messages intermédiaires (étapes de réflexion).

Abonnement GraphQL :

subscription NewIntermediateMessage($sessionId: Float!) {
  newIntermediateMessage(sessionId: $sessionId) {
    id
    message
    createdAt
    isBotReply
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session à laquelle s'abonner

Émet : objets TodoChatMessage

onAgentToolCall

S'abonner aux événements d'appel de l'outil agent.

Abonnement GraphQL :

subscription OnAgentToolCall($sessionId: Float!) {
  onAgentToolCall(sessionId: $sessionId) {
    tool
    toolImage
    botId
    id
    status
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session à laquelle s'abonner

Émet : objets AgentToolCall

userTyping

S'abonner aux événements de saisie de l'utilisateur.

Abonnement GraphQL :

subscription UserTyping($sessionId: Float!) {
  userTyping(sessionId: $sessionId) {
    id
    firstName
    lastName
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session à laquelle s'abonner

Émet : objets utilisateur

botAnalyzingDatasources

S'abonner aux événements de la source de données d'analyse du bot.

Abonnement GraphQL :

subscription BotAnalyzingDatasources($sessionId: Float!) {
  botAnalyzingDatasources(sessionId: $sessionId) {
    id
    firstName
  }
}

Paramètres :

Paramètre

Type

Obligatoire

Description

sessionId

Float

Oui

ID de session à laquelle s'abonner

Émet : objets utilisateur

Points de terminaison API

Points de terminaison REST

Point de terminaison

Méthode

Objectif

/public/widget-bot/:clientToken

GET

Authentification et configuration

URL de base : https://graphql.swiftask.ai

Points de terminaison GraphQL

Point de terminaison

Protocole

Objectif

/graphql

HTTP

Requêtes et mutations

/graphql

WebSocket

Abonnements

URL de base : https://graphql.swiftask.ai (HTTP) ou wss://graphql.swiftask.ai (WebSocket)

En-têtes requis

Toutes les requêtes GraphQL doivent inclure les en-têtes suivants :

En-tête

Valeur

Objectif

authorization

Bearer {accessToken}

Authentification

x-workspace-id

{workspaceId}

Routage de l'espace de travail

x-client

widget

Identification du client

Les connexions WebSocket utilisent l'connectionParamse au lieu des en-têtes :

connectionParams: {
  authorization: `Bearer ${accessToken}`,
  workspaceId: workspaceId,
}

Modèles courants

Pagination

Lorsque vous répertoriez les sessions, utilisez limit et offset pour la pagination :

// Get first 20 sessions
const page1 = await client.query({
  variables: { todoId, limit: 20, offset: 0 },
});

// Get next 20 sessions
const page2 = await client.query({
  variables: { todoId, limit: 20, offset: 20 },
});

// Get total count
const totalCount = page1.data.getTodoChatSessions.totalCount;
const totalPages = Math.ceil(totalCount / 20);Error handling

Toutes les opérations peuvent échouer. Traitez les erreurs de manière cohérente :

try {
  const { data } = await client.mutate({ mutation });
  return data;
} catch (error) {
  if (error.graphQLErrors?.length > 0) {
    console.error('GraphQL Error:', error.graphQLErrors[0].message);
  } else if (error.networkError) {
    console.error('Network Error:', error.networkError);
  } else {
    console.error('Unknown Error:', error);
  }
  throw error;
}

Gestion des valeurs nulles

Certains champs sont facultatifs. Vérifiez toujours s'ils sont nuls :

const message = data.sendNewMessage;
if (message.files) {
  // Process files
}

if (message.parentMessageId) {
  // This is a threaded reply
}