XMPP (gTalk) ontvangen van berichten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • maarud
  • Registratie: Mei 2005
  • Laatst online: 09:19
Ik heb op mijn website een formuliertje gemaakt die automatisch het ingevulde bericht via Google Talk verstuurt naar mijn telefoon.

Een simpele textarea met een submit knop, en via XMPPHP krijg ik keurig een berichtje binnen op mijn telefoon. Werkt vlekkeloos.

Maar, omdat dit dus vlekkeloos werkt, wil ik een level hoger. Kijken of ik ook berichten kan terugsturen, zodat ze verschijnen op mijn webpagina. Als ik dus reageer op mijn telefoon, moet de reactie verschijnen in het venster.

XMPPHP schijnt dat te kunnen doen, maar de example code hiervoor werkt niet. Ik zie dat dit via BOSH werkt, en na een Google zoektocht schijnt Google BOSH (httpbind) niet openbaar te hebben. Is er een andere manier om berichtjes op de webpagina weer te geven?

Dit is de code die werkt om te versturen naar mijn telefoon:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
include("XMPP.php");
$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'USERNAME', 'WACHTWOORD', 'xmpphp', 'gmail.com', $printlog=true);


try {
    $conn->useEncryption(true);
    $conn->connect();
    $conn->processUntil('session_start');
    $conn->presence();
    $conn->message('GEBRUIKER@gmail.com', ''.$henk.'');
    $conn->disconnect();
} catch(XMPPHP_Exception $e) {
    die($e->getMessage());
}
echo "Bericht verzonden!\n";
?>


Nu staat er op de XMPPHP site een example die nog steeds XMPP.php (en dus niet BOSH) gebruikt om berichtjes te ontvangen, alleen werkt die code niet. Ik heb encryption toegevoegd aan de code, omdat Google graag via TLS wil praten ;) Zo werkt dat ook in mijn code.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
include("xmpp.php");
$conn = new XMPP('talk.google.com', 5222, 'user', 'password', 'xmpphp', 'gmail.com', $printlog=True, $loglevel=LOGGING_INFO);
$conn->useEncryption(true);
$conn->connect();
while(!$conn->disconnected) {
    $payloads = $conn->processUntil(array('message', 'presence', 'end_stream', 'session_start'));
    foreach($payloads as $event) {
        $pl = $event[1];
        switch($event[0]) {
            case 'message':
                print "---------------------------------------------------------------------------------\n";
                print "Message from: {$pl['from']}\n";
                if($pl['subject']) print "Subject: {$pl['subject']}\n";
                print $pl['body'] . "\n";
                print "---------------------------------------------------------------------------------\n";
                $conn->message($pl['from'], $body="Thanks for sending me \"{$pl['body']}\".", $type=$pl['type']);
                if($pl['body'] == 'quit') $conn->disconnect();
                if($pl['body'] == 'break') $conn->send("</end>");
            break;
            case 'presence':
                print "Presence: {$pl['from']} [{$pl['show']}] {$pl['status']}\n";
            break;
            case 'session_start':
                $conn->presence($status="Cheese!");
            break;
        }
    }
}
?>


Echt, pakt hij de useencryption niet. Ik kan alleen niet vinden waarom. Als ik het try { } uit mijn code toevoeg aan de example code, pakt hij de encryption wel en loopt het script ook... ik zie alleen geen berichtjes verschijnen op mijn website...

Iemand verstand van XMPPHP toevallig die mij een duwtje in de juiste richting kan geven? Het script maakt verbinding (zie ik in de verbose log) maar hij haalt geen berichtjes binnen.. is dit tevergeefs omdat Google Talk dit gewoon niet ondersteunt of zit er een foutje in de code?

edit: waarom vind ik toch altijd het foutje als ik mijn topic al heb geplaatst :+ Er zit een foutje in mijn PHP code.. ik ga er even mee bezig, laat ik wel weten of het gelukt is :)

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 03:41

Patriot

Fulltime #whatpulsert

Dit gaat overigens nooit zo werken. De verbinding met de browser van de gebruiker wordt nu niet gesloten tenzij jij quit stuurt naar het script, en dat vinden de meeste browsers niet zo gaaf. Wat je beter kunt doen, is het PHP-script via de commandline draaien. Zet de berichtjes dan in de database, en laat je webpagina daar gewoon periodiek naar pollen met AJAX. Andersom kun je via webpagina dingen in de database laten zetten, die het draaiende PHP-script dan weer kan versturen.

Dat gezegd hebbende, kan ik inhoudelijk niet zoveel zeggen over XMPP met Google. Het is overigens wel wat makkelijker debuggen als je via de CLI draait, omdat je zeker weet dat datgene wat je output in je script niet ergens in een cache blijft hangen (omdat de pagina nog niet geheel gereed is om naar de bezoeker te sturen).

Acties:
  • 0 Henk 'm!

  • maarud
  • Registratie: Mei 2005
  • Laatst online: 09:19
Dat had ik inderdaad gemerkt, het script blijf inderdaad draaien totdat ik de pagina afsluit. Ik zal eens kijken of ik iets kan doen met de commandline.. want het is maar een simpele webhosting dus ik ben bang dat ik daar niets mee kan.

Eens zien welke mogelijkheden ik nog meer heb...

Acties:
  • 0 Henk 'm!

  • maarud
  • Registratie: Mei 2005
  • Laatst online: 09:19
Mijn zoektocht is nog steeds niet voltooid. Er kwamen veel namen voorbij, JSJac, JWChat, JAXL, XMPPHP, en zoveel scripts.

Maar; het zijn óf hele oude scripts (met allemaal 404 of 503 errors), of script die vanaf de commandline moeten draaien, of scripts die in Java of Python zijn geschreven...kortom, ik heb nergens iets aan.

Het enige product wat ik nodig heb is één grote textbox waarin de chat staat, en een klein textboxje voor de tekst die ingetypt moet worden. Of dat nu in google talk gebeurt of in iets anders, dat maakt mij niet uit. Het doel is om iemand vanaf mijn website te laten chatten met mij (op mijn telefoon) zonder te hoeven inloggen oid. Dat mag webbased Google Talk zijn, webbased MSN, webbased Whatsapp, webbased weet ik veel, als het maar zonder in te loggen met mij op mijn mobiel kan communiceren... maar dat schijnt erg lastig te zijn.

Misschien moet ik dan toch maar vragen om de Google Talk client te installeren..of heeft iemand nog een genial ingeving? :)