Portal Community
One Node Per Channel Connection Each Chat Trigger node instance is connected to one specific channel (e.g., one WhatsApp number, one Slack channel, or one Teams bot). To listen on multiple channels or trigger different workflows from different channels, create separate Chat Trigger nodes for each connection.

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.

WhatsApp

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 ConfigurationTriggers 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

PropertyExpression SupportNotes
bot_responseFull expression supportCan reference {{ $trigger.sender_name }}, {{ $trigger.message_text }}, and {{ $trigger.execution_id }} to personalize the reply.
channel_typeNo expression supportMust be a static enum value selected at design time.
channel_idNo expression supportMust be a static string — the channel being listened to cannot change at runtime.
keyword_filterNo expression supportFilter rules are static and evaluated by the platform adapter before BizFirstAI receives the message.
Avoid Feedback Loops Always keep 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.
Use keyword_filter to Reduce Noise For channel-wide listeners (Slack channels, Teams channels) with many messages, always configure a keyword_filter. Without filtering, every message in the channel triggers the workflow. A keyword or regex filter ensures only actionable messages consume workflow executions.