[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