Александр Мисюрин
22.06.2022
53040

Создание списка заявок, по вызовам абонентов

В данной статье рассмотрим возможный механизм, простого создания заявок от абонентов, используя голосовое меню, а также оповещение о новых заявках в Telegram. Для дополнительной информации также добавим механизмы проверки, обращался ли данный клиент ранее и выполнена ли прошлая заявка.  Входящие вызовы направляем на голосовое меню, в котором указываем выбор пунктов заявок. При отсутствии нужного выбора […]

создание списка заявок по вызовам

В данной статье рассмотрим возможный механизм, простого создания заявок от абонентов, используя голосовое меню, а также оповещение о новых заявках в Telegram.

Заявки будем отправлять на почту, однако в вашем случае, можно использовать систему учета заявок (например HelpDesk)

Для дополнительной информации также добавим механизмы проверки, обращался ли данный клиент ранее и выполнена ли прошлая заявка. 

Для тестирования использовалась система CentOS 7.9, Asterisk 16 собранный с ODBC коннектором, FreePBX 14, MariaDB 10, PHP 5.6

Входящие вызовы направляем на голосовое меню, в котором указываем выбор пунктов заявок. При отсутствии нужного выбора распределяем на оператора. В разговоре оператор узнает необходимую информацию и инициирует создание заявки, к которой можно будет прикрепить определенную голосовую запись, для пояснения.

Голосовое меню
Голосовое меню

В диалплане прописываем создание тикета, по закрепленным номерам, направление на них указываем в Custom Destination.

Пример направления на создание тикета
Пример направления на создание тикета

В самом контексте необходимо добавить пару запросов в базу:

  1. Проверка на раннее обращение клиента, для уведомления (или использования в других системах)
  2. Создание нового обращения и запись его в базу

Когда обращение в базу внесено, то отправлять заявку в Telegram или на почту.

Создадим таблицу в базе asteriskcdrdb, так как в нашей системе подключение по ODBC к ней уже настроено.

create table tickets (
num varchar(80) NOT NULL,
date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
reason varchar(80) NOT NULL
);

Создаем запрос в базу, на существование записи по клиенту.

[get_ticket]
dsn=asteriskcdrdb
readsql=SELECT num, reason, date from tickets where num like '%${ARG1}%' order by 
date desc limit 1;

И запрос на добавление новой записи:

[put_ticket]
dsn=asteriskcdrdb
writesql=INSERT INTO tickets VALUES ('${ARG1}',NOW(),${ARG2});

После добавления перечитаем конфиги:

core reload
Если вы создали функции впервые в системе, то возможно потребуется перезапуск ядра для инициации (core restart)

Прописываем обращение к функциям в диалплане и отправку в группу Telegram. Как создать и настроить подключение к боту Telegram можно почитать в этой статье:

[tickets]
exten => 1,1,ExecIf($[${LEN(${CALLERID(num)})} = 11]?Set(CALLERID(num)=${CALLERID(num):1}))
same => n,Set(mark=${ODBC_get_ticket(${CALLERID(num)})})
same => n,GotoIf($["${mark}" = ""]?nope)
same => n,Set(reason=${CUT(mark,\,,2)})
same => n,Set(date=${CUT(mark,\,,3)})
same => n,System(/usr/bin/curl -X GET 
https://api.telegram.org/bot<botTocken>/sendMessage -F chat_id=-<chat_id> -F 
text="Создана заявка по теме reg. trouble. Номер клиента: ${CALLERID(num)}. 
Ранее обращался: ${date}, по причине: ${reason}." & disown -h)
same => n,Set(ODBC_put_ticket(${CALLERID(num)},reg.trouble)=)
same => n,Hangup
same => n(nope),System(/usr/bin/curl -X GET 
https://api.telegram.org/bot<botTocken>/sendMessage -F chat_id=-<chat_id> -F 
text="Создана заявка по теме reg. trouble. Номер клиента: ${CALLERID(num)}. Ранее 
не обращался" & disown -h)
same => n,Set(ODBC_put_ticket(${CALLERID(num)},reg.trouble)=)
same => n,Hangup

Аналогично прописываем другие обращения, меняться будут лишь причины

…
same => n,System(/usr/bin/curl -X GET 
https://api.telegram.org/bot<botTocken>/sendMessage -F chat_id=-<chat_id> -F 
text="Создана заявка по теме call.trouble. Номер клиента: ${CALLERID(num)}. Ранее обращался: ${date}, по причине: ${reason}." & disown -h)
same => n,Set(ODBC_put_ticket(${CALLERID(num)},call.trouble)=)
same => n,Hangup
same => n(nope),System(/usr/bin/curl -X GET 
https://api.telegram.org/bot<botTocken>/sendMessage -F chat_id=-<chat_id> -F text="Создана заявка по теме call.trouble. Номер клиента: ${CALLERID(num)}. Ранее не обращался" & disown -h)
same => n,Set(ODBC_put_ticket(${CALLERID(num)},call.trouble)=)
same => n,Hangup

Соответственно если нужно больше, добавляем.

В данном случае при вызове, создается заявка в группу Telegram и вносится запись в базу.

Уведомление в telegram
Уведомление в telegram
Запись в базе
Запись в базе

Рассмотрим случай, когда клиент не выбрал никакого пункта или решил поговорить с оператором, для создания своей заявки.

После разговора с оператором, необходимо выполнить ту же отправку в группу, но при этом прикрепить запись разговора, чтобы выполняющий заявку человек мог узнать подробности разговора. Отправку можем инициировать по завершению разговора с оператором. Использовать будем hangup_handler.

Для этого, отправку на группу операторов будем осуществлять через Custom Destination:

Custom Destination для очередей
Custom Destination для очередей

Необходимо это, чтобы прописать метку, на которую будем опираться после разговора оператора, таким образом нам необходимо внести эту метку, а также изменения в макрос, срабатывающий при подъеме трубки.

В вашем случае макрос может отличаться или отсутствовать, в таком случае пропишите его в приложении dial, через опцию M()

Метка в контексте tickets:

exten => _XXX,1,Set(__hndlr=yes)
same => n,ExecIf($[${LEN(${CALLERID(num)})} = 11]?Set(__num=${CALLERID(num):1}));Наследуемая переменная для номера, чтобы использовать его далее
same => n,Goto(ext-queues,${EXTEN},1)
same => n,Hangup

Дополнение в макросе подъема трубки macro-auto-blkvm:

…
same => n,ExecIf($["${hndlr}" = "yes"]?Set(CHANNEL(hangup_handler_push)=tickets_hndlr,s,1(${CALLERID(num)})))
…

После разговора сработает handler и отправит обработку далее, в ней укажем запись в базу и отправку в Telegram:

[tickets_hndlr]
exten => s,1,DumpChan()
same => s,ExecIf($[${LEN(${num})} = 11]?Set(num=${num:1}))
same => n,Set(mark=${ODBC_get_ticket(${num})})
same => n,GotoIf($["${mark}" = ""]?nope)
same => n,Set(reason=${CUT(mark,\,,2)})
same => n,Set(date=${CUT(mark,\,,3)})
same => n,System(/usr/bin/curl -X GET https://api.telegram.org/ bot<botTOCKEN>/sendMessage -F chat_id=-639074316 -F text="Создана заявка по теме custom.reason. Номер клиента: ${num}. Ранее обращался: ${date}, по причине: ${reason}. Запись будет отправлена ниже." & disown -h)
same => n,System(/usr/bin/curl -X POST -H "Content-Type: multipart/form-data" -F [email protected]"/var/spool/asterisk/monitor/${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT}" https://api.telegram.org/ bot<botTOCKEN>/sendDocument?chat_id=-639074316 & disown -h)
same => n,Set(ODBC_put_ticket(${num},custom.reason)=)
same => n,Return()
same => n(nope),System(/usr/bin/curl -X GET https://api.telegram.org/ bot<botTOCKEN>/sendMessage -F chat_id=-639074316 -F text="Создана заявка по теме custom.reason. Номер клиента: ${num}. Ранее не обращался. Запись будет отправлена ниже." & disown -h)
same => n,System(/usr/bin/curl -X POST -H "Content-Type: multipart/form-data" -F [email protected]"/var/spool/asterisk/monitor/${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT}" https://api.telegram.org/bot<botTOCKEN>/sendVoice?chat_id=-639074316 & disown -h)
same => n,Set(ODBC_put_ticket(${num},custom.reason)=)
same => n,Return()
Отправка в группу записи вызова и заявки
Отправка в группу записи вызова и заявки

Заявки создаются, в дальнейшем можем создать способ принятия заявок и отметок к ходу работ по ним.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.