#!/usr/bin/php -q SetParam("caller",$caller); $m->SetParam("callername",$callername); $m->SetParam("called",$called); $m->Dispatch(); } // Initiate a call once we know the target function callInitiate($target,$ev) { Yate::Debug("Initiating dialout call to '$target'"); $m = new Yate("call.execute"); $m->id = ""; $m->SetParam("callto","external/nodata/dialout-dialer.php"); $m->SetParam("direct",$target); $m->SetParam("caller",$ev->GetValue("caller")); $m->SetParam("callername",$ev->GetValue("callername")); $m->SetParam("called",$ev->GetValue("called")); $m->Dispatch(); } // Routing failed, the number may be invalid function routeFailure($error,$ev) { $number = $ev->GetValue("called"); Yate::Output("Failed routing dialout to '$number' with error '$error'"); } // Check if we have any scheduled calls to start // NOTE: You must place your real algorithm here function checkSchedule() { // pretend we get a number to dial only ever 3rd attempt if (rand(0,99) > 33) return; // generate a random number and route to it $number = rand(10000,30000); startRouting($number); } // Only install a handler for the timer message Yate::Install("engine.timer"); // Ask Yate to restart this script if it dies unexpectedly Yate::SetLocal("restart",true); // The main loop. We pick events and handle them for (;;) { $ev=Yate::GetEvent(); if ($ev === false) break; if ($ev === true) continue; switch ($ev->type) { case "incoming": // We are sure it's the timer message $ev->Acknowledge(); // Do the processing after letting the message return switch (substr($ev->GetValue("time"),-1)) { /* Only check when second ends in 2 or 7 */ case "2": case "7": checkSchedule(); break; } break; case "answer": // Use the return of the routing message if ($ev->name == "call.route") { if ($ev->handled && ($ev->retval != "") && ($ev->retval != "-") && ($ev->retval != "error")) callInitiate($ev->retval,$ev); else routeFailure($ev->GetValue("error"),$ev); } break; default: Yate::Debug("PHP Event: " . $ev->type); } } Yate::Debug("PHP: bye!"); /* vi: set ts=8 sw=4 sts=4 noet: */ ?>