QuietusUA
@QuietusUA
системный администратор

Как дать возможность клиенту позвонить менеджеру который ему звонил?

Добрый день,

Есть Elastix 2.5
Нужно как то соединять клиента с последним звонившим ему менеджером. что то типа:
1. Сотрудник компании набирает номер клиента и разговаривает с ним (или не дождавшись звонка кладет трубку);
2. Клиент захотев перезвонить сотруднику компании (или узнать кто и по какому вопросу звонил ему) набирает определившейся у него номер;
3. АТС определяет номер клиента и соединяет с последним звонившем ему сотрудником компании.
  • Вопрос задан
  • 1086 просмотров
Пригласить эксперта
Ответы на вопрос 3
gogametreveli
@gogametreveli
У меня вот так настроено , в принципе работает :)

exten => _X.,1,Answer()
exten => _X.,n,MixMonitor(${UNIQUEID}.wav,b)
exten => _X.,n,MYSQL(Connect connid localhost {user} {pass} {database})
; выбираем запросом внутренний номер с которого был последний звонок клиенту
exten => _X.,n,MYSQL(Query resultid ${connid} SELECT `src` FROM {cdr_table} WHERE `dst`='${CALLERID(number)}' ORDER BY `calldate` DESC LIMIT 1)
exten => _X.,n,MYSQL(Fetch fetchid ${resultid} VAR)
exten => _X.,n,MYSQL(Clear ${resultid})
exten => _X.,n,MYSQL(Disconnect ${connid})
; если такой информации нет то переходим к стандартным процедурам
exten => _X.,n,GotoIf($["${var}" = "" ]?def_user)
; проверям если оперетор занят то переходим к стандартным процедурам
exten => _X.,n,GotoIf($[ "${DEVICE_STATE(SIP/${var})}" != "NOT_INUSE" ]?def_user)
; звоним нужному опереатору
exten => _X.,n,Dial(SIP/${var},20,tTr)  ; 
; если оператор не ответил то звоним по стандартной логике
exten => _X.,n,Dial(SIP/7101,20,tTr)
exten => _X.,n,Dial(SIP/7102&SIP/7103&SIP/7104&SIP/7105&SIP/7106&SIP/7107&SIP/7108,30,tT)
exten => _X.,n,Hangup()
; стандартная логика
exten => _X.,n(def_user),GotoIf($["${DEVICE_STATE(SIP/7101)}" = "NOT_INUSE"]?first_user:all_user)
exten => _X.,n(first_user),Dial(SIP/7101,10,tTr)
exten => _X.,n(all_user),Dial(SIP/7102&SIP/7103&SIP/7104&SIP/7105&SIP/7106&SIP/7107&SIP/7108&SIP/7109,10,tT)
exten => _X.,n,Hangup()
Ответ написан
@brar
Принцип работы опишу, но Вам под себя подпилить придется.
Записываем в базу (в данном случае внутреннюю "родную" базу астериска) номер кому звоним. Потом при входящем звонке сверяем и маршрутизируем.

[outgoing]
exten => _98XXXXXXXXXX,1,Set(DB(outg/${EXTEN:2})=${CALLERID(num)}) #записываем в базу набираемый номер.

[call_back_to_caller] #Если звонок пришел от абонента, которому ранее звонил менеджер
exten => dfg,1,Dial(SIP/${DB(outg/${CALLERID(num)})},,Tt)
exten => dfg,n,Hangup

[inbound]
exten => ваш_внешний_номер,n,GotoIf(${DB_EXISTS(outg/${CALLERID(number)})}?call_back_to_caller,dfg,1:reception,cc,1) #сверяем наличие в базе номера и отправляем в соотвествующий экстеншн.

[reception] #если звонок приходит от любого другого номера, которого нет в базе)
exten => cc,1,Dial(SIP/1099,12,Tt)


Это рабочий вариант. Но, как сказал, вам надо подпилить под себя, и понятное дело, что здесь лишь те строчки, которые отвечают за логику в соотвествии с вашим вопросом. Так или иначе, ознакомьтесь с документацией по DB и DB_EXISTS и поработайте с записями в базе, чтоб было понимание.
Ответ написан
Комментировать
@silverjoe
Запоминаете номер который вас интересует в БД и время звонка.
Раз в 15-60 минут (временной интервал у каждой компании свой, у некоторых до конца дня может быть) очищаете старые записи.
При входчщем звонке смотрите в БД, если номер есть = соединяете с необходимым внутренним.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы