Setelah membuat bot melalui BotFather, kita membutuhkan program backend agar bot dapat membaca pesan dan memberikan response.
Salah satu bahasa yang dapat digunakan adalah PHP, terutama jika hosting yang digunakan sudah mendukung PHP.
Arsitektur Sederhana
User Telegram
↓
Telegram
↓
Webhook HTTPS
↓
PHP
↓
Telegram Bot API
↓
User Telegram
1. Simpan Token dengan Aman
Jangan menulis token asli langsung di artikel atau repository publik.
Untuk contoh, gunakan placeholder:
BOT_TOKEN_RAHASIA
Dalam project nyata, simpan secret melalui environment atau konfigurasi server yang tidak diekspos ke publik.
2. Membuat Function Request Telegram
Contoh menggunakan cURL:
<?php
$botToken = getenv("TELEGRAM_BOT_TOKEN");
if (!$botToken) {
http_response_code(500);
exit;
}
function telegramRequest(
string $method,
array $data
): array {
global $botToken;
$url = "https://api.telegram.org/bot"
. $botToken
. "/"
. $method;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
$response = curl_exec($ch);
if ($response === false) {
throw new RuntimeException(
"Telegram request gagal."
);
}
curl_close($ch);
$decoded = json_decode($response, true);
if (!is_array($decoded)) {
throw new RuntimeException(
"Response Telegram tidak valid."
);
}
return $decoded;
}
?>
3. Membuat Function sendMessage
function sendMessage(
int|string $chatId,
string $text
): array {
return telegramRequest(
"sendMessage",
[
"chat_id" => $chatId,
"text" => $text,
]
);
}
4. Membaca Update Webhook
Telegram mengirim body request dalam format JSON.
$rawInput = file_get_contents("php://input");
$update = json_decode(
$rawInput,
true
);
if (!is_array($update)) {
http_response_code(400);
exit;
}
5. Mengambil Chat ID dan Teks
$message = $update["message"] ?? null;
if (!is_array($message)) {
http_response_code(200);
exit;
}
$chatId = $message["chat"]["id"] ?? null;
$text = trim($message["text"] ?? "");
if ($chatId === null) {
http_response_code(200);
exit;
}
6. Membuat Command /start
if ($text === "/start") {
sendMessage(
$chatId,
"Selamat datang! Bot berhasil aktif."
);
exit;
}
7. Command /help
if ($text === "/help") {
sendMessage(
$chatId,
"/start - Mulai bot
/help - Bantuan"
);
exit;
}
8. Echo Pesan
Untuk latihan:
if ($text !== "") {
sendMessage(
$chatId,
"Kamu mengirim: " . $text
);
}
Contoh webhook.php Lengkap
<?php
$botToken = getenv("TELEGRAM_BOT_TOKEN");
if (!$botToken) {
http_response_code(500);
exit;
}
function telegramRequest(
string $method,
array $data
): array {
global $botToken;
$url = "https://api.telegram.org/bot"
. $botToken
. "/"
. $method;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
$response = curl_exec($ch);
if ($response === false) {
error_log("Telegram request gagal.");
return [];
}
curl_close($ch);
return json_decode($response, true) ?: [];
}
function sendMessage(
int|string $chatId,
string $text
): void {
telegramRequest(
"sendMessage",
[
"chat_id" => $chatId,
"text" => $text,
]
);
}
$rawInput = file_get_contents("php://input");
$update = json_decode($rawInput, true);
if (!is_array($update)) {
http_response_code(400);
exit;
}
$message = $update["message"] ?? null;
if (!is_array($message)) {
http_response_code(200);
exit;
}
$chatId = $message["chat"]["id"] ?? null;
$text = trim($message["text"] ?? "");
if ($chatId === null) {
http_response_code(200);
exit;
}
if ($text === "/start") {
sendMessage(
$chatId,
"Selamat datang!"
);
} elseif ($text === "/help") {
sendMessage(
$chatId,
"/start - Mulai
/help - Bantuan"
);
} elseif ($text !== "") {
sendMessage(
$chatId,
"Kamu mengirim: " . $text
);
}
http_response_code(200);
?>
9. Upload ke Hosting
Upload webhook.php ke hosting PHP yang menggunakan HTTPS.
Contoh URL:
https://domainkamu.com/bot/webhook.php
10. Mengatur Webhook
Webhook Telegram diatur melalui method setWebhook.
Gunakan token dari environment yang aman dan URL HTTPS webhook.
Jangan membagikan URL request yang mengandung token asli.
Secret Token Webhook
Telegram Bot API mendukung mekanisme secret token untuk membantu memverifikasi request webhook.
Jika digunakan, server perlu memeriksa header yang dikirim Telegram dan menolak request yang tidak cocok.
Ini menambah lapisan verifikasi terhadap endpoint webhook.
Jangan Percaya Isi Pesan
Pesan pengguna adalah input yang tidak dipercaya.
Jika teks akan:
- Masuk database.
- Dikirim ke API lain.
- Digunakan dalam command.
- Ditampilkan di HTML admin.
lakukan validasi dan encoding sesuai konteks.
Timeout
Webhook sebaiknya merespons dengan cepat. Jika proses AI atau API eksternal lama, pertimbangkan arsitektur antrean atau pemrosesan asynchronous agar Telegram tidak menunggu terlalu lama.
Logging Aman
Untuk debugging, catat informasi penting seperti jenis update dan status proses.
Jangan menulis bot token ke log.
Bot Tidak Membalas
Periksa:
- Webhook aktif.
- HTTPS valid.
- PHP tidak error.
- cURL tersedia.
- Token benar.
- Response Telegram berhasil.
Jangan Menaruh Token di GitHub
Jika token pernah masuk repository publik, anggap token sudah bocor.
Rotasi melalui BotFather lalu hapus secret dari konfigurasi source. Jika perlu, bersihkan juga history repository.
Pengembangan Selanjutnya
Bot PHP dapat dikembangkan menjadi:
- Bot FAQ.
- Bot notifikasi.
- Bot database.
- Bot AI.
- Bot customer support.
- Bot internal automation.
Kesimpulan
Telegram Bot dengan PHP bekerja dengan membaca update JSON dari Telegram, memproses logika di server, lalu memanggil Bot API untuk mengirim response.
Jaga token tetap rahasia, gunakan HTTPS, validasi input, dan siapkan logging serta error handling.
Materi berikutnya adalah cara menghubungkan API ke website dengan JavaScript.
Artikel berikutnya untuk kamu
Belum ada rekomendasi lain.
Artikel berikutnya
Cara Membuat Telegram Bot untuk Pemula →