Caller ID Disa/Forwarding never works with Asterisk/voip.ms

I’ve posted this before but never got it resolved. Trying to set up a test server but for some reason I can never get (Canadian style) caller ID to work properly with Disa, forwarding etc. My setup is:

  1. Hosted Asterisk PBX running PIAF Purple
  2. Connected to a voip.ms trunk for inbound/outbound with routes assigned
  3. DIDs with voip.ms pointing to my Asterisk System
  4. A DISA Set up as a test that has Caller ID set as “Sunshine Tech” , as per the help bubble it says “User Name” 33333 etc.

No matter what I try, I can never get it to display the caller ID on the outbound DISA and can’t figure out why. Below is the SIP log of me calling into a voip.ms DID 647-478-1010 which is set to go right to DISA, from my cell phone 416-122-1199 and then dialing 18662223456 as a test. No matter what, the voip.ms log, and the person I’m calling always just sees the NAME as 6475576644 and Number as 6475576644 it never shows “Sunshine Tech” in this example as the name. This is the same with if I even just set an extension to forward to my cell, it never keeps the persons name, it only shows their phone # as the name and number. I can’t figure out for the life of me why it won’t send the name but voip.ms says it’s a problem with my config. However I have installed PIAF, FreePBX, AsteriskNow, literally every distribution and it always does it, so either it has to be just not supported or it has to be some kind of setting?

– Executing [6474781010@from-trunk:1] Set(“SIP/voipms-00000021”, “__FROM_DID=6474781010”) in new stack
– Executing [6474781010@from-trunk:2] Gosub(“SIP/voipms-00000021”, “app-blacklist-check,s,1()”) in new stack
– Executing [s@app-blacklist-check:1] GotoIf(“SIP/voipms-00000021”, “0?blacklisted”) in new stack
– Executing [s@app-blacklist-check:2] Set(“SIP/voipms-00000021”, “CALLED_BLACKLIST=1”) in new stack
– Executing [s@app-blacklist-check:3] Return(“SIP/voipms-00000021”, “”) in new stack
– Executing [6474781010@from-trunk:3] Set(“SIP/voipms-00000021”, “CDR(did)=6474781010”) in new stack
– Executing [6474781010@from-trunk:4] ExecIf(“SIP/voipms-00000021”, “0 ?Set(CALLERID(name)=4161221199)”) in new stack
– Executing [6474781010@from-trunk:5] Set(“SIP/voipms-00000021”, “__CALLINGPRES_SV=allowed_not_screened”) in new stack
– Executing [6474781010@from-trunk:6] Set(“SIP/voipms-00000021”, “CALLERPRES()=allowed_not_screened”) in new stack
– Executing [6474781010@from-trunk:7] Goto(“SIP/voipms-00000021”, “disa,1,1”) in new stack
– Goto (disa,1,1)
– Executing [1@disa:1] Authenticate(“SIP/voipms-00000021”, “336511,”) in new stack
– <SIP/voipms-00000021> Playing ‘agent-pass.gsm’ (language ‘en’)
– <SIP/voipms-00000021> Playing ‘auth-thankyou.gsm’ (language ‘en’)
– Executing [1@disa:2] Set(“SIP/voipms-00000021”, “_DISA=disa^1^newcall”) in new stack
– Executing [1@disa:3] Set(“SIP/voipms-00000021”, “_DISACONTEXT=from-internal”) in new stack
– Executing [1@disa:4] Set(“SIP/voipms-00000021”, “_KEEPCID=TRUE”) in new stack
– Executing [1@disa:5] Set(“SIP/voipms-00000021”, “_HANGUP=”) in new stack
– Executing [1@disa:6] Set(“SIP/voipms-00000021”, “TIMEOUT(digit)=5”) in new stack
– Digit timeout set to 5.000
– Executing [1@disa:7] Set(“SIP/voipms-00000021”, “TIMEOUT(response)=10”) in new stack
– Response timeout set to 10.000
– Executing [1@disa:8] Set(“SIP/voipms-00000021”, “CALLERID(all)=“Sunshine Tech” <6475576644>”) in new stack
– Executing [1@disa:9] Set(“SIP/voipms-00000021”, “__REALCALLERIDNUM=6475576644”) in new stack
– Executing [1@disa:10] DISA(“SIP/voipms-00000021”, “no-password,disa-dial”) in new stack
– Executing [18662223456@disa-dial:1] NoOp(“SIP/voipms-00000021”, “called 18662223456 in from-internal by ID: 1”) in new stack
– Executing [18662223456@disa-dial:2] Dial(“SIP/voipms-00000021”, “Local/18662223456@from-internal,300,”) in new stack
– Called Local/18662223456@from-internal
– Executing [18662223456@from-internal:1] Macro(“Local/18662223456@from-internal-00000006;2”, “user-callerid,LIMIT,”) in new stack
– Executing [s@macro-user-callerid:1] Set(“Local/18662223456@from-internal-00000006;2”, “AMPUSER=6475576644”) in new stack
– Executing [s@macro-user-callerid:2] GotoIf(“Local/18662223456@from-internal-00000006;2”, “0?report”) in new stack
– Executing [s@macro-user-callerid:3] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(REALCALLERIDNUM=6475576644)”) in new stack
– Executing [s@macro-user-callerid:4] Set(“Local/18662223456@from-internal-00000006;2”, “AMPUSER=”) in new stack
– Executing [s@macro-user-callerid:5] Set(“Local/18662223456@from-internal-00000006;2”, “AMPUSERCIDNAME=”) in new stack
– Executing [s@macro-user-callerid:6] GotoIf(“Local/18662223456@from-internal-00000006;2”, “1?report”) in new stack
– Goto (macro-user-callerid,s,13)
– Executing [s@macro-user-callerid:13] GotoIf(“Local/18662223456@from-internal-00000006;2”, “1?continue”) in new stack
– Goto (macro-user-callerid,s,26)
– Executing [s@macro-user-callerid:26] Set(“Local/18662223456@from-internal-00000006;2”, “CALLERID(number)=6475576644”) in new stack
– Executing [s@macro-user-callerid:27] Set(“Local/18662223456@from-internal-00000006;2”, “CALLERID(name)=Sunshine Tech”) in new stack
– Executing [s@macro-user-callerid:28] Set(“Local/18662223456@from-internal-00000006;2”, “CHANNEL(language)=en”) in new stack
– Executing [18662223456@from-internal:2] Set(“Local/18662223456@from-internal-00000006;2”, “MOHCLASS=default”) in new stack
– Executing [18662223456@from-internal:3] Set(“Local/18662223456@from-internal-00000006;2”, “_NODEST=”) in new stack
– Executing [18662223456@from-internal:4] Gosub(“Local/18662223456@from-internal-00000006;2”, “sub-record-check,s,1(out,18662223456,)”) in new stack
– Executing [s@sub-record-check:1] GotoIf(“Local/18662223456@from-internal-00000006;2”, “1?check”) in new stack
– Goto (sub-record-check,s,6)
– Executing [s@sub-record-check:6] Set(“Local/18662223456@from-internal-00000006;2”, “__MON_FMT=wav”) in new stack
– Executing [s@sub-record-check:7] GotoIf(“Local/18662223456@from-internal-00000006;2”, “1?next”) in new stack
– Goto (sub-record-check,s,10)
– Executing [s@sub-record-check:10] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Return()”) in new stack
– Executing [s@sub-record-check:11] GotoIf(“Local/18662223456@from-internal-00000006;2”, “0?out,1”) in new stack
– Executing [s@sub-record-check:12] Set(“Local/18662223456@from-internal-00000006;2”, “__REC_STATUS=INITIALIZED”) in new stack
– Executing [s@sub-record-check:13] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(__REC_POLICY_MODE=)”) in new stack
– Executing [s@sub-record-check:14] Set(“Local/18662223456@from-internal-00000006;2”, “NOW=1369061565”) in new stack
– Executing [s@sub-record-check:15] Set(“Local/18662223456@from-internal-00000006;2”, “__DAY=20”) in new stack
– Executing [s@sub-record-check:16] Set(“Local/18662223456@from-internal-00000006;2”, “__MONTH=05”) in new stack
– Executing [s@sub-record-check:17] Set(“Local/18662223456@from-internal-00000006;2”, “__YEAR=2013”) in new stack
– Executing [s@sub-record-check:18] Set(“Local/18662223456@from-internal-00000006;2”, “__TIMESTR=20130520-075245”) in new stack
– Executing [s@sub-record-check:19] Set(“Local/18662223456@from-internal-00000006;2”, “__FROMEXTEN=6475576644”) in new stack
– Executing [s@sub-record-check:20] Set(“Local/18662223456@from-internal-00000006;2”, “__CALLFILENAME=out-18662223456-6475576644-20130520-075245-1369061565.48”) in new stack
– Executing [s@sub-record-check:21] Goto(“Local/18662223456@from-internal-00000006;2”, “out,1”) in new stack
– Goto (sub-record-check,out,1)
– Executing [out@sub-record-check:1] ExecIf(“Local/18662223456@from-internal-00000006;2”, “1?Set(__REC_POLICY_MODE=)”) in new stack
– Executing [out@sub-record-check:2] GosubIf(“Local/18662223456@from-internal-00000006;2”, “0?record,1(exten,18662223456,6475576644)”) in new stack
– Executing [out@sub-record-check:3] Return(“Local/18662223456@from-internal-00000006;2”, “”) in new stack
– Executing [18662223456@from-internal:5] Macro(“Local/18662223456@from-internal-00000006;2”, “dialout-trunk,1,18662223456,”) in new stack
– Executing [s@macro-dialout-trunk:1] Set(“Local/18662223456@from-internal-00000006;2”, “DIAL_TRUNK=1”) in new stack
– Executing [s@macro-dialout-trunk:2] GosubIf(“Local/18662223456@from-internal-00000006;2”, “0?sub-pincheck,s,1()”) in new stack
– Executing [s@macro-dialout-trunk:3] GotoIf(“Local/18662223456@from-internal-00000006;2”, “0?disabletrunk,1”) in new stack
– Executing [s@macro-dialout-trunk:4] Set(“Local/18662223456@from-internal-00000006;2”, “DIAL_NUMBER=18662223456”) in new stack
– Executing [s@macro-dialout-trunk:5] Set(“Local/18662223456@from-internal-00000006;2”, “DIAL_TRUNK_OPTIONS=tr”) in new stack
– Executing [s@macro-dialout-trunk:6] Set(“Local/18662223456@from-internal-00000006;2”, “OUTBOUND_GROUP=OUT_1”) in new stack
– Executing [s@macro-dialout-trunk:7] GotoIf(“Local/18662223456@from-internal-00000006;2”, “1?nomax”) in new stack
– Goto (macro-dialout-trunk,s,9)
– Executing [s@macro-dialout-trunk:9] GotoIf(“Local/18662223456@from-internal-00000006;2”, “0?skipoutcid”) in new stack
– Executing [s@macro-dialout-trunk:10] Set(“Local/18662223456@from-internal-00000006;2”, “DIAL_TRUNK_OPTIONS=”) in new stack
– Executing [s@macro-dialout-trunk:11] Macro(“Local/18662223456@from-internal-00000006;2”, “outbound-callerid,1”) in new stack
– Executing [s@macro-outbound-callerid:1] ExecIf(“Local/18662223456@from-internal-00000006;2”, “1?Set(CALLERPRES()=allowed_not_screened)”) in new stack
– Executing [s@macro-outbound-callerid:2] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(REALCALLERIDNUM=6475576644)”) in new stack
– Executing [s@macro-outbound-callerid:3] GotoIf(“Local/18662223456@from-internal-00000006;2”, “0?normcid”) in new stack
– Executing [s@macro-outbound-callerid:4] Set(“Local/18662223456@from-internal-00000006;2”, “USEROUTCID=6475576644”) in new stack
– Executing [s@macro-outbound-callerid:5] GotoIf(“Local/18662223456@from-internal-00000006;2”, “1?bypass”) in new stack
– Goto (macro-outbound-callerid,s,7)
– Executing [s@macro-outbound-callerid:7] Set(“Local/18662223456@from-internal-00000006;2”, “EMERGENCYCID=”) in new stack
– Executing [s@macro-outbound-callerid:8] Set(“Local/18662223456@from-internal-00000006;2”, “TRUNKOUTCID=6474789362”) in new stack
– Executing [s@macro-outbound-callerid:9] GotoIf(“Local/18662223456@from-internal-00000006;2”, “1?trunkcid”) in new stack
– Goto (macro-outbound-callerid,s,12)
– Executing [s@macro-outbound-callerid:12] ExecIf(“Local/18662223456@from-internal-00000006;2”, “1?Set(CALLERID(all)=6474789362)”) in new stack
– Executing [s@macro-outbound-callerid:13] ExecIf(“Local/18662223456@from-internal-00000006;2”, “1?Set(CALLERID(all)=6475576644)”) in new stack
– Executing [s@macro-outbound-callerid:14] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(CALLERID(all)=)”) in new stack
– Executing [s@macro-outbound-callerid:15] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(CALLERPRES()=prohib_passed_screen)”) in new stack
– Executing [s@macro-dialout-trunk:12] GosubIf(“Local/18662223456@from-internal-00000006;2”, “0?sub-flp-1,s,1()”) in new stack
– Executing [s@macro-dialout-trunk:13] Set(“Local/18662223456@from-internal-00000006;2”, “OUTNUM=18662223456”) in new stack
– Executing [s@macro-dialout-trunk:14] Set(“Local/18662223456@from-internal-00000006;2”, “custom=SIP/voipms”) in new stack
– Executing [s@macro-dialout-trunk:15] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(DIAL_TRUNK_OPTIONS=M(setmusic^default))”) in new stack
– Executing [s@macro-dialout-trunk:16] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(DIAL_TRUNK_OPTIONS=M(confirm))”) in new stack
– Executing [s@macro-dialout-trunk:17] Macro(“Local/18662223456@from-internal-00000006;2”, “dialout-trunk-predial-hook,”) in new stack
– Executing [s@macro-dialout-trunk-predial-hook:1] MacroExit(“Local/18662223456@from-internal-00000006;2”, “”) in new stack
– Executing [s@macro-dialout-trunk:18] GotoIf(“Local/18662223456@from-internal-00000006;2”, “0?bypass,1”) in new stack
– Executing [s@macro-dialout-trunk:19] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(CONNECTEDLINE(num,i)=18662223456)”) in new stack
– Executing [s@macro-dialout-trunk:20] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(CONNECTEDLINE(name,i)=CID:6475576644)”) in new stack
– Executing [s@macro-dialout-trunk:21] GotoIf(“Local/18662223456@from-internal-00000006;2”, “0?customtrunk”) in new stack
– Executing [s@macro-dialout-trunk:22] Dial(“Local/18662223456@from-internal-00000006;2”, “SIP/voipms/18662223456,300,”) in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
– Called SIP/voipms/18662223456
– SIP/voipms-00000022 is making progress passing it to Local/18662223456@from-internal-00000006;2
– Local/18662223456@from-internal-00000006;1 is making progress passing it to SIP/voipms-00000021
– SIP/voipms-00000022 answered Local/18662223456@from-internal-00000006;2
– Local/18662223456@from-internal-00000006;1 answered SIP/voipms-00000021
– Executing [h@macro-dialout-trunk:1] Macro(“Local/18662223456@from-internal-00000006;2”, “hangupcall,”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“Local/18662223456@from-internal-00000006;2”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,3)
– Executing [s@macro-hangupcall:3] ExecIf(“Local/18662223456@from-internal-00000006;2”, “0?Set(CDR(recordingfile)=)”) in new stack
– Executing [s@macro-hangupcall:4] Hangup(“Local/18662223456@from-internal-00000006;2”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 4) exited non-zero on ‘Local/18662223456@from-internal-00000006;2’ in macro ‘hangupcall’
== Spawn extension (macro-dialout-trunk, h, 1) exited non-zero on ‘Local/18662223456@from-internal-00000006;2’
== Spawn extension (macro-dialout-trunk, s, 22) exited non-zero on ‘Local/18662223456@from-internal-00000006;2’ in macro ‘dialout-trunk’
== Spawn extension (from-internal, 18662223456, 5) exited non-zero on ‘Local/18662223456@from-internal-00000006;2’
– Executing [h@disa-dial:1] NoOp(“SIP/voipms-00000021”, “called h in from-internal by ID: 1”) in new stack
– Executing [h@disa-dial:2] Dial(“SIP/voipms-00000021”, “Local/h@from-internal,300,”) in new stack
– Called Local/h@from-internal
– Executing [h@from-internal:1] Hangup(“Local/h@from-internal-00000007;2”, “”) in new stack
== Spawn extension (from-internal, h, 1) exited non-zero on ‘Local/h@from-internal-00000007;2’
– Executing [h@from-internal:1] Hangup(“Local/h@from-internal-00000007;2”, “”) in new stack
== Spawn extension (from-internal, h, 1) exited non-zero on ‘Local/h@from-internal-00000007;2’
– No one is available to answer at this time (1:0/0/0)
– Executing [h@disa-dial:3] Gosub(“SIP/voipms-00000021”, “s-NOANSWER,1()”) in new stack
– Executing [s-NOANSWER@disa-dial:1] NoOp(“SIP/voipms-00000021”, “DISA Dial failed due to NOANSWER - returning to dial tone”) in new stack
– Executing [s-NOANSWER@disa-dial:2] PlayTones(“SIP/voipms-00000021”, “congestion”) in new stack
– Executing [s-NOANSWER@disa-dial:3] Wait(“SIP/voipms-00000021”, “3”) in new stack
== Spawn extension (disa-dial, s-NOANSWER, 3) exited non-zero on ‘SIP/voipms-00000021’
== Spawn extension (disa-dial, 18662223456, 2) exited non-zero on ‘SIP/voipms-00000021’

FreePBX does not forward the name in call forwarding or follow-me, It may be the same for DISA. There seems to be no interest in addressing the situation.

http://www.freepbx.org/trac/ticket/5691

Very few telephony companies will honor your spoofed CNAM (callerid(name)), the big guys rely on LERG the smaller guys on “dipping” into a LERG subscriber. Some Voip providers will not honor your proposed CallerID(number) either, it must be within the set of numbers you purchase from them. You will need to check with your provider(s) as to what they accept.

That’s weird why would there be no interest in it? If I’m working from home or remotely with my cell phone and have a call follow me I want to see the name of who is calling. It’s not the same in Canada, SIP and PRI show whatever caller ID you send to it, which my voip provider does. So as mentioned I can go into my Extension in free PBX and change my name to “Big Bird” and then call someone and it shows Big Bird on their caller ID so just doesn’t do it when forwarding or following. Cisco and our Avaya IP Office both do this so just seems like a basic feature.

According to Phillipe there were issues in the past with some providers choking on CNAM. As I mention in the ticket, I’m not sure why the advanced setting to block or allow CNAM and the per-trunk setting to block or allow CNAM are not sufficient to let us get the CID we want. The patch I submitted is pretty old and doesn’t work anymore with 2.10 or 2.11.

This is a confusing thread. Many providers allow you to send any CID.

You can’t send CNAME, not from FreePBX or any other phone service. The CNAME is in a database and has to be updated by your carrier, it is not real time.

If you set your CID to your house and you call someone the called parties provider will “dip” the database via an SS7-TCAP message and will get whatever your home provider entered into the national database.

As far as what this has to do with the LERG (Local Exchange Routing Guide), a document that associated NPA-NXX’s with SS7 point codes I have no clue. Maybe Dicko hit the sauce early tonight.

HeHe, I realized my error soon after posting but as edits are no longer allowed, and few know what LERG or TCAP is I left it as posted.

Sorry but you’re wrong, I already told you I’m not in the USA I’m in Canada. Do you need me to send you photos? I can go into FreePBX right now to my extension, and change the outbound caller ID to “Barack Obama” <4161231234>and call my cell phone and it will say on the caller ID “Barak Obama” and 416-123-1234. I just did it as a test and it’s immediate. If I call my home landline it’s the same. In Canada the provider passes whatever you send it, only land lines have fixed Caller ID. I can even send a screenshot of my call logs in my VoIP provider so that you know it’s not faked by adding that number to my iPhone caller ID first before calling. Trust me, whatever you enter as the Caller ID name/number the trunk sends.

This is very confusing, it is possible some VoIP carriers might have peering arrangements. My issues is that I know that CDMA IS95 REV b/CMDA 2k the voice side of 3G (can’t speak for EVDO) does not have data fields for name. I also just checked 3gpp.org for the latest IS-41C (SS7 mobility management) to GSM MAP overlay and can’t find a field. As far as the air interface for GSM, again no current experience so I can’t comment.

I do know that Canada is a North American Numbering Plan country (NANP), and every STP certainly has Canadian point codes.

So I have no clue how this is working but I would not count on it.

I am very interested in getting to bottom of this, who is your wireless and SIP carriers?

thx

His SIP carrier is apparently OCN 4727 “ISP Telecom” in Toronto Ontario, The claimed CallerID is with OCN 154E “Iristel Inc.” also in Toronto, Both seem to be SIP types. Maybe they share the same SCP. I can’t dip into lata 888 for CNAM, maybe you can.

Same here, just get back the region- “TORONTO ON”

Well I got it working by modifying the code in the extensions custom file and now it forwards as expected. There’s no real point discussing further as it’s not the same in Canada as it is in the USA. It has nothing to do with SIP even PRI will pass whatever name you send to it. Unlike your cell plans in the USA here some providers will provide caller ID with Name. I am with Rogers and Fido who is owned by Rogers does the same.

"Call Display, Name Display and WhoCalled

Never miss a call with this exclusive calling bundle.

Call Display with Name Display lets you see the incoming caller’s phone number and NAME on your
phone’s display even if they’re not in your address book. So you’ll always know who’s calling you.

Out of service coverage? In the subway? Your phone’s battery is drained? Never worry about missing
a call with WhoCalledTM. WhoCalled will send you a text message with any number plus Name that called you when your phone is off or out of service."

Caller name is sent with the call, there are no database lookups here.
http://www.canadadids.ca/blog/blog/2011/11/13/callerid-name-in-canada/
http://www.bell.cdn-telco.com/bid/bid-0011.pdf

As for mobile, Rogers does show caller name as well as number, whether this is sent OOB, or GSM has been updated I don’t know (Canadian carriers don’t use CDMA except in a legacy status for old handsets.) An OOB transmission seems unlikely though, since it would require hardware manufacturers to support it. None of the other major carriers support it.