slack

slack

slack.

automatisation slack via bot token. envoi de messages, lecture d'historique, liste des channels, réactions, dm, recherche d'utilisateurs.

ajouter à otoauth : bot tokenprefix : slack_*

setup & usage

⚠ il te faut une app Slack installée sur ton workspace

oto n'a pas encore d'app Slack publiée (« connecter en un clic ») : tu crées ta app dans ton workspace et tu colles ses tokens ici. Une manœuvre unique par workspace, ~5 minutes.

  • bot token (xoxb-) : lire les canaux, poster sous l'identité de l'app. C'est le token nominal.
  • user token (xoxp-) : poster en ton nom, et chercher (search:read n'existe qu'en user token). Optionnel.
  • l'un des deux suffit. Avec les deux, oto lit avec le bot et te fait choisir qui écrit à chaque envoi : author="me" (en ton nom) ou author="app" (sous le nom de l'app) — sans précision, l'envoi est refusé plutôt que parti sous le mauvais nom. La réponse dit qui a écrit et dans quel canal, et si ce canal est partagé avec l'extérieur.
  • à défaut, un admin peut te grant la clé plateforme de ton org
  • ⚙ créer l'app en collant un manifeste (le plus court)

    1. va sur api.slack.com/apps → Create New App → choisis From a manifest (pas « AI agent » ni « Starter app » : ce sont des gabarits d'app conversationnelle, sans rapport)

    2. choisis le workspace. L'éditeur qui s'ouvre est déjà rempli d'un exemple (display_information: name: Demo App) : sélectionne tout et remplace-le — coller par-dessus sans vider soude les deux manifestes et Slack refuse (« Nested mappings are not allowed in compact mappings »). Le manifeste à mettre à la place, qui déclare déjà tous les scopes dont les outils oto ont besoin :

    ```yaml

    display_information:

    name: Oto

    description: Lit et écrit dans Slack pour votre agent Oto

    features:

    bot_user:

    display_name: Oto

    always_online: false

    oauth_config:

    scopes:

    bot:

    - channels:read

    - channels:history

    - channels:join

    - groups:read

    - groups:history

    - im:read

    - im:history

    - im:write

    - mpim:read

    - mpim:history

    - users:read

    - users:read.email

    - chat:write

    - reactions:write

    - files:read

    user:

    - search:read

    - chat:write

    settings:

    org_deploy_enabled: false

    socket_mode_enabled: false

    token_rotation_enabled: false

    ```

    3. Create, puis Install to Workspace et autorise

    4. dans OAuth & Permissions, copie le Bot User OAuth Token (xoxb-) et, si tu veux poster en ton nom, le User OAuth Token (xoxp-)

    5. colle-les ici — rien d'autre à configurer

    *(sans manifeste : Blank app, puis déclare les mêmes scopes à la main dans OAuth & Permissions avant d'installer. Le manifeste évite exactement cette étape.)*

    ⚠️ un scope ne remplace pas l'appartenance au canal. sans appartenance, Slack répond not_in_channel — ce qui ressemble à tort à un problème de token. deux cas, et un seul est automatisable :

  • canal public : slack_join_channel fait entrer l'app toute seule (c'est à quoi sert le scope channels:join du manifeste ci-dessus)
  • canal privé : aucune API Slack ne permet de s'y inviter. un humain déjà membre doit taper /invite @Oto dans le canal — oto ne peut pas le faire à sa place, et le dit au lieu de laisser croire à une panne
  • référence Slack : créer une app depuis un manifeste · installer avec oauth v2

    ⚙ un second workspace, une seconde installation

    un token Slack est émis par installation : deux workspaces = deux jeux de tokens indépendants. Refais l'installation dans le second workspace (le même manifeste), puis pose ses tokens comme un second workspace du connecteur (section « plusieurs workspaces »).

    ▸ ce que tu peux faire

    envoie et lis des messages slack depuis claude — en ton nom ou sous celui de l'app, selon les tokens posés.

  • « envoie un message dans #general » → slack_post_message
  • « dm jean par email » → slack_find_user_by_email puis slack_open_dm puis slack_post_message
  • « lis les derniers messages de ce canal » → slack_read_history (messages de premier niveau ; oldest/latest pour ne lire qu'une fenêtre)
  • « qu'est-ce qui s'est dit dans ce fil ? » → slack_read_thread — les réponses d'un fil, que slack_read_history ne rend pas (il n'en montre que le compteur)
  • « fais entrer oto dans #canal » → slack_join_channel (canaux publics uniquement)
  • « réagis 👍 à ce message » → slack_add_reaction
  • ⚙ plusieurs workspaces

    ce connecteur accepte plusieurs workspaces : chaque credential posé devient un compte nommé (un nom par workspace), à ton niveau, à celui de ton équipe ou de ton org.

  • le premier n'a pas besoin de nom ; à partir du deuxième, chacun porte le sien (le premier prend alors le nom « principal », renommable)
  • sans précision, l'agent prend le seul workspace posé, sinon celui marqué par défaut ; sinon l'appel est refusé en nommant les workspaces disponibles — jamais un choix au hasard
  • viser un workspace pour un appel : _account="<nom>" sur l'outil ; les lister : oto_identity(op='list', connector='slack') (scope='org' ou scope='group' pour ceux de l'org ou de l'équipe)
  • fixer le défaut : oto_identity(op='set', connector='slack', identity_id='<nom>') ; renommer : op='rename' avec new_name
  • ⚠️ aucun outil ne parcourt les workspaces tout seul : un total sur plusieurs workspaces s'obtient en appelant chacun (_account) et en additionnant
  • outils

    chargement…

    utilisation

    claude code — installe le plugin oto — claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.
    claude.ai — branche mcp.oto.cx/mcp en connecteur custom (guide)
    cli — pipx install oto-cli puis oto slack …