# Multi-Channel — Mở rộng kênh tiếp cận

> **Tóm tắt:** Chatbot hiện tại chạy trên 1 kênh (web). Để scale, cần mở rộng ra Facebook Messenger, Zalo OA, Instagram DM, Telesale, và Email — tất cả chia sẻ cùng 1 bộ não AI.

---

## 1. Kiến trúc Omnichannel

### Nguyên tắc: "1 Brain, Many Mouths"

Tất cả kênh đều gửi message về **cùng 1 AI pipeline** — chỉ khác lớp adapter:

```
Facebook Messenger ─┐
Zalo OA ────────────┤
Instagram DM ───────┼──→ [Channel Adapter Layer] ──→ [AI Pipeline] ──→ Response
Web Chat ───────────┤                                                    │
Voice (Twilio) ─────┘                              ←─────────────────────┘
```

### Channel Adapter Pattern

| Kênh | Webhook Format | Adapter cần xử lý | Giới hạn |
|------|---------------|-------------------|----------|
| **Facebook** | Graph API Webhook | Parse `messaging` array, handle `postback` | 1000 chars/message |
| **Zalo OA** | Zalo OA API | Parse `event_name`, handle `oa.message` | Cần xác thực OA |
| **Instagram** | Graph API (qua Facebook) | Parse `instagram` messaging | Chỉ Business accounts |
| **Web** | Custom WebSocket | Parse trực tiếp | Không giới hạn |
| **Voice** | Twilio Media Stream | STT → text → pipeline → TTS | Latency-critical |

### Adapter xử lý gì?

```python
class ChannelAdapter:
    def parse_incoming(self, webhook_data) -> UnifiedMessage:
        """Chuyển format riêng của kênh → format chung"""
        return UnifiedMessage(
            channel="facebook",
            sender_id="fb_12345",
            text="Tìm áo khoác nam",
            media=None,
            metadata={"page_id": "canifa_page"}
        )
    
    def format_response(self, ai_response) -> ChannelPayload:
        """Chuyển response AI → format riêng của kênh"""
        # Facebook: carousel cards
        # Zalo: template message
        # Web: rich HTML
```

---

## 2. Thách thức khi chạy Multi-Channel

| Thách thức | Mô tả | Giải pháp |
|-----------|-------|----------|
| **Identity Merge** | Cùng 1 khách chat trên FB + Zalo → 2 profile | Merge bằng SĐT/email, unified customer_id |
| **Response Format** | FB hỗ trợ carousel, Zalo không | Adapter tự convert: carousel → list text |
| **Media Handling** | Khách gửi ảnh trên IG → AI cần xử lý | Adapter download → upload CDN → gửi URL |
| **Rate Limits** | FB: 200 msg/s, Zalo: 100 msg/s | Queue (Redis) + backpressure |
| **Context Sharing** | Khách chat FB sáng, chat Zalo chiều | Cross-channel InsightJSON (persistent) |

---

## 3. Kênh ưu tiên cho Canifa

| Kênh | User base | Effort | Impact | Priority |
|------|-----------|--------|--------|----------|
| **Zalo OA** | 70M users VN | 2 tuần | ⭐⭐⭐⭐⭐ | P1 |
| **Facebook Messenger** | 65M users VN | 2 tuần | ⭐⭐⭐⭐ | P1 |
| **Instagram DM** | 15M users VN | 1 tuần (qua FB API) | ⭐⭐⭐ | P2 |
| **Voice (hotline)** | Universal | 3 tuần | ⭐⭐⭐⭐ | P2 |
| **Email** | Khách VIP | 1 tuần | ⭐⭐ | P3 |
| **SMS** | Xác nhận đơn | 3 ngày | ⭐⭐ | P3 |

---

## 4. Lộ trình

| Phase | Milestone |
|-------|-----------|
| **P1** | Zalo OA + Facebook Messenger → cùng AI pipeline |
| **P2** | Instagram DM + Voice Agent |
| **P3** | Identity Merge (SĐT-based) → unified profile |
| **P4** | Proactive outreach: AI nhắn khách trên kênh họ active nhất |

---

## References

1. Meta (2025) — *"Messenger Platform API v19.0"*
2. Zalo (2025) — *"Zalo OA API Documentation"*
3. Canifa Engineering — Channel adapter pattern
