diff --git a/src/apps/chatwoot/consumers/waha/message.any.ts b/src/apps/chatwoot/consumers/waha/message.any.ts index 0537ad22c..8457d649b 100644 --- a/src/apps/chatwoot/consumers/waha/message.any.ts +++ b/src/apps/chatwoot/consumers/waha/message.any.ts @@ -87,6 +87,18 @@ class MessageAnyHandler extends MessageBaseHandler { if (msg) { return msg; } + msg = this.getPollMessage(payload, protoMessage); + if (msg) { + return msg; + } + msg = this.getEventMessage(payload, protoMessage); + if (msg) { + return msg; + } + msg = this.getPixMessage(payload, protoMessage); + if (msg) { + return msg; + } return this.getUnsupportedMessage(); } @@ -173,6 +185,170 @@ class MessageAnyHandler extends MessageBaseHandler { }; } + private getPollMessage( + payload: WAMessage, + message: proto.Message | null, + ): ChatWootMessagePartial | null { + const hasPoll = !lodash.isEmpty(message?.pollCreationMessageV3); + if (!hasPoll) { + return null; + } + const poll = this.l.key(TKey.WA_TO_CW_MESSAGE_POLL).r({ + payload, + message, + }); + if (isEmptyString(poll)) { + return null; + } + return { + content: WhatsappToMarkdown(poll), + attachments: [], + private: undefined, + }; + } + + private getEventMessage( + payload: WAMessage, + message: proto.Message | null, + ): ChatWootMessagePartial | null { + const hasEvent = !lodash.isEmpty(message?.eventMessage); + if (!hasEvent) { + return null; + } + + // Converter timestamps Unix para datas legíveis + const eventData = message.eventMessage; + const formatTimestamp = (timestamp: number | string | any | undefined): string | undefined => { + if (!timestamp) return undefined; + + // Converter Long para number se necessário + let ts: number; + if (typeof timestamp === 'object' && timestamp.toNumber) { + ts = timestamp.toNumber(); + } else if (typeof timestamp === 'string') { + ts = parseInt(timestamp); + } else { + ts = timestamp as number; + } + + if (isNaN(ts)) return undefined; + + // Converter de segundos para milissegundos se necessário + const date = new Date(ts > 10000000000 ? ts : ts * 1000); + return date.toLocaleString('pt-BR', { + day: '2-digit', + month: '2-digit', + year: 'numeric', + hour: '2-digit', + minute: '2-digit', + timeZone: 'America/Sao_Paulo' + }); + }; + + const event = this.l.key(TKey.WA_TO_CW_MESSAGE_EVENT).r({ + payload, + message: { + ...message, + eventMessage: eventData, + // Adicionar campos formatados separadamente para o template + formattedStartTime: formatTimestamp(eventData.startTime), + formattedEndTime: formatTimestamp(eventData.endTime), + }, + }); + if (isEmptyString(event)) { + return null; + } + return { + content: WhatsappToMarkdown(event), + attachments: [], + private: undefined, + }; + } + + private getPixMessage( + payload: WAMessage, + message: proto.Message | null, + ): ChatWootMessagePartial | null { + // Verificar se há dados PIX no payload + const pixData = this.extractPixData(payload); + if (!pixData) { + return null; + } + + const pix = this.l.key(TKey.WA_TO_CW_MESSAGE_PIX).r({ + payload, + message, + pixData, + }); + if (isEmptyString(pix)) { + return null; + } + return { + content: WhatsappToMarkdown(pix), + attachments: [], + private: undefined, + }; + } + + private extractPixData(payload: WAMessage): any | null { + try { + this.logger.info('Starting PIX data extraction...'); + + // Tentar primeiro em Message, depois em RawMessage + const messageData = payload._data?.Message || payload._data?.RawMessage; + this.logger.info(`Message data found: ${!!messageData}`); + + // Log da estrutura completa para debug + this.logger.info(`Message data structure: ${JSON.stringify(messageData, null, 2).substring(0, 500)}...`); + + if (!messageData?.interactiveMessage?.InteractiveMessage?.NativeFlowMessage?.buttons) { + this.logger.warn('No interactive message buttons found'); + this.logger.info(`Available keys in messageData: ${Object.keys(messageData || {}).join(', ')}`); + if (messageData?.interactiveMessage) { + this.logger.info(`interactiveMessage keys: ${Object.keys(messageData.interactiveMessage).join(', ')}`); + } + return null; + } + + const buttons = messageData.interactiveMessage.InteractiveMessage.NativeFlowMessage.buttons; + this.logger.info(`Found ${buttons.length} buttons`); + + const paymentButton = buttons.find((btn: any) => btn.name === 'payment_info'); + this.logger.info(`Payment button found: ${!!paymentButton}`); + + if (!paymentButton?.buttonParamsJSON) { + this.logger.warn('No buttonParamsJSON found'); + return null; + } + + this.logger.info(`ButtonParamsJSON: ${paymentButton.buttonParamsJSON.substring(0, 100)}...`); + + const pixInfo = JSON.parse(paymentButton.buttonParamsJSON); + const pixSettings = pixInfo.payment_settings?.find((setting: any) => setting.type === 'pix_static_code'); + + if (!pixSettings?.pix_static_code) { + this.logger.warn('No PIX static code settings found'); + return null; + } + + const pixCode = pixSettings.pix_static_code; + const result = { + merchantName: pixCode.merchant_name, + key: pixCode.key, + keyType: pixCode.key_type, + currency: pixInfo.currency, + totalAmount: pixInfo.total_amount?.value || 0, + referenceId: pixInfo.reference_id, + }; + + this.logger.info(`PIX data extracted successfully: ${JSON.stringify(result)}`); + return result; + } catch (error) { + this.logger.warn(`Failed to extract PIX data: ${error}`); + return null; + } + } + private getUnsupportedMessage(): ChatWootMessagePartial { const unsupported = this.l .key(TKey.WA_TO_CW_MESSAGE_UNSUPPORTED) diff --git a/src/apps/chatwoot/i18n/locales/ar-AE.yaml b/src/apps/chatwoot/i18n/locales/ar-AE.yaml index e4b55aeb0..d13b45e2d 100644 --- a/src/apps/chatwoot/i18n/locales/ar-AE.yaml +++ b/src/apps/chatwoot/i18n/locales/ar-AE.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **استطلاع** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **تم إلغاء الحدث** + {{/isCanceled}} + {{^isCanceled}} + 📅 **حدث** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **الموقع:** {{location.name}} + {{/location.name}} + + {{#startTime}} + 🕐 **البداية:** {{startTime}} + {{/startTime}} + + {{#endTime}} + 🕐 **النهاية:** {{endTime}} + {{/endTime}} + + {{#joinLink}} + 🔗 **رابط المشاركة:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **هذا النوع من الرسائل غير مدعوم في ChatWoot.** 📱 يرجى فتح **WhatsApp** لعرضه. diff --git a/src/apps/chatwoot/i18n/locales/bn-BD.yaml b/src/apps/chatwoot/i18n/locales/bn-BD.yaml index a7a27362b..a3abbd776 100644 --- a/src/apps/chatwoot/i18n/locales/bn-BD.yaml +++ b/src/apps/chatwoot/i18n/locales/bn-BD.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **এই ধরনের বার্তা ChatWoot-এ সমর্থিত নয়।** 📱 এটি দেখতে অনুগ্রহ করে **WhatsApp** খুলুন। diff --git a/src/apps/chatwoot/i18n/locales/de-DE.yaml b/src/apps/chatwoot/i18n/locales/de-DE.yaml index 5949b9e22..3d126ee12 100644 --- a/src/apps/chatwoot/i18n/locales/de-DE.yaml +++ b/src/apps/chatwoot/i18n/locales/de-DE.yaml @@ -232,6 +232,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Umfrage** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Abgesagt** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Ort:** {{location.name}} + {{/location.name}} + + {{#startTime}} + 🕐 **Start:** {{startTime}} + {{/startTime}} + + {{#endTime}} + 🕐 **Ende:** {{endTime}} + {{/endTime}} + + {{#joinLink}} + 🔗 **Teilnahme-Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX-Schlüssel:** {{key}} + **Typ:** {{keyType}} + {{#totalAmount}} + **Betrag:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Referenz:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste gesendet** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **Dieser Nachrichtentyp wird in ChatWoot nicht unterstützt.** 📱 Bitte öffne **WhatsApp**, um ihn anzusehen. diff --git a/src/apps/chatwoot/i18n/locales/en-US.yaml b/src/apps/chatwoot/i18n/locales/en-US.yaml index d81296535..cee2900fe 100644 --- a/src/apps/chatwoot/i18n/locales/en-US.yaml +++ b/src/apps/chatwoot/i18n/locales/en-US.yaml @@ -95,7 +95,19 @@ whatsapp.to.chatwoot.message.location: |- {{#locationMessage}} 📍 **Shared Location** - https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} + {{#name}} + **{{name}}** + {{/name}} + + {{#address}} + 📍 **Address:** {{address}} + {{/address}} + + {{#URL}} + 🌐 **Website:** {{URL}} + {{/URL}} + + 🔗 **View on map:** https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} {{#caption}}{{caption}}{{/caption}} {{/locationMessage}} @@ -103,11 +115,88 @@ whatsapp.to.chatwoot.message.location: |- 📍📡 **Sharing Live Location** Open **WhatsApp** to see real-time updates. - https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} + {{#name}} + **{{name}}** + {{/name}} + + {{#address}} + 📍 **Address:** {{address}} + {{/address}} + + {{#URL}} + 🌐 **Website:** {{URL}} + {{/URL}} + + 🔗 **View on map:** https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} {{#caption}}{{caption}}{{/caption}} {{/liveLocationMessage}} {{/message}} +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **This message type is not supported in ChatWoot.** 📱 Please open **WhatsApp** to view it. diff --git a/src/apps/chatwoot/i18n/locales/es-ES.yaml b/src/apps/chatwoot/i18n/locales/es-ES.yaml index 39e587ac8..e6fe2d115 100644 --- a/src/apps/chatwoot/i18n/locales/es-ES.yaml +++ b/src/apps/chatwoot/i18n/locales/es-ES.yaml @@ -219,7 +219,19 @@ whatsapp.to.chatwoot.message.location: |- {{#locationMessage}} 📍 **Ubicación compartida** - https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} + {{#name}} + **{{name}}** + {{/name}} + + {{#address}} + 📍 **Dirección:** {{address}} + {{/address}} + + {{#URL}} + 🌐 **Sitio web:** {{URL}} + {{/URL}} + + 🔗 **Ver en el mapa:** https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} {{#caption}}{{caption}}{{/caption}} {{/locationMessage}} @@ -227,11 +239,88 @@ whatsapp.to.chatwoot.message.location: |- 📍📡 **Compartiendo ubicación en tiempo real** Abre **WhatsApp** para ver las actualizaciones en tiempo real. - https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} + {{#name}} + **{{name}}** + {{/name}} + + {{#address}} + 📍 **Dirección:** {{address}} + {{/address}} + + {{#URL}} + 🌐 **Sitio web:** {{URL}} + {{/URL}} + + 🔗 **Ver en el mapa:** https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} {{#caption}}{{caption}}{{/caption}} {{/liveLocationMessage}} {{/message}} +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Encuesta** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Evento Cancelado** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Evento** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Ubicación:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Inicio:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **Fin:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Enlace de participación:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copia y Pega** + + {{#pixData}} + **{{merchantName}}** + + **Clave PIX:** {{key}} + **Tipo:** {{keyType}} + {{#totalAmount}} + **Monto:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Referencia:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copia y Pega enviado** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **Este tipo de mensaje no es compatible con ChatWoot.** 📱 Por favor, abre **WhatsApp** para verlo. diff --git a/src/apps/chatwoot/i18n/locales/fa-IR.yaml b/src/apps/chatwoot/i18n/locales/fa-IR.yaml index 430313bcd..3e3924106 100644 --- a/src/apps/chatwoot/i18n/locales/fa-IR.yaml +++ b/src/apps/chatwoot/i18n/locales/fa-IR.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **این نوع پیام در ChatWoot پشتیبانی نمی‌شود.** 📱 لطفاً برای مشاهده آن **WhatsApp** را باز کنید. diff --git a/src/apps/chatwoot/i18n/locales/fr-FR.yaml b/src/apps/chatwoot/i18n/locales/fr-FR.yaml index 7ec396dd5..438068d77 100644 --- a/src/apps/chatwoot/i18n/locales/fr-FR.yaml +++ b/src/apps/chatwoot/i18n/locales/fr-FR.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Sondage** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Événement Annulé** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Événement** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Lieu:** {{location.name}} + {{/location.name}} + + {{#startTime}} + 🕐 **Début:** {{startTime}} + {{/startTime}} + + {{#endTime}} + 🕐 **Fin:** {{endTime}} + {{/endTime}} + + {{#joinLink}} + 🔗 **Lien de participation:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **Clé PIX:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Montant:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Référence:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste envoyé** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **Ce type de message n’est pas pris en charge dans ChatWoot.** 📱 Veuillez ouvrir **WhatsApp** pour l’afficher. diff --git a/src/apps/chatwoot/i18n/locales/he-IL.yaml b/src/apps/chatwoot/i18n/locales/he-IL.yaml index 3e83c2c31..3429ceddd 100644 --- a/src/apps/chatwoot/i18n/locales/he-IL.yaml +++ b/src/apps/chatwoot/i18n/locales/he-IL.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **סוג הודעה זה אינו נתמך ב-ChatWoot.** 📱 אנא פתח/י את **WhatsApp** כדי לצפות בזה. diff --git a/src/apps/chatwoot/i18n/locales/hi-IN.yaml b/src/apps/chatwoot/i18n/locales/hi-IN.yaml index 0c5fa0012..397cf135f 100644 --- a/src/apps/chatwoot/i18n/locales/hi-IN.yaml +++ b/src/apps/chatwoot/i18n/locales/hi-IN.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **इस प्रकार का संदेश ChatWoot में समर्थित नहीं है।** 📱 इसे देखने के लिए कृपया **WhatsApp** खोलें। diff --git a/src/apps/chatwoot/i18n/locales/id-ID.yaml b/src/apps/chatwoot/i18n/locales/id-ID.yaml index 7a692eabf..9cdd1025a 100644 --- a/src/apps/chatwoot/i18n/locales/id-ID.yaml +++ b/src/apps/chatwoot/i18n/locales/id-ID.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **Jenis pesan ini tidak didukung di ChatWoot.** 📱 Silakan buka **WhatsApp** untuk melihatnya. diff --git a/src/apps/chatwoot/i18n/locales/pa-PK.yaml b/src/apps/chatwoot/i18n/locales/pa-PK.yaml index 2b69bede0..b3b95f146 100644 --- a/src/apps/chatwoot/i18n/locales/pa-PK.yaml +++ b/src/apps/chatwoot/i18n/locales/pa-PK.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **ਇਹ ਸੁਨੇਹੇ ਦੀ ਕਿਸਮ ChatWoot ਵਿੱਚ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ।** 📱 ਇਸਨੂੰ ਦੇਖਣ ਲਈ ਕਿਰਪਾ ਕਰਕੇ **WhatsApp** ਖੋਲ੍ਹੋ। diff --git a/src/apps/chatwoot/i18n/locales/pt-BR.yaml b/src/apps/chatwoot/i18n/locales/pt-BR.yaml index 665986d99..0f2336e35 100644 --- a/src/apps/chatwoot/i18n/locales/pt-BR.yaml +++ b/src/apps/chatwoot/i18n/locales/pt-BR.yaml @@ -219,7 +219,19 @@ whatsapp.to.chatwoot.message.location: |- {{#locationMessage}} 📍 **Localização compartilhada** - https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} + {{#name}} + **{{name}}** + {{/name}} + + {{#address}} + 📍 **Endereço:** {{address}} + {{/address}} + + {{#URL}} + 🌐 **Website:** {{URL}} + {{/URL}} + + 🔗 **Ver no mapa:** https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} {{#caption}}{{caption}}{{/caption}} {{/locationMessage}} @@ -227,11 +239,88 @@ whatsapp.to.chatwoot.message.location: |- 📍📡 **Compartilhando localização ao vivo** Abra o **WhatsApp** para ver as atualizações em tempo real. - https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} + {{#name}} + **{{name}}** + {{/name}} + + {{#address}} + 📍 **Endereço:** {{address}} + {{/address}} + + {{#URL}} + 🌐 **Website:** {{URL}} + {{/URL}} + + 🔗 **Ver no mapa:** https://www.google.com/maps?q={{degreesLatitude}},{{degreesLongitude}} {{#caption}}{{caption}}{{/caption}} {{/liveLocationMessage}} {{/message}} +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Enquete** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Evento Cancelado** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Evento** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Local:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Início:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **Fim:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Link de participação:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copia e Cola** + + {{#pixData}} + **{{merchantName}}** + + **Chave PIX:** {{key}} + **Tipo:** {{keyType}} + {{#totalAmount}} + **Valor:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Referência:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copia e Cola enviado** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **Esse tipo de mensagem não é suportado no ChatWoot.** 📱 Por favor, abra o **WhatsApp** para visualizá-la. diff --git a/src/apps/chatwoot/i18n/locales/ru-RU.yaml b/src/apps/chatwoot/i18n/locales/ru-RU.yaml index 4bc30e7c2..ac60ee01b 100644 --- a/src/apps/chatwoot/i18n/locales/ru-RU.yaml +++ b/src/apps/chatwoot/i18n/locales/ru-RU.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **Этот тип сообщения не поддерживается в ChatWoot.** 📱 Пожалуйста, откройте **WhatsApp**, чтобы просмотреть. diff --git a/src/apps/chatwoot/i18n/locales/tr-TR.yaml b/src/apps/chatwoot/i18n/locales/tr-TR.yaml index 31ca98d93..bd7f4aebb 100644 --- a/src/apps/chatwoot/i18n/locales/tr-TR.yaml +++ b/src/apps/chatwoot/i18n/locales/tr-TR.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **Bu mesaj türü ChatWoot’ta desteklenmiyor.** 📱 Görüntülemek için lütfen **WhatsApp’ı** açın. diff --git a/src/apps/chatwoot/i18n/locales/uk-UA.yaml b/src/apps/chatwoot/i18n/locales/uk-UA.yaml index 2c520e8b3..8b7e0010b 100644 --- a/src/apps/chatwoot/i18n/locales/uk-UA.yaml +++ b/src/apps/chatwoot/i18n/locales/uk-UA.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **Цей тип повідомлення не підтримується в ChatWoot.** 📱 Будь ласка, відкрийте **WhatsApp**, щоб переглянути. diff --git a/src/apps/chatwoot/i18n/locales/ur-PK.yaml b/src/apps/chatwoot/i18n/locales/ur-PK.yaml index 522d8aaf7..4999e5121 100644 --- a/src/apps/chatwoot/i18n/locales/ur-PK.yaml +++ b/src/apps/chatwoot/i18n/locales/ur-PK.yaml @@ -229,6 +229,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **ChatWoot میں اس قسم کا پیغام معاونت یافتہ نہیں ہے۔** 📱 اسے دیکھنے کے لیے براہ کرم **WhatsApp** کھولیں۔ diff --git a/src/apps/chatwoot/i18n/locales/zh-CN.yaml b/src/apps/chatwoot/i18n/locales/zh-CN.yaml index db18f4900..12331730b 100644 --- a/src/apps/chatwoot/i18n/locales/zh-CN.yaml +++ b/src/apps/chatwoot/i18n/locales/zh-CN.yaml @@ -231,6 +231,72 @@ whatsapp.to.chatwoot.message.location: |- {{/liveLocationMessage}} {{/message}} + +whatsapp.to.chatwoot.message.poll: |- + {{#message}} + {{#pollCreationMessageV3}} + 📊 **Poll** + + **{{name}}** + + {{#options}} + - {{optionName}} + {{/options}} + {{/pollCreationMessageV3}} + {{/message}} + +whatsapp.to.chatwoot.message.event: |- + {{#message}} + {{#eventMessage}} + {{#isCanceled}} + ❌ **Event Canceled** + {{/isCanceled}} + {{^isCanceled}} + 📅 **Event** + {{/isCanceled}} + + **{{name}}** + + {{#description}} + {{description}} + {{/description}} + + {{#location.name}} + 📍 **Location:** {{location.name}} + {{/location.name}} + + {{#formattedStartTime}} + 🕐 **Start:** {{formattedStartTime}} + {{/formattedStartTime}} + + {{#formattedEndTime}} + 🕐 **End:** {{formattedEndTime}} + {{/formattedEndTime}} + + {{#joinLink}} + 🔗 **Join Link:** {{joinLink}} + {{/joinLink}} + {{/eventMessage}} + {{/message}} + +whatsapp.to.chatwoot.message.pix: |- + 💳 **PIX - Copy and Paste** + + {{#pixData}} + **{{merchantName}}** + + **PIX Key:** {{key}} + **Type:** {{keyType}} + {{#totalAmount}} + **Amount:** R$ {{totalAmount}} + {{/totalAmount}} + {{#referenceId}} + **Reference:** {{referenceId}} + {{/referenceId}} + + 💳 **PIX Copy and Paste sent** + {{/pixData}} + whatsapp.to.chatwoot.message.unsupported: |- ⚠️ **ChatWoot 不支持此消息类型。** 📱 请打开 **WhatsApp** 查看。 diff --git a/src/apps/chatwoot/i18n/templates.ts b/src/apps/chatwoot/i18n/templates.ts index 10982bc18..212cb2d13 100644 --- a/src/apps/chatwoot/i18n/templates.ts +++ b/src/apps/chatwoot/i18n/templates.ts @@ -51,6 +51,9 @@ export enum TKey { WA_TO_CW_MESSAGE = 'whatsapp.to.chatwoot.message', WA_TO_CW_MESSAGE_CONTACTS = 'whatsapp.to.chatwoot.message.contacts', WA_TO_CW_MESSAGE_LOCATION = 'whatsapp.to.chatwoot.message.location', + WA_TO_CW_MESSAGE_POLL = 'whatsapp.to.chatwoot.message.poll', + WA_TO_CW_MESSAGE_EVENT = 'whatsapp.to.chatwoot.message.event', + WA_TO_CW_MESSAGE_PIX = 'whatsapp.to.chatwoot.message.pix', WA_TO_CW_MESSAGE_UNSUPPORTED = 'whatsapp.to.chatwoot.message.unsupported', // @@ -131,6 +134,20 @@ export type TemplatePayloads = { }; [TKey.WA_TO_CW_MESSAGE_CONTACTS]: { contacts: SimpleVCardInfo[] }; [TKey.WA_TO_CW_MESSAGE_LOCATION]: { payload: any; message: proto.Message }; + [TKey.WA_TO_CW_MESSAGE_POLL]: { payload: any; message: proto.Message }; + [TKey.WA_TO_CW_MESSAGE_EVENT]: { payload: any; message: any }; + [TKey.WA_TO_CW_MESSAGE_PIX]: { + payload: any; + message: proto.Message; + pixData: { + merchantName: string; + key: string; + keyType: string; + currency: string; + totalAmount: number; + referenceId: string; + }; + }; [TKey.WA_TO_CW_MESSAGE_UNSUPPORTED]: { details: Link }; [TKey.JOB_SCHEDULED_ERROR_HEADER]: void; [TKey.JOB_REPORT_ERROR]: {