<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mysyslog.ru &#187; voip</title>
	<atom:link href="http://mysyslog.ru/posts/tag/voip/feed" rel="self" type="application/rss+xml" />
	<link>http://mysyslog.ru</link>
	<description>Всякая IT всячина</description>
	<lastBuildDate>Sat, 17 Mar 2012 17:39:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Черный список для Asterisk</title>
		<link>http://mysyslog.ru/posts/175</link>
		<comments>http://mysyslog.ru/posts/175#comments</comments>
		<pubDate>Fri, 15 May 2009 09:32:38 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Советы]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=175</guid>
		<description><![CDATA[Если вам надоели звонки с каких-то номеров, их легко можно заблокировать на вашем asterisk.
Сейчас расскажу как.
Для организации черного списка номеров в asterisk есть специальная функция BLACKLIST, функция появилась в версии 1.4 и заменила собой устаревшую LookupBlaclist().
Посмотреть описание функции можно так.
office-pbx*CLI&#62; core show function BLACKLIST
Теперь напишем нужный dialplan
[incoming]
exten=&#62;7495XXXXXXX,1,Answer()
exten=&#62;7495XXXXXXX,n,GotoIf($[${BLACKLIST()}=1]?blacklist)
exten=&#62;7495XXXXXXX,n,GoTo(call4nums,s,1)
exten=&#62;7495XXXXXXX,n(blacklist),Hangup()
exten=&#62;h,1,Hangup()
exten=&#62;i,1,Hangup()
BLACKLIST() проверяет в базе данных AstDB в семействе blacklist [...]]]></description>
			<content:encoded><![CDATA[<p>Если вам надоели звонки с каких-то номеров, их легко можно заблокировать на вашем asterisk.</p>
<p>Сейчас расскажу как.</p>
<p><span id="more-175"></span>Для организации черного списка номеров в asterisk есть специальная функция BLACKLIST, функция появилась в версии 1.4 и заменила собой устаревшую LookupBlaclist().</p>
<p>Посмотреть описание функции можно так.</p>
<pre lang="asterisk">office-pbx*CLI&gt; core show function BLACKLIST</pre>
<p>Теперь напишем нужный dialplan</p>
<pre lang="asterisk">[incoming]
exten=&gt;7495XXXXXXX,1,Answer()
exten=&gt;7495XXXXXXX,n,GotoIf($[${BLACKLIST()}=1]?blacklist)
exten=&gt;7495XXXXXXX,n,GoTo(call4nums,s,1)
exten=&gt;7495XXXXXXX,n(blacklist),Hangup()
exten=&gt;h,1,Hangup()
exten=&gt;i,1,Hangup()</pre>
<p>BLACKLIST() проверяет в базе данных AstDB в семействе blacklist ключ, равный Caller*ID, со значением 1. Если ключ есть и значение равно единице, то BLACKLIST() возвращает 1. Что проверяется вот этой строчкой:</p>
<pre lang="asterisk">exten=&gt;7495XXXXXXX,n,GotoIf($[${BLACKLIST()}=1]?blacklist)</pre>
<p>Если условие выполняется, то вызывается extension с пометкой  blacklist</p>
<pre lang="asterisk">exten=&gt;7495XXXXXXX,n(blacklist),Hangup()</pre>
<p>Для управления черным списком можно использовать CLI:</p>
<pre lang="asterisk">office-pbx*CLI&gt; database put blacklist 74957007070 1
office-pbx*CLI&gt; database del blacklist 74957007070</pre>
<p>Чтобы упросить себе жизнь, можно написать shell скрипт:</p>
<pre lang="bash">~ # cat /root/bin/astblacklist.sh
#!/bin/bash

function helpfunction {
  echo "astblacklist.sh [show|add|del][CALLERID]"
  echo show - show blacklist AstDB family
  echo add CALLERID - add CALLERID to blacklist
  echo del CALLERID - add CALLERID to blacklist
}

ACTION=$1
CALLERID=$2

if [ ${ACTION} == 'show' ]; then
  asterisk -r -x "database show" | fgrep blacklist
  exit 0
fi

if [ ${ACTION} == 'add' ] || [ ${ACTION} == 'del' ]; then
  if [ -z ${CALLERID} ]; then
    helpfunction
    exit 1
  fi

  if [ ${ACTION} == 'add' ];then
    asterisk -r -x "database put blacklist ${CALLERID} 1"
    exit 0
  fi

  if [ ${ACTION} == 'del' ];then
    asterisk -r -x "database del blacklist ${CALLERID}"
    exit 0
  fi
fi

helpfunction</pre>
<p>Можно изменять базу и при помощи extensions, для этого в asterisk 1.4 есть функция DB и DB_DELETE</p>
<pre lang="asterisk">[add-to-backlist]
exten=&gt;_X.,1,Set(DB(blacklist/${EXTEN})=1)
exten=&gt;_X.,n,background(demo-thanks)
exten=&gt;_X.,n,Wait(1)
exten=&gt;_X.,n,Hangup()

exten=&gt;t,1,Hangup()
exten=&gt;h,1,Hangup()
exten=&gt;i,1,Hungup()

[del-from-backlist]
exten=&gt;_X.,1,NoOp(${DB_DELETE(blacklist/${EXTEN})})
exten=&gt;_X.,n,background(demo-thanks)
exten=&gt;_X.,n,Wait(1)
exten=&gt;_X.,n,Hangup()

exten=&gt;t,1,Hangup()
exten=&gt;h,1,Hangup()
exten=&gt;i,1,Hungup()</pre>
<p>Эти два контекста при помощи функций DB и DB_DELETE добавляют и удаляют из blacklist. Теперь нужно только вызвать их. Для этого в общем плане набора создаем два extension</p>
<pre lang="asterisk">exten =&gt; _*1*X.,1,Goto(add-to-backlist,${EXTEN:3},1)
exten =&gt; _*2*X.,1,Goto(del-from-backlist,${EXTEN:3},1)</pre>
<p>Несколько полезных ссылок:<br />
<a href="http://www.voip-info.org/wiki/view/Asterisk+func+db">Функция DB</a><br />
<a href="http://www.voip-info.org/wiki/view/Asterisk+cmd+DB_DELETE">Функция DB_DELETE</a><br />
<a href="http://www.jackenhack.com/blog/archives/2005/09/26/adding-blacklist-to-an-asteriskhome-pbx-voip-server/">Более продвинутая реализация черного списка</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/175/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

