Documentation

TelegramBotHandler extends AbstractProcessingHandler
in package

Handler sends logs to Telegram using Telegram Bot API.

How to use:

  1. Create a Telegram bot with https://telegram.me/BotFather;
  2. Create a Telegram channel or a group where logs will be recorded;
  3. Add the created bot from step 1 to the created channel/group from step 2.

In order to create an instance of TelegramBotHandler use

  1. The Telegram bot API key from step 1
  2. The channel name with the @ prefix if you created a public channel (e.g. @my_public_channel), or the channel ID with the -100 prefix if you created a private channel (e.g. -1001234567890), or the group ID from step 2 (e.g. -1234567890).
Tags
link
https://core.telegram.org/bots/api
author

Mazur Alexandr alexandrmazur96@gmail.com

Table of Contents

Constants

AVAILABLE_PARSE_MODES  = ['HTML', 'MarkdownV2', 'Markdown']
The available values of parseMode according to the Telegram api documentation
BOT_API  = 'https://api.telegram.org/bot'
MAX_MESSAGE_LENGTH  = 4096
The maximum number of characters allowed in a message according to the Telegram api documentation

Properties

$bubble  : bool
$formatter  : FormatterInterface|null
$level  : Level
$processors  : array<string|int, callable>
$apiKey  : string
Telegram bot access token provided by BotFather.
$channel  : string
Telegram channel name.
$delayBetweenMessages  : bool
Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests).
$disableNotification  : bool|null
Sends the message silently. Users will receive a notification with no sound.
$disableWebPagePreview  : bool|null
Disables link previews for links in the message.
$parseMode  : string|null
The kind of formatting that is used for the message.
$splitLongMessages  : bool
True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages.
$topic  : int|null
Telegram message thread id, unique identifier for the target message thread (topic) of the forum; for forum supergroups only See how to get the `message_thread_id` https://stackoverflow.com/a/75178418

Methods

__construct()  : mixed
__destruct()  : mixed
__sleep()  : mixed
close()  : void
Closes the handler.
delayBetweenMessages()  : $this
Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests).
disableNotification()  : $this
disableWebPagePreview()  : $this
getBubble()  : bool
Gets the bubbling behavior.
getFormatter()  : FormatterInterface
getLevel()  : Level
Gets minimum logging level at which this handler will be triggered.
handle()  : bool
Handles a record.
handleBatch()  : void
Handles a set of records at once.
isHandling()  : bool
Checks whether the given record will be handled by this handler.
popProcessor()  : callable
pushProcessor()  : HandlerInterface
reset()  : void
setBubble()  : $this
Sets the bubbling behavior.
setFormatter()  : HandlerInterface
setLevel()  : $this
Sets minimum logging level at which this handler will be triggered.
setParseMode()  : $this
setTopic()  : $this
splitLongMessages()  : $this
True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages.
getDefaultFormatter()  : FormatterInterface
Gets the default formatter.
processRecord()  : LogRecord
resetProcessors()  : void
send()  : void
Send request to @link https://api.telegram.org/bot on SendMessage action.
sendCurl()  : void
write()  : void
Writes the (already formatted) record down to the log of the implementing handler
handleMessageLength()  : array<string|int, string>
Handle a message that is too long: truncates or splits into several

Constants

AVAILABLE_PARSE_MODES

The available values of parseMode according to the Telegram api documentation

private mixed AVAILABLE_PARSE_MODES = ['HTML', 'MarkdownV2', 'Markdown']

MAX_MESSAGE_LENGTH

The maximum number of characters allowed in a message according to the Telegram api documentation

private mixed MAX_MESSAGE_LENGTH = 4096

Properties

$processors

protected array<string|int, callable> $processors = []
Tags
phpstan-var

array<(callable(LogRecord): LogRecord)|ProcessorInterface>

$apiKey

Telegram bot access token provided by BotFather.

private string $apiKey

Create telegram bot with https://telegram.me/BotFather and use access token from it.

$channel

Telegram channel name.

private string $channel

Since to start with '@' symbol as prefix.

$delayBetweenMessages

Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests).

private bool $delayBetweenMessages

$disableNotification

Sends the message silently. Users will receive a notification with no sound.

private bool|null $disableNotification

$disableWebPagePreview

Disables link previews for links in the message.

private bool|null $disableWebPagePreview

$parseMode

The kind of formatting that is used for the message.

private string|null $parseMode

See available options at https://core.telegram.org/bots/api#formatting-options or in AVAILABLE_PARSE_MODES

$splitLongMessages

True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages.

private bool $splitLongMessages

False - truncates a message that is too long.

$topic

Telegram message thread id, unique identifier for the target message thread (topic) of the forum; for forum supergroups only See how to get the `message_thread_id` https://stackoverflow.com/a/75178418

private int|null $topic

Methods

__construct()

public __construct(string $apiKey, string $channel[, mixed $level = Level::Debug ][, bool $bubble = true ][, string|null $parseMode = null ][, bool|null $disableWebPagePreview = null ][, bool|null $disableNotification = null ][, bool $splitLongMessages = false ][, bool $delayBetweenMessages = false ][, int $topic = null ]) : mixed
Parameters
$apiKey : string

Telegram bot access token provided by BotFather

$channel : string

Telegram channel name

$level : mixed = Level::Debug

The minimum logging level at which this handler will be triggered

$bubble : bool = true

Whether the messages that are handled can bubble up the stack or not

$parseMode : string|null = null
$disableWebPagePreview : bool|null = null
$disableNotification : bool|null = null
$splitLongMessages : bool = false

Split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages

$delayBetweenMessages : bool = false

Adds delay between sending a split message according to Telegram API

$topic : int = null

Telegram message thread id, unique identifier for the target message thread (topic) of the forum

Tags
throws
MissingExtensionException

If the curl extension is missing

__destruct()

public __destruct() : mixed

close()

Closes the handler.

public close() : void
Tags
inheritDoc

delayBetweenMessages()

Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests).

public delayBetweenMessages([bool $delayBetweenMessages = false ]) : $this
Parameters
$delayBetweenMessages : bool = false
Return values
$this

disableNotification()

public disableNotification([bool|null $disableNotification = null ]) : $this
Parameters
$disableNotification : bool|null = null
Return values
$this

disableWebPagePreview()

public disableWebPagePreview([bool|null $disableWebPagePreview = null ]) : $this
Parameters
$disableWebPagePreview : bool|null = null
Return values
$this

getBubble()

Gets the bubbling behavior.

public getBubble() : bool
Return values
bool

true means that this handler allows bubbling. false means that bubbling is not permitted.

getLevel()

Gets minimum logging level at which this handler will be triggered.

public getLevel() : Level
Return values
Level

handle()

Handles a record.

public handle(LogRecord $record) : bool
Parameters
$record : LogRecord

The record to handle

Tags
inheritDoc
Return values
bool

true means that this handler handled the record, and that bubbling is not permitted. false means the record was either not processed or that this handler allows bubbling.

handleBatch()

Handles a set of records at once.

public handleBatch(array<string|int, mixed> $records) : void
Parameters
$records : array<string|int, mixed>

The records to handle

Tags
inheritDoc

isHandling()

Checks whether the given record will be handled by this handler.

public isHandling(LogRecord $record) : bool
Parameters
$record : LogRecord

Partial log record having only a level initialized

Tags
inheritDoc
Return values
bool

setBubble()

Sets the bubbling behavior.

public setBubble(bool $bubble) : $this
Parameters
$bubble : bool

true means that this handler allows bubbling. false means that bubbling is not permitted.

Return values
$this

setLevel()

Sets minimum logging level at which this handler will be triggered.

public setLevel(Level|LogLevel::* $level) : $this
Parameters
$level : Level|LogLevel::*

Level or level name

Tags
phpstan-param

value-ofLevel::VALUES|value-ofLevel::NAMES|Level|LogLevel::* $level

Return values
$this

setParseMode()

public setParseMode([string|null $parseMode = null ]) : $this
Parameters
$parseMode : string|null = null
Return values
$this

setTopic()

public setTopic([int $topic = null ]) : $this
Parameters
$topic : int = null
Return values
$this

splitLongMessages()

True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages.

public splitLongMessages([bool $splitLongMessages = false ]) : $this

False - truncates a message that is too long.

Parameters
$splitLongMessages : bool = false
Return values
$this

send()

Send request to @link https://api.telegram.org/bot on SendMessage action.

protected send(string $message) : void
Parameters
$message : string

sendCurl()

protected sendCurl(string $message) : void
Parameters
$message : string

write()

Writes the (already formatted) record down to the log of the implementing handler

protected write(LogRecord $record) : void
Parameters
$record : LogRecord
Tags
inheritDoc

handleMessageLength()

Handle a message that is too long: truncates or splits into several

private handleMessageLength(string $message) : array<string|int, string>
Parameters
$message : string
Return values
array<string|int, string>

        
On this page

Search results