Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
sdk:alarm-via-voice [2017/04/19 12:05]
juraschek
sdk:alarm-via-voice [2017/06/30 07:43]
juraschek
Line 3: Line 3:
  
 The Script will try to reach a phonenumber for a certain time, also retries after a specific time and give up after  a defined timeout. ​ The Script will try to reach a phonenumber for a certain time, also retries after a specific time and give up after  a defined timeout. ​
 +
 +We will see the alarm as received if the Call was picked up. To be sure that a person picked up we only accept calls that last less then 10 seconds. This way we avoid false positives if a answering machine, a voice mail or a pbx will pickup the phone call.
  
 For this example we will work with die DIGITAL INPUT as an alarm. But you can trigger this script on many events. ​ For this example we will work with die DIGITAL INPUT as an alarm. But you can trigger this script on many events. ​
Line 98: Line 100:
 // How many times should we try to calll; // How many times should we try to calll;
 retries=5;//​ retries=5;//​
 +
 +//maximum time in seconds a call can be connected before we assume it's picked up by a machine
 +maxConnectTime=10;​
 +
  
  
  
 //Enable Debug Messages; //Enable Debug Messages;
-DEBUG=false;+DEBUG=true;
 void debug(string msg) { void debug(string msg) {
     if(DEBUG) {     if(DEBUG) {
Line 142: Line 148:
  
  
-    ​+    ​connectStart=0;​
     callOngoing=true;​     callOngoing=true;​
     while(callOngoing) {     while(callOngoing) {
Line 168: Line 174:
                     break;                     break;
                 case "​connected":​                 case "​connected":​
-                    debug("​handle connected: ​hangup"); +                    debug("​handle connected:"​);​ 
-                    nb_syslog("​Call with %s was answered. ​Alarm was succesfull",​phoneNo);​ +                    nb_syslog("​Call with %s was answered. ​Let's check if we have voicemail answering (max 10sec call)",​phoneNo);​ 
-                    ​sleep(2); +                    ​if (connectStart==0) connectStart=jiffy();         
-                    nb_syslog("​We will terminated the call"​);​ +                    ​ 
-                    nb_voice_call_hangup(event.call.id);​ +                     if (connectStart>​0 && jiffy()-maxConnectTime>​connectStart) { 
-                    exit(0);+                            ​nb_syslog("​We will terminated the call, call was anserwered by a machine, call was connected longer then 10 sec."); 
 +                            ​nb_syslog("​We will retry the call"​);​ 
 +                            ​nb_voice_call_hangup(event.call.id);​ 
 +                            ​connecStart=0; 
 +                        }
                     break;                     break;
                 case "​hungup":​                 case "​hungup":​
 +                    if (connectStart!=0) {
 +                        if (jiffy()-maxConnectTime<​connectStart) {
 +                        nb_syslog("​Call was ended before timeout we assume someone answered the call manually"​);​
 +                        nb_voice_call_hangup(event.call.id);​
 +                        connectStart=0;​
 +                        exit(0);
 +                        }
 +                    }
                     break;                     break;
                 default:                 default:
Line 200: Line 218:
 nb_syslog("​Alarm was not successfull after %i seconds",​jiffy()-startTime);​ nb_syslog("​Alarm was not successfull after %i seconds",​jiffy()-startTime);​
 exit(0); exit(0);
- 
  
 </​code>​ </​code>​