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

background - проигрывание звуков

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

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

Ответить
Servo
Сообщения: 15
Зарегистрирован: 28 фев 2012, 18:48

background - проигрывание звуков

Сообщение Servo »

Всем привет,

проблема с проигрыванием звука,
Исходя из описания команды Background - сразу после ее вызова, управление передается дальше.
Но, во время проигрывания звука, при нажатии первой цифры - соединение разывается.
Если прослушать сообщение, и набрать 4 цифры после - все ок.

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

exten => 2909,1,Answer
exten => 2909,n,Wait(1)
exten => 2909,n,Background(conf-getconfno)
exten => 2909,n,Read(digits,,4,,,8)
.....
а вот что отображается в CLI:
-- Executing [2909@default:1] Answer("H323/ip$10.10.100.7:12534/17990", "") in new stack
-- Executing [2909@default:2] Wait("H323/ip$10.10.100.7:12534/17990", "1") in new stack
== Spawn extension (default, 2909, 3) exited non-zero on 'H323/ip$10.10.100.7:12534/17990'
Оч. нужна помощь.

ps: в данный момент нет консоли.
меня спасет Read(digits,conf-getconfno,4,,,8) ?
Последний раз редактировалось Servo 28 фев 2012, 21:34, всего редактировалось 1 раз.
ded
Сообщения: 15626
Зарегистрирован: 26 авг 2010, 19:00

Re: background - проигрывание звуков

Сообщение ded »

exten => 2909,n,Background(conf-getconfno)
exten => 2909,n(read),Read(digits,,4,,,8)
.......
exten => _XXXX,n,Waitexten(5)
exten => _XXXX,n,Goto(2909,read)

1) включите debug dtmf
2) контекст приведён не полностью. Есть ли там
exten =h,1,??
Servo
Сообщения: 15
Зарегистрирован: 28 фев 2012, 18:48

Re: background - проигрывание звуков

Сообщение Servo »

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

exten => 2909,1,Answer
exten => 2909,n,Wait(1)
exten => 2909,n,Background(conf-getconfno)
exten => 2909,n,Read(digits,,4,,,8)
exten => 2909,n,NoOp(Dial conf are: ${digits})
exten => 2909,n(pinnumber),Background(conf-getpin)
exten => 2909,n,Read(digits2,,4,,,8)
exten => 2909,n,NoOp(Dial Pin  are: ${digits2})
exten => 2909,n,MYSQL(Connect connid localhost *** *** meetme)
exten => 2909,n,GotoIf($["${connid}" = ""]?error,1)
exten => 2909,n,MYSQL(Query resultid  ${connid} SELECT `bookId`,`pin`,`adminpin`,`adminopts`,`opts`,`recordingfilename` FROM `booking` WHERE `confno`='${digits}' ORDER BY bookId DESC LIMIT 1)
exten => 2909,n,MYSQL(Query resultid ${connid} SELECT `bookId`,`pin`, `adminpin`,`adminopts`,`opts`,`recordingfilename` FROM `booking` WHERE `confno`='${digits}' AND `starttime` < '${STRFTIME(${EPOCH},,%Y-%m$
exten => 2909,n,NoOp(Query are: ${resultid})
exten => 2909,n,MYSQL(Fetch fetchid ${resultid} bookId pin adminpin adminopts opts recordingfilename)
exten => 2909,n,NoOp(Pin are: ${pin})
exten => 2909,n,GotoIf($["${pin}" = ${digits2}]?error,1)
exten => 2909,n,meetme(${digits},xw,${digits2})
exten => 2909,n,Hangup

exten => error,1,NoOp(error!)
exten => error,n,Hangup()
В CLI если набирать dtmf после прослушивания сообщения:
-- Executing [2909@default:1] Answer("H323/ip$10.10.100.7:16685/24025", "") in new stack
-- Executing [2909@default:2] Wait("H323/ip$10.10.100.7:16685/24025", "1") in new stack
-- Executing [2909@default:3] BackGround("H323/ip$10.10.100.7:16685/24025", "conf-getconfno") in new stack
-- <H323/ip$10.10.100.7:16685/24025> Playing 'conf-getconfno.ulaw' (language 'en')
-- Executing [2909@default:4] Read("H323/ip$10.10.100.7:16685/24025", "digits,,4,,,8") in new stack
-- Accepting a maximum of 4 digits.
-- User entered '100'
-- Executing [2909@default:5] NoOp("H323/ip$10.10.100.7:16685/24025", "Dial conf are: 100") in new stack
-- Executing [2909@default:6] BackGround("H323/ip$10.10.100.7:16685/24025", "conf-getpin") in new stack
-- <H323/ip$10.10.100.7:16685/24025> Playing 'conf-getpin.ulaw' (language 'en')
-- Executing [2909@default:7] Read("H323/ip$10.10.100.7:16685/24025", "digits2,,4,,,8") in new stack
-- Accepting a maximum of 4 digits.
-- User entered '1234'
-- Executing [2909@default:8] NoOp("H323/ip$10.10.100.7:16685/24025", "Dial Pin are: 1234") in new stack
-- Executing [2909@default:9] MYSQL("H323/ip$10.10.100.7:16685/24025", "Connect connid localhost *** *** meetme") in new stack
-- Executing [2909@default:10] GotoIf("H323/ip$10.10.100.7:16685/24025", "0?error,1") in new stack
-- Executing [2909@default:11] MYSQL("H323/ip$10.10.100.7:16685/24025", "Query resultid 1 SELECT `bookId`,`pin`, `adminpin`,`adminopts`,`opts`,`recordingfilename` FROM `booking` WHERE `confno`='100' ORDER BY bookId DESC LIMIT 1") in new stack
-- Executing [2909@default:12] MYSQL("H323/ip$10.10.100.7:16685/24025", "Query resultid 1 SELECT `bookId`,`pin`, `adminpin`,`adminopts`,`opts`,`recordingfilename` FROM `booking` WHERE `confno`='100' AND `starttime` < '2012-02-28 15:26:07' AND `endtime` > '' ORDER BY bookId DESC LIMIT 1") in new stack
-- Executing [2909@default:13] NoOp("H323/ip$10.10.100.7:16685/24025", "Query are: 2") in new stack
-- Executing [2909@default:14] MYSQL("H323/ip$10.10.100.7:16685/24025", "Fetch fetchid 2 bookId pin adminpin adminopts opts recordingfilename") in new stack
-- Executing [2909@default:15] NoOp("H323/ip$10.10.100.7:16685/24025", "Pin are: 1234") in new stack
-- Executing [2909@default:16] GotoIf("H323/ip$10.10.100.7:16685/24025", "0?error,1") in new stack
-- Executing [2909@default:17] MeetMe("H323/ip$10.10.100.7:16685/24025", "100,xw,1234") in new stack
ded
Сообщения: 15626
Зарегистрирован: 26 авг 2010, 19:00

Re: background - проигрывание звуков

Сообщение ded »

Background и Read не живут вместе. Обычно - только с Playback.
Нужны трюки.
Что происходит на шаге
exten => 2909,n,Background(conf-getconfno) если нажата одна цифра, допустим 1? Он ищет эту цифру в текущем контексте,
exten => 1,1,??
не находит, и вываливается.
Ну так надо ему скормить
exten => _XXXX,n,Set(digits2=${EXTEN})
Servo
Сообщения: 15
Зарегистрирован: 28 фев 2012, 18:48

Re: background - проигрывание звуков

Сообщение Servo »

Спасибо,
Покурил мануал, и сработала Read(digits,conf-getconfno,4,,,8)

В любом случае, спасибо за помощь.
Servo
Сообщения: 15
Зарегистрирован: 28 фев 2012, 18:48

Re: background - проигрывание звуков

Сообщение Servo »

Все так просто - не получилось. вернул background:

т.к. начал получать следующую ошибку:

AVAYA
- Executing [2909@default:1] Answer("H323/ip$10.10.100.7:10555/26785", "") in new stack
-- Executing [2909@default:2] Wait("H323/ip$10.10.100.7:10555/26785", "1") in new stack
== Connect attempt from '127.0.0.1' unable to authenticate
-- Auto fallthrough, channel 'H323/ip$10.10.100.7:10555/26785' status is 'UNKNOWN'
SIP (x-lite4) с этим попроще, тут косяк с кодеками.
- Executing [2909@default:1] Answer("SIP/2901-00000000", "") in new stack
-- Executing [2909@default:2] Wait("SIP/2901-00000000", "1") in new stack
[Feb 29 06:07:27] NOTICE[22758]: channel.c:3079 __ast_read: Dropping incompatible voice frame on SIP/2901-00000000 of format alaw since our native format has changed to 0x4 (ulaw)
-- Auto fallthrough, channel 'SIP/2901-00000000' status is 'UNKNOWN'
пришлось действительно включать дебаг DTMF:

С телефона AVAYA

-- Executing [2909@default:1] Answer("H323/ip$10.10.100.7:19201/26093", "") in new stack
-- Executing [2909@default:2] Wait("H323/ip$10.10.100.7:19201/26093", "1") in new stack
-- Executing [2909@default:3] BackGround("H323/ip$10.10.100.7:19201/26093", "conf-getconfno") in new stack
-- <H323/ip$10.10.100.7:19201/26093> Playing 'conf-getconfno.ulaw' (language 'en')
[Feb 29 06:01:55] WARNING[22630]: pbx.c:4416 __ast_pbx_run: Invalid extension '1', but no rule 'i' in context 'default'
Servo
Сообщения: 15
Зарегистрирован: 28 фев 2012, 18:48

Re: background - проигрывание звуков

Сообщение Servo »

Так, все предыдущие вопросы снимаются.
Спасибо ded, прочитал еще раз и вкурил.


теперь вопрос с GotoIf:
Как видно, PIN в донабор не совпадают "Pin are: 1234, DTMF are 54321 - но при этом GotoIf возвращает "0" - якобы равенство верно.
В чем косяк? Видимо я что-то недокурил...

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

.....
exten => 2909,n,NoOp(Pin are: ${pin}, DTMF are ${digits2}, adminpin are ${adminpin}, opts are ${opts}, adminopts are ${adminopts})
exten => 2909,n,GotoIf($["${pin}" = "${digits2}"]?adminpin)
exten => 2909,n,meetme(${digits},xwD,${digits2})
exten => 2909,n,Hangup()
exten => 2909,n(adminpin),GotoIf($["${adminpin}" = "${digits2}"]?error,1)
.....
-- Executing [2909@default:14] MYSQL("H323/ip$10.10.100.7:13228/3582", "Fetch fetchid 2 bookId pin adminpin adminopts opts recordingfilename") in new stack
-- Executing [2909@default:15] NoOp("H323/ip$10.10.100.7:13228/3582", "Pin are: 1234, DTMF are 54321, adminpin are 54321, opts are sImwr, adminopts are aAsIr") in new stack
-- Executing [2909@default:16] GotoIf("H323/ip$10.10.100.7:13228/3582", "0?adminpin") in new stack
Servo
Сообщения: 15
Зарегистрирован: 28 фев 2012, 18:48

Re: background - проигрывание звуков

Сообщение Servo »

И этот вопрос снимается,
покурил синтаксис - все заработало.

В соответствии с синтаксисом GotoIf(condition?label1[:label2]) надо было сделать

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

exten => 2909,n,NoOp(Pin are: ${pin}, DTMF are ${digits2}, adminpin are ${adminpin}, opts are ${opts}, adminopts are ${adminopts})
exten => 2909,n,GotoIf($["${pin}" = "${digits2}"]?:adminpin)
exten => 2909,n,meetme(${digits},xwD,${digits2})
exten => 2909,n,Hangup()
exten => 2909,n(adminpin),GotoIf($["${adminpin}" = "${digits2}"]?:error,1)
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH