wekser/laragram
Laragram is a Laravel package that wraps the Telegram Bot API in a clean, Laravel-native way. Build Telegram bots with simple configuration, fluent message sending, webhook handling, and easy integration into your existing Laravel app.
The package is a Laravel/PHP Telegram integration surface, with BotClient responsible for outbound message delivery and Support\ReplyMarkup providing inline-keyboard helpers. v2.3.2 is a narrow resilience fix: when Telegram rejects a message with 400 BUTTON_USER_PRIVACY_RESTRICTED, BotClient now strips tg://user?id=… URL buttons (and empty rows), logs a warning naming them, and resends the message without those buttons. This fits the existing architecture because it is contained inside the client send path and adds a small utility API rather than changing message construction contracts. Integration feasibility is high: the release is explicitly non-breaking and requires only composer update. Technical risk is low but not zero: the package cannot identify which specific button caused the refusal, so it drops every tg://user?id=… button in that message. That is a deliberate degradation path, not a silent failure, but it changes user-visible output for privacy-restricted users. Key questions: which Laravel and PHP versions are supported by this release; is the warning routed through the application’s configured logger; does the retry happen for queued notifications and all BotClient send paths; are ReplyMarkup::isUserLinkButton() and withoutUserLinks() covered by tests; and does the implementation ever risk duplicate delivery beyond the documented “first request was refused” case?
Stack fit is straightforward for a Laravel/PHP application already using this package for Telegram notifications: upgrade via Composer, no migrations, no config changes, and no application code changes required to receive the fix. The migration path is a routine dependency update, ideally pinned through the existing composer.json constraint and validated in staging before production. Compatibility risk is low because the release is non-breaking, but product behavior changes for messages containing tg://user?id=… buttons. Sequencing should be: update in a non-production environment; send a test notification to a user whose privacy settings block profile links; confirm the message is delivered without the profile button and that a warning is logged; confirm messages without such buttons still behave identically; then roll to production. Teams that consider the profile button business-critical should add a fallback contact mention in the message text before or alongside the upgrade, since Telegram does not reveal which button was rejected and the package will remove all tg://user?id=… buttons from that message.
Maintenance effort is minimal: one dependency update, no schema or configuration work, and no new runtime service. Support impact is moderate only where profile buttons are part of the product expectation: users may now receive messages without the button, and support staff should understand that this is an intentional fallback for privacy-restricted accounts. The new warning log is operationally useful but should be routed to an observable channel if delivery degradation matters; otherwise the fallback occurs without visibility. Scaling impact is negligible—the retry only happens on a specific Telegram refusal and does not add steady-state overhead. Failure modes are bounded: other Telegram errors still surface as before, non-user tg:// links are left alone, and the release states there is no double delivery because the first request was refused. The main residual risk is product-level, not technical: if the profile button is the primary way users reach a contact, dropping it may reduce utility even though the message arrives. Ramp-up is very low for engineers and moderate for support/product stakeholders who need to know that privacy settings can now cause button-stripping rather than total send failure.
How can I help you explore Laravel packages today?