AI & Automation

Cara Membuat Telegram Bot dengan PHP

Pelajari cara membuat Telegram Bot dengan PHP menggunakan Bot API, webhook, sendMessage, membaca update JSON, command sederhana, logging aman, dan pengelolaan bot token.

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.

Topik: #Automation #Bot PHP #PHP #Telegram API #Telegram Bot #Webhook

Artikel berikutnya

Cara Membuat Telegram Bot untuk Pemula