@dev.smartpricing/message-composer-layer 4.3.2-fix.1 → 4.5.1-next.0
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/README.md +228 -46
- package/app/api/brands.ts +20 -13
- package/app/api/client.ts +15 -6
- package/app/api/compilation.ts +13 -3
- package/app/api/dynamicValues.ts +6 -2
- package/app/api/media.ts +6 -3
- package/app/api/messageGroups.ts +29 -14
- package/app/api/meta.ts +26 -4
- package/app/api/organization.ts +10 -1
- package/app/api/tracking.ts +2 -2
- package/app/components/Common/AppContextErrors.vue +30 -0
- package/app/components/Common/HtmlPreviewIframe.vue +17 -3
- package/app/components/Common/MessageGroupSelect.vue +164 -26
- package/app/components/Common/MessagePreviewSlideover.vue +3 -0
- package/app/components/Common/OrganizationGate.vue +51 -0
- package/app/components/Common/OrganizationSelect.vue +27 -0
- package/app/components/Common/WhatsappNotConfigured.vue +20 -0
- package/app/components/Composer/EmailComposer.vue +4 -0
- package/app/components/Composer/MessageLibrary.vue +17 -7
- package/app/components/Composer/WabaSelectModal.vue +75 -0
- package/app/components/Composer/WhatsappComposer.vue +78 -3
- package/app/components/MessageSendFlow/EmailPreview.vue +81 -0
- package/app/components/MessageSendFlow/LanguageSelect.vue +39 -0
- package/app/components/MessageSendFlow/MessageSendFlow.vue +265 -0
- package/app/components/MessageSendFlow/ParametersForm.vue +51 -0
- package/app/components/TemplateList/BaseTable.vue +156 -108
- package/app/components/Whatsapp/Preview.vue +12 -4
- package/app/components/Whatsapp/PreviewPanel.vue +7 -1
- package/app/composables/composerContext.ts +9 -7
- package/app/composables/useEffectiveOrganization.ts +34 -0
- package/app/composables/useMessageGroupList.ts +186 -0
- package/app/composables/useMessageGroupWaba.ts +73 -0
- package/app/composables/useMessageSendFlow.ts +284 -0
- package/app/composables/usePagedMessageGroups.ts +78 -0
- package/app/composables/useTemplateOperations.ts +23 -4
- package/app/composables/useTracking.ts +14 -5
- package/app/composables/useWhatsappConfiguration.ts +32 -0
- package/app/layouts/default.vue +5 -1
- package/app/pages/brands.vue +1 -0
- package/app/pages/images.vue +4 -0
- package/app/pages/index.vue +1 -0
- package/app/pages/preview/[id].vue +2 -0
- package/app/pages/template/whatsapp/[id].vue +1 -0
- package/app/queries/brands.ts +27 -7
- package/app/queries/compilation.ts +16 -3
- package/app/queries/dynamicValues.ts +19 -2
- package/app/queries/media.ts +8 -3
- package/app/queries/messageGroups.ts +56 -17
- package/app/queries/meta.ts +13 -8
- package/app/stores/appContext.ts +18 -48
- package/app/stores/effectiveOrganization.ts +128 -0
- package/app/stores/emailEditor.ts +5 -1
- package/app/stores/metaSubmission.ts +7 -17
- package/app/types/tracking.ts +17 -0
- package/app/utils/testIds.const.ts +29 -0
- package/i18n/locales/de.ts +84 -2
- package/i18n/locales/en.ts +80 -2
- package/i18n/locales/es.ts +81 -2
- package/i18n/locales/fr.ts +81 -2
- package/i18n/locales/it.ts +82 -2
- package/package.json +2 -2
|
@@ -199,7 +199,11 @@ export const useEmailEditorStore = defineStore('emailEditor', () => {
|
|
|
199
199
|
sort_by?: 'created_at' | 'name'
|
|
200
200
|
direction?: 'asc' | 'desc'
|
|
201
201
|
}) {
|
|
202
|
-
|
|
202
|
+
// The Brands of the Effective Organization: the edited Message Group's.
|
|
203
|
+
brands.value = await brandsApi.getAll({
|
|
204
|
+
...options,
|
|
205
|
+
organization_id: useEffectiveOrganizationStore().requireOrganizationId(),
|
|
206
|
+
})
|
|
203
207
|
return brands.value
|
|
204
208
|
}
|
|
205
209
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { SubmissionJob } from '@dev.smartpricing/message-composer-utils/types'
|
|
2
2
|
import { metaApi } from '~/api/meta'
|
|
3
3
|
import { useQueryCache } from '@pinia/colada'
|
|
4
|
-
import { useAppContextStore } from './appContext'
|
|
5
4
|
|
|
6
5
|
interface ActiveJob {
|
|
7
6
|
jobId: string
|
|
@@ -12,21 +11,17 @@ interface ActiveJob {
|
|
|
12
11
|
export const useMetaSubmissionStore = () => {
|
|
13
12
|
const toast = useToast()
|
|
14
13
|
const queryCache = useQueryCache()
|
|
15
|
-
const appContext = useAppContextStore()
|
|
16
14
|
const { t } = useI18n()
|
|
17
15
|
|
|
18
16
|
const activeJobs = useState<Map<string, ActiveJob>>('meta-submission-jobs', () => new Map())
|
|
19
17
|
const pollingInterval = useState<NodeJS.Timeout | null>('meta-polling-interval', () => null)
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const submitToMeta = async (messageGroupId: string) => {
|
|
24
|
-
if (!isConfigured.value) {
|
|
25
|
-
throw new Error('Meta configuration not available')
|
|
26
|
-
}
|
|
27
|
-
|
|
19
|
+
// `wabaId` is the WABA the user picked for a first submission, if any.
|
|
20
|
+
const submitToMeta = async (messageGroupId: string, wabaId?: string) => {
|
|
28
21
|
try {
|
|
29
|
-
const response = await metaApi.submitGroup(messageGroupId)
|
|
22
|
+
const response = await metaApi.submitGroup(messageGroupId, wabaId)
|
|
23
|
+
// The Message Group is on its WABA from now on: read it again.
|
|
24
|
+
queryCache.invalidateQueries({ key: ['message-groups', messageGroupId] })
|
|
30
25
|
startBackgroundPolling(response.jobId, messageGroupId)
|
|
31
26
|
return response
|
|
32
27
|
} catch (error) {
|
|
@@ -38,13 +33,9 @@ export const useMetaSubmissionStore = () => {
|
|
|
38
33
|
// Submit a single message (one language) for Meta review. Synchronous:
|
|
39
34
|
// the endpoint submits inline and flips the message to `pending`, so there
|
|
40
35
|
// is no job to poll — unlike the group flow.
|
|
41
|
-
const submitMessageToMeta = async (messageId: string) => {
|
|
42
|
-
if (!isConfigured.value) {
|
|
43
|
-
throw new Error('Meta configuration not available')
|
|
44
|
-
}
|
|
45
|
-
|
|
36
|
+
const submitMessageToMeta = async (messageId: string, wabaId?: string) => {
|
|
46
37
|
try {
|
|
47
|
-
const response = await metaApi.submitMessage(messageId)
|
|
38
|
+
const response = await metaApi.submitMessage(messageId, wabaId)
|
|
48
39
|
toast.add({
|
|
49
40
|
color: 'success',
|
|
50
41
|
title: t('meta_submission.message_success'),
|
|
@@ -133,7 +124,6 @@ export const useMetaSubmissionStore = () => {
|
|
|
133
124
|
return {
|
|
134
125
|
activeJobs,
|
|
135
126
|
hasActiveJobs,
|
|
136
|
-
isConfigured,
|
|
137
127
|
submitToMeta,
|
|
138
128
|
submitMessageToMeta,
|
|
139
129
|
startBackgroundPolling,
|
package/app/types/tracking.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import type { MessageGroupProduct } from '@dev.smartpricing/message-composer-utils/types'
|
|
2
|
+
|
|
1
3
|
export type MessagesKind = 'email' | 'whatsapp'
|
|
2
4
|
|
|
5
|
+
/** The step an operator was on when leaving the Message Send Flow. */
|
|
6
|
+
export type MessageSendFlowStep = 'message' | 'parameters'
|
|
7
|
+
|
|
3
8
|
export interface MessageActionProperties {
|
|
4
9
|
message_name: string
|
|
5
10
|
languages: string[]
|
|
@@ -83,6 +88,8 @@ export interface TrackingEventMap {
|
|
|
83
88
|
search_term: string
|
|
84
89
|
category: string
|
|
85
90
|
status: string
|
|
91
|
+
/** The Product filter; `all` when not narrowed. */
|
|
92
|
+
product: MessageGroupProduct | 'all'
|
|
86
93
|
messages_kind: MessagesKind
|
|
87
94
|
}
|
|
88
95
|
change_tab: { messages_kind: MessagesKind }
|
|
@@ -160,4 +167,14 @@ export interface TrackingEventMap {
|
|
|
160
167
|
to_recipients: number
|
|
161
168
|
language: string
|
|
162
169
|
}
|
|
170
|
+
|
|
171
|
+
// === Message Send Flow (spec #67) ===
|
|
172
|
+
'send_flow.confirm': {
|
|
173
|
+
message_name: string
|
|
174
|
+
message_category: string
|
|
175
|
+
language: string
|
|
176
|
+
parameters_count: number
|
|
177
|
+
}
|
|
178
|
+
'send_flow.cancel': { step: MessageSendFlowStep }
|
|
179
|
+
'send_flow.error': { code: string }
|
|
163
180
|
}
|
|
@@ -513,11 +513,16 @@ export const templateListTableTestIds = {
|
|
|
513
513
|
searchInput: 'template-list-table-search-input',
|
|
514
514
|
categorySelect: 'template-list-table-category-select',
|
|
515
515
|
statusSelect: 'template-list-table-status-select',
|
|
516
|
+
productSelect: 'template-list-table-product-select',
|
|
517
|
+
visibilitySelect: 'template-list-table-visibility-select',
|
|
518
|
+
pagination: 'template-list-table-pagination',
|
|
519
|
+
paginationSummary: 'template-list-table-pagination-summary',
|
|
516
520
|
card: 'template-list-table-card',
|
|
517
521
|
table: 'template-list-table-table',
|
|
518
522
|
rowName: 'template-list-table-row-name',
|
|
519
523
|
rowInternalBadge: 'template-list-table-row-internal-badge',
|
|
520
524
|
rowCategoryBadge: 'template-list-table-row-category-badge',
|
|
525
|
+
rowProductBadge: 'template-list-table-row-product-badge',
|
|
521
526
|
rowPreview: 'template-list-table-row-preview',
|
|
522
527
|
rowActions: 'template-list-table-row-actions',
|
|
523
528
|
rowEditAction: 'template-list-table-row-edit',
|
|
@@ -751,7 +756,31 @@ export const previewByIdTestIds = {
|
|
|
751
756
|
|
|
752
757
|
export const messageGroupSelectTestIds = {
|
|
753
758
|
root: 'message-group-select-root',
|
|
759
|
+
loadMore: 'message-group-select-load-more',
|
|
754
760
|
} as const
|
|
755
761
|
|
|
756
762
|
/** @deprecated Use `messageGroupSelectTestIds` instead */
|
|
757
763
|
export const templateSelectTestIds = messageGroupSelectTestIds
|
|
764
|
+
|
|
765
|
+
export const messageSendFlowTestIds = {
|
|
766
|
+
root: 'message-send-flow-root',
|
|
767
|
+
stepper: 'message-send-flow-stepper',
|
|
768
|
+
alert: 'message-send-flow-alert',
|
|
769
|
+
picker: 'message-send-flow-picker',
|
|
770
|
+
languageGroup: 'message-send-flow-language-group',
|
|
771
|
+
parametersForm: 'message-send-flow-parameters-form',
|
|
772
|
+
/** One per visible key; the key is on `data-parameter`. */
|
|
773
|
+
parameterInput: 'message-send-flow-parameter-input',
|
|
774
|
+
noParameters: 'message-send-flow-no-parameters',
|
|
775
|
+
/** Right panel, present on every step, holding the channel preview. */
|
|
776
|
+
previewPanel: 'message-send-flow-preview-panel',
|
|
777
|
+
preview: 'message-send-flow-preview',
|
|
778
|
+
/** The compiled email of the Preview step (`render_type` email_v1). */
|
|
779
|
+
emailPreview: 'message-send-flow-email-preview',
|
|
780
|
+
/** The Cancel/Back/Next/Confirm bar, inline or teleported to `actionsTo`. */
|
|
781
|
+
actions: 'message-send-flow-actions',
|
|
782
|
+
back: 'message-send-flow-back',
|
|
783
|
+
next: 'message-send-flow-next',
|
|
784
|
+
cancel: 'message-send-flow-cancel',
|
|
785
|
+
confirm: 'message-send-flow-confirm',
|
|
786
|
+
} as const
|
package/i18n/locales/de.ts
CHANGED
|
@@ -18,6 +18,7 @@ export default {
|
|
|
18
18
|
all: 'Alle',
|
|
19
19
|
copy: 'Kopieren',
|
|
20
20
|
copy_of: 'Kopie von {name}',
|
|
21
|
+
context_error_title: 'Konfigurationsfehler des Composers',
|
|
21
22
|
desktop: 'Desktop',
|
|
22
23
|
error: 'Fehler',
|
|
23
24
|
errore: 'Fehler',
|
|
@@ -50,6 +51,17 @@ export default {
|
|
|
50
51
|
},
|
|
51
52
|
internal: 'Intern',
|
|
52
53
|
mobile: 'Mobil',
|
|
54
|
+
organization: {
|
|
55
|
+
label: 'Organisation',
|
|
56
|
+
lookup_failed_description:
|
|
57
|
+
'Beim Laden der Organisationen, auf die Sie Zugriff haben, ist ein Fehler aufgetreten. Versuchen Sie es erneut.',
|
|
58
|
+
lookup_failed_title: 'Ihre Organisationen konnten nicht geladen werden',
|
|
59
|
+
none_description: 'Ihr Benutzer hat auf keine Organisation Zugriff.',
|
|
60
|
+
none_title: 'Keine Organisation verfügbar',
|
|
61
|
+
resolving: 'Ihre Organisationen werden geladen...',
|
|
62
|
+
retry: 'Erneut versuchen',
|
|
63
|
+
search_placeholder: 'Organisationen suchen...',
|
|
64
|
+
},
|
|
53
65
|
preview: 'Vorschau',
|
|
54
66
|
search: 'Suchen...',
|
|
55
67
|
success: 'Erfolg',
|
|
@@ -57,10 +69,21 @@ export default {
|
|
|
57
69
|
messageGroupSelect: {
|
|
58
70
|
inactive_tooltip:
|
|
59
71
|
'Diese Nachrichtengruppe enthält nicht genehmigte oder fehlende Nachrichten',
|
|
72
|
+
not_sendable_tooltip: 'Diese Nachrichtengruppe enthält keine genehmigten Nachrichten',
|
|
60
73
|
hide_inactive: 'Inaktive ausblenden',
|
|
74
|
+
hide_not_sendable: 'Nicht sendbare ausblenden',
|
|
75
|
+
load_more: 'Mehr laden',
|
|
61
76
|
},
|
|
62
77
|
view_less: 'Weniger anzeigen',
|
|
63
78
|
view_more: 'Mehr anzeigen',
|
|
79
|
+
whatsapp_not_configured_description:
|
|
80
|
+
'Diese Organisation hat kein WhatsApp-Business-Konto. WhatsApp-Nachrichten können als Entwurf gespeichert, aber nicht zur Genehmigung eingereicht werden.',
|
|
81
|
+
whatsapp_not_configured_title: 'WhatsApp ist nicht konfiguriert',
|
|
82
|
+
whatsapp_waba_detached_description:
|
|
83
|
+
'Sie kann nicht mehr zur Genehmigung eingereicht werden. Dupliziere sie, um die Kopie bei einem anderen WhatsApp Business-Konto einzureichen.',
|
|
84
|
+
whatsapp_waba_detached_title:
|
|
85
|
+
'Diese Nachricht gehört zu einem WhatsApp Business-Konto, das nicht mehr verbunden ist',
|
|
86
|
+
whatsapp_waba_label: 'WhatsApp Business-Konto:',
|
|
64
87
|
},
|
|
65
88
|
dialogs: {
|
|
66
89
|
delete_message: {
|
|
@@ -107,6 +130,13 @@ export default {
|
|
|
107
130
|
'Die {language}-Übersetzung zur Überprüfung einreichen? Sie können sie nicht bearbeiten, solange sie auf Genehmigung wartet.',
|
|
108
131
|
title: 'Überprüfung anfordern',
|
|
109
132
|
},
|
|
133
|
+
select_waba: {
|
|
134
|
+
confirm: 'Genehmigung anfordern',
|
|
135
|
+
description:
|
|
136
|
+
'Diese Organisation hat mehr als ein WhatsApp Business-Konto. Wähle das Konto, bei dem diese Nachricht eingereicht wird: Es kann danach nicht mehr geändert werden.',
|
|
137
|
+
no_numbers: 'Keine verbundene Nummer',
|
|
138
|
+
title: 'WhatsApp Business-Konto auswählen',
|
|
139
|
+
},
|
|
110
140
|
unpublish_message_group: {
|
|
111
141
|
message:
|
|
112
142
|
'Veröffentlichung von „{name}“ aufheben? Es ist dann nicht mehr für Kundinnen und Kunden sichtbar.',
|
|
@@ -783,20 +813,28 @@ export default {
|
|
|
783
813
|
},
|
|
784
814
|
message_library: {
|
|
785
815
|
add_message_group: 'Neue Nachricht',
|
|
816
|
+
all_products: 'Alle Produkte',
|
|
786
817
|
category_placeholder: 'Kategorie auswählen',
|
|
787
818
|
headers: {
|
|
788
819
|
category: 'Kategorie',
|
|
789
820
|
name: 'Name',
|
|
790
821
|
preview: 'Vorschau',
|
|
822
|
+
product: 'Produkt',
|
|
791
823
|
status: 'Status',
|
|
792
|
-
tags: 'Tags',
|
|
793
824
|
updated_at: 'Aktualisiert am',
|
|
794
825
|
},
|
|
826
|
+
pagination_summary: '{from}–{to} von {total}',
|
|
827
|
+
product_placeholder: 'Produkt auswählen',
|
|
795
828
|
render_type_placeholder: 'Render-Typ auswählen',
|
|
796
829
|
search_placeholder: 'Suchen',
|
|
797
830
|
status_placeholder: 'Status auswählen',
|
|
798
|
-
tags_placeholder: 'Nach Tags filtern',
|
|
799
831
|
title: 'Nachrichtenbibliothek',
|
|
832
|
+
visibility: {
|
|
833
|
+
all: 'Alle',
|
|
834
|
+
internal: 'Intern',
|
|
835
|
+
public: 'Öffentlich',
|
|
836
|
+
},
|
|
837
|
+
visibility_placeholder: 'Sichtbarkeit auswählen',
|
|
800
838
|
},
|
|
801
839
|
whatsapp: {
|
|
802
840
|
create_message_group: {
|
|
@@ -829,6 +867,12 @@ export default {
|
|
|
829
867
|
},
|
|
830
868
|
},
|
|
831
869
|
},
|
|
870
|
+
products: {
|
|
871
|
+
chat: 'Smartchat',
|
|
872
|
+
connect: 'Smartconnect',
|
|
873
|
+
pms: 'Smartpms',
|
|
874
|
+
pricing: 'Smartpricing',
|
|
875
|
+
},
|
|
832
876
|
public: {
|
|
833
877
|
select_message: {
|
|
834
878
|
choose_language: 'Sprache auswählen...',
|
|
@@ -838,6 +882,44 @@ export default {
|
|
|
838
882
|
send_message: 'Nachricht senden',
|
|
839
883
|
},
|
|
840
884
|
},
|
|
885
|
+
send_flow: {
|
|
886
|
+
actions: {
|
|
887
|
+
back: 'Zurück',
|
|
888
|
+
cancel: 'Abbrechen',
|
|
889
|
+
confirm: 'Bestätigen',
|
|
890
|
+
next: 'Weiter',
|
|
891
|
+
},
|
|
892
|
+
errors: {
|
|
893
|
+
COMPILE_FAILED:
|
|
894
|
+
'Die Nachricht konnte nicht vorbereitet werden. Bitte versuchen Sie es erneut.',
|
|
895
|
+
MISSING_PARAMETERS: 'Füllen Sie alle Parameter aus, bevor Sie bestätigen.',
|
|
896
|
+
NOT_OFFERED:
|
|
897
|
+
'„{name}“ kann von hier aus nicht gesendet werden. Wählen Sie eine andere Nachrichtengruppe.',
|
|
898
|
+
NOT_SENDABLE:
|
|
899
|
+
'„{name}“ hat keine genehmigte Nachricht und kann nicht gesendet werden. Wählen Sie eine andere Nachrichtengruppe.',
|
|
900
|
+
TEMPLATE_NOT_APPROVED:
|
|
901
|
+
'Diese Nachricht wurde von Meta nicht genehmigt und kann nicht gesendet werden.',
|
|
902
|
+
TEMPLATE_NOT_SUBMITTED:
|
|
903
|
+
'Diese Nachricht wurde nicht bei Meta eingereicht und kann nicht gesendet werden.',
|
|
904
|
+
},
|
|
905
|
+
language: {
|
|
906
|
+
approved: 'Genehmigt',
|
|
907
|
+
approved_count: 'Genehmigte Sprachen für {name}: {count}',
|
|
908
|
+
not_sendable: 'Nicht sendbar ({status})',
|
|
909
|
+
},
|
|
910
|
+
no_parameters: 'Diese Nachricht hat keine auszufüllenden Parameter.',
|
|
911
|
+
not_sendable_hint: 'Ausgegraute Nachrichtengruppen haben keine genehmigte Nachricht.',
|
|
912
|
+
questions: {
|
|
913
|
+
language: 'In welcher Sprache?',
|
|
914
|
+
message: 'Welche Nachricht möchten Sie senden?',
|
|
915
|
+
parameters: 'Parameter ausfüllen',
|
|
916
|
+
preview: 'Das erhält der Gast',
|
|
917
|
+
},
|
|
918
|
+
steps: {
|
|
919
|
+
message: { description: 'Sendbare Nachrichtengruppe auswählen', title: 'Nachricht' },
|
|
920
|
+
parameters: { description: 'Felder ausfüllen', title: 'Parameter' },
|
|
921
|
+
},
|
|
922
|
+
},
|
|
841
923
|
status: {
|
|
842
924
|
approved: 'Genehmigt',
|
|
843
925
|
draft: 'Entwurf',
|
package/i18n/locales/en.ts
CHANGED
|
@@ -18,6 +18,7 @@ export default {
|
|
|
18
18
|
all: 'All',
|
|
19
19
|
copy: 'Copy',
|
|
20
20
|
copy_of: 'Copy of {name}',
|
|
21
|
+
context_error_title: 'Composer configuration error',
|
|
21
22
|
desktop: 'Desktop',
|
|
22
23
|
error: 'Error',
|
|
23
24
|
errore: 'Error',
|
|
@@ -49,16 +50,38 @@ export default {
|
|
|
49
50
|
},
|
|
50
51
|
internal: 'Internal',
|
|
51
52
|
mobile: 'Mobile',
|
|
53
|
+
organization: {
|
|
54
|
+
label: 'Organization',
|
|
55
|
+
lookup_failed_description:
|
|
56
|
+
'Something went wrong while loading the organizations you can access. Try again.',
|
|
57
|
+
lookup_failed_title: 'Your organizations could not be loaded',
|
|
58
|
+
none_description: 'Your user has no access to any organization.',
|
|
59
|
+
none_title: 'No organization available',
|
|
60
|
+
resolving: 'Loading your organizations...',
|
|
61
|
+
retry: 'Try again',
|
|
62
|
+
search_placeholder: 'Search organizations...',
|
|
63
|
+
},
|
|
52
64
|
preview: 'Preview',
|
|
53
65
|
search: 'Search...',
|
|
54
66
|
success: 'Success',
|
|
55
67
|
translation_failed: 'Translation failed',
|
|
56
68
|
messageGroupSelect: {
|
|
57
69
|
inactive_tooltip: 'This message group has unapproved or missing messages',
|
|
70
|
+
not_sendable_tooltip: 'This message group has no approved messages',
|
|
58
71
|
hide_inactive: 'Hide inactive',
|
|
72
|
+
hide_not_sendable: 'Hide not sendable',
|
|
73
|
+
load_more: 'Load more',
|
|
59
74
|
},
|
|
60
75
|
view_less: 'View less',
|
|
61
76
|
view_more: 'View more',
|
|
77
|
+
whatsapp_not_configured_description:
|
|
78
|
+
'This organization has no WhatsApp Business Account. WhatsApp messages can be saved as drafts, but not submitted for approval.',
|
|
79
|
+
whatsapp_not_configured_title: 'WhatsApp is not configured',
|
|
80
|
+
whatsapp_waba_detached_description:
|
|
81
|
+
'It can no longer be submitted for approval. Duplicate it to submit the copy to another WhatsApp Business Account.',
|
|
82
|
+
whatsapp_waba_detached_title:
|
|
83
|
+
'This message is on a WhatsApp Business Account that is no longer connected',
|
|
84
|
+
whatsapp_waba_label: 'WhatsApp Business Account:',
|
|
62
85
|
},
|
|
63
86
|
dialogs: {
|
|
64
87
|
delete_message: {
|
|
@@ -103,6 +126,13 @@ export default {
|
|
|
103
126
|
"Submit the {language} translation for review? You won't be able to edit it while it's pending approval.",
|
|
104
127
|
title: 'Request review',
|
|
105
128
|
},
|
|
129
|
+
select_waba: {
|
|
130
|
+
confirm: 'Request approval',
|
|
131
|
+
description:
|
|
132
|
+
'This organization has more than one WhatsApp Business Account. Choose the one this message is submitted to: it cannot be changed afterwards.',
|
|
133
|
+
no_numbers: 'No connected number',
|
|
134
|
+
title: 'Choose the WhatsApp Business Account',
|
|
135
|
+
},
|
|
106
136
|
unpublish_message_group: {
|
|
107
137
|
message: 'Unpublish "{name}"? It will no longer be visible to clients.',
|
|
108
138
|
success: '"{name}" has been unpublished.',
|
|
@@ -772,20 +802,28 @@ export default {
|
|
|
772
802
|
},
|
|
773
803
|
message_library: {
|
|
774
804
|
add_message_group: 'New message',
|
|
805
|
+
all_products: 'All products',
|
|
775
806
|
category_placeholder: 'Select category',
|
|
776
807
|
headers: {
|
|
777
808
|
category: 'Category',
|
|
778
809
|
name: 'Name',
|
|
779
810
|
preview: 'Preview',
|
|
811
|
+
product: 'Product',
|
|
780
812
|
status: 'Status',
|
|
781
|
-
tags: 'Tags',
|
|
782
813
|
updated_at: 'Updated at',
|
|
783
814
|
},
|
|
815
|
+
pagination_summary: '{from}–{to} of {total}',
|
|
816
|
+
product_placeholder: 'Select product',
|
|
784
817
|
render_type_placeholder: 'Select render type',
|
|
785
818
|
search_placeholder: 'Search',
|
|
786
819
|
status_placeholder: 'Select status',
|
|
787
|
-
tags_placeholder: 'Filter by tags',
|
|
788
820
|
title: 'Messages',
|
|
821
|
+
visibility: {
|
|
822
|
+
all: 'All',
|
|
823
|
+
internal: 'Internal',
|
|
824
|
+
public: 'Public',
|
|
825
|
+
},
|
|
826
|
+
visibility_placeholder: 'Select visibility',
|
|
789
827
|
},
|
|
790
828
|
whatsapp: {
|
|
791
829
|
create_message_group: {
|
|
@@ -818,6 +856,12 @@ export default {
|
|
|
818
856
|
},
|
|
819
857
|
},
|
|
820
858
|
},
|
|
859
|
+
products: {
|
|
860
|
+
chat: 'Smartchat',
|
|
861
|
+
connect: 'Smartconnect',
|
|
862
|
+
pms: 'Smartpms',
|
|
863
|
+
pricing: 'Smartpricing',
|
|
864
|
+
},
|
|
821
865
|
public: {
|
|
822
866
|
select_message: {
|
|
823
867
|
choose_language: 'Choose a language...',
|
|
@@ -827,6 +871,40 @@ export default {
|
|
|
827
871
|
send_message: 'Send message',
|
|
828
872
|
},
|
|
829
873
|
},
|
|
874
|
+
send_flow: {
|
|
875
|
+
actions: {
|
|
876
|
+
back: 'Back',
|
|
877
|
+
cancel: 'Cancel',
|
|
878
|
+
confirm: 'Confirm',
|
|
879
|
+
next: 'Next',
|
|
880
|
+
},
|
|
881
|
+
errors: {
|
|
882
|
+
COMPILE_FAILED: 'The message could not be prepared. Please try again.',
|
|
883
|
+
MISSING_PARAMETERS: 'Fill in every parameter before confirming.',
|
|
884
|
+
NOT_OFFERED: '"{name}" cannot be sent from here. Pick another message group.',
|
|
885
|
+
NOT_SENDABLE:
|
|
886
|
+
'"{name}" has no approved message and cannot be sent. Pick another message group.',
|
|
887
|
+
TEMPLATE_NOT_APPROVED: 'This message has not been approved by Meta and cannot be sent.',
|
|
888
|
+
TEMPLATE_NOT_SUBMITTED: 'This message has not been submitted to Meta and cannot be sent.',
|
|
889
|
+
},
|
|
890
|
+
language: {
|
|
891
|
+
approved: 'Approved',
|
|
892
|
+
approved_count: 'Approved languages for {name}: {count}',
|
|
893
|
+
not_sendable: 'Not sendable ({status})',
|
|
894
|
+
},
|
|
895
|
+
no_parameters: 'This message has no parameters to fill in.',
|
|
896
|
+
not_sendable_hint: 'Greyed-out message groups have no approved message.',
|
|
897
|
+
questions: {
|
|
898
|
+
language: 'In which language?',
|
|
899
|
+
message: 'Which message do you want to send?',
|
|
900
|
+
parameters: 'Fill in the parameters',
|
|
901
|
+
preview: 'This is what the guest will receive',
|
|
902
|
+
},
|
|
903
|
+
steps: {
|
|
904
|
+
message: { description: 'Pick a sendable message group', title: 'Message' },
|
|
905
|
+
parameters: { description: 'Fill in the blanks', title: 'Parameters' },
|
|
906
|
+
},
|
|
907
|
+
},
|
|
830
908
|
status: {
|
|
831
909
|
approved: 'Approved',
|
|
832
910
|
draft: 'Draft',
|
package/i18n/locales/es.ts
CHANGED
|
@@ -18,6 +18,7 @@ export default {
|
|
|
18
18
|
all: 'Todos',
|
|
19
19
|
copy: 'Copiar',
|
|
20
20
|
copy_of: 'Copia de {name}',
|
|
21
|
+
context_error_title: 'Error de configuración del composer',
|
|
21
22
|
desktop: 'Escritorio',
|
|
22
23
|
error: 'Error',
|
|
23
24
|
errore: 'Error',
|
|
@@ -50,16 +51,38 @@ export default {
|
|
|
50
51
|
},
|
|
51
52
|
internal: 'Interno',
|
|
52
53
|
mobile: 'Móvil',
|
|
54
|
+
organization: {
|
|
55
|
+
label: 'Organización',
|
|
56
|
+
lookup_failed_description:
|
|
57
|
+
'Se produjo un error al cargar las organizaciones a las que tienes acceso. Inténtalo de nuevo.',
|
|
58
|
+
lookup_failed_title: 'No se pudieron cargar tus organizaciones',
|
|
59
|
+
none_description: 'Tu usuario no tiene acceso a ninguna organización.',
|
|
60
|
+
none_title: 'Ninguna organización disponible',
|
|
61
|
+
resolving: 'Cargando tus organizaciones...',
|
|
62
|
+
retry: 'Reintentar',
|
|
63
|
+
search_placeholder: 'Buscar organizaciones...',
|
|
64
|
+
},
|
|
53
65
|
preview: 'Vista previa',
|
|
54
66
|
search: 'Buscar...',
|
|
55
67
|
success: 'Éxito',
|
|
56
68
|
translation_failed: 'La traducción ha fallado',
|
|
57
69
|
messageGroupSelect: {
|
|
58
70
|
inactive_tooltip: 'Este grupo de mensajes tiene mensajes no aprobados o faltantes',
|
|
71
|
+
not_sendable_tooltip: 'Este grupo de mensajes no tiene mensajes aprobados',
|
|
59
72
|
hide_inactive: 'Ocultar inactivos',
|
|
73
|
+
hide_not_sendable: 'Ocultar no enviables',
|
|
74
|
+
load_more: 'Cargar más',
|
|
60
75
|
},
|
|
61
76
|
view_less: 'Ver menos',
|
|
62
77
|
view_more: 'Ver más',
|
|
78
|
+
whatsapp_not_configured_description:
|
|
79
|
+
'Esta organización no tiene una cuenta de WhatsApp Business. Los mensajes de WhatsApp se pueden guardar como borradores, pero no enviar para su aprobación.',
|
|
80
|
+
whatsapp_not_configured_title: 'WhatsApp no está configurado',
|
|
81
|
+
whatsapp_waba_detached_description:
|
|
82
|
+
'Ya no se puede enviar para su aprobación. Duplícalo para enviar la copia a otra cuenta de WhatsApp Business.',
|
|
83
|
+
whatsapp_waba_detached_title:
|
|
84
|
+
'Este mensaje está en una cuenta de WhatsApp Business que ya no está conectada',
|
|
85
|
+
whatsapp_waba_label: 'Cuenta de WhatsApp Business:',
|
|
63
86
|
},
|
|
64
87
|
dialogs: {
|
|
65
88
|
delete_message: {
|
|
@@ -104,6 +127,13 @@ export default {
|
|
|
104
127
|
'¿Enviar la traducción en {language} para revisión? No podrá editarla mientras esté pendiente de aprobación.',
|
|
105
128
|
title: 'Solicitar revisión',
|
|
106
129
|
},
|
|
130
|
+
select_waba: {
|
|
131
|
+
confirm: 'Solicitar aprobación',
|
|
132
|
+
description:
|
|
133
|
+
'Esta organización tiene más de una cuenta de WhatsApp Business. Elige a cuál se envía este mensaje: no se podrá cambiar después.',
|
|
134
|
+
no_numbers: 'Ningún número conectado',
|
|
135
|
+
title: 'Elige la cuenta de WhatsApp Business',
|
|
136
|
+
},
|
|
107
137
|
unpublish_message_group: {
|
|
108
138
|
message: '¿Despublicar "{name}"? Ya no será visible para los clientes.',
|
|
109
139
|
success: '"{name}" se ha despublicado.',
|
|
@@ -781,20 +811,28 @@ export default {
|
|
|
781
811
|
},
|
|
782
812
|
message_library: {
|
|
783
813
|
add_message_group: 'Nuevo mensaje',
|
|
814
|
+
all_products: 'Todos los productos',
|
|
784
815
|
category_placeholder: 'Seleccionar categoría',
|
|
785
816
|
headers: {
|
|
786
817
|
category: 'Categoría',
|
|
787
818
|
name: 'Nombre',
|
|
788
819
|
preview: 'Vista previa',
|
|
820
|
+
product: 'Producto',
|
|
789
821
|
status: 'Estado',
|
|
790
|
-
tags: 'Etiquetas',
|
|
791
822
|
updated_at: 'Actualizado el',
|
|
792
823
|
},
|
|
824
|
+
pagination_summary: '{from}–{to} de {total}',
|
|
825
|
+
product_placeholder: 'Seleccionar producto',
|
|
793
826
|
render_type_placeholder: 'Seleccionar tipo de renderizado',
|
|
794
827
|
search_placeholder: 'Buscar',
|
|
795
828
|
status_placeholder: 'Seleccionar estado',
|
|
796
|
-
tags_placeholder: 'Filtrar por etiquetas',
|
|
797
829
|
title: 'Libreria de mensajes',
|
|
830
|
+
visibility: {
|
|
831
|
+
all: 'Todas',
|
|
832
|
+
internal: 'Internas',
|
|
833
|
+
public: 'Públicas',
|
|
834
|
+
},
|
|
835
|
+
visibility_placeholder: 'Seleccionar visibilidad',
|
|
798
836
|
},
|
|
799
837
|
whatsapp: {
|
|
800
838
|
create_message_group: {
|
|
@@ -827,6 +865,12 @@ export default {
|
|
|
827
865
|
},
|
|
828
866
|
},
|
|
829
867
|
},
|
|
868
|
+
products: {
|
|
869
|
+
chat: 'Smartchat',
|
|
870
|
+
connect: 'Smartconnect',
|
|
871
|
+
pms: 'Smartpms',
|
|
872
|
+
pricing: 'Smartpricing',
|
|
873
|
+
},
|
|
830
874
|
public: {
|
|
831
875
|
select_message: {
|
|
832
876
|
choose_language: 'Elige un idioma...',
|
|
@@ -836,6 +880,41 @@ export default {
|
|
|
836
880
|
send_message: 'Enviar mensaje',
|
|
837
881
|
},
|
|
838
882
|
},
|
|
883
|
+
send_flow: {
|
|
884
|
+
actions: {
|
|
885
|
+
back: 'Atrás',
|
|
886
|
+
cancel: 'Cancelar',
|
|
887
|
+
confirm: 'Confirmar',
|
|
888
|
+
next: 'Siguiente',
|
|
889
|
+
},
|
|
890
|
+
errors: {
|
|
891
|
+
COMPILE_FAILED: 'No se ha podido preparar el mensaje. Inténtelo de nuevo.',
|
|
892
|
+
MISSING_PARAMETERS: 'Rellene todos los parámetros antes de confirmar.',
|
|
893
|
+
NOT_OFFERED: '"{name}" no se puede enviar desde aquí. Elija otro grupo de mensajes.',
|
|
894
|
+
NOT_SENDABLE:
|
|
895
|
+
'"{name}" no tiene ningún mensaje aprobado y no se puede enviar. Elija otro grupo de mensajes.',
|
|
896
|
+
TEMPLATE_NOT_APPROVED: 'Meta no ha aprobado este mensaje y no se puede enviar.',
|
|
897
|
+
TEMPLATE_NOT_SUBMITTED:
|
|
898
|
+
'Este mensaje no se ha enviado a Meta para su aprobación y no se puede enviar.',
|
|
899
|
+
},
|
|
900
|
+
language: {
|
|
901
|
+
approved: 'Aprobado',
|
|
902
|
+
approved_count: 'Idiomas aprobados para {name}: {count}',
|
|
903
|
+
not_sendable: 'No se puede enviar ({status})',
|
|
904
|
+
},
|
|
905
|
+
no_parameters: 'Este mensaje no tiene parámetros que rellenar.',
|
|
906
|
+
not_sendable_hint: 'Los grupos de mensajes en gris no tienen ningún mensaje aprobado.',
|
|
907
|
+
questions: {
|
|
908
|
+
language: '¿En qué idioma?',
|
|
909
|
+
message: '¿Qué mensaje quiere enviar?',
|
|
910
|
+
parameters: 'Rellenar los parámetros',
|
|
911
|
+
preview: 'Esto es lo que recibirá el huésped',
|
|
912
|
+
},
|
|
913
|
+
steps: {
|
|
914
|
+
message: { description: 'Elegir un grupo de mensajes que se pueda enviar', title: 'Mensaje' },
|
|
915
|
+
parameters: { description: 'Rellenar los campos', title: 'Parámetros' },
|
|
916
|
+
},
|
|
917
|
+
},
|
|
839
918
|
status: {
|
|
840
919
|
approved: 'Aprobado',
|
|
841
920
|
draft: 'Borrador',
|