إذا كنت تدير تطبيقًا مبنيًا بـ Laravel، يمكنك إعداد إشعار Telegram عند تسجيل الدخول في Laravel 13 لمتابعة الدخول إلى لوحة الإدارة أو النظام الداخلي. في هذا الدليل سنربط حدث المصادقة ببوت Telegram، لتصل رسالة بعد نجاح الدخول.
سننفذ التكامل خطوة بخطوة: إنشاء بوت، إعداد بياناته في البيئة، بناء خدمة صغيرة لإرسال الرسائل، ثم ربطها بحدث المصادقة واختبار النتيجة. لن نضع رمز البوت داخل الشيفرة أو نرسله إلى المتصفح.
- إشعار تلقائي عند نجاح تسجيل الدخول.
- إعدادات Telegram محفوظة خارج ملفات التطبيق العامة.
- خدمة Laravel قابلة لإعادة الاستخدام مع معالجة أساسية للأخطاء.
المتطلبات قبل البدء
تحتاج إلى مشروع Laravel 13 يعمل، واتصال إنترنت من خادم التطبيق إلى Telegram، وحساب Telegram لإنشاء البوت. سنستخدم عميل HTTP في Laravel 13 لإرسال الطلب، لذلك لا نحتاج إلى حزمة خارجية.
1. إنشاء بوت والحصول على Bot Token
إنشاء البوت من BotFather
افتح Telegram وابحث عن BotFather الرسمي لإدارة البوتات، ثم ابدأ المحادثة وأرسل الأمر التالي:
/newbot- اختر اسمًا ظاهرًا للبوت، مثل Laravel Login Alerts.
- اختر اسم مستخدم فريدًا ينتهي بـ
bot. - احتفظ بـ HTTP API Token الذي يرسله BotFather في مكان خاص.
- افتح محادثة مع البوت وأرسل
/startحتى يستطيع إرسال رسالة إليك.
الـ Token بمثابة كلمة مرور للبوت. لا تضعه في مقال أو مستودع Git، ولا تشاركه في صورة شاشة. إذا انكشف، ألغِه وأنشئ رمزًا جديدًا من BotFather.
2. معرفة chat_id وإعداد ملف .env
استخراج رقم المحادثة chat_id
يحدد chat_id المحادثة التي ستستقبل التنبيه. بعد إرسال /start إلى البوت، يمكنك قراءة تحديثاته عبر توثيق Telegram Bot API وأخذ القيمة من message.chat.id. يعمل getUpdates عند استخدام الاستطلاع، أما إذا كان البوت مضبوطًا على Webhook فلن يعمل معه في الوقت نفسه.
تعامل مع رابط الطلب كما تتعامل مع الرمز نفسه لأنه يحتوي على Token البوت.
أضف القيمتين إلى ملف .env في جذر المشروع، مع استبدال الأمثلة بالقيم الحقيقية:
TELEGRAM_BOT_TOKEN=ضع_رمز_البوت_هنا
TELEGRAM_CHAT_ID=ضع_رقم_المحادثة_هناتأكد من أن .env مستثنى من Git، ولا تضع بيانات حقيقية في ملفات الإعدادات التي ستُرفع إلى مستودع عام.
3. تعريف إعدادات Telegram
افتح config/services.php وأضف إعدادًا داخل المصفوفة التي يعيدها الملف. بهذا يقرأ التطبيق القيم من البيئة عبر إعداد مركزي:
'telegram' => [
'bot_token' => env('TELEGRAM_BOT_TOKEN'),
'chat_id' => env('TELEGRAM_CHAT_ID'),
],4. إنشاء خدمة إرسال الرسائل
أنشئ ملف الخدمة بالأمر التالي من مجلد المشروع:
php artisan make:class Services/TelegramServiceفي app/Services/TelegramService.php أضف دالة تتحقق من الإعدادات، وترسل الطلب، وتعيد نتيجة واضحة. لا نسجل محتوى الاستثناء كاملًا حتى لا تتسرب تفاصيل الاتصال أو بيانات حساسة إلى السجلات:
namespace App\Services;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
class TelegramService
{
public function sendMessage(string $message): bool
{
$token = config('services.telegram.bot_token');
$chatId = config('services.telegram.chat_id');
if (!$token || !$chatId) {
Log::warning('Telegram configuration is missing.');
return false;
}
try {
$response = Http::timeout(10)->post(
"https://api.telegram.org/bot{$token}/sendMessage",
[
'chat_id' => $chatId,
'text' => $message,
]
);
if (!$response->successful() || !$response->json('ok')) {
Log::warning('Telegram message could not be sent.', [
'status' => $response->status(),
]);
return false;
}
return true;
} catch (\Throwable) {
Log::warning('Telegram connection failed.');
return false;
}
}
}يستخدم الطلب HTTPS، ويحدد مهلة قدرها عشر ثوانٍ حتى لا يظل طلب تسجيل الدخول منتظرًا إلى أجل غير محدد. إذا تعذر الإرسال، تسجل الخدمة سببًا عامًا وتعيد false بدل تعطيل مسار الدخول.
5. ربط إشعار Telegram عند تسجيل الدخول في Laravel
أنشئ مستمعًا لحدث المصادقة الذي يصدر بعد نجاح تسجيل الدخول:
php artisan make:listener SendTelegramNotification --event="Illuminate\Auth\Events\Login"في app/Listeners/SendTelegramNotification.php جهز نص الرسالة واستدعِ الخدمة. المثال التالي يرسل الاسم والبريد ووقت الدخول؛ احذف أي حقل لا تحتاجه، خصوصًا إذا كانت سياسة الخصوصية في تطبيقك تتطلب تقليل البيانات:
namespace App\Listeners;
use App\Services\TelegramService;
use Illuminate\Auth\Events\Login;
class SendTelegramNotification
{
public function __construct(
private TelegramService $telegram
) {}
public function handle(Login $event): void
{
$user = $event->user;
$message = "تم تسجيل دخول جديد\n"
. "الاسم: " . ($user->name ?? 'غير متوفر') . "\n"
. "البريد الإلكتروني: " . ($user->email ?? 'غير متوفر') . "\n"
. "وقت الدخول: " . now()->format('Y-m-d H:i:s');
$this->telegram->sendMessage($message);
}
}7. مسح الإعدادات المؤقتة واختبار الإشعار
بعد تعديل ملف البيئة أو الإعدادات، نفّذ الأمر التالي من الطرفية:
php artisan optimize:clear- تأكد أن البوت بدأ محادثة معك عبر
/start. - راجع قيمة
TELEGRAM_CHAT_IDوتأكد من عدم وجود مسافات زائدة في بيانات البيئة. - سجّل الدخول إلى التطبيق بحساب اختبار، ثم افحص المحادثة المحددة في Telegram.
- إذا لم تصل الرسالة، راجع سجل Laravel وتحقق من اتصال الخادم بخدمة Telegram.
ملاحظات مهمة لحماية الإشعارات
- أرسل التنبيهات إلى محادثة خاصة أو مجموعة موثوقة، ولا تجعل
chat_idأو Token متاحًا في الواجهة الأمامية. - لا ترسل كلمات المرور أو رموز الجلسات أو أي أسرار ضمن الرسالة.
- أرسل أقل قدر من بيانات المستخدم اللازمة، وقيّد الوصول إلى المحادثة التي تستقبل التنبيهات.
- إذا فشل Telegram، راقب السجل وأبقِ سياسة تسجيل الدخول مستقلة عن خدمة التنبيه.
للتوسع في إعداد المصادقة وإدارة المستخدمين، يمكنك مراجعة شرح Laravel Authentication and Authorization.
ويمكنك الاستفاده من خبرة م / اكرم في كيفية انشاء بوت تليجرام وارسال الرسايل باستخدام لارافيل 12 بطريقة اخري
الخلاصة
أصبح لديك الآن مسار واضح لإرسال تنبيه Telegram بعد نجاح تسجيل الدخول: إعداد آمن للبوت، خدمة Laravel قابلة لإعادة الاستخدام، ومستمع مرتبط بحدث المصادقة. اختبره أولًا في بيئة التطوير، ثم راجع البيانات التي ترسلها قبل تفعيله في بيئة الإنتاج.









