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

Tengo una idea loca, resulta que en WooCommerce estoy usando una billetera virtual (basada en puntos) que me gustaría sincronizar con los puntos de gamificación de Discourse… pero siento que solo una API es muy pesada (sea consultando cada x cron o cuando el usuario realiza una acción en WC)… ¿podrías crear un webhook para que la billetera virtual en WooCommerce se actualice con los puntos obtenidos en discourse?.. adjunto un esquema de guía

Sé que puede ser más complejo de lo que parece, especialmente porque la API de Discourse es relativamente nueva (y tampoco hay webhook), pero solo presento un caso de uso, valida la idea.

[quote=“Santa Claus, post:26, topic:262968, username:Santa_Claus”]¿podrías crear un webhook para que la billetera virtual en WooCommerce se actualice con los puntos obtenidos en discourse?
[/quote]

La gamificación se recalcula cada 5 minutos, así que creo que usar una sincronización estilo crontab es bastante apropiado.

1 me gusta

Oh, no había pensado en ese enfoque… es decir, puedo usar n8n (alojamiento propio para reducir costos); crearé un disparador cron cada 5 o quizás 10 minutos consultando la API de Discourse para obtener nuevos puntos (¿Cómo consultaría a todos los usuarios? ¿O lo harías para eventos?)… Aunque, por supuesto, habrá una pequeña ventana de tiempo constante en la que no verás la puntuación sincronizada en ambas plataformas…

Lo estuve pensando y creo que si se pudiera crear un webhook para el plugin de gamificación enviando la información por eventos (sin tener que consultar vía API) esto evitaría tener que consultar, por ejemplo, si hay 200 usuarios activos, 200 veces una API cada 5 minutos (además por defecto Discourse permite webhooks)…es importante porque Discourse es la fuente principal de puntos (y actualiza más constantemente) y esto sería una actualización que permite la sincronización en segundo plano. instantáneamente según los cambios en Discourse…

@Falco
¿planeas agregar una API para eliminar eventos? Gracias.

1 me gusta

Quiero añadirlo, pero aún no está planificado. Por el momento, puedes actualizar su valor a 0.

2 Me gusta

gracias @Falco
supongo que para un evento, el ID podría obtener un punto negativo, ¿verdad?
digamos, si pierdes en un evento de competición

1 me gusta

Sí, también puedes otorgar puntuaciones negativas. Es útil para realizar eventos como canjear puntos por regalos, aplicar penalizaciones, etc.

1 me gusta

Llego tarde a la fiesta: ¿Hay alguna forma de que ciertas transacciones de puntos se marquen para que no cuenten como “gastos” para el ranking de la tabla de clasificación? Me gustaría que otros puntos verdaderamente negativos contaran para la tabla de clasificación (votos/banderas en contra, eventos de API como se sugirió anteriormente para “perder” un evento de escalera, etc.).
ej.

  • acumular 10k puntos a través de actividades, estar a la cabeza. ¡Yay!
  • Gastar 10k puntos en artículos de lujo, estar en 0 puntos “gastables” ya que una consulta sumaría 10k - 10k.
    • pero aún debería estar en la cima de la tabla de clasificación.
  • Perder 2k puntos en un juego de escalera, mostrar en la tabla de clasificación con 8k. Perder la ventaja… Saldo gastable negativo 2k.
1 me gusta

Oye @Falco, después de editar el punto de un evento, ¿se recalculará el punto general para un ID? Parece que no. ¿Es esto esperado?

Eso es lo que cubre la advertencia en el OP. Dado que almacenamos en caché la puntuación total en todas partes de la interfaz de usuario, después de tu edición, solo se reflejará después de una actualización de la caché. Para eventos recientes, la caché se actualiza automáticamente, pero para eventos que ocurrieron hace más de 10 días, deberás activar una actualización de puntuación para el período.

2 Me gusta

Se dividieron 7 publicaciones en un nuevo tema: Añadir bulk_create a la API de eventos externos de Gamificación

¿Tenemos la capacidad de limitar el alcance de la Clave de API solo al plugin de Gamificación?

No veo una opción en nuestra vista de Administración de Claves de API para limitar la clave a ...admin/plugins/gamification/score_events

Y nuestro liderazgo se muestra escéptico de que necesitemos una Clave de API verdaderamente Global para esto.

1 me gusta

Sospecho que tienes razón. Parece que se agregan más ámbitos a medida que se solicitan. Podrías hacerlo con un plugin personalizado si te alojas tú mismo. Podrías enviar una PR y/o publicar como una solicitud de #característica. Si eres un cliente empresarial, podrías pedir a tu liderazgo. :wink:

Hmm. Ahora me pregunto si es posible agregar un ámbito de API personalizado en un plugin (especialmente si un plugin agrega un ámbito de API para otro plugin). Sospecho que sí, pero no lo he visto hecho.

Tal vez simplemente crea un usuario solo para la API para que al menos puedas rastrearlo de esa manera.

1 me gusta

¿Alguna vez sucedió esto?

CC: @Falco

Como novato en programación, me he esforzado mucho por entender el contenido de la publicación, pero todavía me resulta bastante difícil… Quería preguntar si esta función es similar a “pagar para ver”. Es una característica muy común en los foros tradicionales donde los usuarios ganan puntos a través de eventos (como el registro diario, publicar, responder, etc.), y luego algunas publicaciones en el foro requieren que los usuarios paguen puntos para ver el contenido completo. En los foros tradicionales (como Discuz), tanto la operación de ganar puntos como la de deducir puntos son automáticas. Por lo que puedo ver ahora, la gamificación puede manejar la parte de “ganar puntos”, pero ¿la operación de “deducir puntos” requiere llamadas a la API manuales por parte de los administradores? Esto sería demasiado difícil para un foro personal. Por lo que entiendo, operar imprudentemente las API sin muchos conocimientos de programación puede ser peligroso e incluso podría hacer que toda la comunidad colapse… :sob:

¿Sería posible implementar esta función de “pagar para ver” como un complemento independiente? O si contratara a alguien para personalizarlo, ¿aproximadamente cuánto costaría?