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

Сверять звонящего в наличии записи в БД

Проблемы Asterisk без вэб-оболочек и их решения

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

Ответить
vlad_kkk
Сообщения: 20
Зарегистрирован: 18 янв 2013, 11:58

Сверять звонящего в наличии записи в БД

Сообщение vlad_kkk »

Приветствую,

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

[outbound]
exten => _98XXXXXXXXXX,1,Set(DB(outg/${EXTEN:2})=${CALLERID(num)})

[inbound]
exten => trunk,n,Dial(SIP/${DB(outg/${CALLERID(num)})},,Tt)

[reception]
exten => 100,1,Dial(SIP/100) 
При условии, что базе есть значение CALLERID(num), то осуществляется переход к экстеншену, с которого звонили ранее на номер звонящего в данный момент (то есть с этим все нормально). А вот если приходит вызов и в базе отсутствует CALLERID(num), то как заставить осуществлять переход в контекст ресепшна?
Сейчас, не находя куда звонить, пишет:

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

Dial("SIP/14568835-000004b0", "SIP/,,Tt") in new stack
[2013-01-18 12:25:33] WARNING[5552][C-0000025e]: app_dial.c:2326 dial_exec_full: Dial argument takes format (technology/resource)
То есть, он не знает куда звонить.
Копал в GotoIf, но не осилил.
Помогите, пожалуйста.
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

Re: Сверять звонящего в наличии записи в БД

Сообщение Wapo »

Сделайте перед вызовом что-то типа GotoIF($["${DB/outg/...."=""]?reception,100,1)
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

Re: Сверять звонящего в наличии записи в БД

Сообщение awsswa »

платный суппорт по мере возможностей
ded
Сообщения: 15626
Зарегистрирован: 26 авг 2010, 19:00

Re: Сверять звонящего в наличии записи в БД

Сообщение ded »

При условии, что базе есть значение CALLERID(num), то осуществляется переход к экстеншену
но судя по
Dial("SIP/14568835-000004b0", "SIP/,,Tt") - в базе нет значения CALLERID(num). И это можно увидеть вставив дополнительный шаг - посмотреть значение CALLERID(num):
exten => _98XXXXXXXXXX,1,NoOp(${CALLERID(num)})
exten => _98XXXXXXXXXX,n,Set(DB(outg/${EXTEN:2})=${CALLERID(num)})
exten => _98XXXXXXXXXX,n,NoOp(DB(outg/${EXTEN:2}))
Что делать в таком случае?
vlad_kkk
Сообщения: 20
Зарегистрирован: 18 янв 2013, 11:58

Re: Сверять звонящего в наличии записи в БД

Сообщение vlad_kkk »

Wapo писал(а):Сделайте перед вызовом что-то типа GotoIF($["${DB/outg/...."=""]?reception,100,1)

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

Can't find trailing parenthesis for function 'DB(outg/....'?
(
vlad_kkk
Сообщения: 20
Зарегистрирован: 18 янв 2013, 11:58

Re: Сверять звонящего в наличии записи в БД

Сообщение vlad_kkk »

ded писал(а):
При условии, что базе есть значение CALLERID(num), то осуществляется переход к экстеншену
но судя по
Dial("SIP/14568835-000004b0", "SIP/,,Tt") - в базе нет значения CALLERID(num). И это можно увидеть вставив дополнительный шаг - посмотреть значение CALLERID(num):
exten => _98XXXXXXXXXX,1,NoOp(${CALLERID(num)})
exten => _98XXXXXXXXXX,n,Set(DB(outg/${EXTEN:2})=${CALLERID(num)})
exten => _98XXXXXXXXXX,n,NoOp(DB(outg/${EXTEN:2}))
Что делать в таком случае?
Отправить звонок в контекст reception. Но как??? Собственно, в этом и заключается вопрос. )
ded
Сообщения: 15626
Зарегистрирован: 26 авг 2010, 19:00

Re: Сверять звонящего в наличии записи в БД

Сообщение ded »

Осваивайте синтаксис GotoIf, ищите примерчики, пробуйте, меняйте и пробуйте, пробуйте За Вас не хочется работу работать.

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

-= Info about application 'GotoIf' =- 

[Synopsis]
Conditional goto

[Description]
  GotoIf(condition?[labeliftrue]:[labeliffalse]): This application will set the current
context, extension, and priority in the channel structure based on the evaluation of
the given condition. After this application completes, the
pbx engine will continue dialplan execution at the specified location in the dialplan.
The channel will continue at
'labeliftrue' if the condition is true, or 'labeliffalse' if the condition is
false. The labels are specified with the same syntax as used within the Goto
application.  If the label chosen by the condition is omitted, no jump is
performed, and the execution passes to the next instruction.
If the target location is bogus, and does not exist, the execution engine will try 
to find and execute the code in the 'i' (invalid)-= Info about application 'GotoIf' =- 

[Synopsis]
Conditional goto

[Description]
  GotoIf(condition?[labeliftrue]:[labeliffalse]): This application will set the current
context, extension, and priority in the channel structure based on the evaluation of
the given condition. After this application completes, the
pbx engine will continue dialplan execution at the specified location in the dialplan.
The channel will continue at
'labeliftrue' if the condition is true, or 'labeliffalse' if the condition is
false. The labels are specified with the same syntax as used within the Goto
application.  If the label chosen by the condition is omitted, no jump is
performed, and the execution passes to the next instruction.
If the target location is bogus, and does not exist, the execution engine will try 
to find and execute the code in the 'i' (invalid)
extension in the current context. If that does not exist, it will try to execute the
'h' extension. If either or neither the 'h' or 'i' extensions have been defined, the
channel is hung up, and the execution of instructions on the channel is terminated.
Remember that this command can set the current context, and if the context specified
does not exist, then it will not be able to find any 'h' or 'i' extensions there, and
the channel and call will both be terminated!

extension in the current context. If that does not exist, it will try to execute the
'h' extension. If either or neither the 'h' or 'i' extensions have been defined, the
channel is hung up, and the execution of instructions on the channel is terminated.
Remember that this command can set the current context, and if the context specified
does not exist, then it will not be able to find any 'h' or 'i' extensions there, and
the channel and call will both be terminated!
vlad_kkk
Сообщения: 20
Зарегистрирован: 18 янв 2013, 11:58

Re: Сверять звонящего в наличии записи в БД

Сообщение vlad_kkk »

awsswa писал(а):http://awsswa.livejournal.com/12073.html
Супер! Спасибо огромное.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH