Processes are Cognigy.AI's mechanism for guiding a user through a structured process whilst collecting and processing information.

The information is requested step by step and then added to the context afterwards. Individual fields can be configured to be dynamically filled using NLU, so users can answer several questions in one go.

For each valid answer to a question, the following fields are saved:

valueThe parsed value of the answertrue
answerThe actual answer givenyes, that is great
questionThe question that was askedDo you want to proceed
timestampTimestamp of when the question was answered2019-04-04T10:33:00


Processes inherit the NLU and language of the calling Flow throughout including Process Actions

Processes inherit the language of the Flow that is executing them for NLU. If your calling Process is in German, the NLU in the Process will also execute in German. Nor will a Process Action run its own NLU but the calling Flow's NLU is used throughout Process execution.

Processes can be configured to store the results not just against the Context, but also against the Contact Profile. If this is activated, the Process will look for a Profile Key with the same ID as the Process field and try to write it to the Profile.

Create and edit a Process

Create a Process from the project homepage. Click the + button to create a new Process.

Give it a name and set basic settings. Don't worry, you can change them later.

Creating a Process or selecting one from the left-hand resource pane brings up the Process Editor.


The flowchart on the right represents the structure of your Process.

You may click on any + button in the chart to insert a new Element here.

By double-clicking on Elements, you can edit their configuration.


Use Process Nodes in your Flows

Now you can embed Processes in your Flows and guide the user through a stuctured process.

Check out the Run Process Node to learn how to present Processes in your Flow.

Element Types


Sends a configurable message to the user, then hands over to the next Element.
(Like a simple Say-Node in a Flow)


Asks the user a question and waits for a matching answer, and stores it.
Until the user has provided a matching answer or asked to skip the question (if not required), the question will be repeated.


Answer Token

The Answer will also be available in an Answer Token that has the name you chose as its Answer ID.


Will check a condition and based on the outcome hand over to one or another Element.
Uses the Rule Editor.


Will execute a Flow tagged with "Process Action" and return to the Process afterwards.


Nested Process Executions

Nested Process executions only have limited support. If you trigger a second Process in a Process Action, your Flow will not return to the original Process afterwards.

Question Types

Processes can have fields with various types and features:

  • Text
    These fields allow the user to input anything. You can predefine answers for the user to choose from, which will be displayed as quick replies. You can also define validation, which is either off (None), only allowing predefined answers (Answers only) or comparing against a regular expression (Regular Expression)

  • Yes or No
    These fields look for a positive or negative answer and store the result as boolean (true/false). A thumbs up and thumbs down emoji are displayed to choose from.

  • Date / Time
    Date/Time fields look for a date and time expression in the language of the parent Flow. A button is displayed on Webchat and Facebook which opens a date selector. This date selector can be customized with options (see below).


dateFormat & DATE Slots

The default dateFormat as seen below is d.m.Y. If your Flow is in en-US, we advise to set the dateFormat option to m/d/Y.

  • Number
    Looks for a number (either spelled out or as an actual number)

  • Phone Number
    Looks for a phone number (e.g. +49 202 555 8888)

  • Email
    Looks for an email address, more specifically an email Slot

  • Keyphrase Tag
    Looks for a keyphrase with a specific slot tag.

  • Custom
    Can be used to configure an arbitrary question. See the Custom Question Section.


Type Validation and Cognigy NLU

Native type validation depends on Cognigy NLU slot parsing. If you don't use Cognigy NLU within your Endpoint, question types other than "Text" might not work for you.

Custom Question

Custom Questions can be configured by selecting the "Custom" Question Type in a Question Element.

The Question Text and Question Data Fields are used to configure the text and data payload of the "question message" that is sent to the client. The data field can be used to meet special requirements of the channel, e.g. to trigger a Webchat Plugin which can render a special form element.

As soon as a question has been asked (the question message was sent), every incoming message will be checked on whether it contains an answer and - if it contained one - whether that answer is valid.

The Answer Location Field is used to tell the Process where to search for an answer. For example, a text question would have this set to ci.text, a number question would this have set to ci.slots.NUMBER[0]. If we use an arbitrary client with a special input that sends the answer as an "answer" field in data, we could configure it to here.
As soon as the expression defined in Answer Location resolves to a non-empty value, the message is considered "containing an answer". This value will then also be stored as the answer result for the question.

When a message considered "containing an answer" arrives, it is possible to optionally run a further validation check via the Answer Validation field. If the answer is stored as an array of options at and we want to make sure we have at least two, we can write > 1 as Answer Validation. If this expression is configured and does not return "true", the incoming message will be treated as "not answering the question correctly", the answer will not be taken and the Validation Message will be read out.

Element Options

Certain field types can be dynamically filled or prefilled from Contact Profile fields.

Take answers from any Question refers to the NLU engine trying to fill multiple fields at the same time.


Dynamic Filling Details

Question answers that have been filled once won't be filled again.

If you mark several Elements of the same type as auto-filling, they will be filled in sequence.

Numbers found in Text field predefined answers and Date/Time fields won't be used for filling Number fields.


Example of Dynamic Question filling

We have four Elements set up:

  • Birthday (datetime, dynamic filling activated)
  • Email (email, dynamic filling activated)
  • Favourite Food (keyphrase tag, listens to food, dynamic filling activated)
  • Name (text)

The Process will start by asking the user for their birthday. The user answers I was born on August 26th 1981, my email is [email protected] and I love pizza. The Process will try to fill as many Questions that have been marked with dynamic filling as possible. In this case it fills Birthday, Email and Favourite Food. It will then only ask the user for their name and we're done.

Attempt pre-filling from profile values
At the start of the Process, the Process will try to fill all fields marked with this from the Contact Profile. This will only work if the Contact Profile Schema key and the field ID are equal.

Date/Time Selector Options

The Date/Time field can dynamically open a date selector. This date selector can be configured by adding options, separated with &. All options are optional and have a default.

Example: minDate=today&mode=range&disable=["2019-04-02"]

enableTimebooleanShow time selectorfalse
modestringCan be single to select a single date or range to select date rangessingle
maxDatestringMaximum date which can be selected. Can be a date or todaynone
minDatestringMinimum date which can be selected. Can be a date or todaynone
disablestringWhich dates to disable. Can be an array like ['1/3/18', '5/3/18'] or a string like weekendsnone
enablestringWhich dates to enable. Can be an array like ['1/3/18', '5/3/18'] or a string like weekendsall
time_24hrbooleanWhether to use 24h format in time pickerfalse