แชต AIโมเดลราคาเอกสารคู่มือ

ทำ LINE bot ตอบแชตลูกค้าด้วย AI (Python + OpenAI SDK)

สร้าง channel แบบ Messaging API ใน LINE Developers เก็บ channel secret กับ channel access token แล้วเขียนเซิร์ฟเวอร์ Python เล็ก ๆ รับ webhook จาก LINE ส่งข้อความลูกค้าไปที่ https://api.macloudai.com/v1 ด้วย OpenAI SDK แล้วตอบกลับ ค่า AI หักตาม token จากยอดเงิน MaCloud AI ส่วนค่าบริการของ LINE ให้ดูนโยบายของ LINE

อัปเดตเมื่อ 2026-11-01 · MaCloud AI

bot นี้ทำอะไรได้บ้าง?

สมมติคุณขายเสื้อผ้าออนไลน์ในกรุงเทพฯ ลูกค้าทักทาง LINE ถามไซซ์ ค่าส่ง เวลาส่ง และวิธีสั่งซื้อซ้ำ ๆ ทั้งวัน bot นี้จะอ่านข้อความ ตอบจากข้อมูลร้านที่คุณเขียนไว้ และบอกให้ลูกค้ารอแอดมินถ้าเป็นเรื่องที่ตอบเองไม่ได้ เช่นการคืนเงิน

โครงสร้างมีสามส่วน: LINE ส่งข้อความมาที่ webhook ของคุณ → เซิร์ฟเวอร์ Python เรียกโมเดล AI ผ่าน https://api.macloudai.com/v1 → ส่งคำตอบกลับไปทาง LINE โค้ดฝั่งเราอยู่ด้านล่างครบทั้งไฟล์

ขั้นตอนทั้งหมด

  1. ใน LINE Developers Console สร้าง provider และ channel แบบ Messaging API ให้ร้านของคุณ
  2. ในหน้าตั้งค่า channel คัดลอก channel secret และออก channel access token เก็บไว้
  3. ใน MaCloud AI ไปที่ API Key สร้างคีย์ชื่อ line-bot แล้วคัดลอก
  4. นำโค้ด Python ด้านล่างขึ้นเซิร์ฟเวอร์ที่มี HTTPS แล้วตั้งค่าตัวแปร 3 ตัว
  5. กลับไปที่ LINE Developers ใส่ webhook URL เป็น https://โดเมนของคุณ/callback แล้วเปิดใช้ webhook
  6. แอดบัญชี LINE ของร้านเป็นเพื่อนด้วยมือถือ ส่งข้อความทดสอบ แล้วดูค่าใช้จ่ายในหน้าการใช้งาน

ฝั่ง LINE ชื่อเมนูและหน้าตาอาจเปลี่ยนตามเวอร์ชัน ให้ยึดเอกสารทางการของ LINE เป็นหลัก สิ่งที่ต้องได้มามีแค่ channel secret, channel access token และช่องสำหรับใส่ webhook URL ถ้าบัญชีตั้งข้อความตอบกลับอัตโนมัติไว้ ให้ปิดก่อน ไม่อย่างนั้นลูกค้าจะได้สองคำตอบ

โค้ดเซิร์ฟเวอร์ Python

ติดตั้งด้วย pip install flask openai requests แล้วบันทึกเป็น app.py:

import base64, hashlib, hmac, os

import requests
from flask import Flask, abort, request
from openai import OpenAI

LINE_SECRET = os.environ["LINE_CHANNEL_SECRET"]
LINE_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"]
ai = OpenAI(base_url="https://api.macloudai.com/v1", api_key=os.environ["MACLOUD_API_KEY"])

SHOP_INFO = """คุณคือแอดมินร้านเสื้อผ้าออนไลน์ในกรุงเทพฯ ตอบสุภาพ สั้น เป็นภาษาไทย
- ส่งทั่วประเทศ ในกรุงเทพฯ ได้รับใน 1-2 วัน ต่างจังหวัด 2-4 วัน
- เสื้อมีไซซ์ S M L XL ดูตารางไซซ์ในโพสต์ของร้าน
- เปลี่ยนไซซ์ได้ภายใน 7 วัน
ถ้าลูกค้าถามเรื่องคืนเงิน สถานะพัสดุ หรือเรื่องที่ไม่มีในข้อมูลนี้ ให้บอกว่าแอดมินจะติดต่อกลับ"""

app = Flask(__name__)


def ask_ai(text):
    r = ai.chat.completions.create(
        model="gem-3.8-flash",
        max_tokens=300,
        messages=[
            {"role": "system", "content": SHOP_INFO},
            {"role": "user", "content": text},
        ],
    )
    return r.choices[0].message.content


def reply(reply_token, text):
    requests.post(
        "https://api.line.me/v2/bot/message/reply",
        headers={"Authorization": f"Bearer {LINE_TOKEN}"},
        json={"replyToken": reply_token, "messages": [{"type": "text", "text": text[:4900]}]},
        timeout=10,
    )


@app.post("/callback")
def callback():
    body = request.get_data()
    sig = base64.b64encode(hmac.new(LINE_SECRET.encode(), body, hashlib.sha256).digest()).decode()
    if not hmac.compare_digest(sig, request.headers.get("X-Line-Signature", "")):
        abort(400)
    for ev in request.get_json().get("events", []):
        if ev.get("type") == "message" and ev["message"].get("type") == "text":
            try:
                answer = ask_ai(ev["message"]["text"])
            except Exception:
                answer = "ขออภัย ระบบตอบอัตโนมัติขัดข้อง แอดมินจะตอบกลับเร็ว ๆ นี้"
            reply(ev["replyToken"], answer)
    return "OK"


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 8000)))

โค้ดนี้ตรวจลายเซ็นของ LINE ด้วย channel secret ก่อนทุกครั้ง คำขอที่ไม่ได้มาจาก LINE จะถูกปฏิเสธ ถ้าเรียก AI ไม่สำเร็จ (เช่นยอดเงินหมดหรือโมเดลขัดข้อง) ลูกค้าจะได้ข้อความขออภัยแทนการเงียบหาย

รันและตั้ง webhook

export LINE_CHANNEL_SECRET=...
export LINE_CHANNEL_ACCESS_TOKEN=...
export MACLOUD_API_KEY=sk-...
python app.py

LINE ต้องการ webhook ที่เป็น HTTPS เซิร์ฟเวอร์ VPS ทั่วไปหรือบริการโฮสต์ที่ให้ HTTPS ก็ใช้ได้ ตอนทดสอบในเครื่องตัวเองใช้เครื่องมือ tunnel ที่ให้ที่อยู่ HTTPS ชั่วคราวก็ได้ เมื่อได้ที่อยู่แล้ว ใส่ในช่อง webhook URL ของ channel ต่อท้ายด้วย /callback แล้วกดตรวจสอบในหน้าเดียวกัน

ค่าใช้จ่ายต่อแชตประมาณเท่าไร?

ค่า AI คิดตาม token: ข้อมูลร้านใน SHOP_INFO กับข้อความลูกค้าเป็น token อินพุต คำตอบเป็น token เอาต์พุต ข้อมูลร้านถูกส่งทุกครั้ง จึงควรเขียนให้กระชับ ราคาต่อ 1 ล้าน token เป็นบาทของแต่ละโมเดล:

ราคาจริงตอนนี้

ประมาณจากราคาในหน้าโมเดล: แชทละ 2,000 token input และ 500 token output ยอดหักจริงดูได้ในคอนโซล

โมเดลต่อแชท1,000 แชท
GEM 3.8 Flash฿0.0083฿8.25
TT-6 Luna฿0.02฿19.8
TT-6.1 Terra฿0.01฿13.52
HK-5.5฿0.0065฿6.49
GEM 4 Argon฿0.16฿158
TT-6.1 Sol฿0.03฿27.03

ตัวเลขจริงต่อแชตดูได้ในหน้าการใช้งาน หลังทดสอบไม่กี่ข้อความ วิธีคำนวณอยู่ในคู่มือค่า token ส่วนค่าบริการและโควตาข้อความของ LINE เป็นเรื่องแยกต่างหาก ให้ดูนโยบายและแพ็กเกจของ LINE Official Account

ทำให้ bot ฉลาดขึ้นและปลอดภัยขึ้น

  • อยากให้จำบทสนทนา ให้เก็บข้อความล่าสุด 4-6 ข้อความต่อ userId แล้วส่งไปด้วย แต่ยิ่งยาวยิ่งเปลือง token
  • ร้านกาแฟในเชียงใหม่หรือร้านอาหารก็ใช้โค้ดเดียวกันได้ แค่เปลี่ยน SHOP_INFO เป็นเมนู เวลาเปิด และวิธีจองโต๊ะ
  • อย่าให้ bot ยืนยันการชำระเงินหรือสัญญาเรื่องเงินเอง ให้ส่งต่อแอดมินเสมอ
  • เก็บคีย์ทั้งสามไว้ในตัวแปรระบบของเซิร์ฟเวอร์ ห้ามใส่ใน repo

คำถามที่พบบ่อย

Q1ต้องเขียนโปรแกรมเป็นไหม?
ต้องรันโค้ด Python ได้ในระดับพื้นฐาน โค้ดในคู่มือนี้ครบทั้งไฟล์ แก้แค่ข้อมูลร้านและตั้งค่าตัวแปร 3 ตัว
Q2ใช้ Claude หรือ GPT ตอบได้ไหม?
ได้ทั้งสองแบบ เปลี่ยนค่า model ในฟังก์ชัน ask_ai เป็นชื่อโมเดลที่ต้องการจากหน้าโมเดล คีย์เดิมใช้ได้
Q3bot ตอบภาษาไทยได้ดีไหม?
โมเดลหลักในรายการตอบภาษาไทยได้ ลองส่งคำถามที่ลูกค้าถามจริงสักสิบข้อแล้วเทียบคำตอบของแต่ละโมเดลก่อนเลือก
Q4ค่า LINE รวมอยู่ในยอดเงิน MaCloud AI ไหม?
ไม่รวม MaCloud AI คิดเฉพาะค่า AI ตาม token ค่าบริการของ LINE ให้ดูนโยบายของ LINE
Q5ข้อความลูกค้าถูกเก็บไว้ที่ MaCloud AI ไหม?
ไม่เก็บเนื้อหา บันทึกเพียงจำนวน token ชื่อโมเดล และเวลา เพื่อใช้คิดเงิน

คู่มืออื่น