<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">&lt;<a href="mailto:asterisk@juniorpolegato.com.br" target="_blank">asterisk@juniorpolegato.com.br</a>&gt;</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">&gt; Oi pessoal,<br>
&gt; Como faço para receber no meu email cada vez que forem disparadas<br>
&gt; ligaçoes entrantes ou saintes no asterisk, de tal maneira que me<br>
&gt; informe data, hora, tempo de conexão, numero discado e callerID de<br>
&gt; 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>
[]&#39;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(&#39;/etc/timezone&#39;).read().strip())<br>
except:<br>
     print &quot;No time zone support&quot;<br>
     time_zone_support = False<br>
<br>
_SMTP_SERVER = &quot;<a href="http://smtp.googlemail.com:587" target="_blank">smtp.googlemail.com:587</a>&quot;<br>
_SMTP_EMAIL = &quot;<a href="mailto:junior@gmail.com">junior@gmail.com</a>&quot;<br>
_SMTP_PASS = &quot;SeNhAdOgMaIl&quot;<br>
_SUBJECT = &#39;Dados da chamada efetuada&#39;<br>
<br>
_EXTEN_EMAIL = {<br>
     &quot;123&quot;: &quot;<a href="mailto:ramal_123@gmail.com">ramal_123@gmail.com</a>&quot;,<br>
     &quot;456&quot;: &quot;<a href="mailto:ramal_456@gmail.com">ramal_456@gmail.com</a>&quot;,<br>
     &quot;789&quot;: &quot;<a href="mailto:ramal_789@gmail.com">ramal_789@gmail.com</a>&quot;,<br>
     &quot;abc&quot;: &quot;<a href="mailto:ramal_abc@gmail.com">ramal_abc@gmail.com</a>&quot;,<br>
}<br>
<br>
_CSV_FILE = &quot;/var/log/asterisk/cdr-csv/Master.csv&quot;<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 = &#39;,&#39;):<br>
     fields = []<br>
     pos = 0<br>
     while pos &lt; len(reg):<br>
         while reg[pos] &lt; &#39; &#39;:<br>
             pos += 1<br>
         if reg[pos] in (&#39;&quot;&#39;, &quot;&#39;&quot;):<br>
             text_delimiter = reg[pos]<br>
             start = pos + 1<br>
             while pos &lt; len(reg):<br>
                 pos += 1<br>
                 while reg[pos] != text_delimiter:<br>
                     pos += 1<br>
                 if reg[pos - 1] != &#39;\\&#39;:<br>
                     pos += 1<br>
                     break<br>
             fields.append(reg[start:pos - 1])<br>
             while pos &lt; len(reg) and reg[pos] != field_delimiter:<br>
                 pos += 1<br>
         else:<br>
             start = pos<br>
             while pos &lt; len(reg) and reg[pos] != field_delimiter:<br>
                 pos += 1<br>
             text = reg[start:pos].strip()<br>
             dots = text.count(&#39;.&#39;)<br>
             if dots &lt; 2 and text.replace(&#39;.&#39;, &#39;&#39;).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 &quot;%02i:%02i:%02i&quot; % (h, m, s)<br>
<br>
def process_data(data):<br>
     data = data.strip().replace(&#39;\r&#39;, &#39;&#39;).split(&#39;/n&#39;)<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], &#39;%Y-%m-%d %H:%M:%S&#39;)<br>
             start_date = pytz.utc.localize(start_date)<br>
             start_date = start_date.astimezone(local)<br>
             start_date = start_date.strftime(&#39;%d/%m/%Y %H:%M:%S %Z(%z)&#39;)<br>
         else:<br>
             start_date = datetime.fields[_START]<br>
         body = (&#39;Origem: %s\n&#39;<br>
                 &#39;Destino: %s\n&#39;<br>
                 &#39;Data e hora: %s\n&#39;<br>
                 &#39;Tempo conectado: %s\n&#39;<br>
                 &#39;Tempo total: %s\n&#39;<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 &quot;No e-mail to %s found!&quot; % fields[_SRC]<br>
             return<br>
         try:<br>
             to = _EXTEN_EMAIL[fields[_SRC]]<br>
             email_date = time.strftime(&#39;%a, %d %b %Y %H:%M:%S %z&#39;)<br>
             msg = (&quot;From: %s\r\n&quot;<br>
                    &quot;To: %s\r\n&quot;<br>
                    &quot;Subject: %s\r\n&quot;<br>
                    &quot;Date: %s\r\n&quot;<br>
                    &quot;\r\n&quot;<br>
                    &quot;%s&quot;<br>
                    % (_SMTP_EMAIL, to, _SUBJECT, email_date, body))<br>
             server = smtplib.SMTP(_SMTP_SERVER, timeout = 60)<br>
             ehlo = server.ehlo()<br>
             if &quot;STARTTLS&quot; 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 &quot;Mail to %s sent!&quot; % to<br>
         except Exception as error:<br>
             print str(error)<br>
             print &quot;Mail to %s not sent!&quot; % to<br>
<br>
if __name__ == &quot;__main__&quot;:<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 = &#39;&#39;<br>
     while True:<br>
         # Get more data<br>
         data += csv_file.read()<br>
         if &#39;\n&#39; in data:<br>
             # Get the position of last new line<br>
             last_new_line = data.rfind(&#39;\n&#39;)<br>
             # Process data up to last new line<br>
             try:<br>
                 process_data(data[:last_new_line])<br>
             except:<br>
                 print &#39;Error processing data:&#39;, 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>