Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Переадресация входящих на последний исходящий

1

Ситуация: Asterisk + GSM шлюз. С сотовых телефонов часто перезванивают на не отвеченные вызовы, набирают номер шлюза и по умолчанию попадают на секретаря. Как настроить систему , что бы входящий звонок клиента шел на тот внутренний номер, с которого последний раз звонили клиенту?

удалить закрыть спам изменить тег редактировать

спросил 2011-02-02 22:05:00 +0400

teretere Gravatar teretere
11 3 1 3
http://www.elektrikis.lv/

обновил 2011-02-03 01:10:14 +0400

litnimax Gravatar litnimax
1453 11 8 29
http://www.pbxware.ru/

4 Ответа

3

тогда примерно так

;исходящий контекст
[outbound-routes]
;запоминаем на какой номер кто звонил
exten => _XXXXXXXX.,1,Set(DB(lastcalls/trunk1/${EXTEN})=${CDR(src)})
;звоним в транк
exten => _XXXXXXXX.,n,Dial(SIP/trunk1/${EXTEN})

;входящий контекст, номер trunk1 это hotline|did со шлюза или от прова
[inbound]
;проверяем, есть ли номер в списке для этого транка
exten => trunk1,1,GotoIf($[foo${DB(lastcalls/trunk1/${CDR(src)})} = foo]?inbound:toext)
;если что-то имеется, то соединяем (переходим в контекст с локальными абонентами)
exten => trunk1,n(toext),GoTo(ext-local,${DB(lastcalls/trunk1/${CDR(src)})},1)
;если не имеется то как обычно, например в ИВР
exten => trunk1,n(inbound),GoTo(IVR,s,1)

Чтобы не забивать astdb можно ночью по расписанию делать так:

asterisk -rx "database del lastcalls"
ссылка удалить спам редактировать

ответил 2011-02-02 23:40:27 +0400

пост отмечен как вики сообщества

Этот пост - вики. Любой с кармой >300 может улучшить его.

обновил 2011-02-02 23:42:14 +0400

switch Gravatar switch
8334 11 7 91
http://lynks.ru/
0

Все гораздо проще, если записывается CDR. Данный контекст залазит в CDR и ищет, кто последний звонил этому абоненту (привел 2 примера, при всех вызовах, и при неотвеченных), и перезванивает ему. Если этот абонент занят, либо не отвечает, то звонок идет дальше по контексту [from-trunk]

    [from-trunk-gsmin]
    exten => _X.,1,Set(CHANNEL(language)=ru)
    exten => _X.,n,Set(CALLID=${CALLERID(num):-7})
    exten => _X.,n,MYSQL(Connect connidcdr localhost root pass asteriskcdrdb utf8)
; Для всех вызовов
    exten => _X.,n,MYSQL(Query resultidcdr ${connidcdr} SELECT * FROM cdr WHERE dst LIKE '%${CALLID}%' ORDER BY calldate DESC)
; Для неотвеченных вызовов
;   exten => _X.,n,MYSQL(Query resultidcdr ${connidcdr} SELECT * FROM cdr WHERE dst LIKE '%${CALLID}%' AND disposition LIKE 'NO ANSWER' ORDER BY calldate DESC)
    exten => _X.,n,MYSQL(Fetch fetchid ${resultidcdr} calldate clid src dst)
    exten => _X.,n,set(number=${src})
    exten => _X.,n,NoOp(кто звонил --> ${clid} кому звонил --> ${dst})
    exten => _X.,n,GOTOIF($["${dst}" = ""]?nodst:dst)
    exten => _X.,n(dst),MYSQL(Clear ${resultidcdr})
    exten => _X.,n,MYSQL(Disconnect ${connidcdr})
    exten => _X.,n,dial(SIP/${number},20,tT)
    exten => _X.,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?nodst)
    exten => _X.,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?nodst)
    exten => _X.,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?nodst)
    exten => _X.,n(nodst),MYSQL(Clear ${resultidcdr})
    exten => _X.,n,MYSQL(Disconnect ${connidcdr})
    exten => _X.,n,goto(from-trunk,${DID},1)
    exten => h,1,handup()
ссылка удалить спам редактировать

ответил 2014-09-24 10:34:25 +0400

nyll Gravatar nyll
1 7 1 5

обновил 2014-09-24 17:13:45 +0400

Comments

Задолбал своими правками спамить в почту.

switch ( 2014-09-24 18:21:29 +0400 )редактировать
0

очень просто: нужно запоминать в astdb предыдущего вызывавшего и при входящем направлять на него

ссылка удалить спам редактировать

ответил 2011-02-02 22:15:05 +0400

switch Gravatar switch
8334 11 7 91
http://lynks.ru/
0

я бы сделал так(с минимальным вмешательством в работу freepbx) 1) написал бы макро, которое записывает дест в базу

 
[macro-recordout]
exten => _X.,1,Set(chan=${CUT(DSTCHANNEL,-,1)}); берем имя канала
exten => _X.,n,Set(DB(lastout/${chan})=${CALLERID(num)}); запсиываем в базу по каанлу кто звонил.

2) добавляем в ключи dial в general секции freepbx m(recordout) проверяем. если все верно, у нас по любому звонку ложит кто последний звонил. правда рабоатет только если овтетили.

3) ставим входящий контекст както так

[in-from-gsm]
exten => _X.,1,Set(chan=${CUT(CHANNEL,-,1)}); берем имя канала входа
exten => _X.,2,Goto(from-internal,${DB(lastout/${chan})},1); zvonim tomu kot zvonil.

недостаток- не будет записывать неудачные(без ответа) звонки. ну без изменения исходящей цепочки не получиться их записывать.

ссылка удалить спам редактировать

ответил 2011-02-02 23:32:44 +0400

meral Gravatar meral flag of Ukraine
21228 23 18 169
http://pro-sip.net/

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2011-02-02 22:05:00 +0400

Просмотрен: 1,138 раз

Обновлен: May 12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.