<div dir="ltr">Obrigado pessoal, vou estudar este código do Junior, ficou interessante...outra duvida é se existe algum comando que envie para um email o CallerID de uma chamada entrante. Obrigado desde já pela disposição e atenção dos colegas.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">Em 20 de maio de 2013 15:56, Asterisk - Junior Polegato <span dir="ltr"><<a href="mailto:asterisk@juniorpolegato.com.br" target="_blank">asterisk@juniorpolegato.com.br</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Em 20-05-2013 06:45, Manecão escreveu:<br>
<div class="im">> Oi pessoal,<br>
> Como faço para receber no meu email cada vez que forem disparadas<br>
> ligaçoes entrantes ou saintes no asterisk, de tal maneira que me<br>
> informe data, hora, tempo de conexão, numero discado e callerID de<br>
> origem, identificando o ramal ou portal de voz de onde partiu a ligação.<br>
<br>
</div>Olá!<br>
<br>
Tenho uma solução de monitoramento que alimenta um banco de<br>
dados externo, mas no seu caso é só adaptar para enviar o e-mail. Não<br>
precisa fazer nenhuma alteração no seu plano de discagem.<br>
<br>
O código é feito em python e roda em segundo plano lendo o<br>
final do arquivo /var/log/asterisk/cdr-csv/Master.csv.<br>
<br>
Tentei colocar as linhas de código para enviar e-mail dentro<br>
deste código, espero que seja um ponto de partida para você.<br>
<br>
Qualquer interesse à parte, podemo negociar em PVT.<br>
<br>
E-mail recebido:<br>
<br>
Origem: 123<br>
Destino: 909092788696<br>
Data e hora: 20/05/2013 15:45:18 BRT(-0300)<br>
Tempo conectado: 00:00:13<br>
Tempo total: 00:00:30<br>
<br>
<br>
Logo abaixo tem o código em Python:<br>
<br>
[]'s<br>
Junior Polegato<br>
<br>
<br>
#!/usr/bin/env python<br>
# -*- coding: utf-8 -*-<br>
<br>
import time<br>
import smtplib<br>
import datetime<br>
try:<br>
import pytz<br>
time_zone_support = True<br>
local = pytz.timezone(open('/etc/timezone').read().strip())<br>
except:<br>
print "No time zone support"<br>
time_zone_support = False<br>
<br>
_SMTP_SERVER = "<a href="http://smtp.googlemail.com:587" target="_blank">smtp.googlemail.com:587</a>"<br>
_SMTP_EMAIL = "<a href="mailto:junior@gmail.com">junior@gmail.com</a>"<br>
_SMTP_PASS = "SeNhAdOgMaIl"<br>
_SUBJECT = 'Dados da chamada efetuada'<br>
<br>
_EXTEN_EMAIL = {<br>
"123": "<a href="mailto:ramal_123@gmail.com">ramal_123@gmail.com</a>",<br>
"456": "<a href="mailto:ramal_456@gmail.com">ramal_456@gmail.com</a>",<br>
"789": "<a href="mailto:ramal_789@gmail.com">ramal_789@gmail.com</a>",<br>
"abc": "<a href="mailto:ramal_abc@gmail.com">ramal_abc@gmail.com</a>",<br>
}<br>
<br>
_CSV_FILE = "/var/log/asterisk/cdr-csv/Master.csv"<br>
<br>
# CSV Fields from <a href="http://www.voip-info.org/wiki/view/Asterisk+cdr+csv" target="_blank">http://www.voip-info.org/wiki/view/Asterisk+cdr+csv</a><br>
_ACCOUNTCODE = 0<br>
_SRC = 1<br>
_DST = 2<br>
_DCONTEXT = 3<br>
_CLID = 4<br>
_CHANNEL = 5<br>
_DSTCHANNEL = 6<br>
_LASTAPP = 7<br>
_LASTDATA = 8<br>
_START = 9<br>
_ANSWER = 10<br>
_END = 11<br>
_DURATION = 12<br>
_BILLSEC = 13<br>
_DISPOSITION = 14<br>
_AMAFLAGS = 15<br>
<br>
# Inteval between reads from _CSV_FILE<br>
_READ_INTERVAL = 1<br>
<br>
# This function returns a list of fields in a csv record and<br>
# it identifies text, integer and float types,<br>
# ignoring left and right spaces according a field delimiter<br>
def split_csv_fields(reg, field_delimiter = ','):<br>
fields = []<br>
pos = 0<br>
while pos < len(reg):<br>
while reg[pos] < ' ':<br>
pos += 1<br>
if reg[pos] in ('"', "'"):<br>
text_delimiter = reg[pos]<br>
start = pos + 1<br>
while pos < len(reg):<br>
pos += 1<br>
while reg[pos] != text_delimiter:<br>
pos += 1<br>
if reg[pos - 1] != '\\':<br>
pos += 1<br>
break<br>
fields.append(reg[start:pos - 1])<br>
while pos < len(reg) and reg[pos] != field_delimiter:<br>
pos += 1<br>
else:<br>
start = pos<br>
while pos < len(reg) and reg[pos] != field_delimiter:<br>
pos += 1<br>
text = reg[start:pos].strip()<br>
dots = text.count('.')<br>
if dots < 2 and text.replace('.', '').isdigit():<br>
if dots:<br>
fields.append(float(text))<br>
else:<br>
fields.append(int(text))<br>
else:<br>
fields.append(text)<br>
pos += 1<br>
return fields<br>
<br>
def duration(seconds):<br>
h = seconds / 3600<br>
m = seconds / 60 % 60<br>
s = seconds % 60<br>
return "%02i:%02i:%02i" % (h, m, s)<br>
<br>
def process_data(data):<br>
data = data.strip().replace('\r', '').split('/n')<br>
for reg in data:<br>
fields = split_csv_fields(reg)<br>
if time_zone_support:<br>
start_date = datetime.datetime.strptime(<br>
fields[_START], '%Y-%m-%d %H:%M:%S')<br>
start_date = pytz.utc.localize(start_date)<br>
start_date = start_date.astimezone(local)<br>
start_date = start_date.strftime('%d/%m/%Y %H:%M:%S %Z(%z)')<br>
else:<br>
start_date = datetime.fields[_START]<br>
body = ('Origem: %s\n'<br>
'Destino: %s\n'<br>
'Data e hora: %s\n'<br>
'Tempo conectado: %s\n'<br>
'Tempo total: %s\n'<br>
% (fields[_SRC], fields[_DST], start_date,<br>
duration(fields[_BILLSEC]),<br>
duration(fields[_DURATION])))<br>
print body<br>
if fields[_SRC] not in _EXTEN_EMAIL:<br>
print "No e-mail to %s found!" % fields[_SRC]<br>
return<br>
try:<br>
to = _EXTEN_EMAIL[fields[_SRC]]<br>
email_date = time.strftime('%a, %d %b %Y %H:%M:%S %z')<br>
msg = ("From: %s\r\n"<br>
"To: %s\r\n"<br>
"Subject: %s\r\n"<br>
"Date: %s\r\n"<br>
"\r\n"<br>
"%s"<br>
% (_SMTP_EMAIL, to, _SUBJECT, email_date, body))<br>
server = smtplib.SMTP(_SMTP_SERVER, timeout = 60)<br>
ehlo = server.ehlo()<br>
if "STARTTLS" in ehlo[1]:<br>
server.starttls()<br>
server.login(_SMTP_EMAIL, _SMTP_PASS)<br>
server.sendmail(_SMTP_EMAIL, to, msg)<br>
server.quit()<br>
print "Mail to %s sent!" % to<br>
except Exception as error:<br>
print str(error)<br>
print "Mail to %s not sent!" % to<br>
<br>
if __name__ == "__main__":<br>
# Open csv file<br>
csv_file = open(_CSV_FILE)<br>
# Go to the end of file<br>
csv_file.seek(0, 2)<br>
# Try to get more data in _READ_INTERVAL<br>
data = ''<br>
while True:<br>
# Get more data<br>
data += csv_file.read()<br>
if '\n' in data:<br>
# Get the position of last new line<br>
last_new_line = data.rfind('\n')<br>
# Process data up to last new line<br>
try:<br>
process_data(data[:last_new_line])<br>
except:<br>
print 'Error processing data:', repr(data)<br>
# Delete the processed data<br>
data = data[last_new_line + 1:]<br>
# Wait for _READ_INTERVAL seconds<br>
time.sleep(_READ_INTERVAL)<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
_______________________________________________<br>
KHOMP: completa linha de placas externas FXO, FXS, GSM e E1;<br>
Media Gateways de 1 a 64 E1s para SIP com R2, ISDN e SS7;<br>
Intercomunicadores para acesso remoto via rede IP. Conheça em <a href="http://www.Khomp.com" target="_blank">www.Khomp.com</a>.<br>
_______________________________________________<br>
ALIGERA – Fabricante nacional de Gateways SIP-E1 para R2, ISDN e SS7.<br>
Placas de 1E1, 2E1, 4E1 e 8E1 para PCI ou PCI Express.<br>
Channel Bank – Appliance Asterisk - Acesse <a href="http://www.aligera.com.br" target="_blank">www.aligera.com.br</a>.<br>
_______________________________________________<br>
Para remover seu email desta lista, basta enviar um email em branco para <a href="mailto:asteriskbrasil-unsubscribe@listas.asteriskbrasil.org">asteriskbrasil-unsubscribe@listas.asteriskbrasil.org</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Obrigado,<br><br>Manoel Antonio Medeiros Filho<br> Eng.Civil- CREA/SC 11.042-1<br> ENGECALC Informática Ltda.<br> Fone:0xx48-4125-0026<br>
</div>