Olá Silvio,

A função que vc passou, funcionou certinho.. mas estou tendo problemas com as macros.
só coloquei a linha Noop(Resultado de ACHOU = ${ACHOU}); para saber qual é o resultado do select

Ficou assim:
context vem-pstn {
                   _8XXX => {
                                MYSQL (Connect connid localhost USUARIO SENHA proibidos);
                                MYSQL (Query resultid ${connid} SELECT callerid FROM telefones WHERE callerid = '${CALLERID(num)}');
                                MYSQL (Fetch foundRow ${resultid} ACHOU);
                                MYSQL (Disconnect ${connid});
                               /* Utilize o mysql.conf para fazer o CLEAR */

                               if ("${ACHOU}"=="${CALLERID(num)}") {
                                           Noop(Numero presente em blacklist:::Hangup);
                                           Noop(Resuldado de ACHOU = ${ACHOU});
                                            Answer();
                                           Playback(invalid);
                                           Hangup();
                                }
                                else {
                                            Noop(Numero nao esta na blacklist:::Continua);
                                           Noop(Resultado de ACHOU = ${ACHOU});
                                           &externas(${SAIDAE1}/${GRUPO2},/,${EXTEN});
                                           Hangup();
                                 }
                      }
                }

mysql.conf
[general]
autoclear=yes

macro externas
macro externas (TERMINACAO, PREFIXO, DESTINO) {
        Set(ORIGEM=${CALLERID(num)});
//      &gravachamada(${ORIGEM},${DESTINO});
        Dial(${TERMINACAO}${PREFIXO}${DESTINO},,tT);
        Return;

}

macro gravachamada (ORIGEM, DESTINO) {
        Set(NOMEARQUIVO=${ORIGEM}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${DESTINO}.WAV);
        Set(MIXMONITOR_FILENAME=${NOMEARQUIVO});
        MixMonitor(${MIXMONITOR_FILENAME});
        Return;
}

O que acontece é que vai para a macro externas, e quando eu tiro o comentario da linha  &gravachamada(${ORIGEM},${DESTINO}); para começar a gravar, nenhuma chamada entra, no cli aparece a mensagem:


-- Ringing on port 4 - callstate=0
    -- Answering port 4
    -- Executing [8...@vem-pstn:1] MYSQL("DGV/4", "Connect connid localhost USUARIO SENHA proibidos") in new stack
    -- Executing [8...@vem-pstn:2] MYSQL("DGV/4", "Query resultid 73 SELECT callerid FROM telefones WHERE callerid = '4935541392'") in new stack
    -- Executing [8...@vem-pstn:3] MYSQL("DGV/4", "Fetch foundRow 74 ACHOU") in new stack
    -- Executing [8...@vem-pstn:4] MYSQL("DGV/4", "Disconnect 73") in new stack
    -- Executing [8...@vem-pstn:5] GotoIf("DGV/4", "0?6:12") in new stack
    -- Goto (vem-pstn,8000,12)
    -- Executing [8...@vem-pstn:12] NoOp("DGV/4", "Numero nao esta na blacklist:::Continua") in new stack
    -- Executing [8...@vem-pstn:13] NoOp("DGV/4", "Resultado de ACHOU = ") in new stack
    -- Executing [8...@vem-pstn:14] Macro("DGV/4", "externas|DGV/g2|/|8000") in new stack
    -- Executing [...@macro-externas:1] Set("DGV/4", "TERMINACAO=DGV/g2") in new stack
    -- Executing [...@macro-externas:2] Set("DGV/4", "PREFIXO=/") in new stack
    -- Executing [...@macro-externas:3] Set("DGV/4", "DESTINO=8000") in new stack
    -- Executing [...@macro-externas:4] Set("DGV/4", "ORIGEM=4935541392") in new stack
    -- Executing [...@macro-externas:5] Macro("DGV/4", "gravachamada|4935541392|8000") in new stack
    -- Executing [...@macro-gravachamada:1] Set("DGV/4", "ORIGEM=4935541392") in new stack
    -- Executing [...@macro-gravachamada:2] Set("DGV/4", "DESTINO=8000") in new stack
    -- Executing [...@macro-gravachamada:3] Set("DGV/4", "NOMEARQUIVO=4935541392-20091127-112156-8000.WAV") in new stack
    -- Executing [...@macro-gravachamada:4] Set("DGV/4", "MIXMONITOR_FILENAME=4935541392-20091127-112156-8000.WAV") in new stack
    -- Executing [...@macro-gravachamada:5] MixMonitor("DGV/4", "4935541392-20091127-112156-8000.WAV") in new stack
  == Begin MixMonitor Recording DGV/4
    -- Executing [...@macro-gravachamada:6] Return("DGV/4", "") in new stack
[Nov 27 11:21:56] ERROR[28447]: app_stack.c:86 return_exec: Return without Gosub: stack is empty
  == Spawn extension (vem-pstn, 8000, 14) exited non-zero on 'DGV/4'
[Nov 27 11:21:56] NOTICE[28447]: chan_dgv.c:14951 dgv_hangup: Calling dg_HangUp on port 4
  == End MixMonitor Recording DGV/4
gw-voz-coperio*CLI>

Ou sejá, esta achamando a macro externas e dentro da externas quando chama a gravachamada da erro

Executing [...@macro-gravachamada:6] Return("DGV/4", "") in new stack
Nov 27 11:21:56] ERROR[28447]: app_stack.c:86 return_exec: Return without Gosub: stack is empty
  == Spawn extension (vem-pstn, 8000, 14) exited non-zero on 'DGV/4'
[Nov 27 11:21:56] NOTICE[28447]: chan_dgv.c:14951 dgv_hangup: Calling dg_HangUp on port 4
  == End MixMonitor Recording DGV/4

Alguém sabe o que posso fazer para resolver isso?

Obrigado

Dilceu

Sylvio Carlos Jollenbeck escreveu:
Dirceu,
          Sua vontande é criar uma blacklist de entrada (from-pstn), vamos lá.

           Sua tabela no MySQL, deve conter duas colunas (ID, SRC), vou supor que o nome da sua tabela seja blacklist.

           Seu contexto:
           context vem-pstn {
                   _8XXX =>
                               MYSQL (Connect connid localhost USUARIO SENHA proibidos);
                               MYSQL (Query resultid ${connid} SELECT src FROM blacklist WHERE src = '');
                               MYSQL (Fetch fetchid ${resultid} ACHOU);
                               MYSQL (Disconnect ${connid});
                               /* Utilize o mysql.conf para fazer o CLEAR */

                               if ("${ACHOU}"=="${CALLERID(num)}") {
                                           Noop(Numero presente em blacklist:::Hangup);
                                           Answer();
                                           Playback(beep);
                                           Hangup();
                                }
                                else {
                                           Noop(Numero nao esta na blacklist:::Continua);
                                           Dial(${SAIDA1}/${GRUPO2}/${EXTEN},,tT);
                                           Hangup();
                                }
              }
                               
Acho que ficou mais limpo seu codigo....(risos).

abs.

Sylvio Carlos Jollenbeck

          

2009/11/26 Dilceu Pazinatto <[email protected]>
Olá Pessoal,

Peço ajuda novamente para o meu problema com ação por numero de origem
(${CALLERID(num)}). Estou fazendo uma consulta no mysql para ver se o
numero existe ou não, se retornar 0, chamada deve entrar, se voltar
diferente de 0, deve dar um playback e um hangup. Nos meus testes, que
tem o numero na tabela (mysql retorna 1), da o playback e desliga
normal, beleza. porém quando o numero não existe (mysql retorna 0), nao
volta para fazer o dial para o dgv/g2. Abaixo o meu extensions.ael,
saidas do CLI e retorno do mysql nos dois casos.

Se alguém puder me dar uma dica de onde estou errado....

Grato

Dilceu



Chamada de entrada pelo DGV/g1 para DGV/g2 contexto vem-pstn

extensions.ael

globals {
       SAIDAE1=DGV;
       GRUPO1=g1;
       GRUPO2=g2;
}

macro externas (TERMINACAO, DESTINO) {
       Set(ORIGEM=${CALLERID(num)});
       &proibidos (${ORIGEM});
       Dial(${TERMINACAO}${DESTINO},,tT);
       Return;

}

macro proibidos (ORIGEM) {

       MYSQL (Connect connid localhost USUARIO SENHA proibidos);
       MYSQL (Query resultid ${connid} SELECT count(callerid) FROM
telefones where callerid = '${ORIGEM}');
       MYSQL (Fetch fetchid ${resultid} ACHOU);
       MYSQL (Clear ${fetchid});
       MYSQL (Clear ${resultid});
       MYSQL (Disconnect ${connid});
       MYSQL (Clear ${connid});
               if (${ACHOU} > 0) {
                       PlayBack (invalid);
                       HangUp;
               }
             Return;
}



context vem-pstn {
       includes {
               parkedcalls;
       }

       _80XX => {
               &externas(${SAIDAE1}/${GRUPO2},${EXTEN});
               HangUp;
       }
}


SAIDAS DE CONSOLE


CHAMADA COM ORIGEM DE UM NUMERO QUE DEVE SER PERMITIDO. (4988178028)


   -- Ringing on port 3 - callstate=0
   -- Answering port 3
   -- Executing [8...@vem-pstn:1] Macro("DGV/3",
"externas|DGV/g2|8023") in new stack
   -- Executing [...@macro-externas:1] Set("DGV/3", "TERMINACAO=DGV/g2")
in new stack
   -- Executing [...@macro-externas:2] Set("DGV/3", "DESTINO=8023") in
new stack
   -- Executing [...@macro-externas:3] Set("DGV/3", "ORIGEM=4988178028")
in new stack
   -- Executing [...@macro-externas:4] Macro("DGV/3",
"proibidos|4988178028") in new stack
   -- Executing [...@macro-proibidos:1] Set("DGV/3", "ORIGEM=4988178028")
in new stack
   -- Executing [...@macro-proibidos:2] MYSQL("DGV/3", "Connect connid
localhost USUARIO SENHA proibidos") in new stack
   -- Executing [...@macro-proibidos:3] MYSQL("DGV/3", "Query resultid 1
SELECT count(callerid) FROM telefones where callerid = '4988178028'") in
new stack
   -- Executing [...@macro-proibidos:4] MYSQL("DGV/3", "Fetch fetchid 2
ACHOU") in new stack
   -- Executing [...@macro-proibidos:5] MYSQL("DGV/3", "Clear 1") in new
stack
[Nov 26 00:08:43] WARNING[19579]: app_addon_sql_mysql.c:180
find_identifier: Identifier 1, identifier_type 2 not found in identifier
list
[Nov 26 00:08:43] WARNING[19579]: app_addon_sql_mysql.c:420
aMYSQL_clear: Invalid result identifier 1 passed in aMYSQL_clear
   -- Executing [...@macro-proibidos:6] MYSQL("DGV/3", "Clear 2") in new
stack
   -- Executing [...@macro-proibidos:7] MYSQL("DGV/3", "Disconnect 1") in
new stack
   -- Executing [...@macro-proibidos:8] MYSQL("DGV/3", "Clear 1") in new
stack
[Nov 26 00:08:43] WARNING[19579]: app_addon_sql_mysql.c:180
find_identifier: Identifier 1, identifier_type 2 not found in identifier
list
[Nov 26 00:08:43] WARNING[19579]: app_addon_sql_mysql.c:420
aMYSQL_clear: Invalid result identifier 1 passed in aMYSQL_clear
   -- Executing [...@macro-proibidos:9] GotoIf("DGV/3", "0?10:12") in new
stack
   -- Goto (macro-proibidos,s,12)
   -- Executing [...@macro-proibidos:12] NoOp("DGV/3", "Finish
if-proibidos-17") in new stack
   -- Executing [...@macro-proibidos:13] Return("DGV/3", "") in new stack
[Nov 26 00:08:43] ERROR[19579]: app_stack.c:86 return_exec: Return
without Gosub: stack is empty
 == Spawn extension (vem-pstn, 8023, 1) exited non-zero on 'DGV/3'
[Nov 26 00:08:43] NOTICE[19579]: chan_dgv.c:14951 dgv_hangup: Calling
dg_HangUp on port 3
gw-voz-coperio*CLI>

SAIDA CONSOLE MYSQL
091126 00:08:42      38 Connect     r...@localhost on proibidos
                    38 Query       SELECT count(callerid) FROM
telefones where callerid = '4988178028'
                    38 Quit

Resultado do mysql digitando o comando na linha:

mysql>  SELECT count(callerid) FROM telefones where callerid = '4988178028';
+-----------------+
| count(callerid) |
+-----------------+
|               0 |
+-----------------+
1 row in set (0.00 sec)





CHAMADA DE UM NUMERO QUE DEVE SER NEGADO

 -- Ringing on port 4 - callstate=0
   -- Answering port 4
   -- Executing [8...@vem-pstn:1] Macro("DGV/4",
"externas|DGV/g2|8023") in new stack
   -- Executing [...@macro-externas:1] Set("DGV/4", "TERMINACAO=DGV/g2")
in new stack
   -- Executing [...@macro-externas:2] Set("DGV/4", "DESTINO=8023") in
new stack
   -- Executing [...@macro-externas:3] Set("DGV/4", "ORIGEM=4935223153")
in new stack
   -- Executing [...@macro-externas:4] Macro("DGV/4",
"proibidos|4935223153") in new stack
   -- Executing [...@macro-proibidos:1] Set("DGV/4", "ORIGEM=4935223153")
in new stack
   -- Executing [...@macro-proibidos:2] MYSQL("DGV/4", "Connect connid
localhost USUARIO SENHA proibidos") in new stack
   -- Executing [...@macro-proibidos:3] MYSQL("DGV/4", "Query resultid 1
SELECT count(callerid) FROM telefones where callerid = '4935223153'") in
new stack
   -- Executing [...@macro-proibidos:4] MYSQL("DGV/4", "Fetch fetchid 2
ACHOU") in new stack
   -- Executing [...@macro-proibidos:5] MYSQL("DGV/4", "Clear 1") in new
stack
[Nov 26 00:10:11] WARNING[19595]: app_addon_sql_mysql.c:180
find_identifier: Identifier 1, identifier_type 2 not found in identifier
list
[Nov 26 00:10:11] WARNING[19595]: app_addon_sql_mysql.c:420
aMYSQL_clear: Invalid result identifier 1 passed in aMYSQL_clear
   -- Executing [...@macro-proibidos:6] MYSQL("DGV/4", "Clear 2") in new
stack
   -- Executing [...@macro-proibidos:7] MYSQL("DGV/4", "Disconnect 1") in
new stack
   -- Executing [...@macro-proibidos:8] MYSQL("DGV/4", "Clear 1") in new
stack
[Nov 26 00:10:11] WARNING[19595]: app_addon_sql_mysql.c:180
find_identifier: Identifier 1, identifier_type 2 not found in identifier
list
[Nov 26 00:10:11] WARNING[19595]: app_addon_sql_mysql.c:420
aMYSQL_clear: Invalid result identifier 1 passed in aMYSQL_clear
   -- Executing [...@macro-proibidos:9] GotoIf("DGV/4", "1?10:12") in new
stack
   -- Goto (macro-proibidos,s,10)
   -- Executing [...@macro-proibidos:10] Playback("DGV/4", "invalid") in
new stack
   -- <DGV/4> Playing 'invalid' (language 'pt_BR')
Really destroying SIP dialog
'[email protected]' Method: OPTIONS
[Nov 26 00:10:12] NOTICE[2768]: chan_dgv.c:11956 event_handler:
dialplan_echo_thread Created(3) - port 4
 == Spawn extension (vem-pstn, 8023, 1) exited non-zero on 'DGV/4'
[Nov 26 00:10:14] NOTICE[19595]: chan_dgv.c:14951 dgv_hangup: Calling
dg_HangUp on port 4
Really destroying SIP dialog
'[email protected]' Method: OPTIONS
gw-voz-coperio*CLI>

SAIDA CONSOLE MYSQL
091126 00:10:14      39 Connect     r...@localhost on proibidos
                    39 Query       SELECT count(callerid) FROM
telefones where callerid = '4935223153'
            39 Quit


Resultado do mysql digitando o comando na linha:

mysql>  SELECT count(callerid) FROM telefones where callerid = '4935223153';
+-----------------+
| count(callerid) |
+-----------------+
|               1 |
+-----------------+
1 row in set (0.00 sec)

Estrutura da  tabela proibidos:

mysql> use proibidos;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------+
| Tables_in_proibidos |
+---------------------+
| telefones           |
+---------------------+
1 row in set (0.00 sec)

mysql> desc telefones;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| callerid | varchar(20) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)



_______________________________________________
A Redfone é líder no fornecimento de bridges TDMoE &lt;-> E1
- Valor similar ao de placas E1 PCI;
- Não há problemas de compatibilidade com barramento PCI;
- Possibilitam a construção de soluções de alta disponibilidade(dois
servidores compartilham o mesmo E1)
Conheça mais sobre este produto em www.red-fone.com
_______________________________________________
Lista de discussões AsteriskBrasil.org
[email protected]
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil



--
Sylvio Carlos Jollenbeck Borin

_______________________________________________ A Redfone é líder no fornecimento de bridges TDMoE &lt;-> E1 - Valor similar ao de placas E1 PCI; - Não há problemas de compatibilidade com barramento PCI; - Possibilitam a construção de soluções de alta disponibilidade(dois servidores compartilham o mesmo E1) Conheça mais sobre este produto em www.red-fone.com _______________________________________________ Lista de discussões AsteriskBrasil.org [email protected] http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil


_______________________________________________
A Redfone é líder no fornecimento de bridges TDMoE &lt;-> E1
- Valor similar ao de placas E1 PCI;
- Não há problemas de compatibilidade com barramento PCI;
- Possibilitam a construção de soluções de alta disponibilidade(dois  
servidores compartilham o mesmo E1)
Conheça mais sobre este produto em www.red-fone.com
_______________________________________________
Lista de discussões AsteriskBrasil.org
[email protected]
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil

Responder a