🔒

Marketing Dashboard

รหัสไม่ถูกต้อง

📊 Marketing Dashboard

Goals11.ai — Telegram Outreach

{{ stats.total_accounts || 0 }} accounts {{ stats.total_contacts || 0 }} contacts
ส่งแล้ว
{{ stats.total_sent || 0 }}
ตอบกลับ
{{ stats.total_replied || 0 }}
กดลิงก์
{{ stats.total_clicked || 0 }}
สมัครแล้ว
{{ stats.total_registered || 0 }}
Reply Rate
{{ stats.total_sent ? ((stats.total_replied / stats.total_sent) * 100).toFixed(1) : 0 }}%

📈 Conversion Funnel

{{ step.label }} {{ step.count }} ({{ step.pct }}%)

🎯 Pitch Template Performance

Template Sent Reply% Click% Registered
{{ t.pitch_template || '(ไม่มี)' }} {{ t.total_sent }} {{ t.reply_rate }}% {{ t.click_rate }}% {{ t.registered }}

🚀 Campaigns

ยังไม่มี campaign
{{ c.name }}
{{ c.account_nickname ? c.account_nickname + ' (' + c.account_phone + ')' : c.account_phone }} · {{ c.total_contacts }} contacts
{{ c.reply_count }} replies · {{ c.click_count }} clicks
{{ c.status }}

🔑 ดึง API ID / Hash จาก Telegram

ใส่เบอร์โทร → รับ code ทาง Telegram app → ระบบดึง api_id + api_hash ให้อัตโนมัติ

✅ ได้แล้ว!
API ID: {{ tgAuth.result.api_id }}
API Hash: {{ tgAuth.result.api_hash }}

➕ เพิ่ม Account

🌐 Proxy: ระบบจะเลือกอัตโนมัติจาก Pool ตอนเพิ่ม account — จัดการ pool ที่แท็บ Proxies

📱 Accounts

ยังไม่มี account
{{ a.nickname || a.phone }}{{ a.phone }}✏️
API: {{ a.api_id }}
🟢 🟡 🔴 {{ a.proxy_host || 'no proxy' }}:{{ a.proxy_port }} {{ a.proxy_ms }}ms
{{ a.status }} 🟢 healthy 🔴 fail ⚪ untested ⏱ {{ timeAgo(a.last_health_check || a.updated_at || a.created_at) }}
{{ accountTestResult.message }}
กำลังโหลด... (Sync ในหน้า Contacts ก่อน)
👥 {{ g.title }} ({{ g.members_count }})

📥 Import Proxies

รองรับ format: host:port:user:pass หรือ socks5://user:pass@host:port — บรรทัดละ 1 รายการ

🎲 Generate 711proxy sessions

สร้าง rotating session IDs อัตโนมัติ — {sid} = random N digits

🌐 Proxy Pool

🟢 {{ proxyStats.active || 0 }} 🟡 {{ proxyStats.cooling || 0 }} {{ proxyStats.untested || 0 }} 🔴 {{ proxyStats.dead || 0 }}
{{ e.msg }}[{{ e.progress }}]
ยังไม่มี proxy
Host User Status Latency Used by Last error
{{ p.host }}:{{ p.port }} {{ p.user || '-' }} 🟢 🟡 🔴 {{ p.status }} {{ p.last_check_ms ? p.last_check_ms + 'ms' : '-' }} {{ p.last_used_by || '-' }} {{ p.last_error || '' }}

📤 อัพโหลด CSV

Columns: user_id, username, first_name, last_name

✅ นำเข้าแล้ว {{ uploadResult }} contacts

🔍 ดึง Members จากกลุ่ม

1
2
พบแล้ว {{ scrape.syncCount }} กลุ่ม... ✅ พบ {{ scrape.groups.length }} กลุ่ม
3
4
⏳ กำลังดึง... {{ scrape.progress.source }} {{ scrape.progress.count }} / {{ scrape.progress.total || '?' }} คน
✅ ดึงเสร็จ! {{ scrape.progress.count }} คน จาก {{ scrape.progress.source }}
❌ Error: {{ scrape.progress.error }}
✅ ดึงมาได้ {{ scrape.result.imported }} คน จาก {{ scrape.result.source }}

👥 รายชื่อ ({{ contactData.total }})

📁 กรองตามกลุ่มต้นทาง
— ยังไม่มีข้อมูลกลุ่ม —
✓ กรอง {{ contactSourceFilter.length }} กลุ่ม
หน้า {{ contactPage }} / {{ Math.ceil(contactData.total / 200) || 1 }}
กำลังโหลด contacts...
ยังไม่มี contacts
Username User ID ชื่อ สถานะ แหล่งที่มา Campaign
@{{ c.username }} {{ c.user_id }} {{ c.first_name }} {{ c.last_name }} {{ statusLabel(c.last_status) }} ยังไม่ส่ง {{ c.source }} {{ c.last_campaign || '-' }}

{{ editingFlow ? '✏️ แก้ไข Flow' : '🔀 สร้าง Flow ใหม่' }}

{{ i + 1 }}
💡 {link} จะถูกแทนด้วย short URL เฉพาะแต่ละคน
ถ้าไม่ตอบภายในเวลานี้ → ไป step ถัดไป
- วินาที

📋 Flows ที่สร้างไว้

ยังไม่มี flow
{{ f.name }}
{{ f.steps.length }} steps · สร้างเมื่อ {{ toLocal(f.created_at) }}
{{ {send_message:'💬',wait_reply:'⏳',condition:'🔀',send_link:'🔗',delay:'⏸'}[s.type] }} {{ s.type }}

🚀 สร้าง Campaign ใหม่

เลือกแล้ว {{ newCampaign.account_ids.length }} account · ระบบจะสุ่มแบ่ง contacts ให้แต่ละ account
เช่น 30 + 3 accounts = ส่งได้ 90 คน/วัน · accounts ส่งพร้อมกัน
-
เลือกแล้ว {{ selectedContacts.length }} คน
{{ selectedSourceGroups.length }} กลุ่ม
ไม่มีกลุ่ม (sync contacts ก่อน)
ไม่พบ contacts
แสดง {{ Math.min(100, campaignFilteredContactsPaged.length) }} / {{ campaignFilteredContacts.length }} คน

{{ c.name }}

{{ c.account_nickname ? c.account_nickname + ' (' + c.account_phone + ')' : c.account_phone }} · สร้างเมื่อ {{ toLocal(c.created_at) }}
ส่งแล้ว
{{ c.sent_count }}/{{ c.total_contacts }}
อ่าน
{{ c.read_count }}
ตอบกลับ
{{ c.reply_count }}
กดลิงก์
{{ c.click_count }}
📡 Live Activity {{ activityHint(c) }}
รอ worker tick ถัดไป...
{{ shortTime(a.ts) }} {{ activityIcon(a.kind) }} {{ a.message }}
กำลังโหลด...
Username ชื่อ สถานะ ส่งเมื่อ ตอบ
@{{ cc.username }} {{ cc.first_name }} {{ statusLabel(cc.status) }} {{ toLocal(cc.sent_at) }} {{ cc.reply_text || '-' }}

🗺️ Coverage Report

กลุ่มไหน account ไหน scrape ได้แล้ว — เห็น gap ก่อนส่งจะได้ join/scrape เพิ่ม

บัญชี: ({{ selAccs.length }} selected)
action: | | {{ selRowChats.length }} กลุ่มเลือกในตาราง
💡 Tip: คลิก 🔴/🟡 เพื่อ เลือก (เลือกได้หลายอัน) — กด +all ในหัวคอลัมน์เพื่อเลือกทั้งหมด → แถบม่วงจะโผล่ → Confirm • คลิก row เพื่อเลือกหลายกลุ่ม → ปุ่มข้างบนจะทำเฉพาะที่เลือก
🪪 Join Manager — เลือก account แล้วเลือกกลุ่มที่จะ join
เลือกกลุ่มที่ติ๊ก ✅ แล้วกด "Join เลย" → enqueue job worker (3 join/วัน/account)
เลือก {{ joinManager.selected.length }} กลุ่ม
กลุ่ม Members สถานะ
เลือก account ก่อน
{{ g.title }} {{ (g.members||0).toLocaleString() }} ✅ joined ⏳ queued ❌ ยังไม่ join
ไม่มีกลุ่ม
📝 Paste @usernames → Join
วาง @username ทีละบรรทัด/คั่นด้วย space — ทุก account จะ join ตาม list นี้ (30s/กลุ่ม + auto-retry FloodWait)
เลือก accounts: พบ {{ parsedUsernames.length }} usernames
🎯 เลือก {{ pendingCells.length }} action join: {{ pendingCells.filter(c=>c.kind==='join').length }} · scrape: {{ pendingCells.filter(c=>c.kind==='scrape').length }}
ยังไม่มีข้อมูล — กด Refresh
กลุ่ม Members Scrape ได้ อยู่กลุ่มแต่ยังไม่ scrape ยังไม่ join
{{ selRowChats.includes(g.chat_id) ? '☑' : '☐' }} {{ g.title }} {{ g.members.toLocaleString() }} {{ accLabel(aid) }} {{ accLabel(aid) }} 🌾 {{ accLabel(aid) }} 🚪
🟢 เขียว = scrape แล้ว ส่งได้
🟡 เหลือง = อยู่ในกลุ่มแต่ยังไม่ scrape (คลิกเพื่อ scrape คู่นี้)
🔴 แดง = ยังไม่ join (คลิกเพื่อ join คู่นี้)
☐ คลิก title เพื่อเลือก/ไม่เลือกกลุ่ม → ปุ่มข้างบนทำเฉพาะที่เลือก
{{ toast.message }}
📟 system terminal {{ sysTerm.lines.length }} lines ⏸ paused
{{ l.ts }} [{{ l.tag }}] {{ l.msg }}
waiting for events...