Возникают задачи, для решения которых необходимо произвести различные манипуляции с набранным пользователем номером - удалить первую набранную цифру, либо добавить несколько цифр. 
Либо заменить набранный номер полностью другим. Для этого в ESR-12V\15V уже есть встроенный функционал. Рассмотрим на примере подробнее.

Дано: настроен функционал PBX на ESR. Настроен и зарегистрирован на внутреннем SIP-сервере пользователь. ESR связан с еще одной IP PBX sip транком.
Необходимо:  часто для выхода в город используют префикс 9.  Необходимо при наборе пользователем телефонного номера 9555 удалить префикс 9 и передать вызов на встречную IP PBX с номером 555.
Решение: для решения задачи создадим два контекста - в одном sip_phone будет происходить анализ набранного номера для связи внутри встроенной в ESR IP PBX. Другой trunk_to_SIP_server необходим для
маршрутизации исходящих вызовов в sip транк на встречную IP PBX. В контексте sip_phone выполним модификацию номера и отправим в контекст trunk_to_SIP_server для дальнейшего анализа цифр номера.
Модификацию номера будем производит с помощью переменной ${EXTEN}, которая содержит в себе ранее набранный пользователем номер.
Переменная ${EXTEN} в общем случае имеет полный синтаксис ${EXTEN:x:y}, где x – начальная позиция и y – количество возвращаемых цифр. Чтобы удалить первую цифру номера, надо выполнить ${EXTEN:1}.

Пример настройки
pbx
  ruleset sip_phone
    rule 40
       pattern '9555,1,Goto(trunk_to_SIP_server,${EXTEN:1},1)'
       enable
    exit
    rule 41
       pattern '9555,2,Hangup()'
       enable
    exit
  exit
  ruleset trunk_to_SIP_server
    rule 30
      pattern '555,1,Dial(SIP/${EXTEN}@203.0.113.1)'
      enable
    exit
    rule 31
      pattern '555,2,Hangup()'
      enable
    exit
  exit
  enable
exit

Посмотрим результат предложенной конфигурации на входе ESR

INVITE на входе
esr-12v# monitor gigabitethernet 1/0/1 protocol udp destination-port 5060
10:12:41.518418 00:15:65:be:19:a8 > e4:5a:d4:a1:8e:6a, ethertype IPv4 (0x0800), length 1086: (tos 0x68, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 1072)
    192.0.2.2.5060 > 192.0.2.1.5060: SIP, length: 1044
        INVITE sip:9555@192.0.2.1:5060 SIP/2.0
        Via: SIP/2.0/UDP 192.0.2.2:5060;branch=z9hG4bK3282389953
        From: "111" <sip:111@192.0.2.1:5060>;tag=3596110097
        To: <sip:9555@192.0.2.1:5060>
        Call-ID: 0_2748444977@192.0.2.2
        CSeq: 2 INVITE
        Contact: <sip:111@192.0.2.2:5060>
        Authorization: Digest username="111", realm="realm", nonce="29061de5", uri="sip:9555@192.0.2.1:5060", response="d3792f35a1317274c3df1ce457d5250f", algorithm=MD5
        Content-Type: application/sdp
        Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE
        Max-Forwards: 70
        User-Agent: Yealink SIP-T21P_E2 52.80.14.2
        Allow-Events: talk,hold,conference,refer,check-sync
        Supported: replaces
        Content-Length: 302

        v=0
        o=- 20022 20022 IN IP4 192.0.2.2
        s=SDP data
        c=IN IP4 192.0.2.2
        t=0 0
        m=audio 11940 RTP/AVP 9 0 8 18 101
        a=rtpmap:9 G722/8000
        a=rtpmap:0 PCMU/8000
        a=rtpmap:8 PCMA/8000
        a=rtpmap:18 G729/8000
        a=fmtp:18 annexb=no
        a=ptime:20
        a=sendrecv
        a=rtpmap:101 telephone-event/8000
        a=fmtp:101 0-15

И на выходе ESR

INVITE на выходе ESR
esr-12v# monitor gigabitethernet 1/0/4 protocol udp destination-port 5060
10:21:29.179613 e4:5a:d4:a1:8e:6d > a8:f9:4b:ad:22:35, ethertype IPv4 (0x0800), length 882: (tos 0x0, ttl 64, id 45714, offset 0, flags [none], proto UDP (17), length 868)
    203.0.113.2.5060 > 203.0.113.1.5060: SIP, length: 840
        INVITE sip:555@203.0.113.1 SIP/2.0
        Via: SIP/2.0/UDP 203.0.113.2:5060;branch=z9hG4bK1a697fd0
        Max-Forwards: 70
        From: "111" <sip:111@203.0.113.2>;tag=as0f1674ca
        To: <sip:555@203.0.113.1>
        Contact: <sip:111@203.0.113.2:5060>
        Call-ID: 0edb5a77624902181692f2ba3d19a90e@203.0.113.2:5060
        CSeq: 102 INVITE
        User-Agent: ESR-12V
        Date: Thu, 24 Apr 2025 10:21:13 GMT
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
        Supported: replaces
        Content-Type: application/sdp
        Content-Length: 299

        v=0
        o=root 1403825271 1403825271 IN IP4 203.0.113.2
        s=ESR-12V
        c=IN IP4 203.0.113.2
        t=0 0
        m=audio 10250 RTP/AVP 8 3 0 101
        a=rtpmap:8 PCMA/8000
        a=rtpmap:3 GSM/8000
        a=rtpmap:0 PCMU/8000
        a=rtpmap:101 telephone-event/8000
        a=fmtp:101 0-16
        a=silenceSupp:off - - - -
        a=ptime:20
        a=sendrecv

Также доступны более сложные варианты модификации. Например 
 pattern '9555,1,Goto(trunk_to_SIP_server,111${EXTEN:3},1)' заменит первые 3 цифры номера единицами, получится 1115.
 pattern '9555,1,Goto(trunk_to_SIP_server,${EXTEN:2:2},1)' отсчитает две цифры и вернет две следующие, получится 55.
 pattern '9555,1,Goto(trunk_to_SIP_server,${EXTEN:-4:2},1)' отсчитает четыре цифры с конца номера и вернет две,получится 95

Конфигурация
interface gigabitethernet 1/0/1
  description "LAN"
  ip firewall disable
  ip address 192.0.2.1/24
exit
interface gigabitethernet 1/0/4
  ip firewall disable
  ip address 203.0.113.2/24
exit

pbx
  ruleset sip_phone
    rule 40
      pattern '9555,1,Goto(trunk_to_SIP_server,${EXTEN:1},1)'
      enable
    exit
    rule 41
      pattern '9555,2,Hangup()'
      enable
    exit
  exit
  ruleset trunk_to_SIP_server
    rule 30
      pattern '555,1,Dial(SIP/${EXTEN}@203.0.113.1)'
      enable
    exit
    rule 31
      pattern '555,2,Hangup()'
      enable
    exit
  exit
  profile sip_phone
    client friend
    codec allow g711a
    codec allow g711u
    codec allow g722
    codec allow g726
    nat comedia
    qualify 10000
    ruleset sip_phone
  exit
  profile trunk_to_SIP_server
    type external
    client friend
    codec allow g711a
    codec allow g711u
    security level invite-port
    nat comedia
    qualify 10000
    host-address 203.0.113.1
    ruleset from_sip_server
  exit
  user 111
    profile sip_phone
    password encrypted CDE552
  exit
  enable
exit





  • Нет меток