# Frenday seller messages — what James sends by LINE, and when

*2026-09-17, rebranded เฟรนเดย์ / Frenday 2026-09-18 · the manual version of `docs/paiduay/plans/line-channel.md` §2 and `notifications.md` §1. James reaches her by opening her card and tapping her own LINE button; the webhook only tells his phone a moment has arrived. Companion to `posts-2026-09.md` (voice, never-say list) and `launch-runbook.md` §4–§6.*

**Rules.** ผม/ครับ, James as builder, never "เรา" as a company. Thai block first, English on its own lines, never mixed. Each message ≤ 4 lines. No counts about the site, no urgency, no "verified", no "จองเลย". She confirms; nothing is taken from her. `{url}` = `https://frenday.xyz` — a temporary TLD until James buys the real name; the old `paiduay.6326638.xyz` links 301 to it. "Paiduay" stays the internal identifier and never appears in a message. A number enters a message only after James read it on `/admin/numbers` that sitting; if zero, the line is dropped, never softened.

**The identity rule.** His first message reaches her from a stranger's LINE account, on the channel she uses for customers, and she expects scams. So: the sending account carries the same name and photo as `/policy` and post F1; the message names her handle; it asks for nothing and links only to her own pages. "Is this a scam?" gets runbook §3's script, not reassurance.

## When to send what

| Moment | Cue | Message | Send by |
|---|---|---|---|
| She publishes | `card.published` buzz | 1 | within the hour, after reading the card |
| Day 3 | `/admin/numbers` row for her handle | 2 | evening, 20:00–21:00 |
| Day 7 | **only if `PAIDUAY_PROMPTPAY_ID` is set** | 3 | evening; once |
| Request unanswered 4 h | `request.unanswered` buzz (`/p` providers only) | 4 | at once |
| Slip arrives | `pro.requested` buzz | 5a | within the hour |
| Approved / declined | `pro.approved` reaches James, **not her** (next-sprint B5) | 5b / 5c | right after the click |
| She paused | `/me` row reads พักอยู่ | 6a | next loop; once |
| Zero taps 14 days | `/admin/numbers` quiet list | 6b | once; never again |

## 1 · After she publishes

```
ขอบคุณที่ทำการ์ดครับ {name} ผมชื่อ James เป็นคนทำเว็บนี้เอง หน้าของคุณอยู่ที่ {url}/c/{handle}
สิ่งเดียวที่ควรทำตอนนี้: เอารูปแบบแถบจาก {url}/c/{handle}/kit ไปโพสต์พร้อมลิงก์ แล้วลองกดปุ่ม LINE บนหน้าตัวเองดูสักครั้ง
อะไรไม่ตรง แก้เองได้ที่ {url}/c/{handle}/edit ถ้าเว็บพัง บอกผมในแชทนี้ได้เลยครับ
```
```
Thanks for making a card, {name}. I'm James; I build the site myself. Your page is at {url}/c/{handle}
The one thing to do now: post the Band image from {url}/c/{handle}/kit together with the link, and tap the LINE button on your own page once.
Anything off, edit it yourself at {url}/c/{handle}/edit. If something breaks, tell me in this chat.
```

No Pro, no numbers. If the card crosses the line (runbook §4 minute 13), it is hidden from `/admin/card` and this message becomes one line: `หน้าของคุณถูกซ่อนเพราะข้อความผิดกติกา ดูกติกาที่ {url}/policy`.

## 2 · Day 3 — her numbers, one tip

Read her row on `/admin/numbers` first (`opens7`, `taps7`). Never estimate, never round up, never compare her with anyone.

```
สวัสดีครับ {name} ผม James จากเฟรนเดย์ 3 วันแรกของการ์ดคุณ: เปิดหน้า {opens} ครั้ง แตะ LINE {taps} ครั้ง (ดูเองได้ที่ {url}/me เรานับครั้งที่แตะ ไม่นับคน)
ทิปหนึ่งข้อ: {tip}
ไม่ต้องตอบก็ได้ครับ
```
```
Hi {name}, James from Frenday. Your card's first 3 days: {opens} opens, {taps} LINE taps (you can see it yourself at {url}/me; we count taps, not people).
One tip: {tip}
No need to reply.
```

**If both are zero:** drop the numbers line and send only the tip line, with tip (a).

**Tips — pick one:**

- (a) *link not in bio yet:* `วางลิงก์ของแต่ละแอปในไบโอของแอปนั้น (ลิงก์แยกต่อแอปอยู่ที่ {url}/me) แล้วคุณจะรู้ว่าคนมาจากไหน` / `Put each app's link in that app's bio (one per app on {url}/me) and you will know where people come from.`
- (b) *she posted, few opens:* `โพสต์หลังมื้อเย็น 20:00–21:30 คนไทยเปิด TikTok กับ X ช่วงนั้นมากที่สุด` / `Post after dinner, 20:00–21:30, when TikTok and X are busiest in Thailand.` (posts pack §4)
- (c) *opens but few taps:* `เขียนกติกาให้ครบบนการ์ด: กลางวัน ที่สาธารณะ ไม่รับอะไร ลูกค้าอ่านก่อนทัก คุณจะได้ไม่ต้องอธิบายซ้ำ` / `Put your full rules on the card: daytime, public places, what you do not take. Customers read before tapping, and you stop explaining.` (post S3)

## 3 · Day 7 — the Pro line, once

Gate: `PAIDUAY_PROMPTPAY_ID` set and the receiver-name line under the QR (next-sprint B3); otherwise `/c/{handle}/pro` says "ยังไม่เปิดรับชำระ" and this message is a broken promise.

```
{name} ครับ ผมพูดเรื่องนี้ครั้งเดียวแล้วจะไม่พูดอีก การ์ดฟรีเหมือนเดิม
ถ้าอยากได้ชุดรูปทุกแบบรวมแบบกลางคืน สามคลิป และแถวโปรบนหน้าดูทุกคน มีโปร ฿499 ครั้งเดียว ใช้ 12 เดือน ไม่ต่ออัตโนมัติ
รายละเอียดที่ {url}/pro เปิดได้เองที่ {url}/c/{handle}/pro
ไม่เอาก็ไม่เป็นไรครับ การ์ดใช้ได้เหมือนเดิมทุกอย่าง
```
```
{name}, I will say this once and not again. The card stays free.
If you want every kit template including the night versions, three clips, and the Pro row on the everyone page, there is Pro: ฿499 once, 12 months, no auto-renew.
Details at {url}/pro; turn it on yourself at {url}/c/{handle}/pro
No is fine. The card works exactly the same either way.
```

"What is แถวโปร?" → `แถวของตัวเองบนหน้าดูทุกคน ใต้ป้ายที่เขียนตรง ๆ ว่าซื้อมา ไม่เลื่อนอันดับใคร ไม่มีตราบนการ์ด` / `Its own row on the everyone page, under a label that says it was paid for. It moves nobody and puts no badge on the card.`

## 4 · A request unanswered for 4 hours

This buzz exists only for the companion pages (`/p/<slug>`, answered in `/portal`). A card sends customers straight to her LINE; no request event exists there — never invent a nudge for a card seller.

```
{name} ครับ มีคำขอนัดส่งถึงคุณเมื่อประมาณ {hours} ชม.ก่อน ยังไม่มีคำตอบ ลูกค้ากำลังรออยู่
เข้า {url}/portal แล้วกด รับนัด หรือ ปฏิเสธ ก็ได้ ไม่ต้องบอกเหตุผล
ตอบอย่างใดอย่างหนึ่ง เขาจะได้รู้และไปหาคนอื่นได้ครับ
```
```
{name}, a meetup request reached you about {hours} hours ago and has no answer yet. The customer is waiting.
Open {url}/portal and tap Accept or Decline; no reason needed.
Either answer lets them know and move on.
```

`{hours}` is the payload's `hours` — when we asked, not whether she saw it (notify.ts). Never "you have not looked", never "please hurry".

## 5 · Pro

**5a · the slip arrives** (`pro.requested`):

```
ได้รับสลิปแล้วครับ {name} ขอบคุณครับ
ระบบอ่านสลิปให้ก่อน (ยอด เวลาโอน ผู้รับ) แล้วผมดูเองอีกที ปกติเปิดให้วันเดียวกัน อย่างช้าหนึ่งวันทำการ
ถ้ามีอะไรไม่ตรง ผมจะบอกเหตุผลตรง ๆ แล้วส่งสลิปใหม่ได้ ไม่ต้องโอนซ้ำจนกว่าผมจะบอกครับ
```
```
Got your slip, {name}, thank you.
The system pre-reads it (amount, time, receiver), then I check it myself. Usually the same day, at most one working day.
If something is off I will say exactly what, and you can send a new slip. Do not transfer again unless I ask.
```

**5b · after approval** — typed by hand; she gets no push (line-channel §2):

```
เปิดโปรให้แล้วครับ {name} ใช้ได้ถึง {proUntil} ไม่ต่ออัตโนมัติ ครบแล้วโปรหยุด การ์ดยังอยู่
ที่เปลี่ยน: ชุดรูปทุกแบบ แบบกลางคืน และสามคลิป เปิดแล้วที่ {url}/c/{handle}/kit · การ์ดของคุณอยู่ในแถว "โปร · ตำแหน่งที่ซื้อ" ที่ {url}/browse · เปลี่ยนชื่อลิงก์ได้หนึ่งครั้งในหน้าแก้ไข
สลิปของคุณกับหน้า {url}/c/{handle}/pro คือใบเสร็จ ขอบคุณที่สนับสนุนครับ
```
```
Pro is on, {name}. Good until {proUntil}; it does not renew itself. When it ends, Pro stops and the card stays.
What changed: every kit template, the night versions and three clips are open at {url}/c/{handle}/kit · your card sits in the "Pro · paid placement" row on {url}/browse · you can change your handle once from the edit page.
Your slip plus {url}/c/{handle}/pro is your receipt. Thank you.
```

**5c · declined** — `{reason}` is one of runbook §4's: ยอด ฿49 ไม่ใช่ ฿499 · วันที่บนสลิปก่อนสร้างการ์ด · ผู้รับไม่ใช่ {receiver name} · รูปอ่านไม่ออก ส่งใหม่ · สลิปเดิมส่งซ้ำ.

```
ยังเปิดโปรให้ไม่ได้ครับ {name} เหตุผล: {reason}
ส่งสลิปใหม่ได้ที่ {url}/c/{handle}/pro ถ้าโอนไปแล้วจริงและผมผิดเอง บอกผมได้เลย ผมโอนคืนให้
```
```
I cannot turn Pro on yet, {name}. Reason: {reason}
Send a new slip at {url}/c/{handle}/pro. If the transfer really went through and the mistake is mine, tell me and I refund it.
```

## 6 · She pauses, or forgets

**6a · paused** (`/me` row พักอยู่; the card shows only her photo and name):

```
เห็นว่าพักการ์ดไว้ครับ ไม่เป็นไร กลับมาเปิดเมื่อไหร่ก็ได้ที่ {url}/me ลิงก์เดิมยังใช้ได้ ถ้าอยากลบทั้งหมด บอกผมคำเดียว
```
```
I see the card is paused. That is fine; turn it back on any time from {url}/me and the same link still works. Want it gone entirely? One word and I delete it.
```

**6b · zero taps in 14 days** (only when `/admin/numbers` lists her):

```
{name} ครับ การ์ดของคุณยังอยู่ที่ {url}/c/{handle} ช่วงสองสัปดาห์นี้ยังไม่มีใครแตะ ถ้ายังใช้ ลองใส่ลิงก์ในไบโอ ถ้าเลิกแล้ว กดพักที่ {url}/me ได้ ผมจะไม่ทักเรื่องนี้อีกครับ
```
```
{name}, your card is still at {url}/c/{handle}, with no taps these two weeks. If you still use it, put the link in your bio; if you have stopped, pause it from {url}/me. I will not message about this again.
```

## 7 · The five likely questions

**"ลูกค้าจ่ายยังไง" / How do customers pay me?**
```
ลูกค้าจ่ายคุณเองตอนจบนัด เงินสดหรือพร้อมเพย์ของคุณ ตามที่คุณเขียนบนหน้า
ผมไม่อยู่ในเส้นทางเงิน ไม่มีมัดจำผ่านเว็บ ไม่หักอะไร ใครอ้างว่าต้องโอนให้เฟรนเดย์ก่อน คือคนหลอก บอกผมได้เลย
```
```
The customer pays you directly at the end, cash or your own PromptPay, however you wrote it on your page.
I am not in the money path: no deposit through the site, nothing taken. Anyone claiming you must transfer to Frenday first is a scammer; tell me.
```

**"ปลอดภัยไหม" / Is it safe?**
```
ผมไม่พูดว่าปลอดภัย เพราะผมไม่รู้จักลูกค้าของคุณ สิ่งที่มีจริง: กติกาบนหน้าคุณ (กลางวัน ที่สาธารณะ) ปฏิเสธได้ไม่ต้องบอกเหตุผล บล็อกในไลน์ได้ และแจ้งที่ {url}/report ไม่ต้องล็อกอิน มีคนอ่านภายในหนึ่งวันทำการ
ถ้ารู้สึกไม่ปลอดภัยตอนนี้ ออกจากตรงนั้นก่อน โทร 191
```
```
I will not say "safe", because I do not know your customers. What exists: your rules on your page (daytime, public places), declining without a reason, blocking on LINE, and {url}/report with no login, read by a person within one working day.
If you feel unsafe right now, leave first and call 191.
```

**"ไม่เปิดเผยตัวได้ไหม" / Can I stay anonymous?**
```
ใช้ชื่อเล่นได้ ไม่ต้องใส่นามสกุล ไม่ต้องยืนยันบัตร LINE จะใช้บัญชีแยกก็ได้
สิ่งเดียวที่ต้องเป็นของจริงคือรูปหน้าคุณ เพราะลูกค้าจ่ายเพื่อเจอคนในรูป ถ้าไม่สะดวกให้หน้าอยู่บนเว็บ เว็บนี้อาจไม่เหมาะกับคุณ และไม่เป็นไรครับ
```
```
A nickname is fine, no surname, no ID check, and a separate LINE account if you like.
The one real thing has to be your face, because customers pay to meet the person in the photo. If you would rather your face not be online, this site may not be for you, and that is all right.
```

**"เปลี่ยนราคาได้ไหม" / Can I change my price?**
```
ได้ทุกเมื่อที่ {url}/c/{handle}/edit ราคาบนหน้าคือสิ่งที่คุณพิมพ์เอง ผมไม่แตะ ไม่มีค่าธรรมเนียม มีผลทันที
ชุดรูปที่ {url}/c/{handle}/kit จะเรนเดอร์ราคาใหม่ให้ แต่รูปที่คุณโพสต์ไปแล้วต้องโพสต์ใหม่เองครับ
```
```
Any time at {url}/c/{handle}/edit. The price on the page is whatever you typed; I never touch it, there is no fee, and it takes effect at once.
The kit at {url}/c/{handle}/kit renders the new price, but images you already posted have to be posted again.
```

**"ทำไมโดเมนเป็น .xyz" / Why a .xyz domain?**
```
เพราะเป็นโดเมนชั่วคราวครับ frenday.xyz จดง่ายและราคาถูก ผมใช้ดูก่อนว่ามีคนต้องการสิ่งนี้จริงไหม ก่อนจะจ่ายค่าชื่อจริง
ถ้าย้าย ลิงก์เดิมจะเด้งไปที่ใหม่ให้เอง ระหว่างนี้ดูว่าหน้าขออะไรจากคุณบ้าง ไม่ขอรหัส ไม่ขอบัญชี ไม่ขอโอน
```
```
Because it is a temporary one. frenday.xyz was quick and cheap to register, and I am using it to find out whether anyone wants this before paying for the real name.
If it moves, the old links redirect. Meanwhile look at what the page asks of you: no password, no account number, no transfer.
```

## Operator daily loop — 10 minutes, morning and evening

Priority order: a printed promise first, money second, a waiting customer third, courtesy last.

**Morning (before 09:00 Bangkok, when the printed SLA clock starts)**

- [ ] Phone: last night's buzzes newest-first — `report.created`, `pro.requested`, `request.unanswered`, `card.published`. The handles are the to-do list.
- [ ] `/admin/report` — `not_me` → **Hide** first (the 24-hour promise), then ask for a DM from the linked account. `scam`/`conduct` → read, note any contact left, close.
- [ ] `/admin/pro` — each slip: pre-read flags, then your own eyes (฿499.00, time after the card's creation, receiver = your name, reference unseen). Approve → **5b**. Decline with a readable reason → **5c**. A slip left overnight is a refund request forming.
- [ ] `/admin/card` — a card that crosses the line → hidden → the one-line notice under §1.
- [ ] `request.unanswered` still open → **4** now.

**Evening (20:00–21:00, when she is online)**

- [ ] `/admin/numbers` — each card published today: open, read, send **1**. Day 3 → **2** (read her row first). Day 7 → **3** (gate: PromptPay id set). "Zero taps in 14 days" → **6b** once, then mark done. Paused today → **6a** once.
- [ ] Runbook §6's week query; the two numbers (`published_with_photo`, `pro_approved`) go into the tracker, never into a message.
- [ ] Open LINE chats: §7 or runbook §3. Anything uncovered: answer honestly, then add it here.

**First when everything arrives at once:** "not me" → slip → unanswered request → a seller's question → welcome → day-3/day-7. A welcome can wait an hour; a hide cannot.

**Never:** a number not read that sitting, the Pro line twice, a reply time not kept.
