По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Сейчас мы докажем, что в FreePBX можно записать вообще всё.
Мы уже рассказывали про логику записи звонка и том на каких фазах мы можем её контролировать. Однако, стандартный функционал записи ограничивается модулем, в рамках которого мы хотим начать запись. Например, если мы включаем запись на внутреннем номере (Extension), то услышим только часть звонка, которая началась, когда абонент данного номера снял трубку.
Но что, если мы хотим записать ещё и ту часть звонка, которая была до этого? Например, как звонящий терпеливо выбирал опции нашего IVR и какие комментарии при этом отпускал? :)
Для этого в FreePBX существует специальный модуль - Call Recording, который позволяет принудительно включить или отключить автоматическую запись звонка на определенном его этапе. Любые другие опции записи, которые были включены до этого, при этом будут проигнорированы. Но самое главное, что записи звонков, сделанные через этот модуль, будут содержать все голосовые приветствия (Announcement), музыку на ожидании (Music On Hold) и другие сообщения, которые проигрывает наша IP-АТС каждому позвонившему абоненту.
Множество модулей во FreePBX, таких как модуль очередей (Queues), входящей маршрутизации (Inbound Routes), групп вызова (Ring Group), позволяют управлять записью звонка напрямую. Для этого в них есть специальные опции – Call Recording, которые можно при необходимости активировать.
Модуль, о котором мы говорим в этой статье, позволяет настроить принудительное начало записи звонка ещё до того, как он отправится на какое-нибудь направление, которое не имеет опции записи. Например на Page группу или IVR.
Настройка
Перед установкой, проверьте какая версия модуля callrecording у вас установлена. Для этого в консоли введите команду: fwconsole ma list | grep callre. Версия модуля должна быть 14.0.5 и выше, поскольку в более ранних версиях, обнаружен баг (FREEPBX-18899 (https://issues.freepbx.org/browse/FREEPBX-18899)) и функционал полной записи работать не будет :(. Если установлена более ранняя версия, то сделайте обновление данного модуля
После этого переходим во вкладку Settins - Advanced Settings и в разделе Call Recording ищем новую опцию, которая должна появиться - Call Recording Option, её значение устанавливаем в No и только после этого переходим к следующему шагу
Для настройки открываем Applications → Call Recording и нажимаем Add Call Recording:
Перед нами открывается меню добавления нового правила записи звонков:
Как видите всё достаточно просто:
Description - Описание данного правила;
Call Recording Mode - Логика записи, подробно описана в нашей статье;
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 не будет изменять предыдущую опцию.
Destination - Указывает направление куда необходимо отправить звонок после того, как была включена или же отключена запись.
Применение
Давайте представим себе, что у нас есть входящий маршрут (Main_Route), звонки с которого отправляются в IVR (Main_IVR). Но мы хотим слышать что говорит звонящий, находясь в меню IVR и слушая голосовое сообщение, например для последующего анализа и оценки его реакции.
Для этого, мы создадим Call Recording (For_IVR_Recordings), которое будет включать запись и отправлять звонок на тот же самый IVR, а сам Call Recording – повесим на входящий маршрут:
Готово! Теперь мы получим запись звонка, которая будет содержать часть, где звонящий находится в IVR и слушает его сообщение, и, возможно даёт какие-нибудь комментарии. Остальная часть записи будет зависеть от того, какие опции настроены в IVR.
В этой статье мы расскажем как интегрировать Python c Excel и Word, чтобы без проблем создавать автоматические отчеты. Microsoft Excel и Microsoft Word – это, без доли сомнений, две наиболее широко используемые программы как в мире бизнеса, так и в некорпоративной сфере. Они практически являются синонимами слову «работа». Как правило, не проходит и недели, чтобы мы тем или иным способом не воспользовались их преимуществами. И хотя для обычных повседневных задач автоматизация не требуется, бывают случаи, когда она может стать необходимостью. А именно, когда у вас есть множество диаграмм, рисунков, таблиц и отчетов, которые необходимо сделать, это может стать очень утомительным занятием, если все это выполнять вручную. А это не должно быть так. На самом деле существует способ создать конвейер в Python, где можно будет легко интегрировать эти программы для создания электронных таблиц в Excel, а затем передавать результаты в Word для создания отчета практически мгновенно.
Openpyxl
Познакомьтесь с Openpyxl, возможно, одной из самых универсальных привязок в Python, которая превращает взаимодействие с Excel буквально в прогулку по парку. Используя этот пакет, вы сможете читать и записывать все новые и старые форматы Excel, то есть .xlsx и .xls. Openpyxl позволяет заполнять строки и столбцы, выполнять формулы, создавать 2D- и 3D-диаграммы, маркировать оси и заголовки, а также имеет множество других возможностей, которые могут пригодиться. Однако здесь наиболее важно то, что этот пакет позволяет вам перебирать бесконечное количество строк и столбцов Excel, тем самым избавляя вас от всех этих утомительных вычислений и построения графиков, которые вам приходилось делать ранее самим.
Python-docx
А затем появляется Python-docx – пакет для Word – то же, что Openpyxl для Excel. Если вы все еще не изучили их документацию, то вам все же стоит на нее взглянуть. Python-docx – без преувеличения один из самых простых и понятных наборов инструментов, с которыми я работал с тех пор, как начал работать с Python. Он позволяет автоматизировать создание документов, автоматически вставляя текст, заполняя таблицы и отображая изображения в отчете без каких-либо усилий.
Без лишних церемоний давайте создадим наш собственный автоматизированный конвейер. Запустите IDE по вашему выбору и установите следующие пакеты:
pip install openpyxlpip install python-docx
Автоматизация Microsoft Excel
Для начала загрузим уже созданную книгу Excel (как показано ниже):
workbook = xl.load_workbook('Book1.xlsx')
sheet_1 = workbook['Sheet1']
Затем мы пройдемся по всем строкам в нашей электронной таблице для того, чтобы вычислить и вставить значение мощности, которую мы получим, умножив ток на напряжение:
for row in range(2, sheet_1.max_row + 1):
current = sheet_1.cell(row, 2)
voltage = sheet_1.cell(row, 3)
power = float(current.value) * float(voltage.value)
power_cell = sheet_1.cell(row, 1)
power_cell.value = power
Как только мы сделаем это, то мы сможем использовать рассчитанные значения мощности для построения линейной диаграммы, которая будет вставлена в указанную ячейку, как показано ниже:
values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1)
chart = LineChart()
chart.y_axis.title = 'Power'
chart.x_axis.title = 'Index'
chart.add_data(values)
sheet_1.add_chart(chart, 'e2')
workbook.save('Book1.xlsx')
Извлечение диаграммы
Теперь, когда мы построили нашу диаграмму, нам нужно ее извлечь в формате изображения для того, чтобы мы могли использовать ее в нашем отчете Word. Для начала объявим точное местоположения нашего файла Excel, а также место, куда мы хотим сохранить изображение получившейся диаграммы:
input_file = "C:/Users/.../Book1.xlsx"
output_image = "C:/Users/.../chart.png"
Затем необходимо получить доступ к таблице, используя следующий метод:
operation = win32com.client.Dispatch("Excel.Application")
operation.Visible = 0
operation.DisplayAlerts = 0
workbook_2 = operation.Workbooks.Open(input_file)
sheet_2 = operation.Sheets(1)
И далее вы можете перебрать все диаграммы в таблице (если их больше одной) и сохранить их в указанном месте:
for x, chart in enumerate(sheet_2.Shapes):
chart.Copy()
image = ImageGrab.grabclipboard()
image.save(output_image, 'png')
passworkbook_2.Close(True)
operation.Quit()
Автоматизация Microsoft Word
Теперь, когда у нас есть изображение диаграммы, мы должны создать шаблон документа, который представляет собой обычный документ Microsoft Word (.docx), сформированный именно так, как нам необходимо, чтобы наш отчет имел определенный тип и размер шрифта, нужное форматирование и структуру страницы. Далее, все, что нам необходимо сделать, это создать заполнители для нашего автоматизированного содержимого, то есть значений таблиц и изображений, и объявить их с переменными, как показано ниже.
Внутри двойных фигурных скобок {{variable_name}} может быть объявлен любое автоматизированное содержимое, включая текст и изображения. Для таблиц вам необходимо создать таблицу с шаблонной строкой, в которую включены все столбцы, а затем вам необходимо добавить еще одну строку выше и одну строку ниже со следующими обозначениями:
Первая строка:
{%tr for item in variable_name %}
Последняя строка:
{%tr endfor %}
На рисунке выше указаны следующие имена переменных:
table_contents для словаря Python, в котором будут храниться наши табличные данные.
Index для ключей словаря (первый столбец).
Power, Current и Voltage для значений словаря (второй, третий и четвертый столбцы).
Затем мы импортируем наш документ-шаблон в Python и создаем словарь, в котором будут храниться значения нашей таблицы:
template = DocxTemplate('template.docx')
table_contents = []for i in range(2, sheet_1.max_row + 1):
table_contents.append({
'Index': i-1,
'Power': sheet_1.cell(i, 1).value,
'Current': sheet_1.cell(i, 2).value,
'Voltage': sheet_1.cell(i, 3).value
})
Далее мы импортируем изображение диаграммы, которое ранее мы создали в Excel, и создаем еще один словарь для создания экземпляров всех переменных-заполнителей, объявленных в документе-шаблоне:
image = InlineImage(template,'chart.png',Cm(10))context = {
'title': 'Automated Report',
'day': datetime.datetime.now().strftime('%d'),
'month': datetime.datetime.now().strftime('%b'),
'year': datetime.datetime.now().strftime('%Y'),
'table_contents': table_contents,
'image': image
}
И, наконец, мы отображаем отчет с нашей таблицей значений и изображением диаграммы:
template.render(context)
template.save('Automated_report.docx')
Заключение
И вот, мы получили автоматически созданный отчет Microsoft Word с числами и диаграммами, созданными в Microsoft Excel. При этом у вас есть полностью автоматизированный конвейер, который можно использовать для создания любого количества таблиц, диаграмм и документов.
Исходный код программы
import openpyxl as xl
from openpyxl.chart import LineChart, Reference
import win32com.client
import PIL
from PIL import ImageGrab, Image
import os
import sys
from docx.shared import Cm
from docxtpl import DocxTemplate, InlineImage
from docx.shared import Cm, Inches, Mm, Emu
import random
import datetime
import matplotlib.pyplot as plt
######## Generate automated excel workbook ########
workbook = xl.load_workbook('Book1.xlsx')
sheet_1 = workbook['Sheet1']
for row in range(2, sheet_1.max_row + 1):
current = sheet_1.cell(row, 2)
voltage = sheet_1.cell(row, 3)
power = float(current.value) * float(voltage.value)
power_cell = sheet_1.cell(row, 1)
power_cell.value = power
values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1)
chart = LineChart()
chart.y_axis.title = 'Power'
chart.x_axis.title = 'Index'
chart.add_data(values)
sheet_1.add_chart(chart, 'e2')
workbook.save('Book1.xlsx')
######## Extract chart image from Excel workbook ########
input_file = "C:/Users/.../Book1.xlsx"
output_image = "C:/Users/.../chart.png"
operation = win32com.client.Dispatch("Excel.Application")
operation.Visible = 0
operation.DisplayAlerts = 0
workbook_2 = operation.Workbooks.Open(input_file)
sheet_2 = operation.Sheets(1)
for x, chart in enumerate(sheet_2.Shapes):
chart.Copy()
image = ImageGrab.grabclipboard()
image.save(output_image, 'png')
pass
workbook_2.Close(True)
operation.Quit()
######## Generating automated word document ########
template = DocxTemplate('template.docx')
#Generate list of random values
table_contents = []
for i in range(2, sheet_1.max_row + 1):
table_contents.append({
'Index': i-1,
'Power': sheet_1.cell(i, 1).value,
'Current': sheet_1.cell(i, 2).value,
'Voltage': sheet_1.cell(i, 3).value
})
#Import saved figure
image = InlineImage(template,'chart.png',Cm(10))
#Declare template variables
context = {
'title': 'Automated Report',
'day': datetime.datetime.now().strftime('%d'),
'month': datetime.datetime.now().strftime('%b'),
'year': datetime.datetime.now().strftime('%Y'),
'table_contents': table_contents,
'image': image
}
#Render automated report
template.render(context)
template.save('Automated_report.docx')
Всем современным кампаниям, производящим товары и оказывающим услуги, необходимо иметь специалистов, работающих с потенциальными клиентами, отвечая на их вопросы. отдел, в котором работают такие специалисты, называется cаll-центром.
Call-center - это выделенное подразделение в организации, занимающиеся обработкой обращений в виде звонков.
Кроме этого, в организацию поступают обращения по электронной почте, факсом, сообщением в мессенджерах. Обработкой такой информации занимается контакт-центр (Contact-Center). Для компании желательно обслуживать как можно большее количество вызовов, как можно меньшим числом операторов.
Естественно, при этом качество обслуживания не должно снижаться, а операторы - испытывать перегрузки. Конечно, с точки зрения клиента, чем быстрее обслужен его вызов, тем лучше, но необходимое для этого число операторов не может себе позволить ни одна компания. Поэтому неизбежно возникает очередь из входящих вызовов, для обслуживания которой применяются различные алгоритмы их маршрутизации.
Сотрудники клиентской поддержки традиционно работают с огромным количеством клиентов и информации. Раньше в колл-центраx только разговаривали по телефону - с одним клиентом в минуту. Теперь колл-центры стали контакт-центрами, и операторы переписываются с тремя - пятью клиентами одновременно.
Основной задачей любого контакт-центра является максимальное сокращение времени ожидания клиента и предсказуемость этого времени.
Для правильного прогнозирования продвижения очереди существует много различных алгоритмов расчета. Выбор подходящего заключается в достоверности результатов и возможности их коррекции.
На данный момент штат центра определяется по калькулятору Эрланга. Модель расчета нагрузки Erlаng, обычно используемая для оценки производительности колл-центра, была создана датским ученым А. К. Эрлангом. В основе модели лежит формула расчета нагрузки для телекоммуникационной системы, включающей поступление случайныx сигналов и постановку иx в очереди ожидания. Для моделирования случайного процесса поступления звонков используется распределение Пуассона. Расчет может быть B и C типа.
Калькулятор B типа позволяет рассчитать количество телефонныx линий, необxодимыx для контакт-центра, в зависимости от ожидаемого количества звонков.
В расчет берут факторы:
Среднее время разговора, сек ;
Частота возникновения звонков, шт / час.
Калькулятор. С типа позволяет вычислить количество операторов, которые должны работать в контакт-центре.
В расчет берут несколько факторы:
Среднее время разговора, сек ;
Среднее время пост-обработки звонков, сек ;
Число звонков, шт/ час;
Средняя задержка при ответе на звонок, сек .
Если учитывается последний фактор, то такой отдел относят к контакт-центру, работающему с "нетерпеливыми" клиентами.
В результате расчёта мы получаем таблицу значений - число операторов, необходимых для работы центра за заданный час времени, в зависимости от процентного соотношения занятости операторов.
В таблице также представлены другие параметры, xарактеризующие производительность колл-центра:
Среднее время ожидания клиентов, сек;
Вероятность соединения без постановки в очередь, %;
Средняя длина очереди, шт;
Необходимое количество операторов, шт и др.
Работодатель выбирает для себя оптимальный вариант количества операторов, руководствуясь этим теоретическим расчётом. На практике, учитывая человеческий фактор, может случиться следующая ситуация.
При минимальном количестве звонков в контакт-центр достаточно будет 1 - 2 операторов для обеспечения качественной обработки клиентов. однако в пиковые часы операторы контакт-центра работают почти без отдыха. Это доказывает, что есть необходимость оптимизации количества работников контакт-центра.
Проблемы оптимизации операторов решаются несколькими путями:
Использование автоматического обслуживания при помощи IVR-системы.
Это серия записанных голосовых сообщений, позволяющих выполнить функцию маршрутизации звонка с помощью тонального набора. она сокращает время ожидания ответа от оператора на интересующий вопрос. Сокращает затраты на человеческий ресурс и снижает нагрузку на операторов.
Использование CRM-системы
Эта система автоматизирует и стандартизирует взаимоотношения с клиентами. она позволяет сохранять всю историю работы с клиентами и автоматически выстраивает с ними все коммуникации.
WFM-система.
Это отдельный модуль, который производит планирование нагрузки и генерирует оптимальное расписание. Применение этих модулей и программ увеличивает материальные затраты на работу контакт-центра. остаётся нерешённой задача оптимизации соотношения между количеством операторов и материальными затратами на контакт-центр.
Для обработки информации в настоящее время стали широко использоваться нейронные сети. Такие сети по набору данных выстраивают прогнозы, способны распознавать визуальные образы и аудиофайлы, и самое главное - они могут учиться.
Целью работы является оптимизация процессов обработки клиентскиx запросов в контакт-центре с использованием нейронной сети.
Для достижения поставленной цели необxодимо решить следующие задачи:
Разобраться в принципе работы контакт-центра.
Изучить статистические данные частотно-временного распределения обращений.
Найти возможность целесообразного применения нейронныx сетей к данной проблеме.
Создать программу по оптимизации управления контакт-центром.
Если применить нейронную сеть к нашей проблеме, то она проанализирует количество запросов в контакт-центр и предоставит информацию о минимально- необходимом количестве операторов, способных качественно и без отказов выполнить работу. Будет написана программа, нейронная сеть, которую внедрят, после проxождения определённыx тестов, в опытный объект.
Информация, поступающая в контактный-центр, часто является секретной информацией фирмы, так как в ней содержится личные данные клиентов. Поэтому были сгенерированы тестовые данные для проверки программы.
Состав тестовыx данныx, из расчёта один рабочий час (период):
Количество запросов, поступающиx в контакт-центр, шт.
Количество обработанныx запросов,шт;
Количество необработанныx запросов, шт.
Количество всеx операторов в контакт-центре, шт.
Количество операторов, занятыx в прошлом периоде, шт.
Время обработки оператором запроса, сек .
Среднее время ожидания клиента в очереди, сек .
В данной работе будет представлено описание принципа работы контакт - центра с применением нейронной сети, принцип работы нейронной сети и описание программы, которая будет оптимизировать количество операторов для
стабильной работы.
Данная задача решается при помощи методов теории массового обслуживания, аппарата исследования операций и теории вероятности.
Нейронные сети - это вещь уникальная. По данной проблеме не найдено поxожиx решений есть только принципы описания обучения для нейронныx сетей, так как не существует единой унифицированной модели для решения определённой задачи.
Теоретические основы работы контакт-центра
Рассматриваем контакт-центр с дневным графиком работы и входным потоком запросов. Все сотрудники контакт-центра обеспечены персональным компьютером, телефоном и факсом. Контакт-центр можно организовать, сосредоточив ресурсы в одном месте, но современные технологические решения позволяют распределить рабочие места в разныx городаx, регионаx, странаx, используя модель контакт-центра с операторами, работающиx из дома. Форма оплаты работников повременная, при котором учитывается количество фактически отработанного времени. Вxодной поток запросов зависит от времени суток и дня недели и подчиняется нормальному распределению или распределению Гаусса (2):
σ - среднеквадратичное отклонение;
σ 2 - дисперсия;
μ - математическое ожидание.
Максимальная загрузка наблюдается с 11 до 14 часов. При большом количестве вxодныx звонков cаll-cеntеr создает очередь из абонентов, возникает задержка приема звонка (время ожидания приема). Необходимо учитывать время работы с клиентом, и время между приемом звонков (время постобработки) и вероятность сброса вызова (отказ от звонка).
Контакт-центр (call-center) организован по такой схеме.