Как организовать обратный звонок напрямую на внутренний номер абонента?
Добрый день, существует задача на чистом Астериске организовать обратный звонок с городского, сотового на внутренний номер абонента,
Т.е когда внутренний абонент компании, звонит на городской, мобильный (клиенту) и там не берут трубку эта запись заносится в базу данных, после этого внешний клиент( который не взял трубку) перезвонив на городской номер компании ( который у него в телефоне в пропущенных вызовах) слышит в IVR предложение по нажатию кнопки 0 вызвать сразу последнего набравшего его абонента (тем самым не загружает секретарей которые сейчас бедные ищут кто же набирал того или иного клиента ) звонившей ему компании, либо если клиент звонит в первый раз в компанию то включался стандартный IVR где предлагается просто набрать внутренний номер или дождаться ответа секретаря .. Возможно это должен делать скрипт, возможно просто запись в диал план. Хэлп???
AGI — это встроенный в Asterisk метод выполнения внешних скриптов (по аналогии с CGI для http серверов), который может расширить функциональность asterisk при помощи других языков программирования. Таких, как: Perl, PHP, C, Pascal, Bourne Shell.
Если коротко, отслеживаешь и пишешь в базу исходящие номера абонентов которым пытались дозвониться + внутренний номер с которого звонили. Далее когда вам абонент решит перезвонить, в диалплане строкой exten => t,n,AGI(exemple.php); будет вызван вами написанный скрипт exemple.php который в свою очередь пойдет в базу и проверит пытались ли дозвониться до этого абонента.
примерно так
Исходящая маршрутизация
context out {
_X. =>{
Dial(SIP/number@Trunk);
};
h=>{
if ("${CDR(disposition)}"="NO ANSWER") {
&resultat_sql(%${CALLERID(num)}, ${EXTEN}, 0);
};
if ("${CDR(disposition)}" = "BUSY") {
&resultat_sql(%${CALLERID(num)}, ${EXTEN}, 0);
};
};
h=>{
if ("${CDR(disposition)}"="NO ANSWER") {
&resultat_sql(${EXTEN}, status);
Это может сделать и скрипт, это может и сделать макрос в диалплане...
Соответственно я бы обратился к фрилансерам (обращайтесь, помогу =))
вам нужно обработать исходящий звонок и при статусах busy/noanswer/cancel делал бы запись в бд
соответственно при входящих звонках делать сопоставление звонящего CID из базы и выполнять нужные действия
Достаточно использовать встроенную BD астериска.
Используйте DIALSTATUS при исходящем звонке и при получении BUSY заносите в базу номер абонента из ${EXTEN} и CALLERID звонящего сотрудника
ну а в обработке входящих воплняеет макрос по наличию в БД абонента. в макросе реализуете то самое IVR и удаление записи из базы
Для правильного вопроса надо знать половину ответа
Сделать несложно, есть только пара маленьких нюансов.
Если звонить на сотовый телефон через аналоговую городскую линию и у абонента включена музыка вместо гудков, то сбивается анализ состояния звонка (callprogress в dahdi), соответственно Asterisk считает, что ему уже ответили, хотя абонент трубку и не поднял. Соответственно, в таком случае проще заносить в базу все звонки и предлагать абоненту переключиться на последнего, с кем он говорил.
Если звонить на короткий номер сотового телефона, то в обратном звонке будет полный сотовый номер. Надо либо делать таблицу соответствий, либо решать на организационном уровне.