Update status after a call
This monday automation sets the contact's Status from the result of each Harmony call, such as Busy or Meeting booked.
Before you start, set up enrollment and add a Status column to the mapped board with these labels: Meeting booked, Unqualified, Not interested, Answered, and Busy.
These labels and the mapping below are an example. Use the labels your team works with, and change the mapping in block 2 to match them.
Create the automation
In monday, select AI Workflows > Start from scratch and add these blocks in order.
1. When a Harmony call ends
- Board: the mapped board.
- Voice agent: leave empty to include every agent.
The trigger reference lists every output and its possible values.
2. Code: map call result
This block turns the trigger's call result into a Status label:
| Status label | Call results |
|---|---|
| Meeting booked | converted |
| Unqualified | disqualified, wrong_language |
| Not interested | not_interested, do_not_call |
| Answered | answered, contact_verified, identified, qualified, callback_requested, neutral_value_call |
| Busy | busy, human_busy |
| No change | no_answer, voicemail, ivr, invalid_number, wrong_number, carrier_blocked, unknown, new |
converted means the agent reached its goal. Map it to Meeting booked only if your agent's goal is booking a meeting.
- Use Rename inputs to add an input named
call_result, mapped to TriggerCall result. - Declare one String output:
status_label. - Paste this code:
STATUS_LABELS = {
"converted": "Meeting booked",
"disqualified": "Unqualified",
"wrong_language": "Unqualified",
"not_interested": "Not interested",
"do_not_call": "Not interested",
"answered": "Answered",
"contact_verified": "Answered",
"identified": "Answered",
"qualified": "Answered",
"callback_requested": "Answered",
"neutral_value_call": "Answered",
"busy": "Busy",
"human_busy": "Busy",
}
call_result = input.get("call_result") or "none"
label = STATUS_LABELS.get(call_result)
if label is None:
raise ValueError("No Status change for call result " + call_result + ".")
return {"status_label": label}
For results with no label, the block stops the automation, so Status keeps its current value. These runs show as failed in Run history.
3. Change status
- Item: TriggerItem
- Column: Status.
- Value: Block 2status_label
Publish the automation.
If monday doesn't let you insert block 2's output as the Status value, skip block 2. Instead, add a condition on TriggerCall result for each label, each followed by a Change status block set to that label.
To save more about the call, add blocks that write other trigger outputs, such as TriggerEnd reason or TriggerDuration (seconds), to board columns. The trigger reference lists every output.
The trigger fires after every call, including unanswered attempts. To update Status only after the contact's last call, add a condition on the trigger's Last call output.
Test
- Enroll a test contact who has agreed to receive a call, answer the call, and let it finish.
- In the automation's Run history, check that every block succeeded and the item's Status matches the call, for example Answered.
Test calls from the agent builder and transferred calls don't fire the trigger.
Troubleshoot
If the automation doesn't run, check that:
- monday.com is still connected and the trigger uses the mapped board.
- The automation is published and the Voice agent filter matches the agent.
- The contact was enrolled from monday and its item is still on the board.
If block 2 fails with "No Status change for call result", the call had a result that leaves Status unchanged, such as no_answer. If block 3 fails, check that every label in block 2 exists on the Status column, spelled the same way.