Skip to content

Implement slack.private.message tool for direct messaging #14

@fbraza

Description

@fbraza

Summary

  • add SlackPrivateMessageParams with recipient name list and message text
  • implement slack.private.message to resolve each name and send a direct message per user
  • expand Slack prompt docs to explain the tool usage and parameters

Acceptance Criteria

  • tool accepts 1..n human-provided names, resolves Slack users, and sends direct messages
  • responses include success/failure details for each requested recipient
  • automated tests cover happy path and partial failure scenarios

Notes

  • reuse existing Slack WebClient from deps, preserve error handling patterns
  • rely on slack.user.resolve tool for name → user_id resolution
  • document expectations that group conversations are handled by a separate tool

Example

@slack_toolset.tool(name="slack.private.message")
def send_private_message(ctx: RunContext[Deps], params: SlackPrivateMessageParams) -> SlackDeliveryReport:
    matches = ctx.deps.tools.call("slack.user.resolve", {"names": params.users})
    results: list[DeliveryResult] = []

    for match in matches:
        try:
            response = ctx.deps.client.chat_postMessage(channel=match.user_id, text=params.text)
            results.append(DeliveryResult.success(requested=match.requested, user_id=match.user_id, ts=response["ts"]))
        except SlackApiError as exc:
            results.append(DeliveryResult.failure(requested=match.requested, reason=exc.response["error"]))

    return SlackDeliveryReport(results=results)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions