Đ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.