Если вы читаете этот цикл статей с начала, то вы помните мои метания по поводу сигнала занято (вы можете посмотреть здесь и здесь).
После переписки с разработчиками, чтения мануалов и тд, стал понятен третий, финальный и правильный путь. Переходим к делу.
Во-первых, удаляем столбец call-limit из tbl_sip_conf - он больше не понадобится.
Во-вторых, добавляем два столбца в ту же таблицу
`callcounter` varchar(45) NOT NULL default 'yes'
busylevel будет определять, при каком количестве звонков телефон переходит в статус занято, а callcounter разрешает такой подсчет.
После перезапуска sip очереди уже будут контролироваться автоматически, не допуская появления новых звонков в процессе разговора.
Теперь дополнительный отбой при наборе.
Перед набором SIP номера (у меня это macro-dial_sip_number) добавляем
; по входящим
exten => s,n,GotoIF($[${GROUP_COUNT(${ARG1}@busy_in)} > 0 ]?number_is_busy)
; и исходящим
exten => s,n,GotoIF($[${GROUP_COUNT(${ARG1}@busy_out)} > 0 ]?number_is_busy)
; маркируем набираемый как "занято"
; набирающий уже маркирован
exten => s,n,Set(GROUP(busy_in)=${ARG1})
А в контексты набора номера с телефонов добавляем
exten => _X.,n,Set(GROUP(busy_out)=${CALLERID(NUM)})
Все!