Pular para o conteúdo principal

Introdução

Mantenha sua equipe informada onde já colaboram. A integração do Discord entrega eventos de pagamento, assinatura, disputa e outros eventos importantes diretamente para qualquer canal que você escolher—sem necessidade de polling ou dashboards.
Este guia assume que você tem acesso à seção de Integrações do painel de controle do Dodo Payments.

Começando

1

Abra a Seção de Webhook

No seu painel do Dodo Payments, abra Webhooks → + Adicionar Endpoint e expanda o dropdown para revelar as integrações.
Adicionar Endpoint e dropdown de integrações
2

Selecione o Discord

Escolha o cartão Discord e clique em Conectar seu espaço de trabalho do Discord.
3

Autorize o Bot

Conceda as permissões solicitadas para que o bot possa postar mensagens no canal selecionado.
4

Edite o Código de Transformação

Ajuste o mapeamento de payload → embed de acordo com suas necessidades—ou comece com os templates abaixo.
5

Teste & Crie

Use payloads de exemplo para visualizar o embed, então clique em Criar.
6

Pronto!

🎉 Seu canal do Discord agora receberá atualizações ao vivo do Dodo Payments.

Exemplos de Código de Transformação

Embed de Pagamento Mínimo

payment_embed.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      embeds: [{
        title: "✅ Payment Successful",
        description: `**Amount:** $${(p.total_amount / 100).toFixed(2)}\n**Customer:** ${p.customer.email}`,
        color: 0x2ecc71 // green
      }]
    };
  }
  return webhook;
}

Eventos de Assinatura

subscription_embed.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        embeds: [{
          title: "📄 Subscription Activated",
          fields: [
            { name: "Customer", value: s.customer.email, inline: true },
            { name: "Product", value: s.product_id, inline: true },
            { name: "Next Billing", value: new Date(s.next_billing_date).toLocaleDateString(), inline: true }
          ],
          color: 0x2ecc71
        }]
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        embeds: [{
          title: "⚠️ Subscription Cancelled",
          fields: [
            { name: "Customer", value: s.customer.email, inline: true },
            { name: "Product", value: s.product_id, inline: true }
          ],
          color: 0xf1c40f
        }]
      };
      break;
  }
  return webhook;
}

Alertas de Disputa

dispute_embed.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      embeds: [{
        title: d.dispute_status === "won" ? "🏆 Dispute Won" : d.dispute_status === "lost" ? "❌ Dispute Lost" : "🚨 Dispute Update",
        fields: [
          { name: "Payment ID", value: d.payment_id, inline: true },
          { name: "Amount", value: `$${(d.amount / 100).toFixed(2)}`, inline: true },
          { name: "Status", value: d.dispute_status, inline: true }
        ],
        color: d.dispute_status === "won" ? 0x2ecc71 : d.dispute_status === "lost" ? 0xe74c3c : 0xe67e22
      }]
    };
  }
  return webhook;
}

Dicas

  • Prefira embeds para formatação rica e cores.
  • Mantenha os títulos curtos; coloque detalhes nos campos.
  • Use cores intuitivas: verde (sucesso), vermelho (falha), laranja (avisos).

Solução de Problemas

  • Confirme se o bot tem acesso ao canal.
  • Verifique se a transformação retorna um objeto JSON com embeds.
  • Valide seu código no editor – erros de sintaxe bloquearão a entrega.
  • Certifique-se de que os nomes dos campos correspondam à estrutura do payload do webhook.