October 7, 2026
Behavior Changes
-
Call attempts on online conversations now report
direction: "ONLINE". A browser session used to be reported asOUTBOUND, as if we had dialled the contact. It now readsONLINEeverywhere a call attempt appears: the conversation endpoints and every webhook payload that carriescallAttempts. Existing online attempts were updated too, so earlier conversations read the same way. Phone calls are unchanged. If you validatedirectionagainst a fixed list, addONLINE. A parser that rejects unknown values will reject these attempts. See Conversations. -
A
human_handoffblock’smessageis now heard on every transfer to its number. On phone calls, the transfer used to start with a fixed English “Transferring the call now”, whatever the call’s language, and neither the block’smessagenor the default line was heard. The caller now hears the block’smessage, or InstaView’s neutral line in the call’s language if the block has none. That line is attached to the destination number, so it can also be heard when a caller asks for a person before the flow reaches the step, and is transferred there. Until now that case always used the neutral line. Check yourmessagetexts: a line that refers to what happened earlier in the flow (“Your card is blocked now, I’ll put you through”) would then be said to someone it is not true for. Move that part into the step before the handoff and keepmessageabout the transfer itself. Seehuman_handoff. - Whatever the agent is told to say in the step right before a handoff is now said before the transfer starts. The agent used to fold it into the turn that started the transfer, and on phone calls that turn was never played, so the caller did not hear it. It is now said in a turn of its own, so the caller hears it and replies before being transferred. That adds one turn to those handoffs.
October 5, 2026
Behavior Changes
-
analysis.completednow carries every call attempt’s transcript, not only the latest one’s. The event’scallAttemptslists every attempt on the conversation, but until now only the attempt that triggered the event had itstranscript. On a conversation that took two calls, the first event carried call 1 with its transcript and the second carried both calls with call 1’s transcript missing. An integration that storescallAttemptsas a snapshot of the conversation lost call 1’s transcript when the second event arrived. Each attempt now carries its owntranscript, the same as onGET /conversations/{id}. An attempt that produced no transcript still omits it. Payloads get larger on conversations with several answered calls, since every transcript is resent with each event.