@mamindom/contracts 1.0.213 → 1.0.215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/events/auth/otp-requested.interface.d.ts +5 -0
- package/dist/events/orders/order-cancelled.interface.d.ts +5 -0
- package/dist/events/orders/order-created.interface.d.ts +10 -0
- package/dist/events/orders/order-money.interface.d.ts +5 -0
- package/dist/events/orders/order-status-changed.interface.d.ts +5 -0
- package/dist/gen/auth.d.ts +3 -0
- package/dist/gen/bonus_settings.d.ts +6 -2
- package/dist/gen/notification.d.ts +80 -0
- package/dist/gen/notification.js +7 -0
- package/dist/gen/order.d.ts +4 -0
- package/dist/proto/auth.proto +3 -0
- package/dist/proto/bonus_settings.proto +19 -2
- package/dist/proto/notification.proto +78 -0
- package/dist/proto/order.proto +4 -0
- package/events/auth/otp-requested.interface.ts +6 -0
- package/events/orders/order-cancelled.interface.ts +6 -0
- package/events/orders/order-created.interface.ts +11 -0
- package/events/orders/order-money.interface.ts +6 -0
- package/events/orders/order-status-changed.interface.ts +6 -0
- package/gen/auth.ts +3 -0
- package/gen/bonus_settings.ts +6 -2
- package/gen/notification.ts +114 -1
- package/gen/order.ts +4 -0
- package/package.json +1 -1
- package/proto/auth.proto +3 -0
- package/proto/bonus_settings.proto +19 -2
- package/proto/notification.proto +78 -0
- package/proto/order.proto +4 -0
|
@@ -15,6 +15,11 @@ export interface OrderCreatedEvent {
|
|
|
15
15
|
sku: string;
|
|
16
16
|
quantity: number;
|
|
17
17
|
price: string;
|
|
18
|
+
/** Знімок назви, фото й підсумку рядка — для таблиці товарів у листі. */
|
|
19
|
+
name?: string;
|
|
20
|
+
imageUrl?: string;
|
|
21
|
+
size?: string;
|
|
22
|
+
lineTotal?: string;
|
|
18
23
|
}>;
|
|
19
24
|
delivery: {
|
|
20
25
|
method: string;
|
|
@@ -34,4 +39,9 @@ export interface OrderCreatedEvent {
|
|
|
34
39
|
email: string;
|
|
35
40
|
};
|
|
36
41
|
createdAt: number;
|
|
42
|
+
/**
|
|
43
|
+
* Мова покупця (`UK` | `RU`) — нею йдуть листи й SMS. Порожньо — `UK`.
|
|
44
|
+
* Необов'язкове: старі продюсери поле не шлють.
|
|
45
|
+
*/
|
|
46
|
+
locale?: 'UK' | 'RU';
|
|
37
47
|
}
|
|
@@ -17,4 +17,9 @@ export interface OrderStatusChangedEvent {
|
|
|
17
17
|
};
|
|
18
18
|
trackingNumber?: string;
|
|
19
19
|
trackingUrl?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Мова покупця (`UK` | `RU`) — нею йдуть листи й SMS. Порожньо — `UK`.
|
|
22
|
+
* Необов'язкове: старі продюсери поле не шлють.
|
|
23
|
+
*/
|
|
24
|
+
locale?: 'UK' | 'RU';
|
|
20
25
|
}
|
package/dist/gen/auth.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface LogoutResponse {
|
|
|
9
9
|
export interface SendOtpRequest {
|
|
10
10
|
identifier: string;
|
|
11
11
|
type: string;
|
|
12
|
+
/** Мова сайту (uk | ru) — нею прийде лист/SMS із кодом. */
|
|
13
|
+
locale?: string | undefined;
|
|
12
14
|
}
|
|
13
15
|
export interface SendOtpResponse {
|
|
14
16
|
ok: boolean;
|
|
@@ -34,6 +36,7 @@ export interface RegisterRequest {
|
|
|
34
36
|
export interface RequestPasswordResetRequest {
|
|
35
37
|
identifier: string;
|
|
36
38
|
type: string;
|
|
39
|
+
locale?: string | undefined;
|
|
37
40
|
}
|
|
38
41
|
export interface RequestPasswordResetResponse {
|
|
39
42
|
ok: boolean;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
2
|
export declare const protobufPackage = "promo.v1";
|
|
3
3
|
export interface BonusSettingsResponse {
|
|
4
|
-
|
|
4
|
+
earnStepUah: number;
|
|
5
|
+
earnPerStepUah: number;
|
|
6
|
+
earnMinPriceUah: number;
|
|
5
7
|
redeemRate: number;
|
|
6
8
|
minOrderForEarn: number;
|
|
7
9
|
maxRedeemShare: number;
|
|
@@ -10,7 +12,9 @@ export interface BonusSettingsResponse {
|
|
|
10
12
|
export interface GetBonusSettingsRequest {
|
|
11
13
|
}
|
|
12
14
|
export interface UpdateBonusSettingsRequest {
|
|
13
|
-
|
|
15
|
+
earnStepUah?: number | undefined;
|
|
16
|
+
earnPerStepUah?: number | undefined;
|
|
17
|
+
earnMinPriceUah?: number | undefined;
|
|
14
18
|
redeemRate?: number | undefined;
|
|
15
19
|
minOrderForEarn?: number | undefined;
|
|
16
20
|
maxRedeemShare?: number | undefined;
|
|
@@ -49,6 +49,10 @@ export declare enum NotificationStatus {
|
|
|
49
49
|
FAILED = 3,
|
|
50
50
|
SIMULATED = 4,
|
|
51
51
|
SUPPRESSED = 5,
|
|
52
|
+
/** DUPLICATE - Не надіслано: таке саме повідомлення вже пішло раніше (повтор події). */
|
|
53
|
+
DUPLICATE = 6,
|
|
54
|
+
/** DISABLED - Не надіслано: адмін вимкнув шаблон цього листа. */
|
|
55
|
+
DISABLED = 7,
|
|
52
56
|
UNRECOGNIZED = -1
|
|
53
57
|
}
|
|
54
58
|
export declare enum TelegramTopic {
|
|
@@ -276,6 +280,13 @@ export interface BrandingProfile {
|
|
|
276
280
|
resolvedBrandUrl: string;
|
|
277
281
|
resolvedSupportEmail: string;
|
|
278
282
|
headerHtml: string;
|
|
283
|
+
/**
|
|
284
|
+
* Оформлення листа за замовчуванням (JSON EmailTheme) і глобальні шапка й
|
|
285
|
+
* підвал блоками (JSON EmailBlock[]). Порожній рядок — «як у коді».
|
|
286
|
+
*/
|
|
287
|
+
themeJson: string;
|
|
288
|
+
headerBlocksJson: string;
|
|
289
|
+
footerBlocksJson: string;
|
|
279
290
|
}
|
|
280
291
|
export interface UpdateBrandingRequest {
|
|
281
292
|
logoUrl?: string | undefined;
|
|
@@ -285,6 +296,9 @@ export interface UpdateBrandingRequest {
|
|
|
285
296
|
footerHtml?: string | undefined;
|
|
286
297
|
actorId: string;
|
|
287
298
|
headerHtml?: string | undefined;
|
|
299
|
+
themeJson?: string | undefined;
|
|
300
|
+
headerBlocksJson?: string | undefined;
|
|
301
|
+
footerBlocksJson?: string | undefined;
|
|
288
302
|
}
|
|
289
303
|
export interface NotificationTemplate {
|
|
290
304
|
id: string;
|
|
@@ -377,15 +391,69 @@ export interface RenderPreviewRequest {
|
|
|
377
391
|
variablesJson: string;
|
|
378
392
|
subject?: string | undefined;
|
|
379
393
|
brandingJson?: string | undefined;
|
|
394
|
+
/**
|
|
395
|
+
* Блоковий лист (JSON EmailDocument). Якщо заданий — рендеримо його, а
|
|
396
|
+
* body_html лише запасний шлях, як і при відправці.
|
|
397
|
+
*/
|
|
398
|
+
contentJson?: string | undefined;
|
|
399
|
+
/** Категорія впливає на лист: у масових є посилання «Відписатися». */
|
|
400
|
+
category?: NotificationCategory | undefined;
|
|
401
|
+
locale?: NotificationLocale | undefined;
|
|
402
|
+
/** Ключ листа — щоб попередити про змінні, яких цей лист не отримає. */
|
|
403
|
+
templateKey?: string | undefined;
|
|
380
404
|
}
|
|
381
405
|
export interface RenderPreviewResponse {
|
|
382
406
|
html: string;
|
|
383
407
|
subject: string;
|
|
408
|
+
/** Плейн-текстова версія — саме та, що піде в листі. */
|
|
409
|
+
text: string;
|
|
410
|
+
/** Попередження (невідома змінна, порожній alt, зламана розмітка тощо). */
|
|
411
|
+
warnings: string[];
|
|
384
412
|
}
|
|
385
413
|
export interface SendTestRequest {
|
|
386
414
|
templateId: string;
|
|
387
415
|
recipient: string;
|
|
388
416
|
variablesJson: string;
|
|
417
|
+
/**
|
|
418
|
+
* Незбережений стан редактора. Задані поля замінюють збережені — тестовий
|
|
419
|
+
* лист показує те, що адмін бачить зараз, а не останнє збереження.
|
|
420
|
+
*/
|
|
421
|
+
subject?: string | undefined;
|
|
422
|
+
contentJson?: string | undefined;
|
|
423
|
+
bodyHtml?: string | undefined;
|
|
424
|
+
bodyText?: string | undefined;
|
|
425
|
+
}
|
|
426
|
+
export interface GetTemplateVariablesRequest {
|
|
427
|
+
key: string;
|
|
428
|
+
}
|
|
429
|
+
export interface TemplateVariable {
|
|
430
|
+
path: string;
|
|
431
|
+
label: string;
|
|
432
|
+
example: string;
|
|
433
|
+
isList: boolean;
|
|
434
|
+
}
|
|
435
|
+
export interface TemplateVariablesResponse {
|
|
436
|
+
/** event — лист шле система за подією; campaign — лист розсилки. */
|
|
437
|
+
source: string;
|
|
438
|
+
trigger: string;
|
|
439
|
+
variables: TemplateVariable[];
|
|
440
|
+
/** Приклад значень (JSON) — для попереднього перегляду. */
|
|
441
|
+
sampleJson: string;
|
|
442
|
+
}
|
|
443
|
+
export interface DuplicateTemplateRequest {
|
|
444
|
+
id: string;
|
|
445
|
+
newKey: string;
|
|
446
|
+
locale?: NotificationLocale | undefined;
|
|
447
|
+
title?: string | undefined;
|
|
448
|
+
actorId?: string | undefined;
|
|
449
|
+
}
|
|
450
|
+
export interface DeleteTemplateRequest {
|
|
451
|
+
id: string;
|
|
452
|
+
actorId?: string | undefined;
|
|
453
|
+
}
|
|
454
|
+
export interface DeleteTemplateResponse {
|
|
455
|
+
ok: boolean;
|
|
456
|
+
errorMessage: string;
|
|
389
457
|
}
|
|
390
458
|
export interface SendTestResponse {
|
|
391
459
|
ok: boolean;
|
|
@@ -476,6 +544,12 @@ export interface NotificationTemplateServiceClient {
|
|
|
476
544
|
restoreVersion(request: RestoreVersionRequest): Observable<TemplateResponse>;
|
|
477
545
|
renderPreview(request: RenderPreviewRequest): Observable<RenderPreviewResponse>;
|
|
478
546
|
sendTest(request: SendTestRequest): Observable<SendTestResponse>;
|
|
547
|
+
/** Які змінні реально передає система в шаблон із цим ключем + приклад значень. */
|
|
548
|
+
getTemplateVariables(request: GetTemplateVariablesRequest): Observable<TemplateVariablesResponse>;
|
|
549
|
+
/** Копія шаблону під новим ключем і/або мовою (з тілом, блоками й темою). */
|
|
550
|
+
duplicateTemplate(request: DuplicateTemplateRequest): Observable<TemplateResponse>;
|
|
551
|
+
/** Видалення — лише для листів, створених адміном; системні ключі не видаляються. */
|
|
552
|
+
deleteTemplate(request: DeleteTemplateRequest): Observable<DeleteTemplateResponse>;
|
|
479
553
|
sendToCustomer(request: SendToCustomerRequest): Observable<SendToCustomerResponse>;
|
|
480
554
|
}
|
|
481
555
|
export interface NotificationTemplateServiceController {
|
|
@@ -488,6 +562,12 @@ export interface NotificationTemplateServiceController {
|
|
|
488
562
|
restoreVersion(request: RestoreVersionRequest): Promise<TemplateResponse> | Observable<TemplateResponse> | TemplateResponse;
|
|
489
563
|
renderPreview(request: RenderPreviewRequest): Promise<RenderPreviewResponse> | Observable<RenderPreviewResponse> | RenderPreviewResponse;
|
|
490
564
|
sendTest(request: SendTestRequest): Promise<SendTestResponse> | Observable<SendTestResponse> | SendTestResponse;
|
|
565
|
+
/** Які змінні реально передає система в шаблон із цим ключем + приклад значень. */
|
|
566
|
+
getTemplateVariables(request: GetTemplateVariablesRequest): Promise<TemplateVariablesResponse> | Observable<TemplateVariablesResponse> | TemplateVariablesResponse;
|
|
567
|
+
/** Копія шаблону під новим ключем і/або мовою (з тілом, блоками й темою). */
|
|
568
|
+
duplicateTemplate(request: DuplicateTemplateRequest): Promise<TemplateResponse> | Observable<TemplateResponse> | TemplateResponse;
|
|
569
|
+
/** Видалення — лише для листів, створених адміном; системні ключі не видаляються. */
|
|
570
|
+
deleteTemplate(request: DeleteTemplateRequest): Promise<DeleteTemplateResponse> | Observable<DeleteTemplateResponse> | DeleteTemplateResponse;
|
|
491
571
|
sendToCustomer(request: SendToCustomerRequest): Promise<SendToCustomerResponse> | Observable<SendToCustomerResponse> | SendToCustomerResponse;
|
|
492
572
|
}
|
|
493
573
|
export declare function NotificationTemplateServiceControllerMethods(): (constructor: Function) => void;
|
package/dist/gen/notification.js
CHANGED
|
@@ -71,6 +71,10 @@ var NotificationStatus;
|
|
|
71
71
|
NotificationStatus[NotificationStatus["FAILED"] = 3] = "FAILED";
|
|
72
72
|
NotificationStatus[NotificationStatus["SIMULATED"] = 4] = "SIMULATED";
|
|
73
73
|
NotificationStatus[NotificationStatus["SUPPRESSED"] = 5] = "SUPPRESSED";
|
|
74
|
+
/** DUPLICATE - Не надіслано: таке саме повідомлення вже пішло раніше (повтор події). */
|
|
75
|
+
NotificationStatus[NotificationStatus["DUPLICATE"] = 6] = "DUPLICATE";
|
|
76
|
+
/** DISABLED - Не надіслано: адмін вимкнув шаблон цього листа. */
|
|
77
|
+
NotificationStatus[NotificationStatus["DISABLED"] = 7] = "DISABLED";
|
|
74
78
|
NotificationStatus[NotificationStatus["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
|
|
75
79
|
})(NotificationStatus || (exports.NotificationStatus = NotificationStatus = {}));
|
|
76
80
|
var TelegramTopic;
|
|
@@ -100,6 +104,9 @@ function NotificationTemplateServiceControllerMethods() {
|
|
|
100
104
|
"restoreVersion",
|
|
101
105
|
"renderPreview",
|
|
102
106
|
"sendTest",
|
|
107
|
+
"getTemplateVariables",
|
|
108
|
+
"duplicateTemplate",
|
|
109
|
+
"deleteTemplate",
|
|
103
110
|
"sendToCustomer",
|
|
104
111
|
];
|
|
105
112
|
for (const method of grpcMethods) {
|
package/dist/gen/order.d.ts
CHANGED
|
@@ -205,6 +205,8 @@ export interface CreateOrderRequest {
|
|
|
205
205
|
guestId: string;
|
|
206
206
|
source: string;
|
|
207
207
|
cartId: string;
|
|
208
|
+
/** Мова сайту на момент оформлення (uk | ru) — нею йдуть листи й SMS про замовлення. */
|
|
209
|
+
locale?: string | undefined;
|
|
208
210
|
}
|
|
209
211
|
export interface CreateManualOrderRequest {
|
|
210
212
|
idempotencyKey: string;
|
|
@@ -217,6 +219,8 @@ export interface CreateManualOrderRequest {
|
|
|
217
219
|
payment: OrderPayment | undefined;
|
|
218
220
|
promoCode: string;
|
|
219
221
|
comment: string;
|
|
222
|
+
/** Мова листів покупцю (uk | ru); порожньо — українська. */
|
|
223
|
+
locale?: string | undefined;
|
|
220
224
|
}
|
|
221
225
|
export interface OrderItemInput {
|
|
222
226
|
productId: string;
|
package/dist/proto/auth.proto
CHANGED
|
@@ -25,6 +25,8 @@ message LogoutResponse {
|
|
|
25
25
|
message SendOtpRequest {
|
|
26
26
|
string identifier = 1;
|
|
27
27
|
string type = 2;
|
|
28
|
+
// Мова сайту (uk | ru) — нею прийде лист/SMS із кодом.
|
|
29
|
+
optional string locale = 3;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
message SendOtpResponse {
|
|
@@ -55,6 +57,7 @@ message RegisterRequest {
|
|
|
55
57
|
message RequestPasswordResetRequest {
|
|
56
58
|
string identifier = 1;
|
|
57
59
|
string type = 2;
|
|
60
|
+
optional string locale = 3;
|
|
58
61
|
}
|
|
59
62
|
|
|
60
63
|
message RequestPasswordResetResponse {
|
|
@@ -8,7 +8,19 @@ service BonusSettingsService {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
message BonusSettingsResponse {
|
|
11
|
-
|
|
11
|
+
// Формула нарахування (п.17 переліку): кожні `earn_step_uah` гривень ціни
|
|
12
|
+
// товару дають `earn_per_step_uah` гривень бонусів, і лише для товарів не
|
|
13
|
+
// дешевших за `earn_min_price_uah`. Ціна береться ПІСЛЯ знижки.
|
|
14
|
+
//
|
|
15
|
+
// Поле 1 (`earn_rate`, відсоткова ставка) прибране: формула не відсоткова,
|
|
16
|
+
// а поле показувало 2% і тим вводило в оману. Номер зарезервовано, щоб його
|
|
17
|
+
// ніколи не перевикористали під інше значення.
|
|
18
|
+
reserved 1;
|
|
19
|
+
reserved "earn_rate";
|
|
20
|
+
|
|
21
|
+
double earn_step_uah = 6;
|
|
22
|
+
double earn_per_step_uah = 7;
|
|
23
|
+
double earn_min_price_uah = 8;
|
|
12
24
|
|
|
13
25
|
double redeem_rate = 2;
|
|
14
26
|
|
|
@@ -22,7 +34,12 @@ message BonusSettingsResponse {
|
|
|
22
34
|
message GetBonusSettingsRequest {}
|
|
23
35
|
|
|
24
36
|
message UpdateBonusSettingsRequest {
|
|
25
|
-
|
|
37
|
+
reserved 1;
|
|
38
|
+
reserved "earn_rate";
|
|
39
|
+
|
|
40
|
+
optional double earn_step_uah = 6;
|
|
41
|
+
optional double earn_per_step_uah = 7;
|
|
42
|
+
optional double earn_min_price_uah = 8;
|
|
26
43
|
optional double redeem_rate = 2;
|
|
27
44
|
optional double min_order_for_earn = 3;
|
|
28
45
|
optional double max_redeem_share = 4;
|
|
@@ -13,6 +13,13 @@ service NotificationTemplateService {
|
|
|
13
13
|
rpc RenderPreview(RenderPreviewRequest) returns (RenderPreviewResponse);
|
|
14
14
|
rpc SendTest(SendTestRequest) returns (SendTestResponse);
|
|
15
15
|
|
|
16
|
+
// Які змінні реально передає система в шаблон із цим ключем + приклад значень.
|
|
17
|
+
rpc GetTemplateVariables(GetTemplateVariablesRequest) returns (TemplateVariablesResponse);
|
|
18
|
+
// Копія шаблону під новим ключем і/або мовою (з тілом, блоками й темою).
|
|
19
|
+
rpc DuplicateTemplate(DuplicateTemplateRequest) returns (TemplateResponse);
|
|
20
|
+
// Видалення — лише для листів, створених адміном; системні ключі не видаляються.
|
|
21
|
+
rpc DeleteTemplate(DeleteTemplateRequest) returns (DeleteTemplateResponse);
|
|
22
|
+
|
|
16
23
|
rpc SendToCustomer(SendToCustomerRequest) returns (SendToCustomerResponse);
|
|
17
24
|
}
|
|
18
25
|
|
|
@@ -341,6 +348,12 @@ message BrandingProfile {
|
|
|
341
348
|
string resolved_support_email = 11;
|
|
342
349
|
|
|
343
350
|
string header_html = 12;
|
|
351
|
+
|
|
352
|
+
// Оформлення листа за замовчуванням (JSON EmailTheme) і глобальні шапка й
|
|
353
|
+
// підвал блоками (JSON EmailBlock[]). Порожній рядок — «як у коді».
|
|
354
|
+
string theme_json = 13;
|
|
355
|
+
string header_blocks_json = 14;
|
|
356
|
+
string footer_blocks_json = 15;
|
|
344
357
|
}
|
|
345
358
|
|
|
346
359
|
message UpdateBrandingRequest {
|
|
@@ -351,6 +364,9 @@ message UpdateBrandingRequest {
|
|
|
351
364
|
optional string footer_html = 5;
|
|
352
365
|
string actor_id = 6;
|
|
353
366
|
optional string header_html = 7;
|
|
367
|
+
optional string theme_json = 8;
|
|
368
|
+
optional string header_blocks_json = 9;
|
|
369
|
+
optional string footer_blocks_json = 10;
|
|
354
370
|
}
|
|
355
371
|
|
|
356
372
|
enum NotificationChannel {
|
|
@@ -382,6 +398,10 @@ enum NotificationStatus {
|
|
|
382
398
|
FAILED = 3;
|
|
383
399
|
SIMULATED = 4;
|
|
384
400
|
SUPPRESSED = 5;
|
|
401
|
+
// Не надіслано: таке саме повідомлення вже пішло раніше (повтор події).
|
|
402
|
+
DUPLICATE = 6;
|
|
403
|
+
// Не надіслано: адмін вимкнув шаблон цього листа.
|
|
404
|
+
DISABLED = 7;
|
|
385
405
|
}
|
|
386
406
|
|
|
387
407
|
enum TelegramTopic {
|
|
@@ -509,11 +529,24 @@ message RenderPreviewRequest {
|
|
|
509
529
|
optional string subject = 3;
|
|
510
530
|
|
|
511
531
|
optional string branding_json = 4;
|
|
532
|
+
|
|
533
|
+
// Блоковий лист (JSON EmailDocument). Якщо заданий — рендеримо його, а
|
|
534
|
+
// body_html лише запасний шлях, як і при відправці.
|
|
535
|
+
optional string content_json = 5;
|
|
536
|
+
// Категорія впливає на лист: у масових є посилання «Відписатися».
|
|
537
|
+
optional NotificationCategory category = 6;
|
|
538
|
+
optional NotificationLocale locale = 7;
|
|
539
|
+
// Ключ листа — щоб попередити про змінні, яких цей лист не отримає.
|
|
540
|
+
optional string template_key = 8;
|
|
512
541
|
}
|
|
513
542
|
|
|
514
543
|
message RenderPreviewResponse {
|
|
515
544
|
string html = 1;
|
|
516
545
|
string subject = 2;
|
|
546
|
+
// Плейн-текстова версія — саме та, що піде в листі.
|
|
547
|
+
string text = 3;
|
|
548
|
+
// Попередження (невідома змінна, порожній alt, зламана розмітка тощо).
|
|
549
|
+
repeated string warnings = 4;
|
|
517
550
|
}
|
|
518
551
|
|
|
519
552
|
message SendTestRequest {
|
|
@@ -522,6 +555,51 @@ message SendTestRequest {
|
|
|
522
555
|
string recipient = 2;
|
|
523
556
|
|
|
524
557
|
string variables_json = 3;
|
|
558
|
+
|
|
559
|
+
// Незбережений стан редактора. Задані поля замінюють збережені — тестовий
|
|
560
|
+
// лист показує те, що адмін бачить зараз, а не останнє збереження.
|
|
561
|
+
optional string subject = 4;
|
|
562
|
+
optional string content_json = 5;
|
|
563
|
+
optional string body_html = 6;
|
|
564
|
+
optional string body_text = 7;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
message GetTemplateVariablesRequest {
|
|
568
|
+
string key = 1;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
message TemplateVariable {
|
|
572
|
+
string path = 1;
|
|
573
|
+
string label = 2;
|
|
574
|
+
string example = 3;
|
|
575
|
+
bool is_list = 4;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
message TemplateVariablesResponse {
|
|
579
|
+
// event — лист шле система за подією; campaign — лист розсилки.
|
|
580
|
+
string source = 1;
|
|
581
|
+
string trigger = 2;
|
|
582
|
+
repeated TemplateVariable variables = 3;
|
|
583
|
+
// Приклад значень (JSON) — для попереднього перегляду.
|
|
584
|
+
string sample_json = 4;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
message DuplicateTemplateRequest {
|
|
588
|
+
string id = 1;
|
|
589
|
+
string new_key = 2;
|
|
590
|
+
optional NotificationLocale locale = 3;
|
|
591
|
+
optional string title = 4;
|
|
592
|
+
optional string actor_id = 5;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
message DeleteTemplateRequest {
|
|
596
|
+
string id = 1;
|
|
597
|
+
optional string actor_id = 2;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
message DeleteTemplateResponse {
|
|
601
|
+
bool ok = 1;
|
|
602
|
+
string error_message = 2;
|
|
525
603
|
}
|
|
526
604
|
|
|
527
605
|
message SendTestResponse {
|
package/dist/proto/order.proto
CHANGED
|
@@ -316,6 +316,8 @@ message CreateOrderRequest {
|
|
|
316
316
|
string guest_id = 3;
|
|
317
317
|
string source = 4;
|
|
318
318
|
string cart_id = 5;
|
|
319
|
+
// Мова сайту на момент оформлення (uk | ru) — нею йдуть листи й SMS про замовлення.
|
|
320
|
+
optional string locale = 6;
|
|
319
321
|
}
|
|
320
322
|
|
|
321
323
|
message CreateManualOrderRequest {
|
|
@@ -331,6 +333,8 @@ message CreateManualOrderRequest {
|
|
|
331
333
|
|
|
332
334
|
string promo_code = 9;
|
|
333
335
|
string comment = 10;
|
|
336
|
+
// Мова листів покупцю (uk | ru); порожньо — українська.
|
|
337
|
+
optional string locale = 11;
|
|
334
338
|
}
|
|
335
339
|
|
|
336
340
|
message OrderItemInput {
|
|
@@ -15,6 +15,11 @@ export interface OrderCreatedEvent {
|
|
|
15
15
|
sku: string
|
|
16
16
|
quantity: number
|
|
17
17
|
price: string
|
|
18
|
+
/** Знімок назви, фото й підсумку рядка — для таблиці товарів у листі. */
|
|
19
|
+
name?: string
|
|
20
|
+
imageUrl?: string
|
|
21
|
+
size?: string
|
|
22
|
+
lineTotal?: string
|
|
18
23
|
}>
|
|
19
24
|
delivery: {
|
|
20
25
|
method: string
|
|
@@ -34,4 +39,10 @@ export interface OrderCreatedEvent {
|
|
|
34
39
|
email: string
|
|
35
40
|
}
|
|
36
41
|
createdAt: number
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Мова покупця (`UK` | `RU`) — нею йдуть листи й SMS. Порожньо — `UK`.
|
|
45
|
+
* Необов'язкове: старі продюсери поле не шлють.
|
|
46
|
+
*/
|
|
47
|
+
locale?: 'UK' | 'RU'
|
|
37
48
|
}
|
|
@@ -20,4 +20,10 @@ export interface OrderStatusChangedEvent {
|
|
|
20
20
|
|
|
21
21
|
trackingNumber?: string
|
|
22
22
|
trackingUrl?: string
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Мова покупця (`UK` | `RU`) — нею йдуть листи й SMS. Порожньо — `UK`.
|
|
26
|
+
* Необов'язкове: старі продюсери поле не шлють.
|
|
27
|
+
*/
|
|
28
|
+
locale?: 'UK' | 'RU'
|
|
23
29
|
}
|
package/gen/auth.ts
CHANGED
|
@@ -21,6 +21,8 @@ export interface LogoutResponse {
|
|
|
21
21
|
export interface SendOtpRequest {
|
|
22
22
|
identifier: string;
|
|
23
23
|
type: string;
|
|
24
|
+
/** Мова сайту (uk | ru) — нею прийде лист/SMS із кодом. */
|
|
25
|
+
locale?: string | undefined;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
export interface SendOtpResponse {
|
|
@@ -51,6 +53,7 @@ export interface RegisterRequest {
|
|
|
51
53
|
export interface RequestPasswordResetRequest {
|
|
52
54
|
identifier: string;
|
|
53
55
|
type: string;
|
|
56
|
+
locale?: string | undefined;
|
|
54
57
|
}
|
|
55
58
|
|
|
56
59
|
export interface RequestPasswordResetResponse {
|
package/gen/bonus_settings.ts
CHANGED
|
@@ -11,7 +11,9 @@ import { Observable } from "rxjs";
|
|
|
11
11
|
export const protobufPackage = "promo.v1";
|
|
12
12
|
|
|
13
13
|
export interface BonusSettingsResponse {
|
|
14
|
-
|
|
14
|
+
earnStepUah: number;
|
|
15
|
+
earnPerStepUah: number;
|
|
16
|
+
earnMinPriceUah: number;
|
|
15
17
|
redeemRate: number;
|
|
16
18
|
minOrderForEarn: number;
|
|
17
19
|
maxRedeemShare: number;
|
|
@@ -22,7 +24,9 @@ export interface GetBonusSettingsRequest {
|
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
export interface UpdateBonusSettingsRequest {
|
|
25
|
-
|
|
27
|
+
earnStepUah?: number | undefined;
|
|
28
|
+
earnPerStepUah?: number | undefined;
|
|
29
|
+
earnMinPriceUah?: number | undefined;
|
|
26
30
|
redeemRate?: number | undefined;
|
|
27
31
|
minOrderForEarn?: number | undefined;
|
|
28
32
|
maxRedeemShare?: number | undefined;
|
package/gen/notification.ts
CHANGED
|
@@ -64,6 +64,10 @@ export enum NotificationStatus {
|
|
|
64
64
|
FAILED = 3,
|
|
65
65
|
SIMULATED = 4,
|
|
66
66
|
SUPPRESSED = 5,
|
|
67
|
+
/** DUPLICATE - Не надіслано: таке саме повідомлення вже пішло раніше (повтор події). */
|
|
68
|
+
DUPLICATE = 6,
|
|
69
|
+
/** DISABLED - Не надіслано: адмін вимкнув шаблон цього листа. */
|
|
70
|
+
DISABLED = 7,
|
|
67
71
|
UNRECOGNIZED = -1,
|
|
68
72
|
}
|
|
69
73
|
|
|
@@ -325,6 +329,13 @@ export interface BrandingProfile {
|
|
|
325
329
|
resolvedBrandUrl: string;
|
|
326
330
|
resolvedSupportEmail: string;
|
|
327
331
|
headerHtml: string;
|
|
332
|
+
/**
|
|
333
|
+
* Оформлення листа за замовчуванням (JSON EmailTheme) і глобальні шапка й
|
|
334
|
+
* підвал блоками (JSON EmailBlock[]). Порожній рядок — «як у коді».
|
|
335
|
+
*/
|
|
336
|
+
themeJson: string;
|
|
337
|
+
headerBlocksJson: string;
|
|
338
|
+
footerBlocksJson: string;
|
|
328
339
|
}
|
|
329
340
|
|
|
330
341
|
export interface UpdateBrandingRequest {
|
|
@@ -335,6 +346,9 @@ export interface UpdateBrandingRequest {
|
|
|
335
346
|
footerHtml?: string | undefined;
|
|
336
347
|
actorId: string;
|
|
337
348
|
headerHtml?: string | undefined;
|
|
349
|
+
themeJson?: string | undefined;
|
|
350
|
+
headerBlocksJson?: string | undefined;
|
|
351
|
+
footerBlocksJson?: string | undefined;
|
|
338
352
|
}
|
|
339
353
|
|
|
340
354
|
export interface NotificationTemplate {
|
|
@@ -439,18 +453,84 @@ export interface RenderPreviewRequest {
|
|
|
439
453
|
bodyHtml: string;
|
|
440
454
|
variablesJson: string;
|
|
441
455
|
subject?: string | undefined;
|
|
442
|
-
brandingJson?:
|
|
456
|
+
brandingJson?:
|
|
457
|
+
| string
|
|
458
|
+
| undefined;
|
|
459
|
+
/**
|
|
460
|
+
* Блоковий лист (JSON EmailDocument). Якщо заданий — рендеримо його, а
|
|
461
|
+
* body_html лише запасний шлях, як і при відправці.
|
|
462
|
+
*/
|
|
463
|
+
contentJson?:
|
|
464
|
+
| string
|
|
465
|
+
| undefined;
|
|
466
|
+
/** Категорія впливає на лист: у масових є посилання «Відписатися». */
|
|
467
|
+
category?: NotificationCategory | undefined;
|
|
468
|
+
locale?:
|
|
469
|
+
| NotificationLocale
|
|
470
|
+
| undefined;
|
|
471
|
+
/** Ключ листа — щоб попередити про змінні, яких цей лист не отримає. */
|
|
472
|
+
templateKey?: string | undefined;
|
|
443
473
|
}
|
|
444
474
|
|
|
445
475
|
export interface RenderPreviewResponse {
|
|
446
476
|
html: string;
|
|
447
477
|
subject: string;
|
|
478
|
+
/** Плейн-текстова версія — саме та, що піде в листі. */
|
|
479
|
+
text: string;
|
|
480
|
+
/** Попередження (невідома змінна, порожній alt, зламана розмітка тощо). */
|
|
481
|
+
warnings: string[];
|
|
448
482
|
}
|
|
449
483
|
|
|
450
484
|
export interface SendTestRequest {
|
|
451
485
|
templateId: string;
|
|
452
486
|
recipient: string;
|
|
453
487
|
variablesJson: string;
|
|
488
|
+
/**
|
|
489
|
+
* Незбережений стан редактора. Задані поля замінюють збережені — тестовий
|
|
490
|
+
* лист показує те, що адмін бачить зараз, а не останнє збереження.
|
|
491
|
+
*/
|
|
492
|
+
subject?: string | undefined;
|
|
493
|
+
contentJson?: string | undefined;
|
|
494
|
+
bodyHtml?: string | undefined;
|
|
495
|
+
bodyText?: string | undefined;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
export interface GetTemplateVariablesRequest {
|
|
499
|
+
key: string;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
export interface TemplateVariable {
|
|
503
|
+
path: string;
|
|
504
|
+
label: string;
|
|
505
|
+
example: string;
|
|
506
|
+
isList: boolean;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
export interface TemplateVariablesResponse {
|
|
510
|
+
/** event — лист шле система за подією; campaign — лист розсилки. */
|
|
511
|
+
source: string;
|
|
512
|
+
trigger: string;
|
|
513
|
+
variables: TemplateVariable[];
|
|
514
|
+
/** Приклад значень (JSON) — для попереднього перегляду. */
|
|
515
|
+
sampleJson: string;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
export interface DuplicateTemplateRequest {
|
|
519
|
+
id: string;
|
|
520
|
+
newKey: string;
|
|
521
|
+
locale?: NotificationLocale | undefined;
|
|
522
|
+
title?: string | undefined;
|
|
523
|
+
actorId?: string | undefined;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
export interface DeleteTemplateRequest {
|
|
527
|
+
id: string;
|
|
528
|
+
actorId?: string | undefined;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
export interface DeleteTemplateResponse {
|
|
532
|
+
ok: boolean;
|
|
533
|
+
errorMessage: string;
|
|
454
534
|
}
|
|
455
535
|
|
|
456
536
|
export interface SendTestResponse {
|
|
@@ -565,6 +645,18 @@ export interface NotificationTemplateServiceClient {
|
|
|
565
645
|
|
|
566
646
|
sendTest(request: SendTestRequest): Observable<SendTestResponse>;
|
|
567
647
|
|
|
648
|
+
/** Які змінні реально передає система в шаблон із цим ключем + приклад значень. */
|
|
649
|
+
|
|
650
|
+
getTemplateVariables(request: GetTemplateVariablesRequest): Observable<TemplateVariablesResponse>;
|
|
651
|
+
|
|
652
|
+
/** Копія шаблону під новим ключем і/або мовою (з тілом, блоками й темою). */
|
|
653
|
+
|
|
654
|
+
duplicateTemplate(request: DuplicateTemplateRequest): Observable<TemplateResponse>;
|
|
655
|
+
|
|
656
|
+
/** Видалення — лише для листів, створених адміном; системні ключі не видаляються. */
|
|
657
|
+
|
|
658
|
+
deleteTemplate(request: DeleteTemplateRequest): Observable<DeleteTemplateResponse>;
|
|
659
|
+
|
|
568
660
|
sendToCustomer(request: SendToCustomerRequest): Observable<SendToCustomerResponse>;
|
|
569
661
|
}
|
|
570
662
|
|
|
@@ -601,6 +693,24 @@ export interface NotificationTemplateServiceController {
|
|
|
601
693
|
|
|
602
694
|
sendTest(request: SendTestRequest): Promise<SendTestResponse> | Observable<SendTestResponse> | SendTestResponse;
|
|
603
695
|
|
|
696
|
+
/** Які змінні реально передає система в шаблон із цим ключем + приклад значень. */
|
|
697
|
+
|
|
698
|
+
getTemplateVariables(
|
|
699
|
+
request: GetTemplateVariablesRequest,
|
|
700
|
+
): Promise<TemplateVariablesResponse> | Observable<TemplateVariablesResponse> | TemplateVariablesResponse;
|
|
701
|
+
|
|
702
|
+
/** Копія шаблону під новим ключем і/або мовою (з тілом, блоками й темою). */
|
|
703
|
+
|
|
704
|
+
duplicateTemplate(
|
|
705
|
+
request: DuplicateTemplateRequest,
|
|
706
|
+
): Promise<TemplateResponse> | Observable<TemplateResponse> | TemplateResponse;
|
|
707
|
+
|
|
708
|
+
/** Видалення — лише для листів, створених адміном; системні ключі не видаляються. */
|
|
709
|
+
|
|
710
|
+
deleteTemplate(
|
|
711
|
+
request: DeleteTemplateRequest,
|
|
712
|
+
): Promise<DeleteTemplateResponse> | Observable<DeleteTemplateResponse> | DeleteTemplateResponse;
|
|
713
|
+
|
|
604
714
|
sendToCustomer(
|
|
605
715
|
request: SendToCustomerRequest,
|
|
606
716
|
): Promise<SendToCustomerResponse> | Observable<SendToCustomerResponse> | SendToCustomerResponse;
|
|
@@ -618,6 +728,9 @@ export function NotificationTemplateServiceControllerMethods() {
|
|
|
618
728
|
"restoreVersion",
|
|
619
729
|
"renderPreview",
|
|
620
730
|
"sendTest",
|
|
731
|
+
"getTemplateVariables",
|
|
732
|
+
"duplicateTemplate",
|
|
733
|
+
"deleteTemplate",
|
|
621
734
|
"sendToCustomer",
|
|
622
735
|
];
|
|
623
736
|
for (const method of grpcMethods) {
|
package/gen/order.ts
CHANGED
|
@@ -239,6 +239,8 @@ export interface CreateOrderRequest {
|
|
|
239
239
|
guestId: string;
|
|
240
240
|
source: string;
|
|
241
241
|
cartId: string;
|
|
242
|
+
/** Мова сайту на момент оформлення (uk | ru) — нею йдуть листи й SMS про замовлення. */
|
|
243
|
+
locale?: string | undefined;
|
|
242
244
|
}
|
|
243
245
|
|
|
244
246
|
export interface CreateManualOrderRequest {
|
|
@@ -252,6 +254,8 @@ export interface CreateManualOrderRequest {
|
|
|
252
254
|
payment: OrderPayment | undefined;
|
|
253
255
|
promoCode: string;
|
|
254
256
|
comment: string;
|
|
257
|
+
/** Мова листів покупцю (uk | ru); порожньо — українська. */
|
|
258
|
+
locale?: string | undefined;
|
|
255
259
|
}
|
|
256
260
|
|
|
257
261
|
export interface OrderItemInput {
|
package/package.json
CHANGED
package/proto/auth.proto
CHANGED
|
@@ -25,6 +25,8 @@ message LogoutResponse {
|
|
|
25
25
|
message SendOtpRequest {
|
|
26
26
|
string identifier = 1;
|
|
27
27
|
string type = 2;
|
|
28
|
+
// Мова сайту (uk | ru) — нею прийде лист/SMS із кодом.
|
|
29
|
+
optional string locale = 3;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
message SendOtpResponse {
|
|
@@ -55,6 +57,7 @@ message RegisterRequest {
|
|
|
55
57
|
message RequestPasswordResetRequest {
|
|
56
58
|
string identifier = 1;
|
|
57
59
|
string type = 2;
|
|
60
|
+
optional string locale = 3;
|
|
58
61
|
}
|
|
59
62
|
|
|
60
63
|
message RequestPasswordResetResponse {
|
|
@@ -8,7 +8,19 @@ service BonusSettingsService {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
message BonusSettingsResponse {
|
|
11
|
-
|
|
11
|
+
// Формула нарахування (п.17 переліку): кожні `earn_step_uah` гривень ціни
|
|
12
|
+
// товару дають `earn_per_step_uah` гривень бонусів, і лише для товарів не
|
|
13
|
+
// дешевших за `earn_min_price_uah`. Ціна береться ПІСЛЯ знижки.
|
|
14
|
+
//
|
|
15
|
+
// Поле 1 (`earn_rate`, відсоткова ставка) прибране: формула не відсоткова,
|
|
16
|
+
// а поле показувало 2% і тим вводило в оману. Номер зарезервовано, щоб його
|
|
17
|
+
// ніколи не перевикористали під інше значення.
|
|
18
|
+
reserved 1;
|
|
19
|
+
reserved "earn_rate";
|
|
20
|
+
|
|
21
|
+
double earn_step_uah = 6;
|
|
22
|
+
double earn_per_step_uah = 7;
|
|
23
|
+
double earn_min_price_uah = 8;
|
|
12
24
|
|
|
13
25
|
double redeem_rate = 2;
|
|
14
26
|
|
|
@@ -22,7 +34,12 @@ message BonusSettingsResponse {
|
|
|
22
34
|
message GetBonusSettingsRequest {}
|
|
23
35
|
|
|
24
36
|
message UpdateBonusSettingsRequest {
|
|
25
|
-
|
|
37
|
+
reserved 1;
|
|
38
|
+
reserved "earn_rate";
|
|
39
|
+
|
|
40
|
+
optional double earn_step_uah = 6;
|
|
41
|
+
optional double earn_per_step_uah = 7;
|
|
42
|
+
optional double earn_min_price_uah = 8;
|
|
26
43
|
optional double redeem_rate = 2;
|
|
27
44
|
optional double min_order_for_earn = 3;
|
|
28
45
|
optional double max_redeem_share = 4;
|
package/proto/notification.proto
CHANGED
|
@@ -13,6 +13,13 @@ service NotificationTemplateService {
|
|
|
13
13
|
rpc RenderPreview(RenderPreviewRequest) returns (RenderPreviewResponse);
|
|
14
14
|
rpc SendTest(SendTestRequest) returns (SendTestResponse);
|
|
15
15
|
|
|
16
|
+
// Які змінні реально передає система в шаблон із цим ключем + приклад значень.
|
|
17
|
+
rpc GetTemplateVariables(GetTemplateVariablesRequest) returns (TemplateVariablesResponse);
|
|
18
|
+
// Копія шаблону під новим ключем і/або мовою (з тілом, блоками й темою).
|
|
19
|
+
rpc DuplicateTemplate(DuplicateTemplateRequest) returns (TemplateResponse);
|
|
20
|
+
// Видалення — лише для листів, створених адміном; системні ключі не видаляються.
|
|
21
|
+
rpc DeleteTemplate(DeleteTemplateRequest) returns (DeleteTemplateResponse);
|
|
22
|
+
|
|
16
23
|
rpc SendToCustomer(SendToCustomerRequest) returns (SendToCustomerResponse);
|
|
17
24
|
}
|
|
18
25
|
|
|
@@ -341,6 +348,12 @@ message BrandingProfile {
|
|
|
341
348
|
string resolved_support_email = 11;
|
|
342
349
|
|
|
343
350
|
string header_html = 12;
|
|
351
|
+
|
|
352
|
+
// Оформлення листа за замовчуванням (JSON EmailTheme) і глобальні шапка й
|
|
353
|
+
// підвал блоками (JSON EmailBlock[]). Порожній рядок — «як у коді».
|
|
354
|
+
string theme_json = 13;
|
|
355
|
+
string header_blocks_json = 14;
|
|
356
|
+
string footer_blocks_json = 15;
|
|
344
357
|
}
|
|
345
358
|
|
|
346
359
|
message UpdateBrandingRequest {
|
|
@@ -351,6 +364,9 @@ message UpdateBrandingRequest {
|
|
|
351
364
|
optional string footer_html = 5;
|
|
352
365
|
string actor_id = 6;
|
|
353
366
|
optional string header_html = 7;
|
|
367
|
+
optional string theme_json = 8;
|
|
368
|
+
optional string header_blocks_json = 9;
|
|
369
|
+
optional string footer_blocks_json = 10;
|
|
354
370
|
}
|
|
355
371
|
|
|
356
372
|
enum NotificationChannel {
|
|
@@ -382,6 +398,10 @@ enum NotificationStatus {
|
|
|
382
398
|
FAILED = 3;
|
|
383
399
|
SIMULATED = 4;
|
|
384
400
|
SUPPRESSED = 5;
|
|
401
|
+
// Не надіслано: таке саме повідомлення вже пішло раніше (повтор події).
|
|
402
|
+
DUPLICATE = 6;
|
|
403
|
+
// Не надіслано: адмін вимкнув шаблон цього листа.
|
|
404
|
+
DISABLED = 7;
|
|
385
405
|
}
|
|
386
406
|
|
|
387
407
|
enum TelegramTopic {
|
|
@@ -509,11 +529,24 @@ message RenderPreviewRequest {
|
|
|
509
529
|
optional string subject = 3;
|
|
510
530
|
|
|
511
531
|
optional string branding_json = 4;
|
|
532
|
+
|
|
533
|
+
// Блоковий лист (JSON EmailDocument). Якщо заданий — рендеримо його, а
|
|
534
|
+
// body_html лише запасний шлях, як і при відправці.
|
|
535
|
+
optional string content_json = 5;
|
|
536
|
+
// Категорія впливає на лист: у масових є посилання «Відписатися».
|
|
537
|
+
optional NotificationCategory category = 6;
|
|
538
|
+
optional NotificationLocale locale = 7;
|
|
539
|
+
// Ключ листа — щоб попередити про змінні, яких цей лист не отримає.
|
|
540
|
+
optional string template_key = 8;
|
|
512
541
|
}
|
|
513
542
|
|
|
514
543
|
message RenderPreviewResponse {
|
|
515
544
|
string html = 1;
|
|
516
545
|
string subject = 2;
|
|
546
|
+
// Плейн-текстова версія — саме та, що піде в листі.
|
|
547
|
+
string text = 3;
|
|
548
|
+
// Попередження (невідома змінна, порожній alt, зламана розмітка тощо).
|
|
549
|
+
repeated string warnings = 4;
|
|
517
550
|
}
|
|
518
551
|
|
|
519
552
|
message SendTestRequest {
|
|
@@ -522,6 +555,51 @@ message SendTestRequest {
|
|
|
522
555
|
string recipient = 2;
|
|
523
556
|
|
|
524
557
|
string variables_json = 3;
|
|
558
|
+
|
|
559
|
+
// Незбережений стан редактора. Задані поля замінюють збережені — тестовий
|
|
560
|
+
// лист показує те, що адмін бачить зараз, а не останнє збереження.
|
|
561
|
+
optional string subject = 4;
|
|
562
|
+
optional string content_json = 5;
|
|
563
|
+
optional string body_html = 6;
|
|
564
|
+
optional string body_text = 7;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
message GetTemplateVariablesRequest {
|
|
568
|
+
string key = 1;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
message TemplateVariable {
|
|
572
|
+
string path = 1;
|
|
573
|
+
string label = 2;
|
|
574
|
+
string example = 3;
|
|
575
|
+
bool is_list = 4;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
message TemplateVariablesResponse {
|
|
579
|
+
// event — лист шле система за подією; campaign — лист розсилки.
|
|
580
|
+
string source = 1;
|
|
581
|
+
string trigger = 2;
|
|
582
|
+
repeated TemplateVariable variables = 3;
|
|
583
|
+
// Приклад значень (JSON) — для попереднього перегляду.
|
|
584
|
+
string sample_json = 4;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
message DuplicateTemplateRequest {
|
|
588
|
+
string id = 1;
|
|
589
|
+
string new_key = 2;
|
|
590
|
+
optional NotificationLocale locale = 3;
|
|
591
|
+
optional string title = 4;
|
|
592
|
+
optional string actor_id = 5;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
message DeleteTemplateRequest {
|
|
596
|
+
string id = 1;
|
|
597
|
+
optional string actor_id = 2;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
message DeleteTemplateResponse {
|
|
601
|
+
bool ok = 1;
|
|
602
|
+
string error_message = 2;
|
|
525
603
|
}
|
|
526
604
|
|
|
527
605
|
message SendTestResponse {
|
package/proto/order.proto
CHANGED
|
@@ -316,6 +316,8 @@ message CreateOrderRequest {
|
|
|
316
316
|
string guest_id = 3;
|
|
317
317
|
string source = 4;
|
|
318
318
|
string cart_id = 5;
|
|
319
|
+
// Мова сайту на момент оформлення (uk | ru) — нею йдуть листи й SMS про замовлення.
|
|
320
|
+
optional string locale = 6;
|
|
319
321
|
}
|
|
320
322
|
|
|
321
323
|
message CreateManualOrderRequest {
|
|
@@ -331,6 +333,8 @@ message CreateManualOrderRequest {
|
|
|
331
333
|
|
|
332
334
|
string promo_code = 9;
|
|
333
335
|
string comment = 10;
|
|
336
|
+
// Мова листів покупцю (uk | ru); порожньо — українська.
|
|
337
|
+
optional string locale = 11;
|
|
334
338
|
}
|
|
335
339
|
|
|
336
340
|
message OrderItemInput {
|