From b179ae506965571c1c89f60d51d958c3bc5bb335 Mon Sep 17 00:00:00 2001 From: Darren Clarke Date: Thu, 13 Nov 2025 14:04:16 +0100 Subject: [PATCH] Whatsapp unlink and channel display fixes --- docker/compose/bridge-whatsapp.yml | 1 + docker/compose/bridge.yml | 1 + docker/compose/link.yml | 2 +- packages/bridge-ui/components/QRCode.tsx | 21 +++++++++++----- packages/bridge-ui/config/whatsapp.ts | 25 ++++++++++++++++--- .../article_action/cdr_whatsapp.coffee | 7 ------ set_channel_setting.rb | 5 ++-- 7 files changed, 42 insertions(+), 20 deletions(-) diff --git a/docker/compose/bridge-whatsapp.yml b/docker/compose/bridge-whatsapp.yml index e45bf88..ea596ad 100644 --- a/docker/compose/bridge-whatsapp.yml +++ b/docker/compose/bridge-whatsapp.yml @@ -9,6 +9,7 @@ services: environment: PORT: 5000 NODE_ENV: production + BRIDGE_FRONTEND_URL: http://link:3000/link volumes: - bridge-whatsapp-data:/home/node/baileys ports: diff --git a/docker/compose/bridge.yml b/docker/compose/bridge.yml index bdd9428..38eca7b 100644 --- a/docker/compose/bridge.yml +++ b/docker/compose/bridge.yml @@ -22,6 +22,7 @@ x-bridge-vars: &common-bridge-variables NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} BRIDGE_SIGNAL_URL: ${BRIDGE_SIGNAL_URL} BRIDGE_SIGNAL_AUTO_GROUPS: ${BRIDGE_SIGNAL_AUTO_GROUPS} + BRIDGE_WHATSAPP_URL: "http://bridge-whatsapp:5000" LOG_LEVEL: "debug" ZAMMAD_API_TOKEN: ${ZAMMAD_API_TOKEN} ZAMMAD_URL: ${ZAMMAD_URL} diff --git a/docker/compose/link.yml b/docker/compose/link.yml index 0bd1589..8cc7956 100644 --- a/docker/compose/link.yml +++ b/docker/compose/link.yml @@ -16,7 +16,7 @@ services: LINK_URL: ${LINK_URL} BRIDGE_URL: http://bridge-frontend:3000 BRIDGE_SIGNAL_URL: http://signal-cli-rest-api:8080 - BRIDGE_WHATSAPP_URL: http://bridge-whatsapp:3000 + BRIDGE_WHATSAPP_URL: http://bridge-whatsapp:5000 ZAMMAD_URL: http://zammad-nginx:8080 REDIS_URL: "redis://zammad-redis:6379" NEXTAUTH_URL: ${LINK_URL}/api/auth diff --git a/packages/bridge-ui/components/QRCode.tsx b/packages/bridge-ui/components/QRCode.tsx index b6a0046..8d88a7c 100644 --- a/packages/bridge-ui/components/QRCode.tsx +++ b/packages/bridge-ui/components/QRCode.tsx @@ -29,21 +29,30 @@ export const QRCode: FC = ({ useEffect(() => { if (!verified && getValue && refreshInterval) { - const interval = setInterval(async () => { + // Fetch immediately on mount + const fetchQR = async () => { const { qr, kind } = await getValue(token); setValue(qr); setKind(kind); - }, refreshInterval * 1000); + }; + fetchQR(); + + // Then set up interval for refreshes + const interval = setInterval(fetchQR, refreshInterval * 1000); return () => clearInterval(interval); } - }, [getValue, refreshInterval]); + }, [getValue, refreshInterval, token, verified]); return !verified ? ( - {kind === "data" ? ( - + {value ? ( + kind === "data" ? ( + + ) : ( + {name} + ) ) : ( - {name} + Loading QR code... )} {helperText} diff --git a/packages/bridge-ui/config/whatsapp.ts b/packages/bridge-ui/config/whatsapp.ts index 84ccd5a..32e2b2c 100644 --- a/packages/bridge-ui/config/whatsapp.ts +++ b/packages/bridge-ui/config/whatsapp.ts @@ -2,11 +2,28 @@ import { ServiceConfig } from "../lib/service"; // import { generateSelectOneAction } from "../lib/actions"; const getQRCode = async (token: string) => { - const url = `/link/api/whatsapp/bots/${token}`; - const result = await fetch(url, { cache: "no-store" }); - const { qr } = await result.json(); + try { + const url = `/link/api/whatsapp/bots/${token}`; + const result = await fetch(url, { cache: "no-store" }); - return { qr, kind: "data" }; + if (!result.ok) { + console.error(`Failed to fetch QR code: ${result.status} ${result.statusText}`); + return { qr: "", kind: "data" }; + } + + const data = await result.json(); + const { qr } = data; + + if (!qr) { + console.error("No QR code in response"); + return { qr: "", kind: "data" }; + } + + return { qr, kind: "data" }; + } catch (error) { + console.error("Error fetching QR code:", error); + return { qr: "", kind: "data" }; + } }; export const whatsappConfig: ServiceConfig = { diff --git a/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_whatsapp.coffee b/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_whatsapp.coffee index 43f7633..7bdf9d6 100644 --- a/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_whatsapp.coffee +++ b/packages/zammad-addon-bridge/src/app/assets/javascripts/app/controllers/ticket_zoom/article_action/cdr_whatsapp.coffee @@ -45,13 +45,6 @@ class CdrWhatsappReply @articleTypes: (articleTypes, ticket, ui) -> return articleTypes if !ui.permissionCheck('ticket.agent') - # Check CDR Link allowed channels setting - allowedChannels = ui.Config.get('cdr_link_allowed_channels') - if allowedChannels && allowedChannels.trim() - whitelist = (channel.trim() for channel in allowedChannels.split(',')) - # Return early if 'cdr_whatsapp' or 'whatsapp message' not in whitelist - return articleTypes if 'cdr_whatsapp' not in whitelist && 'whatsapp message' not in whitelist - return articleTypes if !ticket || !ticket.create_article_type_id articleTypeCreate = App.TicketArticleType.find(ticket.create_article_type_id).name diff --git a/set_channel_setting.rb b/set_channel_setting.rb index 4624da7..da85073 100644 --- a/set_channel_setting.rb +++ b/set_channel_setting.rb @@ -5,5 +5,6 @@ require '/opt/zammad/config/application' Rails.application.initialize! -Setting.set('cdr_link_allowed_channels', 'note,cdr_signal,email') -puts "Setting 'cdr_link_allowed_channels' has been set to: 'note,cdr_signal,email'" \ No newline at end of file +# Reset to default (empty = allow all channels) +Setting.set('cdr_link_allowed_channels', '') +puts "Setting 'cdr_link_allowed_channels' has been reset to default (empty = allow all channels)"