VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Elastix+FreePBX+Asterisk Звонок своему оператору

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Dangerous13
Сообщения: 13
Зарегистрирован: 15 дек 2015, 10:53

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение Dangerous13 »

Всем спасибо за моральную поддержку. Вышел из положения с модулем Dialplan Injection и обычным скриптом на BASHe с обращением в БД с записями CDR.
whoim
Сообщения: 766
Зарегистрирован: 26 ноя 2013, 23:25
Откуда: Краснодар
Контактная информация:

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение whoim »

Ну вот, несмотря на десять готовых решений, кто нить обязательно найдет одиннадцатое :D
облачные и локальные сервера asterisk/freepbx/a2billing/crm с полной техподдержкой. skype: whoim2, sipuri: whoim@asterisk.ru
whoim
Сообщения: 766
Зарегистрирован: 26 ноя 2013, 23:25
Откуда: Краснодар
Контактная информация:

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение whoim »

В продолжении темы про гуи/не гуи.
Свежий заказ. Ряд смешанных фич. Заказчик "тоже умеет астериск, но некогда".
И " гуи не надо, не люблю, для лохов".
Значит, вдвое дороже. Ибо вдвое больше работы.
Подозреваю, обслуживать тоже будет вдвое дороже.
Скопипастить одной кнопочкой транк уже не выйдет )
облачные и локальные сервера asterisk/freepbx/a2billing/crm с полной техподдержкой. skype: whoim2, sipuri: whoim@asterisk.ru
Dangerous13
Сообщения: 13
Зарегистрирован: 15 дек 2015, 10:53

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение Dangerous13 »

whoim кому что удобно. Для меня, как совершенно не имеющему отношения к астериску человеку, проще конечно "дружеский интерфейс", т.к. изучать астериск небыло времени. Руководство как обычно хочет чтобы всё было как они хотят и чтобы на это не тратится. Я взялся за астериск чисто из любопытства и получения дополнительного опыта :idea:
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение gosha »

whoim писал(а):В продолжении темы про гуи/не гуи.
...
Скопипастить одной кнопочкой транк уже не выйдет )
копипаста в гуе... быстрее... хахаха.
whoim
Сообщения: 766
Зарегистрирован: 26 ноя 2013, 23:25
Откуда: Краснодар
Контактная информация:

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение whoim »

На самом деле быстрее: duplicate trunk.
Потом переход на новый транк. Итого два клика мышью.
облачные и локальные сервера asterisk/freepbx/a2billing/crm с полной техподдержкой. skype: whoim2, sipuri: whoim@asterisk.ru
whoim
Сообщения: 766
Зарегистрирован: 26 ноя 2013, 23:25
Откуда: Краснодар
Контактная информация:

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение whoim »

Dangerous13 писал(а):Для меня, как совершенно не имеющему отношения к астериску человеку
Гуи хорош только тогда, когда умеешь не-гуи тоже.
облачные и локальные сервера asterisk/freepbx/a2billing/crm с полной техподдержкой. skype: whoim2, sipuri: whoim@asterisk.ru
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение SolarW »

whoim писал(а):Гуи хорош только тогда, когда умеешь не-гуи тоже.
+1
Но поправил бы на "... когда понимаешь что происходит"
По факту - сам начал в свое время изучение темы с AMP (предшественник FreePBX), Trixbox, Elastix, теперь вот FreePBX Distro (с PBX in a Flash или как там его не срослось почему-то).
Постепенно разобрался в принципах построения и взаимосвязи конфигурационных файлов этих систем (практически сразу пришлось разбираться с extensions_custom.conf чтобы приводить CallerID к единому формату)
Соответственно стараюсь по максимуму использовать плюшки заложенные авторами FreePBX.
Если чего-то не хватает - то файлы extensions_custom.conf, extensions_override_freepbx.conf и -custom контексты всегда выручают.
Dangerous13
Сообщения: 13
Зарегистрирован: 15 дек 2015, 10:53

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение Dangerous13 »

Может кому-то, типа меня, пригодится как реализовать звонок на "своего" оператора. Пишу это не для гуру Астреиска, а для новичков.

Для реализации необходим модуль SmartRoutes и собственно база MySQL в которой хранятся номера абонентов(звонящих) и операторов.

За основу взял таблицу CDR с записями разговоров. Сделал вьюшку которая вытаскивает из таблицы CDR номер звонящего(src), номер ответившего(dst) и на всякий случай номер на который поступил звонок(did). Вьюшка выбирает звонки за последние 3 дня поступившие на очередь.

Код: Выделить всё

CREATE VIEW lastcalls AS 
SELECT src,SUBSTRING(dstchannel,5,3) dst, did 
FROM cdr 
WHERE lastapp='Queue' AND 
UNIX_TIMESTAMP(calldate) >= UNIX_TIMESTAMP(DATE_ADD(NOW(), INTERVAL -3 DAY))  AND 
dstchannel !='' ORDER BY calldate DESC ;
Теперь нужно добавить запись в модуль SmartRoutes:

в поле Main Query добавляем:
Table: lastcalls (Таблица из базы)
Search Column: src (По какому полю искать)
Look For: Caller ID (Условие поиска)
Return Column: dst (Что возвращать)

Match Type выставляем EXACT (точное соответсвие)

В Match Value ставим условия, что будет происходить в том или ином случае.

Match Value: 950 (Если запрос выдаст номер оператора 950)
Override Primary: <пусто>
Destination: Если условие соответсвует, звонок на номер 950
Failover: Если условие не соответсвует, звонок на очередь

Default Destination - куда по умолчанию должен прийти звонок.

В Database Settings прописываем реквизиты доступа к MySQL

Единсвеное в модуле есть глюк, или это просто у меня так, нет кнопки сохранить. Для сохранения просто в любом поле для ввода ставим курсор и нажимаем ENTER.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Скриншот примера
Изображение
На этом всё.

Большая благодарность whoim за подсказку про данный модуль.

В итоге в файле с конфигом появляется вот такая запись:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
[smartroute-1]
include => smartroute-1-custom
exten => i,1,Noop(Smartroute invalid DID handler - FIX EXTENSION VAR)
exten => i,n,Set(FIX_EXTEN=${INVALID_EXTEN})
exten => i,n,Set(TMP=0)
exten => i,n,Set(ANS=)
exten => i,n,Set(END=${LEN(${FIX_EXTEN})})
exten => i,n(clean_ext_loop_top),GotoIf($["${TMP}" = "${END}"]?clean_ext_done)
exten => i,n,Set(TCH=${FIX_EXTEN:${TMP}:1})
exten => i,n,GotoIf($["${TCH}" < "0"]?clean_ext_ignore_char)
exten => i,n,GotoIf($["${TCH}" > "9"]?clean_ext_ignore_char)
exten => i,n,Set(ANS=${ANS}${TCH})
exten => i,n(clean_ext_ignore_char),Set(TMP=$[${TMP}+1])
exten => i,n,Goto(clean_ext_loop_top)
exten => i,n(clean_ext_done),Set(FIX_EXTEN=${ANS})
exten => i,n,Goto(smartroute-1,${FIX_EXTEN},1)

exten => s,1,Noop(Smartroute passed generic extension s handler - FIX EXTENSION VAR)
exten => s,n,GotoIf($["${CATCHALL_DID}" != "s" & "${CATCHALL_DID}empty" != "empty"]?smartroute-1,${CATCHALL_DID},1)
exten => s,n,GotoIf($["${FROM_DID}" != "s" & "${FROM_DID}empty" != "empty"]?smartroute-1,${FROM_DID},1)
exten => s,n,Goto(smartroute-1,${CALLERID(dnid)},1)

exten => _X.,1,Noop(Smartroute: Start Standard Processing - DB Routing)
exten => _X.,n,ExecIf($[ "${FROM_DID}" = "" | "${FROM_DID}" = "s"] ?Set(__FROM_DID=${EXTEN}))
exten => _X.,n,ExecIf($[ "${FROM_DID}" = "" | "${FROM_DID}" = "s"] ?Set(__FROM_DID=${CATCHALL_DID}))
exten => _X.,n,ExecIf($[ "${FROM_DID}" = "" | "${FROM_DID}" = "s"] ?Set(__FROM_DID=${CALLERID(dnid)}))
exten => _X.,n,ExecIf($[ "${FROM_DID}" = "" ] ?Set(__FROM_DID=${EXTEN}))
exten => _X.,n,ExecIf($[ "${CALLERID(name)}" = "" ] ?Set(CALLERID(name)=${CALLERID(num)}))
exten => _X.,n,Set(__CALLINGPRES_SV=${CALLERPRES()})
exten => _X.,n,Set(CALLERPRES()=allowed_not_screened)
exten => _X.,n,Set(FAX_DEST=)
exten => _X.,n,Noop(Smartroute: test)
exten => _X.,n,MYSQL(Connect connid localhost asteriskuser PASSWORD asteriskcdrdb)
exten => _X.,n,MYSQL(Query resultid ${connid} SELECT dst FROM lastcalls WHERE src = '${CALLERID(num)}')
exten => _X.,n,MYSQL(Fetch fetchid ${resultid} DBRESULT)
exten => _X.,n,MYSQL(Clear ${resultid})
exten => _X.,n,MYSQL(Disconnect ${connid})
exten => _X.,n,ExecIf($[${fetchid} = 0]?Set(DBRESULT=))
exten => _X.,n,GotoIf($[${fetchid} = 0]?no_match_found)
exten => _X.,n,GotoIf($["${DBRESULT}" = "950"]?destination0)
exten => _X.,n,GotoIf($["${DBRESULT}" = "953"]?destination1)
exten => _X.,n(no_match_found),Noop(No Smartroute Match: Goto Default Destination)
exten => _X.,n,Goto(ext-queues,123,1)
exten => _X.,n,Hangup
exten => _X.,n(destination0),Set(SR_PRIMARY_DEST=from-did-direct^950^1)
exten => _X.,n,Set(SR_FAILOVER_DEST=ext-queues^123^1)
exten => _X.,n,Set(SR_OR_EXTVAR=)
exten => _X.,n,Set(SR_MACRO=)
exten => _X.,n,Set(SR_MACRO_TRUNK=)
exten => _X.,n,Goto(process_match_found)
exten => _X.,n(destination1),Set(SR_PRIMARY_DEST=from-did-direct^953^1)
exten => _X.,n,Set(SR_FAILOVER_DEST=ext-queues^123^1)
exten => _X.,n,Set(SR_OR_EXTVAR=)
exten => _X.,n,Set(SR_MACRO=)
exten => _X.,n,Set(SR_MACRO_TRUNK=)
exten => _X.,n,Goto(process_match_found)
exten => _X.,n,Noop(Smartroute Error - should never get here.)
exten => _X.,n,Hangup
exten => _X.,n(process_match_found),Noop(Process Match Found)
exten => _X.,n,GotoIf($["${SR_MACRO}empty" != "empty"]?process_macrotrunk)
exten => _X.,n,Goto(${CUT(SR_PRIMARY_DEST,^,1)},${CUT(SR_PRIMARY_DEST,^,2)},${CUT(SR_PRIMARY_DEST,^,3)})
exten => _X.,n,Goto(${CUT(SR_FAILOVER_DEST,^,1)},${CUT(SR_FAILOVER_DEST,^,2)},${CUT(SR_FAILOVER_DEST,^,3)})
exten => _X.,n,Hangup
exten => _X.,n(process_macrotrunk),Noop(Process Trunk Destination with Failover)
exten => _X.,n,Set(INTRACOMPANYROUTE=YES)
exten => _X.,n,Set(KEEPCID=TRUE)
exten => _X.,n,Set(OUTDISABLE_${SR_MACRO_TRUNK}=off)
exten => _X.,n,Set(SAVECID=${CALLERID(number)})
exten => _X.,n,ExecIf($["${SR_OR_EXTVAR}empty" = "empty"]?Set(SR_OR_EXTVAR=${FROM_DID}))
exten => _X.,n,Macro(dialout-trunk,${SR_MACRO_TRUNK},${SR_OR_EXTVAR},)
exten => _X.,n,Set(CALLERID(number)=${SAVECID})
exten => _X.,n,Goto(${CUT(SR_FAILOVER_DEST,^,1)},${CUT(SR_FAILOVER_DEST,^,2)},${CUT(SR_FAILOVER_DEST,^,3)})
exten => _X.,n,Hangup

exten => h,1,Macro(hangupcall,)

;--== end of [smartroute-1] ==--;
whoim
Сообщения: 766
Зарегистрирован: 26 ноя 2013, 23:25
Откуда: Краснодар
Контактная информация:

Re: Elastix+FreePBX+Asterisk Звонок своему оператору

Сообщение whoim »

Там в смартроутез 1.3 (вроде) был глюк с отображением, потерян закрывающий div в page.php. если не докопаетесь, пните в личку, выложу тут.

Ну и я вьюшку не стал делать, мне проще было запросом сразу в модуле.
облачные и локальные сервера asterisk/freepbx/a2billing/crm с полной техподдержкой. skype: whoim2, sipuri: whoim@asterisk.ru
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH