Pergunta

Atualmente, estou escrevendo um serviço do Windows que usa o ASTERISK AMI para detectar quando uma chamada está entrando e, em seguida, execute uma solicitação da Web com base em quem é a chamada e para quem ela vai. Alguém conhece um evento no Asterisk que eu poderia ouvir os dois detalhes? Eu preciso do número de pessoas fora do sistema que está ligando, mas qualquer coisa que eu possa usar para identificar o número de telefone interno que está sendo chamado seria bom, desde que possa ser usado fora do asterisco.

Eu estava olhando para os eventos e todos eles têm o número de chamadas externas neles, no entanto, nenhum deles vincula ao chamador interno que não seja com o únicoID que, a menos que eu construa um dicionário deles no serviço, não poderei usar.

Foi útil?

Solução

Então, no final, consegui fazer isso usando apenas o AMI e ouvindo eventos de chamada. Com o que queríamos acessar, eu ouvia os eventos do Newchannel, os eventos de discagem e os eventos de espera, embora se você procura o número de quem está ligando e o número de quem eles estão chamando, eu tenho certeza de que você pode se safar de monitoramento Apenas os eventos de discagem.

Cada vez que um evento de novo canal era recebido, criou um objeto de canal e o adicionei a uma lista de canais que estavam atualmente no servidor Asterisk. Então, ouvindo os eventos de discagem com o subevento do início, pude extrair os IDs de canal exclusivos de ambas as partes envolvidas na chamada e depois envolver os números. Quando um evento de espera foi recebido, removi o canal que estava sendo destruído. Isso parece estar funcionando muito bem por enquanto, embora não tenhamos tido em tempo integral para testá -lo, então espero que esteja correto.

Outras dicas

Eu tenho uma ideia, mas você provavelmente não vai gostar da resposta :)

Tentamos fazer isso e falhamos, então fizemos algo mau :)

O que fizemos foi escrever scripts AGI e eles os chamam usando a interface do gerente e depois raspar a linha de comando.

Coisas como os canais principais de canais conciso etc., é ikky, mas funciona. Usamos Regex para analisar a saída da string e depois pegamos as informações de lá, o único problema de fazer coisas assim é que você deve assistir toda vez que corrigir como consertar como A saída da linha de comando tende a alterar o patch para patch para.

Se você descobrir uma maneira de fazer isso usando a API C# e não usando a AGI, eu ficaria muito interessado, mas não poderíamos fazer o que queríamos com a API sem recorrer a scripts AGI no final.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top