Adaptateurs de plateforme
Responsabilité
Chaque plateforme (Telegram, Discord, Slack, Signal, WhatsApp, WeChat, QQ…) a un adaptateur qui traduit les événements natifs de la plateforme en un MessageEvent unifié, et les actions d'envoi unifiées en appels d'API de la plateforme. L'adaptateur hérite de BasePlatformAdapter et implémente un petit nombre de méthodes abstraites. Les adaptateurs peuvent venir de gateway/platforms/ intégré ou du plugin plugins/platforms/, tous enregistrés via PlatformRegistry.
Fichiers clés
class BasePlatformAdapter(ABC):2317— classe de base abstraite de l'adaptateurméthodes abstraites send / send_draft:2983-3015— interface d'envoi que les sous-classes doivent implémenterMessageType / ProcessingOutcome / MessageEvent:1737-1759— modèle d'événement unifiéCachedMedia:1638-1737— cache média (évite les uploads répétés)SendResult / EphemeralReply:1898-2068— résultat d'envoi et réponse éphémèrehelpers d'envoi communs:3173-3326—send_slash_confirm/send_clarify/send_typing/send_multiple_imagesrépertoire gateway/platforms/— signal / whatsapp_cloud / weixin / bluebubbles / yuanbao / qqbot…répertoire plugins/platforms/— Telegram / Discord / Slack (sous forme de plugins)ADDING_A_PLATFORM.md— guide d'ajout de plateformePlatformRegistry:162— registre (register / register_deferred / unregister)
Flux de données
- Au démarrage,
GatewayRunner(gateway/run.py:3029) lance l'adaptateur via_start_one_profile_adapter:9389. - L'adaptateur est requêté par nom dans
PlatformRegistry(gateway/platform_registry.py:162), avec support du chargement différé (placeholder à peu de frais, véritable import seulement à l'usage). - L'adaptateur écoute les événements de la plateforme, les traduit en
MessageEvent:1759et les confie à_handle_message:9947. - L'agent produit une sortie en streaming ; l'adaptateur utilise l'interface unifiée (
send:3008/send_draft) pour livrer le contenu à la plateforme ; les médias passent parCachedMedia:1638pour le cache. - Les différences entre plateformes (longueur de message, texte riche, limite d'images) sont entièrement absorbées par l'adaptateur ; le cœur de la passerelle n'en sait rien.
Résumé
Adaptateur = traducteur entre « dialecte plateforme ↔ événement unifié ». Ajouter une plateforme consiste à hériter de BasePlatformAdapter, implémenter quelques méthodes abstraites et s'enregistrer ; voir gateway/platforms/ADDING_A_PLATFORM.md. Telegram/Discord/Slack passent par le chemin plugin, au même titre que les adaptateurs intégrés.