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

Не завершается обработка вызова

Asterisk IP PBX 18 сообщений 27.10.2010 13:33 - 18.11.2010 09:41
#1 27.10.2010 13:33

Не завершается обработка вызова


Приходит вызов
Code:
[2010-10-27 14:52:52] VERBOSE[8871] logger.c: -- Accepting call from 'xxx' to 'yyy' on channel 0/29, span 3

обрабатывается
Code:
[2010-10-27 14:52:52] VERBOSE[4846] logger.c: -- Goto (from-clients,yyy,1)

осуществляются попытки соединения
Code:
[2010-10-27 14:52:53] VERBOSE[4846] logger.c: -- Called OPER1/yyy
[2010-10-27 14:53:55] VERBOSE[4846] logger.c: -- Nobody picked up in 60000 ms
[2010-10-27 14:53:55] VERBOSE[4846] logger.c: -- Called OPER2/yyy
[2010-10-27 14:54:58] VERBOSE[4846] logger.c: -- Nobody picked up in 60000 ms
[2010-10-27 14:54:58] VERBOSE[4846] logger.c: -- Called OPER3/yyy
[2010-10-27 14:55:54] VERBOSE[4846] logger.c: -- SIP/OPER3-00039e0e answered DAHDI/91-1
[2010-10-27 14:55:54] VERBOSE[8871] logger.c: -- Channel 0/29, span 3 got hangup, cause 0
[2010-10-27 14:55:54] VERBOSE[4846] logger.c: -- Hungup 'DAHDI/91-1'

а в это время абонент пытается позвонить :
Code:
[2010-10-27 14:53:41] VERBOSE[8869] logger.c: ^? -- Accepting call from 'xxx' to 'yyy' on channel 0/31, span 1

Code:
[2010-10-27 14:53:57] VERBOSE[8871] logger.c: ^? -- Accepting call from 'xxx' to 'yyy' on channel 0/13, span 3

Code:
[2010-10-27 14:54:10] VERBOSE[8871] logger.c: ^? -- Accepting call from 'xxx' to 'yyy' on channel 0/21, span 3

Code:
[2010-10-27 14:54:51] VERBOSE[8869] logger.c: ^? -- Accepting call from 'xxx' to 'yyy' on channel 0/3, span 1

Code:
[2010-10-27 14:55:03] VERBOSE[8869] logger.c: ^? -- Accepting call from 'xxx' to 'yyy' on channel 0/11, span 1

Code:
[2010-10-27 14:55:29] VERBOSE[8869] logger.c: ^? -- Accepting call from 'xxx' to 'yyy' on channel 0/25, span 1

Code:
[2010-10-27 14:55:48] VERBOSE[8869] logger.c: ^? -- Accepting call from 'xxx' to 'yyy' on channel 0/29, span 1


Т.е абонент набрал номер, подождал сколько-то, повесил трубку, и снова попытался позвонить. При каждом вызове мой скрипт проверяет CallerID абонента, и если такой номер уже пытается осуществить вызов, то новый вызов прекращается.

Т.е получается астериск "не увидел" сигнал отбоя, т.к по логам АТС к которой подключен астериск пусто. А т.к астериск пишет что коннект был и если бы он висел на АТС, то АТС бы его тоже зафиксировала.

Подскажите куда копать, а то у меня нет идей (((

Абонент "медный".
Железо digium, ПО : asterisk 1.4.29.1, dahdi 2.4.0, libpri 1.4.12-beta2
#2 28.10.2010 08:52

А как бы сам диалплан увидеть?
Насколько я понял ситуацию, после того как абонент повесил трубку недозвонившись абонент попадает в контест i и уже там должен обрабатываться
#3 28.10.2010 12:36

Без обид, но ситуацию Вы видимо не поняли, а логику того, что должно было произойти я представляю, потому и вопрошаю, почему такое происходит.

Диалплан можно представить так
Code:

...
exten => _X.,n(try),Dial(${OPER}/{EXTEN})
exten => _X.,n,AGI(check.pl)
exten => _X.,n,GotoIf($[${TRY}=1]?try)
...


Когда абонент вешает трубку, астериск "не видит" этого и продолжает выполнять команду Dial и так далее весь диалплан, пока не переберет всех операторов и только после этого завершается обработка вызова.

Разумеется эта ситуация не постоянная, а то бы её было проще решить. С имитировать её у меня не получается.
#4 01.11.2010 07:38

может быть проблема в ващем check.pl вы же ведь там устанавливаете переменные ${TRY}, ${OPER}?
#5 01.11.2010 08:39

Да, но когда вещается трубка, то ОБЫЧНО выполнение Dial завершается и обработка переходит в экстеншн h и уже там продолжается дальнейшая обработка.

Но в каких-то ситуациях, астериск не видит, что на том конце положили трубку и работает до окончания работы всей логики и только потом завершает вызов.
#6 01.11.2010 10:49

используйте вместо AGI - DeadAGI, а еще лучше прочтите на voipinfo.org про их возможности в отдельности и их различае.
_________________
Успехов!
#7 02.11.2010 08:12

Не пойму как мне это поможет ? Я не вижу проблем с AGI, а DeadAGI позволяет выполнять мой скрипт на завершенном канале, мне это не нужно.

Моя проблема в том, что в каких-то ситуациях астериск не видит сигнала о том, что на другом конце положили трубку, ну и как следствие команда Dial продолжает выполняться и так далее весь диалплан включая вызов AGI.
#8 02.11.2010 17:51

ну не хотите не надо. продолжайте дальше биться головой об стенку. сложно попробовать чтоли?
_________________
Успехов!
#9 03.11.2010 07:54

anest, имхо, ты не прав =)

Alex_asdf, что ты имеешь ввиду под этим?
Alex_asdf wrote:
Абонент "медный".
#10 03.11.2010 09:51

причем тут AGI и номерной план?
разберитесь что бы зарвершение соединения правильно обрабаотывалось, а потмом уже дальше копать.

если asterisk не знает что уже сеанс связи заершен, как это узнает AGI или что то другое?
#11 03.11.2010 11:35

2 anest
Я не вижу смыла это пробовать, я могу вообще эту часть убрать, если она вас смущает.
PS Прошу тему перенести обратно.

2 Alekz
То что абонент подключен к станции медной парой и он чисто физически не может занять две линии.

2 adt2k
Вот тут уже близко. Видимо как-то криво я все это объяснил, или слишком много информации дал.

Хотя я это уже писал, повторю, в какой-то ситуации астериск пропускает (или до него это теряется) информацию о том, что вызов завершился. Если бы это было регулярно или хотя бы часто, было бы проще.

Как вариант все время снимать дебуг с 4-х спанов и ждать когда это произойдет, другого выхода я ни вижу. Ну а тему создал с целью поиска, возможно у кого-то было нечто подобное.
#12 03.11.2010 13:48

Alex_asdf, да, другого варианта нет - только дебажить каналы до станции и смотреть приходит ли вообще сообщение на разрыв.
#13 11.11.2010 08:41

Вот что вижу
Code:

[2010-11-10 15:57:50] VERBOSE[21153] logger.c: -- Called OPER1/xxxx

[2010-11-10 15:57:52] VERBOSE[21153] logger.c: -- SIP/OPER1-0000023b is making progress passing it to DAHDI/7-1
[2010-11-10 15:57:52] DEBUG[21153] chan_dahdi.c: Received AST_CONTROL_PROGRESS on DAHDI/7-1

[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > DL-DATA request
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > TEI=0 Call Ref: len= 2 (reference 23166/0x5A7E) (Sent to originator)
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > Message Type: PROGRESS (3)
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: TEI=0 Transmitting N(S)=116, window is open V(A)=116 K=7

[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > TEI=0 Call Ref: len= 2 (reference 23166/0x5A7E) (Sent to originator)
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > Message Type: PROGRESS (3)
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > [1e 02 81 88]
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1)
[2010-11-10 15:57:52] VERBOSE[21153] logger.c: > Ext: 1 Progress Description: Inband information or appropriate pattern now available. (8) ]

[2010-11-10 15:57:59] VERBOSE[27261] logger.c: < Protocol Discriminator: Q.931 (8) len=9
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: < TEI=0 Call Ref: len= 2 (reference 23166/0x5A7E) (Sent to originator)
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: < Message Type: PROGRESS (3)
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: < [1e 02 83 81]
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: < Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Transit network (3)
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: < Ext: 1 Progress Description: Call is not end-to-end ISDN; further call progress information may be available inband. (1) ]
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: -- Making new call for cref 55934
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: Received message for call 0x8c8da10 on 0x84fe9b8 TEI/SAPI 0/0, call->pri is 0x84fe9b8 TEI/SAPI 0/0
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: -- Processing IE 30 (cs0, Progress Indicator)

[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > DL-DATA request
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > TEI=0 Call Ref: len= 2 (reference 23166/0x5A7E) (Sent from originator)
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > Message Type: RELEASE COMPLETE (90)
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: TEI=0 Transmitting N(S)=123, window is open V(A)=123 K=7

[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > TEI=0 Call Ref: len= 2 (reference 23166/0x5A7E) (Sent from originator)
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > Message Type: RELEASE COMPLETE (90)
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > [08 02 81 d1]
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Private network serving the local user (1)
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: > Ext: 1 Cause: Invalid call reference value (81), class = Invalid message (e.g. parameter out of range) (5) ]
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: q931_hangup: other hangup
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null, hold-state Idle
[2010-11-10 15:57:59] VERBOSE[27261] logger.c: NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null, hold-state Idle

[2010-11-10 15:58:53] VERBOSE[21153] logger.c: -- Nobody picked up in 60000 ms


Если я правильно понял логи, то астериску сообщили о том, что вызов завершается (RELEASE COMPLETE), но он его проигнорировал и позже выдал "Nobody picked up in 60000 ms".
#14 11.11.2010 12:29

Как то тут не все. Станция должна бы послать астериску сообщение DISCONNECT астериск ей RELEASE, станция ему RELEASE COMPLETE. В момент когда передается или получается сообщение RELEASE высвобождаются ресурсы (должен отбиться занятый таймслот DAHDI) Еще и cause странное какое-то 81 Invalid call reference value Вот что у меня в справочнике про нее написано "Причина показывает, что оборудование посылающее эту причину приняло сообщение с меткой соединения, которая в настоящее время не используется на интрефейсе пользователь-сеть"
#15 11.11.2010 12:53

Показал что вижу, в нормальной ситуации до астериска доходит DISCONNECT
#16 12.11.2010 11:19

Из той же оперы :

Схема : АТС -E1(1)- Астериск -E1(2)- АТС

Code:
[14:04:52] VERBOSE[24241] logger.c: -- Called r1/QWER
[14:05:31] VERBOSE[24241] logger.c: -- DAHDI/88-1 answered DAHDI/31-1

[14:05:31] VERBOSE[24241] logger.c: q931.c:4971 q931_connect: Call 15451 enters state 8 (Connect Request). Hold state: Idle

[14:05:31] VERBOSE[24241] logger.c: > DL-DATA request
[14:05:31] VERBOSE[24241] logger.c: > Protocol Discriminator: Q.931 (8) len=14
[14:05:31] VERBOSE[24241] logger.c: > TEI=0 Call Ref: len= 2 (reference 15451/0x3C5B) (Sent to originator)
[14:05:31] VERBOSE[24241] logger.c: > Message Type: CONNECT (7)
[14:05:31] VERBOSE[24241] logger.c: TEI=0 Transmitting N(S)=71, window is open V(A)=71 K=7

[14:05:31] VERBOSE[24241] logger.c: > Protocol Discriminator: Q.931 (8) len=14
[14:05:31] VERBOSE[24241] logger.c: > TEI=0 Call Ref: len= 2 (reference 15451/0x3C5B) (Sent to originator)
[14:05:31] VERBOSE[24241] logger.c: > Message Type: CONNECT (7)
[14:05:31] VERBOSE[24241] logger.c: > [18 03 a9 83 9f]
[14:05:31] VERBOSE[24241] logger.c: > Channel ID (len= 5) [ Ext: 1 IntID: Implicit Other(PRI) Spare: 0 Exclusive Dchan: 0
[14:05:31] VERBOSE[24241] logger.c: > ChanSel: As indicated in following octets
[14:05:31] VERBOSE[24241] logger.c: > Ext: 1 Coding: 0 Number Specified Channel Type: 3
[14:05:31] VERBOSE[24241] logger.c: > Ext: 1 Channel: 31 Type: CPE]
[14:05:31] VERBOSE[24241] logger.c: > [1e 02 81 82]
[14:05:31] VERBOSE[24241] logger.c: > Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1)
[14:05:31] VERBOSE[24241] logger.c: > Ext: 1 Progress Description: Called equipment is non-ISDN. (2) ]

[14:05:31] VERBOSE[27261] logger.c: < Protocol Discriminator: Q.931 (8) len=12
[14:05:31] VERBOSE[27261] logger.c: < TEI=0 Call Ref: len= 2 (reference 15451/0x3C5B) (Sent to originator)
[14:05:31] VERBOSE[27261] logger.c: < Message Type: STATUS (125)
[14:05:31] VERBOSE[27261] logger.c: < [08 02 83 e2]
[14:05:31] VERBOSE[27261] logger.c: < Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Transit network (3)
[14:05:31] VERBOSE[27261] logger.c: < Ext: 1 Cause: Wrong message (98), class = Protocol Error (e.g. unknown message) (6) ]
[14:05:31] VERBOSE[27261] logger.c: < [14 01 0c]
[14:05:31] VERBOSE[27261] logger.c: < Call State (len= 3) [ Ext: 0 Coding: CCITT (ITU) standard (0) Call state: Disconnect Indication (12)

[14:05:31] VERBOSE[27261] logger.c: -- Making new call for cref 48219
[14:05:31] VERBOSE[27261] logger.c: Received message for call 0x8b15128 on 0x84fe9b8 TEI/SAPI 0/0, call->pri is 0x84fe9b8 TEI/SAPI 0/0
[14:05:31] VERBOSE[27261] logger.c: -- Processing IE 8 (cs0, Cause)
[14:05:31] VERBOSE[27261] logger.c: -- Processing IE 20 (cs0, Call State)

[14:05:31] VERBOSE[27261] logger.c: > DL-DATA request
[14:05:31] VERBOSE[27261] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[14:05:31] VERBOSE[27261] logger.c: > TEI=0 Call Ref: len= 2 (reference 15451/0x3C5B) (Sent from originator)
[14:05:31] VERBOSE[27261] logger.c: > Message Type: RELEASE COMPLETE (90)
[14:05:31] VERBOSE[27261] logger.c: TEI=0 Transmitting N(S)=72, window is open V(A)=72 K=7

[14:05:31] VERBOSE[27261] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[14:05:31] VERBOSE[27261] logger.c: > TEI=0 Call Ref: len= 2 (reference 15451/0x3C5B) (Sent from originator)
[14:05:31] VERBOSE[27261] logger.c: > Message Type: RELEASE COMPLETE (90)
[14:05:31] VERBOSE[27261] logger.c: > [08 02 81 e5]
[14:05:31] VERBOSE[27261] logger.c: > Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Private network serving the local user (1)
[14:05:31] VERBOSE[27261] logger.c: > Ext: 1 Cause: Message not compatible with call state (101), class = Protocol Error (e.g. unknown message) (6) ]

[14:05:31] VERBOSE[27261] logger.c: q931_hangup: other hangup
[14:05:31] VERBOSE[27261] logger.c: NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null, hold-state Idle
[14:05:31] VERBOSE[27261] logger.c: NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null, hold-state Idle

[14:05:35] VERBOSE[27261] logger.c: q931.c:5063 q931_disconnect: Call 15451 enters state 11 (Disconnect Request). Hold state: Idle

[14:05:35] VERBOSE[27261] logger.c: > DL-DATA request
[14:05:35] VERBOSE[27261] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[14:05:35] VERBOSE[27261] logger.c: > TEI=0 Call Ref: len= 2 (reference 15451/0x3C5B) (Sent to originator)
[14:05:35] VERBOSE[27261] logger.c: > Message Type: DISCONNECT (69)
[14:05:35] VERBOSE[27261] logger.c: TEI=0 Transmitting N(S)=78, window is open V(A)=78 K=7

[14:05:35] VERBOSE[27261] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[14:05:35] VERBOSE[27261] logger.c: > TEI=0 Call Ref: len= 2 (reference 15451/0x3C5B) (Sent to originator)
[14:05:35] VERBOSE[27261] logger.c: > Message Type: DISCONNECT (69)
[14:05:35] VERBOSE[27261] logger.c: > [08 02 81 90]
[14:05:35] VERBOSE[27261] logger.c: > Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Private network serving the local user (1)
[14:05:35] VERBOSE[27261] logger.c: > Ext: 1 Cause: Normal Clearing (16), class = Normal Event (1) ]

[14:05:35] VERBOSE[27261] logger.c: < Protocol Discriminator: Q.931 (8) len=10
[14:05:35] VERBOSE[27261] logger.c: < TEI=0 Call Ref: len= 2 (reference 15451/0x3C5B) (Sent from originator)
[14:05:35] VERBOSE[27261] logger.c: < Message Type: RELEASE COMPLETE (90)
[14:05:35] VERBOSE[27261] logger.c: < [08 03 00 80 d1]
[14:05:35] VERBOSE[27261] logger.c: < Cause (len= 5) [ Ext: 0 Coding: CCITT (ITU) standard (0) Spare: 0 Location: User (0)
[14:05:35] VERBOSE[27261] logger.c: < Ext: 1 Cause: Unknown (0), class = Normal Event (0) ]
[14:05:35] VERBOSE[27261] logger.c: < Cause data 1: d1 (209)

[14:05:35] VERBOSE[27261] logger.c: Received message for call 0x872d100 on 0x84fe9b8 TEI/SAPI 0/0, call->pri is 0x84fe9b8 TEI/SAPI 0/0
[14:05:35] VERBOSE[27261] logger.c: -- Processing IE 8 (cs0, Cause)
[14:05:35] VERBOSE[27261] logger.c: q931.c:7686 post_handle_q931_message: Call 15451 enters state 0 (Null). Hold state: Idle
[14:05:35] VERBOSE[27261] logger.c: q931_hangup: other hangup
[14:05:35] VERBOSE[27261] logger.c: NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null, hold-state Idle
[14:05:35] VERBOSE[27261] logger.c: NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null, hold-state Idle
[14:05:35] VERBOSE[27261] logger.c: -- Channel 0/31, span 1 got hangup ACK


т.е получается астериск повесил трубку на первом плече, однако

Code:
[15:05:29] VERBOSE[27263] logger.c: < Protocol Discriminator: Q.931 (8) len=10
[15:05:29] VERBOSE[27263] logger.c: < TEI=0 Call Ref: len= 2 (reference 4211/0x1073) (Sent to originator)
[15:05:29] VERBOSE[27263] logger.c: < Message Type: DISCONNECT (69)
[15:05:29] VERBOSE[27263] logger.c: < [08 03 02 80 9f]
[15:05:29] VERBOSE[27263] logger.c: < Cause (len= 5) [ Ext: 0 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Public network serving the local user (2)
[15:05:29] VERBOSE[27263] logger.c: < Ext: 1 Cause: Unknown (0), class = Normal Event (0) ]
[15:05:29] VERBOSE[27263] logger.c: < Cause data 1: 9f (159)

[15:05:29] VERBOSE[27263] logger.c: Received message for call 0x8b20bd8 on 0x8504378 TEI/SAPI 0/0, call->pri is 0x8504378 TEI/SAPI 0/0
[15:05:29] VERBOSE[27263] logger.c: -- Processing IE 8 (cs0, Cause)
[15:05:29] VERBOSE[27263] logger.c: -- Found active call: 0x8b20bd8 cref:36979
[15:05:29] VERBOSE[27263] logger.c: q931.c:7819 post_handle_q931_message: Call 36979 enters state 12 (Disconnect Indication). Hold state: Idle
[15:05:29] VERBOSE[27263] logger.c: -- Channel 0/26, span 3 got hangup request, cause 0

[15:05:29] VERBOSE[24241] logger.c: -- Executing [h@from-clients:1] NoOp("DAHDI/31-1", "End call in h") in new stack
[15:05:29] VERBOSE[24241] logger.c: -- Executing [h@from-clients:2] GotoIf("DAHDI/31-1", "0?bye") in new stack
[15:05:29] VERBOSE[24241] logger.c: -- Executing [h@from-clients:3] NoOp("DAHDI/31-1", "Status : ANSWER (16)") in new stack
[15:05:29] VERBOSE[24241] logger.c: -- Executing [h@from-clients:4] DeadAGI("DAHDI/31-1", "agi/logics_from_users.php|disconnect|1289477129|QWER)") in new stack
[15:05:29] WARNING[24241] res_agi.c: Running DeadAGI on a live channel will cause problems, please use AGI
[15:05:29] VERBOSE[24241] logger.c: -- Launched AGI Script /var/lib/asterisk/agi-bin/agi/logics_from_users.php
[15:05:29] VERBOSE[24241] logger.c: -- AGI Script agi/logics_from_users.php completed, returning 0
[15:05:29] VERBOSE[24241] logger.c: -- Executing [h@from-clients:5] NoOp("DAHDI/31-1", "Bye") in new stack
[15:05:29] DEBUG[24241] chan_dahdi.c: Set option AUDIO MODE, value: ON(1) on DAHDI/88-1
[15:05:29] DEBUG[24241] chan_dahdi.c: Not yet hungup... Calling hangup once with icause, and clearing call
[15:05:29] VERBOSE[24241] logger.c: q931_hangup: other hangup
[15:05:29] VERBOSE[24241] logger.c: NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Disconnect Indication, peerstate Disconnect Request, hold-state Idle
[15:05:29] VERBOSE[24241] logger.c: q931.c:5009 q931_release: Call 36979 enters state 19 (Release Request). Hold state: Idle

[15:05:29] VERBOSE[24241] logger.c: > DL-DATA request
[15:05:29] VERBOSE[24241] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[15:05:29] VERBOSE[24241] logger.c: > TEI=0 Call Ref: len= 2 (reference 4211/0x1073) (Sent from originator)
[15:05:29] VERBOSE[24241] logger.c: > Message Type: RELEASE (77)
[15:05:29] VERBOSE[24241] logger.c: TEI=0 Transmitting N(S)=120, window is open V(A)=120 K=7

[15:05:29] VERBOSE[24241] logger.c: > Protocol Discriminator: Q.931 (8) len=9
[15:05:29] VERBOSE[24241] logger.c: > TEI=0 Call Ref: len= 2 (reference 4211/0x1073) (Sent from originator)
[15:05:29] VERBOSE[24241] logger.c: > Message Type: RELEASE (77)
[15:05:29] VERBOSE[24241] logger.c: > [08 02 81 90]
[15:05:29] VERBOSE[24241] logger.c: > Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) Spare: 0 Location: Private network serving the local user (1)
[15:05:29] VERBOSE[24241] logger.c: > Ext: 1 Cause: Normal Clearing (16), class = Normal Event (1) ]

[15:05:29] DEBUG[24241] chan_dahdi.c: Set option AUDIO MODE, value: OFF(0) on DAHDI/88-1
[15:05:29] VERBOSE[24241] logger.c: -- Hungup 'DAHDI/88-1'
[15:05:29] VERBOSE[24241] logger.c: == Spawn extension (from-clients, QWER, 21) exited non-zero on 'DAHDI/31-1'
[15:05:29] DEBUG[24241] chan_dahdi.c: Set option AUDIO MODE, value: ON(1) on DAHDI/31-1
[15:05:29] DEBUG[24241] chan_dahdi.c: Set option AUDIO MODE, value: OFF(0) on DAHDI/31-1
[15:05:29] VERBOSE[24241] logger.c: -- Hungup 'DAHDI/31-1'

[15:05:29] VERBOSE[27263] logger.c: < Protocol Discriminator: Q.931 (8) len=5
[15:05:29] VERBOSE[27263] logger.c: < TEI=0 Call Ref: len= 2 (reference 4211/0x1073) (Sent to originator)
[15:05:29] VERBOSE[27263] logger.c: < Message Type: RELEASE COMPLETE (90)


... вызов "висит" дальше и завершается уже после того как со второго плеча пришел дисконнект.

Вопрос : почему такое произошло и почему обработка вызова не завершилась по завершению вызова на первом плече.
#17 16.11.2010 15:42

Пришла мысль, как сделать костыль в моей ситуации
Code:
[check-for-lost-call]
exten => connect,1,Noop(Connect to channel ${check_channel})
exten => connect,n,Chanspy(${check_channel},qo)
exten => connect,n,Hangup
exten => check,1,Noop(Check channel ${check_channel})
exten => check,n,Record(/var/spool/asterisk/tmp/${UNIQUEID}.wav,wav,10)
exten => check,n,System(asterisk -rx "soft hangup ${check_channel}")
exten => check,n,Hangup


а в момент соединения вызвать скрипт
Code:
$fn="/var/spool/asterisk/outgoing/$argv[1]);
$f = fopen($fn, "w");

fwrite($f, "CallerID: AsteriskPBX\n");
fwrite($f, "Channel: LOCAL/connect@check-for-lost-call\n");
fwrite($f, "Context: check-for-lost-call\n");
fwrite($f, "Extension: check\n");
fwrite($f, "Priority: 1\n");
fwrite($f, "Set: check_channel=$argv[1]\n");
fclose($f);


т.е по логике я должен был законнектиться к проверяемому каналу, и потом начать запись с этого канала, как только в канале стало тихо, прекратить запись и завершить зависший канал.

К каналу то он коннектиться, только вот запись не начинается (не переходит в check), чего-то я упустил.

Added after 21 minutes:

Я так понимаю в connect должно какое-то событие произойти, которое даст возможность кол-файлу перейти в check

Added after 24 minutes:

Пробовал ставит Answer перед Chanspy , но эффекта 0
#18 18.11.2010 09:41

Моя не внимательность, нужно было
Code:
exten => check,n,Record(/var/spool/asterisk/tmp/${EPOCH}:wav,10)

тогда если на канале тишина 10 сек, то канал завершается.

Костыль придуман, сейчас бы с причиной разобраться.