Every skill, explained
Skills are what turn a language model into a working assistant. Each checkbox in the Skills panel gives the agent one or more tools, plus a short built-in prompt telling it how to use them. This page covers every skill in detail.
Enabling a skill does two things:
- Registers a set of tools (functions the model can call).
- Appends a built-in prompt that explains how to use them.
You can override the built-in prompt from the skill's config panel — the panel opens automatically when you tick a skill's box.
#Memory
Lets the agent look back through prior messages on demand. Without this skill, the agent only sees the last N turns (set by History depth). With Memory on, older context is reachable via search and range fetches.
Tools
conversationStats— total turn count, first-message date, last message.searchMessages(query, limit?)— full-text search inside this conversation.getMessages(from, to)— fetch a range of turns by index (1 = oldest).getMessagesAround(turnIdx, radius?)— grab context around a specific turn.
When to enable
- Long-running conversations where old details matter (medical follow-ups, ongoing sales cycles).
- Any use case where the customer casually references “last week” or “that thing I asked about”.
Combined with a shrunk History depth (e.g. 3), Memory dramatically reduces per-turn cost while keeping the whole conversation reachable when needed.
#Self-pause
Gives the agent a way to hand a conversation off to a human by pausing itself for the current contact. Once paused, the agent stops replying to that contact until an operator resumes them from the inbox.
Tools
pauseAgent({ reason: string })— pause auto-replies for this contact. The reason is saved to the CRM record as an audit trail.
When to enable
Almost always. It's a safety valve: hostile customer, deal that's ready for a human closer, ambiguity that only a person can resolve.
If the customer is asking to speak with a person, is visibly upset, or needs a decision only management can make, call pauseAgent with a one-line reason. After that, write ONE polite handoff line ("A colleague will get back to you shortly") and stop.#CRM Management
Lets the agent create and update contact records — the foundation of “pre-qualified leads” hitting your sales team's inbox already tagged and tagged.
Tools
upsertClient({...})— create or update a contact by phone. Sets name, status, tags, summary.getClient(phone)— look up an existing contact.searchClients(query)— find contacts by name or phone.
Even without this skill, alChatBot creates a Client row for every new sender. The skill just lets the agent enrich that row (tag, status, summary) automatically.
#User Fields
Custom fields you define on the Contacts page (age, city, plan, budget…) — the agent can read and write them just like normal contact attributes. Combine with a field schemato build powerful qualification flows.
Tools
listUserFields()— schema of available fields.setUserField(key, value)— save a value on the current contact.getUserField(key)— recall a saved value.searchContactsByField(key, value)— find contacts matching a filter.
Agent calls setUserField("industry", "IT startup") and setUserField("timeline", "2 months").
#Data Tables
Custom tables you upload on the /dashboard/ai/tables page — perfect for price lists, product catalogues, FAQ archives, or team rosters. Agents search across rows and answer the customer with the right entry.
Tools
listTables()— enumerate available tables in this workspace.searchTable(tableId, query)— full-text search on the table's content.getTableRows(tableId, from, to)— read a specific range.
If your system prompt is stuffed with menu items or a price list, move them into a Data Table. The prompt stays clean, and tables update independently — no re-testing the whole agent when prices change.
#HTTP API Requests
Lets the agent call your own APIs — Bitrix, Notion, an in-house billing service, whatever. You define the tools upfront as templates; the agent picks the right one and fills in parameters.
Configuration
Open the HTTP skill panel and click + Add tool. Each tool has:
- Name — a JavaScript-safe identifier (e.g.
createBitrixLead). - Description — 1–2 lines the model reads when deciding whether to call it.
- Method, URL, Headers, Body — the actual HTTP call. Supports Handlebars-style placeholders for parameters.
- Parameters — the schema the model must satisfy (each parameter has a name, description, and type).
Name: createBitrixLead
Description: Create a new lead in Bitrix CRM. Use after the customer confirms name and phone.
Method: POST
URL: https://your-bitrix.bitrix24.eu/rest/1/xyz.../crm.lead.add.json
Headers: Content-Type: application/json
Body: {"fields":{"TITLE":"{{title}}","NAME":"{{name}}","PHONE":[{"VALUE":"{{phone}}","VALUE_TYPE":"WORK"}]}}
Parameters:
- title (string) — Short lead title, e.g. "Website inquiry".
- name (string) — Customer's full name.
- phone (string) — Customer's phone in E.164, e.g. +994551234567.HTTP tools fire even in the Sandbox — that's intentional so you can test the integration. Use throwaway data if you don't want real records created.
#Live Operators
Lets the agent ping a human teammate over WhatsApp when it doesn't know something, wait for their reply, and then forward the answer back to the customer.
Tools
listOperators()— enumerate available operators.askOperator({ operatorId, question })— ping the operator with the question. The system delivers their reply back to the customer automatically.
Configuration
The skill's config panel is where you add operators. Each operator has:
- Name — shown to the agent when it decides who to ask.
- WhatsApp phone — digits only, e.g.
994551234567. - Order — the pinging sequence. If operator #1 doesn't reply within their timeout, alChatBot forwards to operator #2.
- System prompt — optional, describes their role so the agent knows what to ask them.
The operator replies on WhatsApp: “Bəli, 15% endirim təklif edirik.”
#Polls
Lets the agent send native WhatsApp polls with 2–12 options. The customer taps a choice, and the vote arrives as the next user message with the option's label — the agent handles it like any other reply.
Tools
sendPoll({ name, options, multi? })— sends a poll.
WhatsApp shows the poll as its own bubble. If the agent sends both a chat message and a poll in the same turn, the customer sees both at once — usually redundant. The built-in prompt reminds the model to write NOTHING else on poll turns.
For richer branching (poll options that each trigger a different downstream flow), use a poll node in an Automation instead — the agent's poll skill is best for lightweight in-conversation choices.
#Google Calendar (Connector)
Adds three tools that let the agent check availability and book meetings on the workspace's connected Google Calendar. Requires a workspace-level connection — see Connectors.
Tools
listCalendarEvents({ timeMin, timeMax, q? })— check what's on the calendar between two ISO timestamps.createCalendarEvent({ summary, start, end, timezone?, attendeeEmails? })— book a slot.cancelCalendarEvent({ eventId })— remove a booking.
Agent calls listCalendarEvents(timeMin: 2026-07-09T14:00:00+04:00, timeMax: 2026-07-09T16:00:00+04:00) — slot is free.
Agent calls createCalendarEvent(summary: "Konsultasiya — Aygün Rəhimova", start: 2026-07-09T15:00:00+04:00, end: 2026-07-09T15:30:00+04:00, attendeeEmails: ["aygun@example.com"]).
The tools require full ISO strings with timezone offset. The agent's Timezone setting drives the offset — set it correctly for your customers.
#Reminder (background)
Not a runtime tool — this skill enables a background scheduler that sends a warm follow-up when a contact has gone silent for a configurable number of hours (default 24). Perfect for re-engaging leads who ghosted.
Configuration
- Reminder hours — how many hours of silence trigger the follow-up (default 24, max 720 / 30 days).
Only contacts that are not agent-paused are eligible. Paused conversations remain silent — the whole point of pausing is to hand off to a human.