Como integrar a Gamificação do Discourse com um sistema externo (resgatar e premiar pontos)

Desde que lançamos o Discourse Gamification há um ano, um dos recursos mais solicitados em nosso roadmap tem sido a capacidade de integrar o Discourse Gamification com sistemas de gamificação externos. Exemplos são muitos:

  • Integrar com programas de gamificação existentes em empresas

  • Capacidade de conceder pontos por eventos que ocorrem fora do Discourse, como eventos presenciais (IRL), ou em outros lugares online, como ser um cliente em uma comunidade ou comprar um produto.

  • A capacidade de permitir que os usuários resgatem seus pontos por brindes, produtos ou benefícios

Hoje, bem a tempo do primeiro aniversário do plugin, tornamos tudo isso possível com uma API completa para lidar com eventos de pontuação personalizados :tada:.

Este novo sistema permite que os administradores:

  • Concedam aos usuários um evento de pontuação personalizado

  • Concedam aos usuários eventos de pontuação negativos, para acomodar resgates ou eventos de penalidade

  • Atualizem e listem eventos personalizados criados anteriormente

API

:warning: Os pontos concedidos via API levarão até 10 minutos para serem refletidos na pontuação geral de um usuário para eventos criados com a data atual, e até 24 horas para eventos criados nos últimos 10 dias. Para eventos criados com uma data anterior aos últimos 10 dias, você precisa executar a tarefa rake de preenchimento retroativo.

Existem 3 endpoints de API diferentes no momento.

Listar Eventos

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

Você também pode listar eventos específicos de usuário ou data:

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

Criar 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"

Atualizar 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"
27 curtidas

Haverá/haverá uma maneira de fazer isso pela interface do usuário?

9 curtidas

Isso é algo que eu consideraria se um cliente corporativo quisesse patrocinar.

10 curtidas

Isso é incrível. Estamos bem no meio de iniciar e pilotar um programa de embaixadores/campeões, e temos usado o Airtable para monitorar webhooks de nossas diferentes fontes (Discourse, GitHub, Ghost) e agregar nosso programa de campeões lá. Estou animado para conferir isso e ver se pode ser usado por nós para gerenciar/monitorar nosso programa e contribuições.

Seria ótimo se você pudesse conceder pontos a um grupo de usuários em vez de um usuário. O caso de uso para nós como um cliente corporativo seria que, essencialmente, queremos conceder pontos à empresa para a qual os usuários trabalham e agregar seus pontos para cada empresa. Qual é a viabilidade de algo assim?

9 curtidas

Ah, não sei como usar isso :smiling_face_with_tear:
Estamos usando um plano empresarial.

Gostaria que pudéssemos operar isso pela interface do usuário.

Mas, ainda assim, obrigado por construir esta equipe! Continuem o bom trabalho.

5 curtidas

Isso poderia ajudar a dar pontos únicos no Discourse com o plugin Automation?

1 curtida

Como funciona o resgate de pontos? Vejo que há um evento de atualização que poderia ser usado para subtrair pontos de eventos individuais, mas isso parece uma maneira ineficiente de resgatar pontos.

Além disso, ao tentar listar eventos na minha instância do Discourse, recebo um 404.

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

404 Not Found
“O URL ou recurso solicitado não pôde ser encontrado.”

Habilitei o plugin e posso configurá-lo através da interface do usuário. Falta algo para habilitar a API do sistema externo?

1 curtida

Pode ser minha década de experiência trabalhando em bancos, mas a maneira como imagino o resgate de pontos é emitindo eventos personalizados de valor negativo.

Por exemplo, digamos que você tenha um usuário que queira resgatar pontos por uma camiseta, e essa camiseta custe 10 mil pontos. O fluxo em seu sistema de resgate seria:

  1. Verifique se o usuário tem pontos suficientes:

    curl https://meta.discourse.org/u/falco.json -s | jq . | grep score
        "gamification_score": 89386,
    
  2. Emita um evento de “saque de pontos”

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

Você vai querer envolver isso em um semáforo de algum tipo, pois este é o exemplo clássico de uso deles, mas essa é a essência do fluxo de trabalho proposto.

Este é um recurso muito recente, então me diga se o fluxo de trabalho proposto não funcionar corretamente.

Está funcionando bem para mim, tanto no navegador quanto via API. É um endpoint de administrador, então você precisa estar logado como administrador pelo navegador ou passar chaves de API como explicado no OP.

3 curtidas

Ok, era isso que estava faltando. Eu não sabia que era possível emitir pontos negativos. Isso deve funcionar perfeitamente então.

:man_facepalming: Eu estava usando credenciais expiradas. Obrigado por confirmar de qualquer forma.

2 curtidas

@Falco

Existem planos para adicionar escopos a esta API? Parece que a única maneira que tenho de criar ou atualizar pontuações é tendo uma chave de API de administrador com acesso global. Eu adoraria ter um escopo que restrinja uma chave apenas para poder atualizar pontuações. Isso me daria mais confiança ao usar esta API em ferramentas de automação, pois eu não teria uma chave de administrador que pode fazer muito mais do que apenas atualizar pontuações.

3 curtidas

Essa é uma boa ideia, mas eu pessoalmente não tenho largura de banda para trabalhar nisso no futuro próximo.

Se você estiver interessado em patrocinar este recurso, entre em contato com nosso canal de suporte para que possamos lhe fornecer um orçamento.

3 curtidas

Enfrentando o mesmo problema aqui:

{"errors":["A URL ou recurso solicitado não pôde ser encontrado."],"error_type":"not_found"}

Esse erro foi causado por

Então você quer verificar as suas :wink:

1 curtida

Obrigado, também vou atualizar para a versão mais recente, por precaução.

Atualizar para a versão mais recente funcionou! obrigado

1 curtida

Tenho testado isso um pouco hoje. Vejo os eventos que posso rastrear, embora não tenha certeza se há uma consulta direta para ver apenas eventos por ID de usuário. Procurando uma maneira de talvez ter um log de auditoria ou apresentar aos usuários como eles ganharam/perderam pontos.

1 curtida

Há algo registrado na UI quando a chamada da API é bem-sucedida ao adicionar pontos?

Incrível! E tenho outra sugestão, é possível adicionar um recurso que permita aos usuários resgatar pontos por assinaturas na interface do usuário? E a capacidade de adicionar um limite ao número de pontos que um usuário pode ganhar por dia em um evento (como criar tópicos).

Obrigado!

Não, o recurso é 100% baseado em API. Você pode chamar o endpoint “List Events” para verificar eventos, conforme descrito no OP.

3 curtidas