I previously wrote about how CM determines proper inbound call delivery (inc-call-handling-trmt), but might loosely be considered the DID -> Extension association. But… the inc-call-handling-trmt tables only tell CM how to figure out which extension to which a call should be delivered; they don’t actually associate DIDs with extensions. So how does CM determine the outbound calling party number when a station/extension makes an outgoing call? Enter public-unknown-numbering.

list public-unknown-numbering                                          Page   x

                     NUMBERING - PUBLIC/UNKNOWN FORMAT
                                                    Total
         Ext Ext           Trk       CPN             CPN
         Len Code          Grp(s)    Prefix          Len
         4   5289                    33055516        10

The “Ext Len” and “Ext Code” columns behave similarly to “Number Len” and “Number Digits” on inc-call-handling-trmt – just with extensions rather than inbound digit strings.

To calculate the sent number on a per-entry basis, using the example above:

  • Check the Total CPN Length column to see how many digits should be sent in total. (10)
  • Calculate the length of the CPN Prefix. (8)
  • Subtract the calculated CPN Prefix length from the Total CPN Length, and remember that number as the Remaining Extension Digits. (10-8=2)
  • Take the number of Remaining Extension Digits (2) from the right side of the extension (5289), and append it to the CPN Prefix (33055516). The result is 3305551689.

CM determines which entry is most specific, and then uses it, by first filtering by the appropriate extension length, and then ordering the entries by most specific (longest extension code) to least specific (shortest extension code). It then determines whether there is an entry for the specific trunk group that the call is traversing; if there is, it’s used. If not, the entry without a trunk group being defined is used. And of course if no entry is matched, CM cannot determine what number to send, and therefore doesn’t send one.

Let’s consider another example:

list public-unknown-numbering                                          Page   x

                     NUMBERING - PUBLIC/UNKNOWN FORMAT
                                                    Total
         Ext Ext           Trk       CPN             CPN
         Len Code          Grp(s)    Prefix          Len
         4   2                                       0
         4   7                       630555          10
         4   7             15        330322          10
         4   7             45        8155552700      10
         4   70                      220835          10
         4   707                     3808352702      10
         4   7074                    7406546414      10
         4   7074          15        33032211        10

If extension 7074 places a call, and the call traverses trunk-group 15, the sent number will be 3303221174. If it’s traversing any other trunk-group, the sent number will be 7406546414. Easy, right? Let’s try another.

If extension 7068 places a call, and that call traverses trunk-group 15:

  • Check to see if there is an entry of extension length 4 and extension code 7068. There’s not.
  • Check to see if there is an entry of extension length 4 and extension code 706. There’s not.
  • Check to see if there is an entry of extension length 4 and extension code 70. Entries found.
  • Determine if there is an entry for trunk-group 15. There’s not..
  • Evaluate the entry that does not have a trunk-group defined. The result is that the sent number will be 2208357068.

Of course, for any of that to be effective, the call needs to traverse a trunk-group that supports sending CPNs, and it has to be enabled for that trunk-group.

change trunk-group 1                                            Page   1 of  21
                                TRUNK GROUP

Group Number: 1                    Group Type: isdn          CDR Reports: y
[...]
Service Type: public-ntwrk          Auth Code? n            TestCall ITC: rest
[...]
change trunk-group 1                                            Page   3 of  21
TRUNK FEATURES
[...]
                                      Send Name: n      Send Calling Number: y
[...]

Whether or not each station’s public-unknown-number is sent as the CPN is configured via “change station”:

change station 7074                                             Page   2 of   6
                                     STATION
FEATURE OPTIONS
[...]
                                     Per Station CPN - Send Calling Number? y
[...]

Valid options are y (yes, send CPN), n (no, don’t send CPN), or r (send restricted flag). If set to ‘y’, then CM uses the public-unknown-numbering table to determine the value to send for the trunk-group that the call is traversing. If set to ’n’, CM doesn’t send a CPN, but also doesn’t set the restricted CPN flag. If set to ‘r’, then CM doesn’t send a CPN, but does set the restricted CPN flag. I’m not a fan of using option ’n’ – in many cases, the upstream carrier will insert a default telephone number (or billing account number, or primary telephone number) as the CPN if none is present. On the flip side, when the environment has been deliberately and appropriately designed, that might be the only desired configuration. If your intent is to prevent the called party from seeing the calling party number, use option ‘r’.


It was pointed out to me that the original version of this post didn’t actually indicate how to change the unknown number for an extension. That’s done via “change public-unknown-numbering (extension-length) ext-digits (extension)”, like so:

change public-unknown-numbering 4 ext-digits 7074               Page   1 of   2
                      NUMBERING - PUBLIC/UNKNOWN FORMAT
                                           Total
Ext Ext           Trk       CPN             CPN
Len Code          Grp(s)    Prefix          Len
                                                  Total Administered: 157
 4  7074          15        7406546414      10       Maximum Entries: 9999

                                                  Note: If an entry applies to
                                                  a SIP connection to Avaya
                                                  Aura(R) Session Manager,
                                                  the resulting number must
                                                  be a complete E.164 number.

                                                  Communication Manager
                                                  automatically inserts
                                                  a '+' digit in this case.

The above example indicates that extension 7074 is already being mapped to “7406546414” whenever it traverses trunk-group 15 outbound. If you need to add another mapping for that extension, or if that extension is not listed, simply go to page 2 and complete the necessary fields. Page 2 is always blank, for adding, whereas page 1 jumps to the point in the list where the requested extension is stored (in order numerically).