Fix incoming Signal messages when conversation initiated from Zammad
This commit is contained in:
parent
46e1116bc5
commit
20ef676cf1
6 changed files with 27 additions and 11 deletions
|
|
@ -9,12 +9,12 @@ x-bridge-vars: &common-bridge-variables
|
||||||
DATABASE_ROOT_PASSWORD: ${BRIDGE_DATABASE_ROOT_PASSWORD}
|
DATABASE_ROOT_PASSWORD: ${BRIDGE_DATABASE_ROOT_PASSWORD}
|
||||||
DATABASE_OWNER: ${DATABASE_USER}
|
DATABASE_OWNER: ${DATABASE_USER}
|
||||||
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
|
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
|
||||||
DATABASE_URL: "postgresql://bridge:${DATABASE_PASSWORD}@postgresql/cdr"
|
DATABASE_URL: "postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@postgresql/cdr"
|
||||||
WORKER_DATABASE_URL: "postgresql://bridge:${DATABASE_PASSWORD}@postgresql/cdr"
|
WORKER_DATABASE_URL: "postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@postgresql/cdr"
|
||||||
SHADOW_DATABASE_URL: "postgresql://bridge:${DATABASE_PASSWORD}@postgresql/cdr_shadow"
|
SHADOW_DATABASE_URL: "postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@postgresql/cdr_shadow"
|
||||||
ROOT_DATABASE_URL: "postgresql://bridge:${DATABASE_PASSWORD}@postgresql/template1"
|
ROOT_DATABASE_URL: "postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@postgresql/template1"
|
||||||
APP_ROOT_DATABASE_URL: "postgresql://root:${BRIDGE_DATABASE_ROOT_PASSWORD}@postgresql/bridge"
|
APP_ROOT_DATABASE_URL: "postgresql://zammad:${ZAMMAD_DATABASE_PASSWORD}@postgresql/zammad_production"
|
||||||
DATABASE_AUTH_URL: "postgresql://app_graphile_auth:${BRIDGE_DATABASE_AUTHENTICATOR_PASSWORD}@postgresql/cdr"
|
DATABASE_AUTH_URL: "postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@postgresql/cdr"
|
||||||
FRONTEND_URL: ${BRIDGE_DOMAIN}
|
FRONTEND_URL: ${BRIDGE_DOMAIN}
|
||||||
API_URL: "http://bridge-api:3001"
|
API_URL: "http://bridge-api:3001"
|
||||||
NEXTAUTH_URL: ${BRIDGE_DOMAIN}
|
NEXTAUTH_URL: ${BRIDGE_DOMAIN}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ x-zammad-vars: &common-zammad-variables
|
||||||
ELASTICSEARCH_PASS: ${OPENSEARCH_ADMIN_PASSWORD}
|
ELASTICSEARCH_PASS: ${OPENSEARCH_ADMIN_PASSWORD}
|
||||||
ELASTICSEARCH_SSL_VERIFY: "false" # this doesn't set es_ssl_verify as expected, but ideally it would
|
ELASTICSEARCH_SSL_VERIFY: "false" # this doesn't set es_ssl_verify as expected, but ideally it would
|
||||||
ELASTICSEARCH_SCHEMA: "https"
|
ELASTICSEARCH_SCHEMA: "https"
|
||||||
|
BRIDGE_SIGNAL_AUTO_GROUPS: ${BRIDGE_SIGNAL_AUTO_GROUPS}
|
||||||
|
|
||||||
x-zammad-args: &common-zammad-args
|
x-zammad-args: &common-zammad-args
|
||||||
EMBEDDED: "true"
|
EMBEDDED: "true"
|
||||||
|
|
|
||||||
|
|
@ -213,11 +213,12 @@ class ChannelsCdrSignalController < ApplicationController
|
||||||
Rails.logger.info "Channel ID: #{channel.id}"
|
Rails.logger.info "Channel ID: #{channel.id}"
|
||||||
|
|
||||||
begin
|
begin
|
||||||
all_tickets = Ticket.where(customer_id: customer.id)
|
# For group messages, search all tickets regardless of customer
|
||||||
.where.not(state_id: state_ids)
|
# since users may have duplicate phone numbers
|
||||||
|
all_tickets = Ticket.where.not(state_id: state_ids)
|
||||||
.order(updated_at: :desc)
|
.order(updated_at: :desc)
|
||||||
|
|
||||||
Rails.logger.info "Found #{all_tickets.count} active tickets for customer"
|
Rails.logger.info "Found #{all_tickets.count} active tickets (searching all customers for group match)"
|
||||||
|
|
||||||
ticket = all_tickets.find do |t|
|
ticket = all_tickets.find do |t|
|
||||||
begin
|
begin
|
||||||
|
|
@ -247,6 +248,11 @@ class ChannelsCdrSignalController < ApplicationController
|
||||||
|
|
||||||
if ticket
|
if ticket
|
||||||
Rails.logger.info "=== FOUND MATCHING TICKET BY GROUP ID: ##{ticket.number} ==="
|
Rails.logger.info "=== FOUND MATCHING TICKET BY GROUP ID: ##{ticket.number} ==="
|
||||||
|
# Update customer if different (handles duplicate phone numbers)
|
||||||
|
if ticket.customer_id != customer.id
|
||||||
|
Rails.logger.info "Updating ticket customer from #{ticket.customer_id} to #{customer.id}"
|
||||||
|
ticket.customer_id = customer.id
|
||||||
|
end
|
||||||
else
|
else
|
||||||
Rails.logger.info "=== NO MATCHING TICKET BY GROUP ID - CHECKING BY PHONE NUMBER ==="
|
Rails.logger.info "=== NO MATCHING TICKET BY GROUP ID - CHECKING BY PHONE NUMBER ==="
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,8 @@ class CommunicateCdrSignalJob < ApplicationJob
|
||||||
log_error(article,
|
log_error(article,
|
||||||
"Can't find ticket.preferences['cdr_signal']['bot_token'] for Ticket.find(#{article.ticket_id})")
|
"Can't find ticket.preferences['cdr_signal']['bot_token'] for Ticket.find(#{article.ticket_id})")
|
||||||
end
|
end
|
||||||
unless ticket.preferences['cdr_signal']['chat_id']
|
# Only require chat_id if auto-groups is not enabled
|
||||||
|
if ENV['BRIDGE_SIGNAL_AUTO_GROUPS'].to_s.downcase != 'true' && ticket.preferences['cdr_signal']['chat_id'].blank?
|
||||||
log_error(article,
|
log_error(article,
|
||||||
"Can't find ticket.preferences['cdr_signal']['chat_id'] for Ticket.find(#{article.ticket_id})")
|
"Can't find ticket.preferences['cdr_signal']['chat_id'] for Ticket.find(#{article.ticket_id})")
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ Zammad::Application.routes.draw do
|
||||||
match "#{api_path}/channels_cdr_signal", to: 'channels_cdr_signal#add', via: :post
|
match "#{api_path}/channels_cdr_signal", to: 'channels_cdr_signal#add', via: :post
|
||||||
match "#{api_path}/channels_cdr_signal/:id", to: 'channels_cdr_signal#update', via: :put
|
match "#{api_path}/channels_cdr_signal/:id", to: 'channels_cdr_signal#update', via: :put
|
||||||
match "#{api_path}/channels_cdr_signal_webhook/:token", to: 'channels_cdr_signal#webhook', via: :post
|
match "#{api_path}/channels_cdr_signal_webhook/:token", to: 'channels_cdr_signal#webhook', via: :post
|
||||||
|
match "#{api_path}/channels_cdr_signal_webhook/:token/update_group", to: 'channels_cdr_signal#update_group', via: :post
|
||||||
match "#{api_path}/channels_cdr_signal_disable", to: 'channels_cdr_signal#disable', via: :post
|
match "#{api_path}/channels_cdr_signal_disable", to: 'channels_cdr_signal#disable', via: :post
|
||||||
match "#{api_path}/channels_cdr_signal_enable", to: 'channels_cdr_signal#enable', via: :post
|
match "#{api_path}/channels_cdr_signal_enable", to: 'channels_cdr_signal#enable', via: :post
|
||||||
match "#{api_path}/channels_cdr_signal", to: 'channels_cdr_signal#destroy', via: :delete
|
match "#{api_path}/channels_cdr_signal", to: 'channels_cdr_signal#destroy', via: :delete
|
||||||
|
|
|
||||||
|
|
@ -319,7 +319,14 @@ class CdrSignal
|
||||||
raise "No ticket found for article #{article.id}" unless ticket
|
raise "No ticket found for article #{article.id}" unless ticket
|
||||||
|
|
||||||
recipient = ticket.preferences.dig('cdr_signal', 'chat_id')
|
recipient = ticket.preferences.dig('cdr_signal', 'chat_id')
|
||||||
raise "No Signal chat_id found in ticket preferences" unless recipient
|
|
||||||
|
# If auto-groups is enabled and no chat_id, use original_recipient
|
||||||
|
if recipient.blank? && ENV['BRIDGE_SIGNAL_AUTO_GROUPS'].to_s.downcase == 'true'
|
||||||
|
recipient = ticket.preferences.dig('cdr_signal', 'original_recipient')
|
||||||
|
raise "No Signal chat_id or original_recipient found in ticket preferences" unless recipient
|
||||||
|
elsif recipient.blank?
|
||||||
|
raise "No Signal chat_id found in ticket preferences"
|
||||||
|
end
|
||||||
|
|
||||||
Rails.logger.debug { "Sending to recipient: '#{recipient}'" }
|
Rails.logger.debug { "Sending to recipient: '#{recipient}'" }
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue