How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.
Actions give your agent extra capabilities during a conversation: capturing contact details, transferring to a human, or looking up information in external systems such as your online store. Each action is configured independently and can be turned on or off without affecting the rest.
Open an agent’s detail and click the Actions tab (My agents → [your agent] → Actions).The list groups actions into Active and Inactive and shows, for each one, the integration it uses, the channels where it works, and its activity over the last 7 days compared with the previous week. You can filter the list, and each row’s menu has Edit, Duplicate, Test in Playground, and Delete.
Shows a form to capture the visitor’s contact details during the conversation.
Human Handoff
Transfers the conversation to a human agent when the bot considers it necessary.
WooCommerce
Lets the agent look up verified orders, inventory by SKU, and customer data from your WooCommerce store.
Jumpseller
Live price and stock, verified order lookups, building a purchase with cart links, and payment confirmation, from your Jumpseller store. From the Standard plan.
Zendesk Tickets
Creates and looks up verified support tickets in your Zendesk account without leaving the chat. Available only to organizations with the pilot enabled — see details below.
Freshdesk Tickets
Creates tickets in Freshdesk with the visitor’s confirmation and looks up their status in a verified way. Before opening a ticket, it tries to resolve the issue with the knowledge base.
Encuadrado — Scheduling
Checks real availability and creates verified bookings in your Encuadrado clinic calendar.
Send Email
The agent sends an email during the conversation (to your internal team or to the visitor).
Cal.com — Scheduling
The visitor books a meeting from the chat, with a calendar embedded in the web widget. Included in all plans.
Calendly — Scheduling
Same as Cal.com, with the public link of a Calendly event type. Works even with free Calendly.
Google Calendar — Scheduling
Checks your real Google Calendar availability, offers times, and creates the appointment with an invitation to the visitor, only after they confirm. Available from the Standard plan.
Odoo
Syncs leads with your Odoo CRM and, if you have Helpdesk, creates and looks up support tickets. Exclusive to the Premium plan.
HubSpot
Syncs confirmed leads as Contacts in your HubSpot CRM, with optional company and Lead object.
LeadConnector (GoHighLevel)
Creates or updates confirmed contacts in your sub-account, with a tag to trigger workflows and a note with the link to the conversation.
Google Sheets
Adds a row to a Google spreadsheet for each confirmed contact or each Lead Form submission. Included in all plans.
Payment
Builds a cart with items from a closed catalog that you configure and generates the payment link (SumUp, Mercado Pago, Flow, or Wompi) in the chat.
You’ll also see Custom Form, Buttons, and HTTP Request listed as “Coming soon” — they’re planned but don’t have working logic yet. When they become available, this guide will be updated with their steps.
Zendesk Tickets is still in the pilot stage: it appears locked with “Coming soon” in the selector unless ChatNorris has enabled the pilot for your organization. If you need it, write to us at hola@chatnorris.ai. Odoo is available to all organizations, but requires the Premium plan.
The action catalog opens, sorted by category. Each action shows a preview, what it can do, and what it needs (for example, a connected integration or a specific plan). The ones marked “Coming soon” are disabled.
2
Choose the action type
A new instance of that type is created and you’re taken straight to its configuration screen.
3
Give it a name and configure the details
The General section has the action’s name (useful for telling apart several instances of the same type, see below) and the Enabled toggle, which controls whether the agent can use it right now. The remaining sections depend on the action type; the side index lets you jump between them.
4
Save the changes
The save bar saves everything together (name, status, and configuration). Changes apply immediately to new conversations.
To create an action similar to one you already have, use Duplicate in its row’s menu. The copy is created turned off, so you can review it before turning it on.
You can create more than one Lead Form on the same agent (for example, two different Lead Forms for two purposes: one to request a demo and another for support). Human Handoff is unique per agent — it’s always present and can’t be duplicated or deleted. Freshdesk Tickets and Google Calendar — Scheduling also allow only one per agent, and there can be only one active store (WooCommerce or Odoo) looking up orders and stock.To delete an instance you no longer use, open its configuration and click Delete (it asks for confirmation, since it can’t be undone).
The number of actions you can have active per agent depends on your plan:
Plan
Actions per agent
Free
2
Standard
5
Premium
8
When you’re about to create an action and have already reached the limit, the New action selector shows a notice (“You’ve reached your current plan’s action limit”) with a direct link to see the plans, instead of letting you continue. The used/limit counter appears next to the New action button in the Actions list.
A form to capture name, email, phone, or other details you define, without taking the visitor out of the conversation.
Field
What it controls
Mandatory
If on, the visitor must complete the form to keep chatting. If off, they can skip it. There can be only one mandatory, enabled Lead Form per agent.
Detect contact info shared in chat
Passive capture, see the note below.
Fields
List of fields to ask for. With Add field you choose from the Standard fields (for example name, email, phone, company, or postal code, which are saved to the lead’s profile and synced with integrations such as HubSpot), the Custom columns that already exist in your Leads, or a Custom… field with any name you want. Each field can be marked as Required or removed from the list.
When to Use
Free text that tells the agent at what point in the conversation it should show the form (e.g. “when the visitor shows interest in booking a demo”). You can go back to the original text with Restore default text.
Customize Text
Text of the Submit button and an optional Success message shown after submitting (it’s shown exactly as you write it, without being translated into the visitor’s language).
A visitor who already completed the form (in this conversation or a previous one) won’t see it again.
Even if the Lead Form is turned off (or the visitor closes it without completing it), the agent can still recognize contact details the visitor mentions naturally during the chat (“my email is…”, “call me at…”), confirm them with a single question if they’re ambiguous, and save them as a lead — without showing any form. This is called passive capture: it’s on by default and you control it with the action’s Detect contact info shared in chat toggle. It works even if the form is disabled. It doesn’t replace the Lead Form: they’re two independent ways of capturing the same data.
Lead Form on WhatsApp, Instagram, Messenger, Telegram, and Email
Messaging channels don’t have on-screen forms, so the agent completes the Lead Form through conversation:
It asks for one required field per message, in the form’s order, and skips the details it already knows. It never says there’s a form on screen.
It doesn’t ask for optional fields, but if the visitor mentions them, they’re saved.
It takes the visitor’s answer without asking again. If the visitor doesn’t want to give their details, the form is discarded. The offer stays open for up to 24 hours.
When it has all the required fields, it submits the form and, if there’s another Lead Form, starts on that one.
Custom fields are saved to their column by name (for example, “Peugeot” goes to Brand), and a one-word answer to the field that was asked is saved in that field.
In the web widget, if the visitor already gave some details in the chat, the agent saves them and shows the form with those details prefilled; in the channels, it only asks for what’s missing.
If a form field points to a custom column that was deleted from Leads, the editor flags it with a notice: what the visitor answers won’t appear on the lead. Delete the field and add it again from Choose a field…, or use the option the notice offers to point it to the active column.
To turn off the form without losing its configuration, turn off the Action enabled toggle in the General section and save.
Controls when and how the bot transfers the conversation to a human agent. It replaces the previous behavior of automatic detection by a fixed phrase — now it’s configurable.
Field
What it controls
When to Use
Describes when the agent should escalate the conversation (e.g. topics that should trigger escalation, or whether it should try to solve the problem before transferring).
Information to Gather
Details the agent asks the visitor for before transferring them, in a single message and only the missing ones. Name, email, and phone are checked against the contact details already saved. If the visitor doesn’t give them and insists on talking to a person, the transfer happens anyway.
Team that receives the handoff
Optional. Routes this agent’s handoffs to a team: only its members (and Owners/Admins) get the notice and can take the conversation. Without a team, anyone can take it.
First reply target
Time (in seconds) within which you expect someone on the team to answer a handoff. It’s used as a reference in Analytics → Human support and for the unattended handoff alert. If you don’t set it, 3 minutes is used.
Business hours
Optional. See below.
Auto-assign priority (assigning an automatic priority level to the transferred conversation) appears on the screen with the Coming soon label: it’s not available yet. When it launches, it will be exclusive to the Premium plan.
Turn on Hand off only during business hours so the agent only hands off to a person on the days and hours your team is available:
Choose the time zone and, for each day, the From / To hours, or mark it as Closed. If the closing time is earlier than the opening time, the slot ends the next day (useful for night shifts).
Outside those hours, the agent doesn’t transfer: it explains the business hours, tries to resolve the question, and asks for contact details so the team can reply as soon as it’s back.
In After-hours instructions (optional) you can add what else the agent should say or do, for example “For emergencies, call +56 2 1234 5678”.
If the visitor asks to open a ticket or a support case and the agent has an active ticket action (Zendesk, Freshdesk, or Odoo Helpdesk), the agent uses that action instead of transferring to a person.
The same goes for meetings: if the agent has a scheduling action ready (Cal.com, Calendly, Google Calendar, or Encuadrado), asking for a meeting or a call isn’t a handoff, even if the visitor names an account executive or advisor. The agent offers them times. It only transfers if the visitor wants to talk to a person in this chat right now, or if they declined to book and keep asking for a human.
See also Live chat and handoff for how a conversation is handled once it’s transferred.
Connects the agent to a WooCommerce store to answer questions about orders and inventory without leaving the chat.
1
Connect your store from Integrations
WooCommerce credentials (Store URL, Consumer key, and Consumer secret) are no longer entered inside this Action — they’re connected once from Integrations (My agents → [your agent] → Integrations → WooCommerce). If you haven’t connected it yet, this screen takes you straight there. See the full details in Integrations.
2
Choose what data the agent can look up
In Data access:
Orders — status, total, and items of an order, only after verifying the buyer’s identity.
Inventory — product availability by SKU.
Customer data — reserved for future use; we recommend keeping it off for now.
3
Configure order verification
With Order verification on, the agent requires the order number plus at least one of these details before showing information: Billing email, Billing phone, or Billing postal code.
4
Test the connection and enable the action
The connection is tested from Integrations, with Test connection. Once it works, turn on Action enabled in the General section and save.
We recommend Claude Sonnet or higher as the agent’s main model (Settings → AI). The action reveals an order’s data only after verifying it, and in tests Haiku sometimes replies as if the data were already confirmed even when it isn’t. The action’s form shows this notice with a link to the AI settings.
One store per agent. An agent can have only one active store for looking up orders and stock (WooCommerce or Odoo). If you try to enable a second one, ChatNorris asks you to first turn off order and stock lookups on the other. Odoo can stay active for leads and tickets alongside a WooCommerce store.
In the web widget, when the agent detects that the visitor wants an order’s status, it doesn’t ask for the details by text: it shows an embedded form inside the chat with two fields — Order number and Email or phone used for the purchase. The form and the reply are shown in the widget’s language (Spanish, English, or Portuguese), and it’s the same for WooCommerce and Odoo. While the form is pending, the visitor can’t write another message until they complete or cancel it.
If the details match a real order, the agent replies with the status, total, and items.
If they don’t match, the agent says it couldn’t verify the order and asks them to check the number and the contact detail — it never shows unverified information.
On WhatsApp and Instagram (where there are no embedded forms), the agent asks for these same details conversationally, inside the text chat.
Besides looking up orders and inventory in real time, you can bring your product catalog into the knowledge base so the agent answers general questions about products (not just specific availability). From the same WooCommerce configuration screen, or from Knowledge Base → Add source → WooCommerce, click Sync catalog.See the details in Knowledge Base → WooCommerce source.
This action is in the pilot stage: it appears locked as “Coming soon” in the selector unless ChatNorris has enabled the Zendesk Tickets pilot for your organization. If you need it, write to us at hola@chatnorris.ai.
Connects the agent to your Zendesk account to create support tickets and look up their status without leaving the chat.
1
Connect your Zendesk account from Integrations
The connection is made via OAuth (login with your Zendesk account) from Integrations (My agents → [your agent] → Integrations → Zendesk), not with manual credentials inside this Action. It’s the same connection used by the Zendesk knowledge source — see Knowledge Base → Zendesk and Integrations.
2
Define when it should create a ticket
Like the other actions, you have a free-text field When to use this action to tell the agent in which situations it should offer to create a ticket.
3
Configure verification
In Verification to check tickets, the agent asks for and validates the necessary contact details: email is mandatory, and optionally phone too if you turn it on. The agent can only create a ticket after the visitor explicitly confirms they want to — it never creates one automatically in the middle of the chat.
We recommend Claude Sonnet or higher as the agent’s main model (Settings → AI). In tests, Haiku sometimes ignores the confirmation and replies as if the ticket already existed, even though it wasn’t created. The action’s form shows this notice with a link to the AI settings.
For security, the agent can only look up the status of tickets it created itself (not any ticket in your Zendesk account), and always after validating the ticket number together with the verified contact details. These controls are applied on the server side and can’t be relaxed by editing the “when to use” text. If you disconnect and reconnect the same Zendesk account, tickets created earlier can still be looked up.
Ticket actions (Zendesk, Freshdesk, and Odoo Helpdesk) follow a fixed rule, above whatever you write in “When to use”:
If the visitor describes a problem or asks a question without asking for a ticket, the agent answers with the knowledge base. If it can’t resolve it, or the visitor says the answer didn’t help, it offers to create the ticket.
If the visitor asks for a ticket directly, the agent first offers help (with the answer, if it has one, or by asking what’s going on) and asks whether they’d still prefer the ticket.
The ticket is started if the visitor insists, if the agent already tried and didn’t have the information, or if the answer didn’t help.
Looking up the status of an existing ticket doesn’t go through this step. During a ticket flow, the agent also doesn’t offer the Lead Form or a transfer to a person, so as not to confuse the visitor.
Connects the agent to your Freshdesk account to create support tickets and look up their status without leaving the chat. Available from the Standard plan.
1
Connect Freshdesk from Integrations
Go to Integrations (My agents → [your agent] → Integrations → Freshdesk) and enter your account’s subdomain and a Freshdesk agent’s API key. It’s the same connection used by the Freshdesk knowledge source. See Integrations.
2
Choose what it can do
Create tickets — creates a ticket after collecting subject, description, name, and email, and after receiving explicit confirmation from the visitor.
Check status — shows only the subject and status of tickets created by this agent, after verifying the number and the email.
3
Configure verification
The ticket number and the email are always required to look up a ticket. If you turn on Phone, the agent also asks for it when creating the ticket and it must match when looking it up. Email and phone are stored only as a hash, never in plain text.
4
Set the ticket defaults
Choose the Priority (Low, Medium, High, or Urgent) and the Tags (comma-separated) that tickets are created with in Freshdesk.
The agent only creates the ticket with the name and email the visitor wrote in the conversation, and only after showing a summary and receiving an explicit “yes”. There can be only one Freshdesk Tickets action per agent. We recommend Claude Sonnet or higher as the main model: in tests, Haiku sometimes replies as if the ticket already existed without having created it.
Connects the agent to your Encuadrado clinic calendar so it checks real availability and creates verified bookings without leaving the chat.
1
Connect your Encuadrado account from Integrations
Go to Integrations (My agents → [your agent] → Integrations → Encuadrado) and enter your Encuadrado API key. See Integrations.
2
Configure services and hours
Define which services in your calendar the agent should be able to offer.
3
The agent checks availability and books
When a visitor wants to book, the agent checks the real available times and, only after the visitor explicitly confirms, creates the booking. It never books automatically in the middle of the chat.
We recommend Claude Sonnet or higher as the agent’s main model (Settings → AI) when you turn on Create bookings. In tests, Haiku sometimes ignores the confirmation and replies as if the booking were already made. The action’s form shows this notice with a link to the AI settings.
For services that issue a receipt (boleta), the agent validates the patient’s comuna against the official list. Bookings follow Chile’s time zone (America/Santiago).
Lets the agent send an email during the conversation — for example, to alert your internal team about a specific inquiry, or to send the visitor a copy of something they asked for.
1
Define the recipient
It can be a fixed address (for example, your sales team) or a visitor variable (for example, the email they left in the conversation).
2
Define when it should be sent
With the When to use field, tell the agent in which situations it should send the email. In Frequency you choose Whenever applicable or Once per conversation.
3
Choose whether the visitor must confirm before sending
Optionally, you can require the visitor to explicitly confirm before the agent sends the email.
You can create several Send Email actions on the same agent — for example, one to alert sales and another to confirm something to the visitor.
Each successfully sent email uses 1 credit from the email credits balance, separate from AI credits. See AI models and credits. Available in the web widget and in messaging channels; not yet available for integrations via the public API.
Connects the agent to a Cal.com event type so the visitor can book a meeting without leaving the chat.
Cal.com — Scheduling is included in all plans, Free included.
1
Paste your Cal.com event's public link
You only need the public URL of your Cal.com event type (cal.com/... or www.cal.com/...) — no account connection or credentials required.
2
Customize the appearance and messages
You can adjust the layout and theme of the embedded calendar, as well as the success and error messages the visitor sees.
In the web widget and in the Playground, the Cal.com calendar opens embedded inside the conversation. In messaging channels (WhatsApp, Instagram, Telegram, Messenger), the agent shares the event’s direct link.
If the visitor already left their contact details earlier (for example, in a Lead Form or during the chat), the Cal.com booking form is prefilled automatically with those details.
Connects the agent to a Calendly event type so the visitor books a meeting without leaving the chat. Available from the Standard plan.
1
Paste your event type's public link
You only need the event type’s public link (calendly.com/user/event). There’s no account to connect or API key to paste, so it works with any Calendly plan, including the free one.
2
Define when to offer the calendar
In When to use, describe in which situations the agent should offer the calendar (for example, “when they ask for a demo”). The calendar is offered whenever applicable, unless the visitor has already booked in that conversation.
3
Adjust how the calendar looks
Use the widget color — applies your widget’s main color to the calendar buttons.
Hide event details — recommended in the chat: leaves only days and times.
Hide Calendly cookie banner — keeps it from taking up space inside the chat.
4
Customize the post-booking messages
The success message is shown when the visitor finishes booking, and the error message if the calendar doesn’t load.
In the web widget and in the Playground, the Calendly calendar opens embedded inside the conversation, with the visitor’s name and email prefilled if they already confirmed them. On WhatsApp, Instagram, Telegram, Messenger, and Email, the agent shares the event type’s link.
The booking happens in Calendly: ChatNorris doesn’t store the booking data or charge extra credits for scheduling (only the conversation’s AI turn). Calendly keeps sending its usual confirmations and reminders.
If an agent has more than one scheduling action (for example, Cal.com, Calendly, and Google Calendar), it shows a single calendar per reply: the one that best fits what the visitor asked for. Describe clearly in “When to use” what type of meeting each one covers so it picks the right one.
Connects the agent to your Google Calendar so it checks your real availability, offers times to the visitor, and creates the appointment in your calendar without leaving the chat. Unlike Cal.com and Calendly, there’s no external booking page here: ChatNorris calculates the free times with the rules you define and creates the event directly in your calendar.
Google Calendar — Scheduling is available from the Standard plan (not on Free). There can be only one action of this type per agent.
1
Connect your Google account from Integrations
Go to Integrations (My agents → [your agent] → Integrations → Google Calendar) and click Connect with Google. The account’s primary calendar is used. See Integrations.
2
Create the action and define when to use it
In Actions → New action, choose Google Calendar — Scheduling. In When to use, describe when the agent should offer times (for example, “when they want to book an assessment”). The safety rules (don’t make up times, don’t confirm on its own) always apply, even if you edit the text; you can go back to the original text with Restore default text.
3
Configure the hours
In the Availability section you define when appointments can be booked. ChatNorris crosses these hours with what’s already busy in your calendar.
4
Check the preview and enable the action
In Preview, click Show upcoming times to see the times the agent would offer right now with the current configuration (even if you haven’t saved it yet). To enable the action you need the connected account and at least one day with hours.
The Services section is optional. If you offer appointments of different lengths (for example, a 30-minute massage and a 60-minute one), add each service with its length (up to 20 services):
No services: all appointments last what’s set in Appointment length.
With a single service: all appointments use its length and the agent doesn’t ask which one they want.
With two or more services: the agent asks the visitor which service they want and looks for times of that length.
Do not offer times on holidays (on by default): public holidays of the Country are skipped; by default, the country is inferred from the time zone. You can choose another country and a Region (or Whole country). The section shows the upcoming holidays.
Closed days: specific days you’re not open (vacation, inventory, or a new holiday that doesn’t appear on the list yet). Up to 100 days.
If the visitor asks for a closed day or a holiday, the agent tells them that day isn’t available and offers the closest option.
In the Event section you define how the appointment is created:
Event title — by default “Appointment with {{name}}”. Variables: {{name}} (visitor), {{email}}, {{service}} (chosen service), and {{agent}} (agent name).
Add a Google Meet link — the invitation includes a Meet video call.
Confirmation message (optional) — the agent adds it when the appointment is booked; for example, how to get there or what to bring.
The appointment is created in the connected account’s primary calendar, only after the visitor confirms, and Google sends the invitation to their email.
When the conversation matches When to use, the agent checks your real availability and offers free times (always stating the time zone).
The agent asks for the name and email (and the phone, if you turned it on), shows a summary, and waits for an explicit yes from the visitor.
Before creating the appointment, ChatNorris checks again that the time is still free. If someone took it in the meantime, the agent offers new times.
In the web widget, instead of a text list, the visitor sees a day and time picker: they choose a day and a time, fill in their details (prefilled if they already left them in the conversation), and click Book appointment; that button is the confirmation. On WhatsApp, Instagram, Telegram, Messenger, Email, and the API, the agent offers the times as a text list and the visitor confirms in writing.
In the Playground you can test the whole flow, but a real appointment is never created in your calendar.
The details the visitor enters in the widget’s picker are saved as their contact: the lead is created or updated, as with a Lead Form. Appointments booked by the agent appear in Leads, in the Appointment column and in the Appointments section of the lead’s detail, and you can filter leads by Upcoming appointment. If you delete the event in Google Calendar, the appointment shows as canceled when you open the lead.
We recommend Claude Sonnet or higher as the agent’s main model (Settings → AI). The agent must offer only the real times the system provides; smaller models sometimes make up times or treat an appointment as booked when the visitor only seems to agree.
Google Calendar — Scheduling shares the scheduling classifier with Cal.com and Calendly: if an agent has more than one scheduling action, only one per reply is offered, the one that best fits what the visitor asked for. Make their When to use texts clearly distinct so it picks the right one; the form warns you if the agent has several.
If Google revokes access or you disconnect the account, the agent stops offering times and tells the visitor that scheduling isn’t available. Reconnect the account in Integrations to resume it.
This action is exclusive to the Premium plan: on Free or Standard it appears locked as “Coming soon” in the selector. If you need Odoo, check the plans or write to us at hola@chatnorris.ai.
Connects the agent to your Odoo ERP (self-hosted, Odoo.sh, or Online) to sync leads with your CRM and, if you have the Helpdesk module, create and look up support tickets.
1
Connect your Odoo instance from Integrations
Go to Integrations (My agents → [your agent] → Integrations → Odoo) and enter your instance’s URL, the database (auto-detected if your server has only one), your username, and your API key. See Integrations.
2
Turn on the available capabilities
The capabilities you can enable depend on which Odoo modules your instance has installed (detected automatically when you connect):
Capability
What it does
Requires in Odoo
Sync leads to Odoo CRM
Every time a visitor confirms their contact details for the first time, a contact and an opportunity are created automatically in your Odoo CRM.
CRM module
Check order status
The visitor looks up the status of a sales order by giving the order number and the email or phone used for the purchase. In the web widget they do it with the same embedded form as WooCommerce.
Sales module
Create support ticket
The agent can create a support ticket in your Odoo Helpdesk, only after the visitor explicitly confirms.
Helpdesk module (Enterprise or the community version, helpdesk_mgmt)
Check ticket status
The agent can report the status of a ticket it created itself, after verifying the requester’s identity.
Helpdesk module
Check stock and price
The agent searches products and variants in your Odoo and replies with the current sale price and stock, never with knowledge base data.
Sales module (sale)
Build a purchase
The agent builds a list of products from your store with the visitor and, when they want to buy, sends them each product’s link. It doesn’t create orders or charge: the final total, shipping, and payment are handled by your store. Requires turning on Check stock and price first.
Online store module (website_sale)
If your instance doesn’t have the corresponding module installed, that capability appears disabled. For tickets you can choose the Helpdesk’s Assigned team and edit When to create a ticket.
We recommend Claude Sonnet or higher as the agent’s main model (Settings → AI) if you turn on order lookups or tickets. In tests, Haiku sometimes ignores the confirmation and replies as if the ticket had already been created. The action’s form shows this notice with a link to the AI settings.
With Build a purchase on, when the visitor wants to buy they receive a 🛒 block with each line (quantity × product = amount), a 🔗 link to each product’s page in your store, and a reference Total ≈, without shipping. Before sending it, the agent reviews the list: it removes products that are no longer sold, updates prices, and flags those that are out of stock. If a product has no page in your store, the agent tells the visitor to search for it by name.With Check stock and price on (in Odoo, WooCommerce, or another connected store), if the visitor asks for a recommendation without naming a product (“what do you recommend for 5 people?”), the agent checks the live catalog and suggests one or two specific options with their price, avoiding those that are sold out.Cart and payment changes are logged as internal notes in the conversation.
Lead sync happens only once, at the moment the visitor confirms their details for the first time — if they later fill in additional details (for example, add their phone), that data isn’t synced again automatically.
Syncs the leads the agent confirms with your HubSpot CRM, without leaving the chat or exporting anything manually.
1
Connect your HubSpot account from Integrations
Go to Integrations (My agents → [your agent] → Integrations → HubSpot) and paste a HubSpot service key (Development → Keys → Service keys; an existing Private App token also works). See Integrations.
2
Turn on the capabilities you need
The three capabilities are independent but hierarchical — turning on company or Lead requires Sync contact to be on:
Capability
What it does
HubSpot scopes
Sync contact
Creates or updates a Contact in HubSpot every time a visitor’s email is confirmed. New contacts come in with Lead status New; existing ones are never overwritten.
crm.objects.contacts.read and .write
Sync company
Finds or creates the visitor’s company in HubSpot and associates it with the contact, using the lead’s Company property or the “Empresa”/“Company” custom field.
crm.objects.companies.read and .write
Create Lead object
Creates a Lead record in HubSpot associated with the contact, only once per lead. Requires your HubSpot account to have the Leads tool available.
crm.objects.leads.read and .write
The sync repeats every time the agent has the visitor’s email confirmed: HubSpot creates the contact or updates the existing one (looking it up by email), so a phone or name the visitor fills in later also reaches HubSpot. Only the Lead object is created just once per lead. ChatNorris never reads or modifies any other data in your HubSpot account.
Creates or updates the contacts the agent confirms in your LeadConnector / GoHighLevel sub-account. Available from the Standard plan.
1
Connect your sub-account from Integrations
Go to Integrations (My agents → [your agent] → Integrations → LeadConnector) and paste the sub-account’s Private Integration Token and Location ID. See the steps to create the token in Integrations.
2
Choose the capabilities
Capability
What it does
Sync contact
Creates or updates the contact when the visitor confirms their email or phone. LeadConnector checks for duplicates according to your sub-account’s settings. Name and company are only filled in if they’re empty: they’re never overwritten.
Add tag
Adds a tag to the contact (chatnorris by default, editable, up to 50 characters) without removing the ones it already has. Useful for triggering your workflows in LeadConnector.
Conversation note
Adds a note to the contact with the link to the conversation in ChatNorris, only once per lead.
Add tag and Conversation note require Sync contact to be on.
ChatNorris never reads or modifies anything else in your LeadConnector account. Deleting the action doesn’t remove the hub connection.
Generates a payment link inside the chat for a closed catalog of items that you configure — the agent never makes up an amount.
1
Connect SumUp, Mercado Pago, Flow, or Wompi from Integrations
Go to Integrations (My agents → [your agent] → Integrations) and connect at least one of the providers: SumUp (Merchant code + API key), Mercado Pago (Public Key + Access Token), Flow (API Key + Secret Key, for businesses in Chile), or Wompi (four keys, for businesses in Colombia). See Integrations.
2
Choose the payment gateway
In the Action, the Payment gateway field decides which connected provider generates the link. Changing it doesn’t delete the item catalog or the connections — it only decides which one is used.
3
Configure the item catalog
Add each billable item with Add item: name, description (optional), amount, and currency. Currency is per item; the Action’s Currency field only sets the default currency for new items. The agent can only charge the exact amounts configured here.
4
Customize the success message and the return page
The post-payment message is sent in the chat when the provider confirms the charge. The return page (optional) is where the visitor goes after paying; if left empty, they see the provider’s own success screen.
If you have many items, use Import CSV in the catalog. The file’s first row must have the headers; columns are recognized in any order:
Column
Alias
Required?
name
nombre
Yes
amount
monto, precio
Yes (number greater than 0)
description
descripcion
No
currency
moneda
No (if missing, uses the Action’s default currency)
enabled
habilitado
No (if missing, the item is enabled)
Before importing, you see how many items were detected and how many rows were skipped: a row without a name or without a valid amount is discarded; a price is never made up. Imported items are added to the ones you already had.
We recommend using Claude Sonnet or a higher model as the main model on agents with this action. In tests, cheaper models (e.g. Haiku) sometimes confirm a payment or make up a receipt number without having generated any checkout, even with explicit instructions not to.
The agent always asks for explicit confirmation from the visitor before generating the payment link — this can’t be turned off. Charges are processed in your own SumUp, Mercado Pago, Flow, or Wompi account: ChatNorris never receives the money or sees card data; it only generates the link and learns about the confirmation (which it always verifies with the provider before telling the visitor).
The visitor can build a cart with several catalog items in the same conversation: add, change quantities, and remove items, even several changes in a single message (“add one 60 and remove one 45”). The agent shows them the cart with the total and, when the visitor explicitly confirms they want to pay, generates a single payment link for the total.
Prices always come from the Action’s catalog and are revalidated on every turn. If a price changed, the agent asks again for confirmation of the new total.
A cart never mixes currencies.
If the visitor changes the cart in the same message in which they ask to pay, the agent doesn’t generate the link: it first asks them to confirm the new total.
When the payment is confirmed, the cart closes. If the visitor asks again for the link to the same cart, the agent reuses the one that’s still valid.
In the Playground a real payment link is never created.
How the visitor sees it by channel:
Web widget: the cart appears as a Your cart card with each line (quantity × item and subtotal), the Total, and a Pay button with the amount that opens the payment page. If the cart changes, only the most recent card keeps the button.
Telegram and WhatsApp: the payment link arrives as a Pay button below the message, instead of the URL pasted at the end of the text. If sending with the button fails, the agent sends the same message with the link in the text.
Other channels: the link goes in the message text.
Resolved conversation: if a conversation with a confirmed payment is closed due to inactivity and the visitor didn’t write again after paying, it moves to Resolved. The change is applied once a day, so it may show as closed for a few hours.
Where to see payments: in the conversation’s Details, the Payments section appears (only if the conversation has confirmed payments). In Leads you have the Payment column, the Paid filter, and the Payments section in each lead’s panel. See Conversations and Leads.
Items must be in Chilean pesos (CLP), with whole amounts of at least 350 CLP (Flow’s minimum). If any enabled item doesn’t meet these rules, the Action asks you to fix or disable it before turning it on.
Before generating the link, the agent asks for the visitor’s email if it doesn’t have it yet: Flow requires it to send them the receipt. If Flow rejects that email, the agent asks for another one.
The visitor pays on Flow’s page with Webpay (credit, debit, and prepaid), Khipu (transfer), or the other methods you have enabled in your Flow account.
The link expires after 30 minutes; if it expires, the visitor can ask for a new one.
Items must be in Colombian pesos (COP), with whole amounts of at least 1,500 COP. The multi-item cart works the same as with the other providers.
The visitor pays on Wompi’s page with a card, Nequi, Daviplata, PSE, Transferencia Bancolombia, or SU+ Pay, depending on the methods you have enabled in your Wompi account.
The link expires after 30 minutes; if it expires, the visitor can ask for a new one.
For the payment to be confirmed even if the visitor closes the tab, paste the Events URL that ChatNorris shows you when connecting into Wompi (see Integrations → Connect a provider).
Actions that ask for confirmation before doing something real (creating a ticket, a booking, or a charge, or sending an email) accept a clear affirmation at the start of the reply: “sí”, “confirmo”, “es correcto”, “correcto”, “exacto”, “así es”, “perfecto”, “claro”, “está bien”, “listo”, “adelante”, “dale”, among others. If the reply includes “no”, “cancela”, “espera”, or “pero” (for example, “sí, pero cambia el correo” — “yes, but change the email”), it doesn’t count as confirmation and the agent asks again.
Can I have more than one action active at the same time?
Yes, in two ways: you can turn on Lead Form, Human Handoff, and WooCommerce together (they’re independent of each other), and you can also create several Lead Form instances if you need different configurations. The exceptions: Human Handoff and Freshdesk Tickets are unique per agent, and an agent can have only one active store (WooCommerce or Odoo) for looking up orders. The total number of instances you can have is limited by your plan.
What happens to the widget's previous 'lead capture' configuration?
It was migrated automatically to the Lead Form action. If your widget already had lead capture turned on, you’ll find it configured there.
Does Human Handoff keep working if I don't configure anything?
The action comes turned on by default for existing agents, but we recommend filling in When to Use so the escalation criterion is more precise than the previous generic behavior.
Does WooCommerce work with any store?
You need a WooCommerce store with the REST API enabled and credentials (consumer key/secret) generated from the WordPress dashboard. Use Test connection in Integrations to confirm everything is set up correctly.
Does the order lookup form appear on WhatsApp and Instagram too?
No, the embedded form is exclusive to the web widget. On WhatsApp and Instagram the agent asks for the order number and the verification detail conversationally, inside the text chat.
Does the product catalog update on its own?
No. Syncing the catalog to the Knowledge Base is manual — click Sync catalog every time you want to bring in price, stock, or new product changes.
Where are external accounts connected (WooCommerce, Zendesk, Freshdesk, Encuadrado, Google Calendar, Odoo, HubSpot, LeadConnector, SumUp, Mercado Pago, Flow, Wompi)?
They’re all connected from Integrations, a centralized hub per agent — not from each Action’s screen. See Integrations.
Why can't I create a Zendesk Tickets action?
It’s still in the pilot stage: your plan may include it, but ChatNorris has to enable it explicitly for your organization. Write to us at hola@chatnorris.ai if you need it.
Why can't I create an Odoo action?
Odoo is exclusive to the Premium plan — if your organization is on Free or Standard, it doesn’t appear as a creatable option. The rest of the actions with an external provider (Encuadrado, Freshdesk Tickets, Calendly, Google Calendar — Scheduling, HubSpot, LeadConnector, Payment) are available from the Standard plan, with no pilot needed. Cal.com — Scheduling and Send Email work on all plans, Free included (Send Email uses the plan’s email credits).
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ChatNorris","description":"Es una plataforma de software (SaaS) diseñada para la creación, entrenamiento e integración de agentes de inteligencia artificial conversacional. Permite a las empresas conectar sus propias fuentes de conocimiento (documentos, bases de datos, sitios web) con modelos de lenguaje avanzado (LLM) para automatizar la atención al cliente, la calificación de leads y el soporte técnico a través de canales como chat web, WhatsApp, Instagram, Email y APIs REST.","colors":{"primary":"#00684a"},"logo":{"light":"https://mintcdn.com/chatnorris/C7dG5iKgOxsklb8M/logo/CHATNORRIS-13.png?fit=max\u0026auto=format\u0026n=C7dG5iKgOxsklb8M\u0026q=85\u0026s=bc796e7ce8bab6310161819831697d8b","dark":"https://mintcdn.com/chatnorris/C7dG5iKgOxsklb8M/logo/CHATNORRIS-12.png?fit=max\u0026auto=format\u0026n=C7dG5iKgOxsklb8M\u0026q=85\u0026s=cabc011ce5678929a66abcdc51275e61","href":"https://chatnorris.ai"},"favicon":"https://mintcdn.com/chatnorris/HfkbgDl7nYoL6O1U/logo/favicon.ico?fit=max\u0026auto=format\u0026n=HfkbgDl7nYoL6O1U\u0026q=85\u0026s=215355408319eecb3f400994c58b4c12","footer":{"socials":{"website":"https://chatnorris.ai/","instagram":"https://instagram.com/chatnorris.ai","youtube":"https://youtube.com/@chatnorris-ai"}},"integrations":{"ga4":{"measurementId":"G-BMDL4EC90N"}},"styling":{"latex":false},"navigation":{"languages":[{"language":"es","default":true,"navbar":{"primary":{"type":"button","label":"Empezar","href":"https://app.chatnorris.ai/register"}},"href":""},{"language":"en","navbar":{"primary":{"type":"button","label":"Get started","href":"https://app.chatnorris.ai/register"}},"href":"en"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"chatnorris","hasAudioNarration":false,"actualSubdomain":"chatnorris","customDomains":["docs.chatnorris.ai"],"gitSource":{"type":"github","owner":"chatnorris","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"09ab15ba-4b70-4e38-8f4f-14c53b6ded3c","liveDeploymentHistoryId":"6ae67ed462ef36be8862d082","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae67ed462ef36be8862d082"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae67ed462ef36be8862d082","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"es","tag":"API Pública v2","count":23},{"language":"en","tag":"Public API v2","count":23},{"language":"es","tag":"Agentes de IA","count":11},{"language":"en","tag":"AI agents","count":11},{"language":"es","tag":"Agentes","count":7},{"language":"en","tag":"Agents","count":7},{"language":"es","tag":"Base de conocimiento","count":4},{"language":"es","tag":"Conversaciones y Live Chat","count":4},{"language":"es","tag":"Primeros pasos","count":4},{"language":"en","tag":"Knowledge Base","count":4},{"language":"en","tag":"Conversations and live chat","count":4},{"language":"en","tag":"Getting started","count":4},{"language":"es","tag":"Conversaciones","count":3},{"language":"es","tag":"Facturación","count":3},{"language":"es","tag":"Canales","count":3},{"language":"es","tag":"Solución de problemas","count":3},{"language":"en","tag":"Conversations","count":3},{"language":"en","tag":"Billing","count":3},{"language":"en","tag":"Channels","count":3},{"language":"en","tag":"Troubleshooting","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/guias/acciones","slug":"/en/guias/acciones","pageMetadata":{"title":"Agent actions","description":"How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.","href":"/en/guias/acciones"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`agent-actions`,children:`Agent actions`}),`\n`,_jsx(_components.p,{children:`Actions give your agent extra capabilities during a conversation: capturing contact details, transferring to a human, or looking up information in external systems such as your online store. Each action is configured independently and can be turned on or off without affecting the rest.`}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/chatnorris/_RNPg7jBCB9AE-Bf/images/PLACEHOLDER-acciones-lista.png?fit=max\u0026auto=format\u0026n=_RNPg7jBCB9AE-Bf\u0026q=85\u0026s=cf7677e1419e8c461148a3dce99996d9`,alt:`TODO: screenshot of an agent's actions list, with Lead Form and Human Handoff turned on`,\"data-og-width\":`1417`,width:`1417`,\"data-og-height\":`841`,height:`841`,\"data-path\":`images/PLACEHOLDER-acciones-lista.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/chatnorris/_RNPg7jBCB9AE-Bf/images/PLACEHOLDER-acciones-lista.png?w=280\u0026fit=max\u0026auto=format\u0026n=_RNPg7jBCB9AE-Bf\u0026q=85\u0026s=78ca738c7d509c62794185afe9529819 280w, https://mintcdn.com/chatnorris/_RNPg7jBCB9AE-Bf/images/PLACEHOLDER-acciones-lista.png?w=560\u0026fit=max\u0026auto=format\u0026n=_RNPg7jBCB9AE-Bf\u0026q=85\u0026s=60ef85e05f679e9e821f2a42a28649c1 560w, https://mintcdn.com/chatnorris/_RNPg7jBCB9AE-Bf/images/PLACEHOLDER-acciones-lista.png?w=840\u0026fit=max\u0026auto=format\u0026n=_RNPg7jBCB9AE-Bf\u0026q=85\u0026s=5a2dd07ed8e5f2a2619656426ae91cb1 840w, https://mintcdn.com/chatnorris/_RNPg7jBCB9AE-Bf/images/PLACEHOLDER-acciones-lista.png?w=1100\u0026fit=max\u0026auto=format\u0026n=_RNPg7jBCB9AE-Bf\u0026q=85\u0026s=1588ea45c3e6cd807fa44d03fb056df0 1100w, https://mintcdn.com/chatnorris/_RNPg7jBCB9AE-Bf/images/PLACEHOLDER-acciones-lista.png?w=1650\u0026fit=max\u0026auto=format\u0026n=_RNPg7jBCB9AE-Bf\u0026q=85\u0026s=ea654ed43023381e738c10d4a8a18b56 1650w, https://mintcdn.com/chatnorris/_RNPg7jBCB9AE-Bf/images/PLACEHOLDER-acciones-lista.png?w=2500\u0026fit=max\u0026auto=format\u0026n=_RNPg7jBCB9AE-Bf\u0026q=85\u0026s=d3d00af3c1700d373bc4fb6a84f8fbb6 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`where-to-find-them`,children:`Where to find them`}),`\n`,_jsxs(_components.p,{children:[`Open an agent’s detail and click the `,_jsx(_components.strong,{children:`Actions`}),` tab (`,_jsx(_components.code,{children:`My agents → [your agent] → Actions`}),`).`]}),`\n`,_jsxs(_components.p,{children:[`The list groups actions into `,_jsx(_components.strong,{children:`Active`}),` and `,_jsx(_components.strong,{children:`Inactive`}),` and shows, for each one, the integration it uses, the channels where it works, and its activity over the last 7 days compared with the previous week. You can filter the list, and each row’s menu has `,_jsx(_components.strong,{children:`Edit`}),`, `,_jsx(_components.strong,{children:`Duplicate`}),`, `,_jsx(_components.strong,{children:`Test in Playground`}),`, and `,_jsx(_components.strong,{children:`Delete`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`available-actions`,children:`Available actions`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Lead Form`,icon:`clipboard-list`,children:_jsx(_components.p,{children:`Shows a form to capture the visitor’s contact details during the conversation.`})}),_jsx(Card,{title:`Human Handoff`,icon:`headset`,children:_jsx(_components.p,{children:`Transfers the conversation to a human agent when the bot considers it necessary.`})}),_jsx(Card,{title:`WooCommerce`,icon:`cart-shopping`,children:_jsx(_components.p,{children:`Lets the agent look up verified orders, inventory by SKU, and customer data from your WooCommerce store.`})}),_jsx(Card,{title:`Jumpseller`,icon:`bag-shopping`,href:`/en/guias/jumpseller`,children:_jsx(_components.p,{children:`Live price and stock, verified order lookups, building a purchase with cart links, and payment confirmation, from your Jumpseller store. From the Standard plan.`})}),_jsx(Card,{title:`Zendesk Tickets`,icon:`ticket`,children:_jsx(_components.p,{children:`Creates and looks up verified support tickets in your Zendesk account without leaving the chat. Available only to organizations with the pilot enabled — see details below.`})}),_jsx(Card,{title:`Freshdesk Tickets`,icon:`ticket`,children:_jsx(_components.p,{children:`Creates tickets in Freshdesk with the visitor’s confirmation and looks up their status in a verified way. Before opening a ticket, it tries to resolve the issue with the knowledge base.`})}),_jsx(Card,{title:`Encuadrado — Scheduling`,icon:`calendar-check`,children:_jsx(_components.p,{children:`Checks real availability and creates verified bookings in your Encuadrado clinic calendar.`})}),_jsx(Card,{title:`Send Email`,icon:`envelope`,children:_jsx(_components.p,{children:`The agent sends an email during the conversation (to your internal team or to the visitor).`})}),_jsx(Card,{title:`Cal.com — Scheduling`,icon:`calendar`,children:_jsx(_components.p,{children:`The visitor books a meeting from the chat, with a calendar embedded in the web widget. Included in all plans.`})}),_jsx(Card,{title:`Calendly — Scheduling`,icon:`calendar`,children:_jsx(_components.p,{children:`Same as Cal.com, with the public link of a Calendly event type. Works even with free Calendly.`})}),_jsx(Card,{title:`Google Calendar — Scheduling`,icon:`calendar-days`,children:_jsx(_components.p,{children:`Checks your real Google Calendar availability, offers times, and creates the appointment with an invitation to the visitor, only after they confirm. Available from the Standard plan.`})}),_jsx(Card,{title:`Odoo`,icon:`building`,children:_jsx(_components.p,{children:`Syncs leads with your Odoo CRM and, if you have Helpdesk, creates and looks up support tickets. Exclusive to the Premium plan.`})}),_jsx(Card,{title:`HubSpot`,icon:`hubspot`,children:_jsx(_components.p,{children:`Syncs confirmed leads as Contacts in your HubSpot CRM, with optional company and Lead object.`})}),_jsx(Card,{title:`LeadConnector (GoHighLevel)`,icon:`address-book`,children:_jsx(_components.p,{children:`Creates or updates confirmed contacts in your sub-account, with a tag to trigger workflows and a note with the link to the conversation.`})}),_jsx(Card,{title:`Google Sheets`,icon:`table`,href:`/en/guias/google-sheets`,children:_jsx(_components.p,{children:`Adds a row to a Google spreadsheet for each confirmed contact or each Lead Form submission. Included in all plans.`})}),_jsx(Card,{title:`Payment`,icon:`credit-card`,children:_jsx(_components.p,{children:`Builds a cart with items from a closed catalog that you configure and generates the payment link (SumUp, Mercado Pago, Flow, or Wompi) in the chat.`})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`You’ll also see `,_jsx(_components.strong,{children:`Custom Form, Buttons, and HTTP Request`}),` listed as “Coming soon” — they’re planned but don’t have working logic yet. When they become available, this guide will be updated with their steps.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Zendesk Tickets`}),` is still in the pilot stage: it appears locked with “Coming soon” in the selector unless ChatNorris has enabled the pilot for your organization. If you need it, write to us at `,_jsx(_components.a,{href:`mailto:hola@chatnorris.ai`,children:_jsx(_components.strong,{children:`hola@chatnorris.ai`})}),`. `,_jsx(_components.strong,{children:`Odoo`}),` is available to all organizations, but requires the Premium plan.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`turn-on-an-action`,children:`Turn on an action`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Go to Actions and click New action`,children:_jsx(_components.p,{children:`The action catalog opens, sorted by category. Each action shows a preview, what it can do, and what it needs (for example, a connected integration or a specific plan). The ones marked “Coming soon” are disabled.`})}),_jsx(Step,{title:`Choose the action type`,children:_jsx(_components.p,{children:`A new instance of that type is created and you’re taken straight to its configuration screen.`})}),_jsx(Step,{title:`Give it a name and configure the details`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`General`}),` section has the action’s name (useful for telling apart several instances of the same type, see below) and the `,_jsx(_components.strong,{children:`Enabled`}),` toggle, which controls whether the agent can use it right now. The remaining sections depend on the action type; the side index lets you jump between them.`]})}),_jsx(Step,{title:`Save the changes`,children:_jsx(_components.p,{children:`The save bar saves everything together (name, status, and configuration). Changes apply immediately to new conversations.`})})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`To create an action similar to one you already have, use `,_jsx(_components.strong,{children:`Duplicate`}),` in its row’s menu. The copy is created turned off, so you can review it before turning it on.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`several-instances-of-the-same-action-type`,children:`Several instances of the same action type`}),`\n`,_jsxs(_components.p,{children:[`You can create more than one `,_jsx(_components.strong,{children:`Lead Form`}),` on the same agent (for example, two different Lead Forms for two purposes: one to request a demo and another for support). `,_jsx(_components.strong,{children:`Human Handoff`}),` is unique per agent — it’s always present and can’t be duplicated or deleted. `,_jsx(_components.strong,{children:`Freshdesk Tickets`}),` and `,_jsx(_components.strong,{children:`Google Calendar — Scheduling`}),` also allow only one per agent, and there can be only one active store (WooCommerce or Odoo) looking up orders and stock.`]}),`\n`,_jsxs(_components.p,{children:[`To delete an instance you no longer use, open its configuration and click `,_jsx(_components.strong,{children:`Delete`}),` (it asks for confirmation, since it can’t be undone).`]}),`\n`,_jsx(Heading,{level:`3`,id:`action-limit-per-plan`,children:`Action limit per plan`}),`\n`,_jsx(_components.p,{children:`The number of actions you can have active per agent depends on your plan:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Plan`}),_jsx(_components.th,{children:`Actions per agent`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Free`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:`2`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Standard`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:`5`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Premium`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:`8`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`When you’re about to create an action and have already reached the limit, the `,_jsx(_components.strong,{children:`New action`}),` selector shows a notice (“You’ve reached your current plan’s action limit”) with a direct link to see the plans, instead of letting you continue. The `,_jsx(_components.strong,{children:`used/limit`}),` counter appears next to the `,_jsx(_components.strong,{children:`New action`}),` button in the Actions list.`]}),`\n`,_jsx(Heading,{level:`2`,id:`lead-form`,children:`Lead Form`}),`\n`,_jsx(_components.p,{children:`A form to capture name, email, phone, or other details you define, without taking the visitor out of the conversation.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it controls`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Mandatory`})}),_jsx(_components.td,{children:`If on, the visitor must complete the form to keep chatting. If off, they can skip it. There can be only one mandatory, enabled Lead Form per agent.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Detect contact info shared in chat`})}),_jsx(_components.td,{children:`Passive capture, see the note below.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Fields`})}),_jsxs(_components.td,{children:[`List of fields to ask for. With `,_jsx(_components.strong,{children:`Add field`}),` you choose from the `,_jsx(_components.strong,{children:`Standard fields`}),` (for example name, email, phone, company, or postal code, which are saved to the lead’s profile and synced with integrations such as HubSpot), the `,_jsx(_components.strong,{children:`Custom columns`}),` that already exist in your `,_jsx(_components.a,{href:`/en/guias/leads`,children:`Leads`}),`, or a `,_jsx(_components.strong,{children:`Custom…`}),` field with any name you want. Each field can be marked as `,_jsx(_components.strong,{children:`Required`}),` or removed from the list.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`When to Use`})}),_jsxs(_components.td,{children:[`Free text that tells the agent at what point in the conversation it should show the form (e.g. “when the visitor shows interest in booking a demo”). You can go back to the original text with `,_jsx(_components.strong,{children:`Restore default text`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Customize Text`})}),_jsxs(_components.td,{children:[`Text of the `,_jsx(_components.strong,{children:`Submit button`}),` and an optional `,_jsx(_components.strong,{children:`Success message`}),` shown after submitting (it’s shown exactly as you write it, without being translated into the visitor’s language).`]})]})]})]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`A visitor who already completed the form (in this conversation or a previous one) won’t see it again.`})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Even if the Lead Form is turned off (or the visitor closes it without completing it), the agent can still recognize contact details the visitor mentions naturally during the chat (“my email is…”, “call me at…”), confirm them with a single question if they’re ambiguous, and save them as a lead — without showing any form. This is called `,_jsx(_components.strong,{children:`passive capture`}),`: it’s on by default and you control it with the action’s `,_jsx(_components.strong,{children:`Detect contact info shared in chat`}),` toggle. It works even if the form is disabled. It doesn’t replace the Lead Form: they’re two independent ways of capturing the same data.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`lead-form-on-whatsapp-instagram-messenger-telegram-and-email`,children:`Lead Form on WhatsApp, Instagram, Messenger, Telegram, and Email`}),`\n`,_jsx(_components.p,{children:`Messaging channels don’t have on-screen forms, so the agent completes the Lead Form through conversation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`It asks for `,_jsx(_components.strong,{children:`one required field per message`}),`, in the form’s order, and skips the details it already knows. It never says there’s a form on screen.`]}),`\n`,_jsx(_components.li,{children:`It doesn’t ask for optional fields, but if the visitor mentions them, they’re saved.`}),`\n`,_jsx(_components.li,{children:`It takes the visitor’s answer without asking again. If the visitor doesn’t want to give their details, the form is discarded. The offer stays open for up to 24 hours.`}),`\n`,_jsx(_components.li,{children:`When it has all the required fields, it submits the form and, if there’s another Lead Form, starts on that one.`}),`\n`,_jsxs(_components.li,{children:[`Custom fields are saved to their column by name (for example, “Peugeot” goes to `,_jsx(_components.strong,{children:`Brand`}),`), and a one-word answer to the field that was asked is saved in that field.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`In the web widget, if the visitor already gave some details in the chat, the agent saves them and shows the form with those details prefilled; in the channels, it only asks for what’s missing.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`If a form field points to a custom column that was deleted from Leads, the editor flags it with a notice: what the visitor answers won’t appear on the lead. Delete the field and add it again from `,_jsx(_components.strong,{children:`Choose a field…`}),`, or use the option the notice offers to point it to the active column.`]})}),`\n`,_jsxs(_components.p,{children:[`To turn off the form without losing its configuration, turn off the `,_jsx(_components.strong,{children:`Action enabled`}),` toggle in the `,_jsx(_components.strong,{children:`General`}),` section and save.`]}),`\n`,_jsx(Heading,{level:`2`,id:`human-handoff`,children:`Human Handoff`}),`\n`,_jsx(_components.p,{children:`Controls when and how the bot transfers the conversation to a human agent. It replaces the previous behavior of automatic detection by a fixed phrase — now it’s configurable.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`What it controls`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`When to Use`})}),_jsx(_components.td,{children:`Describes when the agent should escalate the conversation (e.g. topics that should trigger escalation, or whether it should try to solve the problem before transferring).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Information to Gather`})}),_jsx(_components.td,{children:`Details the agent asks the visitor for before transferring them, in a single message and only the missing ones. Name, email, and phone are checked against the contact details already saved. If the visitor doesn’t give them and insists on talking to a person, the transfer happens anyway.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Team that receives the handoff`})}),_jsxs(_components.td,{children:[`Optional. Routes this agent’s handoffs to a `,_jsx(_components.a,{href:`/en/guias/equipo#teams-per-agent`,children:`team`}),`: only its members (and Owners/Admins) get the notice and can take the conversation. Without a team, anyone can take it.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`First reply target`})}),_jsxs(_components.td,{children:[`Time (in seconds) within which you expect someone on the team to answer a handoff. It’s used as a reference in `,_jsx(_components.strong,{children:`Analytics → Human support`}),` and for the `,_jsx(_components.a,{href:`/en/guias/notificaciones#unattended-handoff`,children:`unattended handoff`}),` alert. If you don’t set it, 3 minutes is used.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Business hours`})}),_jsx(_components.td,{children:`Optional. See below.`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Auto-assign priority`}),` (assigning an automatic priority level to the transferred conversation) appears on the screen with the `,_jsx(_components.strong,{children:`Coming soon`}),` label: it’s not available yet. When it launches, it will be exclusive to the Premium plan.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`business-hours`,children:`Business hours`}),`\n`,_jsxs(_components.p,{children:[`Turn on `,_jsx(_components.strong,{children:`Hand off only during business hours`}),` so the agent only hands off to a person on the days and hours your team is available:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Choose the `,_jsx(_components.strong,{children:`time zone`}),` and, for each day, the `,_jsx(_components.strong,{children:`From / To`}),` hours, or mark it as `,_jsx(_components.strong,{children:`Closed`}),`. If the closing time is earlier than the opening time, the slot ends the next day (useful for night shifts).`]}),`\n`,_jsxs(_components.li,{children:[`Outside those hours, the agent `,_jsx(_components.strong,{children:`doesn’t transfer`}),`: it explains the business hours, tries to resolve the question, and asks for contact details so the team can reply as soon as it’s back.`]}),`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`After-hours instructions`}),` (optional) you can add what else the agent should say or do, for example “For emergencies, call +56 2 1234 5678”.`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`If the visitor asks to open a ticket or a support case and the agent has an active ticket action (Zendesk, Freshdesk, or Odoo Helpdesk), the agent uses that action instead of transferring to a person.`})}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`The same goes for meetings: if the agent has a scheduling action ready (Cal.com, Calendly, Google Calendar, or Encuadrado), asking for a meeting or a call isn’t a handoff, even if the visitor names an account executive or advisor. The agent offers them times. It only transfers if the visitor wants to talk to a person in this chat right now, or if they declined to book and keep asking for a human.`})}),`\n`,_jsxs(_components.p,{children:[`See also `,_jsx(_components.a,{href:`/en/guias/chat-en-vivo-handoff`,children:`Live chat and handoff`}),` for how a conversation is handled once it’s transferred.`]}),`\n`,_jsx(Heading,{level:`2`,id:`woocommerce`,children:`WooCommerce`}),`\n`,_jsx(_components.p,{children:`Connects the agent to a WooCommerce store to answer questions about orders and inventory without leaving the chat.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect your store from Integrations`,children:_jsxs(_components.p,{children:[`WooCommerce credentials (Store URL, Consumer key, and Consumer secret) are no longer entered inside this Action — they’re connected once from `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations → WooCommerce`}),`). If you haven’t connected it yet, this screen takes you straight there. See the full details in `,_jsx(_components.a,{href:`/en/guias/integraciones`,children:`Integrations`}),`.`]})}),_jsxs(Step,{title:`Choose what data the agent can look up`,children:[_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Data access`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Orders`}),` — status, total, and items of an order, only after verifying the buyer’s identity.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Inventory`}),` — product availability by SKU.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Customer data`}),` — reserved for future use; we recommend keeping it off for now.`]}),`\n`]})]}),_jsx(Step,{title:`Configure order verification`,children:_jsxs(_components.p,{children:[`With `,_jsx(_components.strong,{children:`Order verification`}),` on, the agent requires the order number plus at least one of these details before showing information: `,_jsx(_components.strong,{children:`Billing email`}),`, `,_jsx(_components.strong,{children:`Billing phone`}),`, or `,_jsx(_components.strong,{children:`Billing postal code`}),`.`]})}),_jsx(Step,{title:`Test the connection and enable the action`,children:_jsxs(_components.p,{children:[`The connection is tested from `,_jsx(_components.strong,{children:`Integrations`}),`, with `,_jsx(_components.strong,{children:`Test connection`}),`. Once it works, turn on `,_jsx(_components.strong,{children:`Action enabled`}),` in the `,_jsx(_components.strong,{children:`General`}),` section and save.`]})})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`We recommend Claude Sonnet or higher`}),` as the agent’s main model (`,_jsx(_components.strong,{children:`Settings → AI`}),`). The action reveals an order’s data only after verifying it, and in tests Haiku sometimes replies as if the data were already confirmed even when it isn’t. The action’s form shows this notice with a link to the AI settings.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`One store per agent.`}),` An agent can have only one active store for looking up orders and stock (WooCommerce or Odoo). If you try to enable a second one, ChatNorris asks you to first turn off order and stock lookups on the other. Odoo can stay active for leads and tickets alongside a WooCommerce store.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`how-the-visitor-looks-up-an-order`,children:`How the visitor looks up an order`}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`web widget`}),`, when the agent detects that the visitor wants an order’s status, it doesn’t ask for the details by text: it shows an `,_jsx(_components.strong,{children:`embedded form`}),` inside the chat with two fields — `,_jsx(_components.strong,{children:`Order number`}),` and `,_jsx(_components.strong,{children:`Email or phone used for the purchase`}),`. The form and the reply are shown in the widget’s language (Spanish, English, or Portuguese), and it’s the same for WooCommerce and Odoo. While the form is pending, the visitor can’t write another message until they complete or cancel it.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`If the details match a real order, the agent replies with the status, total, and items.`}),`\n`,_jsx(_components.li,{children:`If they don’t match, the agent says it couldn’t verify the order and asks them to check the number and the contact detail — it never shows unverified information.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`On `,_jsx(_components.strong,{children:`WhatsApp`}),` and `,_jsx(_components.strong,{children:`Instagram`}),` (where there are no embedded forms), the agent asks for these same details conversationally, inside the text chat.`]}),`\n`,_jsx(Heading,{level:`3`,id:`sync-your-product-catalog-to-the-knowledge-base`,children:`Sync your product catalog to the Knowledge Base`}),`\n`,_jsxs(_components.p,{children:[`Besides looking up orders and inventory in real time, you can bring your product catalog into the knowledge base so the agent answers general questions about products (not just specific availability). From the same WooCommerce configuration screen, or from `,_jsx(_components.strong,{children:`Knowledge Base → Add source → WooCommerce`}),`, click `,_jsx(_components.strong,{children:`Sync catalog`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`See the details in `,_jsx(_components.a,{href:`/en/guias/knowledge-base#woocommerce`,children:`Knowledge Base → WooCommerce source`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`zendesk-tickets`,children:`Zendesk Tickets`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`This action is in the pilot stage: it appears locked as “Coming soon” in the selector unless ChatNorris has enabled the Zendesk Tickets pilot for your organization. If you need it, write to us at `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`mailto:hola@chatnorris.ai`,children:`hola@chatnorris.ai`})}),`.`]})}),`\n`,_jsx(_components.p,{children:`Connects the agent to your Zendesk account to create support tickets and look up their status without leaving the chat.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect your Zendesk account from Integrations`,children:_jsxs(_components.p,{children:[`The connection is made via OAuth (login with your Zendesk account) from `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations → Zendesk`}),`), not with manual credentials inside this Action. It’s the same connection used by the Zendesk knowledge source — see `,_jsx(_components.a,{href:`/en/guias/knowledge-base#zendesk`,children:`Knowledge Base → Zendesk`}),` and `,_jsx(_components.a,{href:`/en/guias/integraciones`,children:`Integrations`}),`.`]})}),_jsx(Step,{title:`Define when it should create a ticket`,children:_jsxs(_components.p,{children:[`Like the other actions, you have a free-text field `,_jsx(_components.strong,{children:`When to use this action`}),` to tell the agent in which situations it should offer to create a ticket.`]})}),_jsx(Step,{title:`Configure verification`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Verification to check tickets`}),`, the agent asks for and validates the necessary contact details: email is mandatory, and optionally phone too if you turn it on. The agent can only create a ticket after the visitor explicitly confirms they want to — it never creates one automatically in the middle of the chat.`]})})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`We recommend Claude Sonnet or higher`}),` as the agent’s main model (`,_jsx(_components.strong,{children:`Settings → AI`}),`). In tests, Haiku sometimes ignores the confirmation and replies as if the ticket already existed, even though it wasn’t created. The action’s form shows this notice with a link to the AI settings.`]})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`For security, the agent can only look up the status of tickets it created itself (not any ticket in your Zendesk account), and always after validating the ticket number together with the verified contact details. These controls are applied on the server side and can’t be relaxed by editing the “when to use” text. If you disconnect and reconnect the same Zendesk account, tickets created earlier can still be looked up.`})}),`\n`,_jsx(Heading,{level:`3`,id:`resolve-first-then-the-ticket`,children:`Resolve first, then the ticket`}),`\n`,_jsx(_components.p,{children:`Ticket actions (Zendesk, Freshdesk, and Odoo Helpdesk) follow a fixed rule, above whatever you write in “When to use”:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`If the visitor describes a problem or asks a question `,_jsx(_components.strong,{children:`without asking for a ticket`}),`, the agent answers with the knowledge base. If it can’t resolve it, or the visitor says the answer didn’t help, it offers to create the ticket.`]}),`\n`,_jsxs(_components.li,{children:[`If the visitor `,_jsx(_components.strong,{children:`asks for a ticket directly`}),`, the agent first offers help (with the answer, if it has one, or by asking what’s going on) and asks whether they’d still prefer the ticket.`]}),`\n`,_jsx(_components.li,{children:`The ticket is started if the visitor insists, if the agent already tried and didn’t have the information, or if the answer didn’t help.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Looking up the status of an existing ticket doesn’t go through this step. During a ticket flow, the agent also doesn’t offer the Lead Form or a transfer to a person, so as not to confuse the visitor.`}),`\n`,_jsx(Heading,{level:`2`,id:`freshdesk-tickets`,children:`Freshdesk Tickets`}),`\n`,_jsxs(_components.p,{children:[`Connects the agent to your `,_jsx(_components.strong,{children:`Freshdesk`}),` account to create support tickets and look up their status without leaving the chat. Available from the Standard plan.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect Freshdesk from Integrations`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations → Freshdesk`}),`) and enter your account’s subdomain and a Freshdesk agent’s API key. It’s the same connection used by the `,_jsx(_components.a,{href:`/en/guias/knowledge-base#freshdesk`,children:`Freshdesk knowledge source`}),`. See `,_jsx(_components.a,{href:`/en/guias/integraciones`,children:`Integrations`}),`.`]})}),_jsx(Step,{title:`Choose what it can do`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Create tickets`}),` — creates a ticket after collecting subject, description, name, and email, and after receiving explicit confirmation from the visitor.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Check status`}),` — shows only the subject and status of tickets created by this agent, after verifying the number and the email.`]}),`\n`]})}),_jsx(Step,{title:`Configure verification`,children:_jsxs(_components.p,{children:[`The ticket number and the email are always required to look up a ticket. If you turn on `,_jsx(_components.strong,{children:`Phone`}),`, the agent also asks for it when creating the ticket and it must match when looking it up. Email and phone are stored only as a hash, never in plain text.`]})}),_jsx(Step,{title:`Set the ticket defaults`,children:_jsxs(_components.p,{children:[`Choose the `,_jsx(_components.strong,{children:`Priority`}),` (Low, Medium, High, or Urgent) and the `,_jsx(_components.strong,{children:`Tags`}),` (comma-separated) that tickets are created with in Freshdesk.`]})})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The agent only creates the ticket with the name and email the visitor wrote in the conversation, and only after showing a summary and receiving an explicit “yes”. There can be only one Freshdesk Tickets action per agent. We recommend Claude Sonnet or higher as the main model: in tests, Haiku sometimes replies as if the ticket already existed without having created it.`})}),`\n`,_jsx(Heading,{level:`2`,id:`encuadrado-—-scheduling`,children:`Encuadrado — Scheduling`}),`\n`,_jsxs(_components.p,{children:[`Connects the agent to your `,_jsx(_components.strong,{children:`Encuadrado`}),` clinic calendar so it checks real availability and creates verified bookings without leaving the chat.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect your Encuadrado account from Integrations`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations → Encuadrado`}),`) and enter your Encuadrado API key. See `,_jsx(_components.a,{href:`/en/guias/integraciones`,children:`Integrations`}),`.`]})}),_jsx(Step,{title:`Configure services and hours`,children:_jsx(_components.p,{children:`Define which services in your calendar the agent should be able to offer.`})}),_jsx(Step,{title:`The agent checks availability and books`,children:_jsxs(_components.p,{children:[`When a visitor wants to book, the agent checks the real available times and, only after the visitor `,_jsx(_components.strong,{children:`explicitly confirms`}),`, creates the booking. It never books automatically in the middle of the chat.`]})})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`We recommend Claude Sonnet or higher`}),` as the agent’s main model (`,_jsx(_components.strong,{children:`Settings → AI`}),`) when you turn on `,_jsx(_components.strong,{children:`Create bookings`}),`. In tests, Haiku sometimes ignores the confirmation and replies as if the booking were already made. The action’s form shows this notice with a link to the AI settings.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`For services that issue a receipt (boleta), the agent validates the patient’s comuna against the official list. Bookings follow Chile’s time zone (`,_jsx(_components.code,{children:`America/Santiago`}),`).`]})}),`\n`,_jsx(Heading,{level:`2`,id:`send-email`,children:`Send Email`}),`\n`,_jsx(_components.p,{children:`Lets the agent send an email during the conversation — for example, to alert your internal team about a specific inquiry, or to send the visitor a copy of something they asked for.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Define the recipient`,children:_jsx(_components.p,{children:`It can be a fixed address (for example, your sales team) or a visitor variable (for example, the email they left in the conversation).`})}),_jsx(Step,{title:`Define when it should be sent`,children:_jsxs(_components.p,{children:[`With the `,_jsx(_components.strong,{children:`When to use`}),` field, tell the agent in which situations it should send the email. In `,_jsx(_components.strong,{children:`Frequency`}),` you choose `,_jsx(_components.strong,{children:`Whenever applicable`}),` or `,_jsx(_components.strong,{children:`Once per conversation`}),`.`]})}),_jsx(Step,{title:`Choose whether the visitor must confirm before sending`,children:_jsx(_components.p,{children:`Optionally, you can require the visitor to explicitly confirm before the agent sends the email.`})})]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`You can create several Send Email actions on the same agent — for example, one to alert sales and another to confirm something to the visitor.`})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Each successfully sent email uses 1 credit from the `,_jsx(_components.strong,{children:`email credits`}),` balance, separate from AI credits. See `,_jsx(_components.a,{href:`/en/guias/modelos-ia-creditos#email-credits`,children:`AI models and credits`}),`. Available in the web widget and in messaging channels; not yet available for integrations via the public API.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`cal-com-—-scheduling`,children:`Cal.com — Scheduling`}),`\n`,_jsxs(_components.p,{children:[`Connects the agent to a `,_jsx(_components.strong,{children:`Cal.com`}),` event type so the visitor can book a meeting without leaving the chat.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Cal.com — Scheduling is included in `,_jsx(_components.strong,{children:`all plans`}),`, Free included.`]})}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Paste your Cal.com event's public link`,children:_jsxs(_components.p,{children:[`You only need the public URL of your Cal.com event type (`,_jsx(_components.code,{children:`cal.com/...`}),` or `,_jsx(_components.code,{children:`www.cal.com/...`}),`) — no account connection or credentials required.`]})}),_jsx(Step,{title:`Customize the appearance and messages`,children:_jsx(_components.p,{children:`You can adjust the layout and theme of the embedded calendar, as well as the success and error messages the visitor sees.`})})]}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`web widget`}),` and in the `,_jsx(_components.strong,{children:`Playground`}),`, the Cal.com calendar opens embedded inside the conversation. In messaging channels (WhatsApp, Instagram, Telegram, Messenger), the agent shares the event’s direct link.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`If the visitor already left their contact details earlier (for example, in a Lead Form or during the chat), the Cal.com booking form is prefilled automatically with those details.`})}),`\n`,_jsx(Heading,{level:`2`,id:`calendly-—-scheduling`,children:`Calendly — Scheduling`}),`\n`,_jsxs(_components.p,{children:[`Connects the agent to a `,_jsx(_components.strong,{children:`Calendly`}),` event type so the visitor books a meeting without leaving the chat. Available from the Standard plan.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Paste your event type's public link`,children:_jsxs(_components.p,{children:[`You only need the event type’s public link (`,_jsx(_components.code,{children:`calendly.com/user/event`}),`). There’s no account to connect or API key to paste, so it `,_jsx(_components.strong,{children:`works with any Calendly plan, including the free one`}),`.`]})}),_jsx(Step,{title:`Define when to offer the calendar`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`When to use`}),`, describe in which situations the agent should offer the calendar (for example, “when they ask for a demo”). The calendar is offered whenever applicable, unless the visitor has already booked in that conversation.`]})}),_jsx(Step,{title:`Adjust how the calendar looks`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Use the widget color`}),` — applies your widget’s main color to the calendar buttons.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Hide event details`}),` — recommended in the chat: leaves only days and times.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Hide Calendly cookie banner`}),` — keeps it from taking up space inside the chat.`]}),`\n`]})}),_jsx(Step,{title:`Customize the post-booking messages`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`success message`}),` is shown when the visitor finishes booking, and the `,_jsx(_components.strong,{children:`error message`}),` if the calendar doesn’t load.`]})})]}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`web widget`}),` and in the `,_jsx(_components.strong,{children:`Playground`}),`, the Calendly calendar opens embedded inside the conversation, with the visitor’s name and email prefilled if they already confirmed them. On WhatsApp, Instagram, Telegram, Messenger, and Email, the agent shares the event type’s link.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The booking happens in Calendly: ChatNorris doesn’t store the booking data or charge extra credits for scheduling (only the conversation’s AI turn). Calendly keeps sending its usual confirmations and reminders.`})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`If an agent has more than one scheduling action (for example, Cal.com, Calendly, and Google Calendar), it shows `,_jsx(_components.strong,{children:`a single calendar per reply`}),`: the one that best fits what the visitor asked for. Describe clearly in “When to use” what type of meeting each one covers so it picks the right one.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`google-calendar-—-scheduling`,children:`Google Calendar — Scheduling`}),`\n`,_jsxs(_components.p,{children:[`Connects the agent to your `,_jsx(_components.strong,{children:`Google Calendar`}),` so it checks your real availability, offers times to the visitor, and creates the appointment in your calendar without leaving the chat. Unlike Cal.com and Calendly, there’s no external booking page here: ChatNorris calculates the free times with the rules you define and creates the event directly in your calendar.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Google Calendar — Scheduling is available from the `,_jsx(_components.strong,{children:`Standard`}),` plan (not on Free). There can be only one action of this type per agent.`]})}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect your Google account from Integrations`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations → Google Calendar`}),`) and click `,_jsx(_components.strong,{children:`Connect with Google`}),`. The account’s `,_jsx(_components.strong,{children:`primary calendar`}),` is used. See `,_jsx(_components.a,{href:`/en/guias/integraciones#connect-a-provider`,children:`Integrations`}),`.`]})}),_jsx(Step,{title:`Create the action and define when to use it`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Actions → New action`}),`, choose Google Calendar — Scheduling. In `,_jsx(_components.strong,{children:`When to use`}),`, describe when the agent should offer times (for example, “when they want to book an assessment”). The safety rules (don’t make up times, don’t confirm on its own) always apply, even if you edit the text; you can go back to the original text with `,_jsx(_components.strong,{children:`Restore default text`}),`.`]})}),_jsx(Step,{title:`Configure the hours`,children:_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Availability`}),` section you define when appointments can be booked. ChatNorris crosses these hours with what’s already busy in your calendar.`]})}),_jsx(Step,{title:`Check the preview and enable the action`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Preview`}),`, click `,_jsx(_components.strong,{children:`Show upcoming times`}),` to see the times the agent would offer right now with the current configuration (even if you haven’t saved it yet). To enable the action you need the connected account and at least one day with hours.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`configuration-options`,children:`Configuration options`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Option`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Time zone`})}),_jsxs(_components.td,{children:[`By default, `,_jsx(_components.strong,{children:`the calendar’s`}),` time zone. You can choose another one.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Hours per day`}),` (Monday to Sunday)`]}),_jsxs(_components.td,{children:[`For each day, `,_jsx(_components.strong,{children:`from`}),` and `,_jsx(_components.strong,{children:`to`}),`, or `,_jsx(_components.strong,{children:`No appointments`}),`. By default: Monday to Friday from 09:00 to 18:00.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Appointment length`})}),_jsx(_components.td,{children:`How long each appointment lasts (30 min by default). Hidden if you add services.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Buffer between appointments`})}),_jsx(_components.td,{children:`Free time before and after each appointment and your other events (0 to 60 min).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Minimum notice`})}),_jsxs(_components.td,{children:[`How far in advance an appointment can be booked (from `,_jsx(_components.strong,{children:`No notice`}),` up to 48 h; 2 h by default).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Days ahead`})}),_jsx(_components.td,{children:`Up to how many days from today an appointment can be booked (1 to 60; 14 by default).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Start times every`})}),_jsx(_components.td,{children:`How often a possible time starts: 15, 30, or 60 min (09:00, 09:30…).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Slots offered`})}),_jsx(_components.td,{children:`How many times the agent shows at once (3 to 8), spread across days.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Ask for phone`})}),_jsx(_components.td,{children:`Besides the name and email (always asked, because that’s where the invitation goes), the agent asks for a contact phone number.`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`services-with-different-lengths`,children:`Services with different lengths`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Services`}),` section is optional. If you offer appointments of different lengths (for example, a 30-minute massage and a 60-minute one), add each service with its length (up to 20 services):`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No services`}),`: all appointments last what’s set in `,_jsx(_components.strong,{children:`Appointment length`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`With a single service`}),`: all appointments use its length and the agent doesn’t ask which one they want.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`With two or more services`}),`: the agent asks the visitor which service they want and looks for times of that length.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`holidays-and-closed-days`,children:`Holidays and closed days`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Do not offer times on holidays`}),` (on by default): public holidays of the `,_jsx(_components.strong,{children:`Country`}),` are skipped; by default, the country is inferred from the time zone. You can choose another country and a `,_jsx(_components.strong,{children:`Region`}),` (or `,_jsx(_components.strong,{children:`Whole country`}),`). The section shows the `,_jsx(_components.strong,{children:`upcoming holidays`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Closed days`}),`: specific days you’re not open (vacation, inventory, or a new holiday that doesn’t appear on the list yet). Up to 100 days.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`If the visitor asks for a closed day or a holiday, the agent tells them that day isn’t available and offers the closest option.`}),`\n`,_jsx(Heading,{level:`3`,id:`the-event-in-your-calendar`,children:`The event in your calendar`}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Event`}),` section you define how the appointment is created:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Event title`}),` — by default “Appointment with {{name}}”. Variables: `,_jsx(_components.code,{children:`{{name}}`}),` (visitor), `,_jsx(_components.code,{children:`{{email}}`}),`, `,_jsx(_components.code,{children:`{{service}}`}),` (chosen service), and `,_jsx(_components.code,{children:`{{agent}}`}),` (agent name).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Add a Google Meet link`}),` — the invitation includes a Meet video call.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Confirmation message (optional)`}),` — the agent adds it when the appointment is booked; for example, how to get there or what to bring.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The appointment is created in the connected account’s primary calendar, `,_jsx(_components.strong,{children:`only after the visitor confirms`}),`, and Google sends the invitation to their email.`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-the-visitor-books`,children:`How the visitor books`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`When the conversation matches `,_jsx(_components.strong,{children:`When to use`}),`, the agent checks your real availability and offers free times (always stating the time zone).`]}),`\n`,_jsxs(_components.li,{children:[`The agent asks for the name and email (and the phone, if you turned it on), shows a summary, and waits for an `,_jsx(_components.strong,{children:`explicit yes`}),` from the visitor.`]}),`\n`,_jsx(_components.li,{children:`Before creating the appointment, ChatNorris checks again that the time is still free. If someone took it in the meantime, the agent offers new times.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`web widget`}),`, instead of a text list, the visitor sees a `,_jsx(_components.strong,{children:`day and time picker`}),`: they choose a day and a time, fill in their details (prefilled if they already left them in the conversation), and click `,_jsx(_components.strong,{children:`Book appointment`}),`; that button is the confirmation. On `,_jsx(_components.strong,{children:`WhatsApp, Instagram, Telegram, Messenger, Email`}),`, and the API, the agent offers the times as a text list and the visitor confirms in writing.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Playground`}),` you can test the whole flow, but `,_jsx(_components.strong,{children:`a real appointment is never created`}),` in your calendar.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The details the visitor enters in the widget’s picker are saved as their contact: the `,_jsx(_components.strong,{children:`lead`}),` is created or updated, as with a Lead Form. Appointments booked by the agent appear in `,_jsx(_components.strong,{children:`Leads`}),`, in the `,_jsx(_components.strong,{children:`Appointment`}),` column and in the `,_jsx(_components.strong,{children:`Appointments`}),` section of the lead’s detail, and you can filter leads by `,_jsx(_components.strong,{children:`Upcoming appointment`}),`. If you delete the event in Google Calendar, the appointment shows as canceled when you open the lead.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`We recommend Claude Sonnet or higher`}),` as the agent’s main model (`,_jsx(_components.strong,{children:`Settings → AI`}),`). The agent must offer only the real times the system provides; smaller models sometimes make up times or treat an appointment as booked when the visitor only seems to agree.`]})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Google Calendar — Scheduling shares the scheduling classifier with Cal.com and Calendly: if an agent has more than one scheduling action, `,_jsx(_components.strong,{children:`only one per reply`}),` is offered, the one that best fits what the visitor asked for. Make their `,_jsx(_components.strong,{children:`When to use`}),` texts clearly distinct so it picks the right one; the form warns you if the agent has several.`]})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`If Google revokes access or you disconnect the account, the agent stops offering times and tells the visitor that scheduling isn’t available. Reconnect the account in Integrations to resume it.`})}),`\n`,_jsx(Heading,{level:`2`,id:`odoo`,children:`Odoo`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`This action is `,_jsx(_components.strong,{children:`exclusive to the Premium plan`}),`: on Free or Standard it appears locked as “Coming soon” in the selector. If you need Odoo, check the `,_jsx(_components.a,{href:`/en/guias/modelos-ia-creditos`,children:`plans`}),` or write to us at `,_jsx(_components.a,{href:`mailto:hola@chatnorris.ai`,children:_jsx(_components.strong,{children:`hola@chatnorris.ai`})}),`.`]})}),`\n`,_jsxs(_components.p,{children:[`Connects the agent to your `,_jsx(_components.strong,{children:`Odoo`}),` ERP (self-hosted, Odoo.sh, or Online) to sync leads with your CRM and, if you have the Helpdesk module, create and look up support tickets.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect your Odoo instance from Integrations`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations → Odoo`}),`) and enter your instance’s URL, the database (auto-detected if your server has only one), your username, and your API key. See `,_jsx(_components.a,{href:`/en/guias/integraciones`,children:`Integrations`}),`.`]})}),_jsxs(Step,{title:`Turn on the available capabilities`,children:[_jsx(_components.p,{children:`The capabilities you can enable depend on which Odoo modules your instance has installed (detected automatically when you connect):`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Capability`}),_jsx(_components.th,{children:`What it does`}),_jsx(_components.th,{children:`Requires in Odoo`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Sync leads to Odoo CRM`})}),_jsx(_components.td,{children:`Every time a visitor confirms their contact details for the first time, a contact and an opportunity are created automatically in your Odoo CRM.`}),_jsx(_components.td,{children:`CRM module`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Check order status`})}),_jsx(_components.td,{children:`The visitor looks up the status of a sales order by giving the order number and the email or phone used for the purchase. In the web widget they do it with the same embedded form as WooCommerce.`}),_jsx(_components.td,{children:`Sales module`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Create support ticket`})}),_jsx(_components.td,{children:`The agent can create a support ticket in your Odoo Helpdesk, only after the visitor explicitly confirms.`}),_jsxs(_components.td,{children:[`Helpdesk module (Enterprise or the community version, `,_jsx(_components.code,{children:`helpdesk_mgmt`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Check ticket status`})}),_jsx(_components.td,{children:`The agent can report the status of a ticket it created itself, after verifying the requester’s identity.`}),_jsx(_components.td,{children:`Helpdesk module`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Check stock and price`})}),_jsx(_components.td,{children:`The agent searches products and variants in your Odoo and replies with the current sale price and stock, never with knowledge base data.`}),_jsxs(_components.td,{children:[`Sales module (`,_jsx(_components.code,{children:`sale`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Build a purchase`})}),_jsxs(_components.td,{children:[`The agent builds a list of products from your store with the visitor and, when they want to buy, sends them each product’s link. It doesn’t create orders or charge: the final total, shipping, and payment are handled by your store. Requires turning on `,_jsx(_components.strong,{children:`Check stock and price`}),` first.`]}),_jsxs(_components.td,{children:[`Online store module (`,_jsx(_components.code,{children:`website_sale`}),`)`]})]})]})]}),_jsxs(_components.p,{children:[`If your instance doesn’t have the corresponding module installed, that capability appears disabled. For tickets you can choose the Helpdesk’s `,_jsx(_components.strong,{children:`Assigned team`}),` and edit `,_jsx(_components.strong,{children:`When to create a ticket`}),`.`]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`We recommend Claude Sonnet or higher`}),` as the agent’s main model (`,_jsx(_components.strong,{children:`Settings → AI`}),`) if you turn on order lookups or tickets. In tests, Haiku sometimes ignores the confirmation and replies as if the ticket had already been created. The action’s form shows this notice with a link to the AI settings.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`shopping-list-with-links-to-your-store`,children:`Shopping list with links to your store`}),`\n`,_jsxs(_components.p,{children:[`With `,_jsx(_components.strong,{children:`Build a purchase`}),` on, when the visitor wants to buy they receive a 🛒 block with each line (quantity × product = amount), a 🔗 link to each product’s page in your store, and a reference `,_jsx(_components.strong,{children:`Total ≈`}),`, without shipping. Before sending it, the agent reviews the list: it removes products that are no longer sold, updates prices, and flags those that are out of stock. If a product has no page in your store, the agent tells the visitor to search for it by name.`]}),`\n`,_jsxs(_components.p,{children:[`With `,_jsx(_components.strong,{children:`Check stock and price`}),` on (in Odoo, WooCommerce, or another connected store), if the visitor asks for a recommendation without naming a product (“what do you recommend for 5 people?”), the agent checks the live catalog and suggests one or two specific options with their price, avoiding those that are sold out.`]}),`\n`,_jsxs(_components.p,{children:[`Cart and payment changes are logged as `,_jsx(_components.a,{href:`/en/guias/conversaciones#internal-cart-notes`,children:`internal notes`}),` in the conversation.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Lead sync happens only once, at the moment the visitor confirms their details for the first time — if they later fill in additional details (for example, add their phone), that data isn’t synced again automatically.`})}),`\n`,_jsx(Heading,{level:`2`,id:`hubspot`,children:`HubSpot`}),`\n`,_jsxs(_components.p,{children:[`Syncs the leads the agent confirms with your `,_jsx(_components.strong,{children:`HubSpot`}),` CRM, without leaving the chat or exporting anything manually.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect your HubSpot account from Integrations`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations → HubSpot`}),`) and paste a HubSpot service key (Development → Keys → Service keys; an existing Private App token also works). See `,_jsx(_components.a,{href:`/en/guias/integraciones`,children:`Integrations`}),`.`]})}),_jsxs(Step,{title:`Turn on the capabilities you need`,children:[_jsxs(_components.p,{children:[`The three capabilities are independent but hierarchical — turning on company or Lead requires `,_jsx(_components.strong,{children:`Sync contact`}),` to be on:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Capability`}),_jsx(_components.th,{children:`What it does`}),_jsx(_components.th,{children:`HubSpot scopes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Sync contact`})}),_jsxs(_components.td,{children:[`Creates or updates a Contact in HubSpot every time a visitor’s email is confirmed. New contacts come in with Lead status `,_jsx(_components.strong,{children:`New`}),`; existing ones are never overwritten.`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`crm.objects.contacts.read`}),` and `,_jsx(_components.code,{children:`.write`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Sync company`})}),_jsx(_components.td,{children:`Finds or creates the visitor’s company in HubSpot and associates it with the contact, using the lead’s Company property or the “Empresa”/“Company” custom field.`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`crm.objects.companies.read`}),` and `,_jsx(_components.code,{children:`.write`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Create Lead object`})}),_jsx(_components.td,{children:`Creates a Lead record in HubSpot associated with the contact, only once per lead. Requires your HubSpot account to have the Leads tool available.`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`crm.objects.leads.read`}),` and `,_jsx(_components.code,{children:`.write`})]})]})]})]})]})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The sync repeats every time the agent has the visitor’s email confirmed: HubSpot creates the contact or updates the existing one (looking it up by email), so a phone or name the visitor fills in later also reaches HubSpot. Only the Lead object is created just once per lead. ChatNorris never reads or modifies any other data in your HubSpot account.`})}),`\n`,_jsx(Heading,{level:`2`,id:`leadconnector-gohighlevel`,children:`LeadConnector (GoHighLevel)`}),`\n`,_jsxs(_components.p,{children:[`Creates or updates the contacts the agent confirms in your `,_jsx(_components.strong,{children:`LeadConnector / GoHighLevel`}),` sub-account. Available from the Standard plan.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect your sub-account from Integrations`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations → LeadConnector`}),`) and paste the sub-account’s Private Integration Token and Location ID. See the steps to create the token in `,_jsx(_components.a,{href:`/en/guias/integraciones#connect-a-provider`,children:`Integrations`}),`.`]})}),_jsxs(Step,{title:`Choose the capabilities`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Capability`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Sync contact`})}),_jsx(_components.td,{children:`Creates or updates the contact when the visitor confirms their email or phone. LeadConnector checks for duplicates according to your sub-account’s settings. Name and company are only filled in if they’re empty: they’re never overwritten.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Add tag`})}),_jsxs(_components.td,{children:[`Adds a tag to the contact (`,_jsx(_components.code,{children:`chatnorris`}),` by default, editable, up to 50 characters) without removing the ones it already has. Useful for triggering your workflows in LeadConnector.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Conversation note`})}),_jsx(_components.td,{children:`Adds a note to the contact with the link to the conversation in ChatNorris, only once per lead.`})]})]})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Add tag`}),` and `,_jsx(_components.strong,{children:`Conversation note`}),` require `,_jsx(_components.strong,{children:`Sync contact`}),` to be on.`]})]})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`ChatNorris never reads or modifies anything else in your LeadConnector account. Deleting the action doesn’t remove the hub connection.`})}),`\n`,_jsx(Heading,{level:`2`,id:`payment`,children:`Payment`}),`\n`,_jsx(_components.p,{children:`Generates a payment link inside the chat for a closed catalog of items that you configure — the agent never makes up an amount.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect SumUp, Mercado Pago, Flow, or Wompi from Integrations`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Integrations`}),` (`,_jsx(_components.code,{children:`My agents → [your agent] → Integrations`}),`) and connect at least one of the providers: `,_jsx(_components.strong,{children:`SumUp`}),` (Merchant code + API key), `,_jsx(_components.strong,{children:`Mercado Pago`}),` (Public Key + Access Token), `,_jsx(_components.strong,{children:`Flow`}),` (API Key + Secret Key, for businesses in Chile), or `,_jsx(_components.strong,{children:`Wompi`}),` (four keys, for businesses in Colombia). See `,_jsx(_components.a,{href:`/en/guias/integraciones`,children:`Integrations`}),`.`]})}),_jsx(Step,{title:`Choose the payment gateway`,children:_jsxs(_components.p,{children:[`In the Action, the `,_jsx(_components.strong,{children:`Payment gateway`}),` field decides which connected provider generates the link. Changing it doesn’t delete the item catalog or the connections — it only decides which one is used.`]})}),_jsx(Step,{title:`Configure the item catalog`,children:_jsxs(_components.p,{children:[`Add each billable item with `,_jsx(_components.strong,{children:`Add item`}),`: name, description (optional), amount, and currency. Currency is per item; the Action’s `,_jsx(_components.strong,{children:`Currency`}),` field only sets the default currency for new items. The agent can `,_jsx(_components.strong,{children:`only`}),` charge the exact amounts configured here.`]})}),_jsx(Step,{title:`Customize the success message and the return page`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`post-payment message`}),` is sent in the chat when the provider confirms the charge. The `,_jsx(_components.strong,{children:`return page`}),` (optional) is where the visitor goes after paying; if left empty, they see the provider’s own success screen.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`import-items-from-a-csv`,children:`Import items from a CSV`}),`\n`,_jsxs(_components.p,{children:[`If you have many items, use `,_jsx(_components.strong,{children:`Import CSV`}),` in the catalog. The file’s first row must have the headers; columns are recognized in any order:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Column`}),_jsx(_components.th,{children:`Alias`}),_jsx(_components.th,{children:`Required?`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`name`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`nombre`})}),_jsx(_components.td,{children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`amount`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`monto`}),`, `,_jsx(_components.code,{children:`precio`})]}),_jsx(_components.td,{children:`Yes (number greater than 0)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`description`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`descripcion`})}),_jsx(_components.td,{children:`No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`currency`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`moneda`})}),_jsx(_components.td,{children:`No (if missing, uses the Action’s default currency)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`enabled`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`habilitado`})}),_jsx(_components.td,{children:`No (if missing, the item is enabled)`})]})]})]}),`\n`,_jsx(_components.p,{children:`Before importing, you see how many items were detected and how many rows were skipped: a row without a name or without a valid amount is discarded; a price is never made up. Imported items are added to the ones you already had.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`We recommend using Claude Sonnet or a higher model as the main model on agents with this action. In tests, cheaper models (e.g. Haiku) sometimes confirm a payment or make up a receipt number without having generated any checkout, even with explicit instructions not to.`})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The agent always asks for explicit confirmation from the visitor before generating the payment link — this can’t be turned off. Charges are processed in your own SumUp, Mercado Pago, Flow, or Wompi account: ChatNorris never receives the money or sees card data; it only generates the link and learns about the confirmation (which it always verifies with the provider before telling the visitor).`})}),`\n`,_jsx(Heading,{level:`3`,id:`cart-several-items-in-one-charge`,children:`Cart: several items in one charge`}),`\n`,_jsxs(_components.p,{children:[`The visitor can build a cart with several catalog items in the same conversation: add, change quantities, and remove items, even several changes in a single message (“add one 60 and remove one 45”). The agent shows them the cart with the total and, when the visitor explicitly confirms they want to pay, generates `,_jsx(_components.strong,{children:`a single payment link for the total`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Prices always come from the Action’s catalog and are revalidated on every turn. If a price changed, the agent asks again for confirmation of the new total.`}),`\n`,_jsx(_components.li,{children:`A cart never mixes currencies.`}),`\n`,_jsx(_components.li,{children:`If the visitor changes the cart in the same message in which they ask to pay, the agent doesn’t generate the link: it first asks them to confirm the new total.`}),`\n`,_jsx(_components.li,{children:`When the payment is confirmed, the cart closes. If the visitor asks again for the link to the same cart, the agent reuses the one that’s still valid.`}),`\n`,_jsx(_components.li,{children:`In the Playground a real payment link is never created.`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`How the visitor sees it by channel:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Web widget:`}),` the cart appears as a `,_jsx(_components.strong,{children:`Your cart`}),` card with each line (quantity × item and subtotal), the `,_jsx(_components.strong,{children:`Total`}),`, and a `,_jsx(_components.strong,{children:`Pay`}),` button with the amount that opens the payment page. If the cart changes, only the most recent card keeps the button.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Telegram and WhatsApp:`}),` the payment link arrives as a `,_jsx(_components.strong,{children:`Pay`}),` button below the message, instead of the URL pasted at the end of the text. If sending with the button fails, the agent sends the same message with the link in the text.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Other channels:`}),` the link goes in the message text.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`after-the-payment`,children:`After the payment`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Resolved conversation:`}),` if a conversation with a confirmed payment is closed due to inactivity and the visitor didn’t write again after paying, it moves to `,_jsx(_components.strong,{children:`Resolved`}),`. The change is applied once a day, so it may show as closed for a few hours.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Where to see payments:`}),` in the conversation’s Details, the `,_jsx(_components.strong,{children:`Payments`}),` section appears (only if the conversation has confirmed payments). In Leads you have the `,_jsx(_components.strong,{children:`Payment`}),` column, the `,_jsx(_components.strong,{children:`Paid`}),` filter, and the `,_jsx(_components.strong,{children:`Payments`}),` section in each lead’s panel. See `,_jsx(_components.a,{href:`/en/guias/conversaciones`,children:`Conversations`}),` and `,_jsx(_components.a,{href:`/en/guias/leads`,children:`Leads`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`payments-with-flow-chile`,children:`Payments with Flow (Chile)`}),`\n`,_jsxs(_components.p,{children:[`If you choose `,_jsx(_components.strong,{children:`Flow`}),` as the gateway:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Items must be in `,_jsx(_components.strong,{children:`Chilean pesos (CLP)`}),`, with whole amounts of at least `,_jsx(_components.strong,{children:`350 CLP`}),` (Flow’s minimum). If any enabled item doesn’t meet these rules, the Action asks you to fix or disable it before turning it on.`]}),`\n`,_jsxs(_components.li,{children:[`Before generating the link, the agent asks for the visitor’s `,_jsx(_components.strong,{children:`email`}),` if it doesn’t have it yet: Flow requires it to send them the receipt. If Flow rejects that email, the agent asks for another one.`]}),`\n`,_jsxs(_components.li,{children:[`The visitor pays on Flow’s page with `,_jsx(_components.strong,{children:`Webpay`}),` (credit, debit, and prepaid), `,_jsx(_components.strong,{children:`Khipu`}),` (transfer), or the other methods you have enabled in your Flow account.`]}),`\n`,_jsx(_components.li,{children:`The link expires after 30 minutes; if it expires, the visitor can ask for a new one.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`payments-with-wompi-colombia`,children:`Payments with Wompi (Colombia)`}),`\n`,_jsxs(_components.p,{children:[`If you choose `,_jsx(_components.strong,{children:`Wompi`}),` as the gateway:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Items must be in `,_jsx(_components.strong,{children:`Colombian pesos (COP)`}),`, with whole amounts of at least `,_jsx(_components.strong,{children:`1,500 COP`}),`. The multi-item cart works the same as with the other providers.`]}),`\n`,_jsxs(_components.li,{children:[`The visitor pays on Wompi’s page with a card, `,_jsx(_components.strong,{children:`Nequi`}),`, `,_jsx(_components.strong,{children:`Daviplata`}),`, `,_jsx(_components.strong,{children:`PSE`}),`, `,_jsx(_components.strong,{children:`Transferencia Bancolombia`}),`, or `,_jsx(_components.strong,{children:`SU+ Pay`}),`, depending on the methods you have enabled in your Wompi account.`]}),`\n`,_jsx(_components.li,{children:`The link expires after 30 minutes; if it expires, the visitor can ask for a new one.`}),`\n`,_jsxs(_components.li,{children:[`For the payment to be confirmed even if the visitor closes the tab, paste the `,_jsx(_components.strong,{children:`Events URL`}),` that ChatNorris shows you when connecting into Wompi (see `,_jsx(_components.a,{href:`/en/guias/integraciones#connect-a-provider`,children:`Integrations → Connect a provider`}),`).`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`visitor-confirmations`,children:`Visitor confirmations`}),`\n`,_jsx(_components.p,{children:`Actions that ask for confirmation before doing something real (creating a ticket, a booking, or a charge, or sending an email) accept a clear affirmation at the start of the reply: “sí”, “confirmo”, “es correcto”, “correcto”, “exacto”, “así es”, “perfecto”, “claro”, “está bien”, “listo”, “adelante”, “dale”, among others. If the reply includes “no”, “cancela”, “espera”, or “pero” (for example, “sí, pero cambia el correo” — “yes, but change the email”), it doesn’t count as confirmation and the agent asks again.`}),`\n`,_jsx(Heading,{level:`2`,id:`frequently-asked-questions`,children:`Frequently asked questions`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Can I have more than one action active at the same time?`,id:`can-i-have-more-than-one-action-active-at-the-same-time`,children:_jsx(_components.p,{children:`Yes, in two ways: you can turn on Lead Form, Human Handoff, and WooCommerce together (they’re independent of each other), and you can also create several Lead Form instances if you need different configurations. The exceptions: Human Handoff and Freshdesk Tickets are unique per agent, and an agent can have only one active store (WooCommerce or Odoo) for looking up orders. The total number of instances you can have is limited by your plan.`})}),_jsx(Accordion,{title:`What happens to the widget's previous 'lead capture' configuration?`,id:`what-happens-to-the-widgets-previous-lead-capture-configuration`,children:_jsxs(_components.p,{children:[`It was migrated automatically to the `,_jsx(_components.strong,{children:`Lead Form`}),` action. If your widget already had lead capture turned on, you’ll find it configured there.`]})}),_jsx(Accordion,{title:`Does Human Handoff keep working if I don't configure anything?`,id:`does-human-handoff-keep-working-if-i-dont-configure-anything`,children:_jsxs(_components.p,{children:[`The action comes turned on by default for existing agents, but we recommend filling in `,_jsx(_components.strong,{children:`When to Use`}),` so the escalation criterion is more precise than the previous generic behavior.`]})}),_jsx(Accordion,{title:`Does WooCommerce work with any store?`,id:`does-woocommerce-work-with-any-store`,children:_jsxs(_components.p,{children:[`You need a WooCommerce store with the REST API enabled and credentials (consumer key/secret) generated from the WordPress dashboard. Use `,_jsx(_components.strong,{children:`Test connection`}),` in Integrations to confirm everything is set up correctly.`]})}),_jsx(Accordion,{title:`Does the order lookup form appear on WhatsApp and Instagram too?`,id:`does-the-order-lookup-form-appear-on-whatsapp-and-instagram-too`,children:_jsx(_components.p,{children:`No, the embedded form is exclusive to the web widget. On WhatsApp and Instagram the agent asks for the order number and the verification detail conversationally, inside the text chat.`})}),_jsx(Accordion,{title:`Does the product catalog update on its own?`,id:`does-the-product-catalog-update-on-its-own`,children:_jsxs(_components.p,{children:[`No. Syncing the catalog to the Knowledge Base is manual — click `,_jsx(_components.strong,{children:`Sync catalog`}),` every time you want to bring in price, stock, or new product changes.`]})}),_jsx(Accordion,{title:`Where are external accounts connected (WooCommerce, Zendesk, Freshdesk, Encuadrado, Google Calendar, Odoo, HubSpot, LeadConnector, SumUp, Mercado Pago, Flow, Wompi)?`,id:`where-are-external-accounts-connected-woocommerce-zendesk-freshdesk-encuadrado-google-calendar-odoo-hubspot-leadconnector-sumup-mercado-pago-flow-wompi`,children:_jsxs(_components.p,{children:[`They’re all connected from `,_jsx(_components.strong,{children:`Integrations`}),`, a centralized hub per agent — not from each Action’s screen. See `,_jsx(_components.a,{href:`/en/guias/integraciones`,children:`Integrations`}),`.`]})}),_jsx(Accordion,{title:`Why can't I create a Zendesk Tickets action?`,id:`why-cant-i-create-a-zendesk-tickets-action`,children:_jsxs(_components.p,{children:[`It’s still in the pilot stage: your plan may include it, but ChatNorris has to enable it explicitly for your organization. Write to us at `,_jsx(_components.a,{href:`mailto:hola@chatnorris.ai`,children:`hola@chatnorris.ai`}),` if you need it.`]})}),_jsx(Accordion,{title:`Why can't I create an Odoo action?`,id:`why-cant-i-create-an-odoo-action`,children:_jsx(_components.p,{children:`Odoo is exclusive to the Premium plan — if your organization is on Free or Standard, it doesn’t appear as a creatable option. The rest of the actions with an external provider (Encuadrado, Freshdesk Tickets, Calendly, Google Calendar — Scheduling, HubSpot, LeadConnector, Payment) are available from the Standard plan, with no pilot needed. Cal.com — Scheduling and Send Email work on all plans, Free included (Send Email uses the plan’s email credits).`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Agent actions","description":"How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.","href":"/en/guias/acciones"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Agent actions","slug":"agent-actions","depth":1,"children":[]},{"title":"Where to find them","slug":"where-to-find-them","depth":2,"children":[]},{"title":"Available actions","slug":"available-actions","depth":2,"children":[]},{"title":"Turn on an action","slug":"turn-on-an-action","depth":2,"children":[{"title":"Several instances of the same action type","slug":"several-instances-of-the-same-action-type","depth":3,"children":[]},{"title":"Action limit per plan","slug":"action-limit-per-plan","depth":3,"children":[]}]},{"title":"Lead Form","slug":"lead-form","depth":2,"children":[{"title":"Lead Form on WhatsApp, Instagram, Messenger, Telegram, and Email","slug":"lead-form-on-whatsapp-instagram-messenger-telegram-and-email","depth":3,"children":[]}]},{"title":"Human Handoff","slug":"human-handoff","depth":2,"children":[{"title":"Business hours","slug":"business-hours","depth":3,"children":[]}]},{"title":"WooCommerce","slug":"woocommerce","depth":2,"children":[{"title":"How the visitor looks up an order","slug":"how-the-visitor-looks-up-an-order","depth":3,"children":[]},{"title":"Sync your product catalog to the Knowledge Base","slug":"sync-your-product-catalog-to-the-knowledge-base","depth":3,"children":[]}]},{"title":"Zendesk Tickets","slug":"zendesk-tickets","depth":2,"children":[{"title":"Resolve first, then the ticket","slug":"resolve-first-then-the-ticket","depth":3,"children":[]}]},{"title":"Freshdesk Tickets","slug":"freshdesk-tickets","depth":2,"children":[]},{"title":"Encuadrado — Scheduling","slug":"encuadrado-—-scheduling","depth":2,"children":[]},{"title":"Send Email","slug":"send-email","depth":2,"children":[]},{"title":"Cal.com — Scheduling","slug":"cal-com-—-scheduling","depth":2,"children":[]},{"title":"Calendly — Scheduling","slug":"calendly-—-scheduling","depth":2,"children":[]},{"title":"Google Calendar — Scheduling","slug":"google-calendar-—-scheduling","depth":2,"children":[{"title":"Configuration options","slug":"configuration-options","depth":3,"children":[]},{"title":"Services with different lengths","slug":"services-with-different-lengths","depth":3,"children":[]},{"title":"Holidays and closed days","slug":"holidays-and-closed-days","depth":3,"children":[]},{"title":"The event in your calendar","slug":"the-event-in-your-calendar","depth":3,"children":[]},{"title":"How the visitor books","slug":"how-the-visitor-books","depth":3,"children":[]}]},{"title":"Odoo","slug":"odoo","depth":2,"children":[{"title":"Shopping list with links to your store","slug":"shopping-list-with-links-to-your-store","depth":3,"children":[]}]},{"title":"HubSpot","slug":"hubspot","depth":2,"children":[]},{"title":"LeadConnector (GoHighLevel)","slug":"leadconnector-gohighlevel","depth":2,"children":[]},{"title":"Payment","slug":"payment","depth":2,"children":[{"title":"Import items from a CSV","slug":"import-items-from-a-csv","depth":3,"children":[]},{"title":"Cart: several items in one charge","slug":"cart-several-items-in-one-charge","depth":3,"children":[]},{"title":"After the payment","slug":"after-the-payment","depth":3,"children":[]},{"title":"Payments with Flow (Chile)","slug":"payments-with-flow-chile","depth":3,"children":[]},{"title":"Payments with Wompi (Colombia)","slug":"payments-with-wompi-colombia","depth":3,"children":[]}]},{"title":"Visitor confirmations","slug":"visitor-confirmations","depth":2,"children":[]},{"title":"Frequently asked questions","slug":"frequently-asked-questions","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"chatnorris","siteName":"ChatNorris","title":"Agent actions - ChatNorris","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"es":{"href":"/guias/acciones","matchLevel":1},"en":{"href":"/en/guias/acciones","matchLevel":0}}},"lastModified":"2026-10-31T23:50:50.184Z","originalFileLocation":"en/guias/acciones.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ChatNorris\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Agent actions - ChatNorris\">\u003cmeta data-mint-head property=\"og:description\" content=\"How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ChatNorris\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.chatnorris.ai/en/guias/acciones\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://chatnorris.mintlify.app/_mintlify/api/og/v2?division=AI+agents\u0026amp;title=Agent+actions\u0026amp;description=How+to+configure+Lead+Form%2C+Human+Handoff%2C+WooCommerce%2C+Zendesk+and+Freshdesk+Tickets%2C+Cal.com%2C+Calendly+and+Google+Calendar%2C+HubSpot%2C+LeadConnector%2C+Payment+%28S\u0026amp;theme=7ea039df46d46592821da886\u0026amp;signature=e4d4601cb4a048a7b8cce41d9e9335daa9b366d5250385ec30c22c8365173322\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Agent actions - ChatNorris\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://chatnorris.mintlify.app/_mintlify/api/og/v2?division=AI+agents\u0026amp;title=Agent+actions\u0026amp;description=How+to+configure+Lead+Form%2C+Human+Handoff%2C+WooCommerce%2C+Zendesk+and+Freshdesk+Tickets%2C+Cal.com%2C+Calendly+and+Google+Calendar%2C+HubSpot%2C+LeadConnector%2C+Payment+%28S\u0026amp;theme=7ea039df46d46592821da886\u0026amp;signature=e4d4601cb4a048a7b8cce41d9e9335daa9b366d5250385ec30c22c8365173322\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/chatnorris/HS18VnAMMck2xfaq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ChatNorris\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00684a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.chatnorris.ai/en/guias/acciones\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/guias/acciones.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.chatnorris.ai/en/guias/acciones\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.chatnorris.ai/guias/acciones\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.chatnorris.ai/guias/acciones\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.chatnorris.ai/#organization\",\"name\":\"ChatNorris\",\"url\":\"https://docs.chatnorris.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/chatnorris/C7dG5iKgOxsklb8M/logo/CHATNORRIS-13.png?fit=max\u0026auto=format\u0026n=C7dG5iKgOxsklb8M\u0026q=85\u0026s=bc796e7ce8bab6310161819831697d8b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.chatnorris.ai#website\",\"name\":\"ChatNorris\",\"url\":\"https://docs.chatnorris.ai\",\"publisher\":{\"@id\":\"https://docs.chatnorris.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.chatnorris.ai/en/guias/acciones#webpage\",\"url\":\"https://docs.chatnorris.ai/en/guias/acciones\",\"name\":\"Agent actions\",\"description\":\"How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.\",\"dateModified\":\"2026-10-31T23:50:50.184Z\",\"isPartOf\":{\"@id\":\"https://docs.chatnorris.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.chatnorris.ai/en/guias/acciones#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.chatnorris.ai/en/guias/acciones#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"AI agents\",\"item\":\"https://docs.chatnorris.ai/en/guias/chatbots\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Agent actions\",\"item\":\"https://docs.chatnorris.ai/en/guias/acciones\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.chatnorris.ai/en/guias/acciones#article\",\"headline\":\"Agent actions\",\"name\":\"Agent actions\",\"description\":\"How to configure Lead Form, Human Handoff, WooCommerce, Zendesk and Freshdesk Tickets, Cal.com, Calendly and Google Calendar, HubSpot, LeadConnector, Payment (SumUp/Mercado Pago/Flow/Wompi), and other actions your agent can run during a conversation.\",\"url\":\"https://docs.chatnorris.ai/en/guias/acciones\",\"mainEntityOfPage\":{\"@id\":\"https://docs.chatnorris.ai/en/guias/acciones#webpage\"},\"dateModified\":\"2026-10-31T23:50:50.184Z\",\"publisher\":{\"@id\":\"https://docs.chatnorris.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.chatnorris.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ChatNorris\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ChatNorris","nav":{"global":null,"languages":[{"language":"es","default":true,"navbar":{"primary":{"type":"button","label":"Empezar","href":"https://app.chatnorris.ai/register"}},"pages":[{"title":"es","href":"/guias/acciones"}]},{"language":"en","navbar":{"primary":{"type":"button","label":"Get started","href":"https://app.chatnorris.ai/register"}},"groups":[{"group":"Getting started","pages":[{"title":"ChatNorris Help Center","href":"/en"},{"title":"Welcome to ChatNorris","href":"/en/primeros-pasos/bienvenida"},{"title":"Create your account","href":"/en/primeros-pasos/crear-cuenta"},{"title":"First use","href":"/en/primeros-pasos/primer-uso"}]},{"group":"AI agents","pages":[{"title":"AI agents","href":"/en/guias/chatbots"},{"title":"Create an agent — step-by-step wizard","href":"/en/guias/crear-agente-wizard"},{"title":"AI models and credits","href":"/en/guias/modelos-ia-creditos"},{"title":"Knowledge Base","href":"/en/guias/knowledge-base"},{"title":"Integrations","href":"/en/guias/integraciones"},{"title":"Pipedrive","sidebarTitle":"Pipedrive","icon":"handshake","href":"/en/guias/pipedrive"},{"title":"Jumpseller","sidebarTitle":"Jumpseller","icon":"bag-shopping","href":"/en/guias/jumpseller"},{"title":"Laudus","sidebarTitle":"Laudus","icon":"building","href":"/en/guias/laudus"},{"title":"Google Sheets","sidebarTitle":"Google Sheets","description":"How to connect Google Sheets to a ChatNorris agent and configure the Action that adds a row to your spreadsheet for each confirmed contact, for each Lead Form submission, or when the lead moves to a status, and that can keep the row up to date.","icon":"table","href":"/en/guias/google-sheets"},{"title":"Agent actions","href":"/en/guias/acciones"},{"title":"Advanced agent settings","description":"General, AI, notifications, teams, canned responses, security, credit limits and variables for each agent.","href":"/en/guias/configuracion-avanzada-agente"}]},{"group":"Web widget","pages":[{"title":"Install the widget on your website","href":"/en/guias/widget-instalacion"},{"title":"Customize the widget","href":"/en/guias/widget-personalizacion"}]},{"group":"Channels","pages":[{"title":"Connect messaging channels","href":"/en/guias/canales-whatsapp-instagram"},{"title":"Connect the Email channel","href":"/en/guias/canal-email"},{"title":"Reply to Google reviews","href":"/en/guias/canal-google-reviews"}]},{"group":"Conversations and live chat","pages":[{"title":"Conversations","href":"/en/guias/conversaciones"},{"title":"Live chat and handoff to an agent","href":"/en/guias/chat-en-vivo-handoff"},{"title":"ChatNorris Inbox (mobile app)","href":"/en/guias/chatnorris-inbox"},{"title":"Notifications","href":"/en/guias/notificaciones"}]},{"group":"Campaigns","pages":[{"title":"Campaigns","href":"/en/guias/campanas"}]},{"group":"Leads and analytics","pages":[{"title":"Leads","href":"/en/guias/leads"},{"title":"Analytics","href":"/en/guias/analytics"}]},{"group":"Team","pages":[{"title":"Manage your team","href":"/en/guias/equipo"}]},{"group":"Account and settings","pages":[{"title":"Manage your account","href":"/en/cuenta-y-facturacion/gestionar-cuenta"},{"title":"Partner program","href":"/en/cuenta-y-facturacion/programa-de-partners"}]},{"group":"Billing","pages":[{"title":"Billing and payments","href":"/en/cuenta-y-facturacion/facturacion-y-pagos"},{"title":"Add-ons","href":"/en/cuenta-y-facturacion/addons"},{"title":"Invoices","href":"/en/cuenta-y-facturacion/facturas"}]},{"group":"Troubleshooting","pages":[{"title":"The agent doesn't reply","href":"/en/solucion-de-problemas/chatbot-no-responde"},{"title":"A channel won't connect","href":"/en/solucion-de-problemas/canal-no-conecta"},{"title":"Credit limit reached","href":"/en/solucion-de-problemas/limite-mensajes-alcanzado"}]},{"group":"FAQ","pages":[{"title":"Frequently asked questions","href":"/en/faq/preguntas-frecuentes"}]},{"group":"Glossary","pages":[{"title":"Glossary of terms","href":"/en/glosario/terminos"}]},{"group":"Public API v2","pages":[{"title":"Introduction to the API","href":"/en/api-referencia/introduccion"},{"title":"Project","href":"/en/api-referencia/proyecto"},{"group":"Agents","pages":[{"title":"List agents","href":"/en/api-referencia/agentes/listar"},{"title":"Create agent","href":"/en/api-referencia/agentes/crear"},{"title":"Get agent","href":"/en/api-referencia/agentes/obtener"},{"title":"Update agent","href":"/en/api-referencia/agentes/actualizar"},{"title":"Delete agent","href":"/en/api-referencia/agentes/eliminar"},{"title":"Send message (Chat)","href":"/en/api-referencia/agentes/chat"},{"title":"Upload attachment","href":"/en/api-referencia/agentes/adjuntos"}]},{"group":"Knowledge Base","pages":[{"title":"List sources","href":"/en/api-referencia/knowledge/listar"},{"title":"Add source","href":"/en/api-referencia/knowledge/agregar"},{"title":"Delete source","href":"/en/api-referencia/knowledge/eliminar"},{"title":"Re-sync source","href":"/en/api-referencia/knowledge/resync"}]},{"group":"Conversations","pages":[{"title":"List conversations","href":"/en/api-referencia/conversaciones/listar"},{"title":"Get conversation","href":"/en/api-referencia/conversaciones/obtener"},{"title":"List messages","href":"/en/api-referencia/conversaciones/mensajes"}]},{"group":"Leads","pages":[{"title":"List leads","href":"/en/api-referencia/leads/listar"},{"title":"Get lead","href":"/en/api-referencia/leads/obtener"}]},{"group":"Automation (Zapier and n8n)","pages":[{"title":"Zapier","href":"/en/api-referencia/zapier"},{"title":"n8n","href":"/en/api-referencia/n8n"}]},{"title":"Channels","href":"/en/api-referencia/canales"},{"title":"Members","href":"/en/api-referencia/miembros"},{"title":"Usage","href":"/en/api-referencia/uso"}]}]}]},"basePath":"","title":"Agent actions - ChatNorris","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DXXFP6nH.js","DynamicMarkdown-B54_zNBF.js","zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js"]}