-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Summary
- add
SlackPrivateMessageParamswith recipient name list and message text - implement
slack.private.messageto 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.resolvetool 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)Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request