Design Conversations

Design and iterate on Conversational Flows - using primitives inspired by Voice User Experience Patterns. Voilet automates the conversational state management.

Build Application Logic

Application Logic is injected into conversation flow - so your code remains well organized and integrated. You can hide additional complexity by developing widgets and/or plugins.


Examine one of our built-out samples to get ideas on how to build scripts. We are looking forward to hearing about other samples you would like to see and about scripts you have built.

Automatic Conversation Mangement

Define conversations - using nested user decisions and voice-based ‘forms’ - with an HTML-inspired Conversation Flow Language and integrate with applicaion logic.

var violet = require('violet').script();
var todoSvc = {...};

violet.addFlow(`<app><!-- conversation --></app>`, todoSvc);

Respond to Users

Declare when you want your conversation triggered by user choices (intents) and what you would like to respond with.

    <expecting>Whats next on my todo</expecting>
    <say>Next item on your list is [[todoSvc.getNextItem()]]</say>

Get Input from Users

Define input variables and use them in your conversations when expecting an input from users.

violet.addInputTypes({'todoItem': phrase});
  <expecting>Remind me to [[todoItem]]</expecting>
  <resolve value="[[todoSvc.add(response, 'todoItem')]]">
    <say>Added [[todoItem]] to your list</say>

User Decisions

Build sophisticated conversations by grouping user choices into (potentially nested) decisions.

<app><choice><expecting>Remind me to do [[todoItem]]</expecting>
  <check value="[[todoSvc.getCategoryCount() > 1]]">
    <case value="true">
      <decision><prompt>Which category</prompt>
        <choice><expecting>Category [[categoryNo]]</expecting>
          <!-- choice implementation -->
        <!-- other choices -->
    <!-- other cases -->


We are listening on Gitter. Drop by if you have Questions or Comments.