Детальные статусы звонка

Начиная с версий Itgrix bx 3.5.1 и Itgrix amo 2.8.0, мы расширили список распознаваемых статусов звонков от всего двух (Успешный и Пропущенный) до почти всех, какие поддерживаются в CRM.

Теперь нам нужно Extra

Одновременно с этим возросли наши требования к настройке Asterisk: для выяснения результата звонка нам необходимо наличие поля "extra" в таблице CEL. Если вдруг у вас его нет, то статусы звонка будут работать по-старому с только двумя базовыми значениями.

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

Если новые статусы звонка пока не соответствуют вашим ожиданиям, можно временно их отключить, сделав поле extra недоступным.

Для этого нужно в конфиге в поле database.column_name_aliases.cel_extra прописать значение "id" вместо "extra" - тогда модуль вместо extra будет смотреть в поле id, не увидит ожидаемых данных и будет работать без них по-старому.

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

Статусы в Asterisk

В основе статусов звонков лежит новое для нас свойство звонка - результат. Это итог попытки абонента А позвонить абоненту Б, выражаемый кодом из протокола SIP. Коды по виду и смыслу похожи на статус-коды протокола HTTP, например 404 означает "не найдено", но в приложении к телефонии.
Результат звонка не является в прямом смысле статус-кодом SIP, но набор ситуаций, описываемых этими кодами, очень подходит по смыслу. Чтобы определить результат звонка, мы опираемся на содержимое поля extra, где есть задаваемые Asterisk'ом значения hangup_cause и dial_status.

hangup_cause принимает значения от 0 до 127, и некоторые из них соответствуют одному или нескольким статус-кодам SIP.
dial_status может быть пустым или принимать одно из 9 значений, таких как "ANSWERED" или "CANCEL".
Оба этих поля вместе позволяют нам определить результат звонка:

hangup cause dial status Результат звонка
0 Не определено 0 Неизвестно - обрабатываем звонок по-старому
любой CANCEL 480 Временно недоступен
1 Unallocated
20 SubscriberAbsent
ANSWER 200 Успех
1 Unallocated
20 SubscriberAbsent
404 Не найдено
16 NormalClearing пусто
ANSWER
200 Успех
16 NormalClearing NOANSWER 408 Таймаут запроса
16 NormalClearing BUSY 486 Абонент занят
17 UserBusy 486 Абонент занят
18 NoUserResponse 408 Таймаут запроса
19 NoAnswer 480 Временно недоступен
21 CallRejected 603 Вызов отклонён
26 AnsweredElsewhere 200 Успех
34 NormalCircuitCongestion
127 Interworking
500 Ошибка сервера
44 RequestedChanUnavail ANSWER 200 Успех
44 RequestedChanUnavail 500 Ошибка сервера
58 BearercapabilityNotavail 488 Невозможно принять
66 ChanNotImplemented ANSWER 200 Успех
66 ChanNotImplemented 405 Метод не поддерживается

Очевидно, что здесь учтены не все 1280 возможных комбинаций. Некоторые значения hangup_cause не используются Asterisk, некоторые комбинации не имеют смысла и невозможны, но самое главное - наше предварительное исследование показало, что этот набор вариантов покрывает все распространённые случаи.
По мере обнаружения, новые случаи будут добавляться в список, а пока они будут обрабатываться по-старому, с двумя вариантами.

Статусы в CRM

Каждая CRM конечно же имеет своё представление о том, какие у звонка могут быть статусы. Они зависят от точки зрения конкретной CRM на роль звонков в бизнес-процессе и модель взаимодействия сотрудника со звонком.
Важно, что в CRM как задавать, так и читать статус звонка могут пользователи, а не только автоматика, и поэтому список вариантов должен быть интуитивно понятным и не слишком большим.
На этот уменьшенный набор статусов мы транслируем наш набор результатов звонка.

Bitrix24

Статусы звонков в Битрикс24 основаны на статус-кодах SIP, так же как и наш результат звонка, с небольшими особенностями:

Статус Описание от Битрикс24 Пример отображаемого текста
200 Успешный звонок запрос был успешно принят, распознан и подтвержден Входящий звонок от <номер> завершен. Успешный звонок
304 Пропущенный звонок для этого статуса мы взяли нестандартный код Пропущен входящий звонок от <номер>. Пропущенный звонок
402 Недостаточно средств на счету требуется оплата Вы не можете совершить звонок, на вашем счету недостаточно средств.
403 Запрещено абонент не зарегистрирован Звонок на номер <номер> завершен. Запрещено
404 Неверный номер вызываемый абонент не найден, нет такого SIP-номера Звонок на номер <номер> невозможен. Данное направление не обслуживается.
423 Заблокировано сервер отклоняет запрос, так как слишком короткий интервал (или номер в черном списке Битрикс24) нет
480 Временно не доступен временно недоступное направление, попробуйте позвонить позже Абонент <номер> временно недоступен.
484 Данное направление не доступно принят запрос с неполным адресом Звонок на номер <номер> невозможен. Данное направление не обслуживается.
486 Занято абонент занят Абонент <номер> занят другим звонком.
500 Внутренняя ошибка сервера звонок на абонента, который не зарегистрирован в сети, либо выключил телефон нет
503 Данное направление не доступно сервер не может в данный момент обслужить вызов из-за перегрузки или проведения технического обслуживания Звонок на номер <номер> завершен. Данное направление не доступно
603 Отклонено вызов отменен из-за "падения" сети Абонент <номер> отменил вызов.
603-S Вызов отменен вызываемый пользователь не желает принимать входящие вызовы, не указывая причину отказа Звонок на номер <номер> отменен.

Итоговый статус определяется по результату звонка:

Результат звонка Доп условия Статус BX24
200 Успех Звонок входящий неотвеченный 304 Пропущенный звонок
200 Успех 200 Успешный звонок
404 Не найдено 404 Неверный номер
405 Метод не поддерживается 405
408 Таймаут запроса 304 Пропущенный звонок
480 Временно недоступен 480 Временно не доступен
486 Абонент занят Звонок входящий неотвеченный 304 Пропущенный звонок
486 Абонент занят 486 Занято
488 Невозможно принять 484 Данное направление не доступно
500 Ошибка сервера 500 Внутренняя ошибка сервера
603 Вызов отклонён 603 Отклонено
0 Неизвестно Отвеченный звонок 200 Успешный звонок
0 Неизвестно Неотвеченный звонок 304 Пропущенный звонок

amoCRM

Статусы звонка в Amo не основаны на статус-кодах SIP, а нацелены по смыслу на заполнение пользователем:

  1. Оставил голосовое сообщение

  2. Перезвонить позже

  3. Нет на месте

  4. Разговор состоялся

  5. Неверный номер

  6. Не дозвонился

  7. Номер занят

Кроме статуса, в Амо также есть поле "Результат звонка", которое содержит произвольный текст. Мы постарались использовать этот текст чтобы сделать статус интуитивно понятным.

Данные звонка Amo по результату звонка определяются так:

Результат звонка Доп условия Статус amoCRM Текст
200 Успех Звонок входящий неотвеченный 6 Не дозвонился Успешный звонок
200 Успех 4 Разговор состоялся Успешный звонок
404 Не найдено 5 Неверный номер Номер не обслуживается
408 Таймаут запроса
480 Временно недоступен
3 Нет на месте Абонент не ответил
488 Невозможно принять 5 Неверный номер Ошибка оператора связи
486 Абонент занят Звонок входящий неотвеченный 6 Не дозвонился Номер занят
486 Абонент занят 7 Номер занят Номер занят
603 Вызов отклонён 2 Перезвонить позже Вызов отклонён
0 Неизвестно Отвеченный звонок 4 Разговор состоялся
0 Неизвестно Неотвеченный звонок 6 Не дозвонился
К списку статей