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 you 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 } ] }
If you want to mention someone, set value of "type"
"user"
instead of "text"
such like:
{ "type": "rich_text_section", "elements": [ { "type": "user", "user_id": target_user_id, } ], }
Similarly, for email address, set "type"
"link"
like following:
{ "type": "rich_text_section", "elements": [ { "type": "link", "url": f"mailto:{mail_address}", "text": mail_address, } ], }
Now it is able to post to your Slack workspace using slack_sdk.WebhookClient.send
method!
Top comments (0)