> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Teams

> Gửi thông báo Dodo Payments đến các kênh Microsoft Teams với các Adaptive Cards phong phú.

## 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.

<Info>
  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.
</Info>

## Bắt đầu

<Steps>
  <Step title="Open the Webhook Section">
    Trong bảng điều khiển Dodo Payments của bạn, điều hướng đến <b>Webhooks → + Thêm Endpoint</b> và mở rộng danh sách tích hợp.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/slbAEdrLLwKHfaRf/images/integrations/teams.png?fit=max&auto=format&n=slbAEdrLLwKHfaRf&q=85&s=240820e1a3d3162b2faee6fa052535c6" alt="Thêm Endpoint và danh sách tích hợp" style={{ maxHeight: '500px', width: 'auto' }} width="1694" height="936" data-path="images/integrations/teams.png" />
    </Frame>
  </Step>

  <Step title="Select Microsoft Teams">
    Chọn thẻ tích hợp <b>Microsoft Teams</b>.
  </Step>

  <Step title="Create Teams Webhook">
    Trong Teams, vào kênh của bạn → ⋯ → Connectors → Incoming Webhook → Configure. Sao chép URL webhook.
  </Step>

  <Step title="Paste Webhook URL">
    Dán URL webhook Teams vào cấu hình điểm cuối.
  </Step>

  <Step title="Customize Transformation">
    Chỉnh sửa mã chuyển đổi để định dạng tin nhắn dưới dạng Adaptive Cards cho Teams.
  </Step>

  <Step title="Test & Create">
    Thử với payload mẫu và nhấp <b>Create</b> để kích hoạt.
  </Step>

  <Step title="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.
  </Step>
</Steps>

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

### Thẻ Thanh toán Cơ bản

```javascript payment_card.js icon="js" expandable theme={null}
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ý

```javascript subscription_card.js icon="js" expandable theme={null}
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

```javascript dispute_card.js icon="js" expandable theme={null}
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ố

<AccordionGroup>
  <Accordion title="No messages in Teams">
    * 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
  </Accordion>

  <Accordion title="Card formatting issues">
    * 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)
  </Accordion>
</AccordionGroup>
