По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Сегодня подробно разберёмся в том, как настроить запись телефонных разговоров, проходящих через нашу IP-АТС Asterisk, с помощью графической оболочки FreePBX 13. Данная статья будет так же полезна тем, у кого, по каким то причинам, не записываются телефонные разговоры и они хотят это исправить. Заглянем в FreePBX Множество модулей во FreePBX позволяют включить запись телефонных разговоров напрямую, к таким относятся Extensions, Queues, Ring Groups, Inbound Routes. То есть, например, при создании нового внутреннего номера или ринг группы мы можем определить, записывать ли разговоры проходящие через них. Для этого, в каждом модуле, который позволяет настроить запись, есть раздел Recording Options или Call Recording, в котором доступно 5 режимов записи - Force, Yes, Don't Care, No и Never. Данные режимы, позволяют определить, как именно будет идти запись в течение "жизни вызова" или call flow. Вы можете спросить - "Зачем в модулях предусмотрено целых 5 режимов? Почему бы просто не оставить: Yes - есть запись, No - записи нет?" Все дело в том, что звонок может менять свое назначение, например, он может изначально поступить на телефон секретаря Extension, а потом его переведут, например, на отдел продаж Ring Group (цикл звонка и есть call flow), в одном модуле запись может быть включена, а в другом нет и вот чтобы определить, что будет записано и служат эти 5 режимов. Давайте разберёмся подробнее в их логике: Force и Never заменяют друг друга и имеют высший приоритет чем Yes и No Yes и No имеют одинаковый приоритет Когда один и больше Yes или No встречается в call flow, в приоритете всегда будет первое значение. Последующие опции Yes или No не переопределяют первую. Force и Never будут всегда переопределять опции, которые установлены ранее. Force и Never будут всегда заменять друг друга. Например если сначала был установлен Force, а потом встречается Never, то в приоритете будет Never Force и Never будут всегда заменять предустановленные опции Yes и No Yes и No никогда не заменять Force и Never Don’t Care не будет изменять предыдущую опцию. Чтобы было проще понять логику этих 5 режимов, каждый раз, когда встречается No представляйте себе такую фразу – «Я бы предпочел не записывать эту часть вызова, если раньше мне не говорили записать её», когда Yes, такую фразу – «Я хотел бы записать эту часть вызова, если только ранее я не был предупрежден не делать этого». Если встречаете Force, то представьте такую фразу – «Начать или продолжить запись сейчас же!», а если Never - «Закончить запись сейчас же!». И наконец, если встречаете Don’t Care - «Сейчас ничего менять не нужно» Следует отметить, что некоторые модули, такие как Conference не имеют опций Force, Don’t Care и Never, а имеют только Yes и No, а некоторые, например, Ring Group наоборот, имеют только опции Force, Don’t Care и Never. Ещё одной важной функцией записи телефонных разговоров, является запись по требованию - On Demand Recording. С помощью данной функции, администратор IP-АТС может настроить пользователю определенного внутреннего номера Extension, эксклюзивное право включать и выключать запись прямо во время разговора, используя программируемую кнопку на корпусе его телефона или специальный Feature Code, по умолчанию это *1. Для того, чтобы настроить данный функционал, необходимо открыть Applications → Extensions далее открыть вкладку Advanced, прокрутить меню до опции Recording Option и найти поле On Demand Recording Как видите, On Demand Recording имеет следующие режимы: Disable - Пользователь внутреннего номера не сможет использовать функцию записи по требованию, не зависимо от того, какой режим имеет вызов Force, Yes, Don't Care, No или Never.Если пользователь попробует ввести специальный Feature Code, то он услышит ответ “access denied” – “доступ запрещен” Enable - Функция записи по требованию доступна пользователю, но только если звонок имеет режим Yes,No или Don’t Care. Если звонок в режиме Force, или Never, то он услышит “доступ запрещен” Overrride - Пользователь всегда может включить или выключить запись по требованию, вне зависимости от режима Force, Yes, Don't Care, No или Never. Теперь, чтобы основательно закрепить материал, давайте рассмотрим пример вызова и посмотрим, как будет меняться режим записи в этом call flow: Допустим, мы имеем входящий звонок, в правилах входящего маршрута - Inbound Route которого установлен режим записи Yes. В результате генерируется файл записи и запись разговора начинается. По правилам этого входящего маршрута, вызов переходит в очередь Queue, режим записи которой - Don’t Care - запись продолжается. В очереди, звонок принимает оператор, в правилах внутреннего номера которого, стоит режим записи входящих звонков (Inbound External Calls) - No. Запись продолжается, потому что перед этим, в первом шаге, на входящем маршруте был установлен режим Yes и он имеет приоритет. Оператор нажимает *1, в настройках его внутреннего номера On Demand Recording установлен режим - Enable. Запись останавливается. Оператор переводит звонок на ринг-группу (Ring Group), режим записи которой - Force. Запись продолжается. В ринг группе, звонок принимает менеджер, в правилах внутреннего номера которого, стоит режим записи входящих звонков (Inbound Internal Calls) - Never. Запись снова остановлена. Менеджер хочет начать запись и нажимает *1 и слышит в трубке “доступ запрещен”, потому что функция записи по требованию заблокирована режимом Never Таким образом, если Вы вдруг заметили, что у вас отсутствуют записи каких-либо телефонных разговоров или отдельных их частей, а вы вроде как её включали в настройках, то рекомендуем Вам проследить call flow звонка, в котором нет записи и посмотреть – какой режим включается на каждом из этапов.
img
Одним из полезнейших инструментов в повседневной работе современного бизнеса является интеграция CRM – системы и офисной телефонии. Это позволяет совершать исходящие звонки по нажатию на номер клиента, иметь всю историю звонков заказчика в CRM, прослушивать его аудиозапись разговоров, автоматически направлять вызов на ответственного менеджера и конечно, видеть карточку клиента при входящем звонке. Сегодня мы хотим рассказать об интеграции облачной Битрикс24 и IP – АТС Asterisk. Как это работает? Настройки рассмотрим на базе решения «Простые звонки». После обращения в компанию, на почту придет ссылку на модуль для Asterisk и инструкция по настройке. Архитектура работы решения следующая: на офисной IP – АТС Asterisk развертывается модуль коннектора, с указанием необходимых настроек. В свою очередь, на стороне Битрикс24 устанавливается приложение и расширение для браузера, в котором указываются реквизиты для подключения к коннектору на IP – АТС. Данное решение работает только в браузере GoogleChrome Настройка Asterisk Переходим к установке модуля АТС – коннектора на стороне Asterisk: Содержимое архива prostiezvonki извлекаем в директорию Asterisk /var/www/html/admin/modules/ и переходим дальше по файловой структуре в директорию /var/www/html/admin/modules/prostiezvonki/module Если вы используете 32 битную систему, то скопируйте файлл libProtocolLib.so в директорию /usr/lib и cel_prostiezvonki.so в директорию /usr/lib/asterisk/modules. Если у вас установлена 64 битная система, то загрузите их в /usr/lib64 и /usr/lib64/asterisk/modules соответственно. Файл из архива cel.conf переместите в директорию /etc/asterisk После настроек, переходим в интерфейс FreePBX. Перейдите во вкладку Admin → Module Admin. Находим модуль «Простые звонки» и производим его установку. После этого, приступаем к настройке: переходи во вкладку Admin → Module Admin: Рассмотрим опции настройки модуля: Общая настройка модуля Пароль - пароль, с помощью которого, Битрикс24 будет подключаться к АТС – коннектору. В данном примере пароль простой - P@ssw0rd Лог файл - полный путь к лог - файлу, в котором коннектор будет фиксировать детали своей работы Уровень записи лога - глубина логирования. Это значение имеет смысл менять на debug на этапе отладаки и "траблшутинга" Порт - порт, на котором АТС - коннектор будет "слушать" подключение от Битрикс24 Лицензия - лицензионный ключ, который вам прислала команда технической поддержки Размер очереди событий - параметр регламентирует размер очереди, в которой накапливается история звонков в случае отсутствия соединения между коннектором на АТС и CRM - системой Общая настройка модуля Префикс для входящих - префикс, который система будет подставлять к входящим звонкам, в момент передачи в Битрикс24 Префикс для исходящих - при использовании функции "Click - to - Call", то есть звонок по нажатию, коннектор будет подставлять префикс для исходящих вызовов Тип канала - в нашем примере мы работает по протоколу SIP Длина внутренних номеров - например, если вы используете внутреннюю нумерацию с 100 - 199, то данное значение будет равно 3 Настройка записи телефонных разговоров Внешняя директория - директория, в которой содержатся файлы системы записи. Здесь содержится внешний IP – адрес нашего маршрутизатора и проброшенный порт. Своего рода это префикс для ссылок на аудио - файл, который коннектор будет подставлять при передаче их в Битрикс24. Мы подробно расскажем о настройке этого поля далее. Настройка умной переадресации Таймаут поиска - время, в течение которого, коннектор ожидает получить номер ответственного сотрудника от Битрикс24 Таймаут ответа - время, в течение которого будет звонить телефон ответственного менеджера Для использования функции «Умная переадресация» (перевод звонка на ответственного менеджера), установите соответствующую галочку в настройках входящих маршрутов Ссылки на запись разговора в Битрикс24 Подключитесь к серверу IP – АТС Asterisk по SSH. Создадим директорию audio в корневой директории WEB – сервера /var/www/html/: [root@asterisk ~]# mkdir /var/www/html/audio После этого смонтируем папку, где хранятся файлы системы записи разговоров Asterisk в созданную директорию. Для этого, откройте файл /etc/fstab: [root@asterisk ~]# vim /etc/fstab Добавьте в файл следующую запись: /var/spool/asterisk/monitor/ /var/www/html/audio/ none rbind 0 0 Примените изменения командой mount -a Настройка Битрикс24 для работы с коннектором Приступаем к настройке Битрикс24. Для этого, переходим в раздел Приложения → Все приложения→ IP-телефония → Простые звонки. Произведите установку указанного приложения: Теперь устанавливаем расширение для браузера Google Chrome. Кликните по кнопке ниже и установите указанное расширение: Расширение для Google Chrome Переходим по пути Настройка → «Инструменты → «Расширения. Находим «Простые звонки» и нажимаем Настройки для конфигурации опций подключения к АТС – коннектору: Опции настройки: Внутренний номер телефона - ваш внутренний номер (Extension) Адрес АТС-коннектора - в нашей примере указано адрес 1.2.3.4:56789 - это внешний IP - адрес нашего маршрутизатора и проброшенный порт. То есть, при обращение на этот адрес "извне", происходит проброс на внутренний адрес 192.168.1.2:10150, где 192.168.1.2 - это IP - адрес Asterisk, а 10150 - порт, который мы ранее указывали в настройках АТС - коннектора Пароль - пароль, который мы указали в настройка АТС - коннектора Кол-во секунд для определения клиента по номеру телефона - если у вас на этапе эксплуатации не определяется клиент по известному номеру, увеличьте это значение Автоматическое создание лида - создавать ли лида, если звонок пришел с неизвестного номера Готово. Нажимаем «Сохранить и подключить». Как видно, наш коннектор находится в статусе «Подключен». Сделаем тестовый звонок: Использование нового API Bitrix24 При установленной галочке "Использование нового API Bitrix24 (бета)", как показано на скриншоте ниже, происходят изменения в работе всплывающих окон:
img
В интернете можно найти множество статей с описанием шаблонов масштабирования баз данных (БД), но, в основном, это разрозненная информация с перечислением методик и практически без объяснений. Ниже приведено подробное руководство по шаблонам масштабирования БД, пошаговым объяснением принципов их работы и примерами использования. Практический пример Предположим, вы создали стартап, который предлагает совместные поездки по дешевой цене. Вы выбрали город для поездок, а первая реклама привлекла не более 10 клиентов. Вы храните информацию обо всех клиентах, поездках, местах, бронированиях и историях заказов в одной и той же БД и, скорее всего, на одной физической машине. У вас нет навороченного кеширования или конвейера обработки больших данных, ведь ваше приложение только появилось. На данный момент это – идеальный вариант: в базе мало клиентов, и система, вряд ли, бронирует по поездке каждые 5 минут. Но время идет. В вашей системе регистрируется все больше людей, ведь это самый дешевый сервис на рынке. Да и реклама сделала свое дело. Вы получаете по 10 заказов в минуту. Постепенно это количество увеличивается до 20, а затем и 30 бронирований в минуту. В этот момент вы замечаете, что система начинает тормозить: время отклика API сильно увеличилось, а некоторые транзакции блокируются или зависают и, в конечном итоге, не проходят. Время ответа приложения также увеличилось, что вызвало недовольство клиентов. Как же решить эту проблему? Шаблон №1 – оптимизация запросов и реализация пула соединений Первое решение, которое приходит на ум: кэш слишком часто использует нединамические данные (история бронирования, история платежей, профили пользователей и т.д.). Но прикладным уровнем кеширования вы не сможете решить проблему с временем отклика API, предоставляющим динамические данные (текущее местоположение водителя, ближайшая машина для конкретного клиента, текущая стоимость поездки после выхода на маршрут и т.д.). Вы приходите к выводу, что база данных слишком нормализована, поэтому вы решаете ее немного «разбавить» и добавляете несколько избыточных столбцов (такие столбцы часто попадают в операторы WHERE или JOIN ON в запросах). Это сокращает количество запросов на соединение, разбивает большие запросы на несколько маленьких и добавляет их результаты на прикладной уровень. Можно заняться и параллельной оптимизацией – настроить подключения к базам данных. Внешние и клиентские библиотеки БД доступны практически для всех языков программирования. Для кеширования подключений к БД можно воспользоваться библиотеками пула соединений. Либо вы можете настроить размер пула соединений в самой СУБД. Создание сетевого подключения – вещь весьма затратная, поскольку требует двусторонней коммуникации между клиентом и сервером. Пулы соединений помогают оптимизировать количество подключений. Библиотеки пула соединений реализуют мультиплексирование подключений – несколько потоков приложения могут пользоваться одним и тем же подключением. Вы замеряете время отклика API и замечаете снижение задержки на 20-50% (или даже больше). На данный момент это хорошая оптимизация. Затем вы расширили бизнес на еще один город и получили больше клиентов. Постепенно вы доходите до 80-100 бронирований в минуту. Ваша система не в состоянии справиться с таким объемом. Вы вновь замечаете увеличение времени ожидания API, а слой базы данных не справляется с нагрузкой. Но в этот раз оптимизация запросов не дает вам существенного улучшения производительности. Вы проверяете метрики системы и видите, что дисковое пространство заполнено, ЦП занят в 80% времени, а ОЗУ переполняется слишком быстро. Шаблон № 2 – вертикальное масштабирование или масштабирование вверх Изучив все системные метрики, вы не находите другого решения, кроме как обновить аппаратное обеспечение системы. Вы увеличиваете размер оперативной памяти в 2 раза, а объем диска – раза в 3. Это называется вертикальным масштабированием. Вы сообщаете группе по обслуживанию инфраструктуры, команде devops или агентам сторонних центров обработки данных (ЦОД) о необходимости обновления вашей машины. Но как настроить саму машину для вертикального масштабирования? Вы выделяете машину большего объема. Один из подходов заключается в том, чтобы не переносить данные со старой машины вручную, а настроить новую машину в качестве копии, или реплики (replica), уже существующего устройства, или источника (primary), прописав временную конфигурацию первичной реплики (primary replica). После завершения репликации назначьте новую машину в качестве primary и отключите старую. Поскольку обрабатывать запросы планируется на этой новой машине, все чтение/запись также будет вестись на ней. Отлично. Вы прокачали систему, и теперь все работает намного быстрее. Ваш бизнес идет на ура, и вы решаете расшириться еще до 3 городов. Теперь вы ведете деятельность в 5 городах. Трафик увеличился втрое, вы получаете по 300 заказов в минуту. Проблема с производительностью вернулась: размер индекса сильно сказывается на памяти, базу данных необходимо постоянно поддерживать, а сканирование таблицы с индексом замедлилось до невозможности. Вы подсчитали стоимость дальнейшего масштабирования системы, но цена не внушает доверия. Так что же делать? Шаблон №3 – разделение ответственности на команды и запросы (CQRS): Вы понимаете, что та самая большая машина не в состоянии обработать все запросы на чтение/запись. Да и чаще всего компаниям нужны транзакционные возможности на запись (write), а не чтение (read). Вас даже устраивает небольшая несогласованность данных или замедление операций read. В принципе, раньше это тоже не казалось вам проблемой. Вы решаете, что неплохо было бы разделить операции чтения и записи на физической машине. Это позволит отдельным машинам выполнять больше операций чтения/записи. Теперь вы берете целых 2 большие машины и настраиваете их репликами для текущего компьютера. Репликация базы данных решит вопрос с переносом данных с primary машины на реплики. Вы перенаправляете все запросы на чтение (буква Q в CQRS, что означает «запрос» - Query) в реплики – любая реплика может обслуживать любой запрос на чтение. А все запросы на запись остаются на первичной машине. Возможна небольшая задержка в репликации, но в вашем конкретном случае это не критично. Вариант с настройкой primary-replica вполне подходит для большинства стартапов среднего масштаба, получающих по сотням тысяч запросов ежедневно… но при условии, что компании периодически архивируют старые данные. Вы вновь расширились на 2 города, и замечаете, что primary-машина не справляется со всеми запросами на запись. Многие такие запросы приходят с опозданием. Более того, задержка между primary и replica начинает сказываться на клиентах и водителях. Например, поездка завершена, клиент успешно ее оплачивает, но водитель не видит платеж, поскольку активность клиента – это запрос на запись, который идет на машину primary, а активность водителя – это запрос на чтение, который приходит на одну из реплик. Вся система настолько замедлилась, что водитель не видит платежа как минимум секунд 30, и это вызывает недовольство как со стороны клиента, так и у самого водителя. Как же поступить сейчас? Шаблон №4 – репликация с несколькими источниками Конфигурация primary-replica помогла вам успешно масштабироваться, однако теперь для операций записи не хватает возможностей. Быть может, вы согласитесь слегка пожертвовать быстротой запросов на чтение. А почему бы не перенести запросы на запись тоже в реплики? В модели с несколькими источниками (multi-primary) все машины работают как источник, и как реплика. Такая структура чем-то напоминает замкнутый круг из машин: A->B->C->D->A. «B» может реплицировать данные из «A», «C» – реплицирует данные из «В», «D» – дублирует данные из «C», а «A» делает тоже самое из «D». Вы можете выполнять операцию чтения и одновременно записывать данные в любой узел; вы можете транслировать запрос во все узлы, а значение вернет один из откликнувшихся узлов. Все узлы имеют одинаковую схему БД, один и тот же набор таблиц, индекс и т.д. Но нужно следить, чтобы в узлах одной таблицы не было конфликта по id , иначе при трансляции запросов несколько узлов вернут разные данные по одному и тому же id. Вообще считается, что для ID лучше использовать UUID или GUID. Еще один недочет данной системы: из-за трансляции запросов и поиска корректного результата, запросы на чтение могут оказаться неэффективными. Это, своего рода, принцип распределения/сборки в действии. И вот вы вновь масштабировали бизнес. В этот раз на 5 новых городов. Система не справляется. Теперь вам нужно обрабатывать по 50 запросов в секунду. Вам очень не хватает обработки большого количества параллельных запросов. Но как это сделать? Шаблон №5 – декомпозиция Вы знаете, что база данных location получает много трафика на чтение/запись. Вполне возможно, что соотношение записи к чтению составляет 7:3. Это создает большую нагрузку на существующие БД. В таблицах location содержится несколько первичных данных: долгота (longitude), широта (latitude), отметка времени (timestamp), ID водителя (driver id), ID поездки (trip id) и т.д. Там практически нет информации о поездках или данных пользователя, его платежах и т.д. Возможно, стоит разделить таблицы location на отдельную схему? Как насчет того, чтобы распределить эту БД по отдельным машинам с корректно настроенной конфигурацией primary-replica или multi-primary? Это называется декомпозицией данных по функциональности. В разных БД можно хранить данные, разделенные по функциональному признаку, а результат (при необходимости) агрегируется на серверном уровне. Такой способ позволит вам масштабировать нужный функционал с большим количеством запросов на чтение/запись. В то же время прикладной или серверный уровень приложения должен будет заняться объединением результатов, что приведет к значительному изменению кода. Теперь представьте себе, что вы масштабировались до 20 городов в своей стране и планируете открыть филиалы в Австралии. Растущий спрос на ваше приложение требует все более быстрого времени ответа. Ни один из методов выше с этим не поможет. Вам нужно масштабировать систему так, чтобы при расширении в другие страны/регионы не приходилось слишком часто проектировать и менять архитектуру. Как же тогда поступить? Шаблон №6 – горизонтальное масштабирование Вы хорошо загуглили эту тему, почитали массу статей о том, как другие компании решали такую проблему, и поняли, что настал момент масштабироваться горизонтально. Вы выделили, скажем, 50 машин – все с одинаковой схемой БД и одинаковыми наборами таблиц. На каждой машине хранится лишь часть данных. Поскольку во всех БД хранится один и тот же набор таблиц, вы можете спроектировать систему таким образом, чтобы реализовать привязку данных (то есть все связанные данные хранятся на одной машине). В каждой машине может быть своя реплика; реплики используются для восстановления после сбоя. Каждая такая база данных называется «шардом». На физической машине может быть один или несколько шардов – их количество зависит от нужной вам схемы проектирования. Вы должны придумать ключ шардирования, который бы всегда относился к одной и той же машине. Представьте себе много машин с кучей связанных данных в одном наборе таблиц; операции на чтение/запись запрашиваются для одной и той же строки или набора ресурсов на одной и той же машине с БД. Реализовать шардинг довольно сложно. По крайней мере, так говорят инженеры. Но при обслуживании миллионов или даже миллиардов запросов, рано или поздно вам придется пойти на столь непростой шаг. Настроив шардинг, вы уверены, что сможете масштабироваться во многие страны. Ваш бизнес разросся настолько, что инвесторы вынуждают вас расширяться на другие континенты. И тут опять возникают проблемы. Все то же время отклика API. Ваш сервис находится в США, и у пользователей из Вьетнама возникают трудности при бронировании. Но почему? И что же делать? Шаблон №7 – умное сегментирование центров обработки данных Ваш бизнес развивается в Америке, Южной Азии и нескольких странах Европы. Каждый день вы получаете миллионы заказов, а ваш сервер атакуют миллиарды запросов. Поздравляю! Это пиковый момент в вашей деятельности. Запросы из приложения поступают с разных континентов и проходят через сотни или даже тысячи серверов в интернете, поэтому время отклика растет. Может, распределить трафик по центрам обработки данных? Вы могли бы настроить ЦОД в Сингапуре, и он бы обрабатывал все запросы из Южной Азии. Затем сделать еще один в Германии – он займется всеми запросами из европейских стран, и оставить ЦОД в Калифорнии для обработки американских запросов. Кроме того, вам понадобится репликация между ЦОД – на случай, если потребуется восстановление после сбоя. Если центр обработки данных в Калифорнии выполняет репликацию сингапурского ЦОД, то в случае аварии в Калифорнии (стихийные бедствия, отсутствие электричества и т.д.), все запросы из США будут передаваться в Сингапур и наоборот. Такой метод масштабирования подходит для: обслуживания миллионов клиентов из разных стран, сохранения всех данных и поддержания постоянной доступности системы. Заключение В статье приведены общие методы по масштабированию базы данных. Стоит сказать, что у большинства инженеров нет достаточных возможностей для реализации всех шаблонов. Но лучше знать о существовании таких схем, которые в будущем могут помочь вам с проектированием архитектуры и систем.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59