Découverte
Sélecteurs et navigation dans les ressources — remplissez des listes déroulantes et laissez les utilisateurs choisir des ressources (boîtes mail, canaux, feuilles de calcul) depuis votre vendor.
Pour les vendors où les utilisateurs doivent parcourir et sélectionner des ressources. Fournit des sélecteurs pour les listes déroulantes et la découverte de ressources pour la sélection en mode système.
Définir la capacité
import { defineCapabilityDiscovery } from "@scrydon/sdk-authoring/integrations/define";
const discoveryCapability = defineCapabilityDiscovery({
selectors: [
{
key: "acme.channels",
label: "Channels",
async fetchOptions({ accessToken, query, context }) {
const response = await fetch("https://api.example.com/channels", {
headers: { Authorization: `Bearer ${accessToken}` },
});
const data = await response.json();
return data.channels.map((ch: any) => ({ id: ch.id, label: ch.name }));
},
// Optionnel — afficher le libellé pour des IDs déjà sélectionnés
async fetchDetail({ accessToken, detailId, context }) {
const response = await fetch(
`https://api.example.com/channels/${detailId}`,
{ headers: { Authorization: `Bearer ${accessToken}` } },
);
if (!response.ok) return null;
const ch = await response.json();
return { id: ch.id, label: ch.name };
},
},
],
resourceDiscovery: {
async discover(params) {
const response = await fetch(
`https://api.example.com/resources?q=${params.query ?? ""}`,
{ headers: { Authorization: `Bearer ${params.accessToken}` } },
);
const data = await response.json();
return data.resources.map((r: any) => ({
id: r.id,
name: r.name,
type: r.type,
}));
},
},
});Méthodes de sélecteur
| Méthode | Requise | Rôle |
|---|---|---|
fetchOptions | oui | Peupler la liste déroulante — retourne toutes les options correspondantes |
fetchDetail | non | Résoudre un élément par son ID — retourne une option ou null |
fetchOptions se déclenche lorsque l'utilisateur ouvre la liste déroulante — reçoit accessToken, query optionnel et un enregistrement context (ID d'identifiant, domaine, ID d'équipe).
fetchDetail se déclenche lorsque l'interface doit afficher un libellé pour une valeur déjà enregistrée (ex. « Chat de l'équipe Marketing » au lieu d'un ID brut sur le canevas). Sans cette méthode, l'interface affiche l'ID brut.
Implémentez fetchDetail lorsque votre vendor prend en charge les recherches efficaces par élément unique — la plupart des API REST le font (GET /channels/{id}).
Interface
interface SelectorProviderConfig {
key: string;
label: string;
fetchOptions(params: {
accessToken: string;
query?: string;
context?: Record<string, string>;
}): Promise<Array<{ id: string; label: string; icon?: string }>>;
fetchDetail?(params: {
accessToken: string;
detailId: string;
context?: Record<string, string>;
}): Promise<{ id: string; label: string; icon?: string } | null>;
}