Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
configure_freepbx_for_cloud_version [2020/11/18 09:44] Евгений Романенко |
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) \\ - ясная голова и хорошее настроение ;-) | ||
Строка 34: | Строка 34: | ||
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(_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) | ||
+ | |||
+ | [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) | ||
Строка 91: | Строка 101: | ||
exten => out,n,Set(CDR(realsrc)=${FROMEXTEN}) | exten => out,n,Set(CDR(realsrc)=${FROMEXTEN}) | ||
exten => out,n,Set(CDR(realdst)=${ARG2}) | 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)) | ||
Строка 101: | Строка 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,Set(_VISTEPRUREALDST=${ARG2}) | + | exten => in,n,ExecIf($[${LEN(${VISTEPRUREALDST})}]?NoOp("=== VISTEPRUREALDST has already been set ==="):Set(_VISTEPRUREALDST=${ARG2})) |
- | exten => in,n,Set(_VISTEPRUREALSRC=${FROMEXTEN}) | + | 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(realsrc)=${VISTEPRUREALSRC}) | ||
exten => in,n,Set(CDR(realdst)=${VISTEPRUREALDST}) | exten => in,n,Set(CDR(realdst)=${VISTEPRUREALDST}) | ||
Строка 166: | Строка 180: | ||
exten => parking,n,Return() | exten => parking,n,Return() | ||
- | ;--== 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@vistep.ru> и мы поможем с написанием диалплана данного контекста. | + | ;--== end of [sub-record-check] ==--;</code> \\ после чего выполните команду <code>dialplan reload</code> в консоли Asterisk \\ **Код проверен на FreePBX 13.0.191.11, 14.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, |