Страница 1 из 3
DTMF потеря первой цифры в транке
Добавлено: 19 мар 2019, 15:39
lb426.2
проблема с набором DTMF в SIP транк
есть два астериска с вот такими настройками:
======================================================
sip.conf asterisk1
[AST1U0001]
secret=password
type=friend
context=inc
host=dynamic
dtmfmode=info
disallow=all
allow=alaw
[asterisk1]
type=peer
host=192.168.38.7
context=inc
disallow=all
allow=alaw
dtmfmode=info
sendrpid=yes
trustrpid=yes
==========================================================
sip.conf asterisk2
[AST2U0001]
secret=password
type=friend
context=inc
host=dynamic
dtmfmode=info
disallow=all
allow=alaw
[asterisk2]
type=peer
host=192.168.38.9
context=inc
disallow=all
allow=alaw
dtmfmode=info
sendrpid=yes
trustrpid=yes
====================================================
extensions.conf на asterisk1
[inc]
exten => 300,1,Dial(SIP/${EXTEN}@asterisk2)
====================================================
extensions.conf на asterisk2
[inc]
exten => 300,1,Answer()
same => n,Dial(SIP/AST2U0001)
same => n,Hangup()
при попытке набрать с asterisk1 на asterisk2 вызов происходит, трубка снимается,
на вызывающем телефоне (asterisk1) набираю 1 2 3
в консоли астериск1 вижу что нажатие 1 есть
в консоли астериск2 вижу 1 только когда наберу цифру 2 на астерик1
и т.д.
т.е. до астериск2 не доходит одна цифра.
Re: DTMF потеря первой цифры в транке
Добавлено: 20 мар 2019, 08:30
april22
Не доходит, или не распознает?
Re: DTMF потеря первой цифры в транке
Добавлено: 20 мар 2019, 08:38
lb426.2
asterisk1 DTMF распознаёт, в консоли я это вижу
но пока не нажмёшъ следующую цифру первая не прилетает на asterisk2
такое чувство что там какая-то очередь, хотя никаких очередей там нет, конфигурация упрощена по максимуму.
Re: DTMF потеря первой цифры в транке
Добавлено: 20 мар 2019, 10:21
ded
У вас не два, а четыре Астериска прописано. Два type=friend, и два type=peer
Вы бы почитали книжки, теорию, примеры разные.
lb426.2 писал(а):при попытке набрать с asterisk1 на asterisk2 вызов происходит, трубка снимается,
на вызывающем телефоне (asterisk1) набираю 1 2 3
в консоли астериск1 вижу что нажатие 1 есть
в консоли астериск2 вижу 1 только когда наберу цифру 2 на астерик1
и т.д.
т.е. до астериск2 не доходит одна цифра.
Вы бы привели хоть контекст inc, в который попадает входящий звонок. И было бы понятно, что обработка диал-плана будет ровно такая, как там указано, а не то, что вы нажимаете.
Новичком (тут) считается только что прочитавший Книгу о будущем телефонии и (далее по тексту).
Re: DTMF потеря первой цифры в транке
Добавлено: 20 мар 2019, 12:04
lb426.2
ded: книгу прочитал. книжки, теорию, примеры - вот делаю.
про четыре астериска - не понял, это конфиги с двух серверов.
=====================================
ASTERISK1
sip.conf
[general]
context=unauthenticated
allowguest=no
srvlookup=no
udpbindaddr=0.0.0.0
tcpenable=no
nat=no
prematuremedia=yes
progressinband=yes
dtmfmode=info
[office-phone](!)
type=friend
context=inc
host=dynamic
disallow=all
allow=alaw
[AST1U0001](office-phone)
secret=password
[AST1U0002](office-phone)
secret=password
[asterisk2]
type=peer
host=192.168.38.9
defaultuser=asterisk1
secret=apples
context=inc
disallow=all
allow=alaw
extensions.conf
[inc]
exten => _XXXX,1,Dial(SIP/${EXTEN}@asterisk2)
==============================================
ASTERISK2
sip.conf
[general]
context=unauthenticated
allowguest=no
srvlookup=no
udpbindaddr=0.0.0.0
tcpenable=no
nat=no
prematuremedia=yes
progressinband=yes
dtmfmode=info
[office-phone](!)
type=friend
context=inc
host=dynamic
disallow=all
allow=alaw
[AST2U0001](office-phone)
secret=password
[AST2U0002](office-phone)
secret=password
[asterisk1]
type=peer
host=192.168.38.7
defaultuser=asterisk2
secret=apples
context=inc
disallow=all
allow=alaw
extensions.conf
[inc]
exten => 101,1,Dial(SIP/AST2U0001)
exten => 102,1,Dial(SIP/AST2U0002)
exten => 6598,1,Goto(demo-menu,s,1)
[demo-menu]
exten => s,1,Progress()
same => n(loop),Background(press-1&or&press-2&or&press-4)
same => n,WaitExten()
exten => 1,1,Playback(you-entered)
same => n,SayNumber(1)
same => n,Goto(s,loop)
exten => 2,1,Playback(you-entered)
same => n,SayNumber(2)
same => n,Goto(s,loop)
exten => 4,1,Playback(you-entered)
same => n,SayNumber(4)
same => n,Goto(s,loop)
exten => t,1,Playback(wait-moment)
same => n,Goto(s,loop)
========================================================
это всё что есть в конфигах
Re: DTMF потеря первой цифры в транке
Добавлено: 20 мар 2019, 17:20
ded
Читайте ещё.
Если не понимаете - ещё. Не получилось? Ещё читатьи пробовать. У вас проблемы в понимании. Вот например: конфик на одном Астериске:
Код: Выделить всё
[AST1U0001]
secret=password
type=friend
context=inc
host=dynamic
dtmfmode=info
disallow=all
allow=alaw
[asterisk1]
type=peer
host=192.168.38.7
context=inc
disallow=all
allow=alaw
dtmfmode=info
sendrpid=yes
trustrpid=yes
Здесь описаны два пира, или один? Я вижу - два, а предполагается только один, так называемый asterisk2
Re: DTMF потеря первой цифры в транке
Добавлено: 21 мар 2019, 08:44
lb426.2
вы взяли конфиг который я привёл в начале поста.
чуть выше последний конфиг, сделанный в точности по книге "Asterisk The Definitive Guide 4th Edition 2013", только изменены имена клиентских устройств.
всё равно первая цифра набора не уходит.
может ли влиять на это контекст ?
я отправляю и клиентские вызовы и то что должно уходить в транк в один контекст.
Re: DTMF потеря первой цифры в транке
Добавлено: 21 мар 2019, 10:16
ded
А зачем вы даёте избыточную или неправильную информацию?
Вам нужно тестировать - делать вызов, и смотреть в консоль второго астериска. Там будет всё написано - причины и следствия.
Иначе - тут просто можно поговорить за жизнь, даже очень долго.
Первая или вторая цифра набора - видно даже лучше в дебаге. Включите
sip set debug on
и разберитесь с пакетом INVITE.
В полях From: и To: должно быть ясно видно кто звонит и кому звонит.
Также имеет место т.н. диал-план на телефоне, с которго совершается вызов. Обычно всякие Linksys SPA имеют свой мутный диал-план, который не отправляет сервисные коды со звёздочки, или номера определённой значности.
Re: DTMF потеря первой цифры в транке
Добавлено: 21 мар 2019, 10:58
lb426.2
я пытался удалить лишнюю инфу - не смог отредактировать самое первое сообщение.
у меня звонок проходит, но первая цифра DTMF после установления соединения не уходит в канал.
первая цифра уходит только после того как я нажал вторую цифру.
====================================================================================================
вот это вижу в консоли asterisk1:
asterisk1*CLI>
== Using SIP RTP CoS mark 5
> 0x7f15d4004300 -- Strict RTP learning after remote address set to: 192.168.38.11:60946
-- Executing [6598@LocalSets:1] Dial("SIP/AST1U0001-0000000a", "SIP/6598@asterisk2") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/6598@asterisk2
> 0x7f15ec005e70 -- Strict RTP learning after remote address set to: 192.168.38.9:5320
-- SIP/asterisk2-0000000b answered SIP/AST1U0001-0000000a
-- Channel SIP/asterisk2-0000000b joined 'simple_bridge' basic-bridge <2e226916-d221-4b77-8eb0-7815ef47c5b3>
-- Channel SIP/AST1U0001-0000000a joined 'simple_bridge' basic-bridge <2e226916-d221-4b77-8eb0-7815ef47c5b3>
> Bridge 2e226916-d221-4b77-8eb0-7815ef47c5b3: switching from simple_bridge technology to native_rtp
> Remotely bridged 'SIP/AST1U0001-0000000a' and 'SIP/asterisk2-0000000b' - media will flow directly between them
> 0x7f15ec005e70 -- Strict RTP learning after remote address set to: 192.168.38.9:5320
> 0x7f15d4004300 -- Strict RTP switching to RTP target address 192.168.38.11:60946 as source
[Mar 21 10:55:09] DTMF[1854][C-00000006]: channel.c:3801 __ast_read: DTMF end '1' received on SIP/AST1U0001-0000000a, duration 250 ms
[Mar 21 10:55:09] DTMF[1854][C-00000006]: channel.c:3828 __ast_read: DTMF begin emulation of '1' with duration 250 queued on SIP/AST1U0001-0000000a
[Mar 21 10:55:11] DTMF[1854][C-00000006]: channel.c:3921 __ast_read: DTMF end emulation of '1' queued on SIP/AST1U0001-0000000a
[Mar 21 10:55:11] DTMF[1854][C-00000006]: channel.c:3801 __ast_read: DTMF end '2' received on SIP/AST1U0001-0000000a, duration 250 ms
[Mar 21 10:55:11] DTMF[1854][C-00000006]: channel.c:3828 __ast_read: DTMF begin emulation of '2' with duration 250 queued on SIP/AST1U0001-0000000a
-- Channel SIP/AST1U0001-0000000a left 'native_rtp' basic-bridge <2e226916-d221-4b77-8eb0-7815ef47c5b3>
[Mar 21 10:55:15] DTMF[1854][C-00000006]: bridge_channel.c:790 bridge_channel_settle_owed_events: DTMF end '2' simulated to bridge 2e226916-d221-4b77-8eb0-7815ef47c5b3 because SIP/AST1U0001-0000000a left. Duration 4226 ms.
-- Channel SIP/asterisk2-0000000b left 'native_rtp' basic-bridge <2e226916-d221-4b77-8eb0-7815ef47c5b3>
> 0x7f15ec005e70 -- Strict RTP learning after remote address set to: 192.168.38.9:5320
== Spawn extension (LocalSets, 6598, 1) exited non-zero on 'SIP/AST1U0001-0000000a'
asterisk1*CLI>
=======================================================================================================================
а вот это в консоли астериск2
asterisk2*CLI>
== Using SIP RTP CoS mark 5
> 0x7f0dfc0076e0 -- Strict RTP learning after remote address set to: 192.168.38.7:13802
-- Executing [6598@incoming:1] Goto("SIP/asterisk1-00000005", "demo-menu,s,1") in new stack
-- Goto (demo-menu,s,1)
-- Executing [s@demo-menu:1] Answer("SIP/asterisk1-00000005", "") in new stack
> 0x7f0dfc0076e0 -- Strict RTP learning after remote address set to: 192.168.38.11:60946
-- Executing [s@demo-menu:2] BackGround("SIP/asterisk1-00000005", "press-1&or&press-2&or&press-3") in new stack
-- <SIP/asterisk1-00000005> Playing 'press-1.alaw' (language 'en')
> 0x7f0dfc0076e0 -- Strict RTP qualifying stream type: audio
> 0x7f0dfc0076e0 -- Strict RTP switching to RTP target address 192.168.38.11:60946 as source
-- <SIP/asterisk1-00000005> Playing 'or.alaw' (language 'en')
-- <SIP/asterisk1-00000005> Playing 'press-2.alaw' (language 'en')
-- <SIP/asterisk1-00000005> Playing 'or.alaw' (language 'en')
-- <SIP/asterisk1-00000005> Playing 'press-3.alaw' (language 'en')
-- Executing [s@demo-menu:3] WaitExten("SIP/asterisk1-00000005", "") in new stack
> 0x7f0dfc0076e0 -- Strict RTP learning complete - Locking on source address 192.168.38.11:60946
[Mar 21 10:55:11] DTMF[19990][C-00000006]: channel.c:3801 __ast_read: DTMF end '1' received on SIP/asterisk1-00000005, duration 1818 ms
[Mar 21 10:55:11] DTMF[19990][C-00000006]: channel.c:3871 __ast_read: DTMF end passthrough '1' on SIP/asterisk1-00000005
-- Executing [1@demo-menu:1] Playback("SIP/asterisk1-00000005", "you-entered") in new stack
-- <SIP/asterisk1-00000005> Playing 'you-entered.alaw' (language 'en')
-- Executing [1@demo-menu:2] SayNumber("SIP/asterisk1-00000005", "1") in new stack
-- <SIP/asterisk1-00000005> Playing 'digits/1.alaw' (language 'en')
-- Executing [1@demo-menu:3] Goto("SIP/asterisk1-00000005", "s,loop") in new stack
-- Goto (demo-menu,s,2)
-- Executing [s@demo-menu:2] BackGround("SIP/asterisk1-00000005", "press-1&or&press-2&or&press-3") in new stack
-- <SIP/asterisk1-00000005> Playing 'press-1.alaw' (language 'en')
-- <SIP/asterisk1-00000005> Playing 'or.alaw' (language 'en')
-- <SIP/asterisk1-00000005> Playing 'press-2.alaw' (language 'en')
> 0x7f0dfc0076e0 -- Strict RTP learning after remote address set to: 192.168.38.7:13802
== Spawn extension (demo-menu, s, 2) exited non-zero on 'SIP/asterisk1-00000005'
asterisk2*CLI>
Re: DTMF потеря первой цифры в транке
Добавлено: 21 мар 2019, 11:15
ded
Я не увидел такой проблемы тут в логе. С Астериска1 позвонили на Астериск2 - вызов номера 6598
SIP/6598@asterisk2
и всё там исполнилось строго по контексту
Код: Выделить всё
[demo-menu]
exten => s,1,Progress()
same => n(loop),Background(press-1&or&press-2&or&press-4)
same => n,WaitExten()
exten => 1,1,Playback(you-entered)
same => n,SayNumber(1)
same => n,Goto(s,loop)
exten => 2,1,Playback(you-entered)
same => n,SayNumber(2)
same => n,Goto(s,loop)
exten => 4,1,Playback(you-entered)
same => n,SayNumber(4)
same => n,Goto(s,loop)
-- Executing [6598@incoming:1] Goto("SIP/asterisk1-00000005", "demo-menu,s,1") in new stack
-- Goto (demo-menu,s,1)
и там была нажата 1
-- <SIP/asterisk1-00000005> Playing 'you-entered.alaw' (language 'en')
-- Executing [1@demo-menu:2] SayNumber("SIP/asterisk1-00000005", "1") in new stack