Skip to content

Commit

Permalink
bug fix webhook response not sending data to tinybird (twentyhq#7952)
Browse files Browse the repository at this point in the history
Solves twentyhq/private-issues#118

**TLDR**

Fix webhook response not sending data to tinybird when the url is not a
link.

**Changes in Tinybird:**

- Add column Success to webhook payload (boolean)
- Changed the parameter WebhookIdRequest to WebhookId in the
getWebhooksResponse api point.
- Those changes can be seen in the tinybird workspace
twenty_analytics_playground

**In order to test**

1. Set ANALYTICS_ENABLED to true
2. Set TINYBIRD_INGEST_TOKEN to your token from the workspace
twenty_analytics_playground
3. Set TINYBIRD_GENERATE_JWT_TOKEN to the admin kwt token from the
workspace twenty_analytics_playground
4. Set TINYBIRD_WORKSPACE_UUID to the UUID of
twenty_analytics_playground
5. Create a Webhook in twenty and set wich events it needs to track
6. Run twenty-worker in order to make the webhooks work.
7. Do your tasks in order to populate the data
8. Look at your webhooks in settings>api and webhooks> your webhook and
the statistics should be displayed
  • Loading branch information
anamarn authored Oct 22, 2024
1 parent f0a2d38 commit 18cfe79
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ global.fetch = jest.fn();
describe('fetchGraphDataOrThrow', () => {
const mockWebhookId = 'test-webhook-id';
const mockWindowLength = '7D';
const mockTinybirdJwt = 'test-jwt';

beforeEach(() => {
jest.resetAllMocks();
Expand All @@ -27,6 +28,7 @@ describe('fetchGraphDataOrThrow', () => {
const result = await fetchGraphDataOrThrow({
webhookId: mockWebhookId,
windowLength: mockWindowLength,
tinybirdJwt: mockTinybirdJwt,
});

expect(global.fetch).toHaveBeenCalledWith(
Expand Down Expand Up @@ -71,6 +73,7 @@ describe('fetchGraphDataOrThrow', () => {
fetchGraphDataOrThrow({
webhookId: mockWebhookId,
windowLength: mockWindowLength,
tinybirdJwt: mockTinybirdJwt,
}),
).rejects.toThrow('Something went wrong while fetching webhook usage');
});
Expand All @@ -85,13 +88,14 @@ describe('fetchGraphDataOrThrow', () => {
await fetchGraphDataOrThrow({
webhookId: mockWebhookId,
windowLength: '1D',
tinybirdJwt: mockTinybirdJwt,
});

expect(global.fetch).toHaveBeenCalledWith(
expect.stringContaining(
new URLSearchParams({
...WEBHOOK_GRAPH_API_OPTIONS_MAP['1D'],
webhookIdRequest: mockWebhookId,
webhookId: mockWebhookId,
}).toString(),
),
expect.any(Object),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const fetchGraphDataOrThrow = async ({
}: fetchGraphDataOrThrowProps) => {
const queryString = new URLSearchParams({
...WEBHOOK_GRAPH_API_OPTIONS_MAP[windowLength],
webhookIdRequest: webhookId,
webhookId,
}).toString();

const response = await fetch(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,24 @@ export class CallWebhookJob {

@Process(CallWebhookJob.name)
async handle(data: CallWebhookJobData): Promise<void> {
const commonPayload = {
url: data.targetUrl,
webhookId: data.webhookId,
eventName: data.eventName,
};

try {
const response = await this.httpService.axiosRef.post(
data.targetUrl,
data,
);
const success = response.status >= 200 && response.status < 300;
const eventInput = {
action: 'webhook.response',
payload: {
status: response.status,
url: data.targetUrl,
webhookId: data.webhookId,
eventName: data.eventName,
success,
...commonPayload,
},
};

Expand All @@ -46,10 +52,9 @@ export class CallWebhookJob {
const eventInput = {
action: 'webhook.response',
payload: {
status: err.response.status,
url: data.targetUrl,
webhookId: data.webhookId,
eventName: data.eventName,
success: false,
...commonPayload,
...(err.response && { status: err.response.status }),
},
};

Expand Down

0 comments on commit 18cfe79

Please sign in to comment.