Guidance on accurately detecting “Answered/Connected” for voice calls via MICC APIs

Hi Mitel Developer Support Team,

I’m integrating with MICC and need your help to reliably determine when a voice call is actually answered/connected versus merely ringing or non-ACD. We’re polling the conversations endpoint and occasionally consulting the agent state endpoint, but we’re seeing inconsistent “Answered” signals—especially for NonAcd scenarios—and would appreciate authoritative guidance.

Environment & what we call

  • MICC REST (OData):
    • GET /MiccSdk/api/v1/conversations (active interactions in IVR/queue/agent)
    • GET /MiccSdk/api/v1/agents/{id}/state (agent state)
  • Fields we rely on from conversations:
    • ConversationId, FromAddress/ToAddress, ANI/DNIS, SupplementalDetails.fromAddress/toAddress
    • ConversationState (enum), AgentId, AgentName, Direction
    • TimeOfferedToAgent, TimeOfLastAgentResponse, TimeOfLastCustomerResponse, ModifiedOn
  • Poll cadence: ~4/s (250 ms). We publish internal events: Ringing, Answered, Finished.

What we’re observing

  • Many items arrive with ConversationState = NonAcd while the call is ringing the device/extension.
  • For some answered calls, TimeOfLastAgentResponse (“LAR”) remains null or 0001-01-01… and never advances, even though the call was clearly answered.
  • Frequently the only time we’re certain the interaction ended is when a conversation disappears from /conversations between polls (we treat that as “Finished”).
  • Because of the above, we sometimes must synthesize “Answered” based on heuristics (e.g., state text equals “Connected/Answered” or we probe GET /agents/{id}/state to see if the agent is “on call”). We’d like to stop guessing and follow the official rule.

Questions where we need exact answers

  1. State semantics & transitions
  • What are the authoritative possible values for ConversationState (names and integer codes) for voice?
  • Which ConversationState values unambiguously mean the call is connected/answered to the agent?
  • Is NonAcd ever expected to represent an answered/connected call, or is it strictly pre/other state?
  • Can a connected call still appear as Unknown or NonAcd in certain routes (e.g., PBX non-ACD, direct-dial, transferred calls)?
  1. Timestamp fields
  • Exact definition of TimeOfLastAgentResponse:
    • When is it set?
    • Should we expect it to be populated precisely when the agent answers?
    • Are there scenarios where it remains null even though the call is answered?
  • What about TimeOfferedToAgent—can it be present without any guaranteed subsequent “answer” timestamp?
  • Are these UTC values? Any known latency/caching window before timestamps are updated?
  1. Identity of caller/callee
  • For voice, which fields definitively hold the external caller number and the agent’s extension?
    • Is SupplementalDetails.fromAddress/toAddress canonical on newer builds, or should we prefer top-level FromAddress/ToAddress, or ANI/DNIS?
  • Any best practice to distinguish the agent’s extension from trunk/DID values?
  1. Snapshot behavior
  • Is vanishing from /conversations the official indication of a completed/finished interaction?
  • Could a conversation temporarily disappear (e.g., paging/resharding) and reappear, or once gone is it guaranteed “finished”?
  1. Agent state correlation
  • Authoritative mapping for GET /agents/{id}/stateCurrentState values to “on-call/connected”.
  • Is it recommended to rely on agent state to infer “Answered” if conversation timestamps don’t populate?
  • Any race/ordering caveats between conversation updates and agent state updates?
  1. Recommended detection rule
  • Given the above, what is Mitel’s official algorithm to flag “Answered” for a voice conversation?
    For example:

Treat as Answered when ConversationState ∈ {Connected, Answered} or when TimeOfLastAgentResponse transitions from null to a valid timestamp (UTC), and never for NonAcd.

  • If there are exceptions (e.g., NonAcd direct calls), please document those and the correct indicators to use.
  1. Filtering & performance
  • Are there supported OData filters (e.g., by AgentId, ConversationState, MediaType) to reduce result sets and avoid missing fast transitions?
  • Any recommended max poll rate or server-side streaming/events option to avoid race conditions?
  1. Versioning
  • Do these semantics vary by MICC version? If so, which build numbers/documentation should we follow?

Sample logs (redacted) available
We can share short snippets showing NonAcd items that later vanish (“Finished”) without LAR ever getting set, if that helps you pinpoint expected behavior.

Our goal is to implement your recommended, supportable method—no heuristics. If there’s a specific doc/page or state diagram that defines these transitions and timestamp guarantees, a link would be great.

Thanks a lot for your guidance!

Best regards,