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 при успешной обработке звонка. Коды ошибок можно получить следующим запрос. Подробно они описаны в следующем разделе.
    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 ]

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

Решение

  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 
Ищите метку? просто начните печатать.