Actions
How to use one-click action buttons in alice Slack results. Tag customers in Stripe, send Slack DMs, and trigger webhooks from query results.
What Are Actions?
Actions turn passive query results into operational workflows. Instead of seeing a list of churn-risk customers and then switching to Stripe to tag them, you click a button right on the Slack message and it happens instantly.

The flow:
- A user runs a skill via slash command, scheduled report, or monitor
- Results are posted to Slack with action buttons attached
- A team member clicks a button
- Alice executes the action (tags customer, sends DM, fires webhook, etc.)
- The Slack message updates in-place with a confirmation
- The execution is logged to the audit trail
Actions work on results from any trigger type. Whether the skill was run manually, on a cron schedule, or fired by a monitor alert, the buttons are there.
ProActions require a Pro or Business plan. Free plans can use the free-tier actions: Open in Stripe, Open in Supabase, Copy to Clipboard, Pin Message, Add Reaction, Reply in Thread, and Export as CSV.
Available Actions
Stripe Actions
| Action | Description | Scope |
|---|---|---|
| Tag in Stripe | Add a metadata tag (e.g., churn-risk, vip) to a Stripe customer. Tags appear in the Stripe dashboard and can be used for segmentation. | Per row |
| Add Stripe Note | Add a timestamped metadata note to a Stripe customer record. Use for recording observations or context. | Per row |
| Set Metadata | Set any custom key-value pair on a Stripe customer. More flexible than Tag -- use for segment, CSM assignment, onboarding status. | Per row |
| Apply Coupon | Apply a discount coupon to a Stripe subscription. Takes effect on the next invoice. Requires confirmation. | Per row |
| Extend Trial | Push a subscription's trial end date forward by a specified number of days. Requires confirmation. | Per row |
| Add Credit | Add a balance credit to a Stripe customer (applied to next invoice). Use for goodwill credits, not refunds. Requires confirmation. | Per row |
| Open in Stripe | Open the Stripe dashboard page for a customer, subscription, invoice, or payment. Deep links directly to the relevant object. | Per row |
Slack Actions
| Action | Description | Scope |
|---|---|---|
| Send Slack DM | Send a direct message to a workspace member via the alice bot. Use for notifying teammates about specific results. | Per row |
| Post to Channel | Post a custom message to a Slack channel. Use for broadcasting alerts or summaries. | Global |
| Set Reminder | Create a Slack reminder for yourself or a teammate. Use for scheduling follow-ups. | Per row |
| Add Reaction | Add an emoji reaction to the result message for lightweight triage (e.g., checkmark for "reviewed"). | Global |
| Pin Message | Pin the result message to the channel so it stays visible. Good for daily reports. | Global |
| Reply in Thread | Post a reply in the thread of the result message. Keeps follow-up organized. | Global |
| Set Channel Topic | Update a channel's topic with data from results (e.g., "MRR: $45K -- Churn: 1.8%"). | Global |
| Invite to Channel | Invite a team member to a Slack channel for escalation. | Per row |
| Share Results | Re-post the full formatted results to another channel or as a DM. | Global |
Database Actions
| Action | Description | Scope |
|---|---|---|
| Run Supabase Query | Execute a custom SQL query against your Supabase database. Use for write-backs: flag users, update statuses, insert audit rows. Requires confirmation. | Per row |
| Open in Supabase | Open the Supabase dashboard table editor filtered to a specific row. | Per row |
Utility Actions
| Action | Description | Scope |
|---|---|---|
| Send Webhook | Send an HTTP request with JSON payload to any URL. Integrate with Zapier, n8n, Make.com, or custom APIs. | Per row or Global |
| Send Email | Send a templated email via Resend. Requires confirmation. | Per row |
| Copy to Clipboard | Copy a value (email, ID, URL) to the user's clipboard. | Per row |
| Export as CSV | Export the full result set as a CSV file uploaded to the channel. | Global |
| Export as PDF | Export results as a formatted PDF report. | Global |
Row Actions vs. Global Actions
Actions have two scopes:
Row actions (scope: "row") appear on each individual result item. They operate on a specific record -- tagging a specific Stripe customer, DMing about a specific user. Row actions work with List and Table output types.
Global actions (scope: "global") appear once at the bottom of the entire result message. They operate on the result as a whole -- pinning the message, exporting all data as CSV, posting to another channel.
Some actions support both scopes (like Send Webhook and Tag in Stripe), and you choose the scope when configuring the skill.
How Actions Execute
When a user clicks an action button in Slack:
- Slack sends an interaction payload to alice's
/api/slack/actionsendpoint - Alice verifies the request signature and identifies the action
- The action is executed with the configured parameters, substituting
{{field}}templates with values from the result row - The Slack message is updated in-place with a confirmation indicator
- The execution is logged to the audit trail
All of this happens within Slack's 3-second response window. For actions that require external API calls (like tagging in Stripe), alice uses deferred responses to avoid timeouts.
Template Interpolation
Actions use {{field}} templates to reference data from the result row. When you configure a "Tag in Stripe" action, you set the customer_id parameter to {{stripe_customer_id}} -- alice substitutes the actual customer ID from the row when the button is clicked.
Common template patterns:
{{email}} -- Customer email from the result row
{{stripe_customer_id}} -- Stripe customer ID
{{id}} -- Primary key / record ID
{{name}} -- Customer name
{{plan}} -- Plan name
{{amount}} -- Monetary valueTemplates work in all action parameter fields: message bodies, webhook payloads, email subjects, and SQL queries.
Configuring Actions Per Skill
Actions are configured in the skill builder. The AI skill generation feature automatically suggests appropriate actions based on your query and data sources. You can also configure actions manually.
Choosing Actions
Select actions that make sense for the data your skill returns:
- Stripe customer data: Tag in Stripe, Open in Stripe, Add Note
- Churn risk results: Tag in Stripe, Send DM, Set Reminder
- Failed payments: Open in Stripe, Send DM, Apply Coupon
- User lists: Open in Supabase, Send Email, Webhook
- Aggregate metrics: Pin Message, Share Results, Export as CSV
Parameter Mapping
Each action has parameters that need to be mapped to your result fields. For example, "Tag in Stripe" requires:
customer_id-- map to{{stripe_customer_id}}or{{customer_id}}tag-- set to a static value likechurn-riskor map to a result field
The builder shows available parameters for each action with hints about what to map them to.
Confirmation Dialogs
Some actions require confirmation before executing. These are actions that modify external data:
- Apply Coupon (modifies billing)
- Extend Trial (modifies subscription dates)
- Add Credit (modifies customer balance)
- Run Supabase Query (modifies your database)
- Send Email (sends external communication)
When a user clicks a confirmation-required action, a Slack dialog appears asking them to confirm before proceeding.
Safety Model
Alice follows a strict safety model for actions. The core principle: actions are additive, never destructive.
| Safe (Available) | Never Available |
|---|---|
| Add a tag | Cancel a subscription |
| Add a note | Delete a user |
| Send a notification | Issue a refund |
| Apply a coupon | Modify an invoice |
| Extend a trial | Remove a payment method |
| Add a credit | Downgrade a plan |
| Set metadata | Revoke access |
| Create a reminder | Permanently delete data |
Even "powerful" actions like Apply Coupon and Add Credit are additive -- they give the customer something rather than taking something away. Confirmation dialogs provide an additional safety net.
This is a deliberate design choice. Destructive actions belong in the Stripe dashboard or your admin panel, where the full context is visible and the consequences are clear. Alice is for quick operational workflows, not irreversible changes.
Audit Trail
Every action execution is logged with complete context:
| Field | Description |
|---|---|
| Who | The Slack user who clicked the button |
| What | Which action was executed (e.g., "Tag in Stripe") |
| When | Timestamp of execution |
| Parameters | The resolved parameter values (e.g., customer_id: cus_abc123, tag: churn-risk) |
| Result | Success or failure, with error details if applicable |
| Skill | Which skill the action was attached to |
| Trigger | How the skill was invoked (command, schedule, monitor) |
View the audit trail at Dashboard > Logs. Filter by action type, user, or date range to review operational activity.
The audit trail serves two purposes:
- Accountability: Know exactly who did what and when
- Debugging: When something does not work as expected, trace the execution
Audit logs follow your plan's data retention policy: 7 days on Free, 30 days on Pro, 90 days on Business.
Plan Availability
| Action Category | Free | Pro | Business |
|---|---|---|---|
| Open in Stripe / Supabase | Yes | Yes | Yes |
| Copy to Clipboard | Yes | Yes | Yes |
| Add Reaction, Pin, Reply in Thread | Yes | Yes | Yes |
| Export as CSV | Yes | Yes | Yes |
| Tag / Note / Metadata in Stripe | -- | Yes | Yes |
| Send Slack DM / Post to Channel | -- | Yes | Yes |
| Apply Coupon / Extend Trial / Add Credit | -- | Yes | Yes |
| Send Webhook | -- | Yes | Yes |
| Send Email | -- | Yes | Yes |
| Run Supabase Query | -- | Yes | Yes |
| Export as PDF | -- | Yes | Yes |
| Share Results | -- | Yes | Yes |
| Set Channel Topic / Invite to Channel | -- | Yes | Yes |
Free plans have access to non-modifying actions that open external dashboards or perform local operations. Pro and Business plans unlock all actions that modify external data or send communications.
Best Practices
Match actions to the skill's purpose. A churn-risk skill should have "Tag in Stripe" and "Send DM," not "Export as CSV." Choose actions that represent the natural next step after seeing the data.
Use meaningful tag values. When configuring "Tag in Stripe," use specific, descriptive tags: churn-risk-jan-2026 is more useful than flagged. Tags accumulate in Stripe metadata, so make them self-documenting.
Pair List output with row actions. The List output type is designed for per-row actions. Each item gets its own set of buttons. If your skill returns actionable items, use List, not Table.
Include Open in Stripe as a fallback. Even if your primary action is "Tag in Stripe," include "Open in Stripe" as a secondary action. It gives users an escape hatch to view the full record when they need more context.
Set reasonable cooldowns on monitor actions. If a monitor fires and the result has actions, team members may click buttons on stale data. Ensure your actions are idempotent -- tagging the same customer twice is fine, applying a coupon twice is not (hence the confirmation dialog).
Related
- Creating a Skill -- configure actions in the skill builder
- Action Buttons -- how action buttons work in Slack
- Formatting Output -- output types that support actions (List, Table)
- Monitors -- actions on alert notifications
- Scheduled Reports -- actions on automated report messages
- AI Skill Generation -- auto-suggested actions
- Plans -- compare action availability across tiers
Was this page helpful?