feat: tg bot start message customization
This commit is contained in:
@@ -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: {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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' => [
|
||||||
|
|||||||
@@ -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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user