Telegram Notifications For Laravel
 
 
 , (*1)
, (*1)
The package provides easy way to send Telegram notifications to any notifiable entity in your project.
It uses official Telegram Bot API to deliver your message directly to a user.
You can send any information you want: text, media, location or contact., (*2)
Contents
Requirements
The package has been tested on following configuration:, (*3)
- PHP version >= 7.3
- Laravel Framework version >= 5.5
Installation
To install the package you can use composer:, (*4)
composer require babenkoivan/telegram-notifications
If the package discovery is disabled, you need to register the service provider in config/app.php file:, (*5)
'providers' => [
    TelegramNotifications\TelegramServiceProvider::class    
]
To copy the package settings to config directory run:, (*6)
php artisan vendor:publish --provider='TelegramNotifications\TelegramServiceProvider'
Now you're ready to set up a bot token for your application. 
If you haven't created a bot you can make new one using BotFather. 
For more information, visit Bots: An introduction for developers page., (*7)
Let's move on and assume you have a token. 
You can configure the token either in .env file:, (*8)
TELEGRAM_BOT_TOKEN=335237666:FFF45pYTYm9HkKWByaepSpcKAUWMo2uMF_9
or in config/telegram.php file:, (*9)
<?php
return [
    'bot_token' => '335237666:FFF45pYTYm9HkKWByaepSpcKAUWMo2uMF_9',
];
Of course, the token above is just an example, you have to specify your own token., (*10)
Set up your model
To notify user or any other notifiable entity you need to use Notifiable trait with your model and define routeNotificationForTelegram method, which will return a chat_id:, (*11)
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
    use Notifiable;
    // ...
    public function routeNotificationForTelegram()
    {
        return 993344556;
    }
}
At this point, you may wonder where to get a chat_id. The answer is it's up to you! 
You can create a webhook to receive updates for your bot and collect chat ids, or you can specify ids manually for certain users., (*12)
To get started, you can send Hello! message to your bot and then get message details by requesting API method:, (*13)
curl https://api.telegram.org/bot<your_token_here>/getUpdates
You will receive a JSON in return:, (*14)
{
    "ok": true,
    "result": [
        {
            "message": {
                "chat": {
                    "id": 993344556 // this is what we were looking for 
                    // ...
                }
            }
        }
    ]
}
Usage example
if you installed the package and configured a model you're ready to make your first Telegram notification.
You can create a new notification using artisan command:, (*15)
php artisan make:notification TelegramNotification
And again, TelegramNotification here is just an example, you can specify any name you want., (*16)
Now, you can go to app/Notifications folder and you'll see TelegramNotification.php file. 
In via method specify TelegramChannel::class and initialize a new TelegramMessage instance in toTelegram method:, (*17)
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use TelegramNotifications\TelegramChannel;
use TelegramNotifications\Messages\TelegramMessage;
class TelegramNotification extends Notification
{
    use Queueable;
    public function via()
    {
        return [TelegramChannel::class];
    }
    public function toTelegram()
    {
        return (new TelegramMessage())->text('Hello, world!');
    }
}
To send the notification use notify method with notifiable entity., (*18)
Let's say we have an authenticated user and we want to send a message from a route callback.
We can do it like this:, (*19)
<?php
use \App\Notifications\TelegramNotification;
Route::post('/', function () {
    Auth::user()->notify(new TelegramNotification());
});
Advanced Usage
You can send either a single message or a message collection at once., (*20)
Single Message
Each message class represents certain type of information you can deliver to a user.
To send a message return a new instance of necessary type from toTelegram method:, (*21)
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use TelegramNotifications\TelegramChannel;
use TelegramNotifications\Messages\TelegramMessage;
class TelegramNotification extends Notification
{
    use Queueable;
    public function via()
    {
        return [TelegramChannel::class];
    }
    public function toTelegram()
    {
        // to set any required or optional field use
        // setter, which name is field name in camelCase
        return (new TelegramMessage())
            ->text('Hello, world!')
            ->disableNotification(true);
    }
}
You can also pass parameters to the constructor, to be more explicit:, (*22)
<?php
new TelegramMessage([
    'text' => 'Hello, world!',
    'disable_notification' => true
]);
Available message types are listed below., (*23)
TelegramMessage
TelegramNotifications\Messages\TelegramMessage, (*24)
| Field | Type | Description | Required | 
| text | String | Text of the message to be sent | Yes | 
| parse_mode | String | Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message | Optional | 
| disable_web_page_preview | Boolean | Disables link previews for links in this message | Optional | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramPhoto
TelegramNotifications\Messages\TelegramPhoto, (*25)
| Field | Type | Description | Required | 
| photo | String | Photo to send. Pass a file_id as String to send a photo that exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a photo from the Internet. More about sending files | Yes | 
| caption | String | Photo caption, 0-200 characters | Optional | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramAudio
TelegramNotifications\Messages\TelegramAudio, (*26)
| Field | Type | Description | Required | 
| audio | String | Audio file to send. Pass a file_id as String to send a photo that exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a photo from the Internet. More about sending files | Yes | 
| caption | String | Audio caption, 0-200 characters | Optional | 
| duration | Integer | Duration of the audio in seconds | Optional | 
| performer | String | Performer | Optional | 
| title | String | Track name | Optional | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramDocument
TelegramNotifications\Messages\TelegramDocument, (*27)
| Field | Type | Description | Required | 
| document | String | File to send. Pass a file_id as String to send a photo that exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a photo from the Internet. More about sending files | Yes | 
| caption | String | Document caption, 0-200 characters | Optional | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramSticker
TelegramNotifications\Messages\TelegramSticker, (*28)
| Field | Type | Description | Required | 
| sticker | String | Sticker to send. Pass a file_id as String to send a photo that exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a photo from the Internet. More about sending files | Yes | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramVideo
TelegramNotifications\Messages\TelegramVideo, (*29)
| Field | Type | Description | Required | 
| video | String | Video to send. Pass a file_id as String to send a photo that exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a photo from the Internet. More about sending files | Yes | 
| duration | Integer | Duration of sent video in seconds | Optional | 
| width | Integer | Video width | Optional | 
| height | Integer | Video height | Optional | 
| caption | String | Video caption, 0-200 characters | Optional | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramVoice
TelegramNotifications\Messages\TelegramVoice, (*30)
| Field | Type | Description | Required | 
| voice | String | Audio file to send. Pass a file_id as String to send a photo that exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a photo from the Internet. More about sending files | Yes | 
| caption | String | Voice message caption, 0-200 characters | Optional | 
| duration | Integer | Duration of the voice message in seconds | Optional | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramLocation
TelegramNotifications\Messages\TelegramLocation, (*31)
| Field | Type | Description | Required | 
| latitude | Float number | Latitude of location | Yes | 
| longitude | Float number | Longitude of location | Yes | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramVenue
TelegramNotifications\Messages\TelegramVenue, (*32)
| Field | Type | Description | Required | 
| latitude | Float number | Latitude of the venue | Yes | 
| longitude | Float number | Longitude of the venue | Yes | 
| title | String | Name of the venue | Yes | 
| address | String | Address of the venue | Yes | 
| foursquare_id | String | Foursquare identifier of the venue | Optional | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
TelegramNotifications\Messages\TelegramContact, (*33)
| Field | Type | Description | Required | 
| phone_number | String | Contact's phone number | Yes | 
| first_name | String | Contact's first name | Yes | 
| last_name | String | Contact's last name | Optional | 
| disable_notification | Boolean | Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound | Optional | 
Message Collection
Instead of sending one message at once you can send bunch of messages using TelegramCollection:, (*34)
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use TelegramNotifications\TelegramChannel;
use TelegramNotifications\Messages\TelegramCollection;
class TelegramNotification extends Notification
{
    use Queueable;
    public function via()
    {
        return [TelegramChannel::class];
    }
    public function toTelegram()
    {
        return (new TelegramCollection())
            ->message(['text' => 'Hello, world!'])
            ->location(['latitude' => 55.755768, 'longitude' => 37.617671])
            // ...
            ->sticker(['sticker' => 'CAADBQADJwEAAl7ylwK4Q0M5P7UxhQI']);
    }
}
Each method of the collection creates corresponding message instance and puts it in the collection.
Available methods are listed below:, (*35)