Задать вопрос
  • FreePBX как настроить запись разговоров, исходящая маршрутизация?

    @Igor2208 Автор вопроса
    Спасибо за помощь, решил все путем через extensions_override_freepbx.conf :
    exten =>recordcheck,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT},abi(LOCAL_MIXMON_ID)${MIXMON_BEEP},${MIXMON_POST})
    Заменил abi на ai (просто удалил символ b)
    Результатом буыл:

    exten => recordcheck,n,MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT},ai(LOCAL_MIXMON_ID)${MIXMON_BEEP},${MIXMON_POST})

    2.)
    var\www\html\admin\modules\callrecording\functions.inc.php
    Find string

    $ext->add($context, $exten, ‘’, new ext_mixmonitor(’${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT}’,‘abi(LOCAL_MIXMON_ID)${MIXMON_BEEP}’,’${MIXMON_POST}’));

    Весь готовый контекст :
    [sub-record-check]
    include => sub-record-check-custom
    exten => s,1,GotoIf($[${LEN(${FROMEXTEN})}]?initialized)
    exten => s,n,Set(__REC_STATUS=INITIALIZED)
    exten => s,n,Set(NOW=${EPOCH})
    exten => s,n,Set(__DAY=${STRFTIME(${NOW},,%d)})
    exten => s,n,Set(__MONTH=${STRFTIME(${NOW},,%m)})
    exten => s,n,Set(__YEAR=${STRFTIME(${NOW},,%Y)})
    exten => s,n,Set(__TIMESTR=${YEAR}${MONTH}${DAY}-${STRFTIME(${NOW},,%H%M%S)})
    exten => s,n,Set(__FROMEXTEN=${IF($[${LEN(${AMPUSER})}]?${AMPUSER}:${IF($[${LEN(${REALCALLERIDNUM})}]?${REALCALLERIDNUM}:unknown)})})
    exten => s,n,Set(__MON_FMT=${IF($["${MIXMON_FORMAT}"="wav49"]?WAV:${MIXMON_FORMAT})})
    exten => s,n(initialized),Noop(Recordings initialized)
    exten => s,n,ExecIf($[!${LEN(${ARG3})}]?Set(ARG3=dontcare))
    exten => s,n,Set(REC_POLICY_MODE_SAVE=${REC_POLICY_MODE})
    exten => s,n,ExecIf($["${BLINDTRANSFER}${ATTENDEDTRANSFER}" != ""]?Set(REC_STATUS=NO))
    exten => s,n(next),GotoIf($[${LEN(${ARG1})}]?checkaction)
    exten => s,n(recorderror),Playback(something-terribly-wrong,error)
    exten => s,n,Hangup
    exten => s,n(checkaction),GotoIf($[${DIALPLAN_EXISTS(sub-record-check,${ARG1})}]?sub-record-check,${ARG1},1)
    exten => s,n,Noop(Generic ${ARG1} Recording Check - ${FROMEXTEN} ${ARG2})
    exten => s,n,Gosub(recordcheck,1(${ARG3},${ARG1},${ARG2}))
    exten => s,n,Return()

    exten => recordcheck,1,Noop(Starting recording check against ${ARG1})
    exten => recordcheck,n,Goto(${ARG1})
    exten => recordcheck,n(dontcare),Return()
    exten => recordcheck,n(always),Noop(Detected legacy "always" entry. Mapping to "force")
    exten => recordcheck,n(force),Set(__REC_POLICY_MODE=FORCE)
    exten => recordcheck,n,GotoIf($["${REC_STATUS}"!="RECORDING"]?startrec)
    exten => recordcheck,n,Return()
    exten => recordcheck,n(delayed),Noop(Detected legacy "delayed" entry. Mapping to "yes")
    exten => recordcheck,n(yes),ExecIf($["${REC_POLICY_MODE}" = "NEVER" | "${REC_POLICY_MODE}" = "NO" | "${REC_STATUS}" = "RECORDING"]?Return())
    exten => recordcheck,n,Set(__REC_POLICY_MODE=YES)
    exten => recordcheck,n,Goto(startrec)
    exten => recordcheck,n(no),Set(__REC_POLICY_MODE=NO)
    exten => recordcheck,n,Return()
    exten => recordcheck,n(never),Set(__REC_POLICY_MODE=NEVER)
    exten => recordcheck,n,Goto(stoprec)
    exten => recordcheck,n(startrec),Noop(Starting recording: ${ARG2}, ${ARG3})
    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,Set(__MIXMON_ID=${LOCAL_MIXMON_ID})
    exten => recordcheck,n,Set(__RECORD_ID=${CHANNEL(name)})
    exten => recordcheck,n,Set(__REC_STATUS=RECORDING)
    exten => recordcheck,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
    exten => recordcheck,n,Return()
    exten => recordcheck,n(stoprec),Noop(Stopping recording: ${ARG2}, ${ARG3})
    exten => recordcheck,n,Set(__REC_STATUS=STOPPED)
    exten => recordcheck,n,System(${AMPBIN}/stoprecording.php "${CHANNEL(name)}")
    exten => recordcheck,n,Return()
    exten => out,1,Noop(Outbound Recording Check from ${FROMEXTEN} to ${ARG2})
    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($["${ARG3}" = "never" | "${ARG3}" = "force"]?Goto(routewins))
    exten => out,n(extenwins),Gosub(recordcheck,1(${RECMODE},out,${ARG2}))
    exten => out,n,Return()
    exten => out,n(routewins),Gosub(recordcheck,1(${ARG3},out,${ARG2}))
    exten => out,n,Return()

    exten => in,1,Noop(Inbound Recording Check to ${ARG2})
    exten => in,n,Set(FROMEXTEN=unknown)
    exten => in,n,ExecIf($[${LEN(${CALLERID(num)})}]?Set(FROMEXTEN=${CALLERID(num)}))
    exten => in,n,Gosub(recordcheck,1(${ARG3},in,${ARG2}))
    exten => in,n,Return()

    exten => exten,1,Noop(Exten Recording Check between ${FROMEXTEN} and ${ARG2})
    exten => exten,n,Set(CALLTYPE=${IF($[${LEN(${FROM_DID})}]?external:internal)})
    exten => exten,n,ExecIf(${LEN(${CALLTYPE_OVERRIDE})}?Set(CALLTYPE=${CALLTYPE_OVERRIDE}))
    exten => exten,n,Set(CALLEE=${DB(AMPUSER/${ARG2}/recording/in/${CALLTYPE})})
    exten => exten,n,ExecIf($[!${LEN(${CALLEE})}]?Set(CALLEE=dontcare))
    exten => exten,n,GotoIf($["${CALLTYPE}"="external"]?callee)
    exten => exten,n,GotoIf($["${CALLEE}"="dontcare"]?caller)
    exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${FROMEXTEN}/recording/priority)})}]?Set(CALLER_PRI=${DB(AMPUSER/${FROMEXTEN}/recording/priority)}):Set(CALLER_PRI=0))
    exten => exten,n,ExecIf($[${LEN(${DB(AMPUSER/${ARG2}/recording/priority)})}]?Set(CALLEE_PRI=${DB(AMPUSER/${ARG2}/recording/priority)}):Set(CALLEE_PRI=0))
    exten => exten,n,GotoIf($["${CALLER_PRI}"="${CALLEE_PRI}"]?${REC_POLICY}:${IF($[${CALLER_PRI}>${CALLEE_PRI}]?caller:callee)})
    exten => exten,n(callee),Gosub(recordcheck,1(${CALLEE},${CALLTYPE},${ARG2}))
    exten => exten,n,Return()
    exten => exten,n(caller),Set(RECMODE=${DB(AMPUSER/${FROMEXTEN}/recording/out/internal)})
    exten => exten,n,ExecIf($[!${LEN(${RECMODE})}]?Set(RECMODE=dontcare))
    exten => exten,n,ExecIf($["${RECMODE}"="dontcare"]?Set(RECMODE=${CALLEE}))
    exten => exten,n,Gosub(recordcheck,1(${RECMODE},${CALLTYPE},${ARG2}))
    exten => exten,n,Return()
    exten => conf,1,Noop(Conference Recording Check ${FROMEXTEN} to ${ARG2})
    exten => conf,n,Gosub(recconf,1(${ARG2},${ARG2},${ARG3}))
    exten => conf,n,Return()

    exten => page,1,Noop(Paging Recording Check ${FROMEXTEN} to ${ARG2})
    exten => page,n,GosubIf($["${REC_POLICY_MODE}"="always"]?recconf,1(${ARG2},${FROMEXTEN},${ARG3}))
    exten => page,n,Return()

    exten => recconf,1,Noop(Setting up recording: ${ARG1}, ${ARG2}, ${ARG3})
    exten => recconf,n,Set(__CALLFILENAME=${IF($[${CONFBRIDGE_INFO(parties,${ARG2})}]?${DB(RECCONF/${ARG2})}:${ARG1}-${ARG2}-${ARG3}-${TIMESTR}-${UNIQUEID})})
    exten => recconf,n,ExecIf($[!${CONFBRIDGE_INFO(parties,${ARG2})}]?Set(DB(RECCONF/${ARG2})=${CALLFILENAME}))
    exten => recconf,n,Set(CONFBRIDGE(bridge,record_file)=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT})
    exten => recconf,n,ExecIf($["${ARG3}"!="always"]?Return())
    exten => recconf,n,Set(CONFBRIDGE(bridge,record_conference)=yes)
    exten => recconf,n,Set(__REC_STATUS=RECORDING)
    exten => recconf,n,Set(CDR(recordingfile)=${IF($[${CONFBRIDGE_INFO(parties,${ARG2})}]?${CALLFILENAME}.${MON_FMT}:${CALLFILENAME}.${MON_FMT})})
    exten => recconf,n,Noop(${MIXMONITOR_FILENAME})
    exten => recconf,n,Set(CHANNEL(hangup_handler_push)=sub-record-hh-check,s,1)
    exten => recconf,n,Return()

    exten => recq,1,Noop(Setting up recording: ${ARG1}, ${ARG2}, ${ARG3})
    exten => recq,n,Set(MONITOR_FILENAME=${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/${CALLFILENAME})
    exten => recq,n,MixMonitor(${MONITOR_FILENAME}.${MON_FMT},${MONITOR_OPTIONS}${MIXMON_BEEP},${MIXMON_POST})
    exten => recq,n,Set(__REC_STATUS=RECORDING)
    exten => recq,n,Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT})
    exten => recq,n,Return()

    exten => parking,1,Noop(User ${ARG2} picked up a parked call)
    exten => parking,n,Set(USER=${ARG2})
    exten => parking,n,ExecIf($[!${LEN(${ARG2})}]?Set(USER=unknown))
    exten => parking,n,Set(RECMODE=${DB(AMPUSER/${ARG2}/recording/out/internal)})
    exten => parking,n,ExecIf($[!${LEN(${RECMODE})}]?Set(RECMODE=dontcare))
    exten => parking,n,Gosub(recordcheck,1(${RECMODE},parked,${USER}))
    exten => parking,n,Return()

    ;--== end of [sub-record-check] ==--;
    Ответ написан
    Комментировать
  • Mikrotik Как разделить сеть на два сегмента без изменения IP адресов и без VLAN?

    p00h
    @p00h
    Фехтовальщик-стропальщик
    Если я верно понял текущую картину, то решение довольно простое: трафик между двумя сегментами сети, даже в одной логической подсети, должен проходить через устройство L3, и путь этот должен быть исключительно единственным.

    Есть коммутатор, в который подключены все клиенты - Switch1.
    Есть коммутатор, в который подключены все сервера - Switch2.

    Есть абстрактный микротик с двумя портами: Lan1, Lan2.

    Объединеяем порты Lan1 + Lan2 в Bridge1.
    На Bridge1 вешаем адрес 192.168.195.1.
    Switch1 => Lan1. Switch2 => Lan2.

    И все. Весь трафик между клиентами и серверами проходит через Bridge1. Любые правила для фильтрации и ограничений.
    Ответ написан
    Комментировать
  • Как решить проблему со скриптом?

    boyarskiy_mihail
    @boyarskiy_mihail
    Наверное потому что res.send(results[0]);
    results[0] - 1 элемент массива
    Ответ написан
    2 комментария
  • Как раздать по сети локальный USB сканер от МФУ?

    @Drno
    Все эти решения это "костыли" и стабильно они работать не будут. Если МФУ умеет сканить в папку - сделайте общую папку на ПК к которому МФУ подключен, и сканьте с него в эту папку, потом забирайте по сети.
    Либо купить норм сетевой МФУ
    Ответ написан
    Комментировать
  • Как превратить 46 линий интернета в 46 разных wi-fi?

    @VROOM Автор вопроса
    Да уж) В общем решил сделать по дедовскому способу и начну с малого, 20 роутеров. Вот скриншот от коллег:
    5c3b4ced91896105085806.jpeg И все замечательно работает.
    Ответ написан
    1 комментарий
  • Почему тормозят виртуалки на PROXMOX?

    opium
    @opium
    Просто люблю качественно работать
    Запустите топ иотоп и увидите в чем проблема
    Ответ написан
    3 комментария
  • Как организовать беспроводную телефонию на 30 телефонов?

    @xDimus
    Мини АТС с DECT расширением для телефонной связи. Для просто связи можно LPD радиостанции использовать.
    Ответ написан
    Комментировать
  • Какие порты и протоколы закрывать на сервере Windows?

    FeNUMe
    @FeNUMe
    Закрыть всё, открыть только используемые.
    Ответ написан
    1 комментарий
  • Как записать звонки из trunk?

    "на внутренних номерах все пишется:
    exten => _XXX,1,Dial(SIP/${EXTEN},,tTM(crm^${CALLERID(num)}^${EXTEN}))"
    тут указано crm, а там нет.
    попробуйте привести к виду
    exten => 8XXXXXXXXX,1,Dial(SIP/102,,tTM(crm^${CALLERID(num)}^${EXTEN})))
    Ответ написан
    2 комментария
  • Как организовать сервер и Hyper-V на предприятии?

    CityCat4
    @CityCat4 Куратор тега Сетевое администрирование
    //COPY01 EXEC PGM=IEBGENER
    Beg your pardon, captain?

    Возможно, я чего-то не понимаю и Hyper-V работает не так, как vmware. Но у меня вопросы возникают сразу следующие:
    - (самый очевидный) - накуа 1050?? В сервере запашет самая задрипанская видюха, даже интеграха, если она в этом supermicro есть.
    - сколько посадочных мест под винты? Продайте 1050, забивайте все места винтами. Ей-ей, понадобится.
    - RAID5 - на 3(!) дисках? Эффект рейдов высокого уровня проявляется когда дисков восемь и более, когда можно спокойно выдернуть один винт на замену (потому что в массивах такого типа обычно либо raid6, либо raid5e)
    - непонятно, 4Tb - это весь стор или же 4 диска по 4 Tb. Если второе - это еще ничего. Если первое - ну... на домашний сервак у меня пока хватает столько места :) 4 x 4 Tb в raid10 дадут 8Tb зеркалированного стора (что конечно не отменит необходимость бэкапов.
    - Шейпер и блаблабла... - предполагается, что на нем же будет тачка, подключающая инет? Да еще на винде? Безумству храбрых поем мы песню...
    - LAN 100Mb - это iKVM, а не сетевуха, ее использовать можно только как морду управления хостом
    - Памяти критически мало. 1С сожрет сколько дашь. У нас на хосте для приложений один E5-2630v2 и 1С жрет 24G памяти. Памяти лучше закладывать 64, тем более, что на данной матери слотов всего ничего - по 4 на сокет.
    - Бэкапы в таких случаях обычно сливают на полку типа Synology, а в тырнет ходят через железку типа микротика или циски (бу циски вполне ничего по цене). Зачем? А чтобы, когда упал сервак, иметь возможность не пилить в контору, а из дома подключиться к вебморде хоста и порулить через жабаконсоль
    - терминальный доступ на 100 юзеров? сколько же полосы будет одному? Он будет майнкрафт-мультики смотреть? (где кубики перерисовываются) И даже если всем хватит, сервак не потащит столько.

    Вообще вопросов очень много на самом деле, если что пишите, адрес в профиле
    Ответ написан
    9 комментариев
  • Как подключиться к экрану ноутбука?

    GavriKos
    @GavriKos
    Как то так:
    1) Вскрыть ноут
    2) Найти контроллер матрицы
    3) Найти даташит на него
    4) Спаять неведомую хрень
    5) ...
    6) PROFIT
    Ответ написан
  • Насколько плохо использовать SMB-ресурс хостера для пользовательских документов?

    @res2001
    Developer, ex-admin
    Только не выставляйте голый SMB в интернет.
    Если нужно иметь доступ из интернета, значит нужно организовать ВПН и через него получать доступ к SMB ресурсам.
    Вообще имейте ввиду, что ко всему что лежит не у вас в офисе под закрытой дверью и охраной (т.е. в интернете, облаке, у хостера) имеют прямой физический доступ посторонние лица. Поэтому, если где-то размещаете конфиденциальную информацию, то нужно подумать как будете ее защищать при физическом хранении: криптоконтейнеры, запароленные файлы и т.д.
    Ответ написан
    2 комментария
  • Как правильно настроить веб сервер?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Нанять квалифицированного специалиста, который все это правильно и быстро настроит согласно вашим и/или современным требованиям безопасности к данному конкретному серверу в данной конкретной ситуации.
    Ответ написан
    4 комментария
  • Не получается войти в SWITCH DLINK DES-1228?

    Diman89
    @Diman89
    Саппорт/форум длинка
    Ответ написан
  • Как организовать прием и отправку данных в Arduino?

    @kn0ckn0ck
    Продюсер
    Есть два пути:
    1. Отказаться от ардуино и научиться прошивать ESP8266, у нее полно пинов для управления в том числе релюшками. В частности в инете масса прошивок с примерами организации веб-сервера, реализации MQTT и т.п. Это и будет механизм дистанционного управления пинами ESP8266.
    2. Оставить как сейчас и изучить мануал по AT-командам ESP8266, чтобы реализовать упрощенный аналог веб-сервера на самой Arduino. В инете масса примеров, как это делать.
    Ответ написан
    5 комментариев
  • Как исключить конфликт клиент-банков разных банков на компьютере пользователя?

    gbg
    @gbg Куратор тега Системное администрирование
    Любые ответы на любые вопросы
    Но наша IT безопасность запретила этот вариант т к возможен перехват ключа через сеть.

    Ваша безопасность не знает про VPN? Уволить нахрен!

    Виртуализация решит все ваши проблемы.
    Ответ написан
    1 комментарий
  • Какой есть хороший аналог сборке CentOS7+Asterisk+FreePBX?

    AsteriskNow
    Ответ написан
    Комментировать
  • Когда я создаю загрузочную флешку с linux, она как бы грузится но черный экран. А вот флешка с виндой грузит и работает. Что делать?

    moropsk
    @moropsk
    Попробовать создать загрузочную флешку с linux с помощью https://rufus.akeo.ie/?locale
    Ответ написан
    Комментировать