Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
configure_freepbx_for_cloud_version [2022/10/04 14:37] Евгений Романенко |
configure_freepbx_for_cloud_version [2023/10/31 12:26] (текущий) Denis Babak |
||
---|---|---|---|
Строка 28: | Строка 28: | ||
END $$ | END $$ | ||
DELIMITER ; | DELIMITER ; | ||
- | </code> При успешном выполнении запросов все должно выглядеть примерно вот так: {{https://img.vistep.ru/i/db8d2543734bb135bdf8c97348a6.png}} {{https://img.vistep.ru/i/3e7f9092a8223081d718eeff6453.png}} | + | </code> При успешном выполнении запросов все должно выглядеть примерно вот так: {{https://img.fetg.uz/i/db8d2543734bb135bdf8c97348a6.png}} {{https://img.fetg.uz/i/3e7f9092a8223081d718eeff6453.png}} |
- | - Совершим вызов и проверим, что поле filename заполняется {{https://img.vistep.ru/i/e2659473414c0af4ae19163751fd.png}} | + | - Совершим вызов и проверим, что поле filename заполняется {{https://fetg.uz/i/e2659473414c0af4ae19163751fd.png}} |
- Теперь нам необходимо добавить два новых поля в таблицу cdr - realdst и realsrc, в которые будут записываться номера звонящего и назначения (например, не номер оператора очереди, а наш городской номер, на который пришел вызов извне для realdst или не номер транка, а номер внутреннего абонента для realsrc). \\ Для этого выполним sql-запросы <code sql>ALTER TABLE `cdr` ADD `realsrc` VARCHAR(80) NOT NULL DEFAULT ''; | - Теперь нам необходимо добавить два новых поля в таблицу cdr - realdst и realsrc, в которые будут записываться номера звонящего и назначения (например, не номер оператора очереди, а наш городской номер, на который пришел вызов извне для realdst или не номер транка, а номер внутреннего абонента для realsrc). \\ Для этого выполним sql-запросы <code sql>ALTER TABLE `cdr` ADD `realsrc` VARCHAR(80) NOT NULL DEFAULT ''; | ||
ALTER TABLE `cdr` ADD `realdst` VARCHAR(80) NOT NULL DEFAULT ''; | ALTER TABLE `cdr` ADD `realdst` VARCHAR(80) NOT NULL DEFAULT ''; | ||
UPDATE cdr SET realsrc=src; | UPDATE cdr SET realsrc=src; | ||
UPDATE cdr SET realdst=dst;</code> | UPDATE cdr SET realdst=dst;</code> | ||
- | - Пришло время последнего, но отнюдь не маловажного шага в разрезе конфигурирования таблицы cdr - научим АТС записывать данные во вновь созданные поля. \\ \\ Отредактируйте /etc/asterisk/extensions_override_freepbx.conf, внеся в него <code>[sub-record-check] | + | - Пришло время последнего, но отнюдь не маловажного шага в разрезе конфигурирования таблицы cdr - научим АТС записывать данные во вновь созданные поля. \\ \\ Отредактируйте /etc/asterisk/extensions_override_freepbx.conf, внеся в него <code>[ext-did-catchall] |
+ | include => ext-did-catchall-custom | ||
+ | exten => _.,1,Noop(Catch-All DID Match - Found ${EXTEN} - You probably want a DID for this.) | ||
+ | exten => _.,n,Set(__FROM_DID=${EXTEN}) | ||
+ | exten => _.,n,Set(_FETGUZREALDST=${FROM_DID}) | ||
+ | exten => _.,n,Set(_FETGUZREALSRC=${CALLERID(num)}) | ||
+ | exten => _.,n,Set(CDR(realsrc)=${FETGUZREALSRC}) | ||
+ | exten => _.,n,Set(CDR(realdst)=${FETGUZREALDST}) | ||
+ | exten => _.,n,Goto(ext-did,s,1) | ||
+ | |||
+ | |||
+ | [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) | ||
Строка 74: | Строка 85: | ||
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(${FETGUZREALDST})}]?NoOP():Set(CDR(realdst)=${ARG3})) |
- | exten => recordcheck,n,ExecIF($[${LEN(${VISTEPRUREALSRC})}]?NoOP():Set(CDR(realsrc)=${FROMEXTEN})) | + | exten => recordcheck,n,ExecIF($[${LEN(${FETGUZREALSRC})}]?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,Gosub(sub-check_recordfiles,s,1(${ARG2})) | ||
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}) | ||
exten => recordcheck,n,Set(__MIXMON_ID=${LOCAL_MIXMON_ID}) | exten => recordcheck,n,Set(__MIXMON_ID=${LOCAL_MIXMON_ID}) | ||
Строка 105: | Строка 117: | ||
exten => in,n,Set(FROMEXTEN=unknown) | exten => in,n,Set(FROMEXTEN=unknown) | ||
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,Set(_VISTEPRUREALDST=${ARG2}) | + | exten => in,n,Set(_FETGUZREALDST=${ARG2}) |
- | exten => in,n,Set(_VISTEPRUREALSRC=${FROMEXTEN}) | + | exten => in,n,Set(_FETGUZREALSRC=${FROMEXTEN}) |
- | exten => in,n,Set(CDR(realsrc)=${VISTEPRUREALSRC}) | + | exten => in,n,Set(CDR(realsrc)=${FETGUZREALSRC}) |
- | exten => in,n,Set(CDR(realdst)=${VISTEPRUREALDST}) | + | exten => in,n,Set(CDR(realdst)=${FETGUZREALDST}) |
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($[${LEN(${VISTEPRUREALDST})}]?NoOP():Set(CDR(realdst)=${ARG2})) | + | exten => exten,n,ExecIF($[${LEN(${FETGUZREALDST})}]?NoOP():Set(CDR(realdst)=${ARG2})) |
- | exten => exten,n,ExecIF($[${LEN(${VISTEPRUREALSRC})}]?NoOP():Set(CDR(realsrc)=${FROMEXTEN})) | + | exten => exten,n,ExecIF($[${LEN(${FETGUZREALSRC})}]?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)}) | ||
Строка 167: | Строка 179: | ||
exten => parking,n,ExecIf($[!${LEN(${RECMODE})}]?Set(RECMODE=dontcare)) | exten => parking,n,ExecIf($[!${LEN(${RECMODE})}]?Set(RECMODE=dontcare)) | ||
exten => parking,n,Gosub(recordcheck,1(${RECMODE},parked,${USER})) | exten => parking,n,Gosub(recordcheck,1(${RECMODE},parked,${USER})) | ||
- | exten => parking,n,Return() | + | exten => parking,n,Return()</code> \\ после чего выполните команду <code>dialplan reload</code> в консоли Asterisk \\ **Код проверен на FreePBX 13.0.191.11 и 14.0.2.10** \\ Если мажорная (13 в данном примере) версия FreePBX у вас отличается, то контекст [sub-record-check] может быть немного другим. Напишите нам на <support@fetg.uz> и мы поможем с написанием диалплана данного контекста. |
- | + | ||
- | ;--== end of [sub-record-check] ==--;</code> \\ после чего выполните команду <code>dialplan reload</code> в консоли Asterisk \\ **Код проверен на FreePBX 13.0.191.11 и 14.0.2.10** \\ Если мажорная (13 в данном примере) версия FreePBX у вас отличается, то контекст [sub-record-check] может быть немного другим. Напишите нам на <support@fetg.uz> и мы поможем с написанием диалплана данного контекста. | + | |
- С 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, | ||
Строка 185: | Строка 195: | ||
) 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://img.vistep.ru/i/5347bc8b8a5a1f66dd9c87a7c980.png}} *не забываем про Save и Apply Configs \\ После выполнения данных действий и совершения звонков в очереди, запрос из консоли mysql <code sql>select * from queue_log;</code> должен вернуть вам нечто подобное {{https://img.vistep.ru/i/7d2a89142a30ddd7ea0c36e2443b.png}} *на запрос в скрине не ориентируйтесь, там я специально добавил условие, чтобы сократить выхлоп | + | queue_log => odbc,asteriskcdrdb</code> Скрин: {{https://img.fetg.uz/i/5347bc8b8a5a1f66dd9c87a7c980.png}} *не забываем про Save и Apply Configs \\ После выполнения данных действий и совершения звонков в очереди, запрос из консоли mysql <code sql>select * from queue_log;</code> должен вернуть вам нечто подобное {{https://img.fetg.uz/i/7d2a89142a30ddd7ea0c36e2443b.png}} *на запрос в скрине не ориентируйтесь, там я специально добавил условие, чтобы сократить выхлоп |
- С препарированием нашей АТС по части БД закончили! \\ Переходим к настройке синхронизации БД и файлов записей разговоров в облако FETG.UZ. Для этого воспользуйтесь инструкцией - https://wiki.fetg.uz/doku.php?id=cloud_daemon_sync | - С препарированием нашей АТС по части БД закончили! \\ Переходим к настройке синхронизации БД и файлов записей разговоров в облако FETG.UZ. Для этого воспользуйтесь инструкцией - https://wiki.fetg.uz/doku.php?id=cloud_daemon_sync | ||
- Для входа в систему статистики используйте данные авторизации (Email-адрес/Пароль) из регистрационного письма. | - Для входа в систему статистики используйте данные авторизации (Email-адрес/Пароль) из регистрационного письма. | ||
На этом все настройки завершены. \\ Если вы все сделали правильно, то через какое-то время (зависит от размера БД) сможете воспользоваться всеми отчетами системы статистики FETG.UZ в своем личном кабинете. \\ Повторюсь, если у вас остались вопросы и/или есть предложения/замечания, пишите нам на <support@fetg.uz>. | На этом все настройки завершены. \\ Если вы все сделали правильно, то через какое-то время (зависит от размера БД) сможете воспользоваться всеми отчетами системы статистики FETG.UZ в своем личном кабинете. \\ Повторюсь, если у вас остались вопросы и/или есть предложения/замечания, пишите нам на <support@fetg.uz>. |