Если вы следите за новостями, то знаете, что знаменитый профессиональный видеоредактор и система цветокоррекции DaVinci Resolve, в своей бесплатной редакции, доступен теперь и для Linux. Однако официально разработчиками поддерживаются только CentOS и Red Hat Enterprise Linux, как системы для профессиональных графических станций. Однако это вовсе не означает, что Resolve не будет работать в других дистрибутивах. И в этой заметке я покажу как установить его в Debian, Ubuntu и их производных.
Архив метки: Linux
Asterisk. Соединение абонента с тем же оператором, при обрыве связи
Задача
Имеется небольшой call-центр. Все входящие звонки с разных линий и номеров сначала поступают на сервер Asterisk (FreeBSD+Asterisk 11.14.1), а он в свою очередь распределяет эти звонки между всеми операторами по определенному сценарию (queues).
При звонке, клиент сначала прослушивает голосовое приветствие, потом его сервер соединяет со свободным оператором, и начинается общение. Но часто бывает, что при плохой связи – звонок обрывает. Клиенту приходится заново перезванивать, слушать опять голосовое приветствие (которое порой может длиться до полуминуты), и попадает на оператора… на другого оператора. Приходится заново рассказывать о своей проблеме другому оператору и решать все по новой. Порой “качество” связи (мобильной) может упасть на столько, что приходится перезванивать по 5-10 раз !!!
Поэтому было решено сделать так, что бы при обрыве, при повторном звонке, от одного и того же клиента – звонок шел без очереди на того же оператора, без голосовых приветсвий и т.д.
Решение
Решение оказалось довольно простым.
Будем использовать существующую базу Asterisk’а – CDR. В этой базе хранятся все записи и входящих и исходящих звонках нашего телефонного сервера.
Открываем файл /etc/asterisk/extensions.conf и правим нужный нам входящий канал. Добавляем такой блок:
exten => 100,1,MYSQL(Connect connid IP_MYSQL ЛОГИН_MYSQL ПАРОЛЬ_MYSQL БАЗА_MYSQL)
exten => 100,n,MYSQL(Query resultid ${connid} select dstchannel from cdr where clid like '%${CDR(src)}' and calldate like '${STRF TIME(${EPOCH},,%Y-%m-%d %H)}%')
exten => 100,n,MYSQL(Fetch fetchid ${resultid} operator)
exten => 100,n,GotoIf($["${operator}" = ""]?8:5)
exten => 100,n,MYSQL(Clear ${resultid})
exten => 100,n,MYSQL(Disconnect ${connid})
exten => 100,n,Dial(SIP/${operator:-12:3},20,tT)
exten => 100,n,Background(hello)
exten => 100,n,Queue(support)
Что мы делаем
При входящем звонке, соединяемся с базой, делаем запрос, на поиск в таблице cdr в поле clid по номеру водящего звонка (переменная %${CDR(src)} ) и время укажем последний текущий час (переменная ${STRF TIME(${EPOCH},,%Y-%m-%d %H)}%) в поле calldate. Если звонок “новый” и еще не звонил в течении часа, то запрос вернет пустое значение в переменную operator, и звонок перекинется на проигрывание приветствия, и звонок поступит в очередь операторов, где на него ответит свободный оператор.
Пример cmd asterisk:
-- Executing [100@local-phones:1] MYSQL("SIP/INPUT_MTS-0000006c", "Connect connid localhost aster password asterisk") in new stack
-- Executing [100@local-phones:2] MYSQL("SIP/INPUT_MTS-0000006c", "Query resultid 3 select dstchannel from cdr where clid like '%099xxxxxxx' and calldate like '2017-09-06 09%'") in new stack
-- Executing [100@local-phones:3] MYSQL("SIP/INPUT_MTS-0000006c", "Fetch fetchid 4 operator") in new stack
-- Executing [100@local-phones:4] GotoIf("SIP/INPUT_MTS-0000006c", "1?8:5") in new stack
-- Goto (local-phones,100,8)
-- Executing [100@local-phones:8] BackGround("SIP/INPUT_MTS-0000006c", "hello") in new stack
-- <INPUT_MTS-0000006c> Playing 'hello.slin' (language 'ru')
-- Executing [100@local-phones:9] Queue("SIP/INPUT_MTS-0000006c", "support") in new stack
-- Started music on hold, class 'default', on SIP/INPUT_MTS-0000006c
== Using SIP RTP CoS mark 5
-- SIP/971-0000006d is ringing
-- SIP/971-0000006d answered SIP/INPUT_MTS-0000006c
-- Stopped music on hold on SIP/INPUT_MTS-0000006c
Если же, клиент уже звонил и в базе cdr уже существует запись о том, что он звонил. Тогда в переменную operator вернется значение – SIP- номер оператора, с кем он разговаривал, и звонок уже вне очереди поступит напрямую к тому же оператору.
-- Executing [100@local-phones:1] MYSQL("SIP/INPUT_MTS-0000006a", "Connect connid localhost aster password asterisk") in new stack
-- Executing [100@local-phones:2] MYSQL("SIP/INPUT_MTS-0000006a", "Query resultid 1 select dstchannel from cdr where clid like '%099xxxxxxx' and calldate like '2017-09-06 09%'") in new stack
-- Executing [100@local-phones:3] MYSQL("SIP/INPUT_MTS-0000006a", "Fetch fetchid 2 operator") in new stack
-- Executing [100@local-phones:4] GotoIf("SIP/INPUT_MTS-0000006a", "0?8:5") in new stack
-- Goto (local-phones,100,5)
-- Executing [100@local-phones:5] MYSQL("SIP/INPUT_MTS-0000006a", "Clear 2") in new stack
-- Executing [100@local-phones:6] MYSQL("SIP/INPUT_MTS-0000006a", "Disconnect 1") in new stack
-- Executing [100@local-phones:7] Dial("SIP/INPUT_MTS-0000006a", "SIP/971,20,tT") in new stack
Как пользоваться Linux
В интернете существует множество инструкций, о том как установить Linux на компьютер, как установить его с несколькими другими системами, как настроить определенные аспекты работы, как делать те или иные действия, но нет дельной статьи о том, как пользоваться Linux, какие действия и когда стоит выполнять, зачем это нужно и как все делать правильно.
Мы поговорим о настройке системы, безопасности, обновлениях, журналах, очистке, резервном копировании и других подобных вещах. Я не претендую на звание эксперта в этой области. Я так делаю в своей системе и предлагаю делать вам, но это всего лишь мое мнение, вы и другие пользователи могут считать по-другому. Статья использование linux ориентирована на обычных пользователей, а не системных администраторов и программистов. Но я думаю, что вы можете найти что-то полезное для себя в этой статье.
Читать
Входящие звонки по времени в FreePBX
Работу системы FreePBX можно организовать таким образом, чтобы телефония работала по разной логике в различное время суток. Например, можно сделать разделение на дневной и ночной режимы работы. В данной статье будет рассмотрен заворот входящей маршрутизации в правила по времени.
Постановка задачи
Рассмотрим следующую ситуацию (разделени на дневной и ночной режимы): необходимо чтобы днем все входящие звонки заворачивались на IVR с приветствием и возможностью выбора подменю и донабора внутренних номеров сотрудников, а в нерабочее время уже озвучивалось другое IVR в котром будет отключена возможность прямого донабора и по таймауту будет переход, например, на голосовую почту, чтобы звонивший мог оставить сообщение.
Изначально необходимо создать два разных IVR и назвать их, например, IVR-day и IVR-night. (Более подробно о составлении IVR можно посмотреть здесь)
Создание временной группы
Далее создаются необходимые временные группы. Настройки производятся на вкладке Applications>Time Groups: в поле Description вводится описание временной группы — целесообразно в описании указывать временной диапазон, который будет использоваться. Затем настраиваются параметры времени: Time to start/Time to finish — время начала/окончания работы группы (время можно выставлять с точностью до минуты), Week Day start/Week Day finish — день недели началы/окончания работы. Для примера возьмем с понедельника по пятницу с 9:00 до 18:00.
После сохранения настроек созданные временные группы отображаются в правом верхнем углу окна. Здесь же находится кнопка Add Time Group при нажатии на которую открывается страница добавления новой временной группы.
Создание правил по времени
Теперь можно перейти на страницу создания Временных правил: Applications>Time Conditions. В поле Time Condition name задается имя правила, например, worktime. В поле Time Group выбирается созданная на предыдущем шаге временная группа. Поле Destination if time matches (Назначение если время совпадает) — соответственно выставляет назначение куда будет направлен входящий звонок при совпадении времени — в данном случае будет завернут в IVR-day. Поле Destination if time does not match (Назначение если время не совпадает) — соответственно выставляет назначение куда будет направлен входящий звонок при не совпадении времени — в данном случае будет завернут в IVR-night.
Заворот входящих звонков в правило по времени
Теперь необходимо завернуть входящие маршруты на только что созданное правило по времени. Вкладка Connectivity>Inbound Route. Создается маршрут для AnyDID/AnyCID и заворачивается на созданное правило по времен: в поле Set Destination указывается Time Conditions, затем выбирается необходимое правило.
На этом настройка перенаправление входящей маршрутизации на правила по времени закончена.
5 отличных альтернатив Steam для Linux
Steam уже несколько лет поддерживает Linux. Поскольку он служит платформой для множества игр, включая бестселлеры от самых известных студий, это очень хорошо для среднего пользователя, одним из важных аспектов для которого при переходе на Linux является поддержка игр.
Однако не всем в сообществе Linux нравится Steam. Они видят в коммерческой игровой платформе угрозу свободе софта, так как она содержит много DRM. В результате многие любители игр в Linux ищут альтернативу, обходящуюся без использования DRM. Ниже представлен список из пяти таких платформ.
1. Itch.io
Это солидная альтернатива Steam. Itch.io имеет хорошо проработанный декстопный клиент для Linux с аналогичной функциональностью в плане покупки и запуска игр.
Как изменить версию php в консоли
Если у вас установлено несколько версий php в системе, то при вызове команды php в консоли, будет использоваться одна из них. Иногда необходимо для каких-то скриптов или сервисов управлять версией php в консоли. Я расскажу, как ее изменить.



