среда, 23 июля 2025 г.

Модификация приложения Record для отлавливания нужного кода DTMF

Продолжаем мучать app_record.c

Задача: отловить набор внутреннего номера. Номера начинаются с "4".

Т.е. нужно прервать запись только по нажатию "4", и сообщить об этом факте.

Добавим опцию "e" в приложение Record. Для этого:

строка 43: вносим описание опции в раздел DOCUMENTATION


строка 128: добавляем переменную с нужной нам цифрой

#define LOCAL_EXTEN_KEY '4'


строка 132: добавляем нашу опцию

enum {

        OPTION_APPEND = (1 << 0),

        OPTION_CALL_EXTEN = (1 << 1),

        OPTION_NOANSWER = (1 << 2),


строка 146: добавляем наш ответ
enum dtmf_response {
        RESPONSE_NO_MATCH = 0,
        RESPONSE_OPERATOR,
        RESPONSE_DTMF,
        RESPONSE_LOCAL_EXTEN,
};

строка 153: добавляем ключ вызова опции
AST_APP_OPTIONS(app_opts,{
        AST_APP_OPTION('a', OPTION_APPEND),
        AST_APP_OPTION('e', OPTION_CALL_EXTEN),

строка 172: добавляем условие срабатывания
struct ast_flags *flags, int dtmf_integer, int terminator)
{
...
        if ((dtmf_integer == LOCAL_EXTEN_KEY) &&
                ast_test_flag(flags, OPTION_CALL_EXTEN))) {
                return RESPONSE_LOCAL_EXTEN;
        }

строка 477: добавляем условие возврата нужного значения переменной RECORD_STATUS
switch(rc)        {
...
case RESPONSE_LOCAL_EXTEN:
        status_response = "LOCAL";
        ast_debug(1, "Got local exten DTMF 4\n");
        break;

Теперь при нажатии "4" запись будет прерываться, а  RECORD_STATUS пример значение LOCAL.

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

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