@escapenavigator/types 2.2.10 → 2.3.1
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/client/query-client.dto.d.ts +2 -0
- package/dist/client/query-client.dto.js +5 -0
- package/dist/integrations/admin-integration.ro.d.ts +62 -3
- package/dist/openapi/orders/openapi-order.ro.d.ts +1 -0
- package/dist/openapi/orders/openapi-order.ro.js +4 -0
- package/dist/order-group/order-offer-copy.d.ts +21 -0
- package/dist/order-group/order-offer-copy.js +21 -0
- package/dist/order-group/order-offer.d.ts +11 -0
- package/dist/order-group/order-offer.js +60 -2
- package/dist/profile/notification-chanel/notification-chanel-action.enum.d.ts +8 -2
- package/dist/profile/notification-chanel/notification-chanel-action.enum.js +6 -0
- package/dist/profile/telephony/novofon.d.ts +19 -0
- package/dist/profile/telephony/novofon.js +5 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export declare class QueryClientDto {
|
|
2
2
|
parentId?: number;
|
|
3
|
+
/** `adult` | `minor` — фильтр «взрослые / дети» в списке и выгрузке клиентов. */
|
|
4
|
+
clientType?: 'adult' | 'minor';
|
|
3
5
|
lastGame?: [string, string];
|
|
4
6
|
/**
|
|
5
7
|
* Recurring birthday window as `MM-DD` (year is ignored).
|
|
@@ -20,6 +20,11 @@ __decorate([
|
|
|
20
20
|
(0, class_transformer_1.Expose)(),
|
|
21
21
|
__metadata("design:type", Number)
|
|
22
22
|
], QueryClientDto.prototype, "parentId", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_validator_1.IsOptional)(),
|
|
25
|
+
(0, class_transformer_1.Expose)(),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], QueryClientDto.prototype, "clientType", void 0);
|
|
23
28
|
__decorate([
|
|
24
29
|
(0, class_validator_1.IsOptional)(),
|
|
25
30
|
(0, class_transformer_1.Expose)(),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IntegrationBookingModeEnum } from './booking-mode.enum';
|
|
2
2
|
import { IntegrationConnectionStatusEnum } from './connection-status.enum';
|
|
3
|
-
import { IntegrationIncidentSeverityEnum } from './incident-status.enum';
|
|
3
|
+
import { IntegrationIncidentSeverityEnum, IntegrationIncidentStatusEnum } from './incident-status.enum';
|
|
4
4
|
import { IntegrationIncidentTypeEnum } from './incident-type.enum';
|
|
5
5
|
import { IntegrationRequestStatusEnum } from './integration-request-status.enum';
|
|
6
6
|
import { IntegrationProviderCodeEnum } from './provider-code.enum';
|
|
@@ -34,10 +34,68 @@ export type AdminIntegrationConnectionRow = {
|
|
|
34
34
|
lastSuccessHoursAgo: number | null;
|
|
35
35
|
breakerOpen: boolean;
|
|
36
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Неисправленный квест на вкладке «Проблемы».
|
|
39
|
+
*
|
|
40
|
+
* Одна строка — один квест. Несколько записей (расписание не приходит, пустое
|
|
41
|
+
* расписание, бронь) схлопываются: `incidentIds` — все записи, смена статуса
|
|
42
|
+
* применяется к ним вместе. `resolved` и `ignored` в список не входят.
|
|
43
|
+
*/
|
|
44
|
+
export type AdminIntegrationProblemRow = {
|
|
45
|
+
/** Меньший id среди записей квеста. Стабильный ключ строки. */
|
|
46
|
+
id: number;
|
|
47
|
+
/** Все неисправленные записи, из которых собрана строка. */
|
|
48
|
+
incidentIds: number[];
|
|
49
|
+
connectionId: number;
|
|
50
|
+
profileId: number;
|
|
51
|
+
profileTitle: string;
|
|
52
|
+
connectionTitle: string;
|
|
53
|
+
/** `null`, если подключение уже удалили, а инцидент ещё открыт. */
|
|
54
|
+
providerCode: IntegrationProviderCodeEnum | null;
|
|
55
|
+
connectionStatus: IntegrationConnectionStatusEnum;
|
|
56
|
+
breakerOpen: boolean;
|
|
57
|
+
/** Комната, по которой сгруппирована строка. `null` — отказ всего подключения. */
|
|
58
|
+
questroomId: number | null;
|
|
59
|
+
/** Квест, к которому относится инцидент. «—», если комнаты не сопоставлены. */
|
|
60
|
+
quest: string;
|
|
61
|
+
/** Тип самой тяжёлой записи. */
|
|
62
|
+
type: IntegrationIncidentTypeEnum;
|
|
63
|
+
/** Все типы, которые сейчас открыты у этого квеста. */
|
|
64
|
+
types: IntegrationIncidentTypeEnum[];
|
|
65
|
+
severity: IntegrationIncidentSeverityEnum;
|
|
66
|
+
/**
|
|
67
|
+
* `open`, если хотя бы одна запись ещё новая. Иначе все записи уже в работе.
|
|
68
|
+
*/
|
|
69
|
+
status: IntegrationIncidentStatusEnum;
|
|
70
|
+
/** Человеческое описание: что сломалось. Несколько записей через « · ». */
|
|
71
|
+
summary: string;
|
|
72
|
+
occurrences: number;
|
|
73
|
+
firstSeenAt: string;
|
|
74
|
+
lastSeenAt: string;
|
|
75
|
+
/** Сколько часов инцидент уже открыт. Берётся самая старая запись квеста. */
|
|
76
|
+
hoursOpen: number;
|
|
77
|
+
/** Текст последней ошибки вызова, если он есть и не повтор summary. */
|
|
78
|
+
lastError: string | null;
|
|
79
|
+
/** Дата и время игры — только у инцидентов конкретной брони. */
|
|
80
|
+
gameDate: string | null;
|
|
81
|
+
gameTime: string | null;
|
|
82
|
+
orderId: number | null;
|
|
83
|
+
};
|
|
84
|
+
export type AdminIntegrationIncidentCounts = {
|
|
85
|
+
/** Квесты, которые ещё никто не взял. Совпадает со строками «Новый». */
|
|
86
|
+
open: number;
|
|
87
|
+
/** Квесты, которые уже в работе. */
|
|
88
|
+
acknowledged: number;
|
|
89
|
+
/** Записи, закрытые за последние сутки. */
|
|
90
|
+
resolved24h: number;
|
|
91
|
+
/** Записи, которые сейчас помечены как «не ошибка». */
|
|
92
|
+
ignored: number;
|
|
93
|
+
};
|
|
37
94
|
export type AdminIntegrationDashboard = {
|
|
38
95
|
byStatus: Record<IntegrationConnectionStatusEnum, number>;
|
|
39
|
-
/**
|
|
40
|
-
problems:
|
|
96
|
+
/** Неисправленные квесты. Сначала критические, потом самые долгие. */
|
|
97
|
+
problems: AdminIntegrationProblemRow[];
|
|
98
|
+
incidents: AdminIntegrationIncidentCounts;
|
|
41
99
|
/** Броней, не доехавших за сутки. */
|
|
42
100
|
failedBookings24h: number;
|
|
43
101
|
/** Заявок на подключение, ждущих нашего ответа. */
|
|
@@ -66,6 +124,7 @@ export type AdminIntegrationIncidentRow = {
|
|
|
66
124
|
id: number;
|
|
67
125
|
type: IntegrationIncidentTypeEnum;
|
|
68
126
|
severity: IntegrationIncidentSeverityEnum;
|
|
127
|
+
status: IntegrationIncidentStatusEnum;
|
|
69
128
|
summary: string;
|
|
70
129
|
firstSeenAt: string;
|
|
71
130
|
lastSeenAt: string | null;
|
|
@@ -135,6 +135,7 @@ export declare class OpenapiOrderRO extends QuestroomRow {
|
|
|
135
135
|
* одиночной игры — null.
|
|
136
136
|
*/
|
|
137
137
|
groupId?: number;
|
|
138
|
+
offerStatus?: import('../../order-group/order-offer').OfferStatus | null;
|
|
138
139
|
groupCode?: string;
|
|
139
140
|
/**
|
|
140
141
|
* Bearer-токен для protected widget endpoints для последующих
|
|
@@ -322,6 +322,10 @@ __decorate([
|
|
|
322
322
|
(0, class_transformer_1.Expose)(),
|
|
323
323
|
__metadata("design:type", Number)
|
|
324
324
|
], OpenapiOrderRO.prototype, "groupId", void 0);
|
|
325
|
+
__decorate([
|
|
326
|
+
(0, class_transformer_1.Expose)(),
|
|
327
|
+
__metadata("design:type", Object)
|
|
328
|
+
], OpenapiOrderRO.prototype, "offerStatus", void 0);
|
|
325
329
|
__decorate([
|
|
326
330
|
(0, class_transformer_1.Expose)(),
|
|
327
331
|
(0, class_transformer_1.Transform)(({ obj }) => { var _a; return (_a = obj === null || obj === void 0 ? void 0 : obj.group) === null || _a === void 0 ? void 0 : _a.code; }),
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
/** Shared quotation labels for CRM, customer pages and transactional email (crm namespace). */
|
|
2
2
|
export declare const offerCopy: {
|
|
3
|
+
readonly bookingFromOffer: "Booking from quotation";
|
|
4
|
+
readonly bookedHint: "All games and payments for this quotation are managed here.";
|
|
5
|
+
readonly bookingCancelled: "All games cancelled";
|
|
6
|
+
readonly bookingPartiallyCancelled: "Some games cancelled";
|
|
7
|
+
readonly openGame: "Manage game";
|
|
8
|
+
readonly reservedDraftHint: "Selected games are reserved until the deadline. Send the quotation or confirm the booking.";
|
|
9
|
+
readonly emptyDraftHint: "You can save this draft now and add games later.";
|
|
10
|
+
readonly gamesRequired: "Add at least one game before sending or booking the quotation.";
|
|
11
|
+
readonly bookUnpaidConfirm: "Confirm all games on these terms? No payment will be recorded; the balance will remain due.";
|
|
12
|
+
readonly presentation: "Customer presentation";
|
|
13
|
+
readonly presentationHint: "Customize this quotation’s customer page and email. Blank fields use the standard text.";
|
|
14
|
+
readonly presentationTitle: "Quotation heading";
|
|
15
|
+
readonly introduction: "Introduction";
|
|
16
|
+
readonly footer: "Closing text";
|
|
17
|
+
readonly emailSubject: "Email subject";
|
|
18
|
+
readonly showLocation: "Show addresses";
|
|
19
|
+
readonly showParticipants: "Show participant counts";
|
|
20
|
+
readonly showDiscount: "Show discounts";
|
|
21
|
+
readonly paid: "Paid";
|
|
22
|
+
readonly due: "Balance due";
|
|
23
|
+
readonly savedDraft: "Draft saved";
|
|
3
24
|
readonly lead: "Lead";
|
|
4
25
|
readonly leadUnavailable: "This lead is unavailable.";
|
|
5
26
|
readonly leadConverted: "This lead has already been converted. Open the linked booking or certificate.";
|
|
@@ -3,6 +3,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.offerCopy = void 0;
|
|
4
4
|
/** Shared quotation labels for CRM, customer pages and transactional email (crm namespace). */
|
|
5
5
|
exports.offerCopy = {
|
|
6
|
+
bookingFromOffer: 'Booking from quotation',
|
|
7
|
+
bookedHint: 'All games and payments for this quotation are managed here.',
|
|
8
|
+
bookingCancelled: 'All games cancelled',
|
|
9
|
+
bookingPartiallyCancelled: 'Some games cancelled',
|
|
10
|
+
openGame: 'Manage game',
|
|
11
|
+
reservedDraftHint: 'Selected games are reserved until the deadline. Send the quotation or confirm the booking.',
|
|
12
|
+
emptyDraftHint: 'You can save this draft now and add games later.',
|
|
13
|
+
gamesRequired: 'Add at least one game before sending or booking the quotation.',
|
|
14
|
+
bookUnpaidConfirm: 'Confirm all games on these terms? No payment will be recorded; the balance will remain due.',
|
|
15
|
+
presentation: 'Customer presentation',
|
|
16
|
+
presentationHint: 'Customize this quotation’s customer page and email. Blank fields use the standard text.',
|
|
17
|
+
presentationTitle: 'Quotation heading',
|
|
18
|
+
introduction: 'Introduction',
|
|
19
|
+
footer: 'Closing text',
|
|
20
|
+
emailSubject: 'Email subject',
|
|
21
|
+
showLocation: 'Show addresses',
|
|
22
|
+
showParticipants: 'Show participant counts',
|
|
23
|
+
showDiscount: 'Show discounts',
|
|
24
|
+
paid: 'Paid',
|
|
25
|
+
due: 'Balance due',
|
|
26
|
+
savedDraft: 'Draft saved',
|
|
6
27
|
lead: 'Lead',
|
|
7
28
|
leadUnavailable: 'This lead is unavailable.',
|
|
8
29
|
leadConverted: 'This lead has already been converted. Open the linked booking or certificate.',
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
export declare const offerStatuses: readonly ["draft", "pending", "payment_pending", "accepted", "declined", "expired", "cancelled"];
|
|
2
2
|
export type OfferStatus = (typeof offerStatuses)[number];
|
|
3
3
|
export declare const isOfferReservation: (status?: OfferStatus | null) => status is "draft" | "pending" | "payment_pending";
|
|
4
|
+
export declare const isOfferBooking: (status?: OfferStatus | null) => status is "draft" | "pending" | "payment_pending" | "accepted";
|
|
5
|
+
export declare class OfferPresentationDto {
|
|
6
|
+
title?: string;
|
|
7
|
+
introduction?: string;
|
|
8
|
+
footer?: string;
|
|
9
|
+
emailSubject?: string;
|
|
10
|
+
showLocation?: boolean;
|
|
11
|
+
showParticipants?: boolean;
|
|
12
|
+
showDiscount?: boolean;
|
|
13
|
+
}
|
|
4
14
|
export declare class OfferDiscountDto {
|
|
5
15
|
kind: 'fixed' | 'percent';
|
|
6
16
|
/** Percentages use basis points; money uses the currency's minor unit. */
|
|
@@ -26,6 +36,7 @@ export declare class SaveOrderOfferDto {
|
|
|
26
36
|
language: string;
|
|
27
37
|
comment?: string;
|
|
28
38
|
lines: OfferLineDto[];
|
|
39
|
+
presentation?: OfferPresentationDto;
|
|
29
40
|
discount?: OfferDiscountDto;
|
|
30
41
|
/** Optional negotiated group price before tax, distributed over the games. */
|
|
31
42
|
groupPrice?: number;
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.SaveOrderOfferDto = exports.OfferLineDto = exports.OfferDiscountDto = exports.isOfferReservation = exports.offerStatuses = void 0;
|
|
12
|
+
exports.SaveOrderOfferDto = exports.OfferLineDto = exports.OfferDiscountDto = exports.OfferPresentationDto = exports.isOfferBooking = exports.isOfferReservation = exports.offerStatuses = void 0;
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
15
|
const languages_enum_1 = require("../shared/enum/languages.enum");
|
|
@@ -24,6 +24,57 @@ exports.offerStatuses = [
|
|
|
24
24
|
];
|
|
25
25
|
const isOfferReservation = (status) => status === 'pending' || status === 'payment_pending' || status === 'draft';
|
|
26
26
|
exports.isOfferReservation = isOfferReservation;
|
|
27
|
+
const isOfferBooking = (status) => (0, exports.isOfferReservation)(status) || status === 'accepted';
|
|
28
|
+
exports.isOfferBooking = isOfferBooking;
|
|
29
|
+
class OfferPresentationDto {
|
|
30
|
+
}
|
|
31
|
+
exports.OfferPresentationDto = OfferPresentationDto;
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, class_transformer_1.Expose)(),
|
|
34
|
+
(0, class_validator_1.IsOptional)(),
|
|
35
|
+
(0, class_validator_1.IsString)(),
|
|
36
|
+
(0, class_validator_1.MaxLength)(160),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], OfferPresentationDto.prototype, "title", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, class_transformer_1.Expose)(),
|
|
41
|
+
(0, class_validator_1.IsOptional)(),
|
|
42
|
+
(0, class_validator_1.IsString)(),
|
|
43
|
+
(0, class_validator_1.MaxLength)(3000),
|
|
44
|
+
__metadata("design:type", String)
|
|
45
|
+
], OfferPresentationDto.prototype, "introduction", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, class_transformer_1.Expose)(),
|
|
48
|
+
(0, class_validator_1.IsOptional)(),
|
|
49
|
+
(0, class_validator_1.IsString)(),
|
|
50
|
+
(0, class_validator_1.MaxLength)(3000),
|
|
51
|
+
__metadata("design:type", String)
|
|
52
|
+
], OfferPresentationDto.prototype, "footer", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, class_transformer_1.Expose)(),
|
|
55
|
+
(0, class_validator_1.IsOptional)(),
|
|
56
|
+
(0, class_validator_1.IsString)(),
|
|
57
|
+
(0, class_validator_1.MaxLength)(160),
|
|
58
|
+
__metadata("design:type", String)
|
|
59
|
+
], OfferPresentationDto.prototype, "emailSubject", void 0);
|
|
60
|
+
__decorate([
|
|
61
|
+
(0, class_transformer_1.Expose)(),
|
|
62
|
+
(0, class_validator_1.IsOptional)(),
|
|
63
|
+
(0, class_validator_1.IsBoolean)(),
|
|
64
|
+
__metadata("design:type", Boolean)
|
|
65
|
+
], OfferPresentationDto.prototype, "showLocation", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, class_transformer_1.Expose)(),
|
|
68
|
+
(0, class_validator_1.IsOptional)(),
|
|
69
|
+
(0, class_validator_1.IsBoolean)(),
|
|
70
|
+
__metadata("design:type", Boolean)
|
|
71
|
+
], OfferPresentationDto.prototype, "showParticipants", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
(0, class_transformer_1.Expose)(),
|
|
74
|
+
(0, class_validator_1.IsOptional)(),
|
|
75
|
+
(0, class_validator_1.IsBoolean)(),
|
|
76
|
+
__metadata("design:type", Boolean)
|
|
77
|
+
], OfferPresentationDto.prototype, "showDiscount", void 0);
|
|
27
78
|
class OfferDiscountDto {
|
|
28
79
|
}
|
|
29
80
|
exports.OfferDiscountDto = OfferDiscountDto;
|
|
@@ -153,12 +204,19 @@ __decorate([
|
|
|
153
204
|
__decorate([
|
|
154
205
|
(0, class_transformer_1.Expose)(),
|
|
155
206
|
(0, class_validator_1.IsArray)(),
|
|
156
|
-
(0, class_validator_1.ArrayMinSize)(
|
|
207
|
+
(0, class_validator_1.ArrayMinSize)(0),
|
|
157
208
|
(0, class_validator_1.ArrayMaxSize)(8),
|
|
158
209
|
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
159
210
|
(0, class_transformer_1.Type)(() => OfferLineDto),
|
|
160
211
|
__metadata("design:type", Array)
|
|
161
212
|
], SaveOrderOfferDto.prototype, "lines", void 0);
|
|
213
|
+
__decorate([
|
|
214
|
+
(0, class_transformer_1.Expose)(),
|
|
215
|
+
(0, class_validator_1.IsOptional)(),
|
|
216
|
+
(0, class_validator_1.ValidateNested)(),
|
|
217
|
+
(0, class_transformer_1.Type)(() => OfferPresentationDto),
|
|
218
|
+
__metadata("design:type", OfferPresentationDto)
|
|
219
|
+
], SaveOrderOfferDto.prototype, "presentation", void 0);
|
|
162
220
|
__decorate([
|
|
163
221
|
(0, class_transformer_1.Expose)(),
|
|
164
222
|
(0, class_validator_1.IsOptional)(),
|
|
@@ -28,7 +28,13 @@ export declare enum NotificationTriggerEnum {
|
|
|
28
28
|
* подписанта и всех, кого он вписал в этот раз. Письма сотруднику нет,
|
|
29
29
|
* уходят вебхук и мессенджеры.
|
|
30
30
|
*/
|
|
31
|
-
WAIVER_SIGNED = "waiver-signed"
|
|
31
|
+
WAIVER_SIGNED = "waiver-signed",
|
|
32
|
+
/**
|
|
33
|
+
* Клиент написал в подключённый мессенджер компании (Telegram/VK/MAX),
|
|
34
|
+
* и диалог начал ждать ответа сотрудника. Одно событие на «волну»
|
|
35
|
+
* сообщений: следующие сообщения клиента до ответа его не поднимают.
|
|
36
|
+
*/
|
|
37
|
+
NEW_CHAT_MESSAGE = "new-chat-message"
|
|
32
38
|
}
|
|
33
39
|
/**
|
|
34
40
|
* События, payload которых строится вокруг продажи сертификата, а не заказа.
|
|
@@ -47,4 +53,4 @@ export declare const isWaiverNotificationTrigger: (trigger: NotificationTriggerE
|
|
|
47
53
|
* События, по которым сотруднику уходит письмо. Вейвер в этот список не
|
|
48
54
|
* входит: отдельного письма нет, и чекбокс в почте ничего бы не слал.
|
|
49
55
|
*/
|
|
50
|
-
export declare const STAFF_EMAIL_NOTIFICATION_TRIGGERS: (NotificationTriggerEnum.NEW_ORDER | NotificationTriggerEnum.UPDATE_ORDER_DATE | NotificationTriggerEnum.CANCEL_ORDER | NotificationTriggerEnum.ASSIGNMENTS | NotificationTriggerEnum.CERTIFICATE_SALES | NotificationTriggerEnum.UNASSIGNMENTS | NotificationTriggerEnum.ORDER_PAID_VIA_ORDERS | NotificationTriggerEnum.CERTIFICATE_UPDATED | NotificationTriggerEnum.CERTIFICATE_ANNUL | NotificationTriggerEnum.NEW_LEAD)[];
|
|
56
|
+
export declare const STAFF_EMAIL_NOTIFICATION_TRIGGERS: (NotificationTriggerEnum.NEW_ORDER | NotificationTriggerEnum.UPDATE_ORDER_DATE | NotificationTriggerEnum.CANCEL_ORDER | NotificationTriggerEnum.ASSIGNMENTS | NotificationTriggerEnum.CERTIFICATE_SALES | NotificationTriggerEnum.UNASSIGNMENTS | NotificationTriggerEnum.ORDER_PAID_VIA_ORDERS | NotificationTriggerEnum.CERTIFICATE_UPDATED | NotificationTriggerEnum.CERTIFICATE_ANNUL | NotificationTriggerEnum.NEW_LEAD | NotificationTriggerEnum.NEW_CHAT_MESSAGE)[];
|
|
@@ -33,6 +33,12 @@ var NotificationTriggerEnum;
|
|
|
33
33
|
* уходят вебхук и мессенджеры.
|
|
34
34
|
*/
|
|
35
35
|
NotificationTriggerEnum["WAIVER_SIGNED"] = "waiver-signed";
|
|
36
|
+
/**
|
|
37
|
+
* Клиент написал в подключённый мессенджер компании (Telegram/VK/MAX),
|
|
38
|
+
* и диалог начал ждать ответа сотрудника. Одно событие на «волну»
|
|
39
|
+
* сообщений: следующие сообщения клиента до ответа его не поднимают.
|
|
40
|
+
*/
|
|
41
|
+
NotificationTriggerEnum["NEW_CHAT_MESSAGE"] = "new-chat-message";
|
|
36
42
|
})(NotificationTriggerEnum || (exports.NotificationTriggerEnum = NotificationTriggerEnum = {}));
|
|
37
43
|
/**
|
|
38
44
|
* События, payload которых строится вокруг продажи сертификата, а не заказа.
|
|
@@ -12,6 +12,8 @@ export declare class UpdateNovofonLineDto {
|
|
|
12
12
|
enabled: boolean;
|
|
13
13
|
employeeId?: number;
|
|
14
14
|
webrtcToken?: string;
|
|
15
|
+
/** Отключить звонилку в браузере: звонки пойдут в приложение Новофона. */
|
|
16
|
+
removeWebrtcToken?: boolean;
|
|
15
17
|
canListen: boolean;
|
|
16
18
|
}
|
|
17
19
|
export declare class StartNovofonCallDto {
|
|
@@ -38,6 +40,23 @@ export type NovofonLineRO = {
|
|
|
38
40
|
hasWebrtcToken: boolean;
|
|
39
41
|
canListen: boolean;
|
|
40
42
|
};
|
|
43
|
+
export type NovofonEmployeeRO = {
|
|
44
|
+
id: number;
|
|
45
|
+
fullName: string;
|
|
46
|
+
/** Сотрудник CRM, к которому уже привязана эта линия. */
|
|
47
|
+
assignedUserId: number | null;
|
|
48
|
+
};
|
|
49
|
+
export type NovofonEmployeesRO = {
|
|
50
|
+
employees: NovofonEmployeeRO[];
|
|
51
|
+
/** Совпадение по ФИО с сотрудником CRM, если оно однозначное и линия свободна. */
|
|
52
|
+
suggestedEmployeeId: number | null;
|
|
53
|
+
};
|
|
54
|
+
export type NovofonAvailabilityRO = {
|
|
55
|
+
enabled: boolean;
|
|
56
|
+
canListen: boolean;
|
|
57
|
+
/** true — звонилка в браузере (WebRTC), false — звонки через приложение Новофона. */
|
|
58
|
+
browserPhone: boolean;
|
|
59
|
+
};
|
|
41
60
|
export type NovofonCallRO = {
|
|
42
61
|
id: number;
|
|
43
62
|
direction: string;
|
|
@@ -70,6 +70,11 @@ __decorate([
|
|
|
70
70
|
(0, class_validator_1.MaxLength)(2000),
|
|
71
71
|
__metadata("design:type", String)
|
|
72
72
|
], UpdateNovofonLineDto.prototype, "webrtcToken", void 0);
|
|
73
|
+
__decorate([
|
|
74
|
+
(0, class_validator_1.IsOptional)(),
|
|
75
|
+
(0, class_validator_1.IsBoolean)(),
|
|
76
|
+
__metadata("design:type", Boolean)
|
|
77
|
+
], UpdateNovofonLineDto.prototype, "removeWebrtcToken", void 0);
|
|
73
78
|
__decorate([
|
|
74
79
|
(0, class_validator_1.IsBoolean)(),
|
|
75
80
|
__metadata("design:type", Boolean)
|