AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Нет сигнала Busy при звонке из города через DAHDI

Asterisk IP PBX 4 сообщений 27.09.2011 17:00 - 28.09.2011 12:02
#1 27.09.2011 17:00

Нет сигнала Busy при звонке из города через DAHDI


Коллеги, приветствую.

Схема следующая.
Имеется Asterisk 1.6.2.20, FreePBX 2.9, плата Digium TE122.
Звонки в город и из города ходят нормально.

Во FreePBX в настройках пира 8888, стоит входящий DID 660603, т.е. звонки из города на этот номер направляются на внутренний номер 8888.
Проблема в том, что если 8888 занят или сбрасывает звонок, то busy абоненту из города не передается, у него продолжает идти дозвон.
Call Waiting и на телефоне и во FreePBX стоит no.

Вот настройки DAHDI:
Code:
[office]
group=1
signalling=pri_cpe
trunkname=office
trunkstyle=digital
pridialplan=national
prilocaldialplan=national
;priindication=outofband
callwaiting=no
dahdichan=1-15,17-31
switchtype=euroisdn
context=from-dahdi
echocancel=yes
echocancelwhenbridged=yes
language=ru


При сбрасывании входящего звонка от SIP-телефона приходит Busy, но на PRI сигнал не отправляется.
Вот что в логе (pri debug включен):
Code:
-- Executing [s@macro-dial-one:38] Dial("DAHDI/1-1", "SIP/8888,,tr") in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called 8888
-- SIP/8888-000000ae is ringing
-- Got SIP response 486 "Busy Here" back from 10.10.0.30
-- SIP/8888-000000ae is busy
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [s@macro-dial-one:39] ExecIf("DAHDI/1-1", "0?Set(DIALSTATUS=)") in new stack
-- Executing [s@macro-dial-one:40] GosubIf("DAHDI/1-1", "0?s-BUSY,1") in new stack
-- Executing [s@macro-dial-one:41] MacroExit("DAHDI/1-1", "") in new stack
-- Executing [s@macro-exten-vm:15] GotoIf("DAHDI/1-1", "0?exit") in new stack
-- Executing [s@macro-exten-vm:16] Set("DAHDI/1-1", "SV_DIALSTATUS=BUSY") in new stack
-- Executing [s@macro-exten-vm:17] GosubIf("DAHDI/1-1", "0?docfu,1") in new stack
-- Executing [s@macro-exten-vm:18] GosubIf("DAHDI/1-1", "0?docfb,1") in new stack
-- Executing [s@macro-exten-vm:19] Set("DAHDI/1-1", "DIALSTATUS=BUSY") in new stack
-- Executing [s@macro-exten-vm:20] ExecIf("DAHDI/1-1", "0?MacroExit()") in new stack
-- Executing [s@macro-exten-vm:21] GotoIf("DAHDI/1-1", "1?s-BUSY,1") in new stack
-- Goto (macro-exten-vm,s-BUSY,1)
-- Executing [s-BUSY@macro-exten-vm:1] GotoIf("DAHDI/1-1", "0?exit,1") in new stack
-- Executing [s-BUSY@macro-exten-vm:2] PlayTones("DAHDI/1-1", "busy") in new stack
-- Executing [s-BUSY@macro-exten-vm:3] Busy("DAHDI/1-1", "20") in new stack


После этого для вызывающего абонента гудки вызова продолжаются.
Записи в консоли от pri debug начинаются только после того, как я кладу трубку, с которой идет звонок.

Подскажите в чем может быть проблема. При звонках внутри сети или звона на внешнюю сеть Busy передается нормально.


Last edited by m_aster on Wed Sep 28, 2011 06:26
#2 27.09.2011 20:38

1. какая конкретно версия астерика?
2.
Quote:
Вот что в логе (pri debug включен):

не включён
#3 28.09.2011 06:30

1) 1.6.2.20
2) Включен, но когда на принимающей стороне сбрасываю звонок, пишет только то, что я указал выше. Когда кладу трубку на вызывающей стороне вот что в логе:

Code:
< Protocol Discriminator: Q.931 (8) len=9
< TEI=0 Call Ref: len= 2 (reference 47/0x2F) (Sent from originator)
< Message Type: DISCONNECT (69)
< [08 02 80 90]
< Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: User (0)
< Ext: 1 Cause: Normal Clearing (16), class = Normal Event (1) ]
Received message for call 0x2aaac803a9c0 on link 0x11b278a0 TEI/SAPI 0/0
-- Processing IE 8 (cs0, Cause)
-- Found active call: 0x2aaac803a9c0 cref:47
q931.c:8707 post_handle_q931_message: Call 47 enters state 12 (Disconnect Indication). Hold state: Idle
-- Span 1: Channel 0/6 got hangup request, cause 16
== Spawn extension (macro-exten-vm, s-BUSY, 3) exited non-zero on 'DAHDI/6-1' in macro 'exten-vm'
== Spawn extension (from-did-direct, 8888, 2) exited non-zero on 'DAHDI/6-1'
-- Executing [h@from-did-direct:1] Macro("DAHDI/6-1", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("DAHDI/6-1", "1?theend") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] Hangup("DAHDI/6-1", "") in new stack
== Spawn extension (macro-hangupcall, s, 3) exited non-zero on 'DAHDI/6-1' in macro 'hangupcall'
== Spawn extension (from-did-direct, h, 1) exited non-zero on 'DAHDI/6-1'
q931.c:6837 q931_hangup: Hangup other cref:47
q931.c:6594 __q931_hangup: ourstate Disconnect Indication, peerstate Disconnect Request, hold-state Idle
q931.c:5703 q931_release: Call 47 enters state 19 (Release Request). Hold state: Idle

> DL-DATA request
> Protocol Discriminator: Q.931 (8) len=9
> TEI=0 Call Ref: len= 2 (reference 47/0x2F) (Sent to originator)
> Message Type: RELEASE (77)
TEI=0 Transmitting N(S)=5, window is open V(A)=5 K=7

> Protocol Discriminator: Q.931 (8) len=9
> TEI=0 Call Ref: len= 2 (reference 47/0x2F) (Sent to originator)
> Message Type: RELEASE (77)
> [08 02 81 90]
> Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Private network serving the local user (1)
> Ext: 1 Cause: Normal Clearing (16), class = Normal Event (1) ]
-- Hungup 'DAHDI/6-1'

< Protocol Discriminator: Q.931 (8) len=5
< TEI=0 Call Ref: len= 2 (reference 47/0x2F) (Sent from originator)
< Message Type: RELEASE COMPLETE (90)
Received message for call 0x2aaac803a9c0 on link 0x11b278a0 TEI/SAPI 0/0
q931.c:8567 post_handle_q931_message: Call 47 enters state 0 (Null). Hold state: Idle
q931.c:6837 q931_hangup: Hangup other cref:47
q931.c:6594 __q931_hangup: ourstate Null, peerstate Null, hold-state Idle
Destroying call 0x2aaac803a9c0, ourstate Null, peerstate Null, hold-state Idle
#4 28.09.2011 12:02

После более подробного изучения выяснилось, что Busy приходит, но не сразу а после нескольких секунд дозвона.

Вот что в логе, если звонить с одного сип-телефона на второй (в это время занятый).
Code:
-- Called 3120
-- Got SIP response 486 "Busy Here" back from 10.10.3.250
-- SIP/3120-000000c9 is busy
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [s@macro-dial-one:39] ExecIf("SIP/8888-000000c8", "1?Set(DIALSTATUS=BUSY)") in new stack
-- Executing [s@macro-dial-one:40] GosubIf("SIP/8888-000000c8", "0?s-BUSY,1") in new stack
-- Executing [s@macro-dial-one:41] MacroExit("SIP/8888-000000c8", "") in new stack
-- Executing [s@macro-exten-vm:15] GotoIf("SIP/8888-000000c8", "0?exit") in new stack
-- Executing [s@macro-exten-vm:16] Set("SIP/8888-000000c8", "SV_DIALSTATUS=BUSY") in new stack
-- Executing [s@macro-exten-vm:17] GosubIf("SIP/8888-000000c8", "0?docfu,1") in new stack
-- Executing [s@macro-exten-vm:18] GosubIf("SIP/8888-000000c8", "0?docfb,1") in new stack
-- Executing [s@macro-exten-vm:19] Set("SIP/8888-000000c8", "DIALSTATUS=BUSY") in new stack
-- Executing [s@macro-exten-vm:20] ExecIf("SIP/8888-000000c8", "0?MacroExit()") in new stack
-- Executing [s@macro-exten-vm:21] GotoIf("SIP/8888-000000c8", "1?s-BUSY,1") in new stack
-- Goto (macro-exten-vm,s-BUSY,1)
-- Executing [s-BUSY@macro-exten-vm:1] GotoIf("SIP/8888-000000c8", "0?exit,1") in new stack
-- Executing [s-BUSY@macro-exten-vm:2] PlayTones("SIP/8888-000000c8", "busy") in new stack
-- Executing [s-BUSY@macro-exten-vm:3] Busy("SIP/8888-000000c8", "20") in new stack
== Spawn extension (macro-exten-vm, s-BUSY, 3) exited non-zero on 'SIP/8888-000000c8' in macro 'exten-vm'
== Spawn extension (from-internal, 3120, 2) exited non-zero on 'SIP/8888-000000c8'
-- Executing [h@from-internal:1] Hangup("SIP/8888-000000c8", "") in new stack
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/8888-000000c8'


А вот это при звонке из города на занятый телефон:
Code:
-- Called 3120
-- Got SIP response 486 "Busy Here" back from 10.10.3.250
-- SIP/3120-000000d1 is busy
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [s@macro-dial-one:39] ExecIf("DAHDI/6-1", "1?Set(DIALSTATUS=BUSY)") in new stack
-- Executing [s@macro-dial-one:40] GosubIf("DAHDI/6-1", "0?s-BUSY,1") in new stack
-- Executing [s@macro-dial-one:41] MacroExit("DAHDI/6-1", "") in new stack
-- Executing [s@macro-exten-vm:15] GotoIf("DAHDI/6-1", "0?exit") in new stack
-- Executing [s@macro-exten-vm:16] Set("DAHDI/6-1", "SV_DIALSTATUS=BUSY") in new stack
-- Executing [s@macro-exten-vm:17] GosubIf("DAHDI/6-1", "0?docfu,1") in new stack
-- Executing [s@macro-exten-vm:18] GosubIf("DAHDI/6-1", "0?docfb,1") in new stack
-- Executing [s@macro-exten-vm:19] Set("DAHDI/6-1", "DIALSTATUS=BUSY") in new stack
-- Executing [s@macro-exten-vm:20] ExecIf("DAHDI/6-1", "0?MacroExit()") in new stack
-- Executing [s@macro-exten-vm:21] GotoIf("DAHDI/6-1", "1?s-BUSY,1") in new stack
-- Goto (macro-exten-vm,s-BUSY,1)
-- Executing [s-BUSY@macro-exten-vm:1] GotoIf("DAHDI/6-1", "0?exit,1") in new stack
-- Executing [s-BUSY@macro-exten-vm:2] PlayTones("DAHDI/6-1", "busy") in new stack
-- Executing [s-BUSY@macro-exten-vm:3] Busy("DAHDI/6-1", "20") in new stack


При этом телефон вызывающего абонента продолжает звонить и только через несколько секунд получает Busy.
Code:
== Spawn extension (macro-exten-vm, s-BUSY, 3) exited non-zero on 'DAHDI/6-1' in macro 'exten-vm'
== Spawn extension (from-did-direct, 3120, 2) exited non-zero on 'DAHDI/6-1'
-- Executing [h@from-did-direct:1] Macro("DAHDI/6-1", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("DAHDI/6-1", "1?theend") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] Hangup("DAHDI/6-1", "") in new stack
== Spawn extension (macro-hangupcall, s, 3) exited non-zero on 'DAHDI/6-1' in macro 'hangupcall'
== Spawn extension (from-did-direct, h, 1) exited non-zero on 'DAHDI/6-1'
-- Hungup 'DAHDI/6-1'



При звонке на этот номер через IVR, Busy тоже отрабатывает сразу.

Added after 46 minutes:

Ответ нашелся. АТС оператора не понимает, когда я посылаю ей Busy.
Ей нужен Hangup с 17 причиной.
Теперь вопрос как разделить обработку звонков между внутренними номерами, звонки через IVR и прямые звонки. Ибо делать Hangup всегда не хочется.