Feature: Support account/inbox specific webhooks (#562)

This commit is contained in:
Subin T P
2020-02-26 09:44:24 +05:30
committed by GitHub
parent 4d5e7b4adf
commit 7479b5db43
24 changed files with 117 additions and 57 deletions

View File

@@ -60,6 +60,13 @@ class Account < ApplicationRecord
}
end
def webhook_data
{
id: id,
name: name
}
end
private
def create_subscription

View File

@@ -41,4 +41,11 @@ class Contact < ApplicationRecord
pubsub_token: pubsub_token
}
end
def webhook_data
{
id: id,
name: name
}
end
end

View File

@@ -93,6 +93,13 @@ class Conversation < ApplicationRecord
Conversations::EventDataPresenter.new(self).lock_data
end
def webhook_data
{
display_id: display_id,
additional_attributes: additional_attributes
}
end
private
def dispatch_events

View File

@@ -33,7 +33,7 @@ class Inbox < ApplicationRecord
has_many :members, through: :inbox_members, source: :user
has_many :conversations, dependent: :destroy
has_many :messages, through: :conversations
has_one :webhook, dependent: :destroy
has_many :webhooks, dependent: :destroy
after_create :subscribe_webhook, if: :facebook?
after_destroy :delete_round_robin_agents
@@ -60,6 +60,13 @@ class Inbox < ApplicationRecord
account.users.find_by(id: user_id)
end
def webhook_data
{
id: id,
name: name
}
end
private
def delete_round_robin_agents

View File

@@ -50,6 +50,7 @@ class Message < ApplicationRecord
belongs_to :inbox
belongs_to :conversation
belongs_to :user, required: false
belongs_to :contact, required: false
has_one :attachment, dependent: :destroy, autosave: true
@@ -78,6 +79,21 @@ class Message < ApplicationRecord
incoming? || outgoing?
end
def webhook_data
{
id: id,
content: content,
created_at: created_at,
message_type: message_type,
source_id: source_id,
sender: user.try(:webhook_data),
contact: contact.try(:webhook_data),
inbox: inbox.webhook_data,
conversation: conversation.webhook_data,
account: account.webhook_data
}
end
private
def dispatch_event

View File

@@ -110,4 +110,12 @@ class User < ApplicationRecord
avatar_url: avatar_url
}
end
def webhook_data
{
id: id,
name: name,
email: email
}
end
end

View File

@@ -2,19 +2,20 @@
#
# Table name: webhooks
#
# id :bigint not null, primary key
# urls :string
# created_at :datetime not null
# updated_at :datetime not null
# account_id :integer
# inbox_id :integer
# id :bigint not null, primary key
# url :string
# webhook_type :integer default("account")
# created_at :datetime not null
# updated_at :datetime not null
# account_id :integer
# inbox_id :integer
#
class Webhook < ApplicationRecord
belongs_to :account
belongs_to :inbox
belongs_to :inbox, optional: true
validates :account_id, presence: true
validates :inbox_id, presence: true
serialize :urls, Array
enum webhook_type: { account: 0, inbox: 1 }
end