Event ledger
- EV-2214Payment reminder cycleIDLE
- EV-2231Planned outage BR-7ARMED
- EV-2240Storm watch digestIDLE
Flow
Last inbound read
No inbound yet · assistant holds the line
No inbound yet · assistant holds the line
Every piece above was built by hand, and every piece has a name in Cognigy, CXone and Omilia. Same row, same idea, three vocabularies.
| In Relay | Cognigy | NICE CXone | On a client project |
|---|---|---|---|
| Event ledger arms EV-2231, fires, assistant dials out | API call into an Endpoint kicks off the flow | Proactive AI Agent campaign · Personal Connection outbound | Wire the client's event source (billing, outage, CRM) to the trigger |
| Flow reducer: TRIGGER → DIAL OUT → LISTEN → ANSWER → HANDOVER → WRAP UP | Flow canvas: Say, Question, Logic, Code nodes | Studio script routes the interaction | Build flows on the canvas, drop to Code Nodes when logic outgrows drag and drop |
| Keyword scorer, confidence 0 to 0.97, threshold 0.45 | Intents trained on example sentences, confidence threshold plus reconfirmation band | Omilia side: deepNLU inside miniApps | Write example sentences, tune thresholds, review what missed in the transcripts |
| Entity extractors: phone, time, equipment terms | Lexicon keyphrases carry the slot, which fills on any message, independent of the intent | Omilia miniApps each collect one thing: address, card, date | Define lexicons for the client's vocabulary, attach slot fillers to questions |
| expect: optin_confirm, so yes or no answers the open question instead of re-classifying | Question node holds the expected answer type, session Context carries state | Studio variables carry state across the script | Design questions so answers land in context, and confirm before acting on them |
| Escalation rules: medical device, two misses, ask for a person | Handover conditions on the flow | Route to an ACD skill and queue | Encode the client's escalation policy. Vulnerable-customer rules are policy, never model judgment |
| Handover packet: summary lines, slots, intents seen | Handover to Agent node passes conversation and context | Screen pop on the agent desktop · Agent SDK | Decide exactly what the human sees, so the customer never repeats themselves |
| Suggested replies at the desk, built from session state | Agent Copilot | Agent Assist hub | Templates from context first, generative drafting only where the client accepts the risk |
| Chat pane re-skins to SMS mid-conversation | One flow, many Endpoints (webchat, SMS, voice) | Digital channels on one routing layer | Same flow logic per channel, channel-specific rendering and consent |
| Wrap card: computed disposition, mean confidence, sentiment | Insights: transcripts and analytics | Disposition and wrap-up codes on the ACD | Define dispositions with ops so they can measure containment, the conversations the assistant finishes without a human |
| 19 tests on the engine and its contract, run with node --test | Playbooks: scripted conversations asserting outcomes | QA cycle in the release process | Write conversation tests before release, fix what the QA cycle finds |
| Engine and scenario live in git, deterministic | Snapshots, pulled and pushed with cognigy-cli | Tenant promotion dev, test, prod | Keep agents in version control, promote snapshots, never hand-edit prod |
The assistant opens before the customer asks. That is the flow's Once node firing on first contact, and every message after it crosses the intent switch to exactly one branch.
One conversation here. Eight branches below, replayed against the same tenant and asserted line by line.
Each playbook opens on Hi, who is this, asserts the greeting and the announce, then probes one branch
How long will the power be out
ask_durationintent text2/2
Why is this happening
ask_reasonintent text2/2
Will I get a credit on my bill
ask_compensationintent text2/2
Can you text me a reminder
sms_optinintent text2/2
There's an oxygen concentrator at home
medical_equipmentequipmentintent slot text3/3
Get me a real person
agent_requestintent text2/2
Thanks, that's all I needed
thanks_doneintent text2/2
purple monkey dishwasher
no intent, default branchtext1/1