My scenario is with FreePBX 2.4.0.?:
Carrier/PRI -> * -> PBX/PRI

The context for the carrier channels is:

exten => _3997,1,Set(CALLERID(num)=${CALLERID(num)})
exten => _3997,n,Set(CALLERID(name)=${CALLERID(name)})
exten => _3997,n,Goto(from-internal,${EXTEN},1)
; etc. for each non-SIP/IAX extension on the PBX, then to get the SIP/IAX users
exten => _.,1,Set(CALLERID(number)=${CALLERID(number)})
exten => _.,n,Set(CALLERID(name)=${CALLERID(name)})
exten => _.,n,Goto(from-pstn,${EXTEN},1)

When calls land on the PBX, the number makes it but the name doesn’t. In fact, even when making calls from SIP to the PBX the number is passed but the name isn’t.

To get calls to the PBX, I defined a route through the GUI. I map extensions through the Dial Patterns which creates the following in extensions_additional.conf:

include => outrt-001-Norstar-custom
exten => 3997,1,Macro(user-callerid,SKIPTTL,)
exten => 3997,n,Set(_NODEST=)
exten => 3997,n,Macro(record-enable,${AMPUSER},OUT,)
exten => 3997,n,Macro(dialout-trunk,5,${EXTEN},,)
exten => 3997,n,Macro(outisbusy,)

; end of [outrt-001-Norstar]

While I haven’t thoroughly read through the user-callerid macro, I’d presume that it does the right thing. Or maybe not.

The result is the log on the PBX shows “UNKNOWN” for the name on all inbound calls.

Outbound calls: PBX/PRI -> * and PBX/PRI -> * -> Carrier/PRI all work as expected.