TL;DR
The "Rich text block" is your friend.
import os
from slack_sdk import WebhookClient
if __name__ == "__main__":
api_client = WebhookClient(url=os.environ["SLACK_WEBHOOK_URL"])
unordered_list_elements: list[dict] = []
for fragment in ["foo", "bar", "baz"]:
unordered_list_elements.append(
{
"type": "rich_text_section",
"elements": [{"type": "text", "text": fragment}],
}
)
api_client.send(
blocks=[
{
"type": "rich_text",
"elements": [
{
"type": "rich_text_list",
"style": "bullet",
"indent": 0,
"elements": unordered_list_elements,
}
],
}
]
)
The official Markdown example does not work
The official document provides a Markdown example:
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "• Detective Chimp\n• Bouncing Boy\n• Aqualad"
}
}
]
}
But the example does not work properly.
There seems to be a bug in Markdown processing. So we need to use the other way to post a bulleted list via Webhook URL.
"Rich text block"
Rich text block is one of workarounds to the bug.
The basic format of the block is:
[
{
"type": "rich_text",
"elements": [
{
"type": "rich_text_list",
"style": "bullet",
"elements": [rich_text_sections],
}
],
}
]
Note that the type of outermost block must always be set to "rich_text"
. And a block of bulleted list need to be declared as the inner block.
Finally, define elements of the bulleted list as a list of rich_text_section
. The format of rich_text_section
is following:
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": value_of_elements
}
]
}
Now it is able to post to your Slack workspace using slack_sdk.WebhookClient.send
method!
Top comments (0)