Files
portal-api/database/seeders/EmailTemplates/ServiceTemplates.php

224 lines
14 KiB
PHP

<?php
namespace Database\Seeders\EmailTemplates;
use App\Support\EmailTemplateShell as T;
final class ServiceTemplates
{
private const ACTIVE = '<span style="color: #16a34a;">Đang hoạt động</span>';
/**
* @return array<int, array{scenario: string, name: string, subject: string, body: string}>
*/
public static function all(): array
{
return [
[
'scenario' => 'vm_credentials',
'name' => 'Khởi tạo VPS (thông tin truy cập)',
'subject' => 'VPS của bạn đã sẵn sàng — {{product_name}}',
'body' => T::title('Cloud VPS đã sẵn sàng')
. T::greeting('{{full_name}}')
. T::paragraph('Cảm ơn Quý khách đã tin tưởng sử dụng dịch vụ của <strong>{{app_name}}</strong>. Cloud VPS <strong>{{product_name}}</strong> đã được khởi tạo thành công.')
. T::heading('Thông tin dịch vụ')
. T::infoTable(['Dịch vụ' => '{{product_name}}'], '{{product_billing_row}}{{product_price_row}}{{os_name_row}}{{service_due_exp_row}}')
. T::heading('Thông tin truy cập')
. T::infoTable([
'IP / Host' => '{{service_host}}',
'Tài khoản' => '{{service_username}}',
'Mật khẩu' => '{{service_password}}',
], '{{service_port_row}}')
. T::button('{{login_url}}', 'QUẢN LÝ DỊCH VỤ')
. T::note('Vui lòng đổi mật khẩu ngay sau lần đăng nhập đầu tiên và không chia sẻ thông tin truy cập cho người khác.')
. T::supportLine(),
],
[
'scenario' => 'hosting_information',
'name' => 'Thông tin truy cập Hosting',
'subject' => 'Thông tin truy cập {{product_name}}',
'body' => T::title('Thông tin truy cập Hosting')
. T::greeting('{{client_name}}')
. T::paragraph('Cảm ơn Quý khách đã tin tưởng sử dụng dịch vụ của <strong>{{company_name}}</strong>. Hosting của Quý khách đã được khởi tạo thành công.')
. T::heading('Thông tin gói dịch vụ')
. T::infoTable([
'Gói dịch vụ' => '{{product_name}}',
'Chu kỳ thanh toán' => '{{product_billing}}',
'Giá' => '{{product_price}} VNĐ',
'Ngày hết hạn' => '{{service_due_exp}}',
])
. T::heading('Thông tin truy cập Hosting')
. T::infoTable([
'IP / Host' => '{{service_host}}',
'Tài khoản' => '{{service_username}}',
'Mật khẩu' => '{{service_password}}',
])
. T::heading('Thông tin truy cập FTP')
. T::infoTable([
'FTP Host' => '{{service_host}}',
'Tài khoản FTP' => '{{ftp_account}}',
'Mật khẩu FTP' => '{{ftp_password}}',
])
. T::button('{{login_url}}', 'QUẢN LÝ DỊCH VỤ')
. T::note('Vui lòng lưu thông tin truy cập ở nơi an toàn và không chia sẻ cho người khác.')
. T::supportLine(),
],
[
'scenario' => 'hosting_account_created',
'name' => 'Hosting đã khởi tạo',
'subject' => 'V/v: {{app_name}} gửi thông tin truy cập - {{server_name}} - {{recipient_label}}',
'body' => T::title('Hosting đã sẵn sàng')
. T::greeting('{{full_name}}')
. T::paragraph('Gói hosting cho tên miền <strong>{{domain_name}}</strong> tại <strong>{{app_name}}</strong> đã được khởi tạo thành công. Dưới đây là thông tin truy cập:')
. T::infoTable([
'Tên miền' => '{{domain_name}}',
'Gói hosting' => '{{hosting_plan}}',
], '{{server_host_row}}{{ftp_username_row}}{{ftp_password_row}}' . T::row('Trạng thái', self::ACTIVE))
. '{{ftp_password_notice}}'
. '{{plesk_block}}'
. T::button('{{login_url}}', 'ĐĂNG NHẬP NGAY')
. T::supportLine(),
],
[
'scenario' => 'vm_suspended',
'name' => 'VPS bị tạm ngưng',
'subject' => '[Thế Giới Số] Dịch vụ Cloud VPS của bạn đã bị tạm ngưng',
'body' => T::title('Dịch vụ Cloud VPS đã bị tạm ngưng')
. T::greeting('{{customer_name}}')
. T::paragraph('Dịch vụ Cloud VPS của Quý khách hiện đã bị <strong>tạm ngưng (Suspend)</strong> do chưa thanh toán gia hạn. Vui lòng thanh toán sớm để dịch vụ được kích hoạt lại.')
. T::infoTable([
'Tên dịch vụ' => '{{vm_name}}',
'VM ID' => '{{vmware_id}}',
'Thời gian tạm ngưng' => '{{suspended_at}}',
])
. T::note('Sau <strong>30 ngày</strong> kể từ ngày tạm ngưng, nếu không thanh toán, dịch vụ sẽ bị <strong>xoá vĩnh viễn</strong> và dữ liệu không thể khôi phục.', 'Quan trọng:')
. T::button('{{login_url}}', 'THANH TOÁN NGAY')
. T::supportLine(),
],
[
'scenario' => 'service_expiry',
'name' => 'Dịch vụ sắp hết hạn',
'subject' => 'Thông báo dịch vụ {{product_name}} sắp hết hạn',
'body' => T::title('Dịch vụ sắp hết hạn')
. T::greeting('Quý khách')
. T::paragraph('<strong>{{company_name}}</strong> xin thông báo dịch vụ của Quý khách sắp hết hạn sử dụng:')
. T::infoTable([
'Dịch vụ' => '{{product_name}}',
'Ngày hết hạn' => '<span style="color: #dc2626;">{{service_due_exp}}</span>',
'Thời hạn' => 'Còn {{service_remaining}} ngày',
])
. T::paragraph('Vui lòng gia hạn trước ngày hết hạn để dịch vụ không bị gián đoạn.')
. T::button('{{login_url}}', 'GIA HẠN NGAY')
. T::supportLine(),
],
[
'scenario' => 'service_renewal_reminder',
'name' => 'Nhắc gia hạn dịch vụ',
'subject' => 'Nhắc gia hạn dịch vụ {{product_name}}',
'body' => T::title('Nhắc gia hạn dịch vụ')
. T::greeting('{{client_name}}')
. T::paragraph('Dịch vụ <strong>{{product_name}}</strong>{{server_name_suffix}} của Quý khách sắp đến hạn thanh toán. Vui lòng gia hạn sớm để tránh gián đoạn dịch vụ.')
. T::infoTable([
'Dịch vụ' => '{{product_name}}',
'Ngày hết hạn' => '<span style="color: #dc2626;">{{expires_at}}</span>',
], '{{price_row}}')
. T::button('{{login_url}}', 'GIA HẠN NGAY')
. T::supportLine(),
],
[
'scenario' => 'service_renewed',
'name' => 'Dịch vụ đã được gia hạn',
'subject' => 'Dịch vụ {{product_name}} đã được gia hạn',
'body' => T::title('Gia hạn dịch vụ thành công')
. T::greeting('{{client_name}}')
. T::paragraph('Dịch vụ <strong>{{product_name}}</strong>{{server_name_suffix}} của Quý khách vừa được gia hạn thêm <strong>{{months_label}}</strong>.')
. T::infoTable([
'Dịch vụ' => '{{product_name}}',
'Hạn sử dụng trước' => '{{old_expires_at}}',
'Hạn sử dụng mới' => '<span style="color: #16a34a;">{{expires_at}}</span>',
'Hoá đơn' => '{{invoice_number}}',
], '{{price_row}}')
. T::button('{{login_url}}', 'XEM DỊCH VỤ')
. T::supportLine(),
],
[
'scenario' => 'auto_renew_failed',
'name' => 'Tự động gia hạn thất bại (thiếu số dư)',
'subject' => 'Chưa thể tự động gia hạn dịch vụ {{product_name}}',
'body' => T::title('Tự động gia hạn chưa thành công')
. T::greeting('{{client_name}}')
. T::paragraph('Dịch vụ <strong>{{product_name}}</strong>{{server_name_suffix}} đã bật tự động gia hạn nhưng số dư tài khoản hiện chưa đủ để thanh toán hoá đơn gia hạn.')
. T::infoTable([
'Hoá đơn' => '{{invoice_number}}',
'Ngày hết hạn' => '<span style="color: #dc2626;">{{expires_at}}</span>',
'Cần thanh toán' => '{{outstanding}} VNĐ',
'Số dư hiện có' => '{{balance_formatted}} VNĐ',
])
. T::paragraph('Quý khách vui lòng nạp thêm tiền, hệ thống sẽ tự trừ ở lần kiểm tra kế tiếp. Nếu không, dịch vụ có thể bị tạm ngưng khi quá hạn.')
. T::button('{{topup_url}}', 'NẠP TIỀN NGAY')
. T::supportLine(),
],
[
'scenario' => 'vm_creation_failed',
'name' => 'Khởi tạo VPS thất bại',
'subject' => 'Thông báo: Không thể khởi tạo máy chủ ảo - Đơn hàng #{{order_num}}',
'body' => T::title('Thông báo về đơn hàng #{{order_num}}')
. T::subtitle('Đội ngũ kỹ thuật đang xử lý yêu cầu của Quý khách')
. T::greeting('{{full_name}}')
. T::paragraph('Hệ thống chưa khởi tạo được dịch vụ cho đơn hàng của Quý khách. Đội ngũ kỹ thuật của <strong>{{app_name}}</strong> đã được thông báo và đang hỗ trợ nhanh nhất có thể.')
. T::infoTable([
'Mã đơn hàng' => '#{{order_num}}',
'Sản phẩm' => '{{product_name}}',
])
. T::paragraph('Quý khách không cần thực hiện thêm thao tác nào. Chúng tôi sẽ liên hệ lại khi dịch vụ được kích hoạt thành công.')
. T::button('{{invoice_url}}', 'XEM ĐƠN HÀNG')
. T::supportLine(),
],
[
'scenario' => 'vm_rebuild_failed',
'name' => 'Rebuild VPS thất bại',
'subject' => 'Thông báo: Cài lại hệ điều hành thất bại - {{vm_name}}',
'body' => T::title('Cài lại hệ điều hành chưa thành công')
. T::subtitle('Đội ngũ kỹ thuật đang xử lý yêu cầu của Quý khách')
. T::greeting('{{full_name}}')
. T::paragraph('Rất tiếc, yêu cầu cài lại hệ điều hành (rebuild) cho VPS của Quý khách chưa thực hiện thành công. Đội ngũ kỹ thuật của <strong>{{app_name}}</strong> đã được thông báo để kiểm tra và xử lý.')
. T::infoTable([
'Tên VPS' => '{{vm_name}}',
'IP' => '{{ip}}',
])
. T::paragraph('VPS của Quý khách <strong>vẫn hoạt động bình thường</strong> trên cấu hình cũ, không có dữ liệu nào bị ảnh hưởng.')
. T::button('{{service_url}}', 'XEM DỊCH VỤ')
. T::supportLine(),
],
[
'scenario' => 'vm_password_changed',
'name' => 'Đổi mật khẩu VPS',
'subject' => 'Mật khẩu VPS của bạn đã được thay đổi — {{app_name}}',
'body' => T::title('Mật khẩu VPS đã được thay đổi')
. T::greeting('{{full_name}}')
. T::paragraph('Mật khẩu đăng nhập máy chủ ảo của Quý khách tại <strong>{{app_name}}</strong> đã được thay đổi thành công.')
. T::infoTable(['Máy chủ' => '{{vm_name}}'], '{{new_password_row}}' . T::row('Trạng thái', '<span style="color: #16a34a;">Đổi mật khẩu thành công</span>'))
. T::button('{{login_url}}', 'QUẢN LÝ DỊCH VỤ')
. T::note('Nếu Quý khách không thực hiện thao tác này, vui lòng liên hệ ngay <strong>support@tgs.com.vn</strong> hoặc <strong>(028) 7309. 7379</strong>.'),
],
[
'scenario' => 'snapshot_action',
'name' => 'Thao tác Snapshot VPS',
'subject' => '{{action_title}} — {{app_name}}',
'body' => T::title('{{action_icon}} {{action_title}}')
. T::subtitle('{{action_desc}}')
. T::greeting('{{full_name}}')
. T::paragraph('Thao tác snapshot máy chủ ảo của Quý khách tại <strong>{{app_name}}</strong> đã hoàn tất.')
. T::infoTable([
'Máy chủ' => '{{vm_name}}',
'Snapshot' => '{{snapshot_name}}',
'Thời gian' => '{{action_at}}',
'Trạng thái' => '<span style="color: #16a34a;">{{action_status}}</span>',
])
. T::button('{{login_url}}', 'QUẢN LÝ DỊCH VỤ')
. T::supportLine(),
],
];
}
}