From 8ff5834ee8739ef4df18cacfa4917a9c12eb623c Mon Sep 17 00:00:00 2001 From: Gabriel Jablonski Date: Thu, 23 Oct 2025 10:12:38 -0300 Subject: [PATCH] fix(zapi): support for LID-only conversations (#123) * fix: ignore action events * feat(zapi): allow updating instance ID * feat: handle `chatLid` field * test: break down handler specs into separate files * feat: update send_message method to use recipient_id logic for zapi provider * fix: use identifier instead of source_id for zapi * test: fix specs * feat: prioritize senderName over chatName for contact naming in received callback --- .../dashboard/i18n/locale/en/inboxMgmt.json | 2 + .../i18n/locale/pt_BR/inboxMgmt.json | 2 + .../inbox/settingsPage/ConfigurationPage.vue | 58 +- .../providers/whatsapp_zapi_service.rb | 4 +- .../whatsapp/send_on_whatsapp_service.rb | 15 +- .../zapi_handlers/received_callback.rb | 20 +- .../incoming_message_zapi_service_spec.rb | 755 -------------- .../whatsapp/send_on_whatsapp_service_spec.rb | 34 + .../zapi_handlers/connected_callback_spec.rb | 44 + .../zapi_handlers/delivery_callback_spec.rb | 44 + .../disconnected_callback_spec.rb | 19 + .../message_status_callback_spec.rb | 155 +++ .../zapi_handlers/received_callback_spec.rb | 961 ++++++++++++++++++ 13 files changed, 1346 insertions(+), 767 deletions(-) create mode 100644 spec/services/whatsapp/zapi_handlers/connected_callback_spec.rb create mode 100644 spec/services/whatsapp/zapi_handlers/delivery_callback_spec.rb create mode 100644 spec/services/whatsapp/zapi_handlers/disconnected_callback_spec.rb create mode 100644 spec/services/whatsapp/zapi_handlers/message_status_callback_spec.rb create mode 100644 spec/services/whatsapp/zapi_handlers/received_callback_spec.rb diff --git a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json index ea710b38f..5bea9325a 100644 --- a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json @@ -790,6 +790,8 @@ "WHATSAPP_MARK_AS_READ_LABEL": "Send read receipts", "WHATSAPP_INSTANCE_ID_TITLE": "Instance ID", "WHATSAPP_INSTANCE_ID_SUBHEADER": "Your Z-API Instance ID.", + "WHATSAPP_INSTANCE_ID_UPDATE_TITLE": "Update Instance ID", + "WHATSAPP_INSTANCE_ID_UPDATE_SUBHEADER": "Enter the new Instance ID here", "WHATSAPP_TOKEN_TITLE": "Token", "WHATSAPP_TOKEN_SUBHEADER": "Your Z-API instance Token.", "WHATSAPP_TOKEN_UPDATE_TITLE": "Update Token", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json index dc761551c..3229d7909 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json @@ -790,6 +790,8 @@ "WHATSAPP_MARK_AS_READ_LABEL": "Enviar confirmações de leitura", "WHATSAPP_INSTANCE_ID_TITLE": "ID da Instância", "WHATSAPP_INSTANCE_ID_SUBHEADER": "Seu ID da Instância Z-API.", + "WHATSAPP_INSTANCE_ID_UPDATE_TITLE": "Atualizar ID da Instância", + "WHATSAPP_INSTANCE_ID_UPDATE_SUBHEADER": "Digite o novo ID da Instância aqui", "WHATSAPP_TOKEN_TITLE": "Token", "WHATSAPP_TOKEN_SUBHEADER": "Seu Token da Instância Z-API.", "WHATSAPP_TOKEN_UPDATE_TITLE": "Atualizar Token", diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue index 7f14b3475..aceefb2c7 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue @@ -51,6 +51,7 @@ export default { zapiInstanceId: '', zapiToken: '', zapiClientToken: '', + zapiInstanceIdUpdate: '', zapiTokenUpdate: '', zapiClientTokenUpdate: '', }; @@ -63,6 +64,7 @@ export default { ), }, baileysProviderUrl: { isValidURL: value => !value || isValidURL(value) }, + zapiInstanceIdUpdate: {}, zapiTokenUpdate: {}, zapiClientTokenUpdate: {}, }; @@ -213,6 +215,24 @@ export default { onCloseLinkDeviceModal() { this.showLinkDeviceModal = false; }, + async updateZapiInstanceId() { + try { + const payload = { + id: this.inbox.id, + formData: false, + channel: { + provider_config: { + ...this.inbox.provider_config, + instance_id: this.zapiInstanceIdUpdate, + }, + }, + }; + await this.$store.dispatch('inboxes/updateInbox', payload); + useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE')); + } catch (error) { + useAlert(this.$t('INBOX_MGMT.EDIT.API.ERROR_MESSAGE')); + } + }, async updateZapiToken() { try { const payload = { @@ -676,14 +696,46 @@ export default { + + - +
+ + + {{ $t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_SECTION_UPDATE_BUTTON') }} + +
+