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 pressupõe que você tenha acesso à seção de Integrações do painel da Dodo Payments.
Começando
Open the Webhook Section
No painel da Dodo Payments, abra Webhooks → + Add Endpoint e expanda o menu suspenso para exibir integrações.
Select Discord
Escolha o card Discord e clique em Conectar seu workspace do Discord .
Authorize the Bot
Conceda as permissões solicitadas para que o bot possa publicar mensagens no canal selecionado.
Edit Transformation Code
Ajuste o mapeamento payload → embed de acordo com suas necessidades — ou comece com os modelos abaixo.
Test & Create
Use payloads de exemplo para pré-visualizar o embed e depois clique em Criar .
Done!
🎉 Seu canal do Discord agora receberá atualizações ao vivo da Dodo Payments.
Embed de Pagamento Mínimo
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 ;
}
See all 13 lines
Eventos de Assinatura
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 ;
}
See all 31 lines
Alertas de Disputa
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 ;
}
See all 17 lines
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.