45e43b0b89
- Add endpoint which lists inboxes through which a contact can be contacted - Conversation creation API auto-creates contact_inbox for specific channels [ Twilio, email, api] - Ability to send the initial message payload along with the conversation creation - Fixes #1678 ( issue saving additional attributes for conversation )
41 lines
1 KiB
Ruby
41 lines
1 KiB
Ruby
class ContactInboxBuilder
|
|
pattr_initialize [:contact_id!, :inbox_id!, :source_id]
|
|
|
|
def perform
|
|
@contact = Contact.find(contact_id)
|
|
@inbox = @contact.account.inboxes.find(inbox_id)
|
|
return unless ['Channel::TwilioSms', 'Channel::Email', 'Channel::Api'].include? @inbox.channel_type
|
|
|
|
source_id = @source_id || generate_source_id
|
|
create_contact_inbox(source_id) if source_id.present?
|
|
end
|
|
|
|
private
|
|
|
|
def generate_source_id
|
|
return twilio_source_id if @inbox.channel_type == 'Channel::TwilioSms'
|
|
return @contact.email if @inbox.channel_type == 'Channel::Email'
|
|
return SecureRandom.uuid if @inbox.channel_type == 'Channel::Api'
|
|
|
|
nil
|
|
end
|
|
|
|
def twilio_source_id
|
|
return unless @contact.phone_number
|
|
|
|
case @inbox.channel.medium
|
|
when 'sms'
|
|
@contact.phone_number
|
|
when 'whatsapp'
|
|
"whatsapp:#{@contact.phone_number}"
|
|
end
|
|
end
|
|
|
|
def create_contact_inbox(source_id)
|
|
::ContactInbox.find_or_create_by!(
|
|
contact_id: @contact.id,
|
|
inbox_id: @inbox.id,
|
|
source_id: source_id
|
|
)
|
|
end
|
|
end
|