Portal Community

Input Shape

Every operation on this node reads its configuration through the same three-tier pattern:

  1. Routing keysresource and operation select which of the 42 feature partials handles the call.
  2. Credential keysbotToken (inline) or credentialID (vault). message/search and user/updateProfile use a user-level token instead — see Authentication & Setup.
  3. Operation-specific fields — documented per-operation on the five resource pages (Message, Channel, File, Reaction, User, User Group).

Each operation is backed by a settings DTO (e.g. SendMessageInfo, ChannelCreateInfo) whose LoadFrom(ConfigDataPropertyBag) method reads the config keys, and whose Validate() method reports the first missing/invalid field.

Output Ports

Every Slack node instance is created with two output ports via GetOrCreatePortSuccessAndError():

PortWhen
successThe Slack API call returned "ok": true and any operation-level validation passed.
errorValidation failed before the call (e.g. missing channel), the Slack API returned "ok": false, credential resolution failed, or an unhandled exception occurred.

Standard Success Shape

Every successful operation writes at minimum:

{
  "status": "success",
  "resource": "message",
  "operation": "send",
  "items": [ { /* operation-specific result fields */ } ]
}

The items array wraps the operation's specific result object so downstream nodes can iterate it uniformly, regardless of whether the operation returns a single record (e.g. message/send) or a list (e.g. channel/getMany).

Standard Error Shape

{
  "status": "error",
  "errorCode": "MISSING_BOT_TOKEN",
  "resource": "message",
  "operation": "send",
  "message": "botToken is required"
}
Error CodeMeaning
MISSING_BOT_TOKENNeither botToken nor a resolvable credentialID was supplied.
CREDENTIAL_RESOLVER_NOT_CONFIGUREDcredentialID was set but no ICredentialResolver is registered in DI.
CREDENTIAL_NOT_FOUNDcredentialID does not resolve to a stored bearer-token credential.
ENGINE_NOT_SUPPORTEDmessage/sendAndWait only — workflow suspension isn't implemented yet. See Roadmap.
(Slack error string, e.g. channel_not_found)Passed through verbatim from Slack's error field when "ok": false. See Troubleshooting.
Tip: The Slack Web API always returns HTTP 200 — success or failure is signaled purely by the ok boolean in the JSON body. The Slack service layer (SlackHttpHelper.ParseOk) handles this transparently, so this node's error port behaves the same whether the failure came from Slack, from input validation, or from an exception.