slack
slack.
automatisation slack via bot token. envoi de messages, lecture d'historique, liste des channels, réactions, dm, recherche d'utilisateurs.
setup & usage
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.
xoxb-) : lire les canaux, poster sous l'identité de l'app. C'est le token nominal.xoxp-) : poster en ton nom, et chercher (search:read n'existe qu'en user token). Optionnel.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.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 :
slack_join_channel fait entrer l'app toute seule (c'est à quoi sert le scope channels:join du manifeste ci-dessus)/invite @Oto dans le canal — oto ne peut pas le faire à sa place, et le dit au lieu de laisser croire à une panneréférence Slack : créer une app depuis un manifeste · installer avec oauth v2
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 »).
envoie et lis des messages slack depuis claude — en ton nom ou sous celui de l'app, selon les tokens posés.
slack_post_messageslack_find_user_by_email puis slack_open_dm puis slack_post_messageslack_read_history (messages de premier niveau ; oldest/latest pour ne lire qu'une fenêtre)slack_read_thread — les réponses d'un fil, que slack_read_history ne rend pas (il n'en montre que le compteur)slack_join_channel (canaux publics uniquement)slack_add_reactionce 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.
_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)oto_identity(op='set', connector='slack', identity_id='<nom>') ; renommer : op='rename' avec new_name_account) et en additionnantoutils
utilisation
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.pipx install oto-cli puis oto slack …