Пропущенные звонки для компании - это всегда плохо, однако полностью избавиться от этого явления практически не возможно. Чтобы повысить уровень обслуживания клиентов правильным решением будет научиться правильно распознавать и реагировать на пропущенные звонки. В компании, где я работаю, для телефонной связи используется ip-АТС Asterisk, а в качестве корпоративного мессенджера - сервис Slack.
Далее нам нужно создать в slack интеграцию, мы будем использовать отправку через webhook.
Берем отсюда url и пишем скрипт - для этого можно использовать различные языки программирования, я сделал на python. Чтобы все работало нам потребуется установить библиотеки pyagi и slackweb.
Итак, у нас простая задача: отделить звонки, которые мы будем считать пропущенными и отправить о них уведомления в slack в определенный канал.
Пропущенным звонок будем считать, если:
1. клиент позвонил, некоторое время слушал музыку, устал ждать и повесил трубку
2. клиент позвонил, очень долго ждал, после чего звонок завершился по тайм-ауту
Статус звонка будем отслеживать по переменной ${DIALSTATUS}, в которую записывается результат выполнения последней команды Dial, в первом случае ее значение устанавливается в "CANCEL", во втором - "NOANSWER". Время ожидания клиента можно взять из переменной ${CDR(duration)}, которая должна быть в канале при включенной CDR-статистике.
Добавляем обработку екстеншена h в контекст отдела продаж в нашем диалплане:
exten => h,1,NoOp(IVR Sales Hangup) exten => h,n,ExecIf($[$[$["${DIALSTATUS}" = "CANCEL"] & $["${CDR(duration)}" > "25"]] | $["${DIALSTATUS}" = "NOANSWER"]]?AGI(slack_sales_notifications.agi))Теперь если звонку присвоен статус - "отменен" и время ожидания более 25 секунд, либо установлен статус - "не отвечен" => будет выполняться AGI-скрипт для отправки уведомлений.
Далее нам нужно создать в slack интеграцию, мы будем использовать отправку через webhook.
Берем отсюда url и пишем скрипт - для этого можно использовать различные языки программирования, я сделал на python. Чтобы все работало нам потребуется установить библиотеки pyagi и slackweb.
#!/usr/bin/env python # -*- coding: utf-8 -*- from pyagi.pyagi import AGI import slackweb import logging slack = slackweb.Slack(url="https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX") log_file = '/var/log/asterisk/slack_sales_notifications.log' def main(): log = logging.getLogger() log.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') fh = logging.FileHandler(log_file) fh.setLevel(logging.DEBUG) fh.setFormatter(formatter) log.addHandler(fh) try: agi = AGI() number = agi.env["agi_callerid"] name = agi.env["agi_calleridname"] time = agi.get_variable("CDR(duration)") message = "Пропущенный звонок:\n" + number + " - " + name except: log.error('Error set variables') exit(1) try: slack.notify(text=message, channel="#sales", username="Mr. Slack", icon_emoji=":phone-notifications:") log.info('Send message: ' + number + ' - ' + name + " Duration:" + time) except: log.error('Error send message') exit(1) if __name__ == '__main__': main()Скрипт берет установленные в канале переменные Caller ID, формирует сообщение и отправляет его в slack, информация о работе пишется в заданный лог-файл.
Комментариев нет:
Отправить комментарий