Cómo configurar el complemento de notificaciones de eventos (Webhook) en Teachlr Organizaciones

El complemento de Webhook tiene un interruptor en la esquina superior derecha que le permite activar o desactivar esta funcionalidad.

Para poder activar el complemento primero se deben llenar y guardar todos los campos del formulario.

Al activar este complemento, se enviarán notificaciones de eventos específicos hacia un servicio Web externo.

Los campos a llenar de este complemento son:

Ruta: indica la ruta (endpoint) hacia la cual enviar las notificaciones de los eventos que se especifiquen en este complemento.

Evento: consta de un conjunto de casillas de verificación que pueden marcarse para que se envíe una notificación cuando suceda dicho evento. Los eventos que pueden notificarse son:

  • Registro de usuarios: este evento se dispara cuando un usuario se registra desde un formulario de «Registro» y luego inicia sesión por primera vez.
  • Primer inicio de sesión: este evento se dispara cuando un usuario, que ha sido invitado a la escuela, inicia sesión por primera vez.
  • Asignación de cursos: este evento se dispara cuando un administrador asigna uno o varios cursos a uno o varios usuarios desde el módulo de Administración.
  • Autoinscripción en cursos: este evento se dispara cuando un usuario se suscribe él mismo a un curso gratis a través del botón «Suscribirse» de la vista de detalles de curso.
  • Compra de cursos: este evento se dispara cuando un usuario realiza la compra de un curso a través del botón «Comprar» de la vista de detalles de curso.
  • Certificado de curso otorgado: este evento se dispara cuando un usuario obtiene el certificado de un curso.

A continuación se muestran los ejemplos de los objetos JSON que se envían al dispararse los distintos eventos.

Evento: Registro de usuarios.

Descripción: Un usuario se registra desde un formulario de «Registro» y luego inicia sesión por primera vez.

Objeto JSON enviado:

{
  "created": 1521147247,
  "object": "event",
  "type": "register",
  "data": {
    "users": [
      {
        "id": 677,
        "username": "antoniogonzalez",
        "employee_number": "E123456",
        "alternative_id": null,
        "external_id": "112233",
        "identification_number": null,
        "name": "Antonio",
        "last_name": "González",
        "email": "antoniogonzalez@dominio.com",
        "picture": {
          "thumb": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-32x32.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-64x64.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-98x98.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-198x198.jpg"
        },
        "phone": "04128889900"
      }
    ]
  }
}

Evento: Primer inicio de sesión.

Descripción: Un usuario, que ha sido invitado a la plataforma a través del módulo de Administración, inicia sesión por primera vez.

Objeto JSON enviado:

{
  "created": 1521146934,
  "object": "event",
  "type": "first_login",
  "data": {
    "users": [
      {
        "id": 670,
        "username": "pedroperez",
        "employee_number": "E123456",
        "alternative_id": "ID9855325",
        "external_id": null,
        "identification_number": null,
        "name": "Pedro",
        "last_name": "Pérez",
        "email": "pedroperez@dominio.com",
        "picture": {
          "thumb": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-32x32.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-64x64.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-98x98.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-198x198.jpg"
        },
        "phone": "04169998877"
      }
    ]
  }
}

Evento: Asignación de cursos.

Descripción: Un administrador asigna uno o varios cursos a uno o varios usuarios desde el módulo de Administración:

Existen diferentes maneras en las que un curso puede ser asignado a un usuario desde el módulo de Administración:

Usuarios > Menú de opciones (…) > Suscribir a cursos

Usuarios > Menú de opciones (…) > Asignar a grupos (*)

Usuarios > Seleccionar varios usuarios > Acciones en masa > Suscribir a cursos

Usuarios > Seleccionar varios usuarios > Acciones en masa > Asignar a grupos (*)

(*) esta acción le asigna todos los cursos de todos los grupos que se seleccionen a los usuarios seleccionados.

Cursos > Menú de opciones (…) > Asignar a usuarios

Cursos > Menú de opciones (…) > Asignar a grupos (**)

Cursos > Seleccionar varios cursos > Acciones en masa > Suscribir usuarios

Cursos > Seleccionar varios cursos > Acciones en masa > Asignar a grupos (**)

(**) esta acción asigna los cursos seleccionados a todos los usuarios de todos los grupos que se seleccionen.

Grupos > Abrir > Menú de opciones (…) > Asignar cursos (esta acción, a la vez, asigna los nuevos cursos a los usuarios del grupo)

Grupos > Abrir > Menú de opciones (…) > Añade usuarios (esta acción, a la vez, le asigna a esos nuevos usuarios los cursos del grupo)

Objeto JSON enviado:

{
  "created": 1521147641,
  "object": "event",
  "type": "course_assign_admin",
  "data": {
    "users": [
      {
        "id": 670,
        "username": "pedroperez",
        "employee_number": "E123456",
        "alternative_id": "ID9855325",
        "external_id": null,
        "identification_number": null,
        "name": "Pedro",
        "last_name": "Pérez",
        "email": "pedroperez@dominio.com",
        "picture": {
          "thumb": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-32x32.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-64x64.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-98x98.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-198x198.jpg"
        },
        "phone": "04161112233"
      },
      {
        "id": 671,
        "username": "luisvelasquez",
        "employee_number": "E123456",
        "alternative_id": "71515ABC",
        "external_id": null,
        "identification_number": null,
        "name": "Luis",
        "last_name": "Velásquez",
        "email": "luisvelasquez@dominio.com",
        "picture": {
          "thumb": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-32x32.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-64x64.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-98x98.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-198x198.jpg"
        },
        "phone": "04244445566"
      }
    ],
    "courses": [
      {
        "id": 1691,
        "title": "Nemo enim ipsam voluptatem quia voluptas",
        "headline": "Ut enim ad minima veniam",
        "description": "",
        "price": 0,
        "cover": {
          "thumb": "https:\/\/d2j3j1vpt0...\/img\/course_cover-118x66.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/img\/course_cover-222x125.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/img\/course_cover-236x132.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/img\/course_cover-506x285.jpg"
        }
      },
      {
        "id": 2081,
        "title": "At vero eos et accusamus et iusto odio dignissimos",
        "headline": "Quis autem vel eum iure.",
        "description": "<p>Architecto sint praesentium nam aliquam alias.<\/p>",
        "price": 0,
        "cover": {
          "thumb": "https:\/\/d2j3j1vpt0...\/covers\/1487605210-118x66.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/covers\/1487605210-222x125.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/covers\/1487605210-236x132.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/covers\/1487605210-506x285.jpg"
        }
      }
    ]
  }
}

Evento: Autoinscripción en cursos.

Descripción: Un usuario se suscribe él mismo a un curso gratis a través del botón «Suscribirse» de la vista de detalles de curso.

Objeto JSON enviado:

{
  "created": 1521146530,
  "object": "event",
  "type": "course_assign_auto",
  "data": {
    "users": [
      {
        "id": 671,
        "username": "luisvelasquez",
        "employee_number": "E123456",
        "alternative_id": "71515ABC",
        "external_id": null,
        "identification_number": null,
        "name": "Luis",
        "last_name": "Velásquez",
        "email": "luisvelasquez@dominio.com",
        "picture": {
          "thumb": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-32x32.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-64x64.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-98x98.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/img\/default_user_icon-198x198.jpg"
        },
        "phone": "04247778899"
      }
    ],
    "courses": [
      {
        "id": 43,
        "title": "Quisque rutrum",
        "headline": "Nulla consequat massa quis enim",
        "description": "<p>Vivamus elementum semper nisi. Aenean vulputate<\/p>",
        "price": 0,
        "cover": {
          "thumb": "https:\/\/d2j3j1vpt0...\/covers\/1466112612-118x66.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/covers\/1466112612-222x125.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/covers\/1466112612-236x132.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/covers\/1466112612-506x285.jpg"
        }
      }
    ]
  }
}

Evento: Compra de cursos.

Descripción: Un usuario realiza la compra de un curso a través del botón «Comprar» de la vista de detalles de curso.

Objeto JSON enviado:

{
  "created": 1521146810,
  "object": "event",
  "type": "course_assign_purchase",
  "data": {
    "users": [
      {
        "id": 671,
        "username": "luisvelasquez",
        "employee_number": "E123456",
        "alternative_id": "71515ABC",
        "external_id": null,
        "identification_number": null,
        "name": "Luis",
        "last_name": "Velásquez",
        "email": "luisvelasquez@dominio.com",
        "picture": {
          "thumb": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-32x32.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-64x64.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-98x98.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-198x198.jpg"
        },
        "phone": "04242225588"
      }
    ],
    "courses": [
      {
        "id": 31,
        "title": "Sed ut perspiciatis unde omnis iste natus",
        "headline": "Aenean commodo ligula eget dolor",
        "description": "<p>Lorem ipsum dolor sit amet, consectetuer adipisc.<\/p>",
        "price": 1,
        "cover": {
          "thumb": "https:\/\/d2j3j1vpt0...\/img\/course_cover-118x66.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/img\/course_cover-222x125.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/img\/course_cover-236x132.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/img\/course_cover-506x285.jpg"
        }
      }
    ]
  }
}

Evento: Certificado de curso otorgado.

Descripción: Un usuario completa la cantidad de lecciones necesaria para obtener el certificado de un curso.

Objeto JSON enviado:

{
  "created": 1579889546,
  "object": "event",
  "type": "course_certificate_granted",
  "data": {
    "user": {
      "id": 671,
      "username": "luisvelasquez",
      "employee_number": "E123456",
      "alternative_id": "71515ABC",
      "external_id": null,
      "identification_number": null,
      "name": "Luis",
      "last_name": "Velásquez",
      "email": "luisvelasquez@dominio.com",
      "picture": {
          "thumb": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-32x32.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-64x64.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-98x98.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/pictures\/1521146757-198x198.jpg"
      },
      "phone": "04242225588"
    },
    "course": {
      "id": 70,
      "title": "Nemo enim ip",
      "headline": "Ut enim ad minima veniam",
      "description": "<p>Lorem ipsum dolor sit amet, consectetuer adipisc.<\/p>",
      "cover": {
          "thumb": "https:\/\/d2j3j1vpt0...\/img\/course_cover-118x66.jpg",
          "small": "https:\/\/d2j3j1vpt0...\/img\/course_cover-222x125.jpg",
          "medium": "https:\/\/d2j3j1vpt0...\/img\/course_cover-236x132.jpg",
          "large": "https:\/\/d2j3j1vpt0...\/img\/course_cover-506x285.jpg"
      },
      "slug": "nemo-enim-ip",
      "url": "https:\/\/escueladeprueba.teachlr.com\/#courses-online\/nemo-enim-ip"
    },
    "certificate": {
      "organization_name": "Escuela de prueba",
      "hash": "ce7f8d46f67b",
      "use_custom_certif": false,
      "url": "https:\/\/escueladeprueba.teachlr.com\/#certificate\/ce7f8d46f67b",
      "instructors": "Moises Annicchiarico, Irving Martínez",
      "granted_at": "2020-01-24 14:12:25",
    }
  }
}

Un ejemplo de cómo leer y utilizar los valores de estos objetos JSON utilizando el lenguaje PHP sería como sigue:


<?php
//Para el evento Asignación de cursos:

//$json es una variable que debe tener la respuesta obtenida del webhook

//se decodifica el JSON para poder manipularlo
$webhook_data = json_decode($json);

//obtener la fecha (timestamp) del evento
$date = $webhook_data->created;

//obtener el tipo de evento:
$type = $webhook_data->type;

//obtener el arreglo de todos los usuarios
$array_users = $webhook_data->data->users;

//recorrer el arreglo de usuarios para obtener la información de cada uno de ellos
foreach ($array_users as $key => $user) 
{
    //obtener el id
    $user_id = $user->id;

    //obtener el nombre de usuario
    $username = $user->username;

    //obtener el número de empleado
    $username = $user->employee_number;

    //obtener el ID alternativo (inicio de sesión alternativo)
    $username = $user->alternative_id;

    //obtener el ID externo (inicio de sesión con token)
    $username = $user->external_id;

    //obtener el número de identificación
    $username = $user->identification_number;

    //obtener el nombre
    $name = $user->name;

    //obtener el apellido
    $last_name = $user->last_name;

    //obtener el email
    $email = $user->email;

    //obtener la imagen miniatura de perfil
    $thumb = $user->picture->thumb;

    //obtener la imagen de perfil pequeña
    $small = $user->picture->small;

    //obtener la imagen de perfil mediana
    $medium = $user->picture->medium;

    //obtener la imagen de perfil grande
    $large = $user->picture->large;

    //obtener el número de teléfono
    $phone = $user->phone;
}
//obtener el arreglo de todos los cursos
$array_courses = $webhook_data->data->courses;

//recorrer el arreglo de cursos para obtener la información de cada uno de ellos
foreach ($array_courses as $key => $course) 
{
    //obtener el id
    $course_id = $course->id;

    //obtener el título
    $title = $course->title;

    //obtener el subtítulo
    $headline = $course->headline;

    //obtener la descripción
    $description = $course->description;

    //obtener el precio
    $price = $course->price;

    //obtener la imagen de portada miniatura
    $thumb = $course->cover->thumb;

    //obtener la imagen de portada pequeña
    $small = $course->cover->small;

    //obtener la imagen de portada mediana
    $medium = $course->cover->medium;

    //obtener la imagen de portada grande
    $large = $course->cover->large;
}

Leave A Comment?