Aiwifi puede notificar eventos a su aplicación mediante el uso de webhooks. Cada enlace está firmado criptográficamente, por lo que la solicitud no se puede modificar. Si tu marca recibe un webhook, puedes validarlo para asegurarte de que proviene de Aiwifi y validar el evento al que te has suscrito.
Habilitar webhook de eventos
Para comenzar a recibir eventos para el webhook, debe realizar algunas tareas como se describe a continuación:
Por defecto Aiwifi envía todos los eventos que tenemos disponibles cuando se realiza la configuración de la comunicación. Si no desea recibir todos los eventos disponibles, es necesario notificar a Aiwifi sobre qué eventos deben enviarse. Actualmente, los eventos que se pueden enviar son los siguientes:
- guest.connected (Un usuario que se conecta a su marca)
- SurveyAnswer.created (Respuesta a una campaña de encuesta sobre su marca)
- guest.interests (Un usuario que selecciona intereses)
Aiwifi necesita que proporciones una URL configurada para recibir una solicitud HTTP (POST), que servirá como comunicación entre nosotros y tu marca para el envío de información. Aiwifi requiere que tu aplicación responda con un estado HTTP (200) cuando se recibe la comunicación con el webhook y verificas que los datos son correctos.
Solicitud firmada
Para comenzar a enviar información a través de webhooks, Aiwifi requiere que tengas en cuenta las siguientes consideraciones.
Como se mencionó anteriormente, Aiwifi necesita que tu marca proporcione una URL que pueda recibir una solicitud HTTP (POST) y responder con un estado HTTP (200) cuando se recibe la comunicación y se verifica que los datos son correctos. Cualquier otra respuesta, incluida una redirección HTTP 301 o HTTP 302, se considerará un error e intentaremos reenviar la misma información. Aiwifi proporcionará a su marca una clave única para su identificación en nuestro sistema. Esta clave se utilizará para firmar cada solicitud realizada a su URL. En cada envío de información sobre cualquier evento, encontrarás en el encabezado de la solicitud el atributo Aiwifi-Signature, que es un hash de la información enviada en la solicitud.
Para confirmar que la información recibida a través de la URL de comunicación es correcta, puede hacerlo de la siguiente manera:
$signature = hash_hmac('sha256', $payload, $secret);
- $carga útil
- $secreto
La función PHP hash_hmac
genera un valor cifrado a través de una clave utilizando el método HMAC.
Política de reintento
Como se mencionó anteriormente, si Aiwifi recibe un estado HTTP (200) de la comunicación con su URL, consideraremos que el webhook fue exitoso. Sin embargo, si su solicitud arroja algo diferente, se marcará como un intento fallido y volveremos a enviar la solicitud con la misma información.
Intentaremos enviar el webhook hasta 3 veces. Si recibimos un código de respuesta que no es HTTP/200, o un tiempo de espera (de 3 segundos o más), después del tercer intento, consideraremos que el webhook falló y no reenviaremos esa información nuevamente.
No desactivaremos el envío de eventos por muchos intentos fallidos que tengamos. Solo se desactivará si informas a Aiwifi que ya no deseas recibir los envíos del evento.
Eventos de conexión
Este evento tiene como objetivo enviar información sobre el usuario que se conecta al portal de tu marca. Como se mencionó anteriormente, cada evento incluye información genérica (información que se encuentra en todos los eventos emitidos por aiwifi), así como información específica para cada tipo de evento, como se muestra a continuación.
En la propiedad data
del evento se envía la información personal del usuario que se conectó al portal cautivo de su marca, sujeto a las siguientes condiciones:
- La campaña de captura de datos configurada por tu marca permite capturar todos los datos del usuario; en caso contrario sólo se enviará la información de los datos configurados.
- El usuario ya ha completado los datos requeridos, es decir, a medida que el usuario se familiarice con su marca (realice conexiones recurrentes al portal de su marca), se obtendrán los datos necesarios. Por tanto, en los primeros casos, es probable que los datos recibidos estén incompletos.
jsonCopy code{ "event_type": "guest.connected", "event_id": "b8d057c59327541d7ec2104c0a9a255ad1997fb00831b9c6bbf09561e6d5cbd0", "data": { "user": { "id": 1020, "name": "John Doe", "email": "[email protected]", "phone": "+5255556789890", "postalCode": "62577", "birthdate": "1990-01-01", "gender": "Male" }, "brand": { "id": 519, "name": "Main" }, "location": { "id": 1, "name": "Main Office" }, "node": { "id": 2, "name": "Principal", "mac": "AA:AA:AA:AA:AA" } } }
Cada uno de nuestros eventos también envía información sobre la marca, ubicación y punto de acceso donde se llevó a cabo el evento.
Eventos de intereses
Este evento tiene como objetivo enviar información sobre la campaña de intereses que tu marca configura (si tu marca tiene 2 o más campañas de intereses configuradas, recibirás este evento para cada una de ellas, cuando el cliente seleccione intereses).
En la propiedad data
del evento encontrarás información sobre el cliente que ha seleccionado los intereses (los atributos del cliente están sujetos a la configuración que tenga tu marca en la campaña de captura de datos), así como un listado de los intereses seleccionados por el cliente. Aquí hay un ejemplo:
jsonCopy code{ "event_type": "guest.interests", "event_id": "b8d057c59327541d7ec2104c0a9a255ad1997fb00831b9c6bbf09561e6d5cbd0", "data": { "user": { "id": 1020, "name": "John Doe", "email": "[email protected]", "phone": "+5255556789890", "postalCode": "62577", "birthdate": "1990-01-01", "gender": "Male" }, "interestItemsSelected": [ "Interest A", "Interest B", "Interest D" ], "brand": { "id": 519, "name": "Main" }, "location": { "id": 1, "name": "Main Office" }, "node": { "id": 2, "name": "Principal", "mac": "AA:AA:AA:AA:AA" } } }
Cada uno de nuestros eventos también envía información sobre la marca, ubicación y punto de acceso donde se llevó a cabo el evento.
Eventos de encuesta
Este evento está destinado a enviar información correspondiente a la respuesta de un cliente a la campaña de encuestas de su marca (es importante tener en cuenta que si su marca tiene 2 o más campañas de encuestas activas, recibirá este evento para cada una de esas campañas).
En la propiedad data
del evento encontrarás información sobre la campaña a la que ha respondido el cliente, como las preguntas contenidas en la campaña de encuestas, así como la respuesta a cada una de ellas. Aquí hay un ejemplo:
jsonCopy code{ "event_type": "surveyAnswer.created", "event_id": "b8d057c59327541d7ec2104c0a9a255ad1997fb00831b9c6bbf09561e6d5cbd0", "data": { "guest": { "id": 1020, "name": "John Doe", "email": "[email protected]", "postalCode": "62577" }, "location": { "id": 1, "name": "Main Office" }, "campaign": { "id": 12, "created_at": "2022-02-20", "updated_at": "2022-02-20", "questions": [ // Questions are listed here with their types and choices ], "answers": [ // Corresponding answers to the questions listed above ] } } }
La estructura JSON muestra event_type
, event_id
y data
que contienen información detallada sobre el invitado, la ubicación del evento, la campaña específica respondida, incluidas las preguntas, sus tipos, posibles opciones y las respuestas del invitado a esas preguntas.
Cada uno de nuestros eventos también envía información sobre la marca, ubicación y punto de acceso donde se llevó a cabo el evento.