|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (22)
просмотр истории страницы... |
h1. Ошибки обработки cdr |
# Обработкой CDR занимается служба [worker|Worker (ядро биллинга)]. Отладку будем производить по её логу. Повысте уровень логирования службы worker: {code:title=Конфигурационный файл} |
Обработкой CDR занимается служба cdr_parsers. Отладку будем производить по её логу. {code:title=Лог службы} |
/app/asr_billing/cfg/config /app/asr_billing/var/log/daemons.voip.cdr_parsers.log |
{code} |
{code:title=Уровень логирования info} app['worker.loglevel']='info' {code} {code:title=Перезапуск службы} chroot /app/asr_billing/ service worker restart {code} #CDR файлы с ошибками помещаются в каталог *bad*. {code:title=Каталог нас VOIP_NAS} /app/asr_billing/var/cdr/VOIP_NAS/bad/ {code} Переместите CDR файл с ошибками в рабочий каталог: {code} mv /app/asr_billing/var/cdr/VOIP_NAS/bad/test.cdr /app/asr_billing/var/cdr/VOIP_NAS/ {code} # Проследите за обработкой по фалу журнала службы worker: {code} /app/asr_billing/var/log/worker.log {code} |
h1. Ошибки обработки звонка |
... |
На данный момент список ошибок таков: {code} |
# sqlexec "set list on; select * from errors" |
ID 1 |
... |
NAME Найденная услуга не активна! |
ID 9 NAME Не указаны источник или назначение |
|
ID 10 NAME Некорректная длина номера ID 255 NAME Прочие ошибки |
{code} |
... |
h3. Решение |
## Определяем какой из номеров(78619611110 или 89994699289) принадлежит вашему абоненту. ## В данном примере номер абонента: _89994699289_ ## Так как номер не соответствует стандартному виду e.164, приводим его к нему, используя модификаторы номеров: [Конвертация номеров(модификаторы, преобразования к e.164)|Конвертация номеров (модификаторы, преобразования к e.164)] ## Создаем или редактируем пул телефонных номеров так, чтобы он включал в себя этот номер. ## Присваиваем номер абоненту |
|
# Определяем какой из номеров(78619611110 или 89994699289) принадлежит вашему абоненту. # В данном примере номер абонента: _89994699289_ # Так как номер не соответствует стандартному виду e.164, приводим его к нему, используя модификаторы номеров: [Конвертация номеров(модификаторы, преобразования к e.164)|Конвертация номеров (модификаторы, преобразования к e.164)] # Создаем или редактируем пул телефонных номеров так, чтобы он включал в себя этот номер. # Присваиваем номер абоненту |
h2. Ошибка: error_code=Не найдена стоимость направления\! (pk=4, model=Errors) |
... |
h3. Решение |
|
Необходимо: |
## # Внимательно проверить номера в src и dst полях звонка на соответствие рекомендации e.164. В примере с этим все ОК, видно что в src_orig номер начинается с 8, а в src уже с кода страны - это результат применения модификаторов номеров, настроить их можно по этой статье: [Конвертация номеров(модификаторы, преобразования к e.164)|Конвертация номеров (модификаторы, преобразования к e.164)] |
## # Зайти к абоненту совершившему звонок, в данном звонке абонент _abonent=Бил Мюррей (pk=11111, model=Abonents)_ |
## # Войти на вкладку "Услуги" и проверить наличие активных услуг телефонии у абонента. |
## # Если есть активные услуги, то заходим на вкладку "Расход" и проверяем стоимость направления по статье [Проверка стоимости направления для абонента. Перерасчет VOIP] |
## # Если стоимости направления в услугах не найдено, то добавляем стоимость направления в необходимую услугу руководствуясь статьёй документации [Использование экспорта и импорта csv и xlsx файлов с тарифами VOIP. Загрузка цен] |
## # После загрузки цен, опять проверяем наличие стоимости по статье [Проверка стоимости направления для абонента. Перерасчет VOIP]. |
## # Стоимость найдена, необходимо запустить перерасчет VOIP, как это сделать описано в этой же статье: [Проверка стоимости направления для абонента. Перерасчет VOIP] |
h2. Ошибка: Не найдена цена на направление у оператора Abonents \[ id=3333, name=Вымпелком \] для звонка VoipLog \[ id=3265150 \] |
... |
Ошибка решается точно также как _error_code=Не найдена стоимость направления\! (pk=4, model=Errors)_, только вместо абонента все действия необходимо проделывать над оператором. Оператора можно определить через название оператора в поле _chan_ и id оператора в поле _operator_id_ |
h3. Ещё возможное решение: в услугах оператора не указаны маски транков, укажите их По статье [Взаиморасчеты между операторами, агентская схема телефонии и транзит], укажите маску транка в услуге, в которой есть цена на направление. |
h2. В каком формате записывать маски направлений? Все маски направлений необходимо приводить к рекомендации e.164. Если нет возможности настроить преобразования номеров перед отправкой звонков в биллинг на оборудовании, как модификаторы номеров в Eltex SMG-1016, то есть возможность настройки конвертации в биллинге, сделать это можно руководствуясь этой статьей: [Конвертация номеров(модификаторы, преобразования к e.164)|Конвертация номеров (модификаторы, преобразования к e.164)] |
... |
Решить проблему можно несколькими способами: |
* Посмотреть через [конструктор отчетов|CarbonBilling:Конструктор отчетов] транки и [добавить их нужным операторам|CarbonBilling:Взаиморасчеты между операторами]. Отчет: |
* Посмотреть через [конструктор отчетов|CarbonBilling:Конструктор отчетов] транки и [добавить их нужным операторам|Взаиморасчеты между операторами, агентская схема телефонии и транзит]. Отчет: |
{code}select distinct src_chan, dst_chan from voip_log vl where SRC_OPERATOR_ID is null or OPERATOR_ID is null{code} * Добавить одному из операторов услугу с [типом трафика|CarbonBilling:Тип трафика] "Транзит" и транком "*default*" |
h1. Другие частые ошибки при настройке телефонии: |
# При обработке звонков номера не модифицируются с локальных на международные. Соответственно не получается определить стоимость звонка. Решение: [Конвертация номеров(модификаторы, преобразования к e.164)|Конвертация номеров (модификаторы, преобразования к e.164)] # Не заданы цены для направлений звонков которые обработались с ошибкой. Диагностика проблемы: [Проверка стоимости направления для абонента. Перерасчет VOIP] Решение: [Использование экспорта и импорта csv и xlsx файлов с тарифами VOIP. Загрузка цен] |
# Звонок был посчитан в невреном периоде. Биллинг считает звонки на основании даты указаанной в cdr или аккаунтинг пакете. Проверить дату при радиус авторизации можно по логу авторизаци и записи в БД. {code:title=/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"') {code} {code:title=БД} 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 {code} Для перерасчёта подобных звонков обратитесь в [техническую поддержку|https://helpdesk.carbonsoft.ru/login.php]. h1. Полезные команды для работы с журналами обработки звонков h3. Найти ошибки обработки обработки звонка в архиве логов {code} zgrep 3418345 /app/asr_billing/var/log/workers/account_voip.log* | cut -d':' -f 2-202 | sort {code} {code} 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 ] {code} * *zgrep* нужен, чтобы работать с любыми логами, включая те, что были сжаты в архив (.gz) * *cut* уберёт название файла из вывода zgrep, это нужно чтобы sort работала правильно, иначе первыми в выводе будут записи из незаархивированных файлов * *sort* выведет записи в хронологическом порядке h3. Пример скрипта, который найдёт в логе последние 30 появлений ошибки "Не найдена цена на направление у оператора" и получит из базы дополнительные данные по этим звонкам {code} 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 {code} * Если адаптировать скрипт под другие ошибки, недостаточно просто изменить параметр для grep, ещё нужно исправить sed |