feat: tg bot start message customization

This commit is contained in:
2025-12-14 17:02:35 +03:00
parent 05af4949bf
commit 152e6d715b
5 changed files with 71 additions and 3 deletions

View File

@@ -50,6 +50,11 @@ export const useSettingsStore = defineStore('settings', {
text_empty_cart: '', text_empty_cart: '',
text_order_created_success: '', text_order_created_success: '',
zero_price_text: '', zero_price_text: '',
start_image: '',
start_message: '',
start_button: {
text: '',
},
}, },
sliders: { sliders: {

View File

@@ -16,11 +16,32 @@
Текст, который будет выводиться вместо цены, в случае если цена = 0. Текст, который будет выводиться вместо цены, в случае если цена = 0.
Если текст отсутствует, то будет выводиться нулевая цена по умолчанию. Если текст отсутствует, то будет выводиться нулевая цена по умолчанию.
</ItemInput> </ItemInput>
<ItemImage label="Приветственное изображение" v-model="settings.items.texts.start_image">
Изображение, которое будет использоваться в приветственном сообщении покупателю (когда он
запустит бота через `/start`).
</ItemImage>
<ItemTextarea label="Приветственный текст" v-model="settings.items.texts.start_message" placeholder="Например, добро пожаловать в наш магазин.">
Сообщение, которое выводится в приветственном сообщении покупателю (когда он
запустит бота через `/start`). Можно использовать HTML разметку, которую
<a href="https://core.telegram.org/bots/api#html-style" target="_blank">
поддерживает Telegram <i class="fa fa-external-link"></i>
</a>. Можно использовать <a href="https://getemoji.com/" target="_blank">
эмодзи <i class="fa fa-external-link"></i>
</a>.
</ItemTextarea>
<ItemInput label="Текст кнопки приветственного сообщения" v-model="settings.items.texts.start_button.text">
Текст на кнопке приветственного сообщения, которая открывает магазин.
</ItemInput>
</template> </template>
<script setup> <script setup>
import {useSettingsStore} from "@/stores/settings.js"; import {useSettingsStore} from "@/stores/settings.js";
import ItemInput from "@/components/Settings/ItemInput.vue"; import ItemInput from "@/components/Settings/ItemInput.vue";
import ItemImage from "@/components/Settings/ItemImage.vue";
import ItemTextarea from "@/components/Settings/ItemTextarea.vue";
const settings = useSettingsStore(); const settings = useSettingsStore();
</script> </script>

View File

@@ -59,7 +59,19 @@ TEXT,
'texts' => [ 'texts' => [
'text_no_more_products' => 'Это всё по текущему запросу. Попробуйте уточнить фильтры или поиск.', 'text_no_more_products' => 'Это всё по текущему запросу. Попробуйте уточнить фильтры или поиск.',
'text_empty_cart' => 'Ваша корзина пуста.', 'text_empty_cart' => 'Ваша корзина пуста.',
'text_order_created_success' => 'Ваш заказ успешно оформлен и будет обработан в ближайшее время.' 'text_order_created_success' => 'Ваш заказ успешно оформлен и будет обработан в ближайшее время.',
'start_message' => <<<HTML
👋 <b>Добро пожаловать!</b>
Вы находитесь в официальном магазине.
Здесь вы можете ознакомиться с товарами, узнать подробности и оформить заказ прямо в Telegram.
Нажмите кнопку ниже, чтобы перейти в каталог.
HTML,
'start_image' => null,
'start_button' => [
'text' => '🛍 Перейти в каталог',
],
], ],
'orders' => [ 'orders' => [

View File

@@ -2,14 +2,37 @@
namespace Openguru\OpenCartFramework\Telegram\Commands; namespace Openguru\OpenCartFramework\Telegram\Commands;
use Openguru\OpenCartFramework\Config\Settings;
use Openguru\OpenCartFramework\Telegram\Enums\ChatAction;
use Openguru\OpenCartFramework\Telegram\TelegramBotStateManager;
use Openguru\OpenCartFramework\Telegram\TelegramService;
class StartCommand extends TelegramCommand class StartCommand extends TelegramCommand
{ {
private Settings $settings;
public function __construct(TelegramService $telegram, TelegramBotStateManager $stateManager, Settings $settings)
{
parent::__construct($telegram, $stateManager);
$this->settings = $settings;
}
public function handle(array $update): void public function handle(array $update): void
{ {
$chatId = $update['message']['chat']['id']; $chatId = $update['message']['chat']['id'];
$message = 'Добро пожаловать в Telecart \- интернет магазин в Telegram\.'; $message = $this->settings->get('texts.start_message', 'Welcome to Telecart - Telegram e-commerce solution.');
$buttons = [
'inline_keyboard' => [
[
[
'text' => $this->settings->get('texts.start_button.text', 'Open Mini App'),
'url' => $this->telegram->getMiniAppUrl(),
],
],
],
];
$this->telegram->sendMessage($chatId, $message); $this->telegram->sendMessage($chatId, $message, $buttons, ChatAction::TYPING, 'html');
} }
} }

View File

@@ -220,4 +220,11 @@ class TelegramService
return null; return null;
} }
public function getMiniAppUrl(): string
{
$me = $this->getMe();
return sprintf('https://t.me/%s?startapp', $me['username']);
}
} }