Aller au contenu principal

ChannelProvider

ChannelProvider est l’interface que les intégrations de plateformes implémentent pour connecter les Agents à une plateforme de messagerie. Un fournisseur gère l’ensemble du cycle de vie d’une intégration : provisionnement de l’application et OAuth, acheminement des webhooks et traitement des événements, création des Adapters et connexion aux Agents, ainsi que gestion des identifiants d’authentification.

Enregistrez les fournisseurs dans la propriété channels du constructeur Mastra, sous un ID de votre choix. Les routes de chaque fournisseur sont automatiquement fusionnées avec les routes d’API du serveur, et initialize() s’exécute au démarrage de Mastra.

src/mastra/index.ts
import { Mastra } from '@mastra/core/mastra'
import { SlackProvider } from '@mastra/slack'

export const mastra = new Mastra({
channels: {
slack: new SlackProvider({
refreshToken: process.env.SLACK_REFRESH_TOKEN!,
baseUrl: process.env.MASTRA_BASE_URL,
}),
},
})

La propriété baseUrl du fournisseur est l’URL publique à laquelle la plateforme envoie les webhooks et les événements. En production, il s’agit de l’URL de votre serveur Mastra déployé. Lors du développement local, la plateforme ne peut pas atteindre http://localhost:4111. Exécutez donc un tunnel, tel que cloudflared ou ngrok, et faites pointer baseUrl vers l’URL du tunnel, par exemple https://abc123.trycloudflare.com, afin que les événements atteignent votre processus de développement local.

SlackProvider est la première implémentation intégrée. Créez un fournisseur personnalisé en implémentant cette interface.

Propriétés
Lien direct vers Propriétés

id:

string
Identifiant unique de ce type de Channel, par exemple 'slack' ou 'discord'. Utilisé comme clé pour acheminer les événements et rechercher le fournisseur dans Mastra.

Méthodes
Lien direct vers Méthodes

getRoutes:

() => ApiRoute[]
Renvoie les routes d’API de ce Channel (OAuth, webhooks et événements). Elles sont automatiquement fusionnées avec les apiRoutes du serveur.

initialize?:

() => Promise<void>
Appelée lors de l’initialisation de Mastra, après l’enregistrement de tous les Agents. Utilisez-la pour une configuration asynchrone, telle que la restauration des installations actives. Ne provisionne pas de nouvelles applications.

configure?:

(credentials: Record<string, unknown> | null) => void | Promise<void>
Fournit ou efface les identifiants d’authentification de la plateforme au moment de l’exécution. Transmettez null pour effacer les identifiants et supprimer les tokens enregistrés.

getInfo?:

() => ChannelPlatformInfo
Renvoie les métadonnées de découverte destinées à l’interface de l’Editor : nom de la plateforme, état de la configuration et schéma des options de connexion.

connect?:

(agentId: string, options?: Record<string, unknown>) => Promise<ChannelConnectResult>
Connecte un Agent à la plateforme. Renvoie un résultat discriminé qui décrit le flux d’autorisation requis pour terminer la connexion.

disconnect?:

(agentId: string) => Promise<void>
Déconnecte un Agent de la plateforme. Supprime l’application de la plateforme et nettoie l’état enregistré.

listInstallations?:

() => Promise<ChannelInstallationInfo[]>
Répertorie les installations actives de cette plateforme. Renvoie uniquement des informations publiques, jamais de secrets.

Accéder à un fournisseur
Lien direct vers Accéder à un fournisseur

Accédez à un fournisseur enregistré au moyen de l’accesseur channels, sous l’ID utilisé lors de son enregistrement. Le type de l’accesseur est dérivé de la configuration du constructeur ; mastra.channels.slack est donc le fournisseur concret avec l’ensemble de ses méthodes.

await mastra.channels.slack.configure({ refreshToken })

Lorsque la clé n’est connue qu’au moment de l’exécution, recherchez plutôt le fournisseur à partir de son ID sous forme de chaîne. getChannelProvider accepte le type concret comme paramètre générique, et getChannelProviders renvoie tous les fournisseurs enregistrés, indexés par ID.

import type { SlackProvider } from '@mastra/slack'

const slack = mastra.getChannelProvider<SlackProvider>('slack')
const all = mastra.getChannelProviders()