Introducing the CSML StdLib

All languages have a set of useful helper methods, adding convenient ways to do simple things. With this latest release, we are introducing the CSML StdLib: a series of functions that you can use to routinely perform everyday actions in your flows.

You will find mathematical operations, string manipulation, regex tooling, object and array helpers…

Head over to the documentation to learn more about the CSML StdLib!

New: CLI client

You can now discuss with your CSML chatbots right from the terminal, thanks to this neat little CLI tool we published just last week!

To install it on your machine, simply run npm install -g csml-client-cli, then run csml-client -h for further help.

The fun touch: all static Image() components are converted to colorful ascii art!


Happy testing!

New Channel: Google Assistant

We just added a full integration with Actions on Google, allowing you to now use your CSML bots with Google Assistant compatible devices!


CSML integrates with voice-only or voice+screen devices, which makes it possible to very easily create rich voice interfaces. This is the first voice channel we are adding on the CSML studio. More are coming soon so stay tuned!

Save invalid flows

One of the most common feedbacks we received was that it was impossible to save flows that were not valid. The reason we did that was to prevent your bots to be in an impossible state where the CSML engine was unable to parse the flows during the run phase.

We just added a build phase to prepare your bot for running (think of it as a "compilation" step, required before running your bot), which means that you can save temporarily invalid flows without impacting running bots. This is overall great for platform stability as it prevents you from harming your bot while allowing you to save your work often, and a first step towards an upcoming full bot versioning capability.

Take advantage of this new feature now!

New keyword: break

You can now use the break keyword to get out of loops early.

remember lightsabers = [
  {"color": "red", "owner": "Kylo Ren"},
  {"color": "red", "owner": "Darth Maul"},
  {"color": "purple", "owner": "Mace Windu"},
  {"color": "green", "owner": "Yoda"},
  {"color": "red", "owner": "Darth Vader"},
  {"color": "green", "owner": "Luke Skywalker"},
  {"color": "yellow", "owner": "Rey Skywalker"},

foreach ls in lightsabers {
  say "{{ls.owner}} had a {{ls.color}} lightsaber"
  // we want to stop after we find the first green lightsaber
  if (ls.color == "green") break

[Workplace chat] Broadcasts, welcome flow, persistent menu

We have just added a few settings in the Workplace Chat configuration page. You can now configure the behavior of your bot upon receiving a Get Started event as well as an option to setup a persistent menu according to the documentation.

Capture d'écran 2020-01-13 11.31.12.png

Additionally, the _metadata property will be automatically populated with all the fields defined in the Workplace member object.

Finally, you are now able to send broadcasts, which are notifications sent from the bot to the user at times chosen by you.

Import and export full CSML bots

🎉 This one is huge!

You can now export and import full bots as a simple zip archive.

To export a bot is as simple as visiting your list of bots and clicking on the "export" icon next to the bot you want to download:

Capture d’écran 2020-01-04 à 12.46.59.png

One caveat: for security reasons, your functions configuration will not be exported into the zip archive, to prevent secrets to be leaked in public repositories. This means that after importing the bot, you will need to reconfigure the functions with new environment variables.

You can import a bot simply using the "Import" button at the bottom of the same page:

Capture d’écran 2020-01-04 à 12.36.38.png

To import a bot, you can either:

  • upload a zip archive of a bot that was previously exported the same way,
  • provide the URL to a (public) Github repository where your bot is stored.

You can find an example of such a bot here: (or direct link to zip archive).

This makes sharing bots so much easier! We will be sharing many bots over the coming weeks on our public Github account. Stay tuned!

Invite team to collaborate on your bots

You can now add your whole team to contribute on your bots:

Capture d'écran 2019-12-19 13.04.03.png

Members of your team can try, update, collaborate on all of the bots from your organization. Of course, you can revoke a user at any time from your team!

New Channels: Messenger, Workplace Chat, Slack

We just added more channels to our integrations!

Capture d'écran 2019-12-13 00.43.22.png

You can now very easily integrate your CSML bots into Slack, Messenger and Workplace Chat. Let us know which integrations you would like to add by voting in our Open Roadmap!

Modify, add and remove elements in arrays and objects

In the CSML specification, objects and arrays were previously considered immutable and could not be altered after the fact. We just introduced a way to modify items inside objects and arrays after their creation with the following syntax:

// array modifications
remember arr = [1, 2, 3]
do arr.pop() // arr is now [1, 2]
do arr.push(4) // arr is now [1, 2, 4]
do arr[0] = 42 // arr is now [42, 2, 4]

// object modifications
remember obj = Object(car = "BMW")
do = "castle" // obj is now { car: "BMW", house: "castle" }
do = " // obj is now { car: "Tesla", house: "castle" }

Note that modifying inaccessible elements is not possible and will result in an error:

remember obj = Object(car = "BMW")
do obj.a.b.c = 1 
// error because obj does not contain a, so path a.b.c is inaccessible

remember arr = [1, 2]
do arr[50] = 3
// error because arr only contains 2 elements, so element 50 is inaccessible

Read more about this in the documentation.