Cómo integrar la Gamificación de Discourse con un sistema externo (canjear y otorgar puntos)

Desde que lanzamos Discourse Gamification hace un año, una de las características más solicitadas de nuestra hoja de ruta ha sido la posibilidad de integrar Discourse Gamification con sistemas de gamificación externos. Los ejemplos son muchos:

  • Integrarse con programas de gamificación existentes en empresas

  • Capacidad de otorgar puntos por eventos que ocurren fuera de Discourse, como eventos IRL, o en otros lugares en línea, como ser cliente en una comunidad o comprar un producto.

  • La capacidad de permitir a los usuarios canjear sus puntos por merchandising, productos o beneficios

Hoy, justo a tiempo para el primer aniversario del plugin, hemos hecho posible todo lo anterior con una API completa para manejar eventos de puntuación personalizados :tada:.

Este nuevo sistema permite a los administradores:

  • Otorgar a los usuarios un evento de puntuación personalizado

  • Otorgar a los usuarios eventos de puntuación negativos, para acomodar eventos de canje o penalizaciones

  • Actualizar y listar eventos personalizados creados previamente

API

:warning: Los puntos otorgados a través de la API tardarán hasta 10 minutos en reflejarse en la puntuación general de un usuario para los eventos creados con la fecha actual, y hasta 24 horas para los eventos creados en los últimos 10 días. Para eventos creados con una fecha anterior a los últimos 10 días, debe ejecutar la tarea rake de relleno.

Actualmente hay 3 puntos finales de API diferentes.

Listar Eventos

curl http://example/admin/plugins/gamification/score_events.json -H "Api-Key: apikeyhere" -H "Api-Username: system"

También puede listar eventos específicos de usuario o de fecha:

curl http://example/admin/plugins/gamification/score_events.json?user_id=1&date=2023-05-01 -H "Api-Key: apikeyhere" -H "Api-Username: system"

Crear Evento

jo -p user_id="13" date="2023-04-14" points="15" description="May 2023 Karaoke atendee" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"

Actualizar Evento

jo -p id="1" points="25" description="May 2023 Karaoke atendee" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
28 Me gusta

¿Habrá/hay una forma de hacerlo a través de la interfaz de usuario?

9 Me gusta

Eso es algo que consideraría si un cliente empresarial quisiera patrocinarlo.

10 Me gusta

Esto es increíble. Estamos justo en medio de iniciar y pilotar un programa de embajadores/campeones, y hemos estado usando Airtable para monitorear webhooks de nuestras diferentes fuentes (Discourse, GitHub, Ghost) y agregar nuestro programa de campeones allí. Estoy emocionado de probar esto y ver si podría usarse para que gestionemos/monitoreemos nuestro programa y contribuciones.

Sería genial si pudieras otorgar puntos a un grupo de usuarios en lugar de a un usuario. El caso de uso para nosotros como cliente empresarial sería que esencialmente queremos otorgar puntos a la empresa para la que trabajan los usuarios y agregar sus puntos para cada empresa. ¿Cuál es la viabilidad de algo como esto?

9 Me gusta

Ah, no sé cómo usar esto :cara_sonriente_con_lágrimas:
Estamos usando un plan de negocios.

Ojalá pudiéramos operar esto a través de la interfaz de usuario.

Pero aun así, ¡gracias por crear este equipo! Sigan con el buen trabajo.

5 Me gusta

¿Podría eso ayudar a otorgar puntos únicos dentro de Discourse con el plugin de automatización?

1 me gusta

¿Cómo funciona el canje de puntos? Veo que hay un evento de actualización que podría usarse para restar puntos de eventos individuales, pero eso parece una forma ineficiente de canjear puntos.

Además, al intentar listar eventos en mi instancia de Discourse, obtengo un 404.

GET https://developer.sailpoint.com/discuss/admin/plugins/gamification/score_events.json

404 No encontrado
“No se pudo encontrar la URL o el recurso solicitado”.

He habilitado el plugin y puedo configurarlo a través de la interfaz de usuario. ¿Me falta algo para habilitar la API del sistema externo?

1 me gusta

Puede que sea mi década de experiencia trabajando en bancos, pero la forma en que concibo el canje de puntos es emitiendo eventos personalizados de valor negativo.

Por ejemplo, digamos que tienes un usuario que quiere canjear puntos por una camiseta, y esa camiseta cuesta 10k puntos. El flujo en tu sistema de canje sería:

  1. Comprueba si el usuario tiene suficientes puntos:

    curl https://meta.discourse.org/u/falco.json -s | jq . | grep score
        "gamification_score": 89386,
    
  2. Emite un evento de “retiro de puntos”

    jo -p user_id="13" date="2023-04-14" points="-10000" description="Canje de camiseta - pedido #123" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
    

Querrás envolver esto en un semáforo de algún tipo, ya que este es el ejemplo clásico de uso de esos, pero esa es la esencia del flujo de trabajo propuesto.

Esta es una característica muy reciente, así que házmelo saber si el flujo de trabajo propuesto no funciona correctamente.

Me funciona bien, tanto en el navegador como a través de la API. Es un endpoint de administrador, por lo que necesitas ser un administrador conectado a través del navegador o pasar claves de API como se explica en el OP.

3 Me gusta

Ok, eso era lo que me faltaba. No me di cuenta de que se podían emitir puntos negativos. Eso debería funcionar perfectamente entonces.

:man_facepalming: Estaba usando credenciales caducadas. Gracias por confirmarlo de todos modos.

2 Me gusta

@Falco

¿Hay planes para añadir ámbitos a esta API? Parece que la única forma en que puedo crear o actualizar puntuaciones es teniendo una clave de API de administrador que tenga acceso global. Me encantaría tener un ámbito que restrinja una clave solo a la capacidad de actualizar puntuaciones. Esto me daría más confianza al usar esta API en herramientas de automatización, ya que no tendría una clave de administrador que pueda hacer mucho más que actualizar puntuaciones.

3 Me gusta

Es una buena idea, pero personalmente no tengo el ancho de banda para trabajar en esto en el futuro cercano.

Si está interesado en patrocinar esta función, póngase en contacto con nuestro canal de soporte para que podamos proporcionarle un presupuesto.

3 Me gusta

Aquí también tengo el mismo problema:

{"errors":["La URL o el recurso solicitado no se pudo encontrar."],"error_type":"not_found"}

Ese error fue causado por

Así que quieres revisar las tuyas :wink:

1 me gusta

Gracias, también voy a actualizar a la última versión por si acaso.

¡La actualización a la última versión funcionó! Gracias.

1 me gusta

He estado probando esto un poco hoy. Veo los eventos que puedo rastrear, aunque no estoy seguro de si hay una consulta directa para ver solo eventos por ID de usuario. Busco una manera de tener un registro de auditoría o presentar a los usuarios cómo han ganado/perdido puntos.

1 me gusta

¿Hay algo registrado en la interfaz de usuario cuando la llamada a la API tiene éxito al agregar puntos?

¡Genial! Y tengo otra sugerencia, ¿es posible agregar una función que permita a los usuarios canjear puntos por suscripciones en la interfaz de usuario? Y la capacidad de agregar un límite a la cantidad de puntos que un usuario puede ganar por día en un evento (como crear temas).

¡Gracias!

No, la función se basa 100% en la API. Puede llamar al punto final “List Events” para comprobar si hay eventos, como se describe en el OP.

3 Me gusta