Files
advanced-camera-card/docs/images/call-sequence.svg
T
Dermot Duffy 85d6811761 fix: Release the microphone to the browser when a call ends (#2685)
The microphone is connected when a call needs it and released the moment
that
call ends, so the browser stops reporting it as in use at hangup rather
than
`disconnect_seconds` later.

Existing configurations are migrated automatically by the visual editor.

 - Closes: #2681 

BREAKING CHANGE: `live.microphone.disconnect_seconds` is removed. The
microphone is released when a call ends, so there is no idle countdown
to
configure. Use `live.microphone.always_connected` to hold it open
instead.

BREAKING CHANGE: The `microphone_connect` and `microphone_disconnect`
actions
are removed. The card owns the microphone lifecycle; `microphone_mute`
and
`microphone_unmute` remain.

BREAKING CHANGE: `call` is removed from `live.microphone.auto_mute`,
whose
default is now `[]`. The microphone is muted when a call ends regardless
of
this option.

BREAKING CHANGE: `microphone_unmute` has no effect outside a call.
Nothing
carries the audio at any other time, so the request is ignored rather
than
opening the microphone.
2026-08-14 16:17:31 -07:00

1 line
27 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="SEQUENCE" height="1183px" preserveAspectRatio="none" style="width:899px;height:1183px;background:#FFFFFF;" version="1.1" viewBox="0 0 899 1183" width="899px" zoomAndPan="magnify"><?plantuml 1.2026.3?><defs/><g><rect fill="none" height="110.5313" style="stroke:#000000;stroke-width:1.5;" width="838.5503" x="32" y="98.2969"/><rect fill="none" height="235" style="stroke:#000000;stroke-width:1.5;" width="734.6846" x="32" y="222.8281"/><rect fill="none" height="110.5313" style="stroke:#000000;stroke-width:1.5;" width="828.7109" x="32" y="471.8281"/><rect fill="none" height="75.3984" style="stroke:#000000;stroke-width:1.5;" width="734.6846" x="32" y="820.5547"/><g class="participant-lifeline" data-entity-uid="part1" data-qualified-name="User" data-source-line="3" id="part1-lifeline"><g><title>User</title><rect fill="#000000" fill-opacity="0.00000" height="1019.5859" width="8" x="56.9551" y="81.2969"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5,5;" x1="60" x2="60" y1="81.2969" y2="1100.8828"/></g></g><g class="participant-lifeline" data-entity-uid="part2" data-qualified-name="Card" data-source-line="4" id="part2-lifeline"><g><title>Call</title><rect fill="#000000" fill-opacity="0.00000" height="1019.5859" width="8" x="342.8721" y="81.2969"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5,5;" x1="346.8052" x2="346.8052" y1="81.2969" y2="1100.8828"/></g></g><g class="participant-lifeline" data-entity-uid="part3" data-qualified-name="Mic" data-source-line="5" id="part3-lifeline"><g><title>Microphone</title><rect fill="#000000" fill-opacity="0.00000" height="1019.5859" width="8" x="647.667" y="81.2969"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5,5;" x1="650.7676" x2="650.7676" y1="81.2969" y2="1100.8828"/></g></g><g class="participant-lifeline" data-entity-uid="part4" data-qualified-name="Guest" data-source-line="6" id="part4-lifeline"><g><title>Guest</title><rect fill="#000000" fill-opacity="0.00000" height="1019.5859" width="8" x="729.1255" y="81.2969"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5,5;" x1="732.5664" x2="732.5664" y1="81.2969" y2="1100.8828"/></g></g><g class="participant participant-head" data-entity-uid="part1" data-qualified-name="User" data-source-line="3" id="part1-head"><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="31.9102" x="42" y="77.9951">User</text><ellipse cx="60.9551" cy="13.5" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M60.9551,21.5 L60.9551,48.5 M47.9551,29.5 L73.9551,29.5 M60.9551,48.5 L47.9551,63.5 M60.9551,48.5 L73.9551,63.5" fill="none" style="stroke:#181818;stroke-width:0.5;"/></g><g class="participant participant-tail" data-entity-uid="part1" data-qualified-name="User" data-source-line="3" id="part1-tail"><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="31.9102" x="42" y="1112.8779">User</text><ellipse cx="60.9551" cy="1124.6797" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M60.9551,1132.6797 L60.9551,1159.6797 M47.9551,1140.6797 L73.9551,1140.6797 M60.9551,1159.6797 L47.9551,1174.6797 M60.9551,1159.6797 L73.9551,1174.6797" fill="none" style="stroke:#181818;stroke-width:0.5;"/></g><g class="participant participant-head" data-entity-uid="part2" data-qualified-name="Card" data-source-line="4" id="part2-head"><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="40.1338" x="326.8052" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="26.1338" x="333.8052" y="69.9951">Call</text></g><g class="participant participant-tail" data-entity-uid="part2" data-qualified-name="Card" data-source-line="4" id="part2-tail"><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="40.1338" x="326.8052" y="1099.8828"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="26.1338" x="333.8052" y="1119.8779">Call</text></g><g class="participant participant-head" data-entity-uid="part3" data-qualified-name="Mic" data-source-line="5" id="part3-head"><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="95.7988" x="603.7676" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81.7988" x="610.7676" y="69.9951">Microphone</text></g><g class="participant participant-tail" data-entity-uid="part3" data-qualified-name="Mic" data-source-line="5" id="part3-tail"><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="95.7988" x="603.7676" y="1099.8828"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="81.7988" x="610.7676" y="1119.8779">Microphone</text></g><g class="participant participant-head" data-entity-uid="part4" data-qualified-name="Guest" data-source-line="6" id="part4-head"><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41.1182" x="709.5664" y="77.9951">Guest</text><ellipse cx="733.1255" cy="13.5" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M733.1255,21.5 L733.1255,48.5 M720.1255,29.5 L746.1255,29.5 M733.1255,48.5 L720.1255,63.5 M733.1255,48.5 L746.1255,63.5" fill="none" style="stroke:#181818;stroke-width:0.5;"/></g><g class="participant participant-tail" data-entity-uid="part4" data-qualified-name="Guest" data-source-line="6" id="part4-tail"><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="41.1182" x="709.5664" y="1112.8779">Guest</text><ellipse cx="733.1255" cy="1124.6797" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M733.1255,1132.6797 L733.1255,1159.6797 M720.1255,1140.6797 L746.1255,1140.6797 M733.1255,1159.6797 L720.1255,1174.6797 M733.1255,1159.6797 L746.1255,1174.6797" fill="none" style="stroke:#181818;stroke-width:0.5;"/></g><path d="M32,98.2969 L101.4512,98.2969 L101.4512,105.4297 L91.4512,115.4297 L32,115.4297 L32,98.2969" fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="110.5313" style="stroke:#000000;stroke-width:1.5;" width="838.5503" x="32" y="98.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="24.4512" x="47" y="111.3638">opt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="5.0273" x="116.4512" y="110.5073">[</text><text fill="#43A047" font-family="monospace" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="211.9219" x="121.4785" y="110.5073">live.microphone.always_connected</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="68.8682" x="337.23" y="110.5073">is enabled]</text><g class="message" data-entity-1="part2" data-entity-2="part3" data-source-line="9" id="msg1"><polygon fill="#181818" points="639.667,132.5625,649.667,136.5625,639.667,140.5625,643.667,136.5625" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="346.8721" x2="645.667" y1="136.5625" y2="136.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="280.7949" x="353.8721" y="131.4966">Microphone connection attempted (muted)</text></g><path d="M441,149.5625 L441,174.5625 L860,174.5625 L860,159.5625 L850,149.5625 L441,149.5625" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M850,149.5625 L850,159.5625 L860,159.5625 L850,149.5625" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="398.5503" x="447" y="166.6294">Connected at card load, before (and independent of) any call</text><g class="message" data-entity-1="part3" data-entity-2="part1" data-source-line="11" id="msg2"><polygon fill="#181818" points="71.9551,196.8281,61.9551,200.8281,71.9551,204.8281,67.9551,200.8281" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2;" x1="65.9551" x2="650.667" y1="200.8281" y2="200.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="179.1753" x="77.9551" y="195.7622">Microphone access granted</text></g><path d="M32,222.8281 L96.4429,222.8281 L96.4429,229.9609 L86.4429,239.9609 L32,239.9609 L32,222.8281" fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="235" style="stroke:#000000;stroke-width:1.5;" width="734.6846" x="32" y="222.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="19.4429" x="47" y="235.895">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="96.7764" x="111.4429" y="235.0386">[Outbound call]</text><g class="message" data-entity-1="part1" data-entity-2="part2" data-source-line="15" id="msg3"><polygon fill="#181818" points="334.8721,257.0938,344.8721,261.0938,334.8721,265.0938,338.8721,261.0938" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="60.9551" x2="340.8721" y1="261.0938" y2="261.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="70.3257" x="67.9551" y="256.0278">Start a call</text></g><path d="M43,274.0938 L43,314.0938 L362,314.0938 L362,284.0938 L352,274.0938 L43,274.0938" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M352,274.0938 L352,284.0938 L362,284.0938 L352,274.0938" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="154.5845" x="55.8376" y="291.1606">Via Call menu button or</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="78.2666" x="214.5544" y="291.1606">call_start</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="44.1479" x="296.9534" y="291.1606">action.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="280.9536" x="55.8376" y="306.2935">Needs a camera that supports 2-way audio</text><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="32" x2="766.6846" y1="320.3594" y2="320.3594"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="86.2598" x="37" y="330.5698">[Inbound call]</text><g class="message" data-entity-1="part4" data-entity-2="part2" data-source-line="21" id="msg4"><polygon fill="#181818" points="357.8721,351.2969,347.8721,355.2969,357.8721,359.2969,353.8721,355.2969" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="351.8721" x2="732.1255" y1="355.2969" y2="355.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="35.9087" x="363.8721" y="350.231">Rings</text></g><path d="M93,368.2969 L93,423.2969 L598,423.2969 L598,378.2969 L588,368.2969 L93,368.2969" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M588,368.2969 L588,378.2969 L598,378.2969 L588,368.2969" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="32.5698" x="99" y="385.3638">Via a</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="273.9331" x="135.7021" y="385.3638">view.triggers.actions.trigger:&#160;call</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="150.0205" x="413.7676" y="385.3638">trigger, e.g. a doorbell.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="102.5781" x="99" y="400.4966">The card rings (</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="211.3198" x="201.5781" y="400.4966">live.controls.call.ringtone</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="109.4717" x="412.8979" y="400.4966">) until answered,</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="75.0103" x="99" y="415.6294">rejected, or</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="352.1997" x="178.1426" y="415.6294">live.controls.call.unanswered_timeout_seconds</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="49.3721" x="534.4746" y="415.6294">elapses</text><g class="message" data-entity-1="part1" data-entity-2="part2" data-source-line="27" id="msg5"><polygon fill="#181818" points="334.8721,445.8281,344.8721,449.8281,334.8721,453.8281,338.8721,449.8281" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="60.9551" x2="340.8721" y1="449.8281" y2="449.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="99.8169" x="67.9551" y="444.7622">Answer the call</text></g><path d="M32,471.8281 L101.4512,471.8281 L101.4512,478.9609 L91.4512,488.9609 L32,488.9609 L32,471.8281" fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="110.5313" style="stroke:#000000;stroke-width:1.5;" width="828.7109" x="32" y="471.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="24.4512" x="47" y="484.895">opt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="5.0273" x="116.4512" y="484.0386">[</text><text fill="#43A047" font-family="monospace" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="211.9219" x="121.4785" y="484.0386">live.microphone.always_connected</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="79.1968" x="337.23" y="484.0386">not enabled]</text><g class="message" data-entity-1="part2" data-entity-2="part3" data-source-line="31" id="msg6"><polygon fill="#181818" points="639.667,506.0938,649.667,510.0938,639.667,514.0938,643.667,510.0938" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="346.8721" x2="645.667" y1="510.0938" y2="510.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="280.7949" x="353.8721" y="505.0278">Microphone connection attempted (muted)</text></g><path d="M452,523.0938 L452,548.0938 L850,548.0938 L850,533.0938 L840,523.0938 L452,523.0938" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M840,523.0938 L840,533.0938 L850,533.0938 L840,523.0938" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="161.3193" x="458" y="540.1606">Stays muted by default (</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="211.3198" x="619.3193" y="540.1606">live.microphone.auto_unmute</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="5.0718" x="830.6392" y="540.1606">)</text><g class="message" data-entity-1="part3" data-entity-2="part1" data-source-line="33" id="msg7"><polygon fill="#181818" points="71.9551,570.3594,61.9551,574.3594,71.9551,578.3594,67.9551,574.3594" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2;" x1="65.9551" x2="650.667" y1="574.3594" y2="574.3594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="179.1753" x="77.9551" y="569.2935">Microphone access granted</text></g><path d="M30,594.3594 L30,649.3594 L682,649.3594 L682,604.3594 L672,594.3594 L30,594.3594" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M672,594.3594 L672,604.3594 L682,604.3594 L672,594.3594" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="464.2803" x="119.6431" y="611.4263">The microphone is connected when the call is answered -- immediately</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="434.2241" x="119.6431" y="626.5591">for an outbound call. An inbound call rings without it, so a doorbell</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="436.5981" x="119.6431" y="641.6919">can ring even where microphone access needs a tap to be granted</text><g class="message" data-entity-1="part2" data-entity-2="part1" data-source-line="42" id="msg8"><polygon fill="#181818" points="71.9551,671.8906,61.9551,675.8906,71.9551,679.8906,67.9551,675.8906" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2;" x1="65.9551" x2="345.8721" y1="675.8906" y2="675.8906"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="123.0938" x="77.9551" y="670.8247">You hear the caller</text></g><path d="M146,688.8906 L146,743.8906 L547,743.8906 L547,698.8906 L537,688.8906 L146,688.8906" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M537,688.8906 L537,698.8906 L547,698.8906 L537,688.8906" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="249.8184" x="152" y="705.9575">Inbound audio unmutes if configured (</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="125.2266" x="401.8184" y="705.9575">live.auto_unmute</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="5.0718" x="527.0449" y="705.9575">)</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="258.7114" x="152" y="721.0903">Menu, status bar &amp; next/previous hide (</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="70.4399" x="410.7114" y="721.0903">auto_hide</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="5.0718" x="481.1514" y="721.0903">)</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="194.124" x="152" y="736.2231">Camera navigation is locked (</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="180.0132" x="346.124" y="736.2231">live.controls.call.lock</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="5.0718" x="526.1372" y="736.2231">)</text><g class="message" data-entity-1="part1" data-entity-2="part3" data-source-line="49" id="msg9"><polygon fill="#181818" points="639.667,766.4219,649.667,770.4219,639.667,774.4219,643.667,770.4219" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="60.9551" x2="645.667" y1="770.4219" y2="770.4219"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="97.2715" x="67.9551" y="765.356">Unmute to talk</text></g><path d="M415,783.4219 L415,808.4219 L888,808.4219 L888,793.4219 L878,783.4219 L415,783.4219" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M878,783.4219 L878,793.4219 L888,793.4219 L878,783.4219" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="72.3252" x="421" y="800.4888">List 'call' in</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="211.3198" x="497.4575" y="800.4888">live.microphone.auto_unmute</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="160.418" x="712.9097" y="800.4888">to unmute automatically</text><path d="M32,820.5547 L108.624,820.5547 L108.624,827.6875 L98.624,837.6875 L32,837.6875 L32,820.5547" fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="75.3984" style="stroke:#000000;stroke-width:1.5;" width="734.6846" x="32" y="820.5547"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="31.624" x="47" y="833.6216">loop</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="700" lengthAdjust="spacing" textLength="122.853" x="123.624" y="832.7651">[Until the call ends]</text><g class="message" data-entity-1="part1" data-entity-2="part4" data-source-line="53" id="msg10"><polygon fill="#FF0000" points="721.1255,854.8203,731.1255,858.8203,721.1255,862.8203,725.1255,858.8203" style="stroke:#FF0000;stroke-width:1;"/><line style="stroke:#FF0000;stroke-width:1;" x1="60.9551" x2="727.1255" y1="858.8203" y2="858.8203"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="47.1504" x="67.9551" y="853.7544">Talking</text></g><g class="message" data-entity-1="part4" data-entity-2="part1" data-source-line="54" id="msg11"><polygon fill="#FF0000" points="71.9551,883.9531,61.9551,887.9531,71.9551,891.9531,67.9551,887.9531" style="stroke:#FF0000;stroke-width:1;"/><line style="stroke:#FF0000;stroke-width:1;stroke-dasharray:2,2;" x1="65.9551" x2="732.1255" y1="887.9531" y2="887.9531"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="76.6035" x="77.9551" y="882.8872">Responding</text></g><g class="message" data-entity-1="part1" data-entity-2="part2" data-source-line="57" id="msg12"><polygon fill="#181818" points="334.8721,920.0859,344.8721,924.0859,334.8721,928.0859,338.8721,924.0859" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="60.9551" x2="340.8721" y1="924.0859" y2="924.0859"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="76.6416" x="67.9551" y="919.02">End the call</text></g><path d="M5,937.0859 L5,977.0859 L404,977.0859 L404,947.0859 L394,937.0859 L5,937.0859" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M394,937.0859 L394,947.0859 L404,947.0859 L394,937.0859" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="131.1616" x="11" y="954.1528">Via Hang-up button,</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="62.6133" x="146.2939" y="954.1528">call_end</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="114.334" x="213.0396" y="954.1528">action, or -- when</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="180.0132" x="11" y="969.2856">live.controls.call.lock</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="194.2002" x="195.1455" y="969.2856">is disabled -- navigating away</text><g class="message" data-entity-1="part2" data-entity-2="part1" data-source-line="63" id="msg13"><polygon fill="#181818" points="71.9551,999.4844,61.9551,1003.4844,71.9551,1007.4844,67.9551,1003.4844" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2,2;" x1="65.9551" x2="345.8721" y1="1003.4844" y2="1003.4844"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="147.272" x="77.9551" y="998.4185">Inbound audio mutes (</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="109.5732" x="225.2271" y="998.4185">live.auto_mute</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="5.0718" x="334.8003" y="998.4185">)</text></g><g class="message" data-entity-1="part2" data-entity-2="part3" data-source-line="64" id="msg14"><polygon fill="#181818" points="639.667,1028.6172,649.667,1032.6172,639.667,1036.6172,643.667,1032.6172" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="346.8721" x2="645.667" y1="1032.6172" y2="1032.6172"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="230.8135" x="353.8721" y="1027.5513">Microphone mutes and disconnects</text></g><path d="M439,1045.6172 L439,1085.6172 L862,1085.6172 L862,1055.6172 L852,1045.6172 L439,1045.6172" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M852,1045.6172 L852,1055.6172 L862,1055.6172 L852,1045.6172" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="402.7144" x="445" y="1062.6841">The browser stops reporting the microphone as in use, unless</text><text fill="#43A047" font-family="monospace" font-size="13" font-weight="700" lengthAdjust="spacing" textLength="250.4531" x="445" y="1077.8169">live.microphone.always_connected</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="84.2461" x="699.5854" y="1077.8169">holds it open</text><?plantuml-src jLRzYzj64FrTVyNWG7Dt-9JI1W8c71HJsa8_84qA9HIpbiRszbQxOZ_i-h_FcvLaMtUsIKDxFznnsjatCs_UF2ayQjighnfQgkfnxLsozTmPvsctqP6BGbKH_tm8x0l4HLtfLjb8axaoPa8gq5pvUdJqYwwyQpVEiXpZlnxZXyGX5eLh8xsj9CNinUjlrTUltppStKqcHc-vR0vNIsLsQXyMbREMgyZrP79tz_PLllT0EX1RjJHS5vGBeFi7oKIpq-pzNUqigHYvQG53Dqt2drlSiouokItx_kPyI8LegWJKE5LFQSahvvbkbAr9svfRnY_qwLQtfEmUeSO0Ja3kKOPGDQv3LHM7G6iFTb0nheDM4-ct59V2zu2GRm8XDpIZtoD89JMS7ikLk6d7E-7d3wr8fa4DsqJB52CQ1jzdI1QeHH3S4PqgarHcj5-Pwv2pDkmLnGt82AbjdO-1lhd7K4YbMZi4ev5SLS4cCFraHytaQPzqyqxRTHYrCMf0dIjtgtbNHg_NQ_QXxAeCmuDPpZJgep-P4fVh4f2rStx9ndITlTzmDrOlfT3D9H52Dj4x4qh1BoKOXF9febjADcg3wOSTUwwd6T_ptra-qmladm5FTe1OHDsmIt4H625r6FN5HhM1modbpzJoNGR2lBYRG5RPVx5hIFS_B1l4lG-KZscvfvfNAc4bRZwdsXJT8bcvEnhAlzx1fnibLjN9v9XDhER02poHxO5YEHh6XwoacuPhhIARFM3W6JWbTxhZ9QO42pa-wAMuqt63GD9nIi6T21Su5K0aYdYBt2Z0Zyhh-xBzraRLKdImhDDEEyKKtUYExFpf4crO7JK3Yt-sdSDMvvsdZlL0UYMahFGwIUyNXtPjKl0gD1jLJ06l7azVeOT_uglMyrOxFDleciyYPr0vVGevxnpBggrUgon43CYuwl5QYUDzbEWnx96-OTyw_Nx8NGdNKPd7ugcyVzOmlvU2-H83fozNjMJedf94D6XCKFT5OPnhKORuq46Hg3OShE7Z2mpdhuVUYMVq7eL2I4TlxWAEWdZ7eONtI4pUZoSEypseEDZBXRUHMFcFogxlKzk_YQONtqF8SUOjbDqJsoIh1i0lcvjCljOXcvQ03Ph06YbOtPMb6EkzK_jrVJzNzqMFxE3aEmB5zQuInjhf3MZftKuA2j6r0MyMUVrAzN5iJlY-WhfIu2b4Oc04LnZxNB_VE0ChqVY-mOVEWQbF?></g></svg>