quinta-feira, 27 de junho de 2013

CUSTOM TRUNK no FOP

Fonte: http://www.elastixbrasil.com.br/index.php?option=com_fireboard&Itemid=74&func=view&catid=15&id=150


Prezados


Para os troncos customizados que não aparecem no FOP segue dica abaixo:

Acesse o arquivo op_buttons_custom.cfg dentro da pasta de instalação do FOP (normalmente /var/www/html/panel e edite da seguinte forma, o exemplo abaixo foi utilizando placas VB0404PCI 4FXO da Digivoice.

[DGV/1]
Position=53
Label="DGV/1"
Extension=-1
Icon=3
Panel_Context=default

[DGV/2]
Position=54
Label="DGV/1"
Extension=-1
Icon=3
Panel_Context=default

[DGV/3]
Position=55
Label="DGV/1"
Extension=-1
Icon=3
Panel_Context=default

[DGV/4]
Position=56
Label="DGV/1"
Extension=-1
Icon=3
Panel_Context=default

Isto fará com que os troncos apareçam no FOP, claro que pode ser editado;

[Identificação do Troco]
Position=<para que apareça abaixo da LABEL Trunks use 53 para primeiro tronco>
Label="Nome que quer que apareça"
Extension=-1 (?)
Icon=3 (aparece o tel + arroba)
Panel_Context=default (contexto do asterisk ou do FOP -- ?)

Abraços.

Emerson Inocente

Gostou do Post, vote na popularidade. Obrigado.

segunda-feira, 24 de junho de 2013

Super sources.list para o Debian Wheezy

fonte :http://gnutwoall.wordpress.com/2013/05/13/super-sources-list-para-o-debian-wheezy/

Aqui veremos a montagem de um super sources.list para o Debian Wheezy, utilizando o netselect para selecionar os espelhos mais rápidos no nosso país, em contrapartida os espelhos oficiais também serão incluídos no teste.

Comecemos pela instalação do netselect, sobre o qual tratei num antigo artigo para o site Viva o Linux:
 
1
2
# apt-get update
# apt-get install netselect netselect-apt
Configurando o sources.list.
Abaixo veremos em teste os mirrors:
ftp.br.debian.org
sft.if.usp.br
linorg.usp.br
ftp.debian.org
1
# netselect -vv ftp.br.debian.org sft.if.usp.br linorg.usp.br ftp.debian.org
sources.list-001
 
Testando outros mirrors.
Caso tenham necessidade de testar outros espelhos, acessem o endereço abaixo, selecione o país e em seguidos os espelhos a serem testados.
Em seguida veremos os testes dos seguintes mirrors de atualização de segurança:
ftp.br.debian.org
sft.if.usp.br
linorg.usp.br
security.debian.org
1
# netselect -vv sft.if.usp.br ftp.br.debian.org linorg.usp.br security.debian.org
sources.list-002
Com os resultados apresentados montei o seguinte sources.list:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
### Debian 7.0 Wheezy.
### Chave GPG: apt-get install debian-archive-keyring
deb http://sft.if.usp.br/debian/ wheezy main contrib non-free
deb http://ftp.br.debian.org/debian/ wheezy main contrib non-free
deb http://linorg.usp.br/debian/ wheezy main contrib non-free
deb http://ftp.debian.org/debian/ wheezy main contrib non-free
 
### Debian 7.0 Wheezy Security 'Updates'.
deb http://sft.if.usp.br/debian-security/ wheezy/updates main contrib non-free
deb http://ftp.br.debian.org/debian-security/ wheezy/updates main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb http://linorg.usp.br/debian-security/ wheezy/updates main contrib non-free
 
### Debian 7.0 Wheezy Updates 'Volatile'.
deb http://sft.if.usp.br/debian/ wheezy-updates main contrib non-free
deb http://ftp.br.debian.org/debian/ wheezy-updates main contrib non-free
deb http://linorg.usp.br/debian/ wheezy-updates main contrib non-free
deb http://ftp.debian.org/debian/ wheezy-updates main contrib non-free
 
### Debian 7.0 Wheezy 'Proposed Updates'.
deb http://sft.if.usp.br/debian/ wheezy-proposed-updates main contrib non-free
deb http://ftp.br.debian.org/debian/ wheezy-proposed-updates main contrib non-free
deb http://linorg.usp.br/debian/ wheezy-proposed-updates main contrib non-free
deb http://ftp.debian.org/debian/ wheezy-proposed-updates main contrib non-free
 
### Debian 7.0 Wheezy 'Backports'.
deb http://sft.if.usp.br/debian/ wheezy-backports main contrib non-free
deb http://ftp.br.debian.org/debian/ wheezy-backports main contrib non-free
deb http://linorg.usp.br/debian/ wheezy-backports main contrib non-free
deb http://ftp.debian.org/debian/ wheezy-backports main contrib non-free
sources.list-004
Como o Wheezy é o atual Debian Stable, caso queiram, basta substituir o campo wheezy por stable no arquivo /etc/apt/sources.list, neste caso ficaria assim:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
### Debian 7.0 Stable.
### Chave GPG: apt-get install debian-archive-keyring
deb http://sft.if.usp.br/debian/ stable main contrib non-free
deb http://ftp.br.debian.org/debian/ stable main contrib non-free
deb http://linorg.usp.br/debian/ stable main contrib non-free
deb http://ftp.debian.org/debian/ stable main contrib non-free
 
### Debian 7.0 Stable Security 'Updates'.
deb http://sft.if.usp.br/debian-security/ stable/updates main contrib non-free
deb http://ftp.br.debian.org/debian-security/ stable/updates main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free
deb http://linorg.usp.br/debian-security/ stable/updates main contrib non-free
 
### Debian 7.0 Stable Updates 'Volatile'.
deb http://sft.if.usp.br/debian/ stable-updates main contrib non-free
deb http://ftp.br.debian.org/debian/ stable-updates main contrib non-free
deb http://linorg.usp.br/debian/ stable-updates main contrib non-free
deb http://ftp.debian.org/debian/ stable-updates main contrib non-free
 
### Debian 7.0 Stable 'Proposed Updates'.
deb http://sft.if.usp.br/debian/ stable-proposed-updates main contrib non-free
deb http://ftp.br.debian.org/debian/ stable-proposed-updates main contrib non-free
deb http://linorg.usp.br/debian/ stable-proposed-updates main contrib non-free
deb http://ftp.debian.org/debian/ stable-proposed-updates main contrib non-free
 
### Debian 7.0 Stable 'Backports'.
deb http://sft.if.usp.br/debian/ stable-backports main contrib non-free
deb http://ftp.br.debian.org/debian/ stable-backports main contrib non-free
deb http://linorg.usp.br/debian/ stable-backports main contrib non-free
deb http://ftp.debian.org/debian/ stable-backports main contrib non-free
Em seguida basta adotar os seguintes procedimentos:
1
2
3
4
5
# apt-get update
# apt-get install debian-archive-keyring
# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
sources.list-005
sources.list-006
sources.list-007
Repositórios deb-src.
Caso tenham necessidade, abaixo encontra-se um sources.list ainda mais completo, no qual estão contidos os repositórios deb-src, ou seja, os repositórios de código-fonte de pacotes.
Informações Importantes.
Debian Backports…
A partir do Debian Wheezy, o repositório debian-backports, além de oficial passa agora a ocupar os mesmos servidores dos repositórios padrão, por isso o mesmo foi imcluído, principalmente para aqueles que necessitam de um Debian Stable com pacotes mais novos, a utilização dessa release é simples:
1
2
3
4
# apt-get update
# apt-get -t wheezy-backports install pacote
# apt-get -t wheezy-backports upgrade
# apt-get -t wheezy-backports upgrade
Sobre o Backports fiz um artigo no antigo Blog e que hoje está publicado no VOL:
Com algumas modificações dá para modificar seu atual Debian Wheezy para Wheezy Backports, basta que se modifique o script constante do link abaixo:
O repo deb-multimídia…
Conforme informações já passadas o repositório deb-multimedia já não é mais necessário para a reprodução de certos tipos de mídia no Debian WHeezy, por isso o mesmo não mais faz parte dos meus confs oficiais, apesar disso, inclui o mesmo no sources.list de extras citado abaixo, maiores informações do porque não usar o deb-multimedia em seu Wheezy:
As seções contrib e non-free…
Embora não habilitadas por padrão pelo instalador Debian, julgo de extrema importância o seu uso, principalmente para aqueles que necessitam instalar drivers proprietários, tipos dos de vídeo, wi-fi, flashplugin-nonfree e etc. Caso não seja o seu caso utilize apenas a seção mais nas linhas dos repositórios.
Repositórios de extras para o Wheezy.
Repositórios extras para o Debian Wheezy poderão ser encontrados no link abaixo:
Debian OldStable (Squeeze).
O sources.list mais atual para o Debian Squeeze (OldStable), poderá ser encontrado no link abaixo:
Informações finais…
O conteúdo aqui apresentado substitui o material constante dos seguintes artigos:
 

Instalando o Asterisk 1.8 | Debian Lenny

Fonte: http://wnunes.com/2010/11/01/instalando-o-asterisk-1-8/

Salve galera!!!
O asterisk 1.8 acabou de sair do forno, a promessa de resolver todos os nossos problemas com CDR tá ai… só falta saber se funciona mesmo!!! Esse final de semana eu instalei o 1.8 e estou rodando em uma maquina de testes.
A adaptação parece que vai ser tranqüila… tudo que eu tenho no 1.4 rodou de prima, sem necessidade de adaptações…
Agora  só falta descobrir como colocar o tal do CEL pra funcionar!!!
Enquanto eu preparo um relatório bacana sobre o 1.8 para os asteriskeros velhos de guerra, segue o how-to da instalação pra quem ta começando nessa vida…
Minha instalação é baseada em debian lenny, kernel 2.6.26-2-686.
O primeiro passo é instalar as dependências…
Segundo a documentação oficial, as dependências do asterisk são:
  • GCC
  • OpenSSL
  • ncurses
  • newt
  • libxml2
  • kernel headers (Para compilação da dahdi)
Obviamente cada um desenvolve ao longo do tempo sua própria lista de dependências e trecos uteis que acabam virando parte do processo de instalação, a minha é a seguinte
#apt-get install  linux-headers-`uname -r` openssl libssl0.9.8 libssl-dev procps  bison  libtool  libedit2 libedit-dev  libeditline-dev  libeditline0  libnewt-dev  libncurses5  libncurses-dev  autoconf automake  subversion  cvs make  gcc g++  libxml2 libxml2-dev iptraf  sharutils  tcpdump nmap sox pciutils lshw unixodbc unixodbc-dev
Dependências instaladas, vamos baixar os pacotes do asterisk.
#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8.0.tar.gz
#wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases/dahdi-linux-2.4.0.tar.gz
#wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-2.4.0.tar.gz
#wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.11.4.tar.gz
Cade o addons??? Eu falo sobre isso daquiapouco….
Agora vamos descompactar os fontes..
#tar -zxvf libpri-1.4.11.4.tar.gz
#tar -zxvf dahdi-linux-2.4.0.tar.gz
#tar -zxvf dahdi-tools-2.4.0.tar.gz
#tar -zxvf asterisk-1.8.0.tar.gz
E então começamos as compilações…
Primeiro vamos compilar a LibPRI
LibPRI é a biblioteca opensource que encapsula protocolos ISDN( T1, E1 e J1). A LibPRI é dependência para a DAHDI.
A compilação da LibPRI é feita da seguinte forma.
#cd libpri-1.4.11.4
#make
#make install
#cd ..
Agora compilamos a DAHDI
A DAHDI está dividida em 2 partes
DAHDI Linux é o driver utilizado para controle das placas.
DAHDI Tools é o conjunto de aplicativos utilizado para o gerenciamento e monitoramento de dispositivos.
Para compilar a DAHDI faremos o seguinte:
#cd dahdi-linux-2.4.0
#make
#make install
#cd ..
#cd dahdi-tools-2.4.0
#./configure
#make
#make install
#make config
#cd ..
Se até aqui tudo correu bem é hora de compilar o Asterisk.
#cd asterisk-1.8.0
Por quetões legais o ILBC não vem mais junto com os fontes do Asterisk, por isso se quiser trafegar chamadas em ilbc você precisa  rodar o get_ilbc_sources.sh
#./contrib/scripts/get_ilbc_source.sh
#./configure
#make menuselect 
Pra quem já manda de Asterisk , neste ponto começam as modificações… Depois cada um da uma olhada com calma nas opções, mas os dois pontos mais importantes são:
O addons ja está nos fontes base do asterisk. Você pode habilitar os módulos do addons direto no menu.
Alguns itens abaixo está o nosso tão sonhado promessa de solução de todos os nossos problemas de CDR, Channel Event Loggin, que segundo Steve Murphy não saiu com BackEnd para MySQL porque isso era responsabilidade do pessoal do addons e tals, portanto não deixe de instalar o BackEnd para ODBC….
Mas continuando a instalação do asterisk…
Se você deseja utilizar o codec iLBC não esqueça de marca-lo na opção codec.
Salve e saída do menuselect.
#make
#make install
#make samples
#make config
Como eu não uso AEL, eu tenho o habito de remover o arquivo de configuração…
#rm /etc/asterisk/extensions.ael
#cd ..
É isso ai galera!!!! Em breve eu volto com um review sobre essa versão do asterisk!!!!

Instalando e configurando o FOP2 para monitorar o seu Asterisk

Fonte: http://asterisk.zip.net/arch2013-03-10_2013-03-16.html

Esses dias tava navegando em sites sobre Asterisk e vi o pessoal falando sobre o FOP 2 (Flash Operator Panel). Lembrei que tinha testado a primeira versão do FOP, mas não tinha gostado muito. Achei a interface um feinha.
Resolvi então testar o FOP 2 e gostei muito, compramos inclusive uma licença para monitorar mais de 15 ramais.
Estou usando no PABX da empresa monitorando todos os ramais, os dois E1s, os troncos SIP e IAX, as portas analógicas FXO (interface de celular), as filas de atendimento e as salas de conferência e estamos muito satisfeitos com o desempenho e funcionamento.

O procedimento de instalação e configuração é bem simples.

1- Faça o download do FOP 2 em http://www.fop2.com/download.php

2- Descompacte a versão que você baixou, no meu caso Debian Lenny

# cd /usr/src/
# tar -xzvf fop2-2.11-debian-i386.tgz

3- Instale o FOP 2 executando make install:

# cd fop2/
# make install

Este será o resultado do comando:

New configuration file /usr/local/fop2/fop2.cfg.new installed.
Original fop2.cfg preserved.
New configuration file /var/www/fop2/config.php.new installed.
Original config.php preserved.update-rc.d: warning: /etc/init.d/fop2 missing LSB information
update-rc.d: see  System startup links for /etc/init.d/fop2 already exist.Done!

4- Edite o arquivo fop2.cfg para configurar o FOP2

# cd /usr/local/fop2/
# vi fop2.cfg

- Configure o manager através dos parâmetros:

; AMI definitions
manager_host=localhost
manager_port=5038
manager_user=admin
manager_secret=senha

- Configure os usuários que terão acesso ao FOP2 e defina um arquivo de botões

user=8195:1234:all
buttonfile=buttons.cfg

No meu caso, 8195 é também o nome do meu usuário SIP. Dessa forma eu poderei interagir com o FOP2 para executar comandos de discagem, transferência, etc e tudo será direcionado para o telefone IP da minha mesa.

- Comente a última linha do arquivo:
;#exec autoconfig-users-freepbx.sh

5- Crie um arquivo com as configurações dos seus ramais SIP, trunks, salas de conferência e filas (buttons.cfg, conforme definido no fop2.cfg):

Exemplo de arquivo:

# vi buttons.cfg
[SIP/8195]
type=extension
extension=8195
context=Ramais
label=Junior

[QUEUE/Fila-XYZ]
type=queue
label=SAC
extension=100
context=ramais

[DAHDI/1]
type=trunk
label=E1 da Embratel
channel=DAHDI/1
channel=DAHDI/2
channel=DAHDI/3
channel=DAHDI/4

[CONFERENCE/1000]
type=conference
label=Sala de conferencia
server=1
extension=8177
context=ramais

6- Após configurar os arquivos necessários, precisamos iniciar o serviço do FOP server para que o FOP2 funcione. Faça isso executando o comando:

# /etc/init.d/fop2 start

7- Acesse a URL http://IP_SERVIDOR/fop2 e utilize o usuário e senha criado no fop2.cfg para ter acesso aos recursos do FOP

Caso você não esteja conseguindo acessar o FOP depois de digitar o login e senha, você pode iniciar o servidor manualmente usando o comando /usr/local/fop2_server e verificar qual a mensagem de erro que está sendo mostrada na inicialização do serviço.

Usando as configurações do fop2.cfg, é possível definir grupos de acesso e associá-los aos usuários. Dessa forma você poderá montar paines de operadora diferentes de acordo com cada usuário que acessar.

Para maiores informações sobre o FOP, é só consultar a documentação online dele no endereço: http://www.fop2.com/documentation.php

Asterisk + Gravação CDR no Mysql

Fonte: http://paulogvaz.blogspot.com.br/2012/02/asterisk-gravacao-cdr-no-mysql.html

Este é mais um artigo sobre Asterisk mais agora mostrando como configurar para que ele salve as ligações direto no banco de dados Mysql.





Primeiramente presumo que você já tenha o asterisk instalado em sua máquina, se não tem leia o artigo de como instalar que segue abaixo:
http://paulogvaz.blogspot.com/2012/02/asterisk-debian-dahdi.html

Com o asterisk instalado vamos ao passo seguinte:

1 - Instalar os pacotes para o mysql

# apt-get install  mysql-common libmysqlclient15-dev mysql-client mysql-server

Ao instalar o mysql-server ele irá pedir uma senha para o administrador root, não perca a senha pois vamos necessitar.

2 - Criar uma base de dados

# mysqladmin create asteriskcdr -u root -psenha


3 - Conecte a base de dados com usuário root e a senha que vc definiu ao instalar o mysql

# mysql -u root -psenha

Agora vamos criar uma tabela utilizando a base de dados asteriskcdr

mysql> use asteriskcdr


mysql> CREATE TABLE cdr (
calldate datetime NOT NULL default '0000-00-00 00:00:00',
clid varchar(80) NOT NULL default  '',
src varchar(80) NOT NULL default '',
dst varchar(80) NOT NULL default '',
dcontext varchar(80) NOT NULL default '',
channel varchar(80) NOT NULL default '',
dstchannel varchar(80) NOT NULL default '',
lastapp varchar(80) NOT NULL default '',
lastdata varchar(80) NOT NULL default '',
duration int(11) NOT NULL default '0',
billsec int(11) NOT NULL default '0',
disposition varchar(45) NOT NULL default '',
amaflags int(11) NOT NULL default '0',
accountcode varchar(20) NOT NULL default '',
uniqueid varchar(32) NOT NULL default '',
userfield varchar(255) NOT NULL default ''
);



Atenção: cuidado ao copiar e colar essas linhas acima para criar a tabela cdr, pois o mesmo pode ao colar alterar o formato de algum símbolo feito o "''" (aspasimples), ocorre muito erro ao colar podendo trocar de aspas simples para craze ou outro símbolo.

3 - Agora que criamos vamos nossa tabela cdr vamos agorar criar um usuário e dar permissão par gerenciar a base de dados:

mysql>GRANT ALL PRIVILEGES ON asteriskcdr.* TO asterisk IDENTIFIED BY '12345';
mysql>flush privileges;
mysql>quit;

A primeira linha acima cria um usuário asterisk com senha 12345 e que total permissão para a base asteriskcdr, você pode utilizar um usuário e uma senha a seu critério.

4 - Agora precisamos alterar o arquivo cdr_mysql.conf para que o asterisk possa se conectar ao mysql.

# view /etc/asterisk/crd_mysql.conf


[global]
hostname=127.0.0.1
dbname=asteriskcdr
table=cdr
password=12345
user=asterisk
port=3306
sock=/tmp/mysql.sock
userfield=1
;charset = latin1

Para ver se está tudo funcionando entre no asterisk e execute o seguinte comando:

#asterisk -r

CLI> cdr mysql status

Irá aparecer uma mensagem assim:

Connected to asteriskcdr@localhost, port 3306 using table cdr for 45 seconds.
Wrote 0 records since last restart.
Se esta mensagem aparecer é porque o asterisk se conectou com sucesso a base de dados:
Pronto seu asterisk já está bilhetando as ligações.
O asterisk por padrão ele não bilheta ligações não atendidas, mais necessitar que grave tambem essas ligações, altere o seguinte arquivo
#view /etc/asterisk/cdr.conf
e altere a lina
;unanswered = no
para
unanswered = yes
Salve e restarte o asteisk
#asterisk -r
CLI>restart now

Proto asterisk bilhetando tudo...
Boa sorte.

How to install Asterisk and A2billing on an Ubuntu server (11.04)

Fonte: http://asteriskonvps.com/how-to-install-asterisk-and-a2billing-on-an-ubuntu-server-10-04/

This installation was carried out on Ubuntu 10.04 Lucid for SolusVM on x86-64
We need to upgrade apt-get
#apt-get upgrade
#apt-get update
Configure your timezone:
#dpkg-reconfigure tzdata
Install some pre-requisites:
#apt-get install libapache2-mod-php5 php5 php5-common 
#apt-get install php5-cli php5-mysql mysql-server apache2 php5-gd (note the password for mysql, we will need it later)
#apt-get install php5-mcrypt
Add repos and install Asterisk 1.8
#apt-get install python-software-properties -y
#apt-key adv --keyserver pgp.mit.edu --recv-keys 175E41DF
#add-apt-repository "deb http://packages.asterisk.org/deb `lsb_release -cs` main"
#sudo add-apt-repository "deb-src http://packages.asterisk.org/deb `lsb_release -cs` main" (If you get an error here just ignore and carry on)

#apt-get update
#apt-get upgrade
# apt-get install asterisk
Download and install A2billing:
# cd /usr/local/src
# wget https://github.com/Star2Billing/a2billing/tarball/v1-current
# tar -zxvf v1-current
    rm v1-current
    mv Star2Billing-a2billing-* a2billing
Prep the database:
#cd a2billing/DataBase/mysql-5.x
# mysql -uroot -p < a2billing-createdb-user.sql
# ./install-db.sh
You will be asked to enter details. Enter them as follows
database name :  mya2billing
hostname : localhost
User : root
Password : mysqlpassword (This is the one we created earlier)
Copy and edit a2billing.conf:
# cp /usr/local/src/a2billing/a2billing.conf /etc/
# nano -w /etc/a2billing.conf
Make sure the first stanza looks like the following:
[database]
hostname = localhost
port = 3306
user = a2billinguser
password = a2billing
dbname = mya2billing
dbtype = mysqlAdditional files for A2billing:# chmod 777 /etc/asterisk -R
touch /etc/asterisk/additional_a2billing_iax.conf
touch /etc/asterisk/additional_a2billing_sip.conf
echo #include additional_a2billing_sip.conf >> /etc/asterisk/sip.conf
echo #include additional_a2billing_iax.conf >> /etc/asterisk/iax.conf
chown -Rf www-data /etc/asterisk/additional_a2billing_iax.conf
chown -Rf www-data /etc/asterisk/additional_a2billing_sip.conf Install the A2billing sounds:
# cd /usr/local/src/a2billing/addons/sounds
./install_a2b_sounds_deb.sh
chown -R asterisk:asterisk /usr/share/asterisk/sounds/
Edit manager.conf:
# nano -w /etc/asterisk/manager.conf
[myasterisk] 
secret=mycode 
read=system,call,log,verbose,command,agent,user 
write=system,call,log,verbose,command,agent,user
Install the AGI etc:
# mkdir /usr/share/asterisk/agi-bin
cd /usr/local/src/a2billing/AGI              
cp a2billing.php /usr/share/asterisk/agi-bin/
chown -R asterisk:asterisk /usr/share/asterisk/agi-bin
chmod 755 /usr/share/asterisk/agi-bin/a2billing.php
cp /usr/local/src/a2billing/common/lib  /usr/share/asterisk/agi-bin/lib -R
Install the webui:
# mkdir /var/www/a2billing
chown www-data:www-data /var/www/a2billing
cp -rf /usr/local/src/a2billing/admin /var/www/a2billing
cp -rf /usr/local/src/a2billing/agent /var/www/a2billing
cp -rf /usr/local/src/a2billing/customer /var/www/a2billing
cp -rf /usr/local/src/a2billing/common /var/www/a2billing
chmod 755 /var/www/a2billing/admin/templates_c
chmod 755 /var/www/a2billing/customer/templates_c
chmod 755 /var/www/a2billing/agent/templates_c
chown -R www-data:www-data /var/www
Add contexts to extensions.conf: (For wholesale termination)
# nano -w /etc/asterisk/extensions.conf
[a2billing]
; CallingCard application
;exten => _X.,1,Answer
;exten => _X.,2,Wait(2)
;exten => _X.,3,deadAGI(a2billing.php)
;exten => _X.,4,Wait(2)
;exten => _X.,5,Hangup
exten => _X.,1,deadAGI(a2billing.php)
exten => _X.,n,Hangup
[did]
; CallingCard application
exten => _X.,1,deadAGI(a2billing.php,1,did)
Add some cron entries:
# crontab -e
# update the currency table
0 6 * * * php /usr/local/src/a2billing/Cronjobs/currencies_update_yahoo.php
# manage the monthly services subscription
0 6 1 * * php /usr/local/src/a2billing/Cronjobs/a2billing_subscription_fee.php
# To check account of each Users and send an email if the balance is
#less than the user have choice.
0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_notify_account.php
# this script will browse all the DID that are reserve and check if
#the customer need to pay for it
# bill them or warn them per email to know if they want to pay in
#order to keep their DIDs
0 2 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_bill_diduse.php
# This script will take care of the recurring service.
0 12 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_process.php
# To generate invoices and for each user.
0 6 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_billing.php
# to proceed the autodialer
*/5 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_autodialer.php
# manage alarms
0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_alarm.php
Make a logfile:
# mkdir /var/log/a2billing
touch /var/log/a2billing/a2billing_agi.log
chown -R asterisk:asterisk /var/log/a2billing
Add some rotation:
# cd /etc/logrotate.d
nano -w a2billing
/var/log/a2billing/*.log {
daily
missingok
rotate 4
sharedscripts
postrotate
endscript
}
Enable SSL using default certificate for admin:
ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/000-default-ssl
# a2enmod rewrite
# service apache2 restart

Browse to http://youripaddress/a2billing/admin and login with the following credentials:
Username: root
Password : changepassword

REMEMBER TO CHANGE YOUR PASS WORD
If you like our site please consider donating any amount to keep this site running

Configuração do Asterisk 1.6.X – sip.conf

Fonte: http://mestreasterisk.com.br/configuracao/configuracao-do-asterisk-1-6-x-sip-conf/

Configurando e entendendo o arquivo sip.conf

Nesse artigo estarei mostrando algumas configurações do arquivo sip.conf.
Com as extensões configuradas podemos chamar umas as outras, efetuar e receber chamadas através de provedores Voip, escolher os codecs de audio e video, determinar o idioma das locuções e conectar nossa central Asterisk a outras centrais. Estou utilizando a versão 1.6.x mas a maioria das configurações também são válidas para as versões anteriores.

SIP.conf

[general] ; chave  onde ficam as configurações gerais de SIP
allowguest=no ; Não permitir que ramais remotos façam chamadas sem uma senha
bindport=5060 ; é a porta utilizada para que os ramais SIP possam se conectar no servidor asterisk(protocolo UDP)
bindaddr=0.0.0.0 : endereço IP para conectar-se no servidor asterisk  (nesse caso qualquer ip configurado no servidor asterisk)
;tcpenable=yes ; desde a versão 1.6 é possível configurar o servidor para que permita conexões TCP
;tcpbindaddr=0.0.0.0:5059 ; IP e Porta para as conexões SIP com o protocolo TCP
callevents=yes ; Quando existem eventos eles podem ser notificados no Asterisk Manager (util para programas externos tipo FOP)
context=ramais; esse é o contexto padrão caso os ramais não tenham esse parametro especificado
domain=sip.meudominio.com.br. ; é o dominio local para o servidor Asterisk
domain=192.168.0.100 ; Se queremos conectar no Asterisk usando um segundo dominio (exemplo uma rede VPN)
subscribecontext = subscribe; contexto onde configura os ramais para ativar a função subscribe do protocolo SIP
allowsubscribe=yes ; este permite que os ramais possam controlar o estado dos demais
notifyringing=yes ; notifica se a extensão  está ringando as demais extensões
notifyhold=yes ; notifica se a extensão está em espera
disallow=all ; desabilita todos os codec (audio e video)
allow=ulaw ; habilita o codec ulaw como padrão para todas as extensões
allow=alaw ; igual ao anterior, mas para o codec alaw
useragent=X-Lite ; a central asterisk se apresentará com este nome. A vezes alguns proveedores não permiten conectar-se a eles se reconhecem que atrás da conexão está um servidor Asterisk. E deste modo nos apresentamos como se fosse um  softphone X-Lite
realm=sip.meudominio.com ; se definirmos essa opção poderemos criar as senhas criptografadas com o protocolo MD5
t38pt_udptl=yes ; permite o uso do protocolo T38 (fax sobre IP) apenas para conexões diretas
videosupport=yes ; Para permitir video chamadas
srvlookup=yes ; permite fazer buscas de registros DNS SRV para chamadas SIP baseadas nos nomes de dominio

Registrando os provedores de chamadas

Se você utilizar linhas analógicas ou E1 não serão necessárias essas configurações. Nesse exemplo estaremos utilizando o provedor VONO.
register => loginvono:senha@vono.net.br/loginvono
Nos registramos com o provedor com o  usuario loginvono. senha  e o dominio do provedor. Se o provedor utiliza-se de uma porta diferente da 5060 teremos que especificarna linha de registro
register => loginvono:senha@vono.net.br:5061/loginvono

Configurando as extensões

[6000] ; número do ramal
accountcode=6000 ; e o código que aparecerá nos  registros de chamadas para esta extensão
language=pt-BR ; se temos instalado mais de um idioma de locução, aquí podemos definir qual o idioma usará a extensão
type=friend ; tipo de extensão. Pode ser friend, user ou peer. Friend pode fazer e receber chamadas, user apenas receber e  peer apenas pode fazer (como é  o  caso dos provedores VoIP que usamos apenas  para fazer chamadas)
secret=senha;senha da extensão para registro no Asterisk
qualify=yes ; Para saber se o tempo de resposta de uma extensão pode ser alcançada ou não
mailbox=6000@default ; é a caixa de mensagens de voz da extensão (segundo as configurações do arquivo voicemail.conf)
host=dynamic ; se extensão remota se conecta ora com um IP ora com outro
dtmfmode=rfc2833 ; é o protocolo para enviar os tons de DTMF
context=ramais; é o contexto utilizado pela extensão
canreinvite=no ; se queremos que uma conexão se conecte diretamente com outra extensão. Caso queria que o Asterisk faça a ponte então deixe com o valor no
nat=yes ; se a extensão se conecta ao servidor Asterisk por de trás de um firewall tem que usar a vlor yes
callerid=Mestre<6000> ; é o nome e o número que identifica a extensão
disallow=all ; desabilita todos os codecs
allow=gsm ; habilita o codec de audio gsm (é o primeiro a se utilizar durante uma chamada)
allow=ulaw ; habilita o codec audio ulaw
allow=alaw ; habilita o codec audio alaw
allow=g729 ; habilita o codec audio g729
allow=h263 ; habilita o codec vídeo h263

Agora um exemplo de configuração do provedor Voip

[vono] ; nome do provedor
type=friend ; para fazer e receber chamadas

username=loginvono

secret=senha

domain=vono.net.br

fromuser=loginvono

fromdomain=vono.net.br

host=vono.net.br

insecure=invite,port

qualify=no

port=5060

nat=no

disallow=all

allow=gsm

allow=g729

allow=ilbc ; altere os codecs para adequar as suas necessidades.

allow=alaw

allow=ulaw

dtmfmode=rfc2833

context=vono

reinvite=no

canreinvite=no
Cada vez que trocarmos a configuração do nosso sip.conf temos que recarregá-la. Abrimos a console do Asterisk
asterisk -rvvvvvvvvvv
e escrevemos
CLI> sip reload
Reloading SIP
Estes comandos estão disponíveis para o SIP
CLI> help sip
sip notify Send a notify packet to a SIP peer
sip prune realtime [peer|all] Prune cached Realtime users/peers
sip qualify peer Send an OPTIONS packet to a peer
sip reload Reload SIP configuration
sip set debug {on|off|ip|peer} Enable/Disable SIP debugging
sip set history {on|off} Enable/Disable SIP history
sip show {channels|subscriptio List active SIP channels or subscriptions
sip show channelstats List statistics for active SIP channels
sip show channel Show detailed SIP channel info
sip show domains List our local SIP domains
sip show history Show SIP dialog history
sip show inuse List all inuse/limits
sip show objects List all SIP object allocations
sip show peers List defined SIP peers
sip show peer Show details on specific SIP peer
sip show registry List SIP registration status
sip show sched Present a report on the status of the sched queue
sip show settings Show SIP global settings
sip show tcp List TCP Connections
sip unregister Unregister (force expiration) a SIP peer from the registry

Provem esses comandos para ver o que se passa;
Abraço a todos!

domingo, 23 de junho de 2013

Envio e Recebimento de SMS | VB0404GSM DIGIVOICE

Fonte: http://www.digivoice.com.br/forum2/viewtopic.php?id=1503

- Criada aplicacao *DgSendSMS* para funcionamento junto ao Asterisk, onde eh
  possivel enviar uma mensagem SMS utilizando placas VB0404GSM. A aplicacao
  recebe tres parametros, no primeiro o canal ou grupo de canais que sera
  utilizado para enviar a mensagem SMS, no segundo o numero do celular de
  destino e no terceiro parametro o texto da mensagem SMS.
  Segue exemplo(extensions.conf):
     exten => 1234,1,DgSendSMS(g1,98765432,'Sending a SMS example using the DgSendSMS application, thank you for using DigiVoice cards.')
     exten => 1234,n,Hangup

- Criada *extension* para recebimendo de mensagens SMS em placas DigiVoice
  VB0404GSM. Ao receber uma mensagem SMS o channel driver DigiVoice chamara
  o *extension* *dgv_sms* do *context* relativo, com prioridade 1. Desta forma
  pode-se recuperar o conteudo da mensagem SMS acessando as seguintes variaveis:
  DGV_SMS_FROM, DGV_SMS_DATE, DGV_SMS_TIME e DGV_SMS_TEXT.
  Segue exemplo(extensions.conf):
     exten => dgv_sms,1,NoOp(SMS RECEIVED FROM: ${DGV_SMS_FROM} at ${DGV_SMS_DATE}(${DGV_SMS_TIME}): ${DGV_SMS_TEXT})
     exten => dgv_sms,n,System(echo "${DGV_SMS_DATE}(${DGV_SMS_TIME}): ${DGV_SMS_TEXT}" >> /tmp/"${DGV_SMS_FROM}")
     exten => dgv_sms,n,Hangup
  Obs.: Na prioridade 2, a aplicacao *System* esta criando um arquivo no
        diretorio /tmp/, onde o nome do arquivo eh o numero do celular de origem
        da mensagem SMS, e o conteudo do arquivo eh:
        "Data(Hora): Texto da Mensagem".

Tutorial - CAllBACK asterisk

Fonte: http://drasterisk.blogspot.com.br/

 Hoje precisei criar um callback na empresa que trabalho, esse callback funciona da seguinte maneira:

Ligo na empresa do meu celular(ou de qualquer número que bine) de qualquer região, o servidor pega o meu número, desliga a chamada e me retorna, após isso, digito o numero que desejo fazer a ligação e ele disca e completa para mim.
Isso foi necessário, pois nossos celulares só fazem ligação para região 43...

Então criei uma tutorial Básico para quem necessitar.

Callback para ligações externas

primeiro, criaremos a regra de entrada, nesse caso estou simulando uma ligação entrando por um
determinado DDR de um link E1, mais pode ser ligações de entrada de qualquer tipo (FXO, SIP,
Analógico, etc) bastando apenas ser alterado para cada situação.

[entrada]

exten => _3200,1,NoOp(Realizando CallBack )
exten => _3200,2,Wait(1)
exten => _3200,3,Macro(callback,)
exten => _3200,4,Hangup()

linha 1 - mostra na tela a descrição dentro dos parenteses "()"
linha 2 - espera um segundo antes de continuar
linha 3 - vai para macro callback que veremos a seguir.
linha 4 - derruba a ligação após colher as primeiras informações.

agora, criaremos uma macro callback onde criaremos o arquivo .call que fará o retorno da ligação para o número que ligou.


[macro-callback]
exten => s,1,set(CALLBACK-FILE=/var/spool/asterisk/outgoing/${MACRO_EXTEN}-${CALLERID(num)}.call)
exten => s,n,system(echo Channel: SIP/0${CALLERID(num)}@g1entrada > ${CALLBACK-FILE})
exten => s,n,system(echo Context: saida-callback >> ${CALLBACK-FILE})
exten => s,n,system(echo Extension: 1000 >> ${CALLBACK-FILE})
exten => s,n,system(echo Callerid: ${CALLERID(num)} >> ${CALLBACK-FILE})
exten => s,n,system(echo MaxRetries: 2 >> ${CALLBACK-FILE})
exten => s,n,system(echo RetryTime: 30 >> ${CALLBACK-FILE})
exten => s,n,system(echo WaitTime: 30 >> ${CALLBACK-FILE})
exten => s,n,MacroExit


linha 1 - seto uma variável com o diretório /var/spool/asterisk/outgoing/ + o nome do arquivo que será criado automaticamente.
linhas n - no restante das linhas, escrevo dentro do arquivo as opções necessárias para rodar um arquivo .call (vejam mais informações de arquivos .call para entenderem melhor caso tenham dúvidas).
linha 2 - canal que sairá a ligação, no meu caso estou enviando pela operadora da empresa em que trabalho.
linha 3 - contexto que será direcionado para que a pessoa possa digitar o numero desejado.
linha 4 - extensão que será entregue esta ligação dentro do contexto anterior.
linha 5 - callerid da chamada
linha 6 - Numero maximo de vezes que o asterisk irá  tentar chamar o originador antes de considerar que a chamada falhou.
Este parâmetro não considera a primeira tentativa, portanto se definido como 0, o asterisk tentará chamar apenas uma vez.
linha 7 - Seguntos entre as tentativas de chamar o originador. O padrão é 300 segundos.
linha 8 - Numero de segundos que o asterisk irá chamar o originador a cada tentativa. O padrão é 45.
linha 9 - sai da Macro.

após sair da macro, o asterisk dará o hangup conforme linha 4 do contexto entrada, após isso, o arquivo .call criado já será executado chamando o número que havia ligado anteriormente, quando houver o atendimento dessa chamada, jogará para o contexto descrito no arquivo .call que criamos (saida-callback).

o contexto saida-callback dará um bip e aguardará um numero ser digitado. Nesse caso dará um Bip, mais pode-se personalizar com uma gravação da maneira que desejar.

[saida-callback]

exten => 1000,1,Answer()
exten => 1000,2,PlayBack(beep)
exten => 1000,n,Read(NUMERO)
exten => 1000,n,Dial(SIP/${NUMERO}@g1telecom,40,tg)
exten => 1000,n,Macro(hangupcall,)

linha 1 - atende a chamada
linha 2 - dá um bip após o atendimento da chamada, aqui pode-se colocar uma mensagem para o usuário ouvir tipo: digite o numero que deseja, ou coisa do tipo.
linha 3 - lê os digitos e salva na variável NUMERO
linha 4 - dá um dial para o numero capturado.
linha 5 - dá um hangup ao término da ligação.

acho que é isso pessoal, desculpem qualquer coisa, mais esse é um dos meus primeiros tutoriais e fiz correndo, qualquer erro me perdoem..rsrs.

abraços.

Asterisk – SMS com placas DigiVoice

Fonte: http://barth.com.br/blog/?cat=3

É possivel encaminhar e receber SMS utilizando placas GSM da DigiVoice, modelo VB0404-GSM.
Vou dar um exemplo de envio de SMS utilizando o Asterisk, iremos criar um arquivo de texto contendo a mensagem que será enviada por SMS, este arquivo será utilizado pelo dialplan do Asterisk, assim que um peer (ramal) digitar o código de envio de sms.
A partir de um ramal, o usuário irá digitar o código para envio de SMS seguido do telefone de destino, no nosso exemplo um número de telefone celular local.
Exemplo:
123488888888 discado a partir de um ramal do PBX-IP Asterisk.
Onde:
1234 é o código e 88888888 o número do telefone celular de destino.
[from-internal-custom]
;envio de sms
exten => _1234.,1,System(find /tmp/sms.cfg)
exten => _1234.,n,NoOP(${SYSTEMSTATUS})
exten => _1234.,n,GotoIf($["${SYSTEMSTATUS}" == "SUCCESS"]?sim:nao)
exten => _1234.,n(sim),ReadFile(SMS=/tmp/sms.cfg)
exten => _1234.,n,DgSendSMS(g1,${EXTEN:4:8},${SMS})
exten => _1234.,n,PlayBack(beep)
exten => _1234.,n,Hangup()
exten => _1234.,n(nao),PlayBack(vm-sorry)
exten => _1234.,n,Hangup()
Para receber um SMS pelo PBX-IP Asterisk podemos utilizar o exemplo abaixo, onde ao ser recebido um SMS o mesmo será salvo no diretório /tmp.
As regras devem pertencer ao contexto de entrada da placa de GSM.
[from-pstn-custom]
;receber sms
exten => dgv_sms,1,NoOP(SMS RECIVED FROM: ${DGV_SMS_FROM} at ${DGV_SMS_DATE}
(${DGV_SMS_TIME}): ${DGV_SMS_TEXT})
exten => dgv_sms,n,System(echo "--- New message ---" >> /tmp/"${DGV_SMS_FROM:3}")
exten => dgv_sms,n,System(echo "From: ${DGV_SMS_FROM}" >> /tmp/"${DGV_SMS_FROM:3}")
exten => dgv_sms,n,System(echo "Received: ${DGV_SMS_DATE}(${DGV_SMS_TIME})" >> 
/tmp/"${DGV_SMS_FROM:3}")
exten => dgv_sms,n,System(echo "Message: ${DGV_SMS_TEXT}" >> /tmp/"${DGV_SMS_FROM:3}")
exten => dgv_sms,n,System(echo " " >> /tmp/"${DGV_SMS_FROM:3}")
exten => dgv_sms,n,Hangup()

O recebimento do SMS ficará conforme o exemplo abaixo:
--- New message ---
From: 01188888888
Received: 12/01/11(10:46:53)
Message: Mensagem enviada pela placa GSM DigiVoice
 
Abraços.

Dependências para Asterisk com Debian

Fonte: http://barth.com.br/blog/?cat=3

Sempre recebo o questionamento em meus treinamentos sobre as dependências para instalar um Servidor Linux e Asterisk. Para poder ajudar a todos resolvi colocar um script que utilizo na instalação de Asterisk com Linux Debian 6.

Abaixo o código para o script de instalação de dependências.

#!/bin/sh
# Instalacao de Dependencias #
# Autor Wagner Antonio Barth #
# Data: 24/08/2011 #


# Cria Source List #
echo “
## Debian Squeeze sources.list
deb-src http://security.debian.org/ squeeze/updates main

## Debian security updates:
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

## Debian.org:
deb http://ftp.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.debian.org/debian/ squeeze main contrib non-free

## Debian Official Repository Mirror squeeze:
deb ftp://debian.oregonstate.edu/debian/ squeeze main contrib non-free
deb-src ftp://debian.oregonstate.edu/debian/ squeeze main contrib non-free
deb ftp://debian.oregonstate.edu/debian/ squeeze-proposed-updates main contrib non-free
deb-src ftp://debian.oregonstate.edu/debian/ squeeze-proposed-updates main contrib non-free
” > /etc/apt/sources.list

# Atualizar Debian #
aptitude update
aptitude -y upgrade

#  Instala Dependencias  #
aptitude -y install vim php5 apache2 mysql-server mysql-client gcc g++ ncurses-dev libxml2 libxml2-dev linux-headers-’uname -r’ openssl openssh-server openssh-client libnewt-dev zlib1g zlib1g-dev unixodbc unixodbc-dev libtool make tar wget

Crie um arquivo dependencias.sh com o script acima.
Altere suas propriedades com chmod 777 e execute na console do Linux utilizando ./dependencias.sh
Lembre que seu servidor Linux Debian deve estar conectado a internet para que seja possível instalar as dependências.
Abraços,

Envio de SMS em PHP com placas DigiVoice

Fonte: http://barth.com.br/blog/

Nosso amigo Cristiano Valença da empresa Smile Saúde desenvolveu um código em PHP para envio de SMS utilizando placas DigiVoice VB0404 GSM, e autorizou sua publicação no Blog. Muito obrigado Cristiano.
Adicionado em 27/08/2012
- Copiar e colar o código abaixo pode não funcionar, para evitar isso coloco o arquivo para download no endereço abaixo, o arquivo  encontra-se compactado em RAR:
Código em PHP.
<?php
session_start();
if(isset($_POST['enviar']))
{
$retorno = system(‘rasterisk -x \’dgv send sms ‘.$_POST['chip'].’ ‘.$_POST['destino'].’ “‘.$_POST['msg'].’”\”);
if(empty($retorno))
{
echo ‘<script>alert(“Mensagem enviada com sucesso!”);</script>’;
}
else
{
echo ‘<script>alert(“Falha ao enviar mensagem!”);</script>’;
}
}
?>
<html>
<head>
<title>
Envio de Mensagens Via PHP Utilizando uma Placa Digivoice VB0404GSM PCIex
</title>
<style>
*{
margin: 0px;
padding: 0px;
font-family: verdana;
}
#conteudo{
width: 200px;
margin: 10px auto auto 10px;
padding: 5px 0px 5px 15px;
border: 1px solid silver;
}
p{
text-align: center;
margin: auto auto 15px -18px;
}
label{
float: left;
width: 200px;
margin: 5px 0px 20px 0px;
font-size: 12px;
}
label input{
width: 150px;
font-size: 10px;
}
label textarea{
width: 180px;
font-size: 10px;
}
input[type=submit]{
margin-left: 25px;
}
</style>
</head>
<body>
<div id=”conteudo”>
<form name=”form1″ id=”form1″ method=”post” action=”<?php echo $_SERVER['PHP_SELF']; ?>” >
<p>Envio de SMS</p>
<label> N˙mero de Destino:
<input type=”text” name=”destino” id=”destino” value=”88888888″ />
</label>
<label> Mensagem: (160 Caracteres)
<textarea name=”msg”>Insira sua mensagem aqui</textarea>
</label>
<label> Escolha o chip de saida:
<select name=”chip” id=”chip”>
<option value=”1″>Chip 1</option>
<option value=”2″>Chip 2</option>
<option value=”3″>Chip 3</option>
<option value=”4″>Chip 4</option>
</select>
</label>
<input type=”submit” name=”enviar” value=”Enviar Mensagem” />
</form>
</div>
</body>
</html>
Abraços,

Cadeado utilizando AstDB | asterisk

Fonte: http://barth.com.br/blog/

Uma das facilidade mais utilizadas em telefonia é a de bloquear um determinado ramal para que não faça ligações enquanto o usuário não estiver na sala.
Este bloqueio é feito pelo usuário do ramal habilitando e desabilitando com o uso de um código e senha diretamente no ramal que será bloqueado.
Irei descrever como configurar esta facilidade utilizando o AstDB, um banco de dados padrão do Asterisk e que utiliza a arquitetura de família e chaves.
Para que o usuário possa habilitar ou desabilitar o cadeado será necessário que ele utilize uma senha, esta senha deverá ser cadastrada préviamente do próprio telefone, portanto vamos ao contexto que irá permitir criar as senhas de usuário.
Como funciona este contexto:
- Para criar uma senha de usuário basta digitar 99, será solicitada a senha e ao final será ouvido um beep.
- Caso o ramal já possua senha de usuário a ligação será desconectada.
- Para apagar a senha existente digite 991234 a partir do ramal (mude esta extenção).
Crie este contexto ao final do arquivo extensions.conf.

[accountcode]
; criar senha de usuario
;

exten=>99,1,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4})
        same=>n,GotoIF($["${DB(accountcode/${PROTOCOL}/${DEVICE:0:4})}"=""]?create-accountcode:end)
        same=>n(create-accountcode),Answer()
        same=>n,BackGround(vm-password)
        same=>n,Read(password)
        same=>n,Set(DB(accountcode/${PROTOCOL}/${DEVICE:0:4})=${password})
        same=>n,Answer()
        same=>n,Wait(1)
        same=>n,PlayBack(beep)
        same=>n,Hangup()
        same=>n(end),PlayBack(vm-goodbye)
        same=>n,Hangup()

; apagar senha de usuario
;
exten=>991234,1,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,Set(DB(accountcode/${PROTOCOL}/${DEVICE:0:4})="")
        same=>n,Answer()
        same=>n,Wait(1)
        same=>n,Playback(beep)
        same=>n,Hangup()
Agora iremos criar o contexto que habilita e desabilita o cadeado.
Como funciona este contexto:
- Para habilitar o cadeado disque a partir do ramal o código 50, será solicitada a senha de usuário que se digitada corretamente habilitará o cadeado, um beep confirmará a ação.
- Para desabilitar o cadeado disque 51, será solicitada a senha de usuário e a confirmação será informada com um beep.
Insira o contexto ao final do arquivo extensions.conf.
[cadeado]
;habilitar cadeado
;
exten=>50,1,Answer()
        same=>n,Wait(1)
        same=>n,BackGround(vm-password)
        same=>n,Read(password)
        same=>n,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4})
        same=>n,GotoIF($["${DB(accountcode/${PROTOCOL}/${DEVICE:0:4})}"="${password}"]?lock)
        same=>n,Hangup()
        same=>n(lock),Set(DB(cadeado/${PROTOCOL}/${DEVICE:0:4})=1)
        same=>n,Wait(1)
        same=>n,PlayBack(beep)
        same=>n,Hangup()

;desabilitar cadeado
;
exten=>51,1,Answer()
        same=>n,Wait(1)
        same=>n,BackGround(vm-password)
        same=>n,Read(password)
        same=>n,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
        same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
        same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4})
        same=>n,GotoIF($["${DB(accountcode/${PROTOCOL}/${DEVICE:0:4})}"="${password}"]?unlock)
        same=>n,Hangup()
        same=>n(unlock),Set(DB(cadeado/${PROTOCOL}/${DEVICE:0:4})=0)
        same=>n,Wait(1)
        same=>n,PlayBack(beep)
        same=>n,Hangup()
Nos meus cursos de Asterisk utilizo um exemplo de discagem com Macro, esta macro testa se o ramal escolhido esta disponível, ocupado ou indisponível, iremos adicionar as regras que irão validar antes de discar se o cadeado foi habilitado ou não.
Insira esta macro antes dos demais contextos no arquivo extensions.conf.
[macro-discainterno]
exten=>s,1,Set(PROTOCOL=${CUT(CHANNEL,/,1)})
 same=>n,Set(DEVICE=${CUT(CHANNEL,/,2)})
 same=>n,NoOP(${PROTOCOL}/${DEVICE:0:4})
 same=>n,Set(CADEADO=${DB(cadeado/${PROTOCOL}/${DEVICE:0:4})})
 same=>n,GotoIF($["${CADEADO}"<"1"]?Dial)
 same=>n,Hangup()
        same=>n(Dial),Dial(${ARG1}/${ARG2},${ARG3})
        same=>n,Goto(call-${DIALSTATUS})
;       same=>n(call-NOANSWER),PlayBack(naoatende)
        same=>n(call-NOANSWER),VoiceMail(${ARG2},u)
        same=>n,Hangup()
;       same=>n(call-BUSY),PlayBack(ocupado)
        same=>n(call-BUSY),VoiceMail(${ARG2},b)
        same=>n,Hangup()
;       same=>n(call-CHANUNAVAIL),PlayBack(indisponivel)
        same=>n(call-CHANUNAVAIL),VoiceMail(${ARG2},b)
        same=>n,Hangup()
Ainda no plano de discagem crie as regras de discagem entre ramais, como no exemplo abaixo, e adicione os contextos cadeado e accountcode:
[interno]
include=>cadeado
include=>accountcode
; Discar para ramais SIP
;
exten=>_2XXX,1,Macro(discainterno,SIP,${EXTEN},20)
        same=>n,Hangup()

; Discar para ramais IAX2
;
exten=>2001,1,Macro(discainterno,IAX2,2001,20)
        same=>n,Hangup()

; Discar para ramais FXS a partir de interfaces DigiVoice
;
exten=>3000,1,Macro(discainterno,DGV,63,30)

exten=>3001,1,Macro(discainterno,DGV,64,30)
Abraços a todos e sintam-se a vontade para compartilhar ou dirimir dúvidas.
Muito obrigado,

Ura Asterisk | Conf Simples de URA

Fonte: https://www.youtube.com/watch?v=FBNZw1qdklA

=> arquivo extensions.conf

;Define valores padrao para as outras sessoes
[general]

static=yes                     ;Se for yes writeprotect tem que ser no, com isso e necessario executar um reload no console do asterisk atraves do comando dialplan reload

writeprotect=no            ;Protecao contra escrita se for yes o arquivo sera atualizado automaticamente perdendo todos os comentarios

autofallthrough=yes     ;Define o auto-desligamento da chamada, se nao encontrar mais prioridades o asterisk termina a chamada

priorityjumping=yes     ;Habilita que a aplicacao possa pular para uma prioridade que normalmente e n+1, onde n e a linha que esta executando

clearglobalsvars=no    ;Nao limpar variaveis globais

[globals]

SUPORTE=sip/1000
COMERCIAL=sip/1001
SECRETARIA=sip/1002

[atendimento]
include=>gravacao
include=>empresa

exten=> 08005000,1,Goto(ura,s,1)

[empresa]
exten=> _10XX,1,Dial(SIP/${EXTEN},30)
exten=> _10XX,1,HangUp()

[ura]
exten=>s,1,Answer
exten=>s,n,Ringing
exten=>s,n,NoOp(Chamada entrou na ura)
exten=>s,n,Background(/var/lib/asterisk/sounds/empresa/bemVindo)
exten=>s,n,NoOp(Digite 1 para falar com o suporte ou 2 para falar com setor comercial)
exten=>s,n,WaitExten(6)

exten=>1,1,NoOp(Chamada foi para o suporte)
exten=>1,n,PlayBack(/var/lib/asterisk/sounds/empresa/suporte)
exten=>1,n,Dial(${SUPORTE},30)
exten=>1,n,HangUp()

exten=>2,1,NoOp(Chamada foi para o setor comercial)
exten=>2,n,PlayBack(/var/lib/asterisk/sounds/empresa/comercial)
exten=>2,n,Dial(${COMERCIAL},30)
exten=>2,n,HangUp()

;informar que o cliente digitou um número invalido
exten=>i,1,PlayBack(pbx-invalid)
exten=>i,n,Goto(ura,s,1)

;Plano utilizado no caso da gravacao da sua mensagem gravada
;exten=>i,1,PlayBack(digito_invalido)
;exten=>i,n,Goto(ura,s,1)

exten=>t,1,NoOp(O tempo para escolha foi esgotado)
exten=>t,n,PlayBack(/var/lib/asterisk/sounds/empresa/tempo_esgotado)
exten=>t,n,Dial(${SECRETARIA},10)
exten=>t,n,Voicemail(500@caixa_500)
exten=>t,n,HangUp()

[gravacao]

exten=>500,1,Wait(1)
exten=>500,n,PlayBack(beep)
exten=>500,n,Record(/var/lib/asterisk/sounds/empresa/bemVindo:alaw)
exten=>500,n,HangUp()

exten=>501,1,Wait(1)
exten=>501,n,PlayBack(beep)
exten=>501,n,Record(/var/lib/asterisk/sounds/empresa/suporte:alaw)
exten=>501,n,HangUp()

exten=>502,1,Wait(1)
exten=>502,n,PlayBack(beep)
exten=>502,n,Record(/var/lib/asterisk/sounds/empresa/comercial:alaw)
exten=>502,n,HangUp()

exten=>503,1,Wait(1)
exten=>503,n,PlayBack(beep)
exten=>503,n,Record(/var/lib/asterisk/sounds/empresa/tempo_esgotado:alaw)
exten=>503,n,HangUp()

exten=>504,1,Wait(1)
exten=>504,n,PlayBack(beep)
exten=>504,n,Record(/var/lib/asterisk/sounds/empresa/digito_invalido:alaw)
exten=>504,n,HangUp()

=>arquivo sip.conf

[general]
port=5060
bindaddr=0.0.0.0
disallow=all
allow=alaw
language=pt_BR

[template](!)
type=friend
host=dynamic
context=atendimento

[1000](template)
username=1000
secret=1000
callerid=suporte<1000>

[1001](template)
username=1001
secret=1001
callerid=comercial<1001>

[1002](template)
username=1002
secret=1002
callerid=secretaria<1002>
mailbox=500@caixa_500

[1003](template)
username=1003
secret=1003
callerid=cliente<1003>

=> arquivo voicemail.conf

; Voicemail Configuration
;

;
; NOTE: Asterisk has to edit this file to change a user's password.  This does
; not currently work with the "#include <file>" directive for Asterisk
; configuration files, nor when using realtime static configuration.
; Do not use them with this configuration file.
;

[general]
; Formats for writing Voicemail.  Note that when using IMAP storage for
; voicemail, only the first format specified will be used.
;format=g723sf|wav49|wav
;format=wav49|gsm|wav
format=gsm
; WARNING:
; If you change the list of formats that you record voicemail in
; when you have mailboxes that contain messages, you _MUST_ absolutely
; manually go through those mailboxes and convert/delete/add the
; the message files so that they appear to have been stored using
; your new format list. If you don't do this, very unpleasant
; things may happen to your users while they are retrieving and
; manipulating their voicemail.
;
; In other words: don't change the format list on a production system
; unless you are _VERY_  sure that you know what you are doing and are
; prepared for the consequences.
;
; Who the e-mail notification should appear to come from
serveremail=asterisk
;serveremail=asterisk@linux-support.net
; Should the email contain the voicemail as an attachment
attach=yes
; Maximum number of messages per folder.  If not specified, a default value
; (100) is used.  Maximum value for this option is 9999.
maxmsg=100
; Maximum length of a voicemail message in seconds
maxsecs=180
; Minimum length of a voicemail message in seconds for the message to be kept
; The default is no minimum.
minsecs=3
; Maximum length of greetings in seconds
maxgreet=60
; How many milliseconds to skip forward/back when rew/ff in message playback
skipms=3000
; How many seconds of silence before we end the recording
maxsilence=10
; Silence threshold (what we consider silence: the lower, the more sensitive)
silencethreshold=128
; Max number of failed login attempts
maxlogins=3
;
; Move heard messages to the 'Old' folder automagically.  Defaults to on.
moveheard=yes
;
; Forward an urgent message as an urgent message.  Defaults to no so
; sender can set the urgency on the envelope of the forwarded message.
forward_urgent_auto=no
;
; User context is where entries from users.conf are registered.  The
; default value is 'default'
;
;userscontext=default
;
; If you need to have an external program, i.e. /usr/bin/myapp
; called when a voicemail is left, delivered, or your voicemailbox
; is checked, uncomment this.
;externnotify=/usr/bin/myapp

; If you would also like to enable SMDI notification then set smdienable to yes.
; You will also need to make sure smdiport is set to a valid port as specified in
; smdi.conf.
;smdienable=yes
;smdiport=/dev/ttyS0

; If you need to have an external program, i.e. /usr/bin/myapp
; called when a voicemail password is changed, uncomment this. The
; arguments passed to the application are: <context> <mailbox> <newpassword>
; Note: If this is set, the password will NOT be changed in voicemail.conf
; If you would like to also change the password in voicemail.conf, use
; the externpassnotify option below instead.
;externpass=/usr/bin/myapp
;externpassnotify=/usr/bin/myapp

; If you need to have an external program, i.e. /usr/bin/myapp
; called when a user changes her voicemail password, uncomment this:
;externpasscheck=/usr/bin/myapp
; Arguments for this script are:
; mailbox context oldpass newpass

; For the directory, you can override the intro file if you want
;directoryintro=dir-intro
; The character set for voicemail messages can be specified here
;charset=ISO-8859-1
; The ADSI feature descriptor number to download to
;adsifdn=0000000F
; The ADSI security lock code
;adsisec=9BDBF7AC
; The ADSI voicemail application version number.
;adsiver=1
; Skip the "[PBX]:" string from the message title
;pbxskip=yes
; Change the From: string
;fromstring=The Asterisk PBX
; Permit finding entries for forward/compose from the directory
;usedirectory=yes
; Voicemail can be stored in a database using the ODBC driver.
; The value of odbcstorage is the database connection configured
; in res_odbc.conff
;odbcstorage=asterisk
; The default table for ODBC voicemail storage is voicemessages.
;odbctable=voicemessages
;
; Change the from, body and/or subject, variables:
;     VM_NAME, VM_DUR, VM_MSGNUM, VM_MAILBOX, VM_CALLERID, VM_CIDNUM,
;     VM_CIDNAME, VM_DATE
; Additionally, on forwarded messages, you have the variables:
;     ORIG_VM_CALLERID, ORIG_VM_CIDNUM, ORIG_VM_CIDNAME, ORIG_VM_DATE
; You can select between two variables by using dialplan functions, e.g.
;     ${IF(${ISNULL(${ORIG_VM_DATE})}?${VM_DATE}:${ORIG_VM_DATE})}
;
; Note: The emailbody config row can only be up to 512 characters due to a
;       limitation in the Asterisk configuration subsystem.
;emailsubject=[PBX]: New message ${VM_MSGNUM} in mailbox ${VM_MAILBOX}
; The following definition is very close to the default, but the default shows
; just the CIDNAME, if it is not null, otherwise just the CIDNUM, or "an unknown
; caller", if they are both null.
;emailbody=Dear ${VM_NAME}:\n\n\tjust wanted to let you know you were just left a ${VM_DUR} long message (number ${VM_MSGNUM})\nin mailbox ${VM_MAILBOX} from ${VM_CALLERID}, on ${VM_DATE}, so you might\nwant to check it when you get a chance.  Thanks!\n\n\t\t\t\t--Asterisk\n
;
; Note: ${IF()} strips spacing at the beginning and end of its true and false
; values, so a newline cannot be placed at either location.  The word 'so' is
; therefore duplicated, in order for the newline to be interpreted correctly.
;emailbody=Dear ${VM_NAME}:\n\n\tjust wanted to let you know you were just ${IF($["${VM_CIDNUM}" = "${ORIG_VM_CIDNUM}"]?left:forwarded)} a ${VM_DUR} long message (number ${VM_MSGNUM})\nin mailbox ${VM_MAILBOX} from ${VM_CALLERID}, on ${VM_DATE},\n${IF($["${VM_CIDNUM}" = "${ORIG_VM_CIDNUM}"]?so:(originally sent by ${ORIG_VM_CALLERID} on ${ORIG_VM_DATE})\nso)} you might want to check it when you get a chance.  Thanks!\n\n\t\t\t\t--Asterisk\n
;
; You can also change the Pager From: string, the pager body and/or subject.
; The above defined variables also can be used here
;pagerfromstring=The Asterisk PBX
;pagersubject=New VM
;pagerbody=New ${VM_DUR} long msg in box ${VM_MAILBOX}\nfrom ${VM_CALLERID}, on ${VM_DATE}
;
; Set the date format on outgoing mails. Valid arguments can be found on the
; strftime(3) man page
;
; Default
emaildateformat=%A, %B %d, %Y at %r
; 24h date format
;emaildateformat=%A, %d %B %Y at %H:%M:%S
;
; You can override the default program to send e-mail if you wish, too
;
mailcmd=/usr/sbin/sendmail -t
;
pollmailboxes=yes   ;   If mailboxes are changed anywhere outside of app_voicemail,
;                    ; then this option must be enabled for MWI to work.  This
;                    ; enables polling mailboxes for changes.  Normally, it will
;                    ; expect that changes are only made when someone called in
;                    ; to one of the voicemail applications.
;                    ;   Examples of situations that would require this option are
;                    ; web interfaces to voicemail or an email client in the case
;                    ; of using IMAP storage.
;
;pollfreq=30         ;   If the "pollmailboxes" option is enabled, this option
;                    ; sets the polling frequency.  The default is once every
;                    ; 30 seconds.
; If using IMAP storage, specify whether voicemail greetings should be stored
; via IMAP. If no, then greetings are stored as if IMAP storage were not enabled
;imapgreetings=no
; If imapgreetings=yes, then specify which folder to store your greetings in. If
; you do not specify a folder, then INBOX will be used
;greetingsfolder=INBOX
; Some IMAP server implementations store folders under INBOX instead of
; using a top level folder (ex. INBOX/Friends).  In this case, user
; imapparentfolder to set the parent folder. For example, Cyrus IMAP does
; NOT use INBOX as the parent. Default is to have no parent folder set.
;imapparentfolder=INBOX
;
;
;
; Each mailbox is listed in the form <mailbox>=<password>,<name>,<email>,<pager_email>,<options>
; if the e-mail is specified, a message will be sent when a message is
; received, to the given mailbox. If pager is specified, a message will be
; sent there as well. If the password is prefixed by '-', then it is
; considered to be unchangeable.
;
; Advanced options example is extension 4069
; NOTE: All options can be expressed globally in the general section, and
; overridden in the per-mailbox settings, unless listed otherwise.
;
; tz=central         ; Timezone from zonemessages below. Irrelevant if envelope=no.
 attach=yes         ; Attach the voicemail to the notification email *NOT* the pager email
attachfmt=gsm    ; Which format to attach to the email.  Normally this is the
            ; first format specified in the format parameter above, but this
            ; option lets you customize the format sent to particular mailboxes.
            ; Useful if Windows users want wav49, but Linux users want gsm.
            ; [per-mailbox only]
; saycid=yes         ; Say the caller id information before the message. If not described,
            ;     or set to no, it will be in the envelope
; cidinternalcontexts=intern    ; Internal Context for Name Playback instead of
            ; extension digits when saying caller id.
; sayduration=no     ; Turn on/off the duration information before the message. [ON by default]
; saydurationm=2        ; Specify the minimum duration to say. Default is 2 minutes
; dialout=fromvm ; Context to dial out from [option 4 from mailbox's advanced menu].
                 ; If not specified, option 4 will not be listed and dialing out
                 ; from within VoiceMailMain() will not be permitted.
sendvoicemail=yes ; Allow the user to compose and send a voicemail while inside
                  ; VoiceMailMain() [option 5 from mailbox's advanced menu].
                  ; If set to 'no', option 5 will not be listed.
 searchcontexts=yes    ; Current default behavior is to search only the default context
            ; if one is not specified.  The older behavior was to search all contexts.
            ; This option restores the old behavior [DEFAULT=no]
            ; Note: If you have this option enabled, then you will be required to have
            ; unique mailbox names across all contexts. Otherwise, an ambiguity is created
            ; since it is impossible to know which mailbox to retrieve when one is requested.
; callback=fromvm     ; Context to call back from 
            ;     if not listed, calling the sender back will not be permitted
; exitcontext=fromvm    ; Context to go to on user exit such as * or 0
                        ;     The default is the current context.
; review=yes         ; Allow sender to review/rerecord their message before saving it [OFF by default
; operator=yes      ; Allow sender to hit 0 before/after/during leaving a voicemail to
                    ; reach an operator.  This option REQUIRES an 'o' extension in the
                    ; same context (or in exitcontext, if set), as that is where the
                    ; 0 key will send you.  [OFF by default]
; envelope=no         ; Turn on/off envelope playback before message playback. [ON by default]
            ;     This does NOT affect option 3,3 from the advanced options menu
 delete=no        ; After notification, the voicemail is deleted from the server. [per-mailbox only]
            ;     This is intended for use with users who wish to receive their
            ;     voicemail ONLY by email. Note:  "deletevoicemail" is provided as an
            ;     equivalent option for Realtime configuration.
; volgain=0.0        ; Emails bearing the voicemail may arrive in a volume too
            ;     quiet to be heard.  This parameter allows you to specify how
            ;     much gain to add to the message when sending a voicemail.
            ;     NOTE: sox must be installed for this option to work.
 nextaftercmd=yes    ; Skips to the next message after hitting 7 or 9 to delete/save current message.
            ;     [global option only at this time]
 forcename=yes        ; Forces a new user to record their name.  A new user is
            ;     determined by the password being the same as
            ;     the mailbox number.  The default is "no".
 forcegreetings=no    ; This is the same as forcename, except for recording
            ;     greetings.  The default is "no".
; hidefromdir=yes    ; Hide this mailbox from the directory produced by app_directory
            ;     The default is "no".
; tempgreetwarn=yes    ; Remind the user that their temporary greeting is set

;messagewrap=no    ; Enable next/last message to wrap around to
            ; first (from last) and last (from first) message
            ; The default is "no".
; minpassword=0 ; Enforce minimum password length

; vm-password=custom_sound
            ;     Customize which sound file is used instead of the default
            ;     prompt that says: "password"
; vm-newpassword=custom_sound
            ;     Customize which sound file is used instead of the default
            ;     prompt that says: "Please enter your new password followed by
            ;     the pound key."
; vm-passchanged=custom_sound
            ;     Customize which sound file is used instead of the default
            ;     prompt that says: "Your password has been changed."
; vm-reenterpassword=custom_sound
            ;     Customize which sound file is used instead of the default
            ;     prompt that says: "Please re-enter your password followed by
            ;     the pound key"
; vm-mismatch=custom_sound
            ;     Customize which sound file is used instead of the default
            ;     prompt that says: "The passwords you entered and re-entered
            ;     did not match."
; vm-invalid-password=custom_sound
            ;     Customize which sound file is used instead of the default
            ;     prompt that says: ...
; vm-pls-try-again=custom_sound
                        ; Customize which sound file is used instead of the
                        ; default prompt that says "Please try again."
; listen-control-forward-key=#    ; Customize the key that fast-forwards message playback
; listen-control-reverse-key=*    ; Customize the key that rewinds message playback
; listen-control-pause-key=0    ; Customize the key that pauses/unpauses message playback
; listen-control-restart-key=2    ; Customize the key that restarts message playback
; listen-control-stop-key=13456789    ; Customize the keys that interrupt message playback, probably all keys not set above

; Maximum number of messages allowed in the 'Deleted' folder. If set to 0
; or no then no deleted messages will be moved. If non-zero (max 9999) then up
; to this number of messages will be automagically saved when they are
; 'deleted' on a FIFO basis.
; defaults to being off
; backupdeleted=100


[zonemessages]
; Users may be located in different timezones, or may have different
; message announcements for their introductory message when they enter
; the voicemail system. Set the message and the timezone each user
; hears here. Set the user into one of these zones with the tz= attribute
; in the options field of the mailbox. Of course, language substitution
; still applies here so you may have several directory trees that have
; alternate language choices.
;
; Look in /usr/share/zoneinfo/ for names of timezones.
; Look at the manual page for strftime for a quick tutorial on how the
; variable substitution is done on the values below.
;
; Supported values:
; 'filename'    filename of a soundfile (single ticks around the filename
;               required)
; ${VAR}        variable substitution
; A or a        Day of week (Saturday, Sunday, ...)
; B or b or h   Month name (January, February, ...)
; d or e        numeric day of month (first, second, ..., thirty-first)
; Y             Year
; I or l        Hour, 12 hour clock
; H             Hour, 24 hour clock (single digit hours preceded by "oh")
; k             Hour, 24 hour clock (single digit hours NOT preceded by "oh")
; M             Minute, with 00 pronounced as "o'clock"
; N             Minute, with 00 pronounced as "hundred" (US military time)
; P or p        AM or PM
; Q             "today", "yesterday" or ABdY
;               (*note: not standard strftime value)
; q             "" (for today), "yesterday", weekday, or ABdY
;               (*note: not standard strftime value)
; R             24 hour time, including minute
;
eastern=America/New_York|'vm-received' Q 'digits/at' IMp
central=America/Chicago|'vm-received' Q 'digits/at' IMp
central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM



[default]

1234 => 4242,Example Mailbox,root@localhost
;4200 => 9855,Mark Spencer,markster@linux-support.net,mypager@digium.com,attach=no|serveremail=myaddy@digium.com|tz=central|maxmsg=10
;4300 => 3456,Ben Rigas,ben@american-computer.net
;4310 => -5432,Sales,sales@marko.net
;4069 => 6522,Matt Brooks,matt@marko.net,,|tz=central|attach=yes|saycid=yes|dialout=fromvm|callback=fromvm|review=yes|operator=yes|envelope=yes|moveheard=yes|sayduration=yes|saydurationm=1
;4073 => 1099,Bianca Paige,bianca@biancapaige.com,,delete=1|emailsubject=You have a new voicemail.|emailbody=Click on the attachment to listen.|rip=2010-06-04
;4110 => 3443,Rob Flynn,rflynn@blueridge.net
;4235 => 1234,Jim Holmes,jim@astricon.ips,,Tz=european


;
; Mailboxes may be organized into multiple contexts for
; voicemail virtualhosting
;

[other]
;The intro can be customized on a per-context basis
;directoryintro=dir-company2
1234 => 5678,Company2 User,root@localhost

; example for our acme compartmentalized company
;
; Pete telecommutes from Chicago, so we'll customize timestamps for him.
;
;[acme]
;111 => 7383,Pete,pete@acme-widgets.com,,tz=central
;112 => 6262,Nancy,nancy@acme-widgets.com
;

;
; When using IMAP storage, imapuser and imappassword can be used to specify the
; user's credentials.
;
;[imapvm]
;4324 => 7764,Ellis Redding,red@buxton.us,,imapuser=eredding|imappassword=g3tbusy
;4325 => 2392,Andrew Dufresne,andy@dufresne.info,,imapuser=adufresne|imappassword=rockh@mmer


[zonemessages]
brazil=America/Sao_Paulo|'vm_received' QR ;zona do email, especifica data e hora

[general]
format=gsm
serveremail=asterisk@hotmail.com
maxlogins=5
maxmsg=100
delete=no
attach=yes
emailbody=Caro(a) ${VM_NAME}:\n\n\tVoce tem nova mensagem de voz.\n\nDuraçao: ${VM_DUR}.\n\nEnviado por: ${VM_CALLERID}, em ${VM_DATE}.\n\nObrigado!\n\n\t\t\t\t\--Asterisks IPBX\n emaildateformat=%A %B %d %Y at %r

[caixa_500]
include=>general
500=> 123,secretaria,empresa@hotmail.com












;