Aller au contenu

Demander à la doc

Les réponses viennent uniquement de cette documentation, sources à l’appui. Pour les sujets propres à votre compte, la doc vous oriente vers le bon interlocuteur.

Que cherchez-vous ?

Vous discutez avec un assistant IA. Il peut se tromper, pensez à vérifier les informations importantes.

Composants Vue

@askdialog/dialog-vue fournit des composants prêts à l’emploi par-dessus @askdialog/dialog-sdk. Utilisez-le quand vous voulez une UI rapide et thémée dans une app Vue 3 sans la construire de zéro.

Requiert Vue 3.

Fenêtre de terminal
npm install @askdialog/dialog-sdk @askdialog/dialog-vue

Importez la feuille de style une fois à l’entrée de votre app :

import '@askdialog/dialog-vue/style.css'

Instanciez le SDK une fois (typiquement dans un composant top-level ou un composable), puis passez-le à chaque composant.

<script setup lang="ts">
import { Dialog, type SimplifiedProduct } from '@askdialog/dialog-sdk'
const client = new Dialog({
apiKey: 'YOUR_PUBLIC_API_KEY',
locale: 'fr',
currency: 'EUR',
callbacks: {
addToCart: async ({ productId, quantity, variantId }) => {
// Appelez votre API panier, refresh votre UI
},
getProduct: async (productId, variantId): Promise<SimplifiedProduct> => {
// Renvoyez votre produit au format SimplifiedProduct
},
},
})
</script>

Voir la Référence SDK pour toutes les options du constructor.

Le composant principal. Posez-le sur une page produit pour render les suggestions de questions générées par l’IA et le point d’entrée vers l’assistant.

<script setup lang="ts">
import { DialogProductBlock } from '@askdialog/dialog-vue'
defineProps<{ product: { id: string; title: string; currentVariantId?: string } }>()
</script>
<template>
<DialogProductBlock
:client="client"
:product-id="product.id"
:product-title="product.title"
:selected-variant-id="product.currentVariantId"
/>
</template>
Prop Type Requis Défaut Description
client Dialog Oui - Instance SDK depuis new Dialog(...).
productId string Oui - L’ID du produit affiché. Doit matcher l’ID dans votre catalogue.
productTitle string Oui - Nom affiché du produit.
selectedVariantId string Non - La variante actuellement sélectionnée. Passez-la chaque fois que l’utilisateur change de variante pour que l’assistant ait le contexte.
enableInput boolean Non true Affiche le champ de saisie sous les suggestions. Mettez à false si vous voulez seulement les suggestions.

Un champ de saisie autonome pour poser une question libre. Utile comme point d’entrée sur les pages sans contexte produit unique (homepage, blog, collection).

<template>
<DialogInput
:client="client"
product-id="homepage"
product-title="Homepage"
/>
</template>
Prop Type Requis Description
client Dialog Oui Instance SDK.
productId string Oui Identifiant stable du contexte (ex. "homepage", "collection-ete").
productTitle string Oui Label lisible du contexte.

Des composants prêts à l’emploi qui alimentent la recherche produit de Dialog sur une storefront Vue custom ou headless : la même Search que derrière les blocs Shopify. Ils encapsulent le search controller du SDK (createSearchController) : debounce, annulation de requête, protection contre les réponses périmées, pagination et analytics d’attribution viennent tous du SDK, les composants ne font que render et router.

<script setup lang="ts">
import {
DialogSearchBar,
DialogSearchResults,
useDialogSearch,
} from '@askdialog/dialog-vue'
const { controller, state, theme } = useDialogSearch({
client,
language: 'fr',
currency: client.currency,
})
</script>
<template>
<DialogSearchBar :controller="controller" placeholder="Rechercher des produits..." />
<DialogSearchResults :controller="controller" :state="state" :theme="theme" />
</template>

Crée un search controller par instance du composable et le dispose au démontage. Renvoie { controller, state, theme } (theme est le thème du client, pour DialogSearchResults) : passez-les aux composants ci-dessous. state est une ShallowRef ; state.value.status vaut idle / loading / success / empty / error.

Option Type Requis Défaut Description
client Dialog Oui - Instance SDK.
language string Oui - Code langue ISO 639-1 en minuscules de la recherche, par exemple 'fr'.
currency string Oui - Devise ISO 4217 de la recherche, par exemple client.currency.
surface SearchSurface Non 'search_page' Où les résultats sont affichés, pour l’analytics.
navigate (url, hit) => void Non - Adaptateur de routeur appelé après l’attribution de la sélection (ex. (url) => router.push(url)). Omettez-le pour laisser les liens <a href> des cartes naviguer nativement.
debounceMs number Non 250 Debounce de frappe.
hitsPerPage number Non 12 Résultats par page.
sections SearchSection[] Non - Index supplémentaires interrogés avec les produits, ex. [{ index: 'collections', hitsPerPage: 5 }] remplit la colonne collections. Ne demandez qu’un index exposé par le catalogue : un index absent fait échouer toute la recherche.

Champ de recherche : la frappe lance une recherche debouncée, la soumission (Entrée) recherche immédiatement.

Prop Type Requis Défaut Description
controller SearchController Oui - Depuis useDialogSearch.
placeholder string Non 'Search products...' Texte du placeholder.
autoFocus boolean Non false Met le focus sur le champ au montage.
submitAriaLabel string Non 'Search' Libellé accessible du bouton de soumission.

Panneau de résultats flottant, portalé sur document.body et centré sur la barre (jusqu’à 1440px de large, remplissant le viewport) : placez-le juste après DialogSearchBar. Il reprend la mise en page de l’overlay de recherche Shopify : une colonne collections à gauche quand sections les demande, les produits à droite en liste ou en grille 3 colonnes, la correspondance de la requête mise en évidence dans chaque titre, et soit un bouton « Voir tous les résultats », soit la pagination. Sous 768px le panneau s’empile, collections en rail horizontal au-dessus des produits. Couleurs, arrondis et police suivent le thème SDK (palette sombre quand backgroundColor est sombre, angles droits ou arrondis selon ctaBorderType). Chaque carte renvoie vers la page produit et enregistre l’attribution de recherche (impressions, sélection au clic et au clic-milieu) automatiquement.

Prop Type Requis Description
controller SearchController Oui Depuis useDialogSearch.
state SearchControllerState Oui Depuis useDialogSearch.
locale string Non Locale BCP 47 pour les prix, compteurs et libellés (libellés anglais et format numérique du navigateur si omise).
theme Theme Non Le thème du client, tel que renvoyé par useDialogSearch ; stylise le panneau (palette, arrondis, police).
layout 'list' | 'grid' Non Disposition des produits.
seeAllHref (query: string) => string Non Lien du bouton « Voir tous les résultats » en pied de panneau ; omis, le panneau pagine à la place.

DialogSearchPagination est rendu par DialogSearchResults et est aussi exporté pour les layouts custom (mêmes props controller + state).

Un setup courant :

  • <DialogInput> sur la homepage comme point d’entrée discovery.
  • <DialogProductBlock> sur chaque PDP, entre la galerie et la description.
  • Un watcher sur le sélecteur de variante qui met à jour la prop selectedVariantId.

Les composants héritent du thème passé au constructor SDK. Mettez à jour les couleurs de marque, les polices, la forme des CTA, et les tailles de police spécifiques aux composants :

const client = new Dialog({
apiKey: 'YOUR_PUBLIC_API_KEY',
locale: 'fr',
currency: 'EUR',
theme: {
backgroundColor: '#ffffff',
primaryColor: '#000000',
ctaTextColor: '#ffffff',
ctaBorderType: 'rounded',
capitalizeCtas: false,
fontFamily: 'Inter, sans-serif',
title: { fontSize: '18px', color: '#1a1a1a' },
description: { fontSize: '14px', color: '#666666' },
content: { fontSize: '14px', color: '#333333' },
},
callbacks: { /* ... */ },
})