Pular para conteúdo

Webhooks (Webhooks)

A extensão Webhooks transforma o Moodle em uma plataforma orientada a eventos (Event-Driven). Ela permite que o sistema notifique aplicações externas sempre que algo importante acontece.

No modelo tradicional de integração, um sistema externo precisa perguntar ao Moodle a cada 5 minutos: "Ei, tem algum aluno novo?". Isso gera carga desnecessária no servidor. Com Webhooks, o Moodle avisa ativamente: "Ei, o João acabou de se matricular!" enviando os dados para uma URL configurada.


Para que serve?

  1. Integração em Tempo Real: Sincronizar dados com CRMs (Salesforce, HubSpot, RD Station) no exato momento da ação.
  2. Automação de Fluxos (iPaaS): Conectar o Moodle a ferramentas como Zapier, n8n, Make ou Power Automate.
  3. Notificações de Equipe: Enviar um alerta no Slack ou Microsoft Teams quando um aluno for reprovado ou concluir uma trilha.

Funcionalidades Principais

1. Catálogo de Eventos

O sistema monitora dezenas de eventos nativos do Moodle e do MIDDAG: * Usuários: Criação, Atualização, Login, Exclusão. * Cursos: Matrícula, Desmatrícula, Conclusão de Curso. * Atividades: Envio de Tarefa, Nota de Questionário, Post no Fórum. * Extensões: Compra no E-commerce, Ticket de Helpdesk aberto.

2. Payload Customizável (JSON)

O Moodle envia um pacote de dados (Payload) rico e estruturado. * Em vez de enviar apenas user_id: 54, o webhook pode ser configurado para enviar o objeto completo: { "id": 54, "email": "[email protected]", "fullname": "João Silva" }, facilitando a vida do sistema que recebe.

3. Segurança e Assinatura

Para garantir que o dado realmente veio do seu Moodle e não de um hacker tentando injetar dados falsos, cada requisição é assinada com um Hash HMAC-SHA256 usando uma chave secreta que só você e o sistema de destino conhecem.

4. Logs e Retentativas (Retry Policy)

Se o sistema de destino estiver fora do ar (Erro 500 ou Timeout), o Moodle não desiste. Ele tenta reenviar a notificação várias vezes (ex: imediatamente, depois em 1min, 5min, 1h) até obter sucesso, garantindo a entrega da informação.


Casos de Uso

Marketing (RD Station / HubSpot)

  • Gatilho: Aluno concluiu o "Curso Gratuito".
  • Ação: O Webhook avisa o CRM, que muda o status do Lead para "Qualificado" e envia um e-mail de oferta do "Curso Pago".

Certificação Externa

  • Gatilho: Aluno aprovado no curso.
  • Ação: O Webhook envia os dados para uma certificadora externa que gera um diploma físico e inicia o processo de envio pelos correios.

Monitoramento de Evasão

  • Gatilho: Aluno desmatriculado (ou trancou matrícula).
  • Ação: Avisar a equipe de retenção no Slack para ligar para o aluno imediatamente.

Como Configurar

  1. Acesse Administração do Site > Extensões > Integrações > Webhooks.
  2. Clique em Novo Webhook.
  3. Nome: Identificação interna (ex: "Sincronizar CRM").
  4. URL de Destino: O endereço que receberá os dados (ex: https://hooks.zapier.com/...).
  5. Eventos: Selecione quais gatilhos disparam este webhook (ex: \core\event\user_created).
  6. Segredo (Secret): Defina uma senha para assinar a requisição.

Para Desenvolvedores

Exemplo de Payload

{
  "event": "course_completed",
  "timestamp": 1678999000,
  "data": {
    "user": {
      "id": 10,
      "email": "[email protected]"
    },
    "course": {
      "id": 5,
      "fullname": "Curso de PHP"
    },
    "grade": 95.5
  }
}

Verificação de Segurança

O Moodle envia um cabeçalho X-Middag-Signature. O recebedor deve calcular o hash do corpo da requisição usando a chave secreta e comparar com este cabeçalho. Se bater, a requisição é legítima.


Perguntas Frequentes

O que acontece se a internet cair? As notificações ficam em uma fila interna (Queue). Assim que a conexão voltar ou o Cron rodar, o sistema processa a fila acumulada.

Posso filtrar para disparar apenas para um curso específico? Sim. Na configuração do Webhook, você pode adicionar filtros lógicos (ex: course_id == 10).

Funciona com localhost? O Moodle precisa conseguir acessar a URL. Se você estiver testando localmente, precisará de uma ferramenta de túnel (como Ngrok) ou usar um serviço como Webhook.site para inspecionar os envios.