Disparar uma tarefa no Zapier com Webhooks do Discourse

Quer usar os Webhooks do Discourse para acionar uma tarefa via Zapier? Vamos começar!

:bulb: Dica: O Zapier agora possui uma integração oficial com o Discourse com gatilhos e ações integrados (por exemplo, “Nova Postagem”, “Criar Postagem”). Para casos de uso comuns, isso é mais simples do que configurar webhooks genéricos manualmente. O guia abaixo aborda a abordagem manual de webhook, que oferece mais flexibilidade e acesso a todos os tipos de eventos do Discourse.

O Zapier requer um gatilho e uma ação. Neste tutorial, o gatilho será um Webhook do Discourse e a ação será enviar um e-mail.

Enviar um e-mail em qualquer evento de usuário

Agora configuraremos um Zap para enviar e-mails em qualquer evento de usuário (por exemplo, quando um usuário é criado, aprovado, atualizado, faz login, faz logout, é suspenso, entre outros). Para acionar em um evento de usuário específico, consulte Acionar em um evento de usuário específico abaixo.

Criar um Webhook do Discourse

Criar um novo Zap

Procure este botão no painel do Zapier:

Configurar o Gatilho

Configurar a Ação no Zapier

Ativar o Zap

É isso! Agora você receberá um e-mail para cada evento de usuário. A lista completa de eventos de usuário que podem acionar um webhook é:

Nome do Evento Descrição
user_created Uma nova conta de usuário foi criada
user_approved Um usuário foi aprovado
user_updated Um perfil de usuário foi atualizado
user_logged_in Um usuário fez login
user_logged_out Um usuário fez logout
user_confirmed_email Um usuário confirmou seu e-mail
user_destroyed Uma conta de usuário foi excluída
user_suspended Um usuário foi suspenso
user_unsuspended Um usuário foi des suspenso
user_anonymized Uma conta de usuário foi anonimizada

:tada:


Acionar em um evento de usuário específico

Deseja enviar e-mails apenas para um evento de usuário específico, talvez apenas na criação da conta, mas não na atualização? Use o gatilho “Catch Raw Hook” (Capturar Gancho Bruto).

  1. Clique em “show less common options” (mostrar opções menos comuns)
  2. Clique em “Catch Raw Hook”
  3. Siga as etapas restantes para configurar o gatilho normalmente.

Depois que o gatilho for configurado, adicione um filtro.

  1. Clique em “Add a Step” (Adicionar uma Etapa)
  2. Clique em “Filter” (Filtro)
  3. Clique em “Save and Continue” (Salvar e Continuar)
  4. Selecione “Headers Http X Discourse Event” no primeiro menu suspenso.
  5. Selecione “(Text) Exactly matches” ((Texto) Corresponde exatamente) no segundo menu suspenso.
  6. Insira o cabeçalho completo que você deseja filtrar (por exemplo, user_logged_out).
  7. Se quiser que o Zapier seja executado em vários cabeçalhos, clique em “+OR” e adicione-os da mesma forma que o primeiro.
  8. Clique em “Test & Continue” (Testar e Continuar)
  9. Revise o teste do filtro e, em seguida, clique em “Continuar”

Depois que o filtro for configurado, configure sua ação preferida.

Usando o Cabeçalho Completo do Webhook

Para ter acesso ao cabeçalho, siga as etapas anteriores: selecione “Catch Raw Hook” e, em seguida, adicione um filtro. Configure o filtro para continuar apenas se o Headers Http X Discourse Event corresponder ao evento que você está procurando.

A dificuldade aqui é que o Catch Raw Hook passa o corpo bruto do webhook. A ação final que estou usando precisa de dados analisados do corpo. O que está funcionando para mim é adicionar uma ação de Código após o filtro. No modal da Ação de Código, selecione “Run Javascript” (Executar Javascript):

O Zapier criará um objeto inputData ao qual você pode adicionar propriedades nomeadas. Adicione um nome para sua propriedade na coluna da esquerda. Na coluna da direita, selecione “Catch Raw Hook” no menu suspenso e, em seguida, selecione “Raw Body” (Corpo Bruto):

Role a página para baixo para ver uma entrada de código:

Em seguida, você precisa substituir o código de amostra por um código que analise o Corpo Bruto e retorne um objeto que tenha os valores necessários para sua ação final. Aqui está o código que estou usando. O objeto retornado está sendo usado pela integração com o Salesforce. O Salesforce exige um sobrenome, então, se nenhum sobrenome existir, um erro será retornado:

const parsed = JSON.parse(inputData.raw);
if (parsed.user) {
  const user = parsed.user,
        name = user.name,
        userFields = user.user_fields;
  let firstName,
      lastName,
      company;
  
  if (name) {
    const splitName = name.split(' ');
    firstName = splitName[0];
    lastName = splitName[1]
    }
  if (userFields) {
    company = userFields['10'];
  }
  if (lastName) {
    return {id: user.id,
            username: user.username,
            lastName: lastName,
            firstName: firstName,
            email: user.email,
            company: company
           };
  } else {
    return {error: "Missing last name"}
  }
} else {
  return {error: "A user object was not returned"};
}

Para evitar fazer uma solicitação falha na ação final, outro filtro do Zapier pode ser adicionado. Configure esse filtro para continuar apenas se o campo de erro retornado pelo javascript não existir:

Você pode então adicionar sua ação final. Para selecionar os campos a serem usados na ação final, use as propriedades retornadas pela ação Run Javascript.

32 curtidas