Skip to content

KAZOO Support Channels

This documentation is curated by 2600Hz as part of the KAZOO open source project. Join our community forums here for peer support. Only features in the docs.2600hz.com/supported space are included as part of our 2600Hz Support Services plan.

Callflow Branch on a Variable's Value#

Overview#

The branch_variable callflow enables you to branch based on value of some field inside one of the a call CCVs, user's document, device's document or an account's document.

Schema#

Validator for the branch_variable callflow data object

Key Description Type Default Required Support Level
scope specifies where the variable is defined string('account' | 'custom_channel_vars' | 'device' | 'merged' | 'user') custom_channel_vars false
skip_module When set to true this callflow action is skipped, advancing to the wildcard branch (if any) boolean() false
variable specifies the name of variable/property that should be looked up string() "" true

Description#

The purpose of this callflow is to branch on value of some property so it may have children named after possible values of the property, e.g. branch on boolean value of a property with the name "call_forward". For this, there should be three children on the callflow: "true", "false" (and "_" for the case when property is not defined anywhere and it's value is unknown).

Scope#

The place that the variable can be defined is configurable by scope. By default, if the scope is not defined or if it is set to "custom_channel_vars", a call's CCVs would be looking for the variable's value.

Supported places for defining the variable:

  • "accounts": in the account's document
  • "custom_channel_vars": in the Call's Custom Channel Variables
  • "device": in the device's documents
  • "merged": in the endpoint object (the merge of device, user and account)
  • "user": in the user's documents

Variable#

Variable is the name of the variable or property that should be look for in the specified scope. It must be a valid JSON key, e.g. a single string or a list of string which is a path to deep nested JSON objects.

For example, if you set scope to merged, this module tries to use endpoint which has the merged value of user, device, and account document. The endpoint has record_call attribute which is JSON object:

...
{
    "record_call": {
        "action": "start",
        "record_call": true
    }
}
...

If you want to record the calls based on the merged value inside the endpoint then the variable should be set to ["record_call", "record_call"]. This will result the value 'true'' of the inner attribute of the JSON object been fetched.

Example#

If you want to conditionally record outbound calls in no_match callflow depending on a property sets for users inside their documents:

...
{
    "data": {
        "scope": "user",
        "variable": "x_user_record_outbound"
    },
    "children":{
        "true": { },
        "false": { },
        "_" : { }
    }
}
...

The name of the property that is been looked is set on the "variable". Property name of each child ("children") is the value of the variable that has been found.

"true" : If the variable is set to the true

"false" : If the variable is set to false

"_" : If the variable is not defined or has a different value