chore: Add custom attributes in campaign.triggered event (#4463)
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
class Campaigns::CampaignConversationBuilder
|
class Campaigns::CampaignConversationBuilder
|
||||||
pattr_initialize [:contact_inbox_id!, :campaign_display_id!, :conversation_additional_attributes]
|
pattr_initialize [:contact_inbox_id!, :campaign_display_id!, :conversation_additional_attributes, :custom_attributes]
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
@contact_inbox = ContactInbox.find(@contact_inbox_id)
|
@contact_inbox = ContactInbox.find(@contact_inbox_id)
|
||||||
@@ -32,7 +32,8 @@ class Campaigns::CampaignConversationBuilder
|
|||||||
contact_id: @contact_inbox.contact_id,
|
contact_id: @contact_inbox.contact_id,
|
||||||
contact_inbox_id: @contact_inbox.id,
|
contact_inbox_id: @contact_inbox.id,
|
||||||
campaign_id: @campaign.id,
|
campaign_id: @campaign.id,
|
||||||
additional_attributes: conversation_additional_attributes
|
additional_attributes: conversation_additional_attributes,
|
||||||
|
custom_attributes: custom_attributes || {}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -155,13 +155,14 @@ export default {
|
|||||||
this.replaceRoute('prechat-form');
|
this.replaceRoute('prechat-form');
|
||||||
} else {
|
} else {
|
||||||
this.replaceRoute('messages');
|
this.replaceRoute('messages');
|
||||||
bus.$emit('execute-campaign', this.activeCampaign.id);
|
bus.$emit('execute-campaign', { campaignId: this.activeCampaign.id });
|
||||||
}
|
}
|
||||||
this.unsetUnreadView();
|
this.unsetUnreadView();
|
||||||
});
|
});
|
||||||
bus.$on('execute-campaign', campaignId => {
|
bus.$on('execute-campaign', campaignDetails => {
|
||||||
|
const { customAttributes, campaignId } = campaignDetails;
|
||||||
const { websiteToken } = window.chatwootWebChannel;
|
const { websiteToken } = window.chatwootWebChannel;
|
||||||
this.executeCampaign({ campaignId, websiteToken });
|
this.executeCampaign({ campaignId, websiteToken, customAttributes });
|
||||||
this.replaceRoute('messages');
|
this.replaceRoute('messages');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,9 +7,16 @@ const getCampaigns = async websiteToken => {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
const triggerCampaign = async ({ campaignId, websiteToken }) => {
|
const triggerCampaign = async ({
|
||||||
const urlData = endPoints.triggerCampaign({ websiteToken, campaignId });
|
campaignId,
|
||||||
|
websiteToken,
|
||||||
|
customAttributes,
|
||||||
|
}) => {
|
||||||
|
const urlData = endPoints.triggerCampaign({
|
||||||
|
websiteToken,
|
||||||
|
campaignId,
|
||||||
|
customAttributes,
|
||||||
|
});
|
||||||
await API.post(
|
await API.post(
|
||||||
urlData.url,
|
urlData.url,
|
||||||
{ ...urlData.data },
|
{ ...urlData.data },
|
||||||
@@ -18,5 +25,4 @@ const triggerCampaign = async ({ campaignId, websiteToken }) => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export { getCampaigns, triggerCampaign };
|
export { getCampaigns, triggerCampaign };
|
||||||
|
|||||||
@@ -78,12 +78,13 @@ const getCampaigns = token => ({
|
|||||||
website_token: token,
|
website_token: token,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const triggerCampaign = ({ websiteToken, campaignId }) => ({
|
const triggerCampaign = ({ websiteToken, campaignId, customAttributes }) => ({
|
||||||
url: '/api/v1/widget/events',
|
url: '/api/v1/widget/events',
|
||||||
data: {
|
data: {
|
||||||
name: 'campaign.triggered',
|
name: 'campaign.triggered',
|
||||||
event_info: {
|
event_info: {
|
||||||
campaign_id: campaignId,
|
campaign_id: campaignId,
|
||||||
|
custom_attributes: customAttributes,
|
||||||
...generateEventParams(),
|
...generateEventParams(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -92,14 +92,17 @@ export const actions = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
executeCampaign: async ({ commit }, { campaignId, websiteToken }) => {
|
executeCampaign: async (
|
||||||
|
{ commit },
|
||||||
|
{ campaignId, websiteToken, customAttributes }
|
||||||
|
) => {
|
||||||
try {
|
try {
|
||||||
commit(
|
commit(
|
||||||
'conversation/setConversationUIFlag',
|
'conversation/setConversationUIFlag',
|
||||||
{ isCreating: true },
|
{ isCreating: true },
|
||||||
{ root: true }
|
{ root: true }
|
||||||
);
|
);
|
||||||
await triggerCampaign({ campaignId, websiteToken });
|
await triggerCampaign({ campaignId, websiteToken, customAttributes });
|
||||||
commit('setCampaignExecuted', true);
|
commit('setCampaignExecuted', true);
|
||||||
commit('setActiveCampaign', {});
|
commit('setActiveCampaign', {});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -46,7 +46,10 @@ export default {
|
|||||||
conversationCustomAttributes,
|
conversationCustomAttributes,
|
||||||
}) {
|
}) {
|
||||||
if (activeCampaignId) {
|
if (activeCampaignId) {
|
||||||
bus.$emit('execute-campaign', activeCampaignId);
|
bus.$emit('execute-campaign', {
|
||||||
|
campaignId: activeCampaignId,
|
||||||
|
customAttributes: conversationCustomAttributes,
|
||||||
|
});
|
||||||
this.$store.dispatch('contacts/update', {
|
this.$store.dispatch('contacts/update', {
|
||||||
user: {
|
user: {
|
||||||
email: emailAddress,
|
email: emailAddress,
|
||||||
|
|||||||
@@ -2,13 +2,15 @@ class CampaignListener < BaseListener
|
|||||||
def campaign_triggered(event)
|
def campaign_triggered(event)
|
||||||
contact_inbox = event.data[:contact_inbox]
|
contact_inbox = event.data[:contact_inbox]
|
||||||
campaign_display_id = event.data[:event_info][:campaign_id]
|
campaign_display_id = event.data[:event_info][:campaign_id]
|
||||||
|
custom_attributes = event.data[:event_info][:custom_attributes]
|
||||||
|
|
||||||
return if campaign_display_id.blank?
|
return if campaign_display_id.blank?
|
||||||
|
|
||||||
::Campaigns::CampaignConversationBuilder.new(
|
::Campaigns::CampaignConversationBuilder.new(
|
||||||
contact_inbox_id: contact_inbox.id,
|
contact_inbox_id: contact_inbox.id,
|
||||||
campaign_display_id: campaign_display_id,
|
campaign_display_id: campaign_display_id,
|
||||||
conversation_additional_attributes: event.data[:event_info].except(:campaign_id)
|
conversation_additional_attributes: event.data[:event_info].except(:campaign_id, :custom_attributes),
|
||||||
|
custom_attributes: custom_attributes
|
||||||
).perform
|
).perform
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ describe CampaignListener do
|
|||||||
|
|
||||||
let!(:event) do
|
let!(:event) do
|
||||||
Events::Base.new('campaign_triggered', Time.zone.now,
|
Events::Base.new('campaign_triggered', Time.zone.now,
|
||||||
contact_inbox: contact_inbox, event_info: { campaign_id: campaign.display_id })
|
contact_inbox: contact_inbox, event_info: { campaign_id: campaign.display_id, custom_attributes: { order_id: 321 } })
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#campaign_triggered' do
|
describe '#campaign_triggered' do
|
||||||
@@ -23,7 +23,8 @@ describe CampaignListener do
|
|||||||
context 'when params contain campaign id' do
|
context 'when params contain campaign id' do
|
||||||
it 'triggers campaign conversation builder' do
|
it 'triggers campaign conversation builder' do
|
||||||
expect(Campaigns::CampaignConversationBuilder).to receive(:new)
|
expect(Campaigns::CampaignConversationBuilder).to receive(:new)
|
||||||
.with({ contact_inbox_id: contact_inbox.id, campaign_display_id: campaign.display_id, conversation_additional_attributes: {} }).once
|
.with({ contact_inbox_id: contact_inbox.id, campaign_display_id: campaign.display_id, conversation_additional_attributes: {},
|
||||||
|
custom_attributes: { order_id: 321 } }).once
|
||||||
listener.campaign_triggered(event)
|
listener.campaign_triggered(event)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user