anchor.diff:  image::https://cloud.githubusercontent.com/assets/2006548/9629320/160ef888-5172-11e5-895a-460308bc2a5c.png[]
   
   === L'application Meteor
  -Nous pouvons créer notre application *meteor* :
  +Nous créons notre application *meteor* :
   [source, shell]
   ----
  -meteor create sensit-callback
  -cd sensit-callback
  +meteor create remote-app
  +cd remote-app
   meteor remove autopublish insecure
  -rm sensit-callback.*
  +rm remote-app.*
   mkdir server
   touch server/main.js
   ----
   
  -Pour la gestion des routes, on d'utilisera *iron-router* :
  +Pour la gestion des routes, on utilisera http://iron-meteor.github.io/iron-router/[iron-router] :
   [source, javascript]
   ----
   meteor add iron:router
   ----
   
  -
   Commençons par créer une collection `notification` qui aura pour but de stocker les différentes notifications reçues.
   
  -[source, javascript, title=server/main.js]
  +[source, javascript]
   ----
   Notification = new Meteor.Collection("notification");
   ----
   
   Il faut ensuite définir notre endpoint qui répondra à l'appel du callback.
   
  -[source, javascript, title=server/main.js]
  +[source, javascript]
   ----
   Router.route('/sensit-callback/:type', {where: 'server'})
     .get(function () {
  
positive.code:   });
  ----
  
  Nous définissons une route `/sensit-callback/:type` dans laquelle `:type` peut prendre les valeurs `['temperature', 'motion', 'button']`. 
  
  On construit ensuite un objet `notification` à partir du `type` et des queryParam (on force la conversion en JSON du paramètre `data` car c'est un objet JSON stringifié).
  
  Enfin on insert notre `notification` en base et on répond en confirmant l'enregistrement.
  
  Pour que les informations présentes dans notre collection soient accessibles par notre "client", il faut les publier (on peut déjà gérer les différents type) :
  
  [source, javascript]
  ----
  Meteor.publish("remote-button", function (argument) {
    return Notification.find({type: 'button'});
  });
  
  // on peut déjà prévoir de gérer les autres types
  Meteor.publish("remote-temperature", function (argument) {
    return Notification.find({type: 'temperature'});
  });
  
negative.code: });
  ----
  
  Le code complet :
  [source, javascript, title=remote-app/server/main.js]
  ----
  Notification = new Meteor.Collection("notification");
  
  Router.route('/sensit-callback/:type', {where: 'server'})
    .get(function () {
      if (['temperature', 'motion', 'button'].indexOf(this.params.type) < 0)
        throw new Error('Invalid type');
  
      var notification = _.extend({type: this.params.type}, this.params.query, {data: JSON.parse(this.params.query.data)});
  
      Notification.insert(notification);
      this.response.end('notification ' + notification.type + ' saved\n');
    });
  
  Meteor.publish("remote-temperature", function (argument) {
    return Notification.find({type: 'temperature'});
  });
  Meteor.publish("remote-motion", function (argument) {
    return Notification.find({type: 'motion'});
  });
  Meteor.publish("remote-button", function (argument) {
    return Notification.find({type: 'button'});
  });
  ----
  
  === Un peu de test
  On démarre l'application :
  [source, javascript]
  ----
  meteor
  ----
  
  On requête l'url :
  ----
  http://localhost:3000/sensit-callback/button?device_serial_number=ABCDE&notification_type=generic_punctual&data=%7B%22first_name%22%3A%22Anthonny%22%2C%22sensit_name%22%3A%22%22%2C%22last_name%22%3A%22Querouil%22%2C%22device_id%22%3A%22ABCDE%22%7D&device_id=1234&sensor_id=5678&date=2015-09-01T17%3A37Z&mode=6
  ----
  