Mulai: membuat bot
Buka Makechat (aplikasi atau web), cari @makebot, tekan Mulai, lalu kirim /newbot. Ikuti pertanyaannya: nama tampilan bot, lalu username yang berakhiran bot (misalnya catatan_kas_bot). Setelah selesai, @makebot mengirim token bot, misalnya:
4839201:AAHk3x9-contoh-token-jangan-dipakaiToken adalah kunci penuh untuk bot kamu. Lewat @makebot kamu juga bisa mengubah nama, foto, deskripsi, dan daftar perintah bot, atau membuat token baru dengan /revoke.
Chat dengan bot tidak dienkripsi end-to-end. Server Make dan bot bisa membaca pesan yang dikirim pengguna ke bot. Pengguna melihat pemberitahuan ini di setiap chat bot.
Membuat permintaan
Semua metode dipanggil lewat HTTPS dengan alamat:
https://api-make.fivehoster.co.id/api/v1/bot/<TOKEN>/<METHOD>Parameter boleh dikirim dengan salah satu cara berikut:
- GET dengan query string, misalnya
?chat_id=...&text=Halo - POST dengan
application/json - POST dengan
application/x-www-form-urlencoded(objek sepertireply_markupdikirim sebagai teks JSON) - POST dengan
multipart/form-data, wajib untuk mengunggah file
Jawaban selalu JSON. Jika berhasil:
{ "ok": true, "result": { ... } }Jika gagal, kode HTTP sama dengan error_code:
{ "ok": false, "error_code": 400, "description": "Bad Request: message text is empty" }
{ "ok": false, "error_code": 429, "description": "Too Many Requests: retry after 3", "parameters": { "retry_after": 3 } }| Field | Tipe | Keterangan |
|---|---|---|
400 | Bad Request | Parameter salah atau kurang. |
401 | Unauthorized | Token salah atau sudah dicabut. |
403 | Forbidden | Pengguna belum menekan Mulai atau sudah menghentikan bot. |
404 | Not Found | Metode, pesan, atau file tidak ditemukan. |
409 | Conflict | getUpdates dipanggil saat webhook aktif. |
429 | Too Many Requests | Terlalu cepat. Tunggu parameters.retry_after detik. |
Menerima update
Ada dua cara yang tidak bisa dipakai bersamaan: getUpdates (long polling) atau webhook. Update yang belum diambil disimpan selama 24 jam, lalu dibuang.
getUpdates (long polling)
Panggil getUpdates berulang kali. Isi offset dengan update_id terakhir + 1 untuk menandai update sebelumnya sudah diterima. Dengan timeout (sampai 50 detik), server menahan permintaan sampai ada update baru.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
offset | Integer | Tidak | ID update pertama yang ingin diambil. Semua update sebelumnya dianggap sudah diterima. |
limit | Integer | Tidak | 1 sampai 100, bawaan 100. |
timeout | Integer | Tidak | Lama menunggu dalam detik, 0 sampai 50. Bawaan 0 (langsung menjawab). |
Webhook
Dengan setWebhook, Make mengirim setiap update sebagai POST JSON ke alamat kamu. Alamat harus https dengan port 443, 80, 88, atau 8443. Jika kamu mengisi secret_token, nilainya dikirim balik di header X-Make-Bot-Api-Secret-Token pada setiap permintaan, jadi kamu bisa memastikan permintaan itu dari Make. Jawab dengan status 2xx secepatnya. Jika server kamu gagal atau lambat, update dikirim ulang dengan jeda yang makin lama (sampai sekitar 10 menit) selama masih dalam 24 jam.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
url | String | Ya | Alamat https webhook. Kosongkan untuk mematikan webhook. |
secret_token | String | Tidak | 1 sampai 256 karakter A-Z, a-z, 0-9, _ dan -. Dikirim di header X-Make-Bot-Api-Secret-Token. |
allowed_updates | Array of String | Tidak | Jenis update yang ingin diterima, misalnya ["message", "callback_query"]. Kosong berarti semua. |
drop_pending_updates | Boolean | Tidak | true untuk membuang update yang belum terkirim. |
getWebhookInfo menampilkan alamat webhook, jumlah update yang menunggu (pending_update_count), dan error terakhir (last_error_date, last_error_message). deleteWebhook mematikan webhook (boleh dengan drop_pending_updates) supaya kamu bisa kembali memakai getUpdates.
Objek Update & Message
Update
| Field | Tipe | Keterangan |
|---|---|---|
update_id | Integer | Nomor urut update. Pakai untuk offset getUpdates. |
message | Message | Opsional. Pesan baru dari pengguna (termasuk /start saat pengguna menekan Mulai). |
callback_query | CallbackQuery | Opsional. Pengguna menekan tombol inline dengan callback_data. |
my_chat_member | ChatMemberUpdated | Opsional. Pengguna menghentikan atau memulai lagi bot, atau bot ditambahkan ke / dikeluarkan dari grup atau channel. |
channel_post | Message | Opsional. Post baru di channel tempat bot menjadi admin. |
inline_query | InlineQuery | Opsional. Pengguna mengetik @username bot (mode inline). |
chosen_inline_result | ChosenInlineResult | Opsional. Pengguna memilih salah satu hasil inline. |
Message
| Field | Tipe | Keterangan |
|---|---|---|
message_id | Integer atau String | ID pesan di chat ini. Integer di chat pribadi, string di grup dan channel. |
from | User | Pengirim: id (UUID), is_bot, first_name, last_name, username. |
chat | Chat | id = ID pengguna, grup, atau channel (UUID string); type = "private", "group", atau "channel". |
date | Integer | Waktu kirim, Unix time (detik). |
edit_date | Integer | Opsional. Waktu terakhir diedit. |
text | String | Opsional. Isi pesan teks. |
entities | Array of MessageEntity | Opsional. Format dan bagian khusus teks, termasuk bot_command untuk /perintah. |
caption | String | Opsional. Keterangan file. |
photo | Array of PhotoSize | Opsional. Foto, dengan file_id, width, height, file_size. |
document / video / audio / voice | Object | Opsional. File dengan file_id, file_name, mime_type, file_size (dan duration untuk video, audio, voice). |
reply_to_message | Message | Opsional. Pesan yang dibalas. |
reply_markup | InlineKeyboardMarkup | Opsional. Tombol inline yang terpasang di pesan. |
Contoh update saat pengguna mengirim perintah:
{
"update_id": 1042,
"message": {
"message_id": 87,
"from": { "id": "6f1c2a3b-0000-4000-8000-1234567890ab", "is_bot": false, "first_name": "Rina", "username": "rina" },
"chat": { "id": "6f1c2a3b-0000-4000-8000-1234567890ab", "type": "private", "first_name": "Rina", "username": "rina" },
"date": 1760500000,
"text": "/saldo bulan ini",
"entities": [{ "type": "bot_command", "offset": 0, "length": 6 }]
}
}CallbackQuery
Berisi id (untuk answerCallbackQuery), from, message (pesan yang tombolnya ditekan), chat_instance, dan data (callback_data tombol).
MessageEntity
type salah satu dari bold, italic, underline, strikethrough, code, pre, text_link (dengan url), spoiler, url, mention, atau bot_command; offset dan length dihitung dalam UTF-16 code unit, sama seperti Telegram.
Daftar metode
getMe
Tanpa parameter. Mengembalikan User bot: id, is_bot, first_name, username, dan kemampuan bot.
getUpdates
Lihat bagian Menerima update. Mengembalikan Array of Update.
setWebhook
Lihat bagian Menerima update. Mengembalikan true.
deleteWebhook
Mematikan webhook. Mengembalikan true.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
drop_pending_updates | Boolean | Tidak | true untuk membuang update yang menunggu. |
getWebhookInfo
Mengembalikan WebhookInfo: url, has_custom_certificate, pending_update_count, last_error_date, last_error_message, allowed_updates.
sendMessage
Mengirim pesan teks. Mengembalikan Message yang terkirim.
HTML yang didukung: <b>, <i>, <u>, <s>, <code>, <pre>, <a href="...">, dan <tg-spoiler>. Markdown: *tebal*, _miring_, `kode`, [teks](https://...).
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
chat_id | String | Ya | ID chat dari message.chat.id: ID pengguna (chat pribadi), ID grup, atau ID channel / @username channel publik. |
text | String | Ya | 1 sampai 4096 karakter setelah format dibaca. |
parse_mode | String | Tidak | HTML atau Markdown. |
entities | Array of MessageEntity | Tidak | Format manual sebagai ganti parse_mode. |
reply_markup | Object (JSON) | Tidak | InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, atau ForceReply. |
reply_to_message_id | Integer | Tidak | Membalas pesan tertentu. |
disable_notification | Boolean | Tidak | true agar pengguna tidak menerima notifikasi push. |
sendPhoto / sendDocument / sendVideo / sendAudio / sendVoice
Mengirim file. Nama field file sama dengan jenisnya. Foto harus JPEG, PNG, atau WebP. Mengembalikan Message.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
chat_id | String | Ya | ID chat dari message.chat.id: ID pengguna (chat pribadi), ID grup, atau ID channel / @username channel publik. |
photo / document / video / audio / voice | File atau String | Ya | Unggah multipart (maksimal 10 MB) atau file_id yang sudah pernah dipakai bot ini. URL tidak diunduh. |
caption | String | Tidak | Keterangan, maksimal 1024 karakter. |
parse_mode | String | Tidak | HTML atau Markdown. |
caption_entities | Array of MessageEntity | Tidak | Format manual untuk caption. |
duration | Integer | Tidak | Durasi dalam detik (video, audio, voice). |
reply_markup | Object (JSON) | Tidak | InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, atau ForceReply. |
reply_to_message_id | Integer | Tidak | Membalas pesan tertentu. |
disable_notification | Boolean | Tidak | Tanpa notifikasi push. |
editMessageText
Mengubah teks pesan bot. Pengguna melihat tanda diedit. Mengembalikan Message.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
chat_id | String | Ya | ID chat dari message.chat.id: ID pengguna (chat pribadi), ID grup, atau ID channel / @username channel publik. |
message_id | Integer | Ya | Pesan bot yang diedit. |
text | String | Ya | Teks baru. |
parse_mode | String | Tidak | HTML atau Markdown. |
entities | Array of MessageEntity | Tidak | Format manual. |
reply_markup | Object (JSON) | Tidak | InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, atau ForceReply. |
editMessageCaption
Mengubah caption file. Mengembalikan Message.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
chat_id | String | Ya | ID chat dari message.chat.id: ID pengguna (chat pribadi), ID grup, atau ID channel / @username channel publik. |
message_id | Integer | Ya | Pesan bot yang diedit. |
caption | String | Tidak | Caption baru. |
parse_mode | String | Tidak | HTML atau Markdown. |
caption_entities | Array of MessageEntity | Tidak | Format manual. |
reply_markup | Object (JSON) | Tidak | InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, atau ForceReply. |
editMessageReplyMarkup
Mengganti tombol inline saja. Mengembalikan Message.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
chat_id | String | Ya | ID chat dari message.chat.id: ID pengguna (chat pribadi), ID grup, atau ID channel / @username channel publik. |
message_id | Integer | Ya | Pesan bot yang diubah. |
reply_markup | InlineKeyboardMarkup | Tidak | Tombol baru. Kosongkan untuk menghapus tombol. |
deleteMessage
Menghapus pesan bot (filenya ikut dihapus). Mengembalikan true.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
chat_id | String | Ya | ID chat dari message.chat.id: ID pengguna (chat pribadi), ID grup, atau ID channel / @username channel publik. |
message_id | Integer | Ya | Pesan yang dihapus. |
answerCallbackQuery
Menjawab tombol yang ditekan. Jawab dalam sekitar 8 detik, setelah itu pengguna tidak melihat apa pun. Mengembalikan true.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
callback_query_id | String | Ya | id dari CallbackQuery. |
text | String | Tidak | Maksimal 200 karakter. Tampil sebagai notifikasi singkat. |
show_alert | Boolean | Tidak | true untuk menampilkan kotak peringatan yang harus ditutup pengguna. |
sendChatAction
Menampilkan status seperti "mengetik…" di chat selama beberapa detik. Mengembalikan true.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
chat_id | String | Ya | ID chat dari message.chat.id: ID pengguna (chat pribadi), ID grup, atau ID channel / @username channel publik. |
action | String | Ya | typing, upload_photo, upload_video, upload_document, upload_voice, dan lainnya. |
setMyCommands
Mengatur daftar perintah di tombol Menu dan saran saat pengguna mengetik /. Mengembalikan true.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
commands | Array of BotCommand | Ya | Maksimal 100. Tiap item: command (1–32 huruf kecil, angka, _) dan description (1–256 karakter). |
getMyCommands
Mengembalikan Array of BotCommand.
deleteMyCommands
Menghapus semua perintah. Mengembalikan true.
setMyDescription
Mengembalikan true.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
description | String | Tidak | Maksimal 512 karakter. Tampil di chat kosong: Apa yang bisa dilakukan bot ini? |
setMyShortDescription
Mengembalikan true.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
short_description | String | Tidak | Maksimal 120 karakter. Tampil di profil bot. |
getFile
Mengembalikan File: file_id, file_unique_id, file_size, file_path. Unduh isinya dengan GET ke /api/v1/bot/<TOKEN>/file/<file_id>.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
file_id | String | Ya | file_id dari pesan. |
Tombol & keyboard
InlineKeyboardMarkup
Tombol di bawah pesan: { "inline_keyboard": [[ InlineKeyboardButton, ... ], ...] }. Maksimal 100 tombol, 8 per baris. Setiap tombol punya text dan tepat satu dari:
callback_data: 1 sampai 64 byte. Saat ditekan, bot menerima callback_query. Jawab dengan answerCallbackQuery.url: hanya http atau https. Pengguna diminta konfirmasi sebelum link dibuka.switch_inline_query/switch_inline_query_current_chat: mengisi kolom ketik dengan @username bot dan teks ini.
ReplyKeyboardMarkup
Tombol pengganti kolom ketik: { "keyboard": [[{ "text": "Ya" }, { "text": "Tidak" }]] }. Menekan tombol mengirim teksnya sebagai pesan. Opsi: resize_keyboard, one_time_keyboard (disembunyikan setelah dipakai), input_field_placeholder, is_persistent.
ReplyKeyboardRemove
{ "remove_keyboard": true } menghapus keyboard yang dikirim sebelumnya.
ForceReply
{ "force_reply": true, "input_field_placeholder": "Tulis nominal" } membuka balasan ke pesan tersebut, cocok untuk pertanyaan langkah demi langkah.
File
File dikirim dengan multipart/form-data, maksimal 10 MB. Kamu juga bisa mengirim ulang file yang sudah dimiliki bot dengan file_id-nya. Bot tidak mengunduh file dari URL. File dari pengguna diambil dengan getFile lalu diunduh dari /api/v1/bot/<TOKEN>/file/<file_id>. File di chat bot tidak dienkripsi end-to-end.
Batas & aturan
- Maksimal 30 permintaan per detik untuk setiap bot.
- Sekitar 1 pesan per detik ke chat yang sama. Lebih dari itu dijawab 429 dengan parameters.retry_after.
- Bot hanya bisa mengirim pesan ke pengguna yang sudah menekan Mulai. Jika pengguna menghentikan bot, permintaan dijawab 403 sampai pengguna memulainya lagi.
- Callback query harus dijawab dalam sekitar 8 detik.
- Update disimpan selama 24 jam.
- Teks pesan maksimal 4096 karakter, caption 1024 karakter.
Keamanan
- Simpan token di server atau variabel lingkungan. Jangan taruh di aplikasi, situs web, atau repositori publik.
- Jika token bocor, kirim
/revokeke @makebot. Token lama langsung berhenti bekerja. - Pakai
secret_tokendi setWebhook dan periksa headerX-Make-Bot-Api-Secret-Tokendi setiap permintaan webhook. - Jangan meminta kata sandi, kode OTP, atau nomor kartu lewat bot.
Contoh kode
curl
# Cek token
curl "https://api-make.fivehoster.co.id/api/v1/bot/<TOKEN>/getMe"
# Kirim pesan dengan tombol inline
curl -X POST "https://api-make.fivehoster.co.id/api/v1/bot/<TOKEN>/sendMessage" \
-H "Content-Type: application/json" \
-d '{
"chat_id": "6f1c2a3b-0000-4000-8000-1234567890ab",
"text": "<b>Halo!</b> Pilih menu:",
"parse_mode": "HTML",
"reply_markup": {
"inline_keyboard": [[
{ "text": "Saldo", "callback_data": "saldo" },
{ "text": "Bantuan", "url": "https://makebetter.space/support" }
]]
}
}'
# Kirim foto (multipart, maksimal 10 MB)
curl -F chat_id=6f1c2a3b-0000-4000-8000-1234567890ab \
-F caption="Laporan bulan ini" \
-F [email protected] \
"https://api-make.fivehoster.co.id/api/v1/bot/<TOKEN>/sendPhoto"Node.js: getUpdates
// Node.js 18+ (fetch bawaan). Jalankan: TOKEN=xxxx node bot.mjs
const API = `https://api-make.fivehoster.co.id/api/v1/bot/${process.env.TOKEN}`;
async function call(method, body = {}) {
const res = await fetch(`${API}/${method}`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
const data = await res.json();
if (!data.ok) {
const wait = data.parameters?.retry_after;
if (wait) await new Promise((r) => setTimeout(r, wait * 1000));
throw new Error(`${method}: ${data.error_code} ${data.description}`);
}
return data.result;
}
let offset = 0;
for (;;) {
try {
const updates = await call("getUpdates", { offset, timeout: 50 });
for (const u of updates) {
offset = u.update_id + 1;
if (u.message?.text === "/start") {
await call("sendMessage", {
chat_id: u.message.chat.id,
text: "Halo! Ketik /saldo untuk mencoba.",
reply_markup: { inline_keyboard: [[{ text: "Coba tombol", callback_data: "ping" }]] },
});
} else if (u.callback_query) {
await call("answerCallbackQuery", { callback_query_id: u.callback_query.id, text: "Pong!" });
}
}
} catch (e) {
console.error(e.message);
await new Promise((r) => setTimeout(r, 3000));
}
}Node.js: webhook dengan Express
// npm i express — lalu: TOKEN=xxxx SECRET=rahasia-panjang node webhook.mjs
import express from "express";
const API = `https://api-make.fivehoster.co.id/api/v1/bot/${process.env.TOKEN}`;
const app = express();
app.use(express.json());
app.post("/make-bot", async (req, res) => {
// Tolak permintaan yang bukan dari MAKE.
if (req.get("X-Make-Bot-Api-Secret-Token") !== process.env.SECRET) return res.sendStatus(401);
res.sendStatus(200); // jawab cepat, proses sesudahnya
const message = req.body.message;
if (message?.text) {
await fetch(`${API}/sendMessage`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ chat_id: message.chat.id, text: `Kamu menulis: ${message.text}` }),
});
}
});
app.listen(8443);
// Sekali saja, untuk mendaftarkan webhook:
// curl -X POST "${API}/setWebhook" -H "Content-Type: application/json" \
// -d '{"url":"https://bot.contoh.com:8443/make-bot","secret_token":"rahasia-panjang"}'Bot di grup
Anggota grup menambahkan bot lewat Info grup → Tambah bot (bagi yang boleh menambah anggota). Bot ikut tampil di daftar anggota dan bisa dikeluarkan seperti anggota lain. Bot hanya bisa ditambahkan ke grup jika pemiliknya mengizinkan (pengaturan join groups di @makebot).
Grup tetap terenkripsi end-to-end. Bot tidak punya kunci grup, jadi bot hanya menerima pesan yang ditujukan kepadanya: aplikasi pengirim mengirim salinan tanpa enkripsi khusus untuk pesan berikut, dan pengirim melihat pemberitahuannya sebelum mengirim.
/perintahditerima semua bot di grup;/perintah@username_bothanya diterima bot itu.- Pesan yang menyebut
@username_bot. - Balasan ke pesan bot itu sendiri.
Di update, chat.type bernilai "group" dan chat.id adalah ID grup; pakai ID itu sebagai chat_id saat membalas. Di grup, message_id berupa string (bukan integer), jadi simpan apa adanya untuk reply_to_message_id, editMessageText, dan deleteMessage.
{
"update_id": 2051,
"message": {
"message_id": "c1f0e6a2-7d4b-4a51-9c0e-3b2a1d0f9e88",
"from": { "id": "6f1c2a3b-0000-4000-8000-1234567890ab", "is_bot": false, "first_name": "Rina", "username": "rina" },
"chat": { "id": "0b6d9a7e-1111-4000-8000-abcdefabcdef", "type": "group", "title": "Kas Arisan" },
"date": 1760500000,
"text": "/saldo@catatan_kas_bot",
"entities": [{ "type": "bot_command", "offset": 0, "length": 22 }]
}
}Pesan bot di grup bisa memakai format teks, file, dan tombol inline. Tombol callback_data mengirim callback_query seperti di chat pribadi; jawab dengan answerCallbackQuery. Bot bisa mengedit (editMessageText, editMessageCaption, editMessageReplyMarkup) dan menghapus (deleteMessage) pesannya sendiri. Pesan bot di grup tidak dienkripsi end-to-end.
my_chat_member
Saat bot ditambahkan ke atau dikeluarkan dari grup atau channel, bot menerima update my_chat_member berisi chat, from (yang menambahkan atau mengeluarkan), date, old_chat_member, dan new_chat_member (dengan status seperti member, administrator, atau left).
getChat
Mengembalikan Chat: id, type (private, group, atau channel), dan title, username, atau first_name sesuai jenisnya. Bot harus menjadi anggota chat itu.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
chat_id | String | Ya | ID pengguna, ID grup, ID channel, atau @username channel publik. |
Bot di channel
Admin yang boleh menambah admin bisa menambahkan bot lewat Info channel → Tambah bot sebagai admin. Bot menjadi admin yang bisa mengirim, mengedit, dan menghapus post, dan bisa dikeluarkan dengan Keluarkan bot di daftar admin.
chat.typebernilai"channel".chat_idboleh berupa ID channel atau"@username"untuk channel publik.message_idberupa string.sendMessage,sendPhoto,sendDocument,sendVideo,sendAudio, dansendVoicememposting atas nama channel.editMessageText,editMessageCaption, dandeleteMessagebekerja pada post channel.- Post dari admin lain dikirim ke bot sebagai update
channel_post(objek Message). - Tombol di post channel belum didukung.
Mode inline
Dengan mode inline, pengguna mengetik @username_bot kata kunci di chat mana pun (chat pribadi, grup, atau chat bot) dan memilih hasil dari bot tanpa membuka chat bot. Nyalakan dengan /setinline di @makebot; teks yang kamu isi tampil sebagai petunjuk di kolom ketik.
Setiap kali pengguna mengetik, bot menerima update inline_query berisi id, from, query, dan offset. Jawab dalam sekitar 6 detik dengan answerInlineQuery; setelah itu pengguna melihat bahwa bot tidak menjawab.
answerInlineQuery
Mengembalikan true. Saat ini hanya hasil bertipe article yang didukung.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
inline_query_id | String | Ya | id dari InlineQuery. |
results | Array of InlineQueryResultArticle | Ya | Hasil yang ditampilkan. |
next_offset | String | Tidak | Dikirim balik sebagai offset saat pengguna menekan Muat lagi. Kosong berarti tidak ada hasil lagi. |
InlineQueryResultArticle
| Field | Tipe | Keterangan |
|---|---|---|
type | String | Selalu "article". |
id | String | ID unik hasil, maksimal 64 byte. |
title | String | Judul hasil (ditebalkan di daftar). |
description | String | Opsional. Teks pendek di bawah judul. |
input_message_content | Object | message_text (maksimal 4096 karakter) dan parse_mode opsional: teks yang dikirim saat hasil dipilih. |
// update.inline_query: { id, from, query, offset }
await call("answerInlineQuery", {
inline_query_id: update.inline_query.id,
results: [
{
type: "article",
id: "kurs-usd",
title: "Kurs USD hari ini",
description: "1 USD = Rp16.250",
input_message_content: { message_text: "<b>1 USD</b> = Rp16.250", parse_mode: "HTML" },
},
],
next_offset: "",
});Saat pengguna memilih hasil, bot menerima update chosen_inline_result berisi result_id, from, dan query. Teks yang dipilih dikirim oleh aplikasi pengguna sebagai pesan pengguna sendiri dengan tanda "via @username_bot". Di chat pribadi dan grup, pesan itu tetap terenkripsi end-to-end, jadi bot tidak menerima isinya kecuali pesan itu memang ditujukan kepadanya.
