slackapi / slackapi/python-slack-sdk

`slack_file` image blocks appended with `chat.appendStream` render as missing images inline

Offen
#1,961 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

needs info server-side-issue
Vorherrschende Sprache
Python
Sterne
4k
Forks
857
Ø Merge
22 Std. 21 Min.
Gemergte PRs (30 T.)
16

Beschreibung

Description

When an image block referencing a Slack-hosted file is appended to a streaming message using chat.appendStream, Slack initially renders a missing-image placeholder.

Clicking the missing image opens and displays the correct image, which indicates that:

  • The file ID is valid.
  • The upload completed successfully.
  • Slack generated the image thumbnail.
  • The original image remains accessible.

The same streamed message's DOM contains a valid Slack thumbnail URL, but Slack replaces the inline background image with an unable-to-load-error asset.

This may be a server-side file-sharing/association issue specific to blocks appended through the streaming APIs.

Reproducible in:
The Slack SDK version

3.43.0

Bot scopes:

  • chat:write
  • files:read
  • files:write
Python runtime version

3.13.7

OS info

ProductName: macOS
ProductVersion: 26.6.2
BuildVersion: 25G83

Steps to reproduce:

(Share the commands to run, source code, and project settings (e.g., pyproject.toml))

  1. Upload a PNG to Slack without posting a separate file message:
upload_response = await client.files_upload_v2(
    content=png_bytes,
    filename="sample.png",
)

file_id = upload_response["file"]["id"]
  1. Wait until files.info reports that the image and its thumbnail are ready:
file_info = await client.files_info(file=file_id)
file = file_info["file"]

assert file["mimetype"] == "image/png"
assert file["filetype"] == "png"
assert file["thumb_360"]
assert file["thumb_360_w"]
assert file["thumb_360_h"]
  1. Start a streaming message:
response = await client.chat_startStream(
    channel=channel_id,
    thread_ts=thread_ts,
)

stream_ts = response["ts"]
  1. Append an image block using the Slack file ID:
await client.chat_appendStream(
    channel=channel_id,
    ts=stream_ts,
    chunks=[
        {
            "type": "blocks",
            "blocks": [
                {
                    "type": "image",
                    "slack_file": {
                        "id": file_id,
                    },
                    "alt_text": "Sample Image",
                }
            ],
        }
    ],
)
  1. Stop the stream:
await client.chat_stopStream(
    channel=channel_id,
    ts=stream_ts,
)
Expected result:

The Slack-hosted image should render inline in the completed streaming message.

Actual result:

Slack renders a missing-image placeholder.
Clicking the placeholder opens and displays the correct image.
Inspecting the rendered HTML shows that Slack resolved the file to a generated thumbnail URL:

<a
  class="c-link c-message_attachment__image"
  href="https://files.slack.com/files-tmb/.../chart_480.png"
  style="
    background-image:
      url('https://a.slack-edge.com/.../unable-to-load-error-....png');
  "
>
  <span role="img" aria-label="missing image"></span>
</a>
Image

The href points to the generated Slack thumbnail, while the inline background is replaced with Slack's unable-to-load-error image.

Requirements

For general questions/issues about Slack API platform or its server-side, could you submit questions at https://my.slack.com/help/requests/new instead. 🙇

Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die Sequenz mit files_upload_v2, files_info, chat_startStream, chat_appendStream und chat_stopStream unter Verwendung der aufgeführten Versionen zu reproduzieren. Vergleiche die SDK-Anfrage-Payload mit dem Verhalten der Streaming-API von Slack und stelle fest, ob der Fehler im SDK oder serverseitig liegt. Als erledigt gilt die Aufgabe, wenn die Ursache dokumentiert und ein fokussierter Regressionstest hinzugefügt wurde, falls eine SDK-seitige Änderung identifiziert wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Aktiv
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.