Chuyển đến nội dung chính

Giới thiệu

Giữ cho nhóm kinh doanh của bạn luôn được cập nhật với thông báo thanh toán theo thời gian thực trong Microsoft Teams. Tích hợp này cung cấp các sự kiện thanh toán dưới dạng các Adaptive Cards phong phú—hoàn hảo cho các môi trường doanh nghiệp nơi Teams là công cụ hợp tác chính.
Hướng dẫn này giả định bạn có quyền admin để tạo webhook trong không gian làm việc Microsoft Teams của mình.

Bắt đầu

1

Open the Webhook Section

Trong bảng điều khiển Dodo Payments của bạn, điều hướng tới Webhooks → + Add Endpoint và mở rộng menu thả xuống tích hợp.
Thêm điểm cuối và menu tích hợp
2

Select Microsoft Teams

Chọn thẻ tích hợp Microsoft Teams.
3

Create Teams Webhook

Trong Teams, vào kênh của bạn → ⋯ → Connectors → Incoming Webhook → Configure. Sao chép URL webhook.
4

Paste Webhook URL

Dán URL webhook Teams vào cấu hình điểm cuối.
5

Customize Transformation

Chỉnh sửa mã chuyển đổi để định dạng tin nhắn dưới dạng Adaptive Cards cho Teams.
6

Test & Create

Thử với payload mẫu và nhấp Create để kích hoạt.
7

Done!

🎉 Kênh Teams của bạn bây giờ sẽ nhận được các cập nhật từ Dodo Payments dưới dạng Adaptive Cards.

Ví dụ Mã Chuyển đổi

Thẻ Thanh toán Cơ bản

payment_card.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      type: "message",
      attachments: [{
        contentType: "application/vnd.microsoft.card.adaptive",
        content: {
          type: "AdaptiveCard",
          body: [
            {
              type: "TextBlock",
              text: "✅ Payment Successful",
              weight: "Bolder",
              size: "Medium"
            },
            {
              type: "FactSet",
              facts: [
                { title: "Amount", value: `$${(p.total_amount / 100).toFixed(2)}` },
                { title: "Customer", value: p.customer.email },
                { title: "Payment ID", value: p.payment_id }
              ]
            }
          ]
        }
      }]
    };
  }
  return webhook;
}

Quản lý Đăng ký

subscription_card.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        type: "message",
        attachments: [{
          contentType: "application/vnd.microsoft.card.adaptive",
          content: {
            type: "AdaptiveCard",
            body: [
              {
                type: "TextBlock",
                text: "📄 Subscription Activated",
                weight: "Bolder",
                color: "Good"
              },
              {
                type: "FactSet",
                facts: [
                  { title: "Customer", value: s.customer.email },
                  { title: "Product", value: s.product_id },
                  { title: "Amount", value: `$${(s.recurring_pre_tax_amount / 100).toFixed(2)}/${s.payment_frequency_interval}` },
                  { title: "Next Billing", value: new Date(s.next_billing_date).toLocaleDateString() }
                ]
              }
            ]
          }
        }]
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        type: "message",
        attachments: [{
          contentType: "application/vnd.microsoft.card.adaptive",
          content: {
            type: "AdaptiveCard",
            body: [
              {
                type: "TextBlock",
                text: "⚠️ Subscription Cancelled",
                weight: "Bolder",
                color: "Warning"
              },
              {
                type: "FactSet",
                facts: [
                  { title: "Customer", value: s.customer.email },
                  { title: "Product", value: s.product_id },
                  { title: "Cancelled At", value: new Date(s.cancelled_at).toLocaleDateString() }
                ]
              }
            ]
          }
        }]
      };
      break;
  }
  return webhook;
}

Cảnh báo Tranh chấp

dispute_card.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    const color = d.dispute_status === "won" ? "Good" : d.dispute_status === "lost" ? "Attention" : "Warning";
    const title = d.dispute_status === "won" ? "🏆 Dispute Won" : d.dispute_status === "lost" ? "❌ Dispute Lost" : "🚨 Dispute Update";
    
    webhook.payload = {
      type: "message",
      attachments: [{
        contentType: "application/vnd.microsoft.card.adaptive",
        content: {
          type: "AdaptiveCard",
          body: [
            {
              type: "TextBlock",
              text: title,
              weight: "Bolder",
              color: color
            },
            {
              type: "FactSet",
              facts: [
                { title: "Payment ID", value: d.payment_id },
                { title: "Amount", value: `$${(d.amount / 100).toFixed(2)}` },
                { title: "Status", value: d.dispute_status },
                { title: "Stage", value: d.dispute_stage }
              ]
            }
          ]
        }
      }]
    };
  }
  return webhook;
}

Mẹo

  • Sử dụng Adaptive Cards để định dạng phong phú, tương tác
  • Chọn màu sắc phù hợp: Tốt (xanh lá), Cảnh báo (vàng), Chú ý (đỏ)
  • Giữ cho các tập hợp thông tin ngắn gọn và dễ đọc
  • Kiểm tra với trình kiểm tra webhook Teams trước khi triển khai

Khắc phục sự cố

  • Xác minh URL webhook là chính xác và đang hoạt động
  • Kiểm tra xem phép chuyển đổi có trả về JSON Adaptive Card hợp lệ không
  • Đảm bảo webhook có quyền đăng bài trong kênh
  • Xác thực schema Adaptive Card trong công cụ kiểm tra webhook Teams
  • Kiểm tra tất cả các trường bắt buộc đều có
  • Đảm bảo các giá trị màu hợp lệ (Good, Warning, Attention, Default)