Как вести бухгалтерию вручную в opensips

Я использую Opensips 2.3 и уже веду учет. Но у меня совсем другая база данных, где я уже настроил отсутствующий/превышение канала CDRS вручную с помощью avp_db.

Есть ли способ вести учет установленного вызова, так как в автоматическом режиме он ведет весь учет в таблице акк, но он так же ведет учет установленных, отсутствующих и занятых вызовов, но я хочу делать только установленные вызовы CDRS. Для автоматической учетной записи я использую следующие команды acc

loadmodule "acc.so"
modparam("acc", "early_media", 0)
modparam("acc", "report_cancels", 0) 
modparam("acc", "detect_direction",0)
modparam("acc", "extra_fields", "db: a->caller_id; b->callee_id") #Extra Data

и в разделе маршрутизации я поместил следующий скрипт

if (is_method("BYE")) {
    $acc_extra(a) = $fu;
    $acc_extra(b) = $tu;
    do_accounting("db","failed");

Я просто хочу, чтобы при прекращении вызова у меня уже было значение $avp(timestart), чтобы я мог просто вычесть и рассчитать платежи и использовать avp_db для вставки CDRS


person Kamal Panhwar    schedule 30.05.2018    source источник


Ответы (1)


Используя OpenSIPS 2.2+, вы можете включить учет только для установленных вызовов (200 OK + (конечная точка BYE, истечение срока действия диалога или принудительное завершение)), указав параметр cdr для do_accounting() при получении начального INVITE:

route {

    if (has_totag()) {
        ...
        exit;
    }

    ...

    if (is_method("INVITE"))
        do_accounting("db", "cdr");

    ...

    t_relay();
}
person Liviu Chircu    schedule 30.05.2018
comment
Я добавил это, но пока только таблица акк, созданная со строками Invite, но ничего о до свидания, так как для расчета звонка мне нужно также До свидания, когда вызов завершен! - person Kamal Panhwar; 01.06.2018
comment
Действительно, для каждого вызова существует только одна запись, но она содержит полную информацию, так как некоторые поля вычисляются во время BYE, например: продолжительность, ms_duration, setuptime, created. Если вам этого недостаточно, вам придется регистрировать все INVITE и BYE, используя acc_db_request(), и фильтровать их во внешнем приложении. - person Liviu Chircu; 04.06.2018