Who holds the customer now, among agents, people and systems, and the most restrictive wins.
Your company’s customer is served by agents from several vendors, by people in panels no agent sees and by routines that call nobody. Each of them can contact the same person, act on the same object or repeat what another already did. The memory knows who holds the customer, by declaration and by observation, what already went out and what was already done, and answers before the agent acts: now, wait, no, or hand it to whoever holds them. A business fact causes one effect: the first check reserves the key, and every later check with the same key hears it is done. Your company is the one that sends and the one that bars: the decision becomes a token your gateway checks without talking to Niadra, and the suppression list is the floor every vendor honors.
How it works
Before acting, the agent asks
example- Voice agent · vendor B farewell · service · key farewell:call-5521 now Effect reserved. Declare how it ended.
- WhatsApp agent · vendor A farewell · the same key, 2:09 pm no Effect already done by the voice agent.
- Billing agent · internal bill reminder · collection · outbound · WhatsApp wait The customer is with the voice agent until 2:22 pm: ownership observed in the contact center’s panel.
- Offers agent · vendor C offer · marketing · outbound · WhatsApp no The customer asked not to receive marketing on this channel. Suppression list.
Niadra answers and records the decision. Your agent is the one that sends; your gateway is the one that bars a message without a token.
- Ownership by declaration and by observation: a service panel that opened a human session counts, even when nobody asked. The most restrictive wins
- Four answers: now, wait until a given time, no for this purpose, or hand it to whoever holds them. A message the customer sent is never denied
- An ambiguous effect is never sent again on its own: an attempt whose outcome nobody knows stays as it is until a person or the system of record says what happened
- A contact budget per purpose, added up over every agent and vendor, and the channel window: outside it, only an approved template; in quiet hours, the contact waits
- An outbound message only leaves with a token your gateway checks without talking to Niadra: an Ed25519 signature, two minutes of life, single use
- The suppression list holds for every vendor, with keys only someone who already knows the phone or the email can match, and each source applies its own copy, read every 60 seconds
- Each level is useful on its own: shadow, suppression, check and declare, dispatch with a token. Where the dispatch point is a third party’s that checks no token, the coverage is shadow plus suppression
from niadra import Niadra, phone
def farewell_once(conversation, send):
key = f"farewell:{conversation.id}"
decision = conversation.check(
"farewell", purpose="service", effect_key=key
)
if decision.decision != "allow":
# already said by another agent, or the customer is held
return False
send("Thanks for reaching out! Anything else, just call.")
conversation.declare.effect(key, "done")
return True
niadra = Niadra(channel="whatsapp")
customer = phone(customer_phone)
with niadra.conversation(
thread_id, subject=customer, agent_id="closing"
) as conversation, conversation.turn():
farewell_once(conversation, conversation.agent)
# the suppression list, applied from the local copy
niadra.may_contact(customer, "marketing", channel="whatsapp")- Python
- TypeScript
From the SDK’s examples/coordination.py: the first check reserves the effect, the agent sends and declares, and the suppression list is applied from the local copy.
One memory, thirteen products
Any agent connects to the memory with three calls, in Python, TypeScript, HTTP or MCP, with a ready-made adapter for the most used voice and agent frameworks.
See the documentation(opens docs.niadra.com)- MemoryWhat was said and done, with a date, a source and evidence.
- IdentityPeople, companies and partners, recognized on any channel.
- PatternsWhat each customer repeats, computed from the history and delivered to every agent.
- StateWhat holds now for each customer, with the age and the source of every value.
- ContextWhat each agent needs to know before it starts.
- HistoryEverything that ever happened, for the agent to search.
- AlertsA signed webhook to your system the moment something happens.
- ClaimsWhat the agent may state, and the check of what it stated, with no extra model.
- CoordinationYou are hereWho holds the customer now and what was already done, before an agent acts.