VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

AMI:Originate двух мобильных телефонов.

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

bonskeeper
Сообщения: 6
Зарегистрирован: 23 апр 2020, 12:16

AMI:Originate двух мобильных телефонов.

Сообщение bonskeeper »

Я пробовал несколько вариаций команды Originate и нормально соединяет только внутренний номер с внутренним и внутренний с мобильным. Мобильный с мобильным или мобильный с внутренним не соединяет. Поведение такое - происходит вызов на мобильный, я беру трубку, идет вызов на внутренний(другой мобильный) телефон, происходит один гудок(7 секунд продолжительность вызова у меня показывает на мобильном) и трубка автоматически кладется. В чем может быть причина?
Вот команды которые я использовал:
1) Из консоли астериска "originate PJSIP/some_external_number@siptrunk extension 6001@from-internal"
2) Из своего кода с использованием AMI {'Action': 'Originate', 'ActionID': '2', 'Channel': 'PJSIP/some_external_number@siptrunk', 'Context': 'from-internal', 'Exten': '6001', 'Priority': 1, 'Callerid': 'two_phones', 'Timeout': 30000}
3) Так-же использовал команду с Local {'Action': 'Originate', 'ActionID': '2', 'Channel': 'Local/some_external_number@from-internal', 'Context': 'from-internal', 'Exten': '6001', 'Priority': 1, 'Callerid': 'two_phones', 'Timeout': 40000}

Конфиги:

Код: Выделить всё

pjsip.conf

[zoiper]
type = endpoint
context = from-internal
disallow = all
allow = ulaw
aors = zoiper
auth = authzoiper

[zoiper]
type = aor
max_contacts = 1

[authzoiper]
type=auth
auth_type=userpass
password=some_pass
username=zoiper

[siptrunk]
type=endpoint
transport=simpletrans
context=from-internal
direct_media=no
disallow=all
allow=ulaw
outbound_auth=siptrunk
aors=siptrunk

[siptrunk]
type=aor
contact=sip:192.168.0.101:5060

[siptrunk]
type=auth
auth_type=userpass
username=some_name
password=some_pass

[siptrunk]
type=registration
outbound_auth=siptrunk
server_uri=sip:some_name@192.168.0.101:5060
client_uri=sip:some_name@192.168.0.101

[siptrunk]
type=identify
endpoint=siptrunk
match=192.168.0.101

extensions.conf
[from-internal]
include=>to-ld
exten=>6001,1,Set(CHANNEL(hangup_handler_push)=hdlr,s,1(args))
exten=>6001,n,dial(PJSIP/zoiper,20)


[hdlr]
exten => s,1,Verbose(0, Executed First)
same => n,Verbose(0, (${EXTEN}))
same => n,NoOp(dialstatus=${DIALSTATUS},causecode=${HANGUPCAUSE})
same => n,Set(HANGUPCAUSE_STRING=${HANGUPCAUSE_KEYS()})
same => n,Verbose(15, ${HANGUPCAUSE_STRING})
; start loop
same => n(hu_begin),NoOp()

; check exit condition (no more array to check)
same => n,GotoIf($[${LEN(${HANGUPCAUSE_STRING})}=0]?hu_exit)

; pull the next item
same => n,Set(ARRAY(item)=${HANGUPCAUSE_STRING})
same => n,Set(HANGUPCAUSE_STRING=${HANGUPCAUSE_STRING:${LEN(${item})}})

; display the channel name and cause codes
same => n,Verbose(0, Got Channel ID ${item} with Technology Cause Code ${HANGUPCAUSE(${item},tech)}, Asterisk Cause Code ${HANGUPCAUSE(${item},ast)})

; check exit condition (no more array to check)
same => n,GotoIf($[${LEN(${HANGUPCAUSE_STRING})}=0]?hu_exit)

; we still have entries to process, so strip the leading comma
same => n,Set(HANGUPCAUSE_STRING=${HANGUPCAUSE_STRING:1})

; go back to the beginning of the loop
same => n,Goto(hu_begin)

same => n(hu_exit),NoOp()
same => n,Return()

[to-ld]
include=>from-siptrunk
exten=>_0XXXXXXXXX,1,Progress
exten=>_0XXXXXXXXX,n,Dial(PJSIP/${EXTEN}@siptrunk,20)
exten=>_0XXXXXXXXX,n,NoOp(dialstatus=${DIALSTATUS},causecode=${HANGUPCAUSE})
exten=>_0XXXXXXXXX,n,Hangup

[from-siptrunk]
include=aasiptrunk

[aasiptrunk]
exten=>_0XXXXXXXXX,1,NoOp(${EXTEN})
exten=>_0XXXXXXXXX,n,Dial(PJSIP/${EXTEN}@siptrunk,20)
Сиптранк в данном случае это другой астериск к которому я подключен как клиент. А он в свою очередь подключен к провайдеру ip-телефонии. Может это важно.

Вывод из консоли c Local вместо PJSIP:

Manager 'hello' logged on from 127.0.0.1
-- Called some_external_number@from-internal
-- Executing [some_external_number@from-internal:1] Dial("Local/some_external_number@from-internal-00000000;2", "PJSIP/some_external_number@siptrunk,20") in new stack
-- Called PJSIP/some_external_number@siptrunk
-- PJSIP/siptrunk-00000000 is making progress passing it to Local/some_external_number@from-internal-00000000;2
> 0x7f896400e130 -- Strict RTP learning after remote address set to: some_ip:16886
-- Local/some_external_number@from-internal-00000000;1 is making progress
-- PJSIP/siptrunk-00000000 is making progress passing it to Local/some_external_number@from-internal-00000000;2
-- Local/some_external_number@from-internal-00000000;1 is making progress
> 0x7f896400e130 -- Strict RTP qualifying stream type: audio
> 0x7f896400e130 -- Strict RTP switching source address to 192.168.0.101:16886
> 0x7f896400e130 -- Strict RTP learning complete - Locking on source address 192.168.0.101:16886
-- PJSIP/siptrunk-00000000 answered Local/some_external_number@from-internal-00000000;2
-- Local/some_external_number@from-internal-00000000;1 answered
-- Executing [6001@from-internal:1] Set("Local/some_external_number@from-internal-00000000;1", "CHANNEL(hangup_handler_push)=hdlr,s,1(args)") in new stack
-- Channel PJSIP/siptrunk-00000000 joined 'simple_bridge' basic-bridge <9613fd36-f765-4540-a0e3-5bf72fb681ac>
-- Executing [6001@from-internal:2] Dial("Local/some_external_number@from-internal-00000000;1", "PJSIP/zoiper,20") in new stack
-- Channel Local/some_external_number@from-internal-00000000;2 joined 'simple_bridge' basic-bridge <9613fd36-f765-4540-a0e3-5bf72fb681ac>
-- Called PJSIP/zoiper
-- Local/some_external_number@from-internal-00000000;1 requested media update control 26, passing it to PJSIP/zoiper-00000001
-- Local/some_external_number@from-internal-00000000;1 requested media update control 26, passing it to PJSIP/zoiper-00000001
-- PJSIP/zoiper-00000001 is ringing
-- PJSIP/zoiper-00000001 is ringing
-- PJSIP/zoiper-00000001 answered Local/some_external_number@from-internal-00000000;1
> 0x7f8964074e00 -- Strict RTP learning after remote address set to: 192.168.1.64:8000
-- Channel PJSIP/zoiper-00000001 joined 'simple_bridge' basic-bridge <b3cddced-7a48-4598-bd8e-90f266b692d2>
-- Channel Local/some_external_number@from-internal-00000000;1 joined 'simple_bridge' basic-bridge <b3cddced-7a48-4598-bd8e-90f266b692d2>
> 0x7f8964074e00 -- Strict RTP switching to RTP target address 192.168.1.64:8000 as source
> Move-swap optimizing Local/some_external_number@from-internal-00000000;1 <-- PJSIP/siptrunk-00000000.
-- Channel PJSIP/siptrunk-00000000 left 'simple_bridge' basic-bridge <9613fd36-f765-4540-a0e3-5bf72fb681ac>
-- Channel Local/some_external_number@from-internal-00000000;1 left 'simple_bridge' basic-bridge <b3cddced-7a48-4598-bd8e-90f266b692d2>
-- Channel PJSIP/siptrunk-00000000 swapped with Local/some_external_number@from-internal-00000000;1 into 'simple_bridge' basic-bridge <b3cddced-7a48-4598-bd8e-90f266b692d2>
> Bridge b3cddced-7a48-4598-bd8e-90f266b692d2: switching from simple_bridge technology to native_rtp
> Locally RTP bridged 'PJSIP/siptrunk-00000000' and 'PJSIP/zoiper-00000001' in stack
-- Channel Local/some_external_number@from-internal-00000000;2 left 'simple_bridge' basic-bridge <9613fd36-f765-4540-a0e3-5bf72fb681ac>
== Spawn extension (from-internal, some_external_number, 1) exited non-zero on 'Local/some_external_number@from-internal-00000000;2'
== Spawn extension (from-internal, 6001, 2) exited non-zero on 'Local/some_external_number@from-internal-00000000;1'
-- Local/some_external_number@from-internal-00000000;1 Internal Gosub(hdlr,s,1(args)) start
-- Executing [s@hdlr:1] Verbose("Local/some_external_number@from-internal-00000000;1", "0, Executed First") in new stack
Executed First
-- Executing [s@hdlr:2] Verbose("Local/some_external_number@from-internal-00000000;1", "0, (s)") in new stack
(s)
-- Executing [s@hdlr:3] NoOp("Local/some_external_number@from-internal-00000000;1", "dialstatus=ANSWER,causecode=16") in new stack
-- Executing [s@hdlr:4] Set("Local/some_external_number@from-internal-00000000;1", "HANGUPCAUSE_STRING=PJSIP/zoiper-00000001") in new stack
-- Executing [s@hdlr:5] Verbose("Local/some_external_number@from-internal-00000000;1", "15, PJSIP/zoiper-00000001") in new stack
> PJSIP/zoiper-00000001
-- Executing [s@hdlr:6] NoOp("Local/some_external_number@from-internal-00000000;1", "") in new stack
-- Executing [s@hdlr:7] GotoIf("Local/some_external_number@from-internal-00000000;1", "0?hu_exit") in new stack
-- Executing [s@hdlr:8] Set("Local/some_external_number@from-internal-00000000;1", "ARRAY(item)=PJSIP/zoiper-00000001") in new stack
-- Executing [s@hdlr:9] Set("Local/some_external_number@from-internal-00000000;1", "HANGUPCAUSE_STRING=") in new stack
-- Executing [s@hdlr:10] Verbose("Local/some_external_number@from-internal-00000000;1", "0, Got Channel ID PJSIP/zoiper-00000001 with Technology Cause Code SIP 180 Ringing, Asterisk Cause Code Normal Clearing") in new stack
Got Channel ID PJSIP/zoiper-00000001 with Technology Cause Code SIP 200 OK, Asterisk Cause Code Normal Clearing
-- Executing [s@hdlr:11] GotoIf("Local/some_external_number@from-internal-00000000;1", "1?hu_exit") in new stack
-- Goto (hdlr,s,14)
-- Executing [s@hdlr:14] NoOp("Local/some_external_number@from-internal-00000000;1", "") in new stack
-- Executing [s@hdlr:15] Return("Local/some_external_number@from-internal-00000000;1", "") in new stack
== Spawn extension (from-internal, 6001, 2) exited non-zero on 'Local/some_external_number@from-internal-00000000;1'
-- Local/some_external_number@from-internal-00000000;1 Internal Gosub(hdlr,s,1(args)) complete GOSUB_RETVAL=
-- Channel PJSIP/siptrunk-00000000 left 'native_rtp' basic-bridge <b3cddced-7a48-4598-bd8e-90f266b692d2>
-- Channel PJSIP/zoiper-00000001 left 'native_rtp' basic-bridge <b3cddced-7a48-4598-bd8e-90f266b692d2>
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: AMI:Originate двух мобильных телефонов.

Сообщение ded »

Код: Выделить всё

CLI> channel originate PJSIP/9012345678@siptrunk application Dial (PJSIP/siptrunk/987654321)
CLI> channel originate PJSIP/siptrunk/9012345678 application Dial (PJSIP/987654321@siptrunk)
CLI> channel originate PJSIP/siptrunk/9012345678 extension 987654321@from-internal)
bonskeeper
Сообщения: 6
Зарегистрирован: 23 апр 2020, 12:16

Re: AMI:Originate двух мобильных телефонов.

Сообщение bonskeeper »

Спасибо за ответ, но не помогло. Если выполняю такую команду

Код: Выделить всё

channel originate PJSIP/9012345678@siptrunk application Dial (PJSIP/siptrunk/987654321)
то результат такой, как я описал в вопросе. Звонок на первый номер, беру трубку, звонок на второй номер, один гудок и звонок завершается (даже если взять трубку)
Вторая и третья команды падают с ошибкой:
[Apr 23 17:09:23] ERROR[7020]: res_pjsip.c:3577 ast_sip_create_dialog_uac: Endpoint 'siptrunk': Could not create dialog to invalid URI 'some_phone_number'. Is endpoint registered and reachable?
[Apr 23 17:09:23] ERROR[7020]: chan_pjsip.c:2661 request: Failed to create outgoing session to endpoint 'siptrunk'
bonskeeper
Сообщения: 6
Зарегистрирован: 23 апр 2020, 12:16

Re: AMI:Originate двух мобильных телефонов.

Сообщение bonskeeper »

Вообще правильный формат команды для PJSIP

Код: Выделить всё

channel originate PJSIP/external_phone_1@siptrunk application Dial PJSIP/siptrunk/sip:external_phone_2@192.168.0.101:5060
channel originate PJSIP/siptrunk/sip:external_phone_1@192.168.0.101:5060 application Dial PJSIP/external_phone_2@siptrunk 
channel originate PJSIP/siptrunk/sip:external_phone_1@192.168.0.101:5060 extension external_phone_2@from-internal
И в таком варианте все команды отрабатывают, но результат не меняется. Удалить свое предыдущее сообщение не могу, а оно не верное.
Я пытался выяснить что именно приводит к завершению вызова. Что отдает команду. hangup handler не особо помог (или я не все его возможности использовал). Есть ли другой способ узнать, что именно отдает команду закрыть соединение?
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: AMI:Originate двух мобильных телефонов.

Сообщение ded »

В чём смысл использования именно PJSIP?
В чём смысл создания себе дополнительных трудностей?
bonskeeper
Сообщения: 6
Зарегистрирован: 23 апр 2020, 12:16

Re: AMI:Originate двух мобильных телефонов.

Сообщение bonskeeper »

Смысл в том, что
chan_sip.c:35350 deprecation_notice: chan_sip has no official maintainer and is deprecated. Migration to
chan_sip.c:35351 deprecation_notice: chan_pjsip is recommended. See guides at the Asterisk Wiki:
chan_sip.c:35352 deprecation_notice: https://wiki.asterisk.org/wiki/display/ ... +res_pjsip
chan_sip.c:35353 deprecation_notice: https://wiki.asterisk.org/wiki/display/ ... +res_pjsip
Конечно можно использовать астериск 16 а не 17 и еще пару лет не вспоминать про новые версии, аднако я не считаю это правильным. Даже если мне в дальнейшем придется обновлять версию астериска то это будет менее болезненно, чем если я буду использовать и старую версию и chan_sip.
Я все же воcпользуюсь вашим советом и попробую через SIP позвонить. Спасибо за ваше время.

С помощью sngrep я нашел вот такой пакет:
2020/04/23 19:25:01.365150 192.168.1.64:26348 -> 192.168.0.101:5060
CANCEL sip:external_phone_2@192.168.0.101:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.64:26348;rport;branch=z9hG4bKPjeb64da07-6013-4d7b-9f6c-69f17531fc87
From: "two_phones" <sip:asterisk@192.168.1.64>;tag=9b696267-b790-4fb6-a6cb-672e9e6f397e
To: <sip:external_phone_2@192.168.0.101>
Call-ID: ba13a1d9-d919-4839-bd68-87f5a76f29e2
CSeq: 1230 CANCEL
Reason: Q.850;cause=0
Max-Forwards: 70
User-Agent: Asterisk PBX 17.3.0
Content-Length: 0

Считаю что это команда на разрыв соединения. Осталось понять кто и по какой причине эту команду отправляет. И еще меня смущает эта строка "Reason: Q.850;cause=0" cause=0 означает неизвестную\неопределенную ошибку (согласно https://voipnotes.ru/blog/hangup-cause-code/). Может кто-то сталкивался с таким?
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: AMI:Originate двух мобильных телефонов.

Сообщение ded »

Правильно считаете. Команду CANCEL даёт 192.168.1.64
Кто это в вашем опыте вы определите сами.
Рекомендации: не скрывать номера, по которым идёт набор за невнятными some_number_2 или external_phone_2
а просто изменить пару цифр в реальном номер в дебаге, или писать фейковые номера типа +79012345678
Это облегчает разбор логов сторонним людям.

Вам бы сделать полный дамп и исследовать весь диалог в Wireshark, было бы яснее.

По поводу рекомендаций: Яйцо Фаберже под названием chan_sip близко к совершенству в пределах его возможностей, поэтом работа над ним завершена. Другое яйцо под названием pjsip будет чуть больше, но это не отменяет функционирование chan_sip. Вы просто не представляете наверное, как это - нечего дорабатывать? Но разработчкикам то не сидеть сложа руки? Они придумали себе работу, и подгружают нас быть бесплатными бета-тестерами.

Вот классический 6-ти зарядный револьвер: почему его не дорабатывают бесконечно? Почему им пользуются вообще до сих пор? Ведь есть всякие стечкины, макаровы и ТТ?
Аватара пользователя
Zavr2008
Сообщения: 2213
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: AMI:Originate двух мобильных телефонов.

Сообщение Zavr2008 »

Конечно можно использовать астериск 16 а не 17
Версия 17 лишь для тех кто умеет настраивать версию 16)
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
bonskeeper
Сообщения: 6
Зарегистрирован: 23 апр 2020, 12:16

Re: AMI:Originate двух мобильных телефонов.

Сообщение bonskeeper »

Переделал с PJSIP на SIP. Звонок на второй номер прерывается командой CANCEL после первого гудка.
ded писал(а): Вам бы сделать полный дамп и исследовать весь диалог в Wireshark, было бы яснее.
Команды которые использовал:

Код: Выделить всё

channel originate SIP/siptrunk/5550000001 application Dial SIP/zoiper
channel originate SIP/siptrunk/5550000001 application Dial SIP/5550000002@siptrunk
Первая команда для соединения внешнего номера с внутренним, вторая внешнего с внешним.
Попытался я исследовать весь диалог. Ясности мне не добавило.
Диалог в sngrep, который отображает попытку позвонить на второй номер(внутренний в данном случае) после того как была поднята трубка первого номера:
192.168.1.64 - это моя машина, но которой поднят астериск

Код: Выделить всё

                                                                                                               
                                                                                                                CANCEL sip:zoiper@192.168.1.64:32240;rinstance=9649a6e4b5404d88;transport=UDP SIP/2.0
            192.168.1.64:26348            192.168.1.64:32240                                  │Via: SIP/2.0/UDP 192.168.1.64:26348;branch=z9hG4bK3d27f9fe
          ──────────┬─────────          ──────────┬─────────│Max-Forwards: 70
  18:40:18.132018   │        INVITE (SDP)         │                                    │From: "asterisk" <sip:asterisk@192.168.1.64:26348>;tag=as7a00d2dd
        +0.080388   │ ──────────────────────────               │To: <sip:zoiper@192.168.1.64:32240;rinstance=9649a6e4b5404d88;transport=UDP>
  18:40:18.212406   │         100 Trying          │                                        │Call-ID: 09b111cb33fb675c3a8a33c8732b7a0a@192.168.1.64:26348
        +0.475002   │ <──────────────────────────             │CSeq: 102 CANCEL
  18:40:18.687408   │         180 Ringing         │                                       │User-Agent: Asterisk PBX 17.3.0
        +5.853922   │ <──────────────────────────             │Content-Length: 0
  18:40:24.541330   │           CANCEL            │         │
        +0.010540   │ ──────────────────────────> │         │
  18:40:24.551870   │           200 OK            │         │
        +0.000027   │ <────────────────────────── │         │
  18:40:24.551897   │   487 Request Terminated    │         │
        +0.000063   │ <────────────────────────── │         │
  18:40:24.551960   │             ACK             │         │
                           │ ──────────────────────────> │         │
Диалог из wireshark c попыткой позвонить на внешний номер такой-же.

Код: Выделить всё

931	25.142275	192.168.1.64	 192.168.0.101  SIP/SDP	883	Request: INVITE sip:5550000002@192.168.0.101:5060 | 
932	25.143050	192.168.0.101	 192.168.1.64	 SIP	                591	Status: 401 Unauthorized | 
933	25.143215	192.168.1.64	 192.168.0.101 SIP	                451  Request: ACK sip:5550000002@192.168.0.101:5060 | 
934	25.143322	192.168.1.64	 192.168.0.101 SIP/SDP	        1058  Request: INVITE sip:5550000002@192.168.0.101:5060 | 
936	25.151071	192.168.0.101	 192.168.1.64	 SIP	                576	Status: 100 Trying | 
972	25.606566	192.168.0.101	 192.168.1.64	 SIP/SDP	        888	Status: 183 Session Progress | 
974	25.625180	192.168.1.64	 <external_ip>	 RTP	        214	PT=ITU-T G.711 PCMU, SSRC=0x4D62EE8D, Seq=26260, Time=397903352
975	25.625696	192.168.0.101	 192.168.1.64	 RTP	        214	PT=ITU-T G.711 PCMU, SSRC=0x55F368FF, Seq=11105, Time=397903376
2267 31.550786	192.168.1.64	 192.168.0.101 SIP	                403	Request: CANCEL sip:5550000002@192.168.0.101:5060 | 
2268 31.551809	192.168.0.101	 192.168.1.64	 SIP	                521	Status: 487 Request Terminated | 
2269 31.551962	192.168.1.64	 192.168.0.101 SIP	                450	Request: ACK sip:5550000002@<external_ip>:5060 | 
2270 31.551963	192.168.0.101	 192.168.1.64	SIP	                505	Status: 200 OK | 
192.168.0.101 - машина к которой я подключен, как клиент. На ней астериск с доступом к провайдеру ip-телефонии

Пакет CANCEL

Код: Выделить всё

Frame 2267: 403 bytes on wire (3224 bits), 403 bytes captured (3224 bits)
Ethernet II, Src: AsustekC_e1:58:37 (f4:6d:04:e1:58:37), Dst: Microsof_00:07:09 (00:15:5d:00:07:09)
Internet Protocol Version 4, Src: 192.168.1.64, Dst: 192.168.0.101
User Datagram Protocol, Src Port: 26348, Dst Port: 5060
Session Initiation Protocol (CANCEL)
    Request-Line: CANCEL sip:5550000002@192.168.0.101:5060 SIP/2.0
        Method: CANCEL
        Request-URI: sip:5550000002@192.168.0.101:5060
        [Resent Packet: False]
    Message Header
        Via: SIP/2.0/UDP 192.168.1.64:26348;branch=z9hG4bK6ef74a88
        Max-Forwards: 70
        From: "asterisk" <sip:001@192.168.0.101:26348>;tag=as7723f833
        To: <sip:5550000002@192.168.0.101:5060>
        Call-ID: 16568caf7aa4efff53c29f0f2e5af7a0@192.168.0.101
        [Generated Call-ID: 16568caf7aa4efff53c29f0f2e5af7a0@192.168.0.101]
        CSeq: 103 CANCEL
        User-Agent: Asterisk PBX 17.3.0
        Content-Length: 0
Не удалось мне сделать более читабельным сообщение. Извините.
Что конкретно я должен искать в wireshark/sngrep? Может есть еще предположения, что идет не так?
Аватара пользователя
Zavr2008
Сообщения: 2213
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: AMI:Originate двух мобильных телефонов.

Сообщение Zavr2008 »

Что такое <external_ip> ?
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH