Pre-dial Handler, How To Access Variables From Calling Channel?

Home » Asterisk Users » Pre-dial Handler, How To Access Variables From Calling Channel?
Asterisk Users 2 Comments

Hi List

Implementing screening and routing I have stumbled over this issue:

[pbx-router]
exten => s,1,NoOp(ROUTER FROM: ${CALLERID(Number)} TO: ${DESTINATION})
same => n,Set(SOURCE=${CHANNEL(name)})
same => n,Set(PAI=${PJSIP_HEADER(read,P-Asserted-Identity)})
same => n,Set(FROM=${CALLERID(Number)})
same => n,Set(TO=${DESTINATION})
same => n,Set(DIVERSION=${PJSIP_HEADER(read,Diversion)})
same => n,AGI(router.agi)
same => n,GoTo(dial-out,s,1)

[predial-handler]; Manipulate Header on OUTBOUND channel exten => screen-update,1,NoOp(PREDIAL FROM: ${CALLERID(Number)} TO: ${DESTINATION} PAI: ${PAI})
same => n,Set(PJSIP_HEADER(update,P-Asserted-Identity)=${PAI})
same => n,Return

[dial-out]
exten => s,1,NoOp(DIAL FROM: ${CALLERID(Number)} TO: ${DESTINATION} PAI: ${PAI})
same => n,Dial(PJSIP/${DESTINATION},,b(predial-handler,screen-update,1))
same => n,HangUp()

router.agi does perform among other things like emergency location routing: _screening_. It checks if the FROM and PAI sent from the customer correspond to phone numbers assigned to that customer and if not, replaces them with the correct values, also taking account customers with clip-no-screening agreement (they can set ‘From’ maybe also screened to some allowed number ranges, but PAI is ‘Provider provided, Network screened’ therefore we MUST set this to the customers real phone number)

I can correct ${CALLERID(number)} on the calling channel and this is preserved on the outgoing channel.

But I have not yet found any ‘easy’ way to pass the corrected ${PAI}
Variable to the callee channel.

Mit freundlichen Grüssen

-Benoît Panizzon-

I m p r o W a r e A G – Leiter Commerce Kunden

2 thoughts on - Pre-dial Handler, How To Access Variables From Calling Channel?

  • In article <20191115150532.53eb10e2@go.imp.ch>, Benoit Panizzon wrote:

    Try changing PAI to __PAI when setting:

    same => n,Set(__PAI=${PJSIP_HEADER(read,P-Asserted-Identity)})

    When setting a variable, if you prepend a single underscore, e.g. “_PAI”, the variable will be inherited by any channels created by the current channel (child channels), but will not be inherited further (it is effectively created as “PAI”, which is then non-inheritable).

    If you prepend two underscores, e.g. “__PAI”, the variable will be inherited by child channels, and will then be further inherited by grandchild channels and so on (it is effectively created as “__PAI” each time).

    You don’t need to speficy the __ when reading the variable, just use ${PAI}
    as before.

    See https://wiki.asterisk.org/wiki/display/AST/Variable+Inheritance

    Cheers Tony

    Tony Mountifield Work: tony@softins.co.ukhttp://www.softins.co.uk Play: tony@mountifield.orghttp://tony.mountifield.org

  • Hi Tony

    Thank you, exactly what I was looking for!

    Mit freundlichen Grüssen

    -Benoît Panizzon-

    I m p r o W a r e A G – Leiter Commerce Kunden