Configuration
Properties
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
channel_type |
Enum | Required | None | The messaging platform to listen on. One of: slack, whatsapp, teams, sms. This determines which credential type is expected in credential_id and which adapter BizFirstAI uses to receive and parse incoming messages. |
channel_id |
String | Required | None | The specific channel or number to listen on. For slack: the Slack channel ID (e.g., C0123ABC456). For whatsapp: the WhatsApp Business phone number in E.164 format (e.g., +14155550100). For teams: the Teams channel GUID. For sms: the Twilio phone number in E.164 format. |
credential_id |
Credential Reference | Required | None | Reference to a stored credential in the BizFirstAI workspace that authenticates the connection to the messaging platform. Must match the channel_type: Slack Bot Token for slack, WhatsApp Business API credentials for whatsapp, Azure Bot credentials for teams, or Twilio credentials for sms. |
keyword_filter |
Object | Optional | None (all messages trigger) | Restricts which messages trigger the workflow. Supports {"type": "contains", "value": "order status"} for substring matching, {"type": "starts_with", "value": "!help"} for command-style prefixes, or {"type": "regex", "pattern": "order\\s+[A-Z0-9-]+"} for complex pattern matching. Case insensitivity can be set with "case_insensitive": true. |
bot_response |
String / Expression | Optional | None (no auto-reply) | An immediate automated reply sent back to the sender the moment the workflow is triggered. Sent before the workflow completes. Supports BizFirst expressions for personalization, e.g., "Hi {{ $trigger.sender_name }}, we received your message and will get back to you shortly!" |
listen_for |
Enum | Optional | direct_messages |
Scope of messages to listen for. direct_messages: only direct messages to the bot or number. channel_messages: all messages in a monitored channel (requires channel membership). mentions: only messages that @-mention the bot (Slack and Teams only). all: all messages the bot can see. |
ignore_bots |
Boolean | Optional | true |
When true, messages sent by other bots or automated systems are ignored and do not trigger the workflow. Prevents infinite loops when your workflow sends a reply that gets picked up by another bot listener. |
max_triggers_per_hour |
Integer | Optional | 0 (unlimited) |
Rate limit on workflow activations from this channel, per hour. Useful for SMS channels with per-message costs, or to prevent flood-triggering from high-volume channels. When the limit is reached, additional messages receive the bot_response if configured but do not start new workflow executions. |
Channel-Specific Setup Notes
Slack
Create a Slack app in your workspace at api.slack.com/apps. Enable the Events API and subscribe to message.channels and message.im event types. Set the Request URL to the BizFirstAI Slack adapter URL (shown in the credential setup wizard). Add the Bot Token Scopes: channels:history, chat:write, im:history, im:write. Store the Bot User OAuth Token as a BizFirstAI credential.
Requires a WhatsApp Business API account. Configure the webhook URL in your WhatsApp Business Platform settings at Meta for Developers. Set the Callback URL to the BizFirstAI WhatsApp adapter endpoint and subscribe to messages events. Store the WhatsApp Access Token and Phone Number ID as a BizFirstAI credential.
Microsoft Teams
Register an Azure Bot resource in the Azure Portal. Configure the messaging endpoint to the BizFirstAI Teams adapter URL. Add the bot to your Teams channel using the Teams Admin Center. Store the Azure Bot App ID and Client Secret as a BizFirstAI credential. The channel_id for Teams is found in the Teams channel URL under the groupId parameter.
SMS (Twilio)
In your Twilio console, configure the webhook URL for the SMS number to point to the BizFirstAI SMS adapter endpoint. Set the HTTP method to POST. Store your Twilio Account SID and Auth Token as a BizFirstAI credential. The channel_id is your Twilio phone number in E.164 format.
Keyword Filter Examples
| Filter Configuration | Triggers On |
|---|---|
{"type": "contains", "value": "order status", "case_insensitive": true} | "What is my order status?" / "ORDER STATUS please" / "check order status ORD-001" |
{"type": "starts_with", "value": "!ticket"} | "!ticket my laptop won't connect to VPN" — Slack command-style trigger |
{"type": "regex", "pattern": "ORD-[0-9]{5,10}", "case_insensitive": false} | Any message containing an order number like "ORD-20240615" |
{"type": "contains", "value": "refund"} | Any message mentioning "refund" — triggers refund inquiry workflow |
Expression Support
| Property | Expression Support | Notes |
|---|---|---|
bot_response | Full expression support | Can reference {{ $trigger.sender_name }}, {{ $trigger.message_text }}, and {{ $trigger.execution_id }} to personalize the reply. |
channel_type | No expression support | Must be a static enum value selected at design time. |
channel_id | No expression support | Must be a static string — the channel being listened to cannot change at runtime. |
keyword_filter | No expression support | Filter rules are static and evaluated by the platform adapter before BizFirstAI receives the message. |
ignore_bots: true (the default). If your workflow sends a reply to a channel and another Chat Trigger (or the same one) is listening to that channel, the bot's own reply could trigger an infinite loop of workflow executions.
keyword_filter. Without filtering, every message in the channel triggers the workflow. A keyword or regex filter ensures only actionable messages consume workflow executions.