I have Asterisk sending unanswered calls to Exchange Unified Messaging. Exchange needs to see a diversion to know where to direct the call. I set the diversion header but the Dial is using a different diversion header that I did not set, which is wrong.
The correct header would be this:
Diversion: tel:200;reason=no-answer;screen=no;privacy=off
Asterisk is sending this:
Diversion: sip:+1410888888@10.0.10.15;reason=unconditional
I cannot figure out where that is coming from. I set a header “X-debug” and it gets set correctly.
Dialplan:
[exchange]
exten => _[*0-9]!,1,Noop(exchange UM)
same => n,Set(PJSIP_HEADER(remove,*)=)
same => n,Dial(PJSIP/Exchange_2,,b(diversion^${EXTEN}^1))
[diversion]
exten => _[*0-9]!,1,Noop(set diversion)
same => n,Set(PJSIP_HEADER(remove,*)=)
same => n,Set(PJSIP_HEADER(add,X-debug)=<tel:${EXTEN}>\;reason=no-answer\;screen=no\;privacy=off)
same => n,Set(PJSIP_HEADER(add,Diversion)=<tel:${EXTEN}>\;reason=no-answer\;screen=no\;privacy=off)
same => n,Return()
Log output:
Executing [200@exchange:1] NoOp("PJSIP/Twilio-East-0000002d", "exchange UM") in new stack
-- Executing [200@exchange:2] Set("PJSIP/Twilio-East-0000002d", "PJSIP_HEADER(remove,*)=") in new stack
-- Executing [200@exchange:3] Dial("PJSIP/Twilio-East-0000002d", "PJSIP/Exchange_2,,b(diversion^200^1)") in new stack
-- PJSIP/Exchange_2-0000002e Internal Gosub(diversion,200,1) start
-- Executing [200@diversion:1] NoOp("PJSIP/Exchange_2-0000002e", "set diversion") in new stack
-- Executing [200@diversion:2] Set("PJSIP/Exchange_2-0000002e", "PJSIP_HEADER(remove,*)=") in new stack
[2018-10-12 14:16:43] ERROR[31760]: res_pjsip_header_funcs.c:410 remove_header: No headers had been previously added to this session.
-- Executing [200@diversion:3] Set("PJSIP/Exchange_2-0000002e", "PJSIP_HEADER(add,X-Aquila)=<tel:200>;reason=no-answer;screen=no;privacy=off") in new stack
-- Executing [200@diversion:4] Set("PJSIP/Exchange_2-0000002e", "PJSIP_HEADER(add,Diversion)=<tel:200>;reason=no-answer;screen=no;privacy=off") in new stack
-- Executing [200@diversion:5] Return("PJSIP/Exchange_2-0000002e", "") in new stack
== Spawn extension (from-internal, 200, 1) exited non-zero on 'PJSIP/Exchange_2-0000002e'
-- PJSIP/Exchange_2-0000002e Internal Gosub(diversion,200,1) complete GOSUB_RETVAL=
-- Called PJSIP/Exchange_2
== Everyone is busy/congested at this time (1:0/0/1)
-- Auto fallthrough, channel 'PJSIP/Twilio-East-0000002d' status is 'CHANUNAVAIL'
And finally, this is what was actually sent to Exchange:
Session Initiation Protocol (INVITE)
Request-Line: INVITE sip:aquila-dag.aquila.local:5067 SIP/2.0
Message Header
Via: SIP/2.0/TCP 10.0.10.15:5060;rport;branch=z9hG4bKPj8ba4048b-21d8-46ef-a34b-e908deb7ba4c;alias
From: "3018888888" <sip:3018888888@10.0.10.15>;tag=278ca39d-ff44-4444-a8da-0879a9b6e3b3
To: <sip:aquila-dag.aquila.local>
Contact: <sip:asterisk@10.0.10.15:5060;transport=TCP>
Call-ID: 830f5254-1781-440c-ac4f-3ee2d531860b
CSeq: 1907 INVITE
Allow: OPTIONS, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, REGISTER, MESSAGE, REFER
Supported: 100rel, timer, replaces, norefersub
Session-Expires: 1800
Min-SE: 90
X-debug: <tel:200>;reason=no-answer;screen=no;privacy=off
Diversion: <sip:+14108888888@10.0.10.15>;reason=unconditional
Max-Forwards: 70
User-Agent: FPBX-14.0.3.19(15.5.0)
Content-Type: application/sdp
Content-Length: 333
Message Body
As you can see, the X-debug is correct, but the Diversion is wrong.
One final clue, if the source endpoint is local, it works. If the source endpoint is an outside caller, the diversion gets messed up.