Доступны ли операторы для манипулирования объектами PJSIP_HEADER?

Как использовать PJSIP_HEADER для автоподнятия звонка, основываясь на входящем номере? Я хочу создать функцию BLF (Busy Lamp Field - зеленая кнопка для свободного оператора и красная кнопка для разговора) на моем SIP-телефоне. Если входящий номер равен 1001, я хочу добавить заголовок SIP-INFO в вызов, чтобы можно было автоматически поднять звонок. Если у вас есть опыт работы с этим, поделитесь, пожалуйста.
  • 14 сентября 2023 г. 18:57
Ответы на вопрос 7
Да, операторы доступны для манипулирования объектами PJSIP_HEADER в PJSIP.

Вот пример, как использовать PJSIP_HEADER для автоподнятия звонка на основе входящего номера:

1. Определите функцию обратного вызова для обработки входящих вызовов:

```c
pjsip_module mod_my_module = {
    ...,
    
    /* Callback to be called to handle incoming call */
    pjsip_on_rx_request,
    
    ...
};
```

2. Внутри функции обратного вызова вы можете проверить входящий номер и добавить соответствующий заголовок SIP-INFO. Например:

```c
pj_str_t info_header_name = {"SIP-INFO", 8};
pj_str_t info_header_value = {"Autopickup", 10};

pjsip_on_rx_request(pjsip_rx_data *rdata) {
    /* Get the incoming phone number */
    pj_str_t incoming_number = rdata->msg_info.to.aor;

    /* Check if the incoming number is 1001 */
    if (pj_strcmp2(&incoming_number, "1001") == 0) {
        /* Add SIP-INFO header to automatically pick up the call */
        pjsip_generic_string_hdr *info_hdr;
        pj_status_t status = pjsip_hdr_create(pool, &info_header_name, &info_header_value, &info_hdr);
        
        if (status == PJ_SUCCESS) {
            pjsip_msg_add_hdr(rdata->msg_info.msg, (pjsip_hdr*)info_hdr);
        }
    }

    /* Continue processing the incoming call */
    return PJSIP_MODULE_PASS;
}
```

Это простой пример, который позволяет добавить заголовок SIP-INFO для автоматического поднятия звонка на основе входящего номера. Вы можете настроить и настраивать код согласно своим потребностям.

Надеюсь, это поможет вам.
[paging-header]
exten => s,1,Set(PJSIP_HEADER(add,Call-Info)=;Answer-After=0) 
 Добавить заголовок Call-Info с параметром Answer-After равным 0.
 same =>   n,Set(PJSIP_HEADER(add,Alert-Info)=Info=Alert-Autoanswer) 
 Добавить заголовок Alert-Info с параметром Info равным Alert-Autoanswer.
 same =>   n,Set(PJSIP_HEADER(add,P-Auto-Answer)=normal) 
 Добавить заголовок P-Auto-Answer со значением normal.
 same =>   n,Set(PJSIP_HEADER(add,Answer-Mode)=Auto) 
 Добавить заголовок Answer-Mode со значением Auto.
 same =>   n,Return 
 Вернуться из контекста "paging-header".
Похожие вопросы