FAQ по ошибкам телефонии

Skip to end of metadata
Go to start of metadata
Вы просматриваете старую версию данной страницы. Смотрите текущую версию. Сравнить с текущим  |   просмотр истории страницы

Как посмотреть данные звонка с ошибкой?

Просмотреть звонки с ошибкой, а так же запустить их повторную обработку можно в [массиве ошибочных данных].

Ошибки обработки cdr

Обработкой CDR занимается служба cdr_parsers. Отладку будем производить по её логу.

Лог службы
/app/asr_billing/var/log/daemons.voip.cdr_parsers.log

Общее описание ошибок

Звонки хранятся в таблице voip_log. При обработке ошибки записываются в:

  • Поле error_code - числовой код ошибки или NULL при успешной обработке звонка.
  • Лог службы [worker] - более детальное описание ошибки. Содержит краткую информацию по звонку.
    /app/asr_billing/var/log/worker.log
    

FAQ по кодам ошибок

В ошибках указан ID и описание. Коды ошибок и текстовое описание можно получить следующим запрос.

sqlexec "set list on; select * from errors"

Общие ошибки данных о звонке, а так же ошибки обработки звонка на стороне абонента.

Описание Причины возникнонвения
1 Не найден пользователь! Возможны варианты:
  • Номер источника или назначения есть в номерной ёмкости, но не назначен учётной записи
  • На момент звонка номер был удалён из учётной записи или абонент был удалён полностью. В таком случае данные по номеру будут записаны в историю измения учётных записей. Биллинг сопоставит звонок с историческими данными, а не с текущими.
  • Номера нет в номерной ёмкости и отключена опция "Через АТС проходят транзитные звонки"
2 Не найдена услуга! У абонента не подключена услуга IP телефонии с подходящим для звонка типом трафика
3 Не найдено направление! Устарела, актуальная ошибка - "Не найдена стоимость направления"
4 Не найдена стоимость направления! В услуге IP телефония подключенной абоненту не найдена стоимость направления
5 Не найден NAS! В поле звонка NAS_IP не указан IP адрес НАС
6 Не найден оператор связи для обсчета! Транк из полей SRC_CHAN и DST_CHAN не подошел ни под одну маску транка и биллинг не может перейти к межоператорскому расчёту
7 Не настроены услуги у оператора связи для обсчета! Устарела
8 Найденная услуга не активна! Подходящая для звонка услуга IP телефонии не активна
9 Не указаны источник или назначение В звонке пустые поля SRC или DST. Могли быть пустыми в cdr или были стёрты во время преобразования номера
10 Некорректная длина номера Длина номера в SRC или DST не соответствует формату e.164, то есть больше 15 цифр

Ошибки межоператорских расчётов.

Описание Причины возниконвения
11 Не найден оператор стороны A Не найден оператор источника
12 Не найден оператор стороны Б Не найден оператор назначения
13 Не настроены услуги у оператора А Не найдена услуга телефонии для оператора источника
14 Не настроены услуги у оператора Б Не найдена услуга телефонии для оператора назначения
15 Не найдено направление у оператора А Не найдена стоимость направления в услуге телефонии оператора источника
16 Не найдено направление у оператора Б Не найдена стоимость направления в услуге телефонии оператора назначения

Остальные ошибки.

Описание Причины возниконвения
255 Прочие ошибки Возникает при прочих проблемах обработки звонка

FAQ по ошибкам службы worker

Ошибка: Не удалось определить тип звонка для VoipLog [ id=77777, src=89994699289, dst=78619611110 ]

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

Решение

  1. Определяем какой из номеров(78619611110 или 89994699289) принадлежит вашему абоненту.
  2. В данном примере номер абонента: 89994699289
  3. Так как номер не соответствует стандартному виду e.164, приводим его к нему, используя модификаторы номеров: Конвертация номеров(модификаторы, преобразования к e.164)
  4. Создаем или редактируем пул телефонных номеров так, чтобы он включал в себя этот номер.
  5. Присваиваем номер абоненту

Ошибка: error_code=Не найдена стоимость направления! (pk=4, model=Errors)

Это одна из ошибок, возникающих при обработке звонка воркером. Ошибочные звонки вы можете увидеть в массиве ошибочных данных, также ошибки обработки должны приходить на почту системному администратору.
Ниже приведен пример строчки из лога /var/log/worker.log с ошибкой обработки звонка:

Ошибка обработки звонка
2016-03-22 13:37:44,818 - worker - account_voip - ERROR - FAILED VOIP LOG PROCESSING обработали voip_log=VoipLog [ id=3264974, src=74956681200, dst=74956681288, s_time=2016-03-18 11:03:33, e_time=2016-03-18 11:05:22, duration=109, bill_sec=109, disposition=, suid=8fdc98bd1d107fd2bdcdf5459656d4c2, nas_ip=10.0.0.1, ama_flags=None, chan=Ростелеком, dst_chan=060770, dst_ctx=, billed=0, user=Учетная запись 74956681200 (None) (pk=2153, model=Users), abonent=Бил Мюррей (pk=11111, model=Abonents), direction=None, bill_sum=0, resolved=0, error_code=Не найдена стоимость направления! (pk=4, model=Errors), step=None, bill_sec_round=109, operator_usluga_id=11605, operator_step_price=0, operator_v=2, operator_id=4364, step_price=0, v_type=Исходящий (pk=2, model=VType), usluga=None, recalc=0, dst_orig=84956681288, src_orig=4956681200, src_chan=060617, src_operator=Оператор телефонии (pk=4364, model=Abonents) ]

Сделаем переносы для удобства чтения(c описанием полей можно ознакомиться в этой статье Схема таблицы журнала звонков):

2016-03-22 13:37:44,818 - worker - account_voip - ERROR - FAILED VOIP LOG PROCESSING обработали voip_log=VoipLog

Решение

Необходимо:

  1. Внимательно проверить номера в src и dst полях звонка на соответствие рекомендации e.164. В примере с этим все ОК, видно что в src_orig номер начинается с 8, а в src уже с кода страны - это результат применения модификаторов номеров, настроить их можно по этой статье: Конвертация номеров(модификаторы, преобразования к e.164)
  2. Зайти к абоненту совершившему звонок, в данном звонке абонент abonent=Бил Мюррей (pk=11111, model=Abonents)
  3. Войти на вкладку "Услуги" и проверить наличие активных услуг телефонии у абонента.
  4. Если есть активные услуги, то заходим на вкладку "Расход" и проверяем стоимость направления по статье Проверка стоимости направления для абонента. Перерасчет VOIP
  5. Если стоимости направления в услугах не найдено, то добавляем стоимость направления в необходимую услугу руководствуясь статьёй документации Использование экспорта и импорта csv и xlsx файлов с тарифами VOIP. Загрузка цен
  6. После загрузки цен, опять проверяем наличие стоимости по статье Проверка стоимости направления для абонента. Перерасчет VOIP.
  7. Стоимость найдена, необходимо запустить перерасчет VOIP, как это сделать описано в этой же статье: Проверка стоимости направления для абонента. Перерасчет VOIP

Ошибка: Не найдена цена на направление у оператора Abonents [ id=3333, name=Вымпелком ] для звонка VoipLog [ id=3265150 ]

Не настроены услуги телефонии у оператора.

Решение

Ошибка решается точно также как error_code=Не найдена стоимость направления! (pk=4, model=Errors), только вместо абонента все действия необходимо проделывать над оператором. Оператора можно определить через название оператора в поле chan и id оператора в поле operator_id

Ещё возможное решение: в услугах оператора не указаны маски транков, укажите их

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

В каком формате записывать маски направлений?

Все маски направлений необходимо приводить к рекомендации e.164. Если нет возможности настроить преобразования номеров перед отправкой звонков в биллинг на оборудовании, как модификаторы номеров в Eltex SMG-1016, то есть возможность настройки конвертации в биллинге, сделать это можно руководствуясь этой статьей: Конвертация номеров(модификаторы, преобразования к e.164)

Проблема с межоператорским расчетом звонка VoipLog. Доступные операторы: Abonents [ id=3, name=ООО "Лучший провайдер" ]

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

Ошибка: Не найдена услуга телефонии у оператора

Лог app/asr_billing/var/monitoring_dump/check_error_worker.sh_xxxx.log:

09:17:56,535 - worker - account_voip - ERROR - Не найдена услуга телефонии у оператора Abonents [ id=3, name=ООО "Лучший провайдер" ] для звонка VoipLog [ id=50469 ]

Решение

Данная ошибка возникает, когда отсутствуют направления звонков в настройках услуги телефонии.
Для устранения проблемы, необходимо задать направления и стоимость звонков по инструкции Использование экспорта и импорта csv и xlsx файлов с тарифами VOIP. Загрузка цен

Ошибка: Не найдена услуга!

Лог app/asr_billing/var/monitoring_dump/check_error_worker.sh_xxxx.log:

09:17:56,535 - worker - account_voip - ERROR - Не найдена услуга!

Решение

Ошибка может возникать в следующих случаях:
1) У абонент нет услуги телефонии
2) У абонента есть услуга телефонии, но она неактивна
3) У абонента есть активная услуга телефонии, но в ней не указана или указана неверно дата начала активности на направление или на категорию

Для транзитного звонка не определен один из операторов

Проблема говорит о том что биллинг обработал CDR с транзитным трафиком, но не нашел оператора по которому его считать - один из транков не заведён операторам в услугах учета транзита.

Решение

Решить проблему можно несколькими способами:

Другие частые ошибки при настройке телефонии

  1. При обработке звонков номера не модифицируются с локальных на международные. Соответственно не получается определить стоимость звонка. Решение: Конвертация номеров(модификаторы, преобразования к e.164)
  2. Не заданы цены для направлений звонков которые обработались с ошибкой. Диагностика проблемы: Проверка стоимости направления для абонента. Перерасчет VOIP Решение: Использование экспорта и импорта csv и xlsx файлов с тарифами VOIP. Загрузка цен
  3. Звонок был посчитан в невреном периоде. Биллинг считает звонки на основании даты указаанной в cdr или аккаунтинг пакете. Проверить дату при радиус авторизации можно по логу авторизаци и записи в БД.
    /app/asr_billing/var/log/radius_asterisk/radius.log
    Wed Feb 1 08:49:27 2023 : Info: 2023-02-01 08:49:27 ++[python <139636617848576>]VOIP INFO: ('h323-setup-time', '"h323-setup-time=.08:02:33.737 GMT Mon Jan 1 2024"')
    
    БД
    sqlexec -l "select s_time, e_time from voip_log where id=1308725"
    ID 1308725
    S_TIME 2024-01-01 08:02:38.2960
    E_TIME 2024-01-01 08:03:31.4060
    

    Для перерасчёта подобных звонков обратитесь в техническую поддержку.

Полезные команды для работы с журналами обработки звонков

Найти ошибки обработки обработки звонка в архиве логов

zgrep 3418345 /app/asr_billing/var/log/workers/account_voip.log* | cut -d':' -f 2-202 | sort
2021-12-09 14:34:29,619 - worker - account_voip - ERROR - Не найдена цена на направление у оператора Abonents [ id=1362, name=ООО "Лучший Провайдер" ] для звонка VoipLog [ id=3418345 ]
2021-12-09 16:39:51,902 - worker - account_voip - ERROR - Не найдена цена на направление у оператора Abonents [ id=1373, name=ПАО "Мегафон" ] для звонка VoipLog [ id=3418345 ]
2021-12-10 15:39:25,723 - worker - account_voip - ERROR - Не найдена цена на направление у оператора Abonents [ id=1373, name=ПАО "Мегафон" ] для звонка VoipLog [ id=3418345 ]
  • zgrep нужен, чтобы работать с любыми логами, включая те, что были сжаты в архив (.gz)
  • cut уберёт название файла из вывода zgrep, это нужно чтобы sort работала правильно, иначе первыми в выводе будут записи из незаархивированных файлов
  • sort выведет записи в хронологическом порядке

Пример скрипта, который найдёт в логе последние 30 появлений ошибки "Не найдена цена на направление у оператора" и получит из базы дополнительные данные по этим звонкам

num=30; grep -i 'Не найдена цена на направление у оператора' /app/asr_billing/var/log/workers/account_voip.log-20211215 | tail -n $num; grep -i 'Не найдена цена на направление у оператора' /app/asr_billing/var/log/workers/account_voip.log-20211215 | tail -n ${num} | sed -e 's/.*name=\(.*\) ].*id=\([0-9]*\) ]/\2\t\1/g' | while read id telco; do echo $(sqlexec "set heading off; select 'id=' ||id ||' v_type_id=' || v_type_id || ' src=' || src || ' dst=' || dst || ' src_chan=' || src_chan || ' dst_chan=' || dst_chan || ' chan_оператора_из_звонка=' || chan from voip_log where id=${id}" |sed 's/   *//g; /^$/d') имя_оператора_из_лога=$telco; done
  • Если адаптировать скрипт под другие ошибки, недостаточно просто изменить параметр для grep, ещё нужно исправить sed
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.