вторник, 6 мая 2025 г.

Добавляем в CDR причину и инициатора разрыва соединения

 Добавляем в CDR две колонки:

- hangupcause (int4);

- hangupparty (varchar или сделать отдельный тип enum 'caller|callee').

Далее добавляем в app_dial.c переменную типа char buf_hangup_str[8], по очереди пишем в неё значения ast_channel_hangupcause(chan) и ast_check_hangup(chan), и сбрасываем в CDR через ast_cdr_setvar.

Соответствующий патч ниже.


--- ../app_dial.c.orig  2025-05-05 15:57:39.235708623 +0300

+++ apps/app_dial.c     2025-05-05 16:03:32.535151074 +0300

@@ -2269,6 +2269,7 @@

         */

        struct ast_party_caller caller;

        int max_forwards;

+       char buf_hangup_str[8];


        /* Reset all DIAL variables back to blank, to prevent confusion (in case we don't reset all of them). */

        ast_channel_lock(chan);

@@ -3286,6 +3287,17 @@

        }


        ast_channel_early_bridge(chan, NULL);

+

+

+        // Save hangup cause to CDR

+        sprintf(buf_hangup_str, "%d", ast_channel_hangupcause(chan));

+        ast_cdr_setvar(ast_channel_name(chan), "hangupcause", buf_hangup_str);

+        // Save hangup party to CDR

+        sprintf(buf_hangup_str, "%s", ast_check_hangup(chan) ? "caller" : "callee");

+        ast_cdr_setvar(ast_channel_name(chan), "hangupparty", buf_hangup_str);

+

+

+

         /* forward 'answered elsewhere' if we received it */

        hanguptree(&out_chans, NULL,

                ast_channel_hangupcause(chan) == AST_CAUSE_ANSWERED_ELSEWHERE



Комментариев нет:

Отправить комментарий