Alan AI
Legend
pattern— phrase to invoke a voice/text command or a response to be playedvalue— specified valueparams— passed parametersaction— action to be performedoutput— data outcome[...]— optional data or parameters
Dialog script
Intents & patterns
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
intent('phrase1|phrase2')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
p.play('pattern')Define voice settings for the assistant reply: accent (en, fr, de, it, ru, es), gender (male/female), voice type,
speaking pitch, speaking rate
p.play([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)
p.play('pattern'[, opts(options)])Send a command to the app
p.play({command:data})User-defined slots
Define a static list of values expected in the input
$(SLOTNAME value1|value2) => p.SLOTNAME.valueProvide labels to classify or identify the slot values
$(SLOTNAME value1~label1|value2~label2) => p.SLOTNAME.labelEnable fuzzy matching to capture similar variants
$(SLOTNAME~ value1|value2) => p.SLOTNAME.valueMake 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].valuePredefined slots
Capture date values
$(DATE) => p.DATE.value, p.DATE.moment, p.DATE.luxonCapture time values
$(TIME) => p.TIME.value, p.TIME.momentCapture cardinal numbers
$(NUMBER) => p.NUMBER.value, p.NUMBER.numberCapture ordinal numbers
$(ORDINAL) => p.ORDINAL.value, p.ORDINAL.numberCapture locations
$(LOC) => p.LOC.valueCapture names
$(NAME) => p.NAME.valueDynamic slots
Define a dynamic slot at the project level
project.name = {en: "value1|value2|value3"}$(SLOTNAME p:name) => p.SLOTNAME.valueDefine a dynamic slot at the dialog session level
p.userData.name = {en: "value1|value2|value3"}$(SLOTNAME u:name) => p.SLOTNAME.valueGet data for a dynamic slot with the visual state
let name = ["value1|value2|value3"]p.visual.data = {en: name};$(SLOTNAME v:name) => p.SLOTNAME.valueDefine a dynamic slot in a short form
project.name = {en: "value1|value2|value3"}$(p:name) => p.SLOTNAME.valueDefine 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.valueCapture any user’s input
$(SLOTNAME* .+) => p.SLOTNAME.valueContexts
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}) => p.state.dataResolve a context
p.resolve([data:yourData])Reset a context
p.resetContext()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
title('contextName')Predefined objects
Store static device- and user-specific data passed from the client app
authData.data => p.authData.dataStore state data to be available globally at the project scope
project.info = {data:yourData} => project.info.dataStore the intent match score
p.scoreStore data to be passed between contexts
p.state.dataStore visual context data to be passed from the client app with setVisualState()
p.visual.dataStore user-specific state data to be accessible during the dialog session
p.userData.dataPredefined 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 })Q&A service
Define a URL of a resource to be indexed
corpus({url: url, depth: depthLevel})Define text corpus to be used by the assistant in the dialog
corpus('text')Built-in JS libraries
Make API calls
axios, requestWork with time
moment-timezone, luxonWork with arrays, numbers, objects, strings and so on
lodashOther
Provide a list of hints to help recognize specific terms
recognitionHints('hint'[, 'hintN'])Write info messages to Alan Studio logs
console.log(data)Write error messages to Alan Studio logs
console.error(data)Client SDK
Client API methods
Send information about the visual state from the client app to the dialog script
setVisualState(visualStateData:object)Send data or perform actions without a voice/text command
projectAPI.method = function(p, param, callback) { p.userData.data = param.data; callback();};
callProjectApi(method:string, data:object, callback:function)Play a text message in the client app
playText(text:string)Send a text message to Alan as the user’s input
sendText(text:string)Execute a command in the client app
playCommand(command:object)Client API methods (continued)
Activate the Alan button programmatically
activate()Deactivate the Alan button programmatically
deactivate()Check the Alan button state
isActive()Remove the Alan button from the parent element, page (supported on Web, Ionic)
remove()Check the state of the wake word (supported on iOS, Android)
getWakewordEnabled()Set the state of the wake word (supported on iOS, Android)
setWakewordEnabled(enabled:boolean)Handlers
// Examples are provided for the Web platform
Handle commands sent from the dialog script to the client app
onCommand: function (commandData) { action }Handle Alan button state changes
onButtonState: function (e) { action }Handle connection status to the virtual assistant project in the Alan Cloud
onConnectionStatus: function (e) { action }Handle events received from Alan
onEvent: function (e) { action }