Logpy-AgentOne/telefon/freeswitch/dw3_warten.xml.tpl
Jeuner 3da0cd7ec9 feat(telefon): Wartezeit vor answer() fuer parallel klingelnde Durchwahl (DW3)
Manche Provider (Fonial/Plusnet) klingeln bei einer Durchwahl parallel an
mehreren registrierten Zielen. Ohne Verzoegerung gewinnt AgentOne das Rennen
immer, weil answer() sofort laeuft - das eigentliche Endgeraet kommt nie zum
Klingeln. DW3_DDI in der .env schaltet 20s Wartezeit vor answer() frei,
erkannt ueber den SIP-Header X-ORIGINAL-DDI-URI (destination_number ist bei
diesem Trunk unbrauchbar). Nimmt jemand am Endgeraet ab, bricht der Provider
AgentOnes Versuch per CANCEL ab; sonst laeuft der Dialplan normal weiter zu
Ansage+Aufnahme.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ovr91y2VK8bYYKPimcX68
2026-09-01 02:53:05 +02:00

30 lines
1.7 KiB
Smarty

<include>
<!-- Durchwahl 3: Fonial klingelt bei dieser DDI offenbar PARALLEL an
AgentOne und an MainMacPhone (dem Endgeraet mit Durchwahl 3). Ohne
diese Regel beantwortet AgentOne jeden Anruf sofort (answer() ist die
erste Aktion in 00_praxis_ab.xml, keine Verzoegerung davor) - AgentOne
gewinnt das Rennen daher immer, bevor am anderen Mac ueberhaupt
geklingelt hat. deflect() (siptrace-verifiziert: nie tatsaechlich ein
302 verschickt) hat rein zufaellig als Wartezeit gewirkt und damit
MainMacPhone eine Chance gegeben.
Diese Regel macht das Warten explizit: bei erkannter DW3
(X-ORIGINAL-DDI-URI, da destination_number bei diesem Trunk
unbrauchbar ist) erstmal nur schlafen. Nimmt jemand an MainMacPhone
ab, schickt Plusnet ein CANCEL - der Kanal wird beendet, bevor der
sleep() zu Ende ist, alles Weitere unten laeuft nie. Nimmt niemand ab,
laeuft der Dialplan nach dem sleep() normal weiter zur Ansage+Aufnahme,
identisch zu AgentOnes Anrufbeantworter (00_praxis_ab.xml). -->
<extension name="dw3_warten">
<condition field="${sip_h_X-ORIGINAL-DDI-URI}" expression="@@DW3_DDI@@">
<action application="sleep" data="20000"/>
<action application="set" data="record_stereo=false"/>
<action application="set" data="RECORD_ANSWER_REQ=true"/>
<action application="answer"/>
<action application="sleep" data="700"/>
<action application="playback" data="@@PROJEKT@@/telefon/ansage.wav"/>
<action application="record"
data="@@PROJEKT@@/telefon/eingang/${strftime(%Y%m%d-%H%M%S)}_${caller_id_number}.wav 120 200 4"/>
<action application="hangup"/>
</condition>
</extension>
</include>