Developer and self-hosted
Nextcloud Talk
Nextcloud Talk est un plugin de canal téléchargeable (@openclaw/nextcloud-talk) qui connecte OpenClaw à une instance Nextcloud auto-hébergée au moyen d’un bot Webhook Talk. Les messages directs, les salons, les réactions et les messages en Markdown sont pris en charge ; les médias sont envoyés sous forme d’URL.
Installation
openclaw plugins install @openclaw/nextcloud-talkUtilisez la spécification de paquet seule pour suivre l’étiquette de la version officielle actuelle. N’épinglez une version exacte que si vous avez besoin d’une installation reproductible.
Depuis une copie de travail locale (flux de développement) :
openclaw plugins install ./path/to/local/nextcloud-talk-pluginRedémarrez le Gateway après l’installation. Détails : Plugins
Configuration rapide (débutants)
-
Installez le plugin (ci-dessus).
-
Sur votre serveur Nextcloud, créez un bot :
bash ./occ talk:bot:install "OpenClaw" "<shared-secret>" "<webhook-url>" --feature webhook --feature response --feature reactionConservez
--feature response: sans cette option, les réponses sortantes échouent avec le code 401. Réparez un bot existant avec./occ talk:bot:state --feature webhook --feature response --feature reaction <botId> 1. -
Activez le bot dans les paramètres du salon cible.
-
Configurez OpenClaw :
- Configuration :
channels.nextcloud-talk.baseUrl+channels.nextcloud-talk.botSecret - Ou variable d’environnement :
NEXTCLOUD_TALK_BOT_SECRET(compte par défaut uniquement)
Configuration par CLI (
--url/--tokensont des alias des champs explicites ;nc-talketncfonctionnent comme alias de canal) :bash openclaw channels add --channel nextcloud-talk \ --url https://cloud.example.com \ --token "<shared-secret>"Champs explicites équivalents :
bash openclaw channels add --channel nextcloud-talk \ --base-url https://cloud.example.com \ --secret "<shared-secret>"Secret stocké dans un fichier :
bash openclaw channels add --channel nextcloud-talk \ --base-url https://cloud.example.com \ --secret-file /path/to/nextcloud-talk-secret - Configuration :
-
Redémarrez le Gateway (ou terminez la configuration).
Configuration minimale :
{ channels: { "nextcloud-talk": { enabled: true, baseUrl: "https://cloud.example.com", botSecret: "shared-secret", dmPolicy: "pairing", }, },}Remarques
- Les bots ne peuvent pas initier de messages directs. L’utilisateur doit d’abord envoyer un message au bot.
- L’URL du Webhook doit être accessible depuis le serveur Nextcloud ; définissez
webhookPublicUrllorsque le Gateway se trouve derrière un proxy. Les requêtes Webhook sont signées avec HMAC-SHA256 à l’aide du secret du bot ; les signatures non valides sont rejetées et soumises à une limitation de débit. - L’API du bot ne prend pas en charge l’envoi de médias ; les médias sortants sont ajoutés sous la forme d’une ligne
Attachment: <url>. - La charge utile du Webhook ne distingue pas les messages directs des salons ; définissez
apiUser+apiPasswordpour activer la détection du type de salon (mise en cache pendant environ 5 minutes). Sans ces paramètres, chaque conversation est traitée comme un salon. - Les requêtes sortantes passent par la protection SSRF. Pour un hôte Nextcloud situé sur un réseau privé/interne de confiance, activez explicitement
channels.nextcloud-talk.network.dangerouslyAllowPrivateNetwork: true. - Lorsque
apiUser/apiPasswordetwebhookPublicUrlsont définis,openclaw channels statussonde le bot et émet un avertissement si la fonctionnalitéresponseest absente.
Contrôle d’accès (messages directs)
- Valeur par défaut :
channels.nextcloud-talk.dmPolicy = "pairing". Les expéditeurs inconnus reçoivent un code d’association. - Approuvez-les avec :
openclaw pairing list nextcloud-talkopenclaw pairing approve nextcloud-talk <CODE>
- Messages directs publics :
channels.nextcloud-talk.dmPolicy="open"avecchannels.nextcloud-talk.allowFrom=["*"]. allowFromcorrespond uniquement aux identifiants utilisateur Nextcloud (en minuscules) ; les noms d’affichage sont ignorés.
Salons (groupes)
- Valeur par défaut :
channels.nextcloud-talk.groupPolicy = "allowlist"(mention requise). - Autorisez les salons avec
channels.nextcloud-talk.rooms, indexé par jeton de salon ;"*"définit une valeur générique par défaut :
{ channels: { "nextcloud-talk": { rooms: { "room-token": { requireMention: true }, }, }, },}- Clés propres à chaque salon :
requireMention(valeur par défaut : true),enabled(false désactive le salon),allowFrom(liste d’autorisation des expéditeurs du salon),tools(remplacements d’autorisation ou d’interdiction des outils),skills(limite les Skills chargés),systemPrompt. - Pour n’autoriser aucun salon, laissez la liste d’autorisation vide ou définissez
channels.nextcloud-talk.groupPolicy="disabled".
Fonctionnalités
| Fonctionnalité | État |
|---|---|
| Messages directs | Pris en charge |
| Salons | Pris en charge |
| Fils de discussion | Non pris en charge |
| Médias | URL uniquement |
| Réactions | Prises en charge |
| Commandes natives | Non prises en charge |
Référence de configuration (Nextcloud Talk)
Configuration complète : Configuration
Options du fournisseur :
channels.nextcloud-talk.enabled: active ou désactive le démarrage du canal.channels.nextcloud-talk.baseUrl: URL de l’instance Nextcloud.channels.nextcloud-talk.botSecret: secret partagé du bot (chaîne ou référence de secret).channels.nextcloud-talk.botSecretFile: chemin du fichier ordinaire contenant le secret. Les liens symboliques sont rejetés.channels.nextcloud-talk.apiUser: utilisateur de l’API pour la détection des salons (détection des messages directs) et la sonde d’état.channels.nextcloud-talk.apiPassword: mot de passe de l’API ou de l’application pour la détection des salons.channels.nextcloud-talk.apiPasswordFile: chemin du fichier contenant le mot de passe de l’API.channels.nextcloud-talk.webhookPort: port d’écoute du Webhook (valeur par défaut : 8788).channels.nextcloud-talk.webhookHost: hôte du Webhook (valeur par défaut : 0.0.0.0).channels.nextcloud-talk.webhookPath: chemin du Webhook (valeur par défaut : /nextcloud-talk-webhook).channels.nextcloud-talk.webhookPublicUrl: URL du Webhook accessible depuis l’extérieur.channels.nextcloud-talk.dmPolicy:pairing | allowlist | open | disabled(valeur par défaut : pairing).opennécessiteallowFrom=["*"].channels.nextcloud-talk.allowFrom: liste d’autorisation des messages directs (identifiants utilisateur).channels.nextcloud-talk.groupPolicy:allowlist | open | disabled(valeur par défaut : allowlist).channels.nextcloud-talk.groupAllowFrom: liste d’autorisation des expéditeurs des salons (identifiants utilisateur) ; utiliseallowFrompar défaut si cette option n’est pas définie.channels.nextcloud-talk.rooms: paramètres et liste d’autorisation propres à chaque salon (voir ci-dessus).- Les groupes statiques d’accès des expéditeurs peuvent être référencés depuis
allowFrometgroupAllowFromavecaccessGroup:<name>. channels.nextcloud-talk.historyLimit: limite de l’historique des groupes (0 le désactive).channels.nextcloud-talk.dmHistoryLimit: limite de l’historique des messages directs (0 le désactive).channels.nextcloud-talk.dms: remplacements propres à chaque conversation directe, indexés par identifiant utilisateur (historyLimit).channels.nextcloud-talk.textChunkLimit: taille des fragments de texte sortants en caractères (valeur par défaut : 4000).channels.nextcloud-talk.chunkMode:length(valeur par défaut) ounewlinepour découper le texte aux lignes vides (limites de paragraphes) avant le découpage selon la longueur.channels.nextcloud-talk.blockStreaming: désactive la diffusion par blocs pour ce canal.channels.nextcloud-talk.blockStreamingCoalesce: réglage de la fusion de la diffusion par blocs.channels.nextcloud-talk.responsePrefix: préfixe des réponses sortantes.channels.nextcloud-talk.markdown.tables: mode de rendu des tableaux Markdown (off | bullets | code | block).channels.nextcloud-talk.mediaMaxMb: taille maximale des médias entrants (Mo).channels.nextcloud-talk.network.dangerouslyAllowPrivateNetwork: autorise les hôtes Nextcloud privés/internes à contourner la protection SSRF.channels.nextcloud-talk.accounts.<id>: remplacements propres à chaque compte (mêmes clés) ;defaultAccountsélectionne le compte par défaut. Les variables d’environnementNEXTCLOUD_TALK_BOT_SECRET/NEXTCLOUD_TALK_API_PASSWORDs’appliquent uniquement au compte par défaut.
Pages connexes
- Vue d’ensemble des canaux — tous les canaux pris en charge
- Association — authentification des messages directs et processus d’association
- Groupes — comportement des discussions de groupe et obligation de mention
- Routage des canaux — routage des sessions pour les messages
- Sécurité — modèle d’accès et renforcement de la sécurité