diff --git a/docs/docs.json b/docs/docs.json index 470f51539..41a82b8f0 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -78,6 +78,16 @@ "/core/agent-skills" ] }, + { + "group": "Triggers", + "icon": "bolt", + "pages": [ + "/triggers/main", + "/triggers/schedule", + "/triggers/slack", + "/triggers/webhook" + ] + }, { "group": "Troubleshooting", "icon": "question-circle", diff --git a/docs/images/triggers/execution_logs.png b/docs/images/triggers/execution_logs.png new file mode 100644 index 000000000..e8e1fd8a5 Binary files /dev/null and b/docs/images/triggers/execution_logs.png differ diff --git a/docs/images/triggers/schedule/Screenshot 2026-03-05 054330.png b/docs/images/triggers/schedule/Screenshot 2026-03-05 054330.png new file mode 100644 index 000000000..36dc13056 Binary files /dev/null and b/docs/images/triggers/schedule/Screenshot 2026-03-05 054330.png differ diff --git a/docs/images/triggers/schedule/Screenshot 2026-03-05 054354.png b/docs/images/triggers/schedule/Screenshot 2026-03-05 054354.png new file mode 100644 index 000000000..9f74e4465 Binary files /dev/null and b/docs/images/triggers/schedule/Screenshot 2026-03-05 054354.png differ diff --git a/docs/images/triggers/schedule/Screenshot 2026-03-05 054418.png b/docs/images/triggers/schedule/Screenshot 2026-03-05 054418.png new file mode 100644 index 000000000..c0e8d04aa Binary files /dev/null and b/docs/images/triggers/schedule/Screenshot 2026-03-05 054418.png differ diff --git a/docs/images/triggers/schedule/Screenshot 2026-03-05 054441.png b/docs/images/triggers/schedule/Screenshot 2026-03-05 054441.png new file mode 100644 index 000000000..ccb684bf2 Binary files /dev/null and b/docs/images/triggers/schedule/Screenshot 2026-03-05 054441.png differ diff --git a/docs/images/triggers/slack/10_activate_trigger.png b/docs/images/triggers/slack/10_activate_trigger.png new file mode 100644 index 000000000..23d960839 Binary files /dev/null and b/docs/images/triggers/slack/10_activate_trigger.png differ diff --git a/docs/images/triggers/slack/11_activate_trigger_click_copy.png b/docs/images/triggers/slack/11_activate_trigger_click_copy.png new file mode 100644 index 000000000..4908bbefd Binary files /dev/null and b/docs/images/triggers/slack/11_activate_trigger_click_copy.png differ diff --git a/docs/images/triggers/slack/12_enable_url.png b/docs/images/triggers/slack/12_enable_url.png new file mode 100644 index 000000000..eb9b1ba7e Binary files /dev/null and b/docs/images/triggers/slack/12_enable_url.png differ diff --git a/docs/images/triggers/slack/13_paste_url.png b/docs/images/triggers/slack/13_paste_url.png new file mode 100644 index 000000000..f471ef58b Binary files /dev/null and b/docs/images/triggers/slack/13_paste_url.png differ diff --git a/docs/images/triggers/slack/14_listen_events_slack.png b/docs/images/triggers/slack/14_listen_events_slack.png new file mode 100644 index 000000000..d038d167b Binary files /dev/null and b/docs/images/triggers/slack/14_listen_events_slack.png differ diff --git a/docs/images/triggers/slack/15_invite_bot.png b/docs/images/triggers/slack/15_invite_bot.png new file mode 100644 index 000000000..c7e34b2b1 Binary files /dev/null and b/docs/images/triggers/slack/15_invite_bot.png differ diff --git a/docs/images/triggers/slack/16_send_chat.png b/docs/images/triggers/slack/16_send_chat.png new file mode 100644 index 000000000..a79ca8040 Binary files /dev/null and b/docs/images/triggers/slack/16_send_chat.png differ diff --git a/docs/images/triggers/slack/1_create_app.png b/docs/images/triggers/slack/1_create_app.png new file mode 100644 index 000000000..452caa14a Binary files /dev/null and b/docs/images/triggers/slack/1_create_app.png differ diff --git a/docs/images/triggers/slack/2_basic_info.png b/docs/images/triggers/slack/2_basic_info.png new file mode 100644 index 000000000..e2ef2b382 Binary files /dev/null and b/docs/images/triggers/slack/2_basic_info.png differ diff --git a/docs/images/triggers/slack/3_oauth_scopes.png b/docs/images/triggers/slack/3_oauth_scopes.png new file mode 100644 index 000000000..a54a7ef7b Binary files /dev/null and b/docs/images/triggers/slack/3_oauth_scopes.png differ diff --git a/docs/images/triggers/slack/4_install_app.png b/docs/images/triggers/slack/4_install_app.png new file mode 100644 index 000000000..84ad50499 Binary files /dev/null and b/docs/images/triggers/slack/4_install_app.png differ diff --git a/docs/images/triggers/slack/5_install_app_process.png b/docs/images/triggers/slack/5_install_app_process.png new file mode 100644 index 000000000..4d1b796ff Binary files /dev/null and b/docs/images/triggers/slack/5_install_app_process.png differ diff --git a/docs/images/triggers/slack/6_get_bottoken.png b/docs/images/triggers/slack/6_get_bottoken.png new file mode 100644 index 000000000..45510961d Binary files /dev/null and b/docs/images/triggers/slack/6_get_bottoken.png differ diff --git a/docs/images/triggers/slack/7_select_slack.png b/docs/images/triggers/slack/7_select_slack.png new file mode 100644 index 000000000..7f3881497 Binary files /dev/null and b/docs/images/triggers/slack/7_select_slack.png differ diff --git a/docs/images/triggers/slack/8_enter_creds.png b/docs/images/triggers/slack/8_enter_creds.png new file mode 100644 index 000000000..891ccb242 Binary files /dev/null and b/docs/images/triggers/slack/8_enter_creds.png differ diff --git a/docs/images/triggers/slack/9_listen_events.png b/docs/images/triggers/slack/9_listen_events.png new file mode 100644 index 000000000..7e91854e3 Binary files /dev/null and b/docs/images/triggers/slack/9_listen_events.png differ diff --git a/docs/images/triggers/task_queue.png b/docs/images/triggers/task_queue.png new file mode 100644 index 000000000..f897268d5 Binary files /dev/null and b/docs/images/triggers/task_queue.png differ diff --git a/docs/images/triggers/webhook/1_select_webhook.png b/docs/images/triggers/webhook/1_select_webhook.png new file mode 100644 index 000000000..baf56ff04 Binary files /dev/null and b/docs/images/triggers/webhook/1_select_webhook.png differ diff --git a/docs/images/triggers/webhook/2_request_types.png b/docs/images/triggers/webhook/2_request_types.png new file mode 100644 index 000000000..67945d4f2 Binary files /dev/null and b/docs/images/triggers/webhook/2_request_types.png differ diff --git a/docs/images/triggers/webhook/3_webhook_config.png b/docs/images/triggers/webhook/3_webhook_config.png new file mode 100644 index 000000000..3db139363 Binary files /dev/null and b/docs/images/triggers/webhook/3_webhook_config.png differ diff --git a/docs/images/triggers/webhook/4_common_app_settings.png b/docs/images/triggers/webhook/4_common_app_settings.png new file mode 100644 index 000000000..65160eeb5 Binary files /dev/null and b/docs/images/triggers/webhook/4_common_app_settings.png differ diff --git a/docs/images/triggers/webhook/5_webhook_created.png b/docs/images/triggers/webhook/5_webhook_created.png new file mode 100644 index 000000000..5771d5ed3 Binary files /dev/null and b/docs/images/triggers/webhook/5_webhook_created.png differ diff --git a/docs/images/triggers/webhook/6_trigger_webhook.png b/docs/images/triggers/webhook/6_trigger_webhook.png new file mode 100644 index 000000000..61b1c63c8 Binary files /dev/null and b/docs/images/triggers/webhook/6_trigger_webhook.png differ diff --git a/docs/images/triggers/webhook/7_task_running.png b/docs/images/triggers/webhook/7_task_running.png new file mode 100644 index 000000000..31f3fb7a4 Binary files /dev/null and b/docs/images/triggers/webhook/7_task_running.png differ diff --git a/docs/triggers/main.md b/docs/triggers/main.md new file mode 100644 index 000000000..166f06278 --- /dev/null +++ b/docs/triggers/main.md @@ -0,0 +1,59 @@ +--- +title: Triggers Overview +description: Learn how to automate your workflows with different trigger types in Eigent. +icon: bolt +--- + +Triggers are events that automatically start your workflows. Instead of manually initiating tasks, you can configure triggers to run workflows based on schedules, external events, or incoming data. + +## How Triggers Work + +When a trigger fires, it creates a task that enters the task queue. Workers then pick up and execute these tasks according to their configured capabilities and availability. + +![Task Queue showing a triggered task labeled "say hi" with "Splitting Tasks" option visible](/docs/images/triggers/task_queue.png) + +### Key Concepts + +- **Trigger**: An event source that initiates workflows +- **Task**: A unit of work created when a trigger fires +- **Execution**: The actual running of a task by a worker +- **Queue**: Tasks waiting to be processed + +## Execution Monitoring + +Once a trigger fires and creates a task, you can monitor its execution through the logs. Each execution is tracked with timestamps, status, and duration. + +![Execution logs showing "my webhook" trigger with 1 total run, 100% success rate, and execution history with timestamps and durations](/docs/images/triggers/execution_logs.png) + +The execution logs display: + +- Total number of runs +- Success rate percentage +- Individual execution status (in progress, completed, cancelled) +- Execution timestamps +- Duration of each run + +## Trigger Types + +Eigent supports multiple trigger types to integrate with your existing tools and workflows: + + + + Run workflows at specific times or intervals. Supports one-time, daily, weekly, and monthly schedules with customizable time settings. + + + Trigger workflows from Slack messages, app mentions, and direct messages. Perfect for team collaboration and support workflows. + + + Receive HTTP requests from external services via unique URLs. Integrate with any service that supports webhooks. + + + +## Best Practices + +- **Schedule triggers**: Use for recurring tasks like daily reports, periodic data sync, or routine maintenance +- **Slack triggers**: Ideal for team collaboration, customer support, and human-in-the-loop workflows +- **Webhook triggers**: Perfect for integrating with external systems, CI/CD pipelines, and third-party services +- Monitor execution logs regularly to ensure triggers are firing correctly +- Set appropriate max failure counts to prevent runaway triggers +- Use filters and validation to ensure only relevant events trigger your workflows diff --git a/docs/triggers/schedule.md b/docs/triggers/schedule.md new file mode 100644 index 000000000..591985f96 --- /dev/null +++ b/docs/triggers/schedule.md @@ -0,0 +1,97 @@ +--- +title: Schedule Trigger +description: Automate recurring workflows with flexible scheduling options including one-time, daily, weekly, and monthly schedules. +icon: clock +--- + +Schedule triggers allow you to run workflows automatically at specified times or intervals. This is ideal for recurring tasks like daily reports, periodic data synchronization, or routine maintenance. + +## Setting Up a Schedule Trigger + +### Step 1: Select Schedule Trigger Type + +Create a new trigger and select "Schedule" from the trigger type options. You'll see two main tabs: "Schedule" and "App Trigger" - make sure Schedule is selected. + +![Schedule trigger configuration modal showing Schedule tab selected with One Time, Daily, Weekly, and Monthly frequency options](/docs/images/triggers/schedule/Screenshot%202026-03-05%20054330.png) + +### Step 2: Choose Schedule Frequency + +Select your desired frequency from the available options: + +- **One Time**: Run once at a specific date and time +- **Daily**: Run every day at the specified time +- **Weekly**: Run on specific days of the week +- **Monthly**: Run on a specific day of each month + +### Step 3: Configure Date and Time + +Set the specific date, hour, and minute for your trigger: + +- **Date**: Select the start date (format: mm/dd/yyyy) +- **Hour**: Choose the hour (00-23) +- **Minute**: Choose the minute (00-59) + +You can also set an optional **Expiration Date** if you want the trigger to stop running after a specific date. + +### Step 4: Preview Scheduled Times + +Before creating the trigger, expand the "Preview Scheduled Times" section to see exactly when your trigger will run in the upcoming days. + +![Preview section showing upcoming execution times like "March 6, 2026 at 5:41 AM GMT+3" for the next 5 days](/docs/images/triggers/schedule/Screenshot%202026-03-05%20054354.png) + +This helps verify your schedule is configured correctly. + +### Step 5: Set Failure Threshold + +Configure the **Max Failure Count** (default: 5) - this is the number of consecutive failures before the trigger is automatically disabled. This safety feature prevents problematic triggers from running indefinitely. + +## Schedule Types + +### One Time + +Run the workflow once at a specific date and time. Perfect for scheduled maintenance or one-off tasks. + +### Daily + +Run the workflow every day at the same time. Configure: + +- Date: When to start +- Hour and Minute: What time to run + +### Weekly + +Run the workflow on specific days of the week. Configure: + +- Select multiple days (Sun, Mon, Tue, Wed, Thur, Fri, Sat) +- Set the time (Hour and Minute) + +![Weekly schedule configuration showing day selector with Monday highlighted](/docs/images/triggers/schedule/Screenshot%202026-03-05%20054418.png) + +### Monthly + +Run the workflow on a specific day of each month. Configure: + +- Day of Month: Select from 1st to 31st +- Set the time (Hour and Minute) + +![Monthly schedule configuration showing "Day of Month" dropdown with 1st selected](/docs/images/triggers/schedule/Screenshot%202026-03-05%20054441.png) + + +If the selected day doesn't exist in that month (e.g., the 31st), the task will be skipped for that month. + + +## Use Cases + +- **Daily Reports**: Generate and send daily analytics summaries at 9 AM +- **Data Sync**: Synchronize data between systems every hour +- **Weekly Maintenance**: Run cleanup tasks every Sunday at midnight +- **Monthly Billing**: Process invoices on the 1st of each month +- **Periodic Monitoring**: Check system health every 15 minutes + +## Best Practices + +- Always check the "Preview Scheduled Times" to verify your schedule +- Set an expiration date for temporary or test triggers +- Use appropriate max failure counts (5 is usually sufficient) +- Consider timezone differences when scheduling for global teams +- Monitor execution logs regularly to ensure triggers run as expected diff --git a/docs/triggers/slack.md b/docs/triggers/slack.md new file mode 100644 index 000000000..d8dfe8fad --- /dev/null +++ b/docs/triggers/slack.md @@ -0,0 +1,150 @@ +--- +title: Slack Trigger +description: Trigger workflows from Slack messages, app mentions, and direct messages. +icon: slack +--- + +Slack triggers enable your workflows to respond to events in Slack, such as messages in channels, mentions of your bot, or direct messages. This creates seamless integration between your team communication and automated processes. + +## Prerequisites + +Before setting up a Slack trigger, you need to create a Slack app and obtain the necessary credentials from the [Slack API](https://api.slack.com/apps). + +### Step 1: Create a Slack App + +Go to Slack API Apps and click "Create New App". Choose "From scratch" and provide: + +- **App Name**: A name for your app (e.g., "Demo") +- **Workspace**: Select the workspace where you want to install the app + +![Slack API modal showing "Name app & choose workspace" with App Name field and workspace dropdown](/docs/images/triggers/slack/1_create_app.png) + +### Step 2: View App Credentials + +After creating the app, navigate to **Basic Information** to view your app credentials including App ID, Client ID, Client Secret, and Signing Secret. + +![Slack app Basic Information page showing App Credentials section with App ID, Client ID, Client Secret, and Signing Secret](/docs/images/triggers/slack/2_basic_info.png) + +### Step 3: Configure OAuth Scopes + +Navigate to **OAuth & Permissions** and add the necessary bot token scopes. Click "Add an OAuth Scope" and add: + +- `app_mentions:read` - View messages that directly mention your app +- `im:history` - View messages in direct messages + +![OAuth & Permissions page showing Bot Token Scopes with app_mentions:read and im:history added](/docs/images/triggers/slack/3_oauth_scopes.png) + +### Step 4: Install App to Workspace + +Scroll down to the **OAuth Tokens** section and click "Install to Workspace" to generate your Bot User OAuth Token. + +![OAuth & Permissions page with "Install to MY FIRST WORKSPACE" button visible](/docs/images/triggers/slack/4_install_app.png) + +Review the permissions and click "Allow" to authorize the app. + +![Slack permission approval page showing "Allow the 'Demo' app to access Slack" with workspace selection](/docs/images/triggers/slack/5_install_app_process.png) + +### Step 5: Copy Bot Token + +After installation, copy the **Bot User OAuth Token** (starts with `xoxb-`) - you'll need this for Eigent. + +![OAuth & Permissions page showing Bot User OAuth Token with Copy button](/docs/images/triggers/slack/6_get_bottoken.png) + +## Configuring the Slack Trigger in Eigent + +### Step 1: Select Slack as Trigger Type + +In Eigent, create a new trigger and select "App Trigger" tab, then choose "Slack" from the available apps. + +![Eigent trigger modal showing App Trigger tab selected with Slack, Webhook, Lark, and Telegram options](/docs/images/triggers/slack/7_select_slack.png) + +### Step 2: Enter Slack Credentials + +Enter your Slack Bot Token and optionally the Slack Signing Secret (from Basic Information page) to verify requests. + +![Slack Configuration section showing fields for Slack Bot Token and Slack Signing Secret with "Credentials configured successfully" message](/docs/images/triggers/slack/8_enter_creds.png) + +### Step 3: Configure Event Types + +Select which Slack events should trigger your workflow: + +- **message** - Any message in channels the bot is in +- **app_mention** - When the bot is @mentioned + +You can also configure: + +- **Message Filter (Regex)**: Filter messages using regex patterns +- **Ignore Users**: Exclude specific Slack user IDs from triggering workflows + +![Event Types configuration showing 2 selected events (message, app_mention) with Message Filter and Ignore Users fields](/docs/images/triggers/slack/9_listen_events.png) + +### Step 4: Activate the Trigger + +Save the trigger and toggle it to enabled. The trigger will show a warning icon until properly configured with Slack. + +![Triggers list showing "slack trigger" with warning icon, enabled toggle, and description "search for me the weather"](/docs/images/triggers/slack/10_activate_trigger.png) + +### Step 5: Configure Event Subscriptions in Slack + +For real-time events, you need to enable Event Subscriptions in your Slack app: + +First, edit the trigger in Eigent and copy the webhook URL: + +![Edit Trigger Agent modal showing webhook URL with Copy button and "Pending Verification" warning](/docs/images/triggers/slack/11_activate_trigger_click_copy.png) + +In your Slack app settings, navigate to **Event Subscriptions** and enable events: + +![Slack Event Subscriptions page showing "Enable Events" toggle in Off position](/docs/images/triggers/slack/12_enable_url.png) + +Paste the webhook URL in the **Request URL** field. Slack will verify the URL automatically. + +![Event Subscriptions with Enable Events toggle On and Request URL showing "Verified" status](/docs/images/triggers/slack/13_paste_url.png) + +### Step 6: Subscribe to Bot Events + +Expand "Subscribe to bot events" and add the events you want to receive: + +- `app_mention` - Subscribe to messages that mention your app +- `message.im` - Subscribe to direct messages + +![Subscribe to bot events section showing app_mention and message.im events added](/docs/images/triggers/slack/14_listen_events_slack.png) + +Click "Save Changes" to apply your configuration. + +### Step 7: Invite Bot to Channel + +In Slack, invite your bot to the channels where you want it to listen by typing `/invite @YourBotName`. + +![Slack channel showing "/invite @Demo" being typed in message input with bot status "Not in channel"](/docs/images/triggers/slack/15_invite_bot.png) + +## Testing Your Integration + +Send a message in the configured channel or mention the bot to trigger your workflow. + +![Slack channel showing user message "Hi there @Demo, what can you do?" after bot joined the channel](/docs/images/triggers/slack/16_send_chat.png) + +## Available Event Types + +| Event | Description | Required Scope | +| ------------------ | ------------------------------ | ----------------- | +| `app_mention` | Bot is @mentioned in a channel | app_mentions:read | +| `message.im` | New direct message to the bot | im:history | +| `message.channels` | Message in public channel | channels:history | +| `message.groups` | Message in private channel | groups:history | + +## Use Cases + +- **Customer Support**: Auto-respond to support requests in #help channels +- **DevOps**: Trigger deployments from Slack commands +- **HR**: Process time-off requests via Slack messages +- **Sales**: Log leads from sales channel conversations +- **IT Helpdesk**: Create tickets from IT support requests + +## Best Practices + +- Use specific channels rather than monitoring all channels +- Set up regex filters to avoid triggering on irrelevant messages +- Add ignore users to prevent bot loops +- Include the bot's response format in your workforce instructions +- Test thoroughly before enabling in production channels +- Use app mentions for actions requiring human confirmation diff --git a/docs/triggers/temp.md b/docs/triggers/temp.md new file mode 100644 index 000000000..e9aaf101a --- /dev/null +++ b/docs/triggers/temp.md @@ -0,0 +1,305 @@ +# Image Analysis for Triggers Documentation + +## Main/Overview Images + +### task_queue.png + +- Shows: "1 Queued Tasks" with a task labeled "say hi" +- UI element: "Splitting Tasks" button with gear icon +- Content: Shows how triggered tasks appear in the task queue +- Caption: "When a trigger fires, it creates a task that enters the task queue" + +### execution_logs.png + +- Shows: Execution logs for "my webhook" trigger +- Statistics: 1 Total Runs, 100% Success Rate +- Log entries with timestamps and status: + - 05:50:27 - Execution in progress... + - 05:50:14 - Execution was cancelled (2.5s) + - 05:50:08 - Execution completed successfully (9.3s) + - 05:49:47 - Execution completed successfully (12.0s) + - 05:49:34 - Execution completed successfully (11.3s) + - 05:48:33 - Execution completed successfully (29.0s) +- Caption: "Monitor trigger executions with detailed logs showing status, timestamps, and duration" + +## Schedule Trigger Images + +### schedule/Screenshot 2026-03-05 054330.png + +- Shows: "Automate task with trigger" modal, Schedule tab selected +- Trigger Type: Schedule (selected) vs App Trigger +- Options: One Time, Daily, Weekly, Monthly tabs +- Fields visible: + - Date: 03/05/2026 + - Hour: 05 (dropdown) + - Minute: 41 (dropdown) + - Max Failure Count: 5 (optional, description: "Number of consecutive failures before the trigger is automatically disabled") +- Caption: "Configure a schedule trigger by selecting the schedule type and frequency" + +### schedule/Screenshot 2026-03-05 054354.png + +- Shows: Same modal scrolled down +- Additional fields: + - Expiration Date: mm/dd/yyyy (optional) + - Max Failure Count: 5 + - Preview Scheduled Times (expandable): + - March 6, 2026 at 5:41 AM GMT+3 + - March 7, 2026 at 5:41 AM GMT+3 + - March 8, 2026 at 5:41 AM GMT+3 + - March 9, 2026 at 5:41 AM GMT+3 + - March 10, 2026 at 5:41 AM GMT+3 +- Caption: "View a preview of upcoming scheduled execution times before creating the trigger" + +### schedule/Screenshot 2026-03-05 054418.png + +- Shows: Days of Week selector +- Days: Sun, Mon, Tue, Wed, Thur, Fri, Sat +- Mon is selected (white background, others gray) +- Caption: "Select specific days of the week for weekly recurring triggers" + +### schedule/Screenshot 2026-03-05 054441.png + +- Shows: Monthly scheduling options +- Selected: "Monthly" tab +- Field: Day of Month (dropdown showing "1st") +- Help text: "If the selected day doesn't exist in that month (e.g., the 31st), the task will be skipped." +- Caption: "Configure monthly triggers by selecting the day of the month" + +## Slack Trigger Images + +### slack/1_create_app.png + +- Shows: Slack API "Your Apps" page with modal open +- Modal title: "Name app & choose workspace" +- Fields: + - App Name: "Demo" + - Workspace dropdown: "MY FIRST WORKSPACE" +- Note: "By creating a Web API Application, you agree to the Slack API Terms of Service" +- Buttons: Cancel, Create App (green) +- Caption: "Create a new Slack app from the Slack API dashboard" + +### slack/2_basic_info.png + +- Shows: Slack app "Basic Information" page +- Section: "App Credentials" +- Fields displayed: + - App ID + - Date of App Creation: March 4, 2026 + - Client ID + - Client Secret (hidden) + - Signing Secret +- Left sidebar shows various settings and features +- Caption: "View your app's basic information and credentials in the Slack API dashboard" + +### slack/3_oauth_scopes.png + +- Shows: OAuth & Permissions - Scopes section +- Bot Token Scopes: + - app_mentions:read - "View messages that directly mention @Demo in conversations that the app is in" + - im:history - "View messages and other content in direct messages that 'Demo' has been added to" +- Button: "Add an OAuth Scope" +- Caption: "Add necessary OAuth scopes for your bot to read messages and mentions" + +### slack/4_install_app.png + +- Shows: OAuth & Permissions page +- Section: "Advanced token security via token rotation" +- Warning: "At least one redirect URL needs to be set below before this app can be opted into token rotation" +- OAuth Tokens section +- Button: "Install to MY FIRST WORKSPACE" (green) +- Caption: "Install your Slack app to your workspace to generate OAuth tokens" + +### slack/5_install_app_process.png + +- Shows: Permission approval page +- Title: "Allow the 'Demo' app to access Slack" +- Workspace: MY FIRST WORKSPACE +- Review app permissions section +- Information visible: "Content and info about channels & conversations" +- Buttons: Cancel, Allow (green) +- Caption: "Review and approve the permissions requested by your Slack app" + +### slack/6_get_bottoken.png + +- Shows: OAuth & Permissions page after installation +- Success banner: "You've changed the permission scopes your app uses. Please reinstall your app..." +- OAuth Tokens section showing: + - Bot User OAuth Token: xoxb-... (with Copy button) + - Access Level: Workspace +- Button: "Reinstall to MY FIRST WORKSPACE" +- Caption: "Copy the Bot User OAuth Token after installing the app to your workspace" + +### slack/7_select_slack.png + +- Shows: Eigent "Automate task with trigger" modal +- Trigger Type: Schedule | App Trigger (App Trigger selected) +- Select App section with grid: + - Slack (logo) + - Webhook (selected, highlighted) + - Lark (Coming Soon) + - Telegram (Coming Soon) +- Execution Settings section (collapsed) +- Caption: "Select Slack as the trigger app in Eigent's trigger configuration" + +### slack/8_enter_creds.png + +- Shows: "Slack Configuration" section in trigger modal +- Info box: "You can find your webhook URL in the trigger details after creation." +- Credentials section: + - Slack Bot Token (password field with show/hide, Update button) + - Help: "Your Slack Bot User OAuth Token (starts with xoxb-)" + - Slack Signing Secret (password field with show/hide, Update button) + - Help: "Your Slack app's signing secret used to verify requests" +- Success message: "✓ Credentials configured successfully" +- Caption: "Enter your Slack Bot Token and Signing Secret to authenticate the trigger" + +### slack/9_listen_events.png + +- Shows: Lower section of trigger configuration modal +- Fields: + - Message Filter (Regex): "Enter regex pattern to filter messages..." + - Event Types: "2 selected" (dropdown) + - Selected tags: message, app_mention + - Ignore Users: "Enter Slack user IDs (e.g., U1234567890)..." + - Behavior Settings (collapsed section) +- Caption: "Configure which Slack events should trigger your workflow" + +### slack/10_activate_trigger.png + +- Shows: Eigent Triggers page +- Created trigger: "slack trigger" with warning icon +- Description: "search for me the weather" +- Type badge: "Slack" +- Toggle switch: Enabled (green) +- Caption: "Activate your Slack trigger from the triggers list" + +### slack/11_activate_trigger_click_copy.png + +- Shows: "Edit Trigger Agent" modal +- Trigger Type: App Trigger selected +- Slack Configuration section +- Webhook URL displayed: https://dev.eigent.ai/api/webhook/trigger/98d2a1c8-859a-4e9b-9257-74911f56156a +- Warning: "Pending Verification. A valid event message is required for Trigger Activation or disable trigger Authentication." +- Copy button next to URL +- Caption: "Copy the webhook URL to configure in your Slack app's Event Subscriptions" + +### slack/12_enable_url.png + +- Shows: Slack API Event Subscriptions page +- Toggle: "Enable Events" - currently Off +- Description: "Your app can subscribe to be notified of events in Slack... at a URL you choose." +- Caption: "Enable Event Subscriptions in your Slack app settings" + +### slack/13_paste_url.png + +- Shows: Slack API Event Subscriptions page with Events enabled +- Toggle: "Enable Events" - On (green) +- Request URL field showing: https://dev.eigent.ai/api/webhook/trigger/98d2a1c8-859a-4e9b-9257-74... +- Status: Verified ✓ +- Additional options: + - Delayed Events toggle (Off) + - Subscribe to bot events (collapsed section) +- Caption: "Paste the webhook URL and verify it with Slack" + +### slack/14_listen_events_slack.png + +- Shows: Slack Event Subscriptions page - "Subscribe to bot events" section expanded +- Events subscribed: + - app_mention - Subscribe to only the message events that mention your app or bot - Required Scope: app_mentions:read + - message.im - A message was posted in a direct message channel - Required Scope: im:history +- Button: "Add Bot User Event" +- Another collapsed section: "Subscribe to events on behalf of users" +- Caption: "Subscribe to specific bot events that will trigger your workflow" + +### slack/15_invite_bot.png + +- Shows: Slack workspace channel view +- Channel: demo-ch +- Message input showing: "/invite @Demo" +- Bot status: "Not in channel" with "Enter" button +- Top shows onboarding cards for the channel +- Caption: "Invite your bot to the channel where you want it to listen for messages" + +### slack/16_send_chat.png + +- Shows: Slack channel after bot invitation +- System message: "Ahmed joined demo-ch. Also, Demo joined via invite." +- User message: "Ahmed: Hi there @Demo, what can you do?" +- Message input ready for typing +- Caption: "Test your integration by mentioning the bot in the channel" + +## Webhook Trigger Images + +### webhook/1_select_webhook.png + +- Shows: Eigent "Automate task with trigger" modal +- Trigger Type: Schedule | App Trigger (App Trigger selected) +- Select App grid: + - Slack + - Webhook (selected, highlighted with border) + - Lark (Coming Soon) + - Telegram (Coming Soon) +- Caption: "Select Webhook as the trigger type" + +### webhook/2_request_types.png + +- Shows: Request Method dropdown +- Currently selected: POST +- Dropdown options: GET, POST (checkmark) +- Caption: "Choose the HTTP method (GET or POST) for your webhook" + +### webhook/3_webhook_config.png + +- Shows: "Extra Settings" section expanded +- Fields: + - Max Failure Count: 5 ("Number of consecutive failures before the trigger is automatically disabled") + - Message Filter (Regex): "Enter regex pattern to filter messages..." + - Body Contains: "Enter text that must be in request body..." ("Only trigger if the request body contains this string") + - Required Headers: "Enter header names (e.g., Content-Type, Authorization)..." (with + button) +- Caption: "Configure webhook filters and validation rules" + +### webhook/4_common_app_settings.png + +- Shows: Execution Settings section expanded +- Fields: + - Max Per Hour: 0 + - Max Per Day: 0 +- Caption: "Set rate limiting options to control webhook execution frequency" + +### webhook/5_webhook_created.png + +- Shows: "Webhook Created Successfully" modal +- Icon: Green lightning bolt in circle +- Webhook name: "my webhook" +- Method badge: GET +- Your Webhook URL: https://dev.eigent.ai/api/webhook/trigger/f9b48cef-7fbb-411f-aa19-b959e3a58ef2 +- Copy button next to URL +- Button: "Got it" +- Caption: "Copy your unique webhook URL after creation" + +### webhook/6_trigger_webhook.png + +- Shows: Browser view of webhook URL +- URL: https://dev.eigent.ai/api/webhook/trigger/f9b48cef-7fbb-411f-aa19-b959e3a58ef2 +- JSON response: + +```json +{ + "success": true, + "execution_id": "c9a49dd7-7125-44dc-9374-b3a9f13ab7bd", + "message": "Webhook trigger delivered to client", + "delivered": true, + "session_id": "b9ed7788-58b0-46ee-bb0d-01bb8e906f56" +} +``` + +- Caption: "Trigger the webhook by visiting the URL or sending an HTTP request" + +### webhook/7_task_running.png + +- Shows: Eigent interface with Triggers page +- Created trigger: "my webhook" with description "say hi" +- Toggle: Enabled (green) +- Left sidebar shows Chat with tasks loading +- Notification toast: "Queued: my webhook - Task has been added to the project queue" +- Caption: "View your webhook trigger in the triggers list and monitor task execution" diff --git a/docs/triggers/webhook.md b/docs/triggers/webhook.md new file mode 100644 index 000000000..d5773bade --- /dev/null +++ b/docs/triggers/webhook.md @@ -0,0 +1,141 @@ +--- +title: Webhook Trigger +description: Trigger workflows via HTTP requests from external services using unique webhook URLs. +icon: webhook +--- + +Webhook triggers allow external services to initiate workflows by sending HTTP requests to a unique URL. This enables integration with virtually any service that supports webhooks, including GitHub, Stripe, Zapier, and custom applications. + +## Setting Up a Webhook Trigger + +### Step 1: Select Webhook Trigger + +Create a new trigger and select "App Trigger" tab, then choose "Webhook" from the available options. + +![Trigger modal showing App Trigger tab with Webhook option selected alongside Slack, Lark, and Telegram](/docs/images/triggers/webhook/1_select_webhook.png) + +### Step 2: Configure Request Method + +Choose the HTTP method your webhook should accept: + +- **GET**: For simple requests and testing +- **POST**: For sending data payloads (most common) + +![Request Method dropdown showing POST selected with GET and POST options](/docs/images/triggers/webhook/2_request_types.png) + +### Step 3: Configure Extra Settings + +Set up validation and filtering rules for your webhook: + +- **Max Failure Count**: Number of consecutive failures before the trigger is automatically disabled (default: 5) +- **Message Filter (Regex)**: Use regex patterns to filter which requests trigger the workflow +- **Body Contains**: Only trigger if the request body contains specific text +- **Required Headers**: Specify required HTTP headers (e.g., Content-Type, Authorization) + +![Extra Settings section showing Max Failure Count, Message Filter, Body Contains, and Required Headers fields](/docs/images/triggers/webhook/3_webhook_config.png) + +### Step 4: Set Execution Limits + +Configure rate limiting to prevent abuse: + +- **Max Per Hour**: Maximum number of executions per hour (0 = unlimited) +- **Max Per Day**: Maximum number of executions per day (0 = unlimited) + +![Execution Settings section showing Max Per Hour and Max Per Day fields set to 0](/docs/images/triggers/webhook/4_common_app_settings.png) + +### Step 5: Create and Copy Webhook URL + +After configuring, click "Create" to generate your unique webhook URL. + +![Webhook Created Successfully modal showing webhook name "my webhook", method GET, and the webhook URL with Copy button](/docs/images/triggers/webhook/5_webhook_created.png) + +**Important**: Copy this URL - you'll need to configure it in your external service. + +## Using Your Webhook + +### Step 1: Configure External Service + +Paste the webhook URL into your external service's webhook settings. Examples: + +- **GitHub**: Repository Settings → Webhooks → Add webhook +- **Stripe**: Dashboard → Developers → Webhooks → Add endpoint +- **Zapier**: Create Zap → Webhooks by Zapier +- **Custom apps**: Use the URL in your API calls + +### Step 2: Trigger the Webhook + +Test the webhook by visiting the URL in your browser (for GET requests) or sending an HTTP request. + +![Browser showing JSON response from webhook URL with success status, execution_id, and message "Webhook trigger delivered to client"](/docs/images/triggers/webhook/6_trigger_webhook.png) + +The response includes: + +- `success`: Boolean indicating if the trigger was accepted +- `execution_id`: Unique ID for this execution +- `message`: Status message +- `delivered`: Whether the trigger was successfully delivered +- `session_id`: Session identifier + +### Step 3: Monitor Execution + +When the webhook fires, Eigent creates a task and adds it to the project queue. + +![Eigent interface showing Triggers page with "my webhook" enabled and notification "Queued: my webhook - Task has been added to the project queue"](/docs/images/triggers/webhook/7_task_running.png) + +View execution logs to see the payload and processing results. + +## Security Best Practices + +### Rate Limiting + +Always set appropriate Max Per Hour/Day limits to prevent abuse: + +- **Development**: 100/hour, 1000/day +- **Production**: Depends on expected volume + +### Request Validation + +Use these methods to secure your webhooks: + +1. **Required Headers**: Enforce Content-Type, Authorization, or custom headers +2. **Body Contains**: Verify specific strings in the request body +3. **Regex Filtering**: Use complex patterns to validate request structure + +### Authentication + +While Eigent webhooks use unique URLs (which act as tokens), you can add additional security: + +- Add an `Authorization` header requirement +- Include a secret token in the request body +- Use IP whitelisting on your external service + +## Use Cases + +- **CI/CD Pipelines**: Trigger deployments from GitHub/GitLab webhooks +- **E-commerce**: Process orders from Stripe/PayPal payment webhooks +- **Monitoring**: Handle alerts from PagerDuty/Datadog +- **CRM Integration**: Sync customer data from Salesforce/HubSpot +- **Form Submissions**: Process Typeform/Google Forms submissions +- **IoT Devices**: Respond to device events and sensor data + +## Troubleshooting + +### Webhook Not Firing + +1. Verify the URL is correctly entered in the external service +2. Check if the external service shows successful delivery attempts +3. Ensure the webhook is toggled ON in Eigent +4. Review execution logs for any errors + +### Payload Not Received + +1. Check the Content-Type header (should be application/json for JSON payloads) +2. Verify the payload matches your "Body Contains" filter if configured +3. Ensure required headers are present +4. Check if regex filter is too restrictive + +### Too Many Requests + +1. Check Max Per Hour/Day limits +2. Verify the external service isn't sending duplicate requests +3. Consider adding deduplication logic in your workflow