Skip to content
Expedify
Expedify in an Afternoon
Course contents

Module · How a workflow is built

Reading a node's configuration

Lesson 10 of 40 · 5 min

There is no code behind any of these boxes. Click one and you get a panel of labelled fields — the same panel the person who built it filled in. That is worth saying to a client early, because they are usually bracing for something worse.

One node, three filled-in fields

Open 3.1 · Call every new lead back within 5 minutes and click the box called priority_callback. It is the node that raises the call-back task a branch head sees.

3.1 · Call every new lead back within 5 minutes

A new enquiry arrives, its size decides who calls back, and a task is raised for them. The node in the middle of that sentence is the one to read.

YesNo

Scroll for all 5 steps →

Three fields, and between them they say a whole sentence: create a task, on a deal, containing this. Every CRM Manager node in the org is that same sentence with different words in it.

What those fields are — and the fourth one

Four of this node's 26 fields — the ones almost every use of it needs. The rest are for searching and for batches.

entity_type

What it holds
Type of CRM entity or relationship to manage One of: contact · company · deal · note · task · product · activity · deal_contact · deal_company · contact_company · deal_product · deal_payment · deal_payment_schedule Defaults to contact.

operation

What it holds
Operation to perform. Use batch_* for multiple items at once. One of: create · update · get · search · delete · link · unlink · update_relationship · batch_create · batch_update · batch_delete Defaults to get.

entity_id

What it holds
Entity ID or email (for contacts) for operations that require it

json_data

What it holds
JSON string of entity data for create/update (preferred write path). On update: "" blanks a field, null leaves it unchanged, custom_fields merge.

Read them in that order and a node stops being intimidating: what kind of thing, what am I doing to it, which one, and with what content. priority_callback fills in only three, because it creates a task and a task that does not exist yet has no id. Any node that updates something has to name which one, and that is the fourth field.

The field that is not a form

json_data is a JSON string, not a set of tick-boxes — you are editing text. That is the product's own preferred write path and it is worth knowing before you open it, because a missing quote mark is the commonest way to break a working node.

The product's own warnings for this node: WRITES go in `json_data` (a JSON STRING), not a `data` object — the object is dropped on write.

A deal's stage has no native field — set it only via json_data: '{"stage_name": "..."}'.

custom_fields update MERGES: "" blanks a value, JSON null leaves it unchanged, omitted = unchanged.

SEARCH cannot filter by a custom field (it's ignored) — use a database_query SELECT instead.

Read results as {{alias.results}} / {{alias.results[0].id}}; a single entity as {{alias.entity.id}}.

The second of those is the one that catches people in this org. A deal's stage has no field of its own; it is set through json_data. Several of your workflows move a deal along the pipeline, and every one of them does it that way.

Change one thing

Do this on a draft, so nothing you do can fire. 7.2 · Every morning, chase what has gone quiet is one, and it uses the same node type you have just read.

  1. Open it and click chase_task. Same node type, same three fields.
  2. In json_data, find "priority": "medium" and make it "high". Save.
  3. Reopen the node. The change is there, the workflow is still a draft, and no task has been created anywhere — because a draft does not run.
  4. Now break it on purpose: delete one of the quote marks and save. Read what the builder tells you, then undo it. Recognising that message on sight is worth the thirty seconds.
  5. Put medium back.

Try it

  1. Open five nodes across three different workflows and, for each, answer the four questions from the table before reading the field labels.
  2. Find a node whose configuration you cannot explain. Note which one — the answer is in Module 3, and knowing which node beat you is useful.
  3. Open 2.3 · Mark every lead hot, warm or cold — and say why and click write_score. It is the same node type as the one you just read, but one field says {{ai}} instead of a value. Do not fix it — it is not broken, and it is explained in Module 3.

Next: Variables: how one node uses another's output — the curly brackets you have now seen in three different nodes, and the one mistake they cause.