Generer en PUSH når API leverer nye data

Hej,
Jeg er kunde hos Firmafon der tilbyder et API til deres telefonsystem. Super smart! Det har dog et par mangler som jeg forsøger selv at programmere mig ud af.
Én af manglerne er en push der gør en action så snart der registreres et nyt indgående opkald.
Via API'et har man mulighed for at trække igangværende opkald med status "ringing".
Er det muligt at lave et script der konstant holder øje med om der kommer et indgående kald?
Det kunne jo være et hvilket som helst API den holdt øje med, så mit spørgsmål går vel bare på om det er muligt at lave en slags overvågning af en url hvor mit API måske kører uden at det belaster serveren unødigt.
Jeg skal bruge funktionen til at skabe en push notification hos min bruger for at synliggøre et nyt indgående opkald.

Hej @psto
Hvis ikke Firmafon tilbyder noget i deres ende, er der ikke rigtigt noget at gøre, andet end at trække på deres API hver X sek. for at se om der nogle der ringer. Ikke særligt praktisk, men det virker.
Det er mange år siden jeg var kunde ved Firmafon og dengang havde de ikke noget, der muliggør det du efterspørger, og ud fra den dokumentation du netop sender, ligner det ikke der er kommet noget siden som bl.a. Webhooks eller Streaming APIs.
Jeg ville nok vælge at GET /reception/status, hvis det er muligt i dit tilfælde, så du ikke skal bøvle med alt for meget data. Så får du en int tilbage med antal "ringing", og udfra denne, kan du bygge dit kald.
Du kan evt. køre dine API-kald via Javascript/jQuery, hvis du har en browser som står åben, som så kan give besked hvis der er nye opkald, det er bl.a. sådan vi gør med vores LiveChat her på kontoret, hvor vores infoskærme viser en rød kasse, hvis der er brugere på vores live-chat kundeservice.
Håber dette svarede på dit spørgsmål.
Med venlige hilsner Daniel Bahl (@db)
CEO – v5.dk ApS

Hej
, @db
Tak for hurtig respons.
Det er desværre lidt samme løsning jeg selv er nået frem til, men begriber ikke at der ikke er en smartere løsning. Øv!
Er der nogen fidus i at køre det som et Cronjob der looper x antal gange hvis jeg skal undgå afhængigheden af en browser?
Mange hilsner - Patrick

Ja, det er muligt at eksekvere et cronjob, men da et cronjob eksekveres hvert minut, er du nødt til at lave lidt hacks i dit PHP-script, hvis du ønsker at kører dit kald ex. hvert sekund. @psto
Først, se vores blogindlæg her på v5.dk om at forhindre cronjobs i at overlappe hinanden.
Herefter kan du bruge følgende kode til at eksekvere dine kald, 60 gange:
$start = microtime(true);
set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
doFirmafonStatus();
time_sleep_until($start + $i + 1);
}
Tjek evt. om Firmafon har Rate limiting på deres API, altså så det måske kun kan kaldes X antal gange i timen, i så fald, skal du naturligvis overholde disse regler
Edit: Bemærk ovenstående kode er et eksempel hvor den kører en loop 60 gange, og pauser 1 sekund mellem hvert kald.
Redigeret af
@db
d. 27.02.2016 kl. 10:40 Med venlige hilsner Daniel Bahl (@db)
CEO – v5.dk ApS

Et alternativ i Bash, hvis du ikke vil benytte dig af watch-kommmandoen, ville være at bruge et simpelt while loop:
#!/bin/bash
## Følgende fil her, vil eksekvere koden imellem do/done uendeligt.
## Indtil den enten for en exit 0 eller return status. (False.)
## Eller at du stopper scriptet med CTRL + C.
while :
do
## Eksekver et PHP script.
php filnavn.php
## Eksekver en Bash fil.
sh filnavn
## Eksekver en Python fil.
python filnavn.py
## Når filen er færdig med at eksekvere "sov" i nogen sekunder.
## Du kan fjerne sleep, og så vil den køre fra toppen så hurtigt den kan.
sleep 5 # venter fem sekunder og starter forfra - fra toppen
done
Med venlige hilsner
Daniel H. Hemmingsen (@dhh)