En este caso, puedes hacer uso de Séntisis Connect, nuestro webhook, que estará disponible en los productos en los que hayas contratado la funcionalidad. Gracias a él, pretendemos facilitar y optimizar la exportación e ingestión de datos, para que no sea necesario la descarga manual de las menciones (en archivos .csv).

¿Como se configura el conector?

Si quieres activar esta opción, tienes dos opciones: 

  1. Envíanos un correo a support@sentisis.com con la URL donde quieres recibir la información (http://example.com/endpoint).
  2. Configura el webhook tú mismo desde la opción Connect del dashboard

Una vez analizadas, las menciones se enviarán en tiempo real mediante una petición HTTP POST al endpoint indicado y estarán disponibles para su ingestión. Además, también se enviarán a través del conector las alertas que tengas configuradas.

No olvides que las menciones seguirán estando disponibles en tus productos dentro de sentisis.io

¿Qué formato tienen los datos?

La información de los mensajes se envía en un JSON con el siguiente formato, dependiendo de si se trata de mensajes de redes sociales, de medios o de alertas:

Mensajes de redes sociales

Debido a la política de privacidad de Twitter, los mensajes de esta red vendrán con la siguiente información:

Puedes captar el resto de información mediante este booster.

Mensajes de Media (noticias, blogs y foros)

Alertas

Ejemplos de mensajes

Los datos están blanqueados para que no contengan información real

Twitter:

{
  "id": "5ae7b623ce6800019067b66",
  "sentiment": "OBJECTIVE",
  "categories": [
    {
      "id": "54b557ecc45f3d73a357bdf",
      "name": "Accion social"
    },
    {
      "id": "5995654ed8e3390a0f18987",
      "name": "Promocion"
    },
  ],
  "feed": {
    "id": "2aed3e8f7a411171911b346",
    "name": "Nombre marca"
  },
  "msgId": "99111360727289601",
  "type": "Tweet",
}


Facebook:

{
  "id": "59a5842de3d02a000f8abc3",
  "sentiment": "OBJECTIVE",
  "categories": [
    {
      "id": "54b557ecc545f3d73a357bdf",
      "name": "Acción social"
    },
    {
      "id": "5995654ed48e3390a0f18987",
      "name": "Promoción"
    }
  ],
  "feed": {
    "id": "2aed3e8f7a4111171911b34",
    "name": "Nombre marca"
  },
  "date": "2017-08-29T14:02:15.000Z",
  "msgId": "155619407443876_1560144877376929",
  "type": "FacebookComment",
  "text": "Buenos días, este es el contenido del mensaje interno: nombres, cédula, mail y celular. \r\nSaludos.",
  "link": "https://facebook.com/1556194074438676_156014476929",
  "clicks": 12,
  "isDarkPost": true,
  "adAccount": {
    "id": "act_1245341172064281"
  }
}

Instagram:

{
  "id": "5942de02a000f8abc3",
  "sentiment": "OBJECTIVE",
  "categories": [
    {
      "id": "54b557ecc545f3d73a357bdf",
      "name": "Deseo de consumo"
    },
    {
      "id": "54b557ecc545f3d73a357bdd",
      "name": "Expresa risa"
    },
  ],
  "feed": {
    "id": "2aed3e8f7a4111171911b34",
    "name": "Nombre marca"
  },
  "date": "2017-06-14T14:19:37.000Z",
  "msgId": "1537044239360_628059",
  "type": "InstagramPost",
  "text": "Este es el contenido del post",
  "link": "https://www.instagram.com/p/BVUrZ-6nA/",
"isDarkPost": false
}

Youtube:

{
  "sentiment": "OBJECTIVE",
  "categories": [
    {
      "id": "54b557ecc54f3d73a357bdd",
      "name": "Expresa risa"
    }
  ],
  "feed": {
    "id": "2aed3e8f7a4111171911b34",
    "name": "Nombre marca"
  },
  "date": "2017-08-29T16:04:29.000Z",
  "msgId": "s7r62LMc",
  "type": "YoutubeVideo",
  "text": "hola, este es el contenido del mensaje",
  "user": {
    "id": "UC5_DK5TY48EecjYfA",
    "username": "Nombreusuario",
    "gender": "MALE"
  },
  "link": "https://youtube.com/watch?v=s234u62LMc"
}


Medios:

{
  "id": "5ae7b623ce63800019067b66",
  "title": "Título de la noticia/blog/foro",
  "summary": "Resumen del contenido de la noticia",
  "text": "Este es el cuerpo completo de la noticia. Puede contener varios párrafos",
  "sentiment": "POSITIVE",
  "categories": [
    {
      "id": "54b557ecc545fd73a357bdf",
      "name": "Acción social"
    },
    {
      "id": "5995654ed48e390a0f18987",
      "name": "Promoción"
    },
  ],
  "feed": {
    "id": "2aed3e87a411117191b346",
    "name": "Nombre marca",
     },

  "date": "2018-04-26T12:19:11.000Z",
  "msgId": "33894752217",
  "source": {
    "title": "Nombre del medio",
  },
  "type": "Media",
  "link": "http://ct.moreover.com/?a=33894752217&p=1tg&v=1&x=EA9JefwoRHkRa223rbva"
}

Seguridad

Una vez que tu servidor esté configurado para recibir mensajes, escuchará todo tipo de peticiones, incluidas las de procedencia desconocida. Por razones de seguridad, es posible que desees limitar las solicitudes a las que provengan de Séntisis. Con este objeto ofrecemos un sistema opcional de validación basado en tokens.

El webhook calculará un hash del cuerpo de la petición (firma) y lo enviará junto a la petición en una cabecera para que lo puedas verificar programáticamente desde tu aplicación. Para ello usará funciones no reversibles y un secreto compartido.

Configurar el secret

  1. Entra en el dashboard de Séntisis y selecciona Connect
  2. Rellena el secret (cualquier string entre 3 y 256 caracteres) y guarda los cambios 

Una vez configurado el secret, el webhook enviará una cabecera adicional en cada petición, x-sentisis-signature, con el token de validación.

Validar la petición

Imaginemos un servidor básico:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
const port = 4444;

app.use(bodyParser.json());

app.post('/messages', (req, res) => {
  console.log(Received ${JSON.stringify(req.body, null, 2)});
  res.status(200).end();
});

app.listen(port, () => console.log(Example app listening on port ${port}!));


La idea es calcular el token de validación de la misma forma que lo hace Séntisis y asegurarse de que sea igual al enviado en la cabecera x-sentisis-signature. Séntisis usa una firma HMAC-SHA1 sobre el cuerpo de la petición, de manera que el código podría quedar así:

const express = require('express');
const bodyParser = require('body-parser');
const crypto = require('crypto');

const app = express();
const port = 4444;

app.use(bodyParser.json());

function verifySignature(body, requestSignature) {
  const signature = crypto
    .createHmac('sha1', process.env.SENTISIS_SECRET)
    .update(JSON.stringify(body))
    .digest('hex');

  return signature === requestSignature;
}

app.post('/messages', (req, res) => {
  console.log(Received ${JSON.stringify(req.body, null, 2)});
  if (!verifySignature(req.body, req.headers['x-sentisis-signature'])) {
    res.status(500).send('Invalid signature');
  }
  res.status(200).end();
});

app.listen(port, () => console.log(Example app listening on port ${port}!));

Por supuesto tendrás que adaptar el código al lenguaje que use tu servidor. 

WARN: Recuerda no compartir nunca tu secret ni especificarlo directamente en tu código. Como puedes ver en el ejemplo, hemos usado una variable de entorno para almacenar el secret de Séntisis.


¡No dudes en ponerte en contacto con nosotros si deseas utilizar esta funcionalidad!

Dado que Séntisis Connect es un webhook, es necesaria la utilización de un desarrollo/herramienta que permita esta conexión.

¿Encontró su respuesta?