PDA

Voir la version complète : Action HTTP sur appel



nykolium
05/08/2014, 23h04
Bonjour a tous !
Je suis nouveau sur le forum et heureux de l''avoir trouvé !
je viens d'installer un Rasberry avec RASPBX + interface graphique freepbx, c'est génial.
Mon installation se compose physiquement de 5 CISCO 504G + SPA3102 + 3 softphones (tablettes)

Apres quelques heures de bidouille, tout fonctionne a merveille (filtrage, renvois etc..)
Passionné de domotique je me demandais s'il était possible d'envoyer une requête HTTP en appelant un poste.
Pour exemple mon système domotique réagit a l'appel d'une page WEB.

Exemple : http://192.168.1.100/Prise1=ON
Depuis n'importe quel navigateur, la prise s'allume.

Mon , rêve de geek serait de pouvoir composer le 400 par exemple et raccrocher , ce qui lancerait ma commande HTML.
Croyez vous que c'est possible?
Si oui comment?

quintana
05/08/2014, 23h15
Oui c'est possible, tu peux regarder du côté des AGI par exemple que tu utiliseras dans un bout de dialplan. Tu peux aussi utiliser directement CURL depuis le dialplan si tu as le module aussi.

olppp
06/08/2014, 00h01
ou utiliser features.conf. Je m'en sers pour des ouvertures de portes.

nykolium
06/08/2014, 00h18
Bhaa dit donc ! ça c'est de la réponse rapide !!
Cela dit vu mon niveau en Téléphonie IP je ne sais pas ni comment ni par où commencer…

Je n'ai pas le module dont tu parles et les AGI… bhaaa.. c'est quoi?

Pouvez vous m'aider SVP?

(Désolé d'encombrer le forum avec ça, mais même avec l'outil recherche ou google je ne trouve pas de réponse)

D'avance merci

olppp
06/08/2014, 00h41
Les agi sont des appels à des programmes externes par Asterisk, comme les CGI sur un serveur Web. Tu peux les appeler depuis le dialplan :
en ael
context porte {
2233 => {
Agi(porte.py,${CALLERID(num)});
WaitExten(1);
Hangup();
}
dans cet exemple : appel d'un programme en Python en lui passant le numéro appelant en paramètre.

ou en cours de communication utiliser une "feature" = un code dtmf, regarde les exemples dans features.conf

[applicationmap]
; Note that the DYNAMIC_FEATURES channel variable must be set to use the features
; defined here. The value of DYNAMIC_FEATURES should be the names of the features
; to allow the channel to use separated by '#'. For example:
; Set(DYNAMIC_FEATURES=myfeature1#myfeature2#myfeatu re3)
;
;testfeature => #9,callee,Playback,tt-monkeys ;Play tt-monkeys to
;callee if #9 was pressed
porte => *5,self/callee,Agi,porteB

fastm3
06/08/2014, 12h46
Comme suggéré par quintana, si c'est juste une url a fetcher, il peut etre plus simple d'utiliser curl.

exten => _X.,1,curl(http://192.168.1.100/test.php?Prise1=ON)


Il faut que la lib curl soit installée et avec un petit configure, on valide que func_curl est selectionnée avant la recompil d'asterisk.
Cheers !
Fastm3.

nykolium
08/08/2014, 00h22
Merci!
mais…
fastm3=> je ne sais pas si j'ai bien cURL, j'ai regardé dans les module mais sans succès,
cette méthode m'irait bien je ne sais pas ou aller !!


olppp=> La c'est pareil, a vrai dire je ne sais même pas ou se trouve la requête Http dans ton code.
Pour rappel je suis cour RASPBX que je gère via FREEPBX.

Je suis largué, pourtant j'ai cherché sur google avant de poster, ça m'énerve de rien comprendre.

De plus je n'y connais rien ni en Python , Ni en PHP…

c'est pas gagné...

fastm3
08/08/2014, 11h45
Merci!
mais…
fastm3=> je ne sais pas si j'ai bien cURL, j'ai regardé dans les module mais sans succès,
cette méthode m'irait bien je ne sais pas ou aller !!



Test si function curl installée

Sous asterisk cli ( lancer asterisk -r a la console )


core show function CURL

Tu dois avoir un resultat comme cela si la fonction a été correctement compilée dans ta version:


telisk*CLI> core show function CURL

-= Info about function 'CURL' =-

[Synopsis]
Retrieves the contents of a URL

[Description]
url - URL to retrieve
post-data - Optional data to send as a POST (GET is default action)


[Syntax]
CURL(url[,post-data])

[Arguments]
Not available

[See Also]
Not available
telisk*CLI>




Si la fonction est installée, tu peux juste pour commencer à tester , utilise le contexte from-internal-custom ( dans /etc/asterisk/extensions_custom.conf )

Pour faire un test rapide, tu mets ce genre de bout de code dedans:

exten => 9000,1,answer()
exten => 9000,n,Set(result=${CURL(http://localhost/domotique/domotique.php?num=${EXTEN})})
exten => 9000,n,NoOp(Results: ${result})
exten => 9000,n,GotoIf($["${result}" = "ON"]?ON)
exten => 9000,n,GotoIf($["${result}" = "OFF"]?OFF)
exten => 9000,n,Playback(domotique/erreurinconnue)
exten => 9000,n,Hangup()
exten => 9000,n(ON),Playback(domotique/operationON)
exten => 9000,n,Hangup()
exten => 9000,n(OFF),Playback(domotique/operationOFF)
exten => 9000,n,Hangup()



C'est le principe pour un exemple tres simple qui en l'etat ne marchera pas sans les fichiers audios , ni le script php. En gros , si tu composes le 9000, tu appelles ton script PHP, par simplification, en resultat , on fera juste un echo ON ou OFF en sortie. Le diaplan teste et renvoie un message de l'etat ou de la bonne execution.
Ca n'est pas compliqué mais ca demande un minimum de petites competences. Un peu de php, savoir editer un fichier, connaitre un minimum le dialplan...
Isole les pbs 1 par 1. Crée deja un script en php faisant ce que tu veux et retournant un statut simple a traiter pour le dialplan.

Tu peux regarder ce qui se passe sur la console: asterisk -r pendant que tu fais le 9000
Francois.

nykolium
09/08/2014, 01h44
Merci pour l'info !
Je vais essayer ça
Pour le PHP hummm... comment dire... je ne maitrise pas.

Pour être honnête j'ai passé au de 50heures a essayer de faire tourner un simple script pour piloter mon PC.
J'ai essayé avec easy php ou camp server, meme avec le server actif (Pastille verte) mon PC n'a jamais voulu lancer mon .bat…
l'appel se fait bien et la réponse ECHO correcte mais aucune action coté serveur…

bref c'est du Vindoz Seven …Mais que de mauvais souvenir ce PHP…
Au moins j'ai gardé les notions.

- je vais voir si j'ai cURL, si oui je testerai mon script PHP depuis une autre machine pour voir.
Merci pour tout , je part en vacance mais vous ne vous débarrasserez pas de moi comme ça !
I'll be back..