Actions
Let the agent do things in chat: hand off to a person, call your API, book meetings, look up billing, post to Slack and run your Shopify store.
An action is something the agent can do, not just say: search your store, look up an order, call your own API, book a meeting, post to Slack or hand the chat to your team. Each action has a When to use, written in plain words with two or three example messages. The agent runs the action when a conversation matches, then answers from what came back.
Every action has its own page: its settings on the left and a test chat on the right. The test chat is the real widget, as customers see it. Under each reply, a trace says which actions ran.
Create an action
Open your chatbot, go to Actions, and pick one of two ways to start.
From a template. Templates are grouped by what you want to do: Talk to a person; Links, forms, cards and your API; Book a meeting; Collect information; Notify your team; and Billing. Click one to open it with sensible defaults, then fill in what's yours.

Describe it to Ask AI. Write what you want in a sentence, for example "Look up an order's status from our API". Ask AI asks for anything it needs, such as the API's URL or the Slack channel, and builds the action. You review and apply each change before it's saved.

How many you can have
Your plan sets how many actions, cards and playbooks a chatbot can have, counted together: Free 1, Starter 5, Standard 10, Business and Enterprise 20. Collect leads and the Shopify actions don't count. See Plans & billing.
Talk to a person
Talk to a person is the built-in hand-off. When it runs, the conversation goes to your Helpdesk. If a teammate is available, they answer live in the same chat window the customer is already in. If nobody picks it up in time, it becomes a ticket instead. Nothing is lost either way. It's available on every plan.
Click the Talk to a person template.
Check When to use. The template covers the usual cases: the customer asks for a person, the agent has failed several times, or the customer sounds frustrated.
Choose the channels it's offered on. Website chat and the help page support a live hand-off, and at least one must be selected.
Decide whether live support is on. When it's on, an available teammate can take over in real time. When it's off, every hand-off goes straight to a ticket.
Set the claim window: how long the customer waits for someone before the chat becomes a ticket. The default is 2 minutes, and it can be 15 seconds to 10 minutes.
Optionally add a hand-off message the customer sees while they wait, and up to ten notification emails to alert when a hand-off opens.
There is no button for the customer to click. The agent offers the hand-off in the conversation, so the customer never leaves the chat to fill in a form.
Call your API
Call your API lets the agent answer from your own system: order status, stock, account details, anything your API returns. Click the Call your API template, and set it up in three steps. Nothing is saved until the last one.
Describe. Name the action, write When to use with two or three example messages, and choose where it runs.
Connect. Paste whatever your API docs give you: a URL, a cURL command, or a code snippet in JavaScript, Python or PowerShell. Denser reads the method, URL, headers, query and body from it, and everything it read stays editable. Anything the customer has to provide, such as an order number, becomes an input the agent asks for. Then type a value a customer might give and click Test to see the real response. Next turns on once a test works.
Response. Tick the fields the agent may read, such as a title, price and stock. Nothing else in the response reaches the agent.


Keys stay secret
Put API keys and tokens in headers marked secret. They're stored encrypted and never shown again, not even to Ask AI. A placeholder pasted from docs, such as $API_KEY or <YOUR_TOKEN>, is flagged until you replace it. A request that changes something (POST, PUT, PATCH or DELETE) asks before a test sends it.
Show the answer as a card
To show results as a table or a list instead of text, switch on Show the answer as a card in the Response step, pick a card, and say which field in the response fills each card field. Create a card opens the Cards page in a new tab if you don't have one yet. The agent then answers in a sentence, with the card under it.

Links, forms and cards
- Link button shows a button that opens a URL, such as your pricing page or a sign-up form.
- Custom form shows a form in the chat to collect structured input, such as a quote request. To see entries, open the action's ... menu and select Form submissions.
- Show card shows one of your cards, filled in by the agent from the conversation.
Book a meeting
Book in chat (Cal.com) books a meeting without sending the customer to a booking page. The agent finds open times on your Cal.com calendar, the customer taps one, and the agent books it with their name and email. Cal.com sends the invite, as it would from your booking page.
Click the Book in chat (Cal.com) template.
Paste your Cal.com booking link, such as cal.com/yourname/30min or a team link such as cal.com/team/acme/demo. The event must be public. No API key is needed.
Set the time zone that times are offered and booked in.
Click Show open times to check the link. It lists the next open times exactly as the agent would offer them.

The agent only offers times that are free on your calendar, and books only the time the customer picks. If a customer asks for "next Monday", the agent looks up that day. It asks for a name and email once, and skips the question if the customer already gave them or is on file as a lead. Cal.com's own rules, such as minimum notice and buffers, still apply.
If you'd rather send people to your booking page, the Calendly and Cal.com templates show a booking link instead.
Collect information
- Collect leads shows your lead form, and is where you set its fields and where leads go. See Leads.
- Collect data shows a short form to collect the details a task needs, such as an order number and email.
Look up billing (Stripe)
Look up billing (Stripe) answers billing questions from your own Stripe account: "Can I see my last invoice?", "Did my payment go through?", "When does my plan renew?"
In Stripe, go to Developers → API keys → Create restricted key. Give it read access to Customers, Invoices, Subscriptions and Products, and nothing else.
Click the Look up billing (Stripe) template and paste the key.
Click Check key to confirm it works. It also says whether it's a test or a live key.
Before showing anything, the agent asks for the email the customer is billed at and the number of any invoice they've had. Both must belong to the same Stripe customer. A wrong email gets the same answer as a wrong invoice number, so nobody can test which emails are customers.
Read only, by design
Only restricted keys are accepted; a full secret key is refused. The key is encrypted, never shown again and never seen by Ask AI. The agent can show invoices, payment status, invoice links and the plan's price and renewal date. Refunds, cancellations and plan changes go to your team: the agent offers a hand-off for those.
Notify your team in Slack
Slack message has the agent post to your team's Slack channel, for example when a customer asks for a call back. The message says what the customer wants and how to reach them, with a View the chat link to the conversation.
Connect Slack to the chatbot (Deploy → Slack), and invite the bot to the channel it should post to.
Click the Slack message template and pick the channel from the list. Private channels appear once the bot is added to them.
Click Send a test message to check the bot can post there.

The agent writes the message itself from the conversation, and asks the customer for anything missing, such as a phone number, before it posts. Customers never see the post, only the agent's reply saying it was passed on. The channel is saved by its ID, so renaming it in Slack doesn't break the action.
Shopify actions
Connect your store (Deploy → Shopify) and Actions → Shopify lists the actions your store gives the agent. They read products and orders live from the store, and don't count toward your plan's allowance.

| Action | What it does | Where it runs |
|---|---|---|
| Search products | Finds products, prices and stock | Everywhere |
| Order status | Looks up an order from its number and the checkout email | Everywhere |
| Cancel order, Confirm cancel | Cancels an order that hasn't shipped, once the shopper confirms | Everywhere |
| Request a return, Confirm return | Requests a return for the store to approve, once the shopper confirms | Everywhere |
| Order lookup form | Asks for the order number and email with a short form | Shopify store only |
| My orders | Lists a signed-in shopper's recent orders | Shopify store only |
| View cart, Add to cart, Checkout | The shopper's cart, in the store's own chat | Shopify store only |
Each action has a switch and an Edit for when the agent uses it and on which channels. Cancel order and Request a return are off by default, because they change orders: switch them on when you're ready. Every Shopify action can be tried in the page's test chat before you switch it on.
Built to be safe
An order is shown only when the checkout email matches, and a wrong email gets the same answer as a wrong order number. Cancelling and returning take two steps: the agent shows what would happen, and acts only after the shopper says yes in a later message.
Open a ticket in another help desk
If your team already works in Zendesk, Freshdesk, Intercom or HubSpot, those templates create a ticket there instead of in Denser.
Click the template for your provider.
Connect the account (a Zendesk or Freshdesk subdomain, or an Intercom or HubSpot connection), or pick one you connected before.
Set When to use, for example "When the customer is frustrated or the agent can't resolve the issue."
These create a ticket and end the chat. Talk to a person keeps the customer in the conversation and lets someone answer live. Use a third-party action when the ticket has to live in the system your team already works in.
Test an action
Every action's page has a test chat. Its starters are the example messages from When to use, so one click checks that the agent picks the action.
- The trace under each reply names the action and whether it ran.
- Switch between New visitor and Known lead to see how the agent treats someone with no details on file and someone who already left their details.
- Leads from the test chat are kept out of your Leads page.
Tests run for real
The test chat runs actions for real, as customers would. A Slack test posts to the channel, and a Cal.com test books a meeting. Use a test channel or a test event type.