RootsLabs

More than a tool ! GitHub Google+ LinkedIn RSS

Notifier via XMPP en PHP

Progi1984 - Commentaires (3)

XMPP peut vous paraître un acronyme assez agressif, mais c’est un ensemble de protocoles ouverts pour la messagerie instantanée qui se cache derrière Google Talk/Hangout ou derrière la messagerie instantanée de Facebook. Donc dans cet article, après les notifications HTML5 et par email, nous allons utiliser PHP pour envoyer un petit message de chat sur Google Talk.

Logo XMPP

Installation de la librairie JAXL

Comme d’habitude, nous allons utiliser Composer pour récupérer la librairie JAXL :

{
  "require": {
     "abhinavsingh/jaxl": "3.x-dev",
  }
}

Lien : Packagist : abhinavsingh/jaxl

Récupération d’un token d’accès OAuth pour parler XMPP avec Google Talk

Pour pouvoir se connecter au serveur de Google Talk, il faut un token d’accès car Google utilise une authentification XMPP nommée « Google Talk X-OAUTH2 ».
Pour récupérer le token d’accès :

  • Aller sur https://developers.google.com/oauthplayground/
  • Première étape : il faut rentrer le « scope » lié à Google Talk : https://www.googleapis.com/auth/googletalk
    Google Talk : OAuth 2 : Etape 1
  • Seconde étape : il faut autoriser Google à envoyer des messages instantanées
    Google Talk : OAuth 2 : Etape 2
  • Troisième étape : on a récupéré un code d’autorisation, mais il nous manque encore les tokens. Pour cela, il faut cliquer sur « Exchange authorization code for tokens »
    Google Talk : OAuth 2 : Etape 3
  • Dernière étape : on récupère le token d’accès pour l’utiliser dans notre prochaine étape
    Google Talk : OAuth 2 : Etape 4

Utilisation de JAXL pour envoyer un message sur Google Talk

Après avoir initialisé Composer, on appelle l’autoload de Composer.

include_once 'vendor/autoload.php';

On initialise JAXL avec le token précédemment récupéré :

$xmppClient = new JAXL(array(
  // Credentials
  'jid' => 'user@gmail.com',
  'pass' => 'TOKEN',
  // AUTH
  'auth_type' => 'X-OAUTH2',
  // SERVER
  'host' => 'talk.google.com',
  'port' => 5222,
  'force_tls' => true,
  // LOG
  'log_level' => JAXL_INFO
));

JAXL fonctionne à base de callbacks c’est-à-dire qu’en fonction de l’évènement, on appellera telle ou telle fonction.
Ainsi, dans notre cas, juste après le succès de la connexion, on envoie notre message.

// SUCCESS
$xmppClient->add_cb('on_auth_success', function() {
  global $xmppClient;
  _info('AUTH SUCCESS : [jid] : '.$xmppClient->full_jid->to_string());

  $xmppClient->set_status('available!', 'dnd', 10);
  $xmppClient->send(new XMPPMsg(array('to'=>'user@gmail.com'), '['.date('Y-m-d H:i:s').'] Hello world'));
  $xmppClient->send_end_stream();
});

// FAILURE
$xmppClient->add_cb('on_auth_failure', function($reason) {
  global $xmppClient;
  _info('AUTH FAILED : '.$reason);
  $xmppClient->send_end_stream();
});

// LOGOUT
$xmppClient->add_cb('on_disconnect', function() {
  _info('DISCONNECT');
});

Après avoir défini nos callbacks, on utilise la méthode start.

$xmppClient->start();

Conclusion

Et voilà, vous pouvez désormais échanger XMPP avec Google Talk. Avec les exemples de JAXL, il y a même moyen de faire un bot qui répondra à vos échanges.
Après Google Talk, il est possible de discuter avec de nombreux services utilisant XMPP comme protocole de messagerie : Facebook Chat ou iChat d’Apple.

Lien : Notifier via XMPP avec Facebook Chat en PHP

Commentaires

1. RootsLabs » Notifier via IRC en PHP, le 1 avril 2014 à 10:32

[…] vous avoir appris à notifier sur Google Chat ou Jabber et par email, on va aujourd’hui apprendre à notifier des utilisateurs sur IRC, un des […]

2. RootsLabs » Publier sur Twitter en PHP, le 4 octobre 2017 à 09:54

[…] avoir publié sur Facebook, envoyé un message sur IRC ou XMPP et même envoyé un e-mail, nous allons voir comment envoyer un message sur le réseau de […]

3. RootsLabs » Notifier via IRC en PHP, le 8 novembre 2017 à 09:30

[…] vous avoir appris à notifier sur Google Chat ou Jabber et par email, on va aujourd’hui apprendre à notifier des utilisateurs sur IRC, un des […]

Ajouter un commentaire

Commentaire :