Часто попадали в ситуацию когда на мобильном обнаруживаешь пропущенный звонок с городского и при попытке перезвонить попадаешь на голосовое меню какой нибудь фирмы и совершенно непонятно кто тебе звонил? Я часто, а также и клиенты нашей компании каждый день сталкиваются с этим… С этим решено было что то делать. Все последующие действия актуальны для trixbox v2.8.0.4 (с некоторыми корректировками или возможно даже без них можно реализовать и на других системах)
Вся информация по совершенным звонкам хранится в CDR Report и соответственно базе mysql.
Алгоритм следующий:
Берем номер входящего звонка, делаем запрос к таблице cdr и получаем внутренний extension который совершал последний вызов на данный номер, проговариваем номер extension'a, соединяем абонентов.
Зайдя в mysql на хосте asterisk мы сразу видим базу «asteriskcdrdb» с одной единственной табличкой «cdr» в которой хранятся записи такого вида
Из всех столбцов нам понадобятся:
- calldate — время звонка
- dst — набранный номер
- channel — внутренний номер с которого был совершен звонок
Поэксперемнтировав с запросами получаем следующий: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)
- Отвечаем на звонок
- Подключаемся к БД пользователем root, паролем pass, к базе asteriskcdrdb
- Выполняем запрос
- Получаем результат пишем в var
- Освобождаем память от запроса
- Отключаемся от БД
- В поле channel содержится не только номер канала, ненужное убирается sed'ом а также лишний перевод строки tr'ом
- Индекс для цикла
- Получаем длину внутреннего номера который нужно произнести
- Пока индекс меньше длины номера
- Произносим текущую цифру номера
- Увеличиваем индекс на один
- Заканчиваем цикл
- Соединяем абонентов
По коду вроде все, теперь необходимо чтобы можно было использовать полноценно эту функцию в веб интерфейсе 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 в голосовом меню соединиться с последним повзонившим ему номером.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий