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