Question

Je suis en train d'écrire un service Windows qui utilise l'AMI Asterisk pour détecter lorsqu'un appel entrant, puis effectuez une requête Web en fonction de qui l'appel est et qui l'on va. Quelqu'un sait-il d'un événement dans Asterisk que je pouvais écouter includes ces deux détails? J'ai besoin du numéro de la personne en dehors du système qui appelle, mais tout ce que je pouvais utiliser pour identifier le numéro de téléphone interne étant appelé serait bien, aussi longtemps qu'il peut être utilisé en dehors d'Asterisk.

Je regardais les événements et ils ont tous le numéro de l'appelant externe sur eux mais aucun d'entre eux un lien vers l'appelant interne autre que le uniqueid qui, à moins que je construis un dictionnaire de ceux-ci dans le service que je ne sera pas pouvoir utiliser.

Était-ce utile?

La solution

Donc à la fin j'ai réussi à le faire grâce à l'aide que l'AMI et l'écoute des événements d'appel. Avec ce que nous voulions l'accès à j'ai écouté pour les événements Newchannel, composer des événements et des événements Raccrocher, bien que si tout ce que vous êtes est après le nombre de personne qui appelle et le nombre de ce qu'ils appellent je suis assez sûr que vous pourriez sortir avec surveillance seulement les événements de numérotation.

Chaque fois qu'un événement Newchannel a été reçu, je créé un objet canal et ajouté à une liste de canaux qui sont actuellement sur le serveur Asterisk. Puis, en écoutant les événements de numérotation avec le subevent de Begin, j'ai pu extraire le canal id unique de des deux parties impliquées dans l'appel et obtenir les numéros concernés. Lorsqu'un événement Raccrocher a été reçu j'ai enlevé le canal qui a été détruit. Cela semble fonctionner beaucoup pour l'instant même si nous havent eu le temps plein pour le tester si nous espérons qu'il est correct.

Autres conseils

J'ai une idée mais vous probablement pas comme la réponse:)

Nous avons essayé de le faire et a échoué donc nous avons fait quelque chose de mal:)

Ce que nous ne devions écrire AGI les scripts et les les appellent en utilisant l'interface Manager, puis grattez la ligne de commande.

Des trucs comme show channels de base concis etc, son ikky, mais cela fonctionne .. nous avons utilisé regex pour analyser la sortie de chaîne, puis a saisi les informations à partir de là, le seul problème avec faire des trucs comme ça est que vous devez regarder à chaque fois vous patch la sortie de la ligne de commande a tendance à changer patch sur.

Si vous découvrez une façon de faire cela en utilisant c # api et ne pas utiliser AGI je serais très intéressé mais nous ne pouvions pas faire ce que nous voulions avec l'api sans avoir recours à des scripts AGI à la fin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top