# EzLife · ຄູ່ມື Bot API

https://im-api.ez7.life/lo/

ອັບເດດ: 2026-11-10

ຄູ່ມື BotMother, ຂໍ້ຄວາມ, ຄັດລອກລະຫັດ ແລະ ປຸ່ມຕອບກັບ. ຕົວຢ່າງໃຊ້ຄ່າຈຳລອງ.

## ພາບລວມ ແລະ ຄວາມສາມາດ

ວິທີການສາທາລະນະມີ `getMe`, `sendMessage`, `getUpdates`. ສົ່ງຂໍ້ຄວາມສ່ວນຕົວ/ກຸ່ມ ແລະ ຮັບເຫດການທີ່ອາດມີເນື້ອຫາບໍ່ແມ່ນຂໍ້ຄວາມ.

ໃຊ້ `copy_text` ສະແດງໄອຄອນຄັດລອກລະຫັດ ແລະ `reply_markup` ສະແດງປຸ່ມຂໍ້ຄວາມໃຕ້ຊ່ອງພິມໃນແຊັດສ່ວນຕົວ.

ໂດເມນນີ້ເກັບຄູ່ມື. API ຍັງຢູ່ im.ez7.life ໃຕ້ /bot-api/. ຄັດລອກ ID ຜູ້ຮັບທີ່ ຕັ້ງຄ່າ → ລາຍລະອຽດບັນຊີ → ID. ຕອບດ້ວຍ message.chat.id ທີ່ຮັບ; ໃນກຸ່ມມັນເປັນ ID ກຸ່ມ.

```text
https://im.ez7.life/bot-api/<BOT_TOKEN>/<METHOD>
```

## ເລີ່ມຕົ້ນໄວ

1. ຄົ້ນຫາ ແລະ ເພີ່ມ `@BotMother`, ເປີດຈັດການບັອດຢູ່ເທິງການສົນທະນາ.
2. ສ້າງບັອດ, ຄັດລອກ Token ແລະ ເກັບໃນຕົວແປຝັ່ງເຊີບເວີ `EZLIFE_BOT_TOKEN`.
3. ເອີ້ນ `getMe` ກວດຂໍ້ມູນ, ແລ້ວເອີ້ນ `sendMessage` ດ້ວຍ ID ຜູ້ຮັບ.
4. ດຶງ `getUpdates` ເປັນໄລຍະ; ບັນທຶກ offset ຕໍ່ໄປຫຼັງຈາກປະມວນຜົນສຳເລັດ.

```bash
python3 bot.py
```

## ຈັດການຜ່ານ BotMother

ຊື່ສະແດງ 1–64 ຕົວອັກສອນ. ຄຳນຳໜ້າບັນຊີໃນຟອມ 3–28 ຕົວ, ເລີ່ມດ້ວຍອັກສອນອັງກິດ, ໃຊ້ອັກສອນ, ຕົວເລກ ແລະ ຂີດລຸ່ມ; ຟອມເພີ່ມ `_bot`. ກວດວ່າຊື່ວ່າງກ່ອນສ້າງ.

ຄົ້ນຫາບັອດ, ເບິ່ງ ID, ສະຖານະ, ເວລາສ້າງ ແລະ `****` ກັບ 6 ຕົວທ້າຍ Token; ອອກໃໝ່ ຫຼື ຖອນ Token ໄດ້. ຜູ້ດູແລກຳນົດຈຳນວນບັອດ.

| ຄຳສັ່ງ | ໜ້າທີ່ |
| --- | --- |
| `/start` | ສະແດງວິທີຈັດການ |
| `/newbot` | ເລີ່ມສ້າງບັອດ |
| `/mybots` | ລາຍຊື່ບັອດຂອງທ່ານ |
| `/token @username` | ອອກ Token ໃໝ່ ຍົກເລີກອັນເກົ່າ |
| `/revoke @username` | ຖອນ Token ປັດຈຸບັນ |
| `/cancel` | ຍົກເລີກການສ້າງ |
| `/help` | ສະແດງຊ່ວຍເຫຼືອ |

## Token ແລະ ຄວາມປອດໄພ

Token ເຕັມສະແດງຕອນສ້າງ ຫຼື ອອກໃໝ່ເທົ່ານັ້ນ. ມັນເປັນລະຫັດຜ່ານບັອດ; ເກັບຝັ່ງເຊີບເວີ, ຫ້າມໃສ່ເວັບ, ແອັບ, ຄັງສາທາລະນະ ຫຼື ບັນທຶກ.

ອອກໃໝ່ເຮັດໃຫ້ Token ເກົ່າໝົດຜົນທັນທີ; ຖອນແລ້ວຈະເອີ້ນຈາກພາຍນອກບໍ່ໄດ້. ສ່ວນທ້າຍທີ່ປິດບັງກູ້ຄືນບໍ່ໄດ້; ຖ້າຫາຍໃຫ້ອອກໃໝ່ແລະແກ້ໂປຣແກຣມ.

Token ເກົ່າຈະເກັບສ່ວນທ້າຍເມື່ອເອີ້ນ Bot API ຖືກຕ້ອງຄັ້ງຕໍ່ໄປ. API Token ໃນລາຍລະອຽດບັນຊີໃຊ້ກັບ API ບັນຊີ; Bot API ນີ້ໃຊ້ Token ຈາກ BotMother.

## getMe · ຂໍ້ມູນບັອດ

`POST https://im.ez7.life/bot-api/<BOT_TOKEN>/getMe`

ບໍ່ຕ້ອງມີພາຣາມິເຕີທຸລະກິດ. ສົ່ງຄືນ ID ບັອດ, ຊື່ສະແດງ, ຊື່ບັນຊີ ແລະ ຄວາມສາມາດກຸ່ມ. ໃຊ້ກວດ Token.

```bash
curl --fail-with-body --request POST \
  "https://im.ez7.life/bot-api/${EZLIFE_BOT_TOKEN}/getMe" \
  --header 'Content-Type: application/json' --data '{}'
```

```json
{
  "ok": true,
  "result": {
    "id": "1000000000",
    "is_bot": true,
    "display_name": "Example Bot",
    "username": "example_bot",
    "can_join_groups": true,
    "can_read_all_group_messages": true
  }
}
```

## sendMessage · ສົ່ງຂໍ້ຄວາມ

`POST https://im.ez7.life/bot-api/<BOT_TOKEN>/sendMessage`

ໃຊ້ `POST application/json`. ສົ່ງ `chat_id` ເປັນສະຕຣິງສະເໝີ: ID ຜູ້ຮັບສຳລັບສ່ວນຕົວ, ID ກຸ່ມພ້ອມ `chat_type: "group"` ສຳລັບກຸ່ມ.

ຂໍ້ຄວາມ 1–5000 ຕົວ, ຕັດຊ່ອງວ່າງຫົວທ້າຍ. ເກັບ message_id. ບໍ່ມີຄີປ້ອງກັນສົ່ງຊ້ຳ; ຖ້າໝົດເວລາໃຫ້ກວດຜົນກ່ອນສົ່ງອີກ.

| ພາຣາມິເຕີ | ປະເພດ | ຈຳເປັນ | ຄຳອະທິບາຍ |
| --- | --- | --- | --- |
| `chat_id` | string | ແມ່ນ | ID ຜູ້ຮັບ ຫຼື ID ກຸ່ມ, ເປັນສະຕຣິງສະເໝີ. |
| `text` | string | ແມ່ນ | ຂໍ້ຄວາມ 1–5000 ຕົວ. |
| `chat_type` | string | ບໍ່ | ຄ່າເລີ່ມ private; ກຸ່ມໃຊ້ group, ຮັບ supergroup ໄດ້. |
| `copy_text` | string | ບໍ່ | ສະຕຣິງເລກ 4–12 ຫຼັກປາກົດຄົບໃນ text. |
| `reply_markup` | object / JSON string | ບໍ່ | ອອບເຈັກແປ້ນ ຫຼື ສະຕຣິງ JSON, ບໍ່ບັງຄັບ. |

```bash
curl --fail-with-body --request POST \
  "https://im.ez7.life/bot-api/${EZLIFE_BOT_TOKEN}/sendMessage" \
  --header 'Content-Type: application/json' --data-binary @- <<'JSON'
{
  "chat_id": "USER_ID",
  "text": "ດຳເນີນຄຳສັ່ງຊື້ແລ້ວ."
}
JSON
```

```json
{
  "chat_id": "GROUP_ID",
  "chat_type": "group",
  "text": "ດຳເນີນຄຳສັ່ງຊື້ແລ້ວ."
}
```

```json
{
  "ok": true,
  "result": {
    "message_id": "EXAMPLE_MESSAGE_ID",
    "date": 1794297600,
    "chat": {
      "id": "USER_ID",
      "type": "private"
    },
    "text": "ດຳເນີນຄຳສັ່ງຊື້ແລ້ວ."
  }
}
```

ສົ່ງສຳເລັດຄືນ ok: true ແລະ result; ລະຫັດມີ copy_text, ເມນູມີ reply_markup ແລະ reply_keyboard_revision. ຮັບຄືນອາເຣ result; ບໍ່ມີເຫດການແມ່ນ result: [].

## ຄັດລອກລະຫັດຢືນຢັນ

ໃສ່ຊື່ລະບົບ, ຈຸດປະສົງ ແລະ ອາຍຸໃນຂໍ້ຄວາມ, ແລ້ວເພີ່ມ copy_text ເປັນສະຕຣິງເລກ ASCII 4–12 ຫຼັກທີ່ປາກົດຄົບໃນ text. ສະຕຣິງຮັກສາເລກສູນນຳໜ້າ.

ໄອຄອນຄັດລອກພຽງລະຫັດ. ໂປຣແກຣມຕ້ອງສ້າງ, ກວດ ແລະ ກຳນົດອາຍຸເອງ; ຟິວນີ້ຄວບຄຸມການສະແດງ/ຄັດລອກ. ແອັບເກົ່າຍັງອ່ານຂໍ້ຄວາມໄດ້.

```json
{
  "chat_id": "USER_ID",
  "text": "ລະຫັດເຂົ້າລະບົບຕົວຢ່າງ: 003812, ໃຊ້ໄດ້ 5 ນາທີ.",
  "copy_text": "003812"
}
```

## ແປ້ນປຸ່ມຕອບກັບ

ແປ້ນປຸ່ມຂໍ້ຄວາມຫຼາຍແຖວ. ກົດແລ້ວສົ່ງຊື່ປຸ່ມເປັນຂໍ້ຄວາມທຳມະດາ; ຈັດການຜ່ານ message.text ໃນ getUpdates.

ມີ 1–8 ແຖວ, 1–4 ປຸ່ມຕໍ່ແຖວ, ລວມບໍ່ເກີນ 24. ຊື່ 1–64 ຕົວ, ຫ້າມວ່າງ, ຂຶ້ນແຖວໃໝ່ ຫຼື ອັກສອນຄວບຄຸມ. ປຸ່ມເປັນສະຕຣິງ ຫຼື ອອບເຈັກມີແຕ່ text.

ບໍ່ສົ່ງ reply_markup ຈະເກັບແປ້ນເກົ່າ; ແປ້ນໃໝ່ແທນເກົ່າ. ສົ່ງ remove_keyboard: true ຢ່າງດຽວເພື່ອລຶບແປ້ນແລະປຸ່ມເປີດ.

ຜູ້ໃຊ້ຊ່ອນ/ເປີດໄດ້. ແປ້ນໃຊ້ຄັ້ງດຽວຊ່ອນຫຼັງສົ່ງປຸ່ມສຳເລັດ; ລຸ້ນໃໝ່ເປີດອີກ. ສະຖານະແຍກຕາມບັອດ/ຜູ້ໃຊ້, ກວດປະມານທຸກ 5 ວິນາທີໃນແຊັດທີ່ເປີດ.

ແປ້ນໃຊ້ໄດ້ສະເພາະສ່ວນຕົວ; ກຸ່ມມີ reply_markup ຈະໄດ້ 422. text ຍັງຈຳເປັນ. ໃຊ້ JSON true/false ບໍ່ແມ່ນສະຕຣິງ. ຄຸນສົມບັດແປ້ນ/ປຸ່ມທີ່ບໍ່ຮອງຮັບຈະປະຕິເສດ. reply_markup ແບບສະຕຣິງ JSON ສູງສຸດ 16 KiB.

| ພາຣາມິເຕີ | ປະເພດ | ຈຳເປັນ | ຄຳອະທິບາຍ |
| --- | --- | --- | --- |
| `reply_markup` | object / JSON string | ບໍ່ | ອອບເຈັກແປ້ນ ຫຼື ສະຕຣິງ JSON, ບໍ່ບັງຄັບ. |
| `keyboard` | array[] | ແມ່ນ | ອາເຣສອງມິຕິ, ແຕ່ລະອາເຣຍ່ອຍເປັນໜຶ່ງແຖວ. |
| `resize_keyboard` | boolean | ບໍ່ | ຄ່າເລີ່ມ true ປຸ່ມນ້ອຍ; false ປຸ່ມສູງກວ່າ. |
| `one_time_keyboard` | boolean | ບໍ່ | ຄ່າເລີ່ມ false; true ຊ່ອນຫຼັງສົ່ງປຸ່ມສຳເລັດ. |
| `remove_keyboard` | boolean | ບໍ່ | true ລຶບແປ້ນ, ຫ້າມຮ່ວມກັບຕົວເລືອກແປ້ນອື່ນ. |

```json
{
  "chat_id": "USER_ID",
  "text": "ເລືອກບໍລິການ:",
  "reply_markup": {
    "keyboard": [
      [
        {
          "text": "ຕັ້ງຄ່າພາສາ"
        },
        {
          "text": "ຕິດຕາມພັດສະດຸ"
        }
      ],
      [
        {
          "text": "ຕັ້ງຄ່າແຈ້ງເຕືອນ"
        },
        {
          "text": "ປ້ອນເລກພັດສະດຸ"
        }
      ]
    ],
    "resize_keyboard": true,
    "one_time_keyboard": false
  }
}
```

```json
{
  "chat_id": "USER_ID",
  "text": "ເລືອກບໍລິການ:",
  "reply_markup": {
    "keyboard": [
      [
        "ຕັ້ງຄ່າພາສາ",
        "ຕິດຕາມພັດສະດຸ"
      ]
    ],
    "one_time_keyboard": true
  }
}
```

```json
{
  "chat_id": "USER_ID",
  "text": "ດຳເນີນການສຳເລັດ.",
  "reply_markup": {
    "remove_keyboard": true
  }
}
```

## getUpdates · ຮັບຂໍ້ຄວາມ

`POST https://im.ez7.life/bot-api/<BOT_TOKEN>/getUpdates`

ດຶງແບບສັ້ນ: ບໍ່ມີຂໍ້ຄວາມຈະຄືນອາເຣວ່າງທັນທີ. ເອີ້ນທຸກ 1–3 ວິນາທີ, ເພີ່ມເວລາລໍຖ້າເມື່ອຜິດພາດ. ບໍ່ມີ webhook ສາທາລະນະ ຫຼື ດຶງແບບຍາວ.

ຫຼັງສຳເລັດຕັ້ງ offset = update_id ສຸດທ້າຍ + 1; ເຫດການກ່ອນໜ້າຖືວ່າຮັບຮູ້. ຖ້າລົ້ມເຫຼວຄົງ offset ເກົ່າ, ປ້ອງກັນຊ້ຳດ້ວຍ update_id ຫຼື ຄີທຸລະກິດ.

ປະສານໂປຣແກຣມຮັບບັອດດຽວກັນ ເພື່ອບໍ່ໃຫ້ເລື່ອນ offset ຂອງກັນ. ເຫດການອື່ນເບິ່ງ content_type ແລະ raw_content.

| ພາຣາມິເຕີ | ປະເພດ | ຈຳເປັນ | ຄຳອະທິບາຍ |
| --- | --- | --- | --- |
| `offset` | integer | ບໍ່ | ID ເຫດການຕໍ່ໄປບໍ່ຕິດລົບ, ຄ່າເລີ່ມ 0. |
| `limit` | integer | ບໍ່ | ຄັ້ງລະ 1–100 ເຫດການ, ຄ່າເລີ່ມ 100. |

```bash
curl --fail-with-body --request POST \
  "https://im.ez7.life/bot-api/${EZLIFE_BOT_TOKEN}/getUpdates" \
  --header 'Content-Type: application/json' \
  --data '{"offset": 0, "limit": 100}'
```

```json
{
  "ok": true,
  "result": [
    {
      "update_id": 120,
      "message": {
        "message_id": "EXAMPLE_MESSAGE_ID",
        "date": 1794297600,
        "chat": {
          "id": "1000000001",
          "type": "private"
        },
        "from": {
          "id": "1000000001",
          "display_name": "Example User"
        },
        "text": "ຕັ້ງຄ່າພາສາ",
        "content_type": 101,
        "raw_content": "{\n  \"content\": \"ຕັ້ງຄ່າພາສາ\"\n}"
      }
    }
  ]
}
```

| ພາຣາມິເຕີ | ຄຳອະທິບາຍ |
| --- | --- |
| `update_id` | ID ເພີ່ມຂຶ້ນສຳລັບຢືນຢັນການປະມວນຜົນ. |
| `message_id` | ID ຂໍ້ຄວາມແພລດຟອມ. |
| `date` | ເວລາ Unix ໜ່ວຍວິນາທີ. |
| `chat` | ID ຜູ້ສົ່ງສ່ວນຕົວ ຫຼື ID ກຸ່ມ ພ້ອມ private/group. |
| `from` | ID ແລະ ຊື່ສະແດງຜູ້ສົ່ງຕົວຈິງ. |
| `text` | ເນື້ອຫາຂໍ້ຄວາມ; ປະເພດອື່ນອາດວ່າງ. |
| `content_type` | ປະເພດເນື້ອຫາ, 101 ແມ່ນຂໍ້ຄວາມ. |
| `raw_content` | ເນື້ອຫາດັ້ງເດີມຂອງຮູບ, ໄຟລ໌ ແລະ ເຫດການອື່ນ. |

## ໂປຣແກຣມ Python ສະບັບເຕັມ

ຕົວຢ່າງເຕັມໃຊ້ແຕ່ໄລບຣາຣີມາດຕະຖານ Python, ຮັບ /start, /ping ແລະ ຊື່ປຸ່ມ, ເກັບ offset. ໃຫ້ແລ່ນໃນໂຟນເດີສ່ວນຕົວ.

ແທນທີ່ປຸ່ມຕົວຢ່າງດ້ວຍວຽກຈິງ. ຄຳສັ່ງຊື້/ຈ່າຍເງິນຕ້ອງປ້ອງກັນຊ້ຳກ່ອນເກັບຄວາມຄືບໜ້າ.

```python
import json
import os
import time
import urllib.error
import urllib.request
from pathlib import Path

TOKEN = os.environ["EZLIFE_BOT_TOKEN"]
BASE = "https://im.ez7.life/bot-api/" + TOKEN
OFFSET_FILE = Path("bot-offset.json")
MENU = [
  [
    "ຕັ້ງຄ່າພາສາ",
    "ຕິດຕາມພັດສະດຸ"
  ],
  [
    "ຕັ້ງຄ່າແຈ້ງເຕືອນ",
    "ປ້ອນເລກພັດສະດຸ"
  ]
]

class ApiFailure(Exception):
    pass

class NoRedirect(urllib.request.HTTPRedirectHandler):
    def redirect_request(self, *args):
        return None

HTTP = urllib.request.build_opener(NoRedirect())

def api(method, payload):
    req = urllib.request.Request(
        BASE + "/" + method,
        data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
        headers={"Content-Type": "application/json"},
        method="POST",
    )
    try:
        with HTTP.open(req, timeout=20) as response:
            body = json.load(response)
    except urllib.error.HTTPError as error:
        raise ApiFailure("HTTP " + str(error.code)) from None
    except (urllib.error.URLError, TimeoutError, OSError, ValueError):
        raise ApiFailure("Network or response failure") from None
    if not body.get("ok"):
        raise ApiFailure("API error " + str(body.get("error_code", "unknown")))
    return body["result"]

def handle(update):
    message = update.get("message", {})
    chat = message.get("chat", {})
    text = message.get("text", "")
    if not chat.get("id"):
        return
    payload = {"chat_id": str(chat["id"]),
               "chat_type": chat.get("type", "private")}
    if text == "/start" and payload["chat_type"] == "private":
        payload.update(text="ເລືອກບໍລິການ:", reply_markup={
            "keyboard": MENU, "resize_keyboard": True,
            "one_time_keyboard": False,
        })
    elif text == "/ping":
        payload["text"] = "pong"
    elif text in [label for row in MENU for label in row]:
        payload["text"] = "ດຳເນີນການສຳເລັດ."
    else:
        return
    api("sendMessage", payload)

def save_offset(value):
    temp = OFFSET_FILE.with_suffix(".tmp")
    fd = os.open(temp, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600)
    with os.fdopen(fd, "w", encoding="utf-8") as stream:
        json.dump(value, stream)
        stream.flush()
        os.fsync(stream.fileno())
    os.replace(temp, OFFSET_FILE)

def main():
    offset = json.loads(OFFSET_FILE.read_text()) if OFFSET_FILE.exists() else 0
    if isinstance(offset, bool) or not isinstance(offset, int) or offset < 0:
        raise ValueError("Invalid offset file")
    delay = 1
    while True:
        try:
            updates = api("getUpdates", {"offset": offset, "limit": 100})
            for update in updates:
                handle(update)
                next_offset = int(update["update_id"]) + 1
                save_offset(next_offset)
                offset = next_offset
            delay = 1
            time.sleep(2)
        except (ApiFailure, OSError, ValueError):
            print("Processing failed; offset retained. Check configuration.", flush=True)
            time.sleep(delay)
            delay = min(delay * 2, 30)

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        pass
```

## ກຸ່ມ ແລະ ຂອບເຂດຂໍ້ຄວາມ

ບັອດຕ້ອງເຂົ້າກຸ່ມກ່ອນ. ຄ່າເລີ່ມຕົ້ນໃຫ້ເຈົ້າຂອງອະນຸມັດ; ກວດທີ່ແຊັດບັອດ → ເພີ່ມເຕີມ → ຕັ້ງຄ່າບັອດ → ກຸ່ມທີ່ເຂົ້າຮ່ວມ.

ໂໝດສ່ວນຕົວກຸ່ມປິດໂດຍຄ່າເລີ່ມ; ກຸ່ມທີ່ເປີດຮັບບໍ່ຕ້ອງ @ບັອດ. ຂໍ້ຄວາມຕົນເອງບໍ່ເຂົ້າຄິວຕົນ; ແຈ້ງການວົງຈອນກຸ່ມບໍ່ແມ່ນຂໍ້ຄວາມທຳມະດາ.

ສະວິດຮັບແຕ່ລະກຸ່ມຄວບຄຸມເຫດການ, ສົ່ງຕໍ່ ແລະ ຕອບອັດຕະໂນມັດ. ບັອດຂອງຜູ້ໃຊ້ສົ່ງຕໍ່ຂໍ້ຄວາມກຸ່ມທີ່ເປີດໄປແຊັດເຈົ້າຂອງພ້ອມຊື່ກຸ່ມ. ສິດພາຍນອກຍັງຄວບຄຸມ API ແລະ ເຫດການ.

## ຕັ້ງຄ່າບັອດ ແລະ ຕອບອັດຕະໂນມັດ

ເຈົ້າຂອງເທົ່ານັ້ນຕັ້ງຄ່າອະນຸມັດກຸ່ມ, ເຂົ້າເຖິງພາຍນອກ, ຮັບລາຍກຸ່ມ ແລະ ຕອບຕາມຄຳສຳຄັນ. ປິດພາຍນອກຍັງເກັບ Token ແຕ່ປະຕິເສດ API.

ສູງສຸດ 50 ກົດ, ຄຳສຳຄັນ 1–100 ຕົວ, ຄຳຕອບ 1–2000. ກວດການມີຄຳຕາມລຳດັບໂດຍບໍ່ແຍກພິມໃຫຍ່/ນ້ອຍ, ຕອບດ້ວຍກົດທຳອິດທີ່ເປີດແລະກົງ.

ຕອບອັດຕະໂນມັດໃນແຊັດສ່ວນຕົວ/ກຸ່ມທີ່ເປີດຮັບ, ປ້ອງກັນບັອດຕອບຕໍ່ກັນ. AI API ຍັງເປັນແຜນ, ບໍ່ມີວິທີສາທາລະນະ.

## ຈັດການຂໍ້ຜິດພາດ

ຂໍ້ຜິດພາດເບື້ອງຕົ້ນເຊັ່ນ JSON ບໍ່ຖືກ ຫຼື ເນື້ອຫາໃຫຍ່ເກີນ ໃຊ້ errorCode ແລະ message. ຂໍ້ຜິດພາດ API ອື່ນໃຊ້ error_code ແລະ description. ກວດ HTTP ແລະ ok ກ່ອນ.

```json
{
  "ok": false,
  "error_code": 422,
  "description": "chat_id 与 1–5000 字的 text 为必填"
}
```

| ສະຖານະ | ວິທີແກ້ໄຂ |
| --- | --- |
| 400 | JSON ບໍ່ຖືກ. ກວດລະຫັດອັກສອນ ແລະ ໄວຍາກອນ. |
| 401 | Token ບໍ່ຖືກ, ຖອນ, ອອກໃໝ່ ຫຼື ບັອດຖືກລະງັບ. ອັບເດດຂໍ້ມູນຮັບຮອງ. |
| 403 | ເຈົ້າຂອງປິດພາຍນອກ. ເປີດໃນຕັ້ງຄ່າບັອດ. |
| 404 | ກວດເສັ້ນທາງ /bot-api/, ຮູບແບບ Token ແລະ ຊື່ວິທີ. |
| 409 | ກຳລັງອັບເດດແປ້ນບັອດ/ຜູ້ໃຊ້ນີ້. ລໍຖ້າແລ້ວລອງໃໝ່. |
| 413 | ຄຳຮ້ອງຂໍເກີນ 1 MiB. ຫຼຸດຂະໜາດ. |
| 422 | ແກ້ພາຣາມິເຕີ, ລະຫັດ ຫຼື ໂຄງສ້າງແປ້ນ. |
| 500 | ຜິດພາດຊົ່ວຄາວ. ຄົງ offset ແລະ ເພີ່ມເວລາລໍ; ກວດຜົນສົ່ງກ່ອນລອງໃໝ່. |

## ຂໍ້ຈຳກັດ ແລະ ການຮອງຮັບ

ຄູ່ມືນີ້ອີງ API ປັດຈຸບັນ. ຍັງບໍ່ມີການສົ່ງສື່, ປຸ່ມ inline callback, ຂໍລາຍຊື່/ທີ່ຕັ້ງ ຫຼື webhook ສາທາລະນະ.

ແປ້ນຕ້ອງການ Web/H5 ລຸ້ນປັດຈຸບັນ. ແອັບທີ່ຝັງ H5 ເກົ່າຕ້ອງອັບເດດເພື່ອເຫັນປຸ່ມໃໝ່.

ຄຳຮ້ອງຂໍທັງໝົດສູງສຸດ 1 MiB. ປັບຄວາມຖີ່ຕາມພາລະຈິງ; ຄູ່ມືບໍ່ຮັບປະກັນອັດຕາຄົງທີ່. ສັນຍານຄວາມສາມາດກຸ່ມບໍ່ແທນການເຂົ້າຮ່ວມ, ອະນຸມັດ ແລະ ສິດຮັບ.

