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

Ошибки обработки звонка

В случае если произошла какая-либо ошибка при обработке звонка, поступившего в биллинг, номер ошибки присваивается в поле ERROR_CODE звонка, в случае если звонок обработался корректно, поле ERROR_CODE имеет значение NULL.
На данный момент список ошибок таков:

# sqlexec "set list on; select  * from errors"

ID                              1
NAME                            Не найден пользователь!

ID                              2
NAME                            Не найдена услуга!

ID                              3
NAME                            Не найдено направление!

ID                              4
NAME                            Не найдена стоимость направления!

ID                              5
NAME                            Не найден NAS!

ID                              6
NAME                            Не найден оператор связи для обсчета!

ID                              7
NAME                            Не настроены услуги у оператора связи для обсчета!

ID                              8
NAME                            Найденная услуга не активна!


Общие для всех ошибок действия.

Вы настроили связку с оборудованием, в директорию CDR успешно по FTP прилетают CDR файлы и тут же обрабатываются в воркере биллинга, но звонки все никак не хотят появляться у абонента во вкладке "Расход" и в /var/log/worker.log видны ошибки обработки звонков.

Решение

Необходимо проанализировать что порождает ошибки при обработке звонков. Тип ошибки в логе отчетливо виден в поле error_code:

Пример лога
2016-02-29 11:33:51,279 - worker - account_voip - ERROR - FAILED VOIP LOG PROCESSING обработали voip_log=VoipLog [ id=379886, src=74956681200, dst=74956681288, s_time=2016-02-29 11:26:16, e_time=2016-02-29 11:29:16, duration=180, bill_sec=180, disposition=, suid=CDR_SMG1016201602291126168861964, nas_ip=172.17.9.10, ama_flags=, chan=CHAN, dst_chan=None, dst_ctx=, billed=0, user=None, abonent=None, direction=None, bill_sum=0, resolved=0, error_code=Не найден пользователь! (pk=1, model=Errors), step=None, bill_sec_round=180, operator_usluga_id=None, operator_step_price=0, operator_v=None, operator_id=None, step_price=0, v_type=None, usluga=None, recalc=0, dst_orig=74956681288, src_orig=74956681200, src_chan=None, src_operator=None ]

В данном примере ошибка error_code=Не найден пользователь! (pk=1, model=Errors) означает что абонента с таким номером нет в биллинге.

FAQ по ошибкам

Ошибка: Не удалось определить тип звонка для 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

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

По статье [CarbonBilling:Взаиморасчеты между операторами], укажите маску транка в услуге, в которой есть цена на направление.

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

Все маски направлений необходимо приводить к рекомендации 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"

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

  1. При обработке звонков номера не модифицируются с локальных на международные. Соответственно не получается определить стоимость звонка. Решение: Конвертация номеров(модификаторы, преобразования к e.164)
  2. Не заданы цены для направлений звонков которые обработались с ошибкой. Диагностика проблемы: Проверка стоимости направления для абонента. Перерасчет VOIP Решение: Использование экспорта и импорта csv и xlsx файлов с тарифами VOIP. Загрузка цен

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

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

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