Итак, я знаю, что это довольно простой вопрос, но я не могу найти на него хорошего ответа. У меня есть DID, который довольно сильно страдает (или, по крайней мере, для меня, около 1-3 звонков в день) с телемаркетингом с номеров, отличных от 1-8XX. Однако есть только несколько номеров, которые звонят изо дня в день. Поэтому, естественно, я просто хочу заблокировать их, чтобы мой телефон не звонил, и мне не выставляли счет за звонок.
Я хочу отправить SIP / 404 или другой ответ без ответа, а не отправлять их на голосовую почту или другую запись. Меня не волнует ведение журнала или что-то в этом роде, я просто хотел бы иметь возможность довольно легко добавлять (или удалять) номер, чтобы сократить количество ненужных вызовов.
Все, что я нахожу, кажется либо слишком сложным, либо слишком простым (только один заблокированный номер), и я не могу найти хорошего носителя. Надеюсь, кто-то еще лучше поймет! Я использую Asterisk 1.6. Спасибо!
Как твои навыки программирования? Я не уверен во всех деталях, но, как я понимаю, из вашего вопроса:
Взгляните на код в упомянутой ссылке kaptk2.
А затем взгляните на функции DB () звездочки: Функция звездочки DB (). Вы должны выполнить поиск каждого входящего идентификатора вызывающего абонента в качестве ключа базы данных, и вы можете поддерживать ключи базы данных из командной строки asterisk.
Краткий пример управления БД:
greenblatt*CLI> database put blockcaller 18005551212 1
Updated database successfully
greenblatt*CLI> database get blockcaller 18005551212
Value: 1
Вы можете получить доступ к значению примерно так:
exten => s,1,GotoIf($[${DB(blockcaller/${CALLERID(num)}))} = 1]?blocked:ok
Лучший способ «убить» вызов - использовать функцию Hangup (). Или, если вы настаиваете на коде 404: отправьте его на несуществующий добавочный номер.
Я сделал нечто подобное и, как и другой отправитель, использовал базу данных. Вместо использования встроенных функций int DB я использовал cmd MySQL. Это было сделано для того, чтобы я мог написать веб-страницу, которая взаимодействует с одной и той же БД, И мой администратор БД мог делать перекрестный выбор БД между этой таблицей «Каталог» и MySQL CDR.
В моем примере я установил таблицу с 4 полями. id
(auto_increment int), number
(телефонный номер), name
(Имя пользователя), ban
(int, по умолчанию 0). Пример выполняет 2 вещи: 1 - он ищет имя в БД и устанавливает его в качестве идентификатора вызывающего абонента (поскольку наша линия POTS этого не сообщает) 2 - Он проверяет, не ban
установлен в 1 и блокирует вызов.
exten => s,1,Answer exten => s,n,NoOp("Caller ID IS: ${CALLERID(number)}") exten => s,n,MYSQL(Connect connid HOST USER PASSWORD database) exten => s,n,MYSQL(Query resultid ${connid} SELECT name,ban FROM directory WHERE number='${CALLERID(number)}') exten => s,n,MYSQL(Fetch fetchid ${resultid} name ban) exten => s,n,NoOp("We found: ${name} ${ban}") exten => s,n,MYSQL(Clear ${resultid}) exten => s,n,MYSQL(Disconnect ${connid}); exten => s,n,Set(CALLERID(name)=${name}) exten => s,10,NoOp() exten => s,n,GotoIf($["${ban}" = "1"]?wedontlikeyou,s,1) exten => s,n,Goto(mainmenu,s,1)
После этого у вас будут [mainmenu] и [wedontlikeyou]. Чем позже будет ваш бан, это может быть простое зависание, сообщение об ошибке, что угодно. Я предпочитаю Перегрузка () поскольку это заставляет людей думать, что номер телефона не обслуживается.