Детальные статусы звонка
Начиная с версий 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
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. 1.
    Оставил голосовое сообщение
  2. 2.
    Перезвонить позже
  3. 3.
    Нет на месте
  4. 4.
    Разговор состоялся
  5. 5.
    Неверный номер
  6. 6.
    Не дозвонился
  7. 7.
    Номер занят
Кроме статуса, в Амо также есть поле "Результат звонка", которое содержит произвольный текст. Мы постарались использовать этот текст чтобы сделать статус интуитивно понятным.
Данные звонка Amo по результату звонка определяются так:
Результат звонка
Доп условия
Статус amoCRM
Текст
200 Успех
Звонок входящий неотвеченный
6 Не дозвонился
Успешный звонок
200 Успех
4 Разговор состоялся
Успешный звонок
404 Не найдено
5 Неверный номер
Номер не обслуживается
408 Таймаут запроса
480 Временно недоступен
3 Нет на месте
Абонент не ответил
488 Невозможно принять
5 Неверный номер
Ошибка оператора связи
486 Абонент занят
Звонок входящий неотвеченный
6 Не дозвонился
Номер занят
486 Абонент занят
7 Номер занят
Номер занят
603 Вызов отклонён
2 Перезвонить позже
Вызов отклонён
0 Неизвестно
Отвеченный звонок
4 Разговор состоялся
0 Неизвестно
Неотвеченный звонок
6 Не дозвонился
Last modified 7h ago