Alan AI cheat sheet (web)

pattern — phrase to invoke a voice/text command or a response to be played

value — specified value

params — passed parameters

action — action to be performed

output — data outcome

[...] — optional data or parameters


Define a voice/text command to play a response

intent('pattern'[, 'patternN'], reply('pattern'))

Define a voice/text command to play a response or perform an action

intent('pattern'[, 'patternN'], p => { action })


Define alternatives


Define optional words and phrases

intent('pattern (optional phrase|)')

Response functions

Play a response (in case of multiple patterns, a response is picked at random)

reply('pattern'[, 'patternN'])

Play a response'pattern')

Define voice settings for the assistant reply: accent (en, fr, de, it, ru, es), gender (‘male’/‘female’), voice type, speaking pitch, speaking rate[voice(code, gender, type, pitch, rate), ]'pattern')

Define play options: force:true (execute if the button is inactive), activate:true (activate the button before), deactivate:true (deactivate the button after)'pattern'[, opts(options)])

Send a command to the app{command:data})

Q&A AI assistant

Define a URL of a resource to be indexed

corpus({url: url, depth: depthLevel, maxPages: number})

Define text strings to be used by the AI assistant in the dialog


User-defined slots

Define a static list of values expected in the input

$(SLOTNAME value1|value2) => p.SLOTNAME.value

Provide labels to classify or identify the slot values

$(SLOTNAME value1~label1|value2~label2) => p.SLOTNAME.label

Enable fuzzy matching to capture similar variants

$(SLOTNAME~ value1|value2) => p.SLOTNAME.value

Make a slot optional

$(SLOTNAME value1|value2|)

Capture several slot values

intent(‘$(SLOTNAME value1|value2) and $(SLOTNAME value1|value2 )’) => p.SLOTNAME_ (array), p.SLOTNAME_[0].value, p.SLOTNAME_[1].value

Predefined slots

Capture date values

$(DATE) => p.DATE.value, p.DATE.moment, p.DATE.luxon

Capture time values

$(TIME) => p.TIME.value, p.TIME.moment

Capture cardinal numbers

$(NUMBER) => p.NUMBER.value, p.NUMBER.number

Capture ordinal numbers

$(ORDINAL) => p.ORDINAL.value, p.ORDINAL.number

Capture locations

$(LOC) => p.LOC.value

Capture names

$(NAME) => p.NAME.value

Dynamic slots

Define a dynamic slot at the project level = {en: “value1|value2|value3”}

$(SLOTNAME p:name) => p.SLOTNAME.value

Define a dynamic slot at the dialog session level = {en: “value1|value2|value3”}

$(SLOTNAME u:name) => p.SLOTNAME.value

Get data for a dynamic slot with the visual state

let name = [“value1|value2|value3”] = {en: name};

$(SLOTNAME v:name) => p.SLOTNAME.value

Define a dynamic slot in a short form = {en: “value1|value2|value3”}

$(p:name) => p.SLOTNAME.value

Define labels for dynamic slots: see User-defined slots.

Enable fuzzy matching for dynamic slots: see User-defined slots.

Make a dynamic slot optional: see User-defined slots.

Capture several slot values: see User-defined slots.

RegEx slots

Capture digit and/or letter combination

const reg = "([A-Za-z]{1}\\s?){6}"

$(SLOTNAME* ${reg}) => p.SLOTNAME.value

Capture any user’s input

$(SLOTNAME* .+) => p.SLOTNAME.value


Define a context

let contextName = context(() => { action })

Activate a context

intent('pattern', p => {..., p.then(contextName)}

Pass data to the context

p.then(contextName, state: {data:yourData}) =>

Resolve a context


Reset a context


Define intents to be matched at any time without switching the current context

intent(noctx, 'pattern', ...) or noContext(() => {intent(...)})

Play a prompt for an expected input

fallback('pattern1'[, 'patternN'])

Title a context


Built-in JS libraries

Make API calls

axios, request

Work with time

moment-timezone, luxon

Work with arrays, numbers, objects, strings and so on


Recognition hints

Provide a list of hints to help recognize specific terms

recognitionHints('hint'[, 'hintN'])

Predefined objects

Store static device- and user-specific data passed from the client app =>

Store state data to be available globally at the project scope = {data:yourData} =>

Store the intent match score


Store data to be passed between contexts

Store visual context data to be passed from the client app. See setVisualState

Store user-specific state data to be accessible during the dialog session

Predefined callbacks

Define actions to be performed when the script is saved and dialog model is built

onCreateProject(() => { action })

Define actions to be performed when the dialog session starts

onCreateUser((p) => { action })

Define actions to be performed when the dialog session ends

onCleanupUser((p) => { action })

Define actions to be performed when the visual state is set

onVisualState((p, s) => { action })

Define actions to be performed when a user event is triggered in the client app: buttonReady, buttonClicked, micPermissionPrompt, micAllowed, firstActivate, showPopup, popupCloseClicked, recognized

onUserEvent((p, e) => { action })

Define actions to be performed when a context is activated

onEnter((p) => { action })


Write info messages to Alan AI Studio logs


Write error messages to Alan AI Studio logs


Client API methods

Send information about the visual state from the client app to the dialog script


Send data or perform actions without a voice/text command

projectAPI.method = function(p, param, callback) { =;



callProjectApi(method:string, data:object, callback:function)

Play a text message in the client app


Send a text message to Alan AI as the user’s input


Execute a command in the client app


Client API methods (continued)

Activate the Alan AI button programmatically


Deactivate the Alan AI button programmatically


Check the Alan AI button state


Remove the Alan AI button from the parent element, page (supported on Web, Ionic)


Check the state of the wake word (supported on iOS, Android)


Set the state of the wake word (supported on iOS, Android)



Handle commands sent from the dialog script to the client app

onCommand: function (commandData) { action }

Handle Alan AI button state changes

onButtonState: function (e) { action }

Handle connection status to the AI assistant project in the Alan AI Cloud

onConnectionStatus: function (e) { action }

Handle events received from Alan AI

onEvent: function (e) { action }

* Examples are provided for the Web platform

Back to docs