Add Signal group ticket split compatibility
This commit is contained in:
parent
f059e75acd
commit
0b2ea19ebc
2 changed files with 55 additions and 2 deletions
|
|
@ -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
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
Rails.application.config.after_initialize do
|
Rails.application.config.after_initialize do
|
||||||
class Ticket::Article
|
class Ticket::Article
|
||||||
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
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue