Bitnovo Pay

ทางการ

เซิร์ฟเวอร์ MCP สำหรับการรวม Bitnovo Pay กับเอเจนต์ AI ให้ความสามารถในการชำระเงินด้วยสกุลเงินดิจิทัลผ่าน Bitnovo Pay API คุณสมบัติรวมถึงการสร้างการชำระเงิน การตรวจสอบสถานะ การสร้างรหัส QR และการจัดการเว็บฮุค พร้อมรองรับผู้ให้บริการทันเนลหลายราย (ngrok, zrok, manual)

คุณทำอะไรได้บ้างด้วย Bitnovo Pay MCP?

  • สร้างการชำระเงินคริปโตแบบออนเชน — ให้ผู้ช่วยของคุณสร้างที่อยู่คริปโตเคอเรนซีสำหรับเหรียญและจำนวนเงินในสกุลยูโรที่ระบุด้วย create_payment_onchain
  • สร้างลิงก์ชำระเงินที่แชร์ได้ — ให้ผู้ช่วยของคุณสร้าง URL การชำระเงินบนเว็บที่ลูกค้าสามารถเลือกคริปโตของตนเองได้ด้วย create_payment_link
  • ตรวจสอบสถานะการชำระเงิน — ขอสถานะปัจจุบันและรายละเอียดของการชำระเงินใดๆ โดยใช้ตัวระบุด้วย get_payment_status
  • แสดงรายการสกุลเงินที่รองรับ — ดึงข้อมูลคริปโตเคอเรนซีที่มีอยู่ โดยสามารถกรองตามจำนวนเงินขั้นต่ำในสกุลยูโรได้ด้วย list_currencies_catalog
  • สร้าง QR การชำระเงินแบบมีแบรนด์ — สร้าง QR โค้ดความละเอียดสูงสำหรับการชำระเงินที่มีอยู่ด้วย generate_payment_qr
  • ตรวจสอบเหตุการณ์เว็บฮุค — ค้นหาการแจ้งเตือนการชำระเงินแบบเรียลไทม์ที่ได้รับจาก Bitnovo ด้วย get_webhook_events

เอกสาร

MCP Bitnovo Pay

License: MIT Node.js MCP

เซิร์ฟเวอร์ MCP สำหรับการผสานรวม Bitnovo Pay กับเอเจนต์ AI

เซิร์ฟเวอร์ Model Context Protocol (MCP) ที่มอบความสามารถในการชำระเงินด้วยคริปโทเคอร์เรนซีให้แก่เอเจนต์ AI ผ่านการผสานรวม Bitnovo Pay API เซิร์ฟเวอร์นี้ช่วยให้โมเดล AI สามารถสร้างการชำระเงิน ตรวจสอบสถานะการชำระเงิน จัดการคิวอาร์โค้ด และเข้าถึงแคตตาล็อกคริปโทเคอร์เรนซีได้

🚀 คุณสมบัติ

  • 8 เครื่องมือ MCP สำหรับการจัดการการชำระเงินที่ครอบคลุม:

    • create_payment_onchain - สร้างที่อยู่คริปโทเคอร์เรนซีสำหรับการชำระเงินโดยตรง
    • create_payment_link - สร้าง URL การชำระเงินบนเว็บพร้อมการจัดการการเปลี่ยนเส้นทาง
    • get_payment_status - สอบถามสถานะการชำระเงินพร้อมข้อมูลโดยละเอียด
    • list_currencies_catalog - รับคริปโทเคอร์เรนซีที่รองรับพร้อมการกรอง
    • generate_payment_qr - สร้างคิวอาร์โค้ดแบบกำหนดเองจากการชำระเงินที่มีอยู่
    • get_webhook_events - สอบถามเหตุการณ์ webhook ที่ได้รับแบบเรียลไทม์
    • get_webhook_url - รับ URL webhook สาธารณะพร้อมคำแนะนำการกำหนดค่า
    • get_tunnel_status - วินิจฉัยสถานะการเชื่อมต่อทันเนล
  • ระบบ Webhook อัตโนมัติ พร้อมผู้ให้บริการทันเนล 3 ราย:

    • 🔗 ngrok: URL ถาวรฟรี (1 โดเมนคงที่ต่อบัญชี)
    • 🌐 zrok: โอเพนซอร์สฟรี 100% พร้อม URL ถาวร
    • 🏢 manual: สำหรับเซิร์ฟเวอร์ที่มี IP สาธารณะ (N8N, Opal, VPS)
  • รองรับ LLM หลายตัว - เข้ากันได้กับ:

    • 🤖 OpenAI ChatGPT (GPT-5, GPT-4o, Responses API, Agents SDK)
    • 🧠 Google Gemini (Gemini 2.5 Flash/Pro ก.ย. 2025, CLI, FastMCP)
    • 🔮 Claude (Claude Desktop, Claude Code)
  • คิวอาร์โค้ดคุณภาพสูง (v1.1.0+):

    • 📱 ความละเอียดเริ่มต้น 512px (เพิ่มจาก 300px) สำหรับจอแสดงผลสมัยใหม่
    • 🖨️ รองรับสูงสุด 2000px สำหรับการพิมพ์ระดับมืออาชีพ
    • ✨ ขอบคมชัดด้วยอัลกอริทึมการประมาณค่าที่ปรับให้เหมาะสม
    • 🎨 แบรนด์ Bitnovo Pay แบบกำหนดเองพร้อมการปรับขนาดโลโก้ที่ราบรื่น
  • ความเป็นส่วนตัวโดยค่าเริ่มต้น - ข้อมูลที่ละเอียดอ่อนถูกปิดบังในบันทึก การเปิดเผยข้อมูลน้อยที่สุด

  • ปลอดภัย - บังคับใช้ HTTPS, การตรวจสอบลายเซ็น HMAC, การจัดการซีเคร็ตที่ปลอดภัย

  • เชื่อถือได้ - ตรรกะการลองใหม่ในตัว, การจัดการการหมดเวลา, การทำงานแบบไร้สถานะ

📋 ข้อกำหนดเบื้องต้น

  • Node.js 18+
  • บัญชี Bitnovo Pay พร้อม Device ID และ Device Secret (ไม่บังคับ)
  • การกำหนดค่าสภาพแวดล้อม (ดูคำแนะนำการตั้งค่าด้านล่าง)

⚡ เริ่มต้นอย่างรวดเร็ว

1. รับข้อมูลประจำตัว Bitnovo ของคุณ

  1. ลงทะเบียนที่ Bitnovo Pay
  2. รับ Device ID ของคุณจากแดชบอร์ด Bitnovo
  3. (ไม่บังคับ) สร้าง Device Secret สำหรับการตรวจสอบลายเซ็น webhook

2. กำหนดค่าไคลเอนต์ MCP ของคุณ

เพิ่มการกำหนดค่านี้ลงในไฟล์กำหนดค่าไคลเอนต์ MCP ของคุณ:

สำหรับ Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "bitnovo-pay": {
      "command": "npx",
      "args": ["-y", "@bitnovopay/mcp-bitnovo-pay"],
      "env": {
        "BITNOVO_DEVICE_ID": "your_device_id_here",
        "BITNOVO_BASE_URL": "https://pos.bitnovo.com"
      }
    }
  }
}

สำหรับ OpenAI ChatGPT (ดู คู่มือการตั้งค่า OpenAI):

{
  "mcpServers": {
    "bitnovo-pay": {
      "command": "npx",
      "args": ["-y", "@bitnovopay/mcp-bitnovo-pay"],
      "env": {
        "BITNOVO_DEVICE_ID": "your_device_id_here",
        "BITNOVO_BASE_URL": "https://pos.bitnovo.com"
      }
    }
  }
}

3. รีสตาร์ทไคลเอนต์ MCP ของคุณ

รีสตาร์ท Claude Desktop, ChatGPT หรือไคลเอนต์ MCP ของคุณเพื่อโหลดเซิร์ฟเวอร์

4. ทดสอบการผสานรวม

ถามผู้ช่วย AI ของคุณ: "สร้างการชำระเงิน 10 ยูโร"


☁️ การปรับใช้บนคลาวด์ (ใหม่ใน v1.2.0)

MCP Bitnovo Pay รองรับการปรับใช้ระยะไกลบนแพลตฟอร์มคลาวด์ด้วยโหมดการขนส่ง HTTP ซึ่งช่วยให้แพลตฟอร์ม AI เช่น claude.ai สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MCP ของคุณจากระยะไกลได้

ปรับใช้กับ Railway (แนะนำ)

Deploy on Railway

การตั้งค่าด่วน:

  1. คลิก "Deploy to Railway" หรือสร้างโปรเจกต์ใหม่
  2. ตั้งค่าตัวแปรสภาพแวดล้อม:
    • BITNOVO_DEVICE_ID - Device ID Bitnovo ของคุณ
    • BITNOVO_BASE_URL - https://pos.bitnovo.com
  3. ปรับใช้ (Railway ตรวจจับ Dockerfile อัตโนมัติ)
  4. รับ URL สาธารณะของคุณ: https://your-app.up.railway.app

เชื่อมต่อกับ claude.ai:

  • เพิ่มเซิร์ฟเวอร์ใน Settings → Model Context Protocol
  • URL เซิร์ฟเวอร์: https://your-app.up.railway.app/mcp

📖 คู่มือฉบับเต็ม: ดู RAILWAY.md สำหรับคำแนะนำการปรับใช้โดยละเอียด การแก้ไขปัญหา และการกำหนดค่า

ปรับใช้กับ Docker

# Build the image
docker build -t mcp-bitnovo-pay .

# Run with environment variables
docker run -d \
  -p 3000:3000 \
  -e PORT=3000 \
  -e BITNOVO_DEVICE_ID=your_device_id \
  -e BITNOVO_BASE_URL=https://pos.bitnovo.com \
  mcp-bitnovo-pay

ปรับใช้กับแพลตฟอร์มอื่น

เซิร์ฟเวอร์ทำงานได้บนทุกแพลตฟอร์มที่รองรับ Node.js และ Docker:

  • Heroku: พุช Dockerfile พร้อมตัวแปรสภาพแวดล้อม
  • Fly.io: ปรับใช้ด้วยการกำหนดค่า fly.toml
  • Google Cloud Run: ปรับใช้คอนเทนเนอร์ Docker
  • AWS ECS/Fargate: ปรับใช้ด้วย task definition

ตัวแปรสภาพแวดล้อมที่จำเป็น:

  • PORT - พอร์ต HTTP (ตั้งค่าอัตโนมัติโดยแพลตฟอร์มส่วนใหญ่)
  • BITNOVO_DEVICE_ID - Device ID Bitnovo ของคุณ
  • BITNOVO_BASE_URL - URL Bitnovo API

การตรวจจับโหมดการขนส่ง:

  • หากตั้งค่าตัวแปรสภาพแวดล้อม PORT → โหมด HTTP (การเชื่อมต่อระยะไกล)
  • หากไม่มี PORT → โหมด stdio (การเชื่อมต่อภายใน)

📦 ตัวเลือกการติดตั้ง

ตัวเลือก A: ใช้ npx (แนะนำ)

ไม่ต้องติดตั้ง! คำสั่ง npx จะดาวน์โหลดและเรียกใช้เวอร์ชันล่าสุดโดยอัตโนมัติ

npx -y @bitnovopay/mcp-bitnovo-pay

ข้อดี:

  • ✅ รับเวอร์ชันล่าสุดเสมอ
  • ✅ ไม่ต้องอัปเดตด้วยตนเอง
  • ✅ ไม่ต้องติดตั้งภายในเครื่อง
  • ✅ ทำงานได้ทันที

ตัวเลือก B: โคลนที่เก็บ (สำหรับการพัฒนา)

สำหรับผู้มีส่วนร่วมหรือผู้ใช้ขั้นสูงที่ต้องการแก้ไขโค้ด:

# Clone the repository
git clone https://github.com/bitnovo/mcp-bitnovo-pay.git
cd mcp-bitnovo-pay

# Or install from npm
npm install -g @bitnovopay/mcp-bitnovo-pay

# Install dependencies
npm install

# Build the project
npm run build

# Run locally
npm start

ข้อดี:

  • ✅ ควบคุมซอร์สโค้ดได้เต็มที่
  • ✅ สามารถแก้ไขและทดสอบการเปลี่ยนแปลงได้
  • ✅ เหมาะสำหรับการมีส่วนร่วมในโปรเจกต์

🔧 การกำหนดค่าตามแพลตฟอร์ม LLM

เลือกแพลตฟอร์ม AI ของคุณและทำตามคำแนะนำการตั้งค่าเฉพาะ:

Claude Desktop (Anthropic)

ตำแหน่งไฟล์กำหนดค่า: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) คู่มือ: คู่มือการตั้งค่า Claude

การกำหนดค่าพื้นฐาน:

{
  "mcpServers": {
    "bitnovo-pay": {
      "command": "npx",
      "args": ["-y", "@bitnovopay/mcp-bitnovo-pay"],
      "env": {
        "BITNOVO_DEVICE_ID": "your_device_id_here",
        "BITNOVO_BASE_URL": "https://pos.bitnovo.com"
      }
    }
  }
}

พร้อม Webhooks (สำหรับการแจ้งเตือนการชำระเงินแบบเรียลไทม์):

{
  "mcpServers": {
    "bitnovo-pay": {
      "command": "npx",
      "args": ["-y", "@bitnovopay/mcp-bitnovo-pay"],
      "env": {
        "BITNOVO_DEVICE_ID": "your_device_id_here",
        "BITNOVO_BASE_URL": "https://pos.bitnovo.com",
        "BITNOVO_DEVICE_SECRET": "your_device_secret_hex",
        "WEBHOOK_ENABLED": "true",
        "TUNNEL_ENABLED": "true",
        "TUNNEL_PROVIDER": "ngrok",
        "NGROK_AUTHTOKEN": "your_ngrok_token",
        "NGROK_DOMAIN": "your-domain.ngrok-free.app"
      }
    }
  }
}

OpenAI ChatGPT

คู่มือ: คู่มือการตั้งค่า OpenAI รองรับ: GPT-5, GPT-4o, Responses API, Agents SDK

การกำหนดค่าพื้นฐาน:

{
  "mcpServers": {
    "bitnovo-pay": {
      "command": "npx",
      "args": ["-y", "@bitnovopay/mcp-bitnovo-pay"],
      "env": {
        "BITNOVO_DEVICE_ID": "your_device_id_here",
        "BITNOVO_BASE_URL": "https://pos.bitnovo.com"
      }
    }
  }
}

Google Gemini

คู่มือ: คู่มือการตั้งค่า Gemini รองรับ: Gemini 2.5 Flash/Pro (ก.ย. 2025), CLI, FastMCP

การกำหนดค่าพื้นฐาน:

{
  "mcpServers": {
    "bitnovo-pay": {
      "command": "npx",
      "args": ["-y", "@bitnovopay/mcp-bitnovo-pay"],
      "env": {
        "BITNOVO_DEVICE_ID": "your_device_id_here",
        "BITNOVO_BASE_URL": "https://pos.bitnovo.com"
      }
    }
  }
}

ตัวแปรสภาพแวดล้อม

ตัวแปรจำเป็นคำอธิบายตัวอย่าง
BITNOVO_DEVICE_ID✅ ใช่ตัวระบุอุปกรณ์ Bitnovo Pay ของคุณ12345678-abcd-1234-abcd-1234567890ab
BITNOVO_BASE_URL✅ ใช่ปลายทาง Bitnovo APIhttps://pos.bitnovo.com (การผลิต)
https://payments.pre-bnvo.com (การพัฒนา)
BITNOVO_DEVICE_SECRET⚠️ ไม่บังคับซีเคร็ต HMAC สำหรับการตรวจสอบ webhookyour_hex_secret
WEBHOOK_ENABLED⚠️ ไม่บังคับเปิดใช้งานเซิร์ฟเวอร์ webhooktrue หรือ false
TUNNEL_ENABLED⚠️ ไม่บังคับเริ่มทันเนลอัตโนมัติสำหรับ webhookstrue หรือ false
TUNNEL_PROVIDER⚠️ ไม่บังคับผู้ให้บริการทันเนลngrok, zrok หรือ manual

หมายเหตุด้านความปลอดภัย: ห้ามคอมมิตข้อมูลประจำตัวไปยังการควบคุมเวอร์ชัน ใช้ตัวแปรสภาพแวดล้อมหรือการจัดการซีเคร็ตที่ปลอดภัย

🛠️ ข้อมูลอ้างอิงเครื่องมือ MCP

การสร้างการชำระเงิน

create_payment_onchain

สร้างการชำระเงินด้วยคริปโทเคอร์เรนซีพร้อมที่อยู่เฉพาะสำหรับธุรกรรมโดยตรง

ใช้เมื่อ: ผู้ใช้ระบุคริปโทเคอร์เรนซี (Bitcoin, ETH, USDC ฯลฯ)

{
  "amount_eur": 50.0,
  "input_currency": "BTC",
  "notes": "Coffee payment"
}

create_payment_link

สร้าง URL การชำระเงินบนเว็บที่ลูกค้าสามารถเลือกคริปโทเคอร์เรนซีของตนได้

ใช้เมื่อ: คำขอชำระเงินทั่วไปโดยไม่มีการระบุคริปโท (ตัวเลือกเริ่มต้น)

{
  "amount_eur": 50.0,
  "url_ok": "https://mystore.com/success",
  "url_ko": "https://mystore.com/cancel",
  "notes": "Order #1234"
}

การจัดการการชำระเงิน

get_payment_status

ดึงสถานะการชำระเงินปัจจุบันพร้อมข้อมูลโดยละเอียด

{
  "identifier": "payment_id_here"
}

รหัสสถานะ:

  • NR (ไม่พร้อม): สร้างก่อนการชำระเงิน ยังไม่ได้กำหนดคริปโท
  • PE (รอดำเนินการ): รอการชำระเงินจากลูกค้า
  • AC (รอการเสร็จสมบูรณ์): ตรวจพบคริปโทใน mempool
  • CO (เสร็จสมบูรณ์): ยืนยันการชำระเงินบนบล็อกเชนแล้ว
  • EX (หมดอายุ): เกินขีดจำกัดเวลาการชำระเงิน
  • CA (ยกเลิก): ยกเลิกการชำระเงิน
  • FA (ล้มเหลว): ธุรกรรมล้มเหลวในการยืนยัน

list_currencies_catalog

รับคริปโทเคอร์เรนซีที่พร้อมใช้งานพร้อมการกรองตามจำนวนเงิน (ไม่บังคับ)

{
  "filter_by_amount": 25.0
}

generate_payment_qr

สร้างคิวอาร์โค้ดแบบกำหนดเองสำหรับการชำระเงินที่มีอยู่ด้วยผลลัพธ์คุณภาพสูง

{
  "identifier": "payment_id_here",
  "qr_type": "both",
  "size": 512,
  "style": "branded"
}

ประเภท QR:

  • address: เฉพาะที่อยู่คริปโท (ลูกค้าป้อนจำนวนเงินเอง)
  • payment_uri: ที่อยู่ + รวมจำนวนเงิน (แนะนำ)
  • both: สร้างทั้งสองประเภท (แนะนำ)
  • gateway_url: QR ของ URL เกตเวย์การชำระเงิน

ตัวเลือกขนาด QR (v1.1.0+):

  • ค่าเริ่มต้น: 512px (ปรับให้เหมาะสมสำหรับจอแสดงผลสมัยใหม่)
  • ช่วง: 100px - 2000px
  • ขนาดที่แนะนำ:
    • 512px: จอแสดงผลมือถือและเว็บ
    • 800-1200px: การพิมพ์มาตรฐาน
    • 1600-2000px: การพิมพ์คุณภาพสูง (โปสเตอร์, ขาตั้ง)

การปรับปรุงคุณภาพ (v1.1.0):

  • ✨ ขอบคมชัดด้วยการประมาณค่าเคอร์เนล nearest สำหรับรูปแบบ QR
  • 🎯 การปรับขนาดโลโก้คุณภาพสูงด้วยเคอร์เนล lanczos3
  • 📦 ระดับการบีบอัด PNG 6 พร้อมการกรองแบบปรับตัว
  • 🖼️ ขนาดเริ่มต้นเพิ่มจาก 300px เป็น 512px เพื่อความคมชัดที่ดีขึ้น

เครื่องมือ Webhook

get_webhook_events

สอบถามเหตุการณ์ webhook ที่ได้รับแบบเรียลไทม์จาก Bitnovo Pay API

พร้อมใช้งานเมื่อ: WEBHOOK_ENABLED=true

{
  "identifier": "payment_id_here",
  "limit": 50,
  "validated_only": true
}

get_webhook_url

รับ URL webhook สาธารณะพร้อมคำแนะนำการกำหนดค่าสำหรับแผง Bitnovo

พร้อมใช้งานเมื่อ: WEBHOOK_ENABLED=true

{
  "validate": true
}

get_tunnel_status

วินิจฉัยสถานะการเชื่อมต่อทันเนล (ngrok, zrok หรือ manual)

พร้อมใช้งานเมื่อ: WEBHOOK_ENABLED=true

{}

📚 เอกสารประกอบ

🏗️ การพัฒนา

สคริปต์ที่พร้อมใช้งาน

npm run build        # Compile TypeScript to JavaScript
npm run dev          # Run development server with hot reload
npm start            # Start production server
npm test             # Run test suite
npm run test:watch   # Run tests in watch mode
npm run lint         # Run ESLint
npm run format       # Format code with Prettier

สถาปัตยกรรม

┌─────────────────┐
│   MCP Tools     │ ← 8 tools: 5 payment + 3 webhook
│ (src/tools/)    │
├─────────────────┤
│   Services      │ ← Business logic: PaymentService, CurrencyService
│ (src/services/) │
├─────────────────┤
│   API Client    │ ← Bitnovo API integration with retry logic
│ (src/api/)      │
├─────────────────┤
│ Webhook Server  │ ← HTTP Express + Event Store + Tunnel Manager
│ (src/webhook-*) │
├─────────────────┤
│   Utilities     │ ← Logging, validation, error handling, crypto
│ (src/utils/)    │
└─────────────────┘

สถาปัตยกรรมเซิร์ฟเวอร์คู่

เซิร์ฟเวอร์ MCP สามารถรันสองเซิร์ฟเวอร์พร้อมกันได้:

┌─────────────────────────────────────────────────────────┐
│             MCP Bitnovo Pay Server                      │
│                                                         │
│  ┌──────────────┐  ┌──────────────────┐ ┌────────────┐│
│  │ MCP Server   │  │ Webhook Server   │ │  Tunnel    ││
│  │ (stdio)      │  │ (HTTP :3000)     │ │  Manager   ││
│  └──────┬───────┘  └────────┬─────────┘ └──────┬─────┘│
│         │                   │                   │      │
│         │    Event Store    │     Public URL    │      │
│         │   (in-memory)     │   (ngrok/zrok)    │      │
│         └──────────┬────────┴──────────┬────────┘      │
└────────────────────┼───────────────────┼───────────────┘
                     │                   │
            ┌────────┴────────┐  ┌───────┴────────┐
            │                 │  │                │
       Claude Desktop   Bitnovo API    Tunnel Provider
       (MCP Tools)      (Webhooks)    (ngrok/zrok/manual)

🔒 ความปลอดภัย

  • HTTPS เท่านั้น - การเรียก API ทั้งหมดใช้ HTTPS
  • การตรวจสอบ HMAC - การตรวจสอบลายเซ็น Webhook ด้วย SHA-256
  • การป้องกันการโจมตีซ้ำ - การแคช nonce ด้วย TTL 5 นาที
  • ความเป็นส่วนตัวของข้อมูล - ข้อมูลที่ละเอียดอ่อนถูกปิดบังในบันทึก
  • ไม่มีข้อมูลอัตรา - ไม่เปิดเผยอัตราแลกเปลี่ยนเพื่อป้องกันความไม่ถูกต้อง
  • การออกแบบไร้สถานะ - ไม่มีการคงอยู่ภายในเครื่อง สอบถาม API แบบเรียลไทม์
  • การเชื่อมต่อใหม่อัตโนมัติ - Exponential backoff สูงสุด 10 ครั้งสำหรับทันเนล
  • การตรวจสอบสุขภาพ - การตรวจสอบการเชื่อมต่อทุก 60 วินาที

📄 ใบอนุญาต

โปรเจกต์นี้ได้รับอนุญาตภายใต้ MIT License - ดูไฟล์ LICENSE สำหรับรายละเอียด

🤝 การมีส่วนร่วม

  1. Fork ที่เก็บ
  2. สร้างสาขาคุณสมบัติของคุณ (git checkout -b feature/amazing-feature)
  3. คอมมิตการเปลี่ยนแปลงของคุณ (git commit -m 'Add amazing feature')
  4. พุชไปยังสาขา (git push origin feature/amazing-feature)
  5. เปิด Pull Request

📞 การสนับสนุน

🌟 ที่เกี่ยวข้อง