Инструменты пользователя

Инструменты сайта


configure_freepbx_for_cloud_version

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
configure_freepbx_for_cloud_version [2018/07/27 10:53]
Евгений Романенко
configure_freepbx_for_cloud_version [2023/02/16 13:47] (текущий)
Евгений Романенко
Строка 2: Строка 2:
  
 ==== Вводная ==== ==== Вводная ====
-  * Данная инструкция написана используя FreePBX версии 13.0.191.11 с Asterisk 13.14.0 на борту. \\ При возникновении каких-либо сложностей/​вопросов с более ранними/​поздними версиями системы,​ просьба написать нам на <​support@vistep.ru>​.+  * Данная инструкция написанаиспользуя FreePBX версии 13.0.191.11 с Asterisk 13.14.0 на борту. \\ При возникновении каких-либо сложностей/​вопросов с более ранними/​поздними версиями системы,​ просьба написать нам на <​support@vistep.ru>​.
   * Для выполнения описанных ниже действий понадобится:​ \\ - умение подключиться к серверу по ssh \\ - умение редактировать файлы в текстовом редакторе (nano/​vim/​emacs/​etc) \\ - ясная голова и хорошее настроение ;-)   * Для выполнения описанных ниже действий понадобится:​ \\ - умение подключиться к серверу по ssh \\ - умение редактировать файлы в текстовом редакторе (nano/​vim/​emacs/​etc) \\ - ясная голова и хорошее настроение ;-)
  
Строка 28: Строка 28:
 END $$ END $$
 DELIMITER ; DELIMITER ;
- </​code>​ При успешном выполнении запросов все должно выглядеть примерно вот так: {{https://i.your-admin.pro/​i/​db8d2543734bb135bdf8c97348a6.png}} {{https://i.your-admin.pro/​i/​3e7f9092a8223081d718eeff6453.png}} + </​code>​ При успешном выполнении запросов все должно выглядеть примерно вот так: {{https://img.vistep.ru/​i/​db8d2543734bb135bdf8c97348a6.png}} {{https://img.vistep.ru/​i/​3e7f9092a8223081d718eeff6453.png}} 
-  - Совершим вызов и проверим,​ что поле filename заполняется {{https://i.your-admin.pro/​i/​e2659473414c0af4ae19163751fd.png}} +  - Совершим вызов и проверим,​ что поле filename заполняется {{https://img.vistep.ru/​i/​e2659473414c0af4ae19163751fd.png}} 
-  - Теперь нам необходимо ​изменить ​логику заполнения полей dst и src в таблице cdr так, чтобы в них всегда попадали ​те номерана которые/с которых поступил вызов (например,​ не номер оператора очереди,​ а наш городской номер, на который пришел вызов извне для ​dst или не номер транка,​ а номер внутреннего абонента для ​src). \\ Для этого ​отредактируем файл cdr_adaptive_odbc.conf (FreePBX не перетрет его после рестарта,​ поэтому можно смело его редактировать), добавив в самом низу строку ​<​code ​bash>alias realdst ​=> dst +  - Теперь нам необходимо ​добавить ​два новых ​поля в таблицу cdr - realdst и realsrc, в которые будут записываться ​номера ​звонящего и назначения ​(например,​ не номер оператора очереди,​ а наш городской номер, на который пришел вызов извне для ​realdst ​или не номер транка,​ а номер внутреннего абонента для ​realsrc). \\ Для этого ​выполним sql-запросы <​code ​sql>ALTER TABLE `cdr` ADD `realsrc` VARCHAR(80) NOT NULL DEFAULT '';​ 
-alias realsrc =src</​code>​ В итоге он примет вид: {{https://​i.your-admin.pro/​i/​23eeef966abc49cb214bd5795912.png}} +ALTER TABLE `cdr` ADD `realdst` VARCHAR(80) NOT NULL DEFAULT '';​ 
-  - Дабы наши действия возымели силу, модулю cdr_adaptive_mysql.so нужно подсказать,​ что его конфиг изменился. Подключаемся к консоли asterisk и релоадим модуль вот так: <code bash>​[root@localhost asterisk]# asterisk -r +UPDATE cdr SET realsrc=src; 
-localhost*CLI>​ module reload cdr_adaptive_odbc.so +UPDATE cdr SET realdst=dst;​</​code>​ 
-Module '​cdr_adaptive_odbc.so'​ reloaded successfully. +  - Пришло время последнего,​ но отнюдь не маловажного шага в разрезе конфигурирования таблицы cdr - научим АТС записывать данные во вновь созданные поля\\ \\ Отредактируйте /​etc/​asterisk/​extensions_override_freepbx.confвнеся в него <​code>​[ext-did-catchall] 
-localhost*CLI>  ​</​code>​ +include => ext-did-catchall-custom 
-  - Пришло время последнего,​ но отнюдь не маловажного шага в разрезе конфигурирования таблицы cdr. \\ Есть два варианта (первый может работать не везде, но он проще) внесения нужных ​данных в поля ​src и dst: \\ \\ **Первый.** \\ В web-интерфейсе FreePBX отправимся по пути "​Admin->​ Config Edit", где в extensions_custom.conf внесем: <​code ​bash>[from-internal+exten => _.,1,Noop(Catch-All DID Match - Found ${EXTEN} - You probably want a DID for this.) 
-exten => _X.,1,GoSub(set_right_src_dst_from-internal,start,1(${EXTEN},​${CALLERID(num)}))+exten => _.,n,Set(__FROM_DID=${EXTEN}
 +exten => _.,n,​Set(_VISTEPRUREALDST=${FROM_DID}) 
 +exten => _.,​n,​Set(_VISTEPRUREALSRC=${CALLERID(num)}) 
 +exten => _.,​n,​Set(CDR(realsrc)=${VISTEPRUREALSRC}) 
 +exten => _.,​n,​Set(CDR(realdst)=${VISTEPRUREALDST}) 
 +exten => _.,​n,​Goto(ext-did,​s,​1)
  
-[from-pstn-custom] +[sub-record-check]
-exten => _X.,​1,​GoSub(set_right_src_dst_from-pstn,​start,​1(${EXTEN},​${CALLERID(num)})) +
- +
-[set_right_src_dst_from-pstn] +
-exten => start,​1,​Set(__FROMPSTNCALL=1) +
- same => n,​Set(CDR(realdst)=${ARG1}) +
- same => n,​Set(CDR(realsrc)=${ARG2}) +
- same => n,​Return() +
- +
-[set_right_src_dst_from-internal] +
-exten => start,​1,​ExecIF(${FROMPSTNCALL}?​Set(CDR_PROP(disable)=true):​Set(CDR(realdst)=${ARG1})) +
- same => n,​Set(CDR(realsrc)=${ARG2}) +
- same => n,​Return() +
-  +
-</​code>​ А вот и скрин, для наглядности {{:​screen_shot_2017-09-14_at_09.34.12.png|}} ​ В завершении кликнем Save, затем Apply Config, позвоним на АТС, с АТС вовне и проверим корректность заполнения полей dst и src. \\ \\ **Второй.** \\ Скопируйте содержимое диалплана из /​etc/​asterisk/​extensions_additional.conf со строки <​code>​[sub-record-check]</​code>​ до строки <​code>;​--== end of [sub-record-check] ==--;</​code>​ включительно,​ вставьте скопированный код в /​etc/​asterisk/​extensions_override_freepbx.conf и отредактируйте,​ добавив установку полей realsrc (src) и realdst (dst), например,​ так: <​code>​[sub-record-check]+
 include => sub-record-check-custom include => sub-record-check-custom
 exten => s,​1,​GotoIf($[${LEN(${FROMEXTEN})}]?​initialized) exten => s,​1,​GotoIf($[${LEN(${FROMEXTEN})}]?​initialized)
Строка 93: Строка 84:
 exten => recordcheck,​n(startrec),​Noop(Starting recording: ${ARG2}, ${ARG3}) exten => recordcheck,​n(startrec),​Noop(Starting recording: ${ARG2}, ${ARG3})
 exten => recordcheck,​n,​Set(AUDIOHOOK_INHERIT(MixMonitor)=yes) exten => recordcheck,​n,​Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
 +exten => recordcheck,​n,​ExecIF($[${LEN(${VISTEPRUREALDST})}]?​NoOP():​Set(CDR(realdst)=${ARG3}))
 +exten => recordcheck,​n,​ExecIF($[${LEN(${VISTEPRUREALSRC})}]?​NoOP():​Set(CDR(realsrc)=${FROMEXTEN}))
 exten => recordcheck,​n,​Set(__CALLFILENAME=${ARG2}-${ARG3}-${FROMEXTEN}-${TIMESTR}-${UNIQUEID}) exten => recordcheck,​n,​Set(__CALLFILENAME=${ARG2}-${ARG3}-${FROMEXTEN}-${TIMESTR}-${UNIQUEID})
 exten => recordcheck,​n,​MixMonitor(${MIXMON_DIR}${YEAR}/​${MONTH}/​${DAY}/​${CALLFILENAME}.${MON_FMT},​abi(LOCAL_MIXMON_ID)${MIXMON_BEEP},​${MIXMON_POST}) exten => recordcheck,​n,​MixMonitor(${MIXMON_DIR}${YEAR}/​${MONTH}/​${DAY}/​${CALLFILENAME}.${MON_FMT},​abi(LOCAL_MIXMON_ID)${MIXMON_BEEP},​${MIXMON_POST})
Строка 106: Строка 99:
  
 exten => out,​1,​Noop(Outbound Recording Check from ${FROMEXTEN} to ${ARG2}) exten => out,​1,​Noop(Outbound Recording Check from ${FROMEXTEN} to ${ARG2})
 +exten => out,​n,​Set(CDR(realsrc)=${FROMEXTEN})
 +exten => out,​n,​Set(CDR(realdst)=${ARG2})
 +exten => out,​n,​Set(CUTTEDCHANNEL=${CUT(CHANNEL,,​1)})
 +exten => out,​n,​Set(CUTTEDCHANNEL=${CUT(CUTTEDCHANNEL,/,​2)})
 +exten => out,​n,​ExecIf($["​${FROMEXTEN}"​ = "​${ARG2}"​]?​Set(CDR(realsrc)=${CUTTEDCHANNEL}))
 exten => out,​n,​Set(RECMODE=${DB(AMPUSER/​${FROMEXTEN}/​recording/​out/​external)}) exten => out,​n,​Set(RECMODE=${DB(AMPUSER/​${FROMEXTEN}/​recording/​out/​external)})
 exten => out,​n,​ExecIf($[!${LEN(${RECMODE})} | "​${RECMODE}"​ = "​dontcare"​]?​Goto(routewins)) exten => out,​n,​ExecIf($[!${LEN(${RECMODE})} | "​${RECMODE}"​ = "​dontcare"​]?​Goto(routewins))
Строка 116: Строка 114:
 exten => in,​1,​Noop(Inbound Recording Check to ${ARG2}) exten => in,​1,​Noop(Inbound Recording Check to ${ARG2})
 exten => in,​n,​Set(FROMEXTEN=unknown) exten => in,​n,​Set(FROMEXTEN=unknown)
 +exten => in,​n,​ExecIf($[${LEN(${FROM_DID})}]?​Set(_VISTEPRUREALDST=${FROM_DID}))
 exten => in,​n,​ExecIf($[${LEN(${CALLERID(num)})}]?​Set(FROMEXTEN=${CALLERID(num)})) exten => in,​n,​ExecIf($[${LEN(${CALLERID(num)})}]?​Set(FROMEXTEN=${CALLERID(num)}))
 +exten => in,​n,​ExecIf($[${LEN(${VISTEPRUREALDST})}]?​NoOp("​=== VISTEPRUREALDST has already been set ==="​):​Set(_VISTEPRUREALDST=${ARG2}))
 +exten => in,​n,​ExecIf($[${LEN(${VISTEPRUREALSRC})}]?​NoOp("​=== VISTEPRUREALSRC has already been set ==="​):​Set(_VISTEPRUREALSRC=${FROMEXTEN}))
 +exten => in,​n,​Set(CDR(realsrc)=${VISTEPRUREALSRC})
 +exten => in,​n,​Set(CDR(realdst)=${VISTEPRUREALDST})
 exten => in,​n,​Gosub(recordcheck,​1(${ARG3},​in,​${ARG2})) exten => in,​n,​Gosub(recordcheck,​1(${ARG3},​in,​${ARG2}))
 exten => in,​n,​Return() exten => in,​n,​Return()
  
 exten => exten,​1,​Noop(Exten Recording Check between ${FROMEXTEN} and ${ARG2}) exten => exten,​1,​Noop(Exten Recording Check between ${FROMEXTEN} and ${ARG2})
-exten => exten,​n,​ExecIF(${FROMPSTNCALL}?Set(CDR_PROP(disable)=true):​Set(CDR(realdst)=${ARG2})) +exten => exten,​n,​ExecIF($[${LEN(${VISTEPRUREALDST})}]?NoOP():​Set(CDR(realdst)=${ARG2})) 
-exten => exten,​n,​Set(CDR(realsrc)=${FROMEXTEN})+exten => exten,n,ExecIF($[${LEN(${VISTEPRUREALSRC})}]?​NoOP():​Set(CDR(realsrc)=${FROMEXTEN}))
 exten => exten,​n,​Set(CDR(cnum)=${FROMEXTEN}) exten => exten,​n,​Set(CDR(cnum)=${FROMEXTEN})
 exten => exten,​n,​Set(CALLTYPE=${IF($[${LEN(${FROM_DID})}]?​external:​internal)}) exten => exten,​n,​Set(CALLTYPE=${IF($[${LEN(${FROM_DID})}]?​external:​internal)})
Строка 177: Строка 180:
 exten => parking,​n,​Return() exten => parking,​n,​Return()
  
-;--== end of [sub-record-check] ==--;</​code>​ \\ после чего выполните команду <​code>​core reload</​code>​ в консоли Asterisk ​<note important> ​**Не копируйте наш код, используйте тот, что находится в вашей FreePBX** \\ Если сомневайтесь **где именно** вам нужно вставить команды установки полей - напишите нам на <​support@vistep.ru>​. ​</​note>​+;--== end of [sub-record-check] ==--;</​code>​ \\ после чего выполните команду <​code>​dialplan ​reload</​code>​ в консоли Asterisk ​\\ **Код проверен на FreePBX 13.0.191.1114.0.2.10 ​и 15.0.23.25.** \\ Если мажорная (13 в данном примере) версия FreePBX ​ у вас ​отличается, то контекст [sub-record-check] ​может быть немного ​другим. Напишите нам на <​support@vistep.ru> ​и мы поможем с написанием диалплана данного контекста
   - С cdr разобрались,​ дело за queue_log. Эта таблица нужна нам для того, чтобы понимать какие события происходили в очередях Asterisk. Перво-наперво создадим ее <code sql>​CREATE TABLE `queue_log` (   - С cdr разобрались,​ дело за queue_log. Эта таблица нужна нам для того, чтобы понимать какие события происходили в очередях Asterisk. Перво-наперво создадим ее <code sql>​CREATE TABLE `queue_log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,​  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,​
Строка 193: Строка 196:
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;</​code>​ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;</​code>​
   - Научим FreePBX(читай Asterisk) писать туда все то, что нам нужно. \\ Отправляемся в web-интерфейс по знакомой дорожке и создаем новый файл под именем **extconfig.conf**,​ кликнув Add New File. \\ Внести в него нужно лишь одну строчку <code bash>​[settings]   - Научим FreePBX(читай Asterisk) писать туда все то, что нам нужно. \\ Отправляемся в web-интерфейс по знакомой дорожке и создаем новый файл под именем **extconfig.conf**,​ кликнув Add New File. \\ Внести в него нужно лишь одну строчку <code bash>​[settings]
-queue_log => odbc,​asteriskcdrdb</​code>​ Скрин: {{https://i.your-admin.pro/​i/​5347bc8b8a5a1f66dd9c87a7c980.png}} *не забываем про Save и Apply Configs \\ После выполнения данных действий и совершения звонков в очереди,​ запрос из консоли mysql <code sql>​select * from queue_log;</​code>​ должен вернуть вам нечто подобное {{https://i.your-admin.pro/​i/​7d2a89142a30ddd7ea0c36e2443b.png}} *на запрос в скрине не ориентируйтесь,​ там я специально добавил условие,​ чтобы сократить выхлоп+queue_log => odbc,​asteriskcdrdb</​code>​ Скрин: {{https://img.vistep.ru/​i/​5347bc8b8a5a1f66dd9c87a7c980.png}} *не забываем про Save и Apply Configs \\ После выполнения данных действий и совершения звонков в очереди,​ запрос из консоли mysql <code sql>​select * from queue_log;</​code>​ должен вернуть вам нечто подобное {{https://img.vistep.ru/​i/​7d2a89142a30ddd7ea0c36e2443b.png}} *на запрос в скрине не ориентируйтесь,​ там я специально добавил условие,​ чтобы сократить выхлоп
   - С препарированием нашей АТС по части БД закончили! \\ Переходим к настройке синхронизации БД и файлов записей разговоров в облако ViStep.RU. Для этого воспользуйтесь инструкцией - https://​wiki.vistep.ru/​doku.php?​id=cloud_daemon_sync ​   - С препарированием нашей АТС по части БД закончили! \\ Переходим к настройке синхронизации БД и файлов записей разговоров в облако ViStep.RU. Для этого воспользуйтесь инструкцией - https://​wiki.vistep.ru/​doku.php?​id=cloud_daemon_sync ​
-  - Для входа в систему статистики используйте данные авторизации (Email-адрес/​Пароль ​для авторизации) из регистрационного письма.+  - Для входа в систему статистики используйте данные авторизации (Email-адрес/​Пароль) из регистрационного письма.
  
-На этом все настройки завершены. \\ Если вы все сделали правильно,​ то через какое-то время (зависит от размера БД) сможете воспользоваться всеми отчетами системы статистики ViStep.RU в своем личном кабинете. \\ Повторюсь,​ если у вас остались вопросы и/или есть предложения/​замечания,​ пишите нам на <​support@vistep.ru>​. +На этом все настройки завершены. \\ Если вы все сделали правильно,​ то через какое-то время (зависит от размера БД) сможете воспользоваться всеми отчетами системы статистики ViStep.RU в своем личном кабинете. \\ Повторюсь,​ если у вас остались вопросы и/или есть предложения/​замечания,​ пишите нам на <​support@vistep.ru>​. ​
- +
configure_freepbx_for_cloud_version.1532663626.txt.gz · Последние изменения: 2018/07/27 10:53 — Евгений Романенко