Botsquad documentation logo

The DSL editor in the studio supports code snippets: small pieces of text which expand into larger blocks of code. Snippets are activated by typing their name and then “tab”. For instance, try typing say<tab>, which will expand into say "Hello there!".

The following code snippets are available:

snippet say
	say "${1:Hello there!}"

snippet sayfull
	say "${1:Hello there!}"${2:, quick_replies: ["Hi"]}${3:, class: ["large"]}

snippet ask
	ask "${1:What is your name?}"

snippet askfull
	ask "${1:What is your name?}"${2:, expecting: [:text]}${3:, quick_replies: ["skip"]}

snippet askemail
	${1:email} = ask "${2:Enter your email}", expecting: :email

snippet askimage
	${1:image} = ask "${2:Upload an image}", expecting: :image

snippet asklocation
	${1:image} = ask "${2:Share your location}", expecting: :location

snippet askyesno
	ask "${1:Do you like this?}", expecting: [:yes, :no]

snippet image
	show image "${1:https://studio.botsqd.com/images/botsquad-logo.png}"

snippet location
	show location [lat: ${1:52.364909}, lon: ${2:4.89341}]

snippet pause
	pause ${1:3}

snippet type
	type ${1:4}

snippet buttons
	buttons "${1:Please click one of these:}" do
	"${2:Button 1}" ->
		postback "${3:button1}"
	"${4:Button 2}" ->
		open "${5:https://www.botsquad.com}"
	end

snippet template
	template do
		"The hat shop 1" ->
			image_url "http://via.placeholder.com/150x150"
			subtitle "We've got the right hat for everyone."
			default_action do
				open "http://www.redhat.com"
			end

			buttons do
				"View Website" ->
					open "http://www.redhat.com"
				"Say hello" ->
					postback "postback:1"
			end
	end

## Control flow

snippet ifyesno
	if ${1:answer == :yes} do
		${0}
	end

snippet if
	if ${1:condition} do
		${0}
	end

snippet ifelse
	if ${1:condition} do
		${2}
	else
		${3}
	end

snippet else
	else ${1:condition}
		${2}
	end

snippet branch
	branch do
	${1:answer == :yes} ->
		${2:say "Great!"}
	${3:answer == :no} ->
		${4:say "I feel sad now..."}
	${5:answer == :maybe} ->
		${6:say "Maybe is ok..."}
	end

snippet random
	random do
		say "${1:First thing}"
		say "${2:Another thing}"
	end

snippet repeat
	repeat ${1:count} in ${2:[5, 4, 3, 2, 1]} do
		say "${3:Counting down... #{count}}"
	end

snippet inv
	invoke ${1:mydialog}

snippet perf
	perform ${1:mytask}

## State

snippet rem
	remember ${1:variable}

snippet forget
	forget ${1:variable}

snippet tag
	tag "${1:flag}"

snippet untag
	untag "${1:flag}"

## Debug

snippet log
	log "${1:debug message}"

## HTTP
snippet hget
	http_get "${1:http://httpbin.org/get}?${2:param}=#{url_encode(${3:variable})}"
	log http

snippet hpost
	http_post "${1:http://httpbin.org/post}", [${2:param}: ${3:variable}]
	log http

snippet hdelete
	http_delete "${1:http://httpbin.org/anything}"
	log http

snippet hput
	http_put "${1:http://httpbin.org/anything}"
	log http

## Events

snippet emit
	emit "${1:event}", to: ${2:self}${3:, in: "10m"}${4:, [${5:payload]}]}

## Dialogs

snippet dialog
	dialog ${1:mydialog} do
		${0}
	end

snippet dtrigger
	dialog trigger: "${1:hello|welcome|hi}" do
		${0}
	end

snippet itrigger
	dialog trigger: ${1:@intent} do
		${0}
	end

snippet devent
	dialog event: "${1:button1}" do
		${0}
	end
snippet dlocation
	dialog location: [lat: ${1:52.364909}, lon: ${2:4.893414}], radius: ${3:100} do
		${0}
	end

## Special dialogs

snippet unknown
	dialog __unknown__ do
		${0}
	end

snippet returning
	dialog __returning__ do
		${0}
	end

snippet unknown_event
	dialog __unknown_event__ do
		${0}
	end

snippet timeout
	dialog __timeout__ do
		${0}
	end

snippet unknown_location
	dialog __unknown_location__ do
		${0}
	end

snippet unknown_attachment
	dialog __unknown_attachment__ do
		${0}
	end

## Tasks

snippet task
	task ${1:mytask} do
		${0}
	end

snippet tevent
	task event: "${1:ping}" do
		${0}
	end

snippet attr
	@${1:label} ${2:value}

snippet int
	@${1:label} intent(learn: ${2:[]})

snippet ent
	@${1:label} entity(match: "${2}")

## Elixir

snippet elixir
	elixir do
		def ${1:name}() do
			${0}
		end
	end