Download the PHP package govorun/framework without Composer

On this page you can find all versions of the php package govorun/framework. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package framework

Govorun Framework

Мульти-мессенджер бот-фреймворк на PHP 8.3+. Один код — разные мессенджеры (на сегодня поддерживается Telegram; интерфейсы готовы под Viber/WhatsApp). Используется визуальным билдером govorun-factory как целевой рантайм для сгенерированных проектов.

v3.x (breaking, краткая шпаргалка по миграции с v1.x):

  • Keyboard::button() / ->row() удалены. Только Keyboard::make()->buttons([[Button::make('…')->action('…'), …], …]).
  • Button::make(...) + fluent: ->action(), ->url(), ->requestContact(), ->requestLocation().
  • Keyboard::reply()->resize()->oneTime() — fluent-флаги для reply-клавиатуры.
  • Step::ask(string|OutgoingMessage $msg, Closure|Keyboard|null $keyboard) — клавиатуру можно передавать напрямую.
  • В Controller и Flow подмешан трейт MakesHttpCalls$this->http()->connection('slug')->....

Быстрый старт

Положите токен в .env:

Установите вебхук:

Подробный пользовательский гид — govorun-skeleton. Если бот сгенерирован фабрикой — просто разверните ZIP, composer install, заполните .env и php govorun webhook:install.


Архитектура

Жизненный цикл запроса

Структура пакета


Application

Ядро. Наследует Illuminate\Container\Container.

Метод Описание
basePath($path) Базовый путь проекта
configPath($path) Путь к config/
storagePath($path) Путь к storage/
databasePath($path) Путь к database/
register(ServiceProvider) Зарегистрировать провайдер
boot() Загрузить все провайдеры
handleConsole() Обработать CLI-запрос
handleWebhook(Request) Обработать вебхук
loadRoutes() Загрузить routes/messenger.php

Маршрутизация

DSL

Route::command('start', ...) нормализуется к /start — слеш можно опускать.

Приоритет

event > command > action > referral > media > location > contact > pattern > phrase > fallback

Middleware

Вложенные phrase

Алиасы


Controller

Базовый класс контроллера бота.

handle() вызывается без аргументов; альтернатива — __invoke().

Свойство / метод Тип Описание
$this->message IncomingMessage Входящее сообщение (предпочтительный доступ; $this->incomingMessage — deprecated алиас)
$this->driver MessengerDriver Драйвер мессенджера
$this->state StateAccessor PersistentState (write-through в storage), при отсутствии storage — пустая StateData
reply(string $text) void Отправить текстовый ответ
send(OutgoingMessage $msg) void Отправить сообщение (с клавиатурой/медиа)
user() UserDto Данные отправителя
param(string $key) ?string Параметр callback-действия (для Route::action())
startFlow(string $class) void Запустить Flow-диалог
http() (через MakesHttpCalls) HttpManager Доступ к подключениям ($this->http()->connection('slug')->...)

Auto-finalize inline-клавиатуры

При отправке через send() сообщения с inline-клавиатурой, содержащей action-кнопки, контроллер сохраняет в storage контекст (message_id, original_text, parse_mode, текстовые лейблы кнопок). На следующем Action-сообщении исходное сообщение редактируется — клавиатура убирается, к тексту дописывается (выбрано: <label>). Ошибки driver->edit() не пробрасываются — это «вежливая» финализация.

Reply-клавиатуры, Keyboard::remove() и кнопки без action (только URL/requestContact/requestLocation) контекст не пишут.


Messaging

IncomingMessage

Свойство Тип Описание
id string ID сообщения
chatId string ID чата
driverName string Имя драйвера (telegram, …)
text ?string Текст
user UserDto Отправитель
type ContentType Тип контента
action ?string Callback-action
actionParams ?array Параметры action
event ?string Имя события
media ?MediaDto Медиа
location ?LocationDto Геолокация
contact ?ContactDto Контакт
referral ?string Реферальный код
raw array Сырое тело апдейта

ContentType (enum)

Text | Action | Media | Location | Contact | Event.

OutgoingMessage

Keyboard

Media

Telegram-драйвер дополнительно умеет отправлять локальные файлы — если в OutgoingMessage::$media['url'] лежит существующий локальный путь (а не URL), используется multipart-upload через Bot API.

Button


DTO

UserDto

Свойство Тип
id string
firstName ?string
lastName ?string
username ?string
phone ?string
locale ?string
raw array

MediaDto / LocationDto / ContactDto

MediaDto: type, url, fileId, mimeType, fileSize, raw. LocationDto: latitude, longitude, raw. ContactDto: phone, firstName, lastName, userId, raw.


Flow (пошаговые диалоги)

Многошаговый диалог. Состояние сохраняется между шагами в StateStorage.

Свойства

Свойство Тип Описание
$steps array Имена шагов в порядке выполнения
$interruptCommands array Команды, прерывающие flow
$interruptOnEvent bool Прерывать при событии
$state StateData In-memory данные шагов (сохраняются после ask/receive)

Методы

Метод Описание
start() Запуск с первого шага
resume() Возобновление текущего шага (вызывает FlowHandler)
nextStep(?string $name) Переход. Без аргумента — следующий по $steps; с именем — прыжок (goTo). Если текущий последний — completeFlow()
reply(string $text) Текстовый ответ
send(OutgoingMessage $msg) Отправка сложного сообщения
validator(?string $value) Создать Validator с автоматической отправкой ошибки пользователю
http() HttpManager (через трейт MakesHttpCalls)
onComplete() / onCancel() Хуки

Step

Клавиатура-Closure исполняется в bind'е Flow, поэтому имеет доступ к $this->state.

Прерывание

shouldInterrupt(IncomingMessage) возвращает true когда:

  1. Активна ask_keyboard (есть __ask_keyboard_ctx в state) и пришёл текст — это значит пользователь не нажал кнопку, а написал что-то ещё. События в этом режиме не прерывают.
  2. $interruptOnEvent === true и пришло событие.
  3. Текст совпадает с одной из $interruptCommands (или начинается на <cmd>).

Auto-finalize ask_keyboard

Если в шаге задана inline-клавиатура с action-кнопками, при отправке ask контекст сохраняется в state.__ask_keyboard_ctx. На nextStep() / onCancel() исходное сообщение редактируется: (выбрано: <label>) или (отменено). При прерывании по команде до выбора — финализация с (отменено).


State Storage

Класс Описание
FileStateStorage JSON-файлы в storage/state/
DatabaseStateStorage Таблица govorun_states (создаётся миграцией)
CacheStateStorage Кеш Illuminate с TTL

Драйвер выбирается в config/state.php: driver (file/database/cache) + ttl (секунды).

StateAccessor

Общий контракт чтения/записи произвольных ключей состояния. Две реализации:

Реализация Где Семантика записи
StateData $this->state во Flow In-memory, флашится в storage в конце ask/receive
PersistentState $this->state в Controller Write-through — каждый set() сразу пишет в storage
Метод Описание
get(string $key, mixed $default) Получить значение
set(string $key, mixed $value) Сохранить значение
has(string $key) Проверить наличие
all() Получить весь массив

HTTP

ConnectionClient (рекомендуемый путь)

Подключения к внешним API описаны в config/connections.php:

Трейт MakesHttpCalls подмешан в Controller и Flow:

Тип auth Конфиг
none (без auth)
bearer ['type' => 'bearer', 'token' => '…'] → заголовок Authorization: Bearer …
api_key (header) ['type' => 'api_key', 'in' => 'header', 'key' => 'X-Api-Key', 'value' => '…']
api_key (query) ['type' => 'api_key', 'in' => 'query', 'key' => 'api_key', 'value' => '…']
basic ['type' => 'basic', 'login' => '…', 'password' => '…']

Опции Guzzle (json, form_params, query, headers, …) пробрасываются через второй аргумент. Таймаут по умолчанию — 10 секунд, http_errors=false (не бросает исключения на 4xx/5xx).

HttpResponse:

Метод Описание
status(): int HTTP-статус
successful(): bool 2xx
failed(): bool не 2xx
body(): string сырое тело
json(): ?array JSON-декод (null при ошибке)

ApiClient (абстрактный, для собственных клиентов)

Альтернатива для случаев, когда удобнее иметь типизированный клиент-наследник, а не вызывать connection('slug'):

Метод Описание
get(string $uri, array $params) GET
post(string $uri, array $data) POST
put(string $uri, array $data) PUT
delete(string $uri) DELETE

Validator

Govorun\Support\Validator — fluent-валидатор пользовательского ввода с lazy-load дефолтов из resources/validation-messages.json (синхронизирован с govorun-factory/resources/validation-messages.json — править одновременно).

В Flow есть шорткат $this->validator($value) — он сам отправит ошибку пользователю через errorHandler. Терминал — ->fails(): bool (true = ошибка уже отправлена пользователю):

Доступные правила: required, email, string, numeric, integer, url, phone, regex, min, max, between, in, date. Полный список — src/Support/Validator.php. Шаблоны сообщений — resources/validation-messages.json.


Middleware

Middleware складываются в pipeline. Если $next не вызван — цепочка прерывается.


Request

Метод Описание
Request::capture() Создать из глобальных переменных
getContent() Сырое тело
json() Декодированный JSON
header(string $name) Значение заголовка
method() HTTP-метод
uri() Полный URI
path() Путь без query
query(string $key, $default) Параметр строки запроса

ServiceProvider

Подключение в config/app.php:


MessengerDriver (интерфейс)

Метод Описание
verifyWebhook(Request) Проверить подпись запроса
parseUpdate(Request) Распарсить в IncomingMessage
send(OutgoingMessage) Отправить сообщение (вернуть ?string ID отправленного)
edit(string $id, OutgoingMessage) Редактировать сообщение
delete(string $id, string $chatId) Удалить сообщение
installWebhook(string $url) Установить вебхук
removeWebhook() Удалить вебхук
getUser(string $id) Получить данные пользователя

Telegram-драйвер дополнительно реализует методы для bot:profile-sync: setMyName, setMyShortDescription, setMyDescription, setMyCommands, setMyProfilePhoto, removeMyProfilePhoto.


CLI-команды

Команда Описание
php govorun webhook:install Установить вебхуки для активных драйверов
php govorun webhook:remove Удалить вебхуки
php govorun migrate Запустить миграции БД
php govorun make:controller {name} Создать контроллер из stub'а
php govorun make:flow {name} Создать Flow-диалог
php govorun make:api-client {name} Создать API-клиент
php govorun state:clear Очистить состояния Flow
php govorun bot:profile-sync Идемпотентная синхронизация Telegram-профиля (name / short_description / description / commands / photo) из config/bot_profile.php и storage/app/bot-profile.{jpg,mp4}. Флаги --only=<sec>... / --skip=<sec>...
php govorun test Запустить тесты проекта

Тестирование

В src/Testing/ лежат TestCase, FakeDriver, FakeMessenger, FakeApiClient и трейты — используются как в тестах фреймворка, так и из проектов-потребителей.

Лицензия

MIT


All versions of framework with dependencies

PHP Build Version
Package Version
Requires php Version ^8.3
illuminate/container Version ^11.0
illuminate/config Version ^11.0
illuminate/support Version ^11.0
illuminate/events Version ^11.0
illuminate/database Version ^11.0
illuminate/cache Version ^11.0
illuminate/console Version ^11.0
illuminate/log Version ^11.0
guzzlehttp/guzzle Version ^7.0
vlucas/phpdotenv Version ^5.6
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package govorun/framework contains the following files

Loading the files please wait ...