···8989- `message.im`
9090- `message.mpim`
91919292-Image attachments arrive through normal message events. The runtime reads Slack file objects from those events and downloads `url_private_download` or `url_private` with the bot token. Slack requires the token used for those URLs to have `files:read`.
9292+Image attachments arrive through normal message events. The runtime reads Slack file objects from those events and downloads `url_private_download` or `url_private` with the bot token. For Slack Connect placeholder files, it calls `files.info` first to load the real file metadata. Slack requires the token used for these file APIs and URLs to have `files:read`.
93939494After adding or changing any scope:
9595
+7
internal/channelruntime/slack/images.go
···3535 if maxBytes <= 0 {
3636 return "", fmt.Errorf("slack image max bytes must be positive")
3737 }
3838+ if slackFileNeedsInfo(file) {
3939+ resolved, err := api.fileInfo(ctx, file.ID)
4040+ if err != nil {
4141+ return "", err
4242+ }
4343+ file = resolved
4444+ }
3845 if file.Size > maxBytes {
3946 return "", fmt.Errorf("slack image too large: %d bytes > %d bytes", file.Size, maxBytes)
4047 }