
Zitat von
Marco83
Hat schon mal jemand Kontakte der FritzBox per SOAP synchronisiert?
Hallo Marco,
Ehrlicherweise ist das trotz der tollen Hinweise auch echt ein Gewürge. Die Dokus von AVM sind dermaßen grottig dokumentiert, dass zumindest ich an einigen Stellen nur mit trail&error weiter gekommen bin.
Tatsächlich bin ich auch kein Symcon-Anwender, aber dieser Thread ist immer noch eine der ergiebigsten Quellen zu dem Thema. Daher schaue ich auch gerade zufällig hier wieder vorbei und will Dir gerne von meinem gewonnen Wissen etwas abgeben:
Aus einem gerade fertigen Projekt (Coding simplifiziert & null error handling!):
Erst einmal brauchst Du einen SOPA-Client:
PHP-Code:
/**
* delivers a new SOAP client
*
* @param string $url Fritz!Box IP
* @param string $location TR-064 area (https://avm.de/service/schnittstellen/)
* @param string $service TR-064 service (https://avm.de/service/schnittstellen/)
* @param string $user Fritz!Box user
* @param string $password Fritz!Box password
* @return SOAP client
*/
function getclient ($url, $location, $service, $user, $password) {
$client = new SoapClient(
null,
array (
'location' => "http://".$url.":49000/upnp/control/".$location,
'uri' => "urn:dslforum-org:service:".$service,
'noroot' => True,
'login' => $user,
'password' => $password
)
);
return $client;
}
// get SOAP client for phonebook operations
$contactClient = getClient ('192.168.178.1', 'x_contact', 'X_AVM-DE_OnTel:1', 'dslf_config', [password]);
Dann z.B. zum Auslesen des Telefonbuchs:
PHP-Code:
// load current phonebook
$result = $contactClient->GetPhonebook(new SoapParam(0, 'NewPhonebookID')); // first = 0!
$phoneBook = @simplexml_load_file($result['NewPhonebookURL']);
$phoneBook->asXML();
Um einen Eintrag zu ändern oder hinzuzufügen musst Du die Daten in einen schönen XML-Envelop packen (hat mich einen Tag und zig Web recherchen gekostet, bis ich den richtigen Aufbau hatte. Also nicht die Datenstruktur - die ist wie im Telefonbuch easy zu erstellen, sondern den SOAP Envelop ringsrum...:
PHP-Code:
/**
* delivers a minimal contact structure for AVMs TR-064 interface
*
* @param string $number phone number
* @param string $caller callers name or alias
* @param string $type phone type (home, work, fax etc.)
* @return xml SOAP envelope:
* <?xml version="1.0"?>
* <Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
* <contact>
* <person>
* <realName>$caller</realName>
* </person>
* <telephony>
* <number id="0" type=$type>$number</number>
* </telephony>
* </contact>
* </Envelope>
*/
function newEntry ($number, $caller, $type) : SimpleXMLElement {
$envelope = new simpleXMLElement('<Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"></Envelope>');
$contact = $envelope->addChild('contact');
$person = $contact->addChild('person');
$person->addChild('realName', $caller);
$telephony = $contact->addChild('telephony');
$phone = $telephony->addChild('number', $number);
$phone->addAttribute('id', 0);
$phone->addAttribute('type', $type);
return $envelope;
}
So und nun rein ins Telefonbuch:
PHP-Code:
// assamble minimal contact structure
$xmlEntry = newEntry([Nummer],[Name], [phonetype]); // phonetype -> home, work, fax_work, mobil
// add the spam call as new phonebook entry
$contactClient->SetPhonebookEntry(
new SoapParam($config['setPhonebook'], 'NewPhonebookID'),
new SoapParam(null, 'NewPhonebookEntryID'), // null -> new or int of designated Index!
new SoapParam($xmlEntry, 'NewPhonebookEntryData')
);
Don´t have too much fun!
So und nun zu der Frage warum ich hier wieder auf der suche nach Infos bin:
Ich versuche per script einen eingehenden Anruf zu killen (nicht anzunehmen -> erweiterte Rufnummernbehandlung für Spezialfälle).
Meine letzten Versuche waren:
PHP-Code:
# pick up call
$phoneClient->{'X_AVM-DE_DialNumber'}(new SoapParam('*09',"NewX_AVM-DE_PhoneNumber"));
// sleep(4); habe es mit und ohne wartezeiten probiert
# disconnect call
$phoneClient->{'X_AVM-DE_DialHangup'}();
Hat jemand mit so etwas etwas Zustande gebracht?
Black Senator