Add Signal group ticket split compatibility

This commit is contained in:
Darren Clarke 2025-12-19 12:38:49 +01:00
parent f059e75acd
commit 0b2ea19ebc
2 changed files with 55 additions and 2 deletions

View file

@ -0,0 +1,49 @@
# frozen_string_literal: true
module Link::SetupSplitSignalGroup
extend ActiveSupport::Concern
included do
after_create :setup_signal_group_for_split_ticket
end
private
def setup_signal_group_for_split_ticket
# Only if auto-groups enabled
return unless ENV['BRIDGE_SIGNAL_AUTO_GROUPS'].to_s.downcase == 'true'
# Only child links (splits create child->parent links)
return unless link_type_id == Link::Type.find_by(name: 'child')&.id
# Only Ticket-to-Ticket links
ticket_object_id = Link::Object.find_by(name: 'Ticket')&.id
return unless link_object_source_id == ticket_object_id
return unless link_object_target_id == ticket_object_id
child_ticket = Ticket.find_by(id: link_object_source_value)
parent_ticket = Ticket.find_by(id: link_object_target_value)
return unless child_ticket && parent_ticket
# Only if parent has Signal group (chat_id starts with "group.")
parent_signal_prefs = parent_ticket.preferences&.dig('cdr_signal')
return unless parent_signal_prefs.present?
return unless parent_signal_prefs['chat_id']&.start_with?('group.')
original_recipient = parent_signal_prefs['original_recipient']
return unless original_recipient.present?
# Set up child for lazy group creation:
# chat_id = phone number triggers new group on first message
child_ticket.preferences ||= {}
child_ticket.preferences['channel_id'] = parent_ticket.preferences['channel_id']
child_ticket.preferences['cdr_signal'] = {
'bot_token' => parent_signal_prefs['bot_token'],
'chat_id' => original_recipient, # Phone number, NOT group ID
'original_recipient' => original_recipient
}
child_ticket.save!
Rails.logger.info "Signal split: Ticket ##{child_ticket.number} set up for new group (recipient: #{original_recipient})"
end
end

View file

@ -5,6 +5,11 @@ Rails.application.config.after_initialize do
include Ticket::Article::EnqueueCommunicateCdrSignalJob include Ticket::Article::EnqueueCommunicateCdrSignalJob
end end
# Handle Signal group setup for split tickets
class Link
include Link::SetupSplitSignalGroup
end
icon = File.read('public/assets/images/icons/cdr_signal.svg') icon = File.read('public/assets/images/icons/cdr_signal.svg')
doc = File.open('public/assets/images/icons.svg') { |f| Nokogiri::XML(f) } doc = File.open('public/assets/images/icons.svg') { |f| Nokogiri::XML(f) }
if !doc.at_css('#icon-cdr-signal') if !doc.at_css('#icon-cdr-signal')
@ -15,4 +20,3 @@ Rails.application.config.after_initialize do
end end
File.write('public/assets/images/icons.svg', doc.to_xml) File.write('public/assets/images/icons.svg', doc.to_xml)
end end