пятница, 25 ноября 2022 г.

Отображение DTMF-кода командой RECORD в Asterisk

 Команда RECORD имеет опцию "y", завершающую запись при получении любого DTMF-кода. При этом переменная RECORD_STATUS принимает значение "DTMF". Сам набранный абонентом код нигде не фиксируется. Исправляем эту ситуацию.

Открываем код команды "../apps/app_record.c". Установка опции "y" проверяется в функции record_dtmf_response. При включенной опции, функция устанавливает переменную dtmf_response в значение RESPONSE_DTMF (строка 181). Алгоритм действия при получении DTMF кода от абонента начинается со строки 463. Если значение dtmf_response равно RESPONSE_DTMF, то заполняется переменная status_response, которая потом будет использована для заполнения RECORD_STATUS.

case RESPONSE_DTMF:

    status_response = "DTMF";

    ast_debug(1, "Got DTMF\n");

break;


Вначале объявляем переменную типа char:

char status_response_dtmf[10];

Далее в соответствующем разделе пишем следующее:

case RESPONSE_DTMF:

    sprintf(status_response_dtmf, "DTMF %c", f->subclass.integer);

    status_response = status_response_dtmf;

    ast_debug(1, "Got DTMF %c\n", f->subclass.integer);

break;

Т.е. сначала формируем значение status_response_dtmf из строки "DTMF " и DTMF-кода. Формат %c, потому что DTMF-код хранится в переменной типа int в виде ASCII кода.

После пересборки имеем в RECORD_STATUS (при включенной опции "y") значение вида "DTMF 3", если абонент прервал запись нажатием "3".



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

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