- PVSM.RU - https://www.pvsm.ru -
Часто попадали в ситуацию когда на мобильном обнаруживаешь пропущенный звонок с городского и при попытке перезвонить попадаешь на голосовое меню какой-нибудь фирмы и совершенно непонятно кто тебе звонил? Я часто, а также и клиенты нашей компании каждый день сталкиваются с этим… С этим решено было что-то делать. Все последующие действия актуальны для trixbox v2.8.0.4 (с некоторыми корректировками или, возможно, даже без них можно реализовать и на других системах)
Вся информация по совершенным звонкам хранится в CDR Report и соответственно базе mysql.
Алгоритм следующий:
Берем номер входящего звонка, делаем запрос к таблице cdr и получаем внутренний extension, который совершал последний вызов на данный номер, проговариваем номер extension'a, соединяем абонентов.
Зайдя в mysql на хосте asterisk мы сразу видим базу «asteriskcdrdb» с одной единственной табличкой «cdr» в которой хранятся записи такого вида
Из всех столбцов нам понадобятся:
Поэкспериментировав с запросами получаем следующий:
SELECT `channel` FROM cdr WHERE `dst`='${CALLERID(number)}' ORDER BY `calldate` DESC LIMIT 1
Получаем поле channel из таблицы cdr где набранный номер совпадает с текущим callerid, сортируем по убыванию и получаем только последнюю запись, т.е. последний номер с которого был звонок.
Воспользуемся custom файлами asterisk'a. Добавляем в конец файла extensions_custom.conf следующий код. В данном примере используется extension 456.
[custom-from-mobile] exten => 456,1,Answer() exten => 456,n,MYSQL(Connect connid localhost root pass asteriskcdrdb) exten => 456,n,MYSQL(Query resultid ${connid} SELECT `channel` FROM cdr WHERE `dst`='${CALLERID(number)}' ORDER BY `calldate` DESC LIMIT 1) exten => 456,n,MYSQL(Fetch fetchid ${resultid} VAR) exten => 456,n,MYSQL(Clear ${resultid}) exten => 456,n,MYSQL(Disconnect ${connid}) exten => 456,n,Set(CHAN=${SHELL(echo ${var} |tr -d 'n' |sed -e 's/.*/(.*)-.*/1/g')}) exten => 456,n,Set(i=0) exten => 456,n,Set(COUNTER=${LEN(${CHAN})}) exten => 456,n,While($[${i} < ${COUNTER}]) exten => 456,n,Playback(digitsru/${CHAN:${i}:1}) exten => 456,n,Set(i=$[${i} + 1]) exten => 456,n,EndWhile() exten => 456,n,Goto(from-internal,${CHAN},1)
По коду вроде все, теперь необходимо чтобы можно было использовать полноценно эту функцию в веб интерфейсе asterisk'a. Заходим в веб интерфейс trixbox.
PBX — PBX Settings — Tools — Custom Destinations и кликаем на Add Custom Destination. Заполняем два поля:
Custom Destination: custom-from-mobile,456,1 #где custom-from-mobile заголовок добавленного кода в custom_extensions.conf, 456 — номер extension'a, 1 — приоритет
Descritpion: по желанию к примеру 456.
Не забываем нажать на Submit Changes.
Правим голосовое меню IVR и вешаем к примеру на цифру «5» пункт Custom Destinations: с только что созданным 456.
Submit Changes. Apply Configuration Changes и Continue with reload. Дожидаемся применения изменений.
Теперь набрав номер нашей компании, у клиента есть всегда возможность нажав 5 в голосовом меню соединиться с последним позвонившим ему номером.
Автор: albertxyc
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/55776
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/213669/
Нажмите здесь для печати.