← บทความทั้งหมด
บทช่วยสอน

เชื่อมบัญชีผู้ใช้ Telegram เข้ากับ Webhook: ตั้งค่าด้วยรหัสและ QR

หากต้องการเชื่อมบัญชีผู้ใช้ Telegram เดิมเข้ากับ Webhook ให้สร้าง api_id และ api_hash สำหรับแอปของคุณก่อน ลงทะเบียน Webhook ก่อนเริ่มการยืนยันตัวตน จากนั้นสร้าง messaging account ของ Telegram ใน UnifyPort แล้วเลือกขั้นตอนแบบรหัสหรือ QR การเข้าสู่ระบบด้วยรหัสต้องใช้หมายเลขโทรศัพท์และอาจมีขั้นตอนรหัสผ่านแบบสองชั้น ส่วน QR ยังต้องใช้ข้อมูล API แต่เจ้าของบัญชีเป็นผู้อนุมัติจากแอป Telegram ที่เข้าสู่ระบบอยู่แล้ว

สรุปสำคัญ

  • การเชื่อมบัญชีผู้ใช้ใช้ api_id และ api_hash ไม่ใช่ bot token จาก BotFather
  • สร้าง Webhook ก่อน เพื่อให้อีเวนต์สถานะการยืนยันและข้อความใหม่มีปลายทางรับข้อมูล
  • เลือก auth_mode: "code" เมื่อผู้ดูแลรับและกรอกรหัสได้ หรือ auth_mode: "qrcode" เมื่อสะดวกอนุมัติผ่านแอปที่เข้าสู่ระบบอยู่
  • api_hash, รหัสเข้าสู่ระบบ, รหัสผ่านสองชั้น, ข้อมูล QR, API key และ signing_secret เป็นข้อมูลลับ
  • หลังยืนยันสำเร็จ ให้ประมวลผลเฉพาะ message.received ที่ตรวจลายเซ็นแล้วและมีทิศทางเป็น inbound

หากยังไม่แน่ใจว่าต้องใช้ข้อมูลแบบใด โปรดอ่าน API ID/API hash เทียบกับ bot token ของ Telegram ก่อน

ขั้นตอนตั้งค่า Webhook สำหรับบัญชีผู้ใช้ Telegram

ระบบนี้มีขอบเขตสี่ส่วน ได้แก่ ข้อมูลแอป Telegram, endpoint ที่ทีมคุณดูแล, messaging account ใน UnifyPort และขั้นตอนยืนยันที่เจ้าของบัญชีต้องทำ การแยกแต่ละส่วนช่วยให้ตรวจหาสาเหตุของปัญหาได้ง่ายขึ้น

1. สร้างข้อมูลแอป Telegram ของคุณเอง

คู่มือสร้างแอปอย่างเป็นทางการของ Telegram ระบุว่าการยืนยันผู้ใช้ต้องมี api_id และ api_hash ให้สร้างผ่าน API development tools ที่ my.telegram.org และเก็บ hash ไว้ในระบบจัดการ secret ไม่ควรใส่ใน repository หรือ log

รูปแบบนี้ต่างจาก Bot API โดย Telegram อธิบาย Bot API อย่างเป็นทางการ ว่าเป็น HTTP interface สำหรับตัวตนแบบ bot หากงานต้องการ bot โดยเฉพาะและคำสั่งของ bot ให้ใช้เส้นทางทางการนั้น แต่หากต้องเชื่อมบัญชีผู้ใช้เดิม หรือส่ง Telegram เข้าคิวรับข้อความเดียวกับช่องทางอื่น ให้ใช้ขั้นตอนอินเทอร์เฟซที่ไม่เป็นทางการในบทความนี้

หากโครงการใช้ application ID ตัวอย่างหรือค่าที่เผยแพร่ไว้แล้ว ควรตรวจสอบที่มาก่อน รายการกู้คืน API_ID_PUBLISHED_FLOOD อธิบายการเปลี่ยน credential โดยไม่เปิดเผยค่าใหม่

2. ลงทะเบียน Webhook ที่มีลายเซ็นก่อนเข้าสู่ระบบ

UnifyPort ไม่มี REST API สำหรับอ่านประวัติข้อความ และไม่รับประกันการส่ง payload ที่พลาดไปซ้ำ ดังนั้นควรสร้างตัวรับก่อน และจัดเก็บอีเวนต์ที่จำเป็นทันทีเมื่อมาถึง

curl -X POST https://api.unifyport.ai/v1/webhook-endpoints \
  -H "X-Api-Key: $UNIFYPORT_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"url\": \"$PUBLIC_WEBHOOK_URL\",
    \"status\": \"active\",
    \"subscribed_events\": [\"message.received\", \"account.auth.required\", \"account.auth.succeeded\", \"account.auth.failed\", \"account.status.updated\"],
    \"signing_secret\": \"$WEBHOOK_SIGNING_SECRET\"
  }"

ดูสัญญา request ที่ Create webhook endpoint เมื่อเปิดลายเซ็น ให้ตรวจ X-Device-Signature ด้วยค่า HMAC-SHA256 แบบเลขฐานสิบหกของ X-Device-Timestamp ตามด้วยจุดและ raw request body อ่านรายละเอียดเรื่อง raw body, timestamp, idempotency และ retry ได้ใน คู่มือ Webhook HMAC และการป้องกัน replay

3A. ยืนยันด้วยรหัส

สร้างบัญชีโดยส่ง provider_data.api_id, provider_data.api_hash และ provider_data.phone:

curl -X POST https://api.unifyport.ai/v1/accounts \
  -H "X-Api-Key: $UNIFYPORT_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"name\": \"Telegram Support\",
    \"provider\": \"telegram\",
    \"region\": \"global\",
    \"status\": \"active\",
    \"auth_mode\": \"code\",
    \"capabilities\": [\"send_message\", \"receive_message\"],
    \"provider_data\": {
      \"api_id\": $TELEGRAM_API_ID,
      \"api_hash\": \"$TELEGRAM_API_HASH\",
      \"phone\": \"$TELEGRAM_PHONE\"
    }
  }"

บันทึก id ของบัญชีจาก response แล้วเริ่มขั้นตอนและส่งรหัสที่ได้รับจาก Telegram:

curl -X POST "https://api.unifyport.ai/v1/accounts/$ACCOUNT_ID/auth/start" \
  -H "X-Api-Key: $UNIFYPORT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

curl -X POST "https://api.unifyport.ai/v1/accounts/$ACCOUNT_ID/auth/code" \
  -H "X-Api-Key: $UNIFYPORT_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"code\": \"$TELEGRAM_LOGIN_CODE\"}"

เอกสารยืนยันผู้ใช้อย่างเป็นทางการของ Telegram มีขั้นตอนรหัสผ่านแบบสองชั้นด้วย ส่งรหัสผ่านไปที่ /v1/accounts/{account_id}/auth/password เฉพาะเมื่อสถานะ UnifyPort เป็น awaiting_password และห้ามบันทึกรหัสผ่านลง log

3B. ยืนยันด้วย QR

สร้างบัญชีด้วย auth_mode: "qrcode" พร้อม provider_data.api_id และ provider_data.api_hash โดยโหมดนี้ไม่ต้องใช้ฟิลด์ phone จากนั้นเริ่มขั้นตอน:

curl -X POST "https://api.unifyport.ai/v1/accounts/$ACCOUNT_ID/auth/qr/start" \
  -H "X-Api-Key: $UNIFYPORT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

อ่านสถานะด้วย GET /v1/accounts/{account_id}/auth หรือตรวจด้วย POST /v1/accounts/{account_id}/auth/qr/check แสดง auth_payload.qr_code ให้เจ้าของบัญชีเท่านั้น ข้อกำหนด QR login อย่างเป็นทางการของ Telegram ระบุว่าต้องสแกนและยอมรับด้วยแอป Telegram ที่เข้าสู่ระบบแล้ว และต้องสร้าง token ใหม่เมื่อหมดอายุ หาก API ส่ง payload ใหม่ ให้หน้าแสดงผลอัปเดต QR ด้วย

ดูทุกสาขาของรหัส, QR, รหัสผ่านสองชั้น และ session import ได้ใน Telegram authorization API Reference

4. ยืนยันสถานะและรับข้อความ

เมื่อได้รับ account.auth.succeeded ให้ตรวจอีกครั้งด้วย GET /v1/accounts/{account_id} โดยทั่วไป runtime จะเริ่มอัตโนมัติหลังยืนยันสำเร็จ แต่แอปต้องอ่าน runtime_status จริง ไม่ควรถือว่าการเชื่อมต่อพร้อมแล้วทันที

ข้อความ Telegram จะมาถึงใน envelope มาตรฐาน:

{
  "id": "evt_b1a7c3e5f8",
  "type": "message.received",
  "provider": "telegram",
  "account_id": "acc_8c21d0",
  "occurred_at": "2026-06-08T12:37:00Z",
  "data": {
    "conversation": { "id": "5005", "type": "user" },
    "sender": { "id": "4004", "type": "user", "name": "Jordan Lee" },
    "message": {
      "id": "3003",
      "text": "Can you check my order?",
      "direction": "inbound",
      "sent_at": "2026-06-08T12:37:00Z"
    },
    "event": { "kind": "message_received" }
  }
}

ตรวจลายเซ็นก่อน จากนั้นเลือกเฉพาะ type เป็น message.received และ data.message.direction เป็น inbound ใช้ event ID เพื่อทำงานแบบ idempotent ตอบ 2xx สำหรับ delivery ที่ถูกต้อง และเก็บฟิลด์ที่ workflow ต้องใช้

ข้อจำกัดและการเลือกใช้

การเชื่อมบัญชีผู้ใช้ไม่แทนที่งาน bot ทุกแบบ หากต้องการตัวตน bot, คำสั่ง bot และ interface เฉพาะของ Telegram ให้เลือก Bot API อย่างเป็นทางการ หากต้องใช้บัญชีผู้ใช้เดิม หรือทีมสนับสนุนในไทยต้องรวม Telegram กับ LINE ไว้ในคิวรับข้อความที่มีลายเซ็นเดียวกัน โครงสร้าง UnifyPort จะเหมาะกว่า และเพิ่ม WhatsApp, TikTok, Zalo หรือ X ใน handler เดิมได้ภายหลัง

UnifyPort เป็นอินเทอร์เฟซที่ไม่เป็นทางการ พฤติกรรมและความพร้อมจากบริการต้นทางอาจต่างกันตามบัญชี ผู้ใช้ยังต้องปฏิบัติตาม Telegram API Terms of Service รวมถึงข้อกำหนดด้านความปลอดภัยและความเป็นส่วนตัวของตนเอง อย่าเปิดเผย credential, QR หรือข้อมูล session ให้บุคคลอื่นนอกจากเจ้าของบัญชีที่กำลังยืนยัน

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

ต้องใช้ Telegram bot token หรือไม่?

ไม่ต้อง บัญชีผู้ใช้ใช้ api_id และ api_hash ส่วน bot token เป็นของ Bot API อย่างเป็นทางการ

QR login ยังต้องใช้ API ID และ API hash หรือไม่?

ต้องใช้ ขั้นตอน QR ของ UnifyPort ยังต้องมี provider_data.api_id และ provider_data.api_hash ต่างกันที่วิธีอนุมัติการเข้าสู่ระบบ

หาก Telegram ขอรหัสผ่านสองชั้นต้องทำอย่างไร?

รอให้สถานะเป็น awaiting_password แล้วส่งไปที่ /v1/accounts/{account_id}/auth/password ห้ามเก็บใน log หรือเก็บข้อความชัดเจนหลังเสร็จสิ้น

ควรสร้าง Webhook ก่อนหรือหลังเชื่อมบัญชี?

ก่อน เพราะสถานะการยืนยันและข้อความส่งผ่านอีเวนต์ และ payload ข้อความที่พลาดไปไม่รับประกันว่าจะส่งซ้ำ

อีเวนต์ใดควรเริ่ม workflow ขาเข้า?

ใช้ message.received และตรวจว่า data.message.direction เท่ากับ inbound ต้องตรวจ HMAC ก่อนแยกข้อมูลหรือสั่งงาน

ขั้นตอนถัดไป

เปิด คู่มือ Telegram authorization แล้วเลือกแบบรหัสหรือ QR สร้างและป้องกัน Webhook ก่อน จากนั้นจึงสร้าง messaging account และยืนยันตัวตน

แหล่งข้อมูล

ตรวจสอบแหล่งข้อมูลทางการเมื่อ 2026-08-13: