- Ошибки обработки cdr
- Общее описание ошибок
- FAQ по кодам ошибок
- FAQ по ошибкам службы worker
- Ошибка: Не удалось определить тип звонка для VoipLog [ id=77777, src=89994699289, dst=78619611110 ]
- Ошибка: error_code=Не найдена стоимость направления! (pk=4, model=Errors)
- Ошибка: Не найдена цена на направление у оператора Abonents [ id=3333, name=Вымпелком ] для звонка VoipLog [ id=3265150 ]
- В каком формате записывать маски направлений?
- Проблема с межоператорским расчетом звонка VoipLog. Доступные операторы: Abonents [ id=3, name=ООО "Лучший провайдер" ]
- Ошибка: Не найдена услуга телефонии у оператора
- Ошибка: Не найдена услуга!
- Для транзитного звонка не определен один из операторов
- Другие частые ошибки при настройке телефонии
- Полезные команды для работы с журналами обработки звонков
Ошибки обработки cdr
Обработкой CDR занимается служба cdr_parsers. Отладку будем производить по её логу.
/app/asr_billing/var/log/daemons.voip.cdr_parsers.log
Общее описание ошибок
Звонки хранятся в таблице voip_log. При обработке ошибки записываются в:
- Поле error_code - числовой код ошибки или NULL при успешной обработке звонка. Коды ошибок можно получить следующим запрос. Подробно они описаны в следующем разделе.
sqlexec "set list on; select * from errors"
- Лог службы [worker] - более детальное описание ошибки. Содержит краткую информацию по звонку.
/app/asr_billing/var/log/worker.log
FAQ по кодам ошибок
- 1 Не найден пользователь!
- 2 Не найдена услуга!
- 3 Не найдено направление!
- 4 Не найдена стоимость направления!
- 5 Не найден NAS!
- 6 Не найден оператор связи для обсчета!
- 7 Не настроены услуги у оператора связи для обсчета!
- 8 Найденная услуга не активна!
- 9 Не указаны источник или назначение
- 10 Некорректная длина номера
- 11 Не найден оператор стороны A
- 12 Не найден оператор стороны Б
- 13 Не настроены услуги у оператора А
- 14 Не настроены услуги у оператора Б
- 15 Не найдено направление у оператора А
- 16 Не найдено направление у оператора Б
- 255 Прочие ошибки
FAQ по ошибкам службы worker
Ошибка: Не удалось определить тип звонка для VoipLog [ id=77777, src=89994699289, dst=78619611110 ]
Неправильно заданы номерные емкости, обслуживаемые оператором(пулы номеров). В итоге не удается определить тип звонка.
Решение
- Определяем какой из номеров(78619611110 или 89994699289) принадлежит вашему абоненту.
- В данном примере номер абонента: 89994699289
- Так как номер не соответствует стандартному виду e.164, приводим его к нему, используя модификаторы номеров: Конвертация номеров(модификаторы, преобразования к e.164)
- Создаем или редактируем пул телефонных номеров так, чтобы он включал в себя этот номер.
- Присваиваем номер абоненту
Ошибка: 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
Решение
Необходимо:
- Внимательно проверить номера в src и dst полях звонка на соответствие рекомендации e.164. В примере с этим все ОК, видно что в src_orig номер начинается с 8, а в src уже с кода страны - это результат применения модификаторов номеров, настроить их можно по этой статье: Конвертация номеров(модификаторы, преобразования к e.164)
- Зайти к абоненту совершившему звонок, в данном звонке абонент abonent=Бил Мюррей (pk=11111, model=Abonents)
- Войти на вкладку "Услуги" и проверить наличие активных услуг телефонии у абонента.
- Если есть активные услуги, то заходим на вкладку "Расход" и проверяем стоимость направления по статье Проверка стоимости направления для абонента. Перерасчет VOIP
- Если стоимости направления в услугах не найдено, то добавляем стоимость направления в необходимую услугу руководствуясь статьёй документации Использование экспорта и импорта csv и xlsx файлов с тарифами VOIP. Загрузка цен
- После загрузки цен, опять проверяем наличие стоимости по статье Проверка стоимости направления для абонента. Перерасчет VOIP.
- Стоимость найдена, необходимо запустить перерасчет 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 с транзитным трафиком, но не нашел оператора по которому его считать - один из транков не заведён операторам в услугах учета транзита.
Решение
Решить проблему можно несколькими способами:
- Посмотреть через конструктор отчетов транки и добавить их нужным операторам. Отчет:
select distinct src_chan, dst_chan from voip_log vl where SRC_OPERATOR_ID is null or OPERATOR_ID is null
- Добавить одному из операторов услугу с типом трафика "Транзит" и транком "default"
Другие частые ошибки при настройке телефонии
- При обработке звонков номера не модифицируются с локальных на международные. Соответственно не получается определить стоимость звонка. Решение: Конвертация номеров(модификаторы, преобразования к e.164)
- Не заданы цены для направлений звонков которые обработались с ошибкой. Диагностика проблемы: Проверка стоимости направления для абонента. Перерасчет VOIP Решение: Использование экспорта и импорта csv и xlsx файлов с тарифами VOIP. Загрузка цен
- Звонок был посчитан в невреном периоде. Биллинг считает звонки на основании даты указаанной в 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