Điều kiện tiên quyết:

  • PHP đã được cài đặt và mở rộng curl đã được bật
  • Kênh Telegram công cộng đã được tạo
  • Bot Telegram đã được tạo bằng cách sử dụng BotFather
  • Bot đã được thêm vào các quản trị viên của kênh

Telegram API

Telegram cung cấp một loạt các điểm cuối API và phương thức, có thể được tìm thấy trong tài liệu.

Hôm nay chúng ta sẽ tập trung vào điểm cuối sendMessage. Nó gửi một số văn bản {TEXT} đến kênh cụ thể {CHANNEL_ID} bằng bot {BOT_API_TOKEN}

https://api.telegram.org/bot{BOT_API_TOKEN}/sendMessage?chat_id={CHANNEL_ID}&text={TEXT}

Có nhiều cách để gọi điểm cuối này và gửi một tin nhắn đến kênh trong dự án PHP. Chúng ta sẽ bao gồm 5 cách.

Yêu cầu HTTP với cURL

<?php

$botApiToken = 'your bot api token';
$channelId ='your channel id';
$text = 'Hello, I am from PHP!';

$query = http_build_query([
    'chat_id' => $channelId,
    'text' => $text,
]);
$url = "https://api.telegram.org/bot{$botApiToken}/sendMessage?{$query}";

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'GET',
));
curl_exec($curl);
curl_close($curl);

Kiểu OOP

Cài đặt:

composer require curl/curl

Sử dụng:

<?php

require 'vendor/autoload.php';

$botApiToken = 'your bot api token';
$channelId ='your channel id';
$text = 'Hello, I am from PHP!';

$query = http_build_query([
    'chat_id' => $channelId,
    'text' => $text,
]);
$url = "https://api.telegram.org/bot{$botApiToken}/sendMessage?{$query}";

$curl = new \Curl\Curl();
$curl->get($url);

Một dòng kỳ diệu bằng cách sử dụng file_get_contents

<?php

$botApiToken = 'your bot api token';
$channelId = 'your channel id';
$text = 'Hello, I am from PHP file_get_contents!';
$query = http_build_query([
    'chat_id' => $channelId,
    'text' => $text,
]);
$url = "https://api.telegram.org/bot{$botApiToken}/sendMessage?{$query}";
file_get_contents($url);

Symfony HTTP client

Symfony là một trong những framework PHP phổ biến nhất. Nó cung cấp nhiều thành phần khác nhau sẵn có và một trong số đó là HTTP Client. Nó cho phép bạn thực hiện các yêu cầu HTTP một cách dễ dàng.

Cài đặt: 

composer require symfony/http-client

Sử dụng:

<?php

require 'vendor/autoload.php';

use Symfony\Component\HttpClient\HttpClient;

$botApiToken = 'your bot api token';
$channelId ='your channel id';
$text = 'Hello, I am from Symfony HTTP Client!';

$client = HttpClient::create([
    'base_uri' => 'https://api.telegram.org',
]);

$client->request('GET', "/bot{$botApiToken}/sendMessage", [
    'query' => [
        'chat_id' => $channelId,
        'text' => $text,
    ],
]);

 

Bên trong ứng dụng Symfony

Chuẩn bị client scoped bên trong config/packages/framework.yaml

framework:
    http_client:
        scoped_clients:
            telegram.client:
                base_uri: 'https://api.telegram.org'

 

Và sử dụng nó bên trong dịch vụ của bạn

<?php

namespace App;

use Symfony\Contracts\HttpClient\HttpClientInterface;

class YourService
{
    public function __construct(
        private readonly HttpClientInterface $telegramClient,
    )
    {
    }

    public function sendMessage(string $text): void
    {
        $botApiToken = 'your bot api token';
        $channelId ='your channel id';

        $this->telegramClient->request('GET', "/bot{$botApiToken}/sendMessage", [
            'query' => [
                'chat_id' => $channelId,
                'text' => $text,
            ],
        ]);
    }
}

Symfony Telegram Notifier.

Một thành phần Symfony khác có thể gửi một tin nhắn đến kênh Telegram là Telegram Notifier.

Cài đặt: 

composer require symfony/telegram-notifier

Sử dụng:

<?php

require 'vendor/autoload.php';

use Symfony\Component\Notifier\Bridge\Telegram\TelegramTransport;
use Symfony\Component\Notifier\Chatter;
use Symfony\Component\Notifier\Message\ChatMessage;

$botApiToken = 'your bot api token';
$channelId ='your channel id';

$text = 'Hello, I am from Symfony Telegram Notifier!';

$telegramTransport = new TelegramTransport($botApiToken, $channelId);
$chatter = new Chatter($telegramTransport);
$chatMessage = new ChatMessage($text);
$chatter->send($chatMessage);

 

Bên trong ứng dụng Symfony

Cấu hình transport thông báo cho chatter bên trong config/packages/framework.yaml

parameters:
  env(TELEGRAM_DSN): 'telegram://BOT_API_TOKEN@default?channel=CHANNEL_ID'

framework:
    notifier:
        chatter_transports:
            telegram: '%env(TELEGRAM_DSN)%'

Và sử dụng nó bên trong dịch vụ của bạn

<?php

namespace App;

use Symfony\Component\Notifier\ChatterInterface;
use Symfony\Component\Notifier\Message\ChatMessage;

class YourService
{
    public function __construct(
        private readonly ChatterInterface $telegramChatter
    )
    {
    }

    public function sendMessage(string $text): void
    {
        $this->telegramChatter->send(new ChatMessage($text));
    }
}

Telegram Bot SDK

Telegram Bot SDK cho phép bạn dễ dàng phát triển Telegram Bots trong PHP! Hỗ trợ framework Laravel và đi kèm với các tiện ích bổ sung để tăng cường trải nghiệm

phát triển bot của bạn.

Cài đặt: 

composer require irazasyed/telegram-bot-sdk

Sử dụng:

<?php

require 'vendor/autoload.php';

use Telegram\Bot\Api;

$botApiToken = 'your bot api token';
$channelId ='your channel id';

$telegram = new Api($botApiToken);
$telegram->sendMessage([
    'chat_id' => $channelId,
    'text' => $text,
]);

Bên trong ứng dụng Laravel

php artisan vendor:publish --tag="telegram-config"
<?php

namespace App;

use Telegram\Bot\Api;

class YourService
{
    public function __construct(private readonly Api $telegram)
    {
    }

    public function sendMessage(string $channelId, string $text): void
    {
        $this->telegram->sendMessage([
            'chat_id' => $channelId,
            'text' => $text,
        ]);
    }
}

 

Tổng kết

Có nhiều cách để đạt được cùng một mục tiêu. Với nhiều lựa chọn có sẵn, không có cách gửi một tin nhắn Telegram bằng PHP nào là "đúng" tuyệt đối. Sự lựa chọn của bạn phụ thuộc vào nhu cầu của bạn và các công nghệ mà bạn đang làm việc. Bài viết này chỉ ra năm cách đơn giản để gửi tin nhắn đến Telegram bằng PHP, thực tế có nhiều hơn năm cách và việc sử dụng cách nào là tùy thuộc vào bạn.