Skip to content

Sending Messages

Handy APIs for sending Slack messages.

slack_message(to, *, messenger_name=None, header=None, template=None, context=None, message=None)

slack_message(
    to: str,
    *,
    messenger_name: str | None = None,
    header: MessageHeader | dict[str, Any] | None = None,
    message: str,
) -> MessageResponse | None
slack_message(
    to: str,
    *,
    messenger_name: str | None = None,
    header: MessageHeader | dict[str, Any] | None = None,
    template: str | None = None,
    context: dict[str, Any] | None = None,
) -> MessageResponse | None

Shortcut for sending a Slack message.

Parameters:

Name Type Description Default
to str

Recipient.

required
messenger_name str | None

Messenger name. If not set, default messenger is used.

None
header MessageHeader | dict[str, Any] | None

Slack message control header.

None
template str | None

Message template key. Cannot be used with message.

None
context dict[str, Any] | None

Context for rendering the template. Only used with template.

None
message str | None

Simple message text. Cannot be used with template.

None

Returns:

Type Description
MessageResponse | None

Sent message instance or None.

Source code in django_slack_tools/slack_messages/shortcuts.py
def slack_message(  # noqa: PLR0913
    to: str,
    *,
    messenger_name: str | None = None,
    header: MessageHeader | dict[str, Any] | None = None,
    template: str | None = None,
    context: dict[str, Any] | None = None,
    message: str | None = None,
) -> MessageResponse | None:
    """Shortcut for sending a Slack message.

    Args:
        to: Recipient.
        messenger_name: Messenger name. If not set, default messenger is used.
        header: Slack message control header.
        template: Message template key. Cannot be used with `message`.
        context: Context for rendering the template. Only used with `template`.
        message: Simple message text. Cannot be used with `template`.

    Returns:
        Sent message instance or `None`.
    """
    if (template and message) or (not template and not message):
        msg = "Either `template` or `message` must be set, but not both."
        raise ValueError(msg)

    messenger = get_messenger(messenger_name)
    header = MessageHeader.from_any(header)

    if message:
        request = MessageRequest(
            channel=to,
            header=header,
            body=MessageBody(text=message),
            template_key=None,
            context={},
        )
        return messenger.send_request(request)

    context = context or {}
    return messenger.send(to, header=header, template=template, context=context)