Comment puis-je connaître l'état d'un appel d'Asterisk et PHP?
Je suis de développer une application avec PHP et un Serveur Asterisk. Une des caractéristiques de l'application est de vérifier l'état de l'appel (sonnerie, répondu, accroché...) de l'appelant ID, donc je voudrais savoir comment faire cela, parce que je suis en train d'essayer avec un socket et l'état de la commande, mais je pense qu'il doit y avoir une meilleure façon de le faire.
Merci d'avance.
OriginalL'auteur Harph | 2010-02-23
Vous devez vous connecter pour publier un commentaire.
Ce que l'API utilisez-vous pour écrire ce programme? L'AMI? AGI? FastAGI? DeadAGI? Appel de dossiers? Il y a beaucoup de façons d'obtenir cette information.
NOTE: on ne peut pas dire si un canal a été hungup, sauf si vous êtes en utilisant l'appel des fichiers et/ou les CDR accès.
Avec l'AMI, vous pouvez utiliser la commande d'État (documentée ici: http://www.voip-info.org/wiki/view/Asterisk+Manager+API+d'Action+de Statut).
Avec l'AGI, vous permettra de connaître l'état tel qu'il est déterminé par votre programme. Si vous êtes encore dans vos AGI de script, puis l'appel est toujours en cours et déjà répondu.
Si vous êtes en utilisant l'appel des fichiers, et vous avez l'attribut Archive "oui", puis une fois que l'appel est terminé, alors vous pouvez vérifier votre outoing_done répertoire (généralement /var/lib/asterisk/outgoing_done/) pour votre dossier d'appel. Quand vous lisez les callfile, vous remarquerez que l'Astérisque est ajouté un statut au bas de l'appel du fichier, ce qui vous indiquera le statut final de l'appel.
La MEILLEUR manière d'obtenir cette information, c'est d'avoir votre script PHP de lire à partir du CDR dossiers sur votre serveur Asterisk. Votre CDR enregistrements connecter à une base de données MySQL, puis tirez des registres de votre appel à partir de la base de données.
$_GET['calledID']
). J'ai besoin d'obtenir le statut de l'appel de l'appelant id de l'. (Je ne fais pas un appel à l'aide de PHP)Puisque vous n'avez pas l'ID du canal de l'appel, il n'existe aucun moyen pour obtenir directement cette information. Vous devez plutôt utiliser l'Astérisque base de données. Si vous avez votre CDR journaux d'aller à une base de données (généralement MySQL) puis juste avoir votre script PHP de se connecter à SQL db et d'effectuer une requête pour l'identification de l'appelant, vous aurez à partir de votre script. Trouver le dernier appel effectué par l'ID de l'appelant à l'aide d'une instruction SELECT. Ensuite, il suffit d'extraire les informations dont vous avez besoin (comme du temps d'appel, fin d'appel de temps, état de l'appel, etc.)
Oui, vous avez raison, je peux obtenir l'état de l'appel à l'aide de la CDR journal de Base de Données, mais cela fonctionne lorsque l'appel est terminé, parce que l'enregistrement du journal est créé lorsque l'appel se termine. J'ai besoin d'obtenir le statut en temps réel à l'aide de variables que le téléphone peut envoyer moi par l'intermédiaire de l'URL. Une idée?
OriginalL'auteur rdegges
Harph,
Vous pouvez créer une AMI démon pour écouter AMI événements diffusés à partir d'Asterisk. Je l'ai fait à de nombreuses reprises, notamment pour l'Astérisque GUI. Si vous créez une table dans votre base de données, vous pouvez créer un démon pour écouter l'AMI d'événements et de mettre à jour l'état où ils se produisent. Ensuite, votre page web n'aurez pas à interagir avec Astérisque à tous, il suffit de lire l'état de la base de données.
Le lien ci-dessous est à partir de l'Astérisque GUI projet. Il est écrit en javascript, de sorte que votre php serait un peu différent, mais cela vous donnera une bonne base pour commencer. Commencer avec la ligne 574.
http://svn.asterisk.org/view/asterisk-gui/branches/2.0/config/js/welcome.js?view=markup
L'une des principales différences dans le javascript vs php, c'est que javascript doit utiliser l'Astérisque du démon http au lieu d'une prise de connexion directement à l'IAM. En raison de ce qu'il a à utiliser le "waitevent' trucs. Mais puisque vous serez à l'aide d'une connexion socket TCP, il suffit de garder en boucle une instruction de lecture.
Espérons que cette aide! Cette méthode semble être la plus fiable lorsque vous essayez d'obtenir des informations à partir d'Asterisk.
OriginalL'auteur Seaux
J'ai effectivement utiliser les webSockets HTML5 et AsterClick ,un middleware démon que j'ai écrit en PHP.
AsterClick est , autant que je sache ,le seul véritable event driven Astérisque interface AMI pour HTML5 sur la planète. Toutes les autres solutions sont encore coincés interrogation
le serveur.
Je peux regarder l'état des appels en temps réel, sont originaires . transfert entre (files d'attente,les "rendez-vous", de stationnement,d'individus) par simple glisser-déposer dans mon navigateur. Je peux créer
fonctionnement ad hoc dialplan entrées sans l'écrire dans le dialplan ou n'importe quoi Astérisque AMI peut faire avec SANS INTERROGATION jamais.
En Javascript je peux utiliser une méthode addEventListener() de la fonction qui prend effectivement les noms
de l'AMI des événements en tant que paramètres. Il est SANS INTERROGATION , mais plutôt lorsque l'Astérisque AMI émet un événement, il est envoyé à mon navigateur sur le webSocket génération d'un événement qui
traite les données et émet de plus en plus d'événements dans le navigateur.
J'ai aussi un outil appelé WBEA qui me permet de déployer ces mêmes HTML5 AsterClick applications en tant que stand alone bureau des exécutables pour Windows et Linux.
OriginalL'auteur DrClue
- Je utiliser la CLI de commande pour vérifier l'état du canal.Voici le code php j'utilise
OriginalL'auteur Arunu