Добавляем в 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
Комментариев нет:
Отправить комментарий