راهنمای سریع استفاده از ربات تلگرام در لاراول Laravel Telegram Bot

در این مقاله خیلی سریع وخلاصه میریم سراغ ایجاد ربات و اتصال اون به لاراول.
توسط کد زیر پکیج کار با تلگرام رو به لاراول اضافه کنین:

composer require irazasyed/telegram-bot-sdk

حالا به آرایه providers که در مسیر config/app.php هست اضافه میکنیم.

Telegram\Bot\Laravel\TelegramServiceProvider::class,

حالا به آرایه aliases کد زیر رو اضافه میکنیم تا Telegram به فاساد هامون اضافه بشه.

 'Telegram' => Telegram\Bot\Laravel\Facades\Telegram::class,

حالا که سرویس و فاساد اون رو اضافه کردیم فایل کانفیگ تلگرام رو با دستور زیر انتشار میدیم (میاریم به فولدر config)

php artisan vendor:publish --provider="Telegram\Bot\Laravel\TelegramServiceProvider"

حالا میریم به تلگرام و ربات پدرخانده @BotFather رو استارت میزنیم با دستور /newbot یک ربات جدید ایجاد میکنیم. اول اسم ربات و دوم نام کاربری اون رو وارد میکنیم در آخر هم وقتی ربات به درستی ایجاد شد، تلگرام کد token HTTP API میده که بهش تو فایل .env نیاز داریم و به صورت زیر در این فایل وارد میکنیم:

TELEGRAM_BOT_TOKEN=525012101:AAEwy9R1SCpq0V_Bpkgqm9Z4nbrWZaNt_Kg

خب حالا نیاز به یک کانال تلگرام داریم که رباتمون رو داخلش ادد کنیم.

به فایل config/telegram.php میریم و در قسمت ربات های نام رباتمون رو مینویسیم (قسمت username). کد زیر

'bots' => [
    'mybot' => [
        'username' => 'tutsforwebbot',
        'token' => env('TELEGRAM_BOT_TOKEN', ''),
        'certificate_path' => env('TELEGRAM_CERTIFICATE_PATH', ''),
        'webhook_url' => env('TELEGRAM_WEBHOOK_URL', ''),
        'commands' => [
        ],
    ],
],

برای بروز رسانی کشمون هم از دستور زیر استفاده میکنیم:

php artisan config:cache

در تلگرام هر چت (کانال، چت، گروه پی وی یا…) یه اتاق گفتگو حساب میشه و برای ارسال پیام توسط رباط ما نیاز به شماره اون اتاق داریم که البته اسمش chat_id هست. برای اینکه شماره اتاق گفتگو رو پیدا کنیم و کار با رباط تلگرام یه کنترلر برای رباط تلگرام ایجاد میکنیم:

php artisan make:controller TelegramBotController

و کد های زیر رو به کنترلرمون اضافه میکنیم

<?php
 
namespace App\Http\Controllers;
 
use Telegram\Bot\Laravel\Facades\Telegram;
 
class TelegramBotController extends Controller
{
    public function updatedActivity()
    {
        $activity = Telegram::getUpdates();
        dd($activity);
    }
}

کد بالا پیام های اتاق گفتگو رو بصورت لاگ نمایش میده و همچنین شماره اون رو. با مسیر زیر کنترلرمون رو فعال میکنیم:

Route::get('/updated-activity', 'TelegramBotController@updatedActivity');

حالا به مرورگر میریم و آدرس /updated-activity رو تایپ میکنیم، اگر کانال ما خالی باشه مقدار [] برمیگرده ولی وقتی یک پیام ایجاد کنیم (خودمون یک پیام در کانال منتشر کنیم) و دوباره تست میگیریم. خروجی شبیه این میشه:

array:1 [▼
  ۰ => Update {#348 ▼
    #items: array:2 [▼
      "update_id" => 21432106
      "channel_post" => array:4 [▼
        "message_id" => 12
        "chat" => array:4 [▼
          "id" => -1001361379586
          "title" => "Hamidreza bot test"
          "username" => "hamidrezabot_test"
          "type" => "channel"
        ]
        "date" => 1568741639
        "text" => "SalamDonya"
      ]
    ]
  }
]

اگر قبلا پیامی در گروه فرستاده بودین آخرین ایندکس رو چک کنین. در این آرایه در قسمت ایندکس chat قسمت id یک شماره نوشته شده -۱۰۰۱۳۶۱۳۷۹۵۸۶ این شماره رو کپی میکنیم و در فایل .env متغیر زیر رو اضافه میکنیم

TELEGRAM_CHANNEL_ID=-1001361379586

و سپس کش رو دوباره ریفرش میکنیم

php artisan config:cache

حالا به کنترلر TelegramBotController متد زیر رو اضافه میکنیم

public function sendMessage()
    {
        Telegram::sendMessage([
            'chat_id' => -1001361379586,//env('TELEGRAM_CHANNEL_ID', ''),
            'parse_mode' => 'HTML',
            'text' => 'اولین پیام تست ربات تلگرام'
        ]);
    }

البته من مستقیم شماره chat_id رو وارد کردم ولی شما میتنین از متغیر محیطی .env استفاده کنین که کدشو کامنت کردم.
آدرس sendMessage رو در روت خودمون وارد میکنیم و بعد در مرورگر تست میکنیم.

Route::get('/sendMessage', 'TelegramBotController@sendMessage');

 

منبع: https://tutsforweb.com/sending-notifications-to-telegram-messenger-with-laravel

چطور با استفاده از فایل .htaccess آدرس www در ابتدای دامنه را حذف کنیم؟

برای حذف www از ابتدای آدرس دامنه میتونین کد زیر رو به فایل .htaccess خودتون اضافه کنین:

<IfModule mod_rewrite.c>
    RewriteBase /
	RewriteEngine On
	RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
	RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

اگر مطلب چطور با استفاده از فایل .htaccess ترافیک پرتکل HTTP را به HTTPS منتقل کنیم؟ رو خونده باشید و بخواین از هر دو کد استفاده کنین، کد زیر ترکیبی از هر دو کد هست. و اینکه خط ۶ و ۷ رو هم میتونید حذف کنین، به عبارتی نیازی نیست چون در خط ۵ تمامیه درخواست ها به پرتکل https منتقل شده.

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteBase /
	RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
	RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

 

چطور با استفاده از فایل .htaccess ترافیک پرتکل HTTP را به HTTPS منتقل کنیم؟

با قرار دادن کن زیر به راحتی میشه ترافیک رو از HTTP به HTTPS منتقل کرد:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

اگه مطلب چطور با استفاده از فایل .htaccess آدرس www در ابتدای دامنه را حذف کنیم؟ رو خونده باشید و بخواین از هر دو کد استفاده کنین، کد زیر ترکیبی از هر دو کد هست. و اینکه خط ۶ و ۷ رو هم میتونید حذف کنین، به عبارتی نیازی نیست چون در خط ۵ تمامیه درخواست ها به پرتکل https منتقل شده.

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteBase /
	RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
	RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>