Skip to content

New Components - zendesk #17748

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jul 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "Add Ticket Tags",
description: "Add tags to a ticket (appends to existing tags). [See the documentation](https://developer.zendesk.com/api-reference/ticketing/ticket-management/tags/#add-tags).",
type: "action",
version: "0.0.1",
version: "0.0.2",
props: {
app,
ticketId: {
Expand Down
2 changes: 1 addition & 1 deletion components/zendesk/actions/create-ticket/create-ticket.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "Create Ticket",
description: "Creates a ticket. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#create-ticket).",
type: "action",
version: "0.1.5",
version: "0.1.6",
props: {
app,
ticketCommentBody: {
Expand Down
2 changes: 1 addition & 1 deletion components/zendesk/actions/delete-ticket/delete-ticket.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "Delete Ticket",
description: "Deletes a ticket. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#delete-ticket).",
type: "action",
version: "0.1.5",
version: "0.1.6",
props: {
app,
ticketId: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "Get Ticket Info",
description: "Retrieves information about a specific ticket. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#show-ticket).",
type: "action",
version: "0.0.3",
version: "0.0.4",
props: {
app,
ticketId: {
Expand Down
28 changes: 28 additions & 0 deletions components/zendesk/actions/get-user-info/get-user-info.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import zendesk from "../../zendesk.app.mjs";

export default {
key: "zendesk-get-user-info",
name: "Get User Info",
description: "Retrieves information about a specific user. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/users/users/#show-user).",
version: "0.0.1",
type: "action",
props: {
zendesk,
userId: {
propDefinition: [
zendesk,
"userId",
],
},
},
async run({ $: step }) {
const response = await this.zendesk.getUserInfo({
step,
userId: this.userId,
});

step.export("$summary", `Successfully retrieved user info for ${response.user.name}`);

return response;
},
};
21 changes: 21 additions & 0 deletions components/zendesk/actions/list-locales/list-locales.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import zendesk from "../../zendesk.app.mjs";

export default {
key: "zendesk-list-locales",
name: "List Locales",
description: "Retrieves all locales. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/account-configuration/locales/).",
version: "0.0.1",
type: "action",
props: {
zendesk,
},
async run({ $: step }) {
const { locales } = await this.zendesk.listLocales();

step.export("$summary", `Successfully retrieved ${locales.length} locale${locales.length === 1
? ""
: "s"}`);

return locales;
},
};
99 changes: 99 additions & 0 deletions components/zendesk/actions/list-macros/list-macros.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import zendesk from "../../zendesk.app.mjs";

export default {
key: "zendesk-list-macros",
name: "List Macros",
description: "Retrieves all macros. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/business-rules/macros/#list-macros).",
version: "0.0.1",
type: "action",
props: {
zendesk,
access: {
type: "string",
label: "Access",
description: "The access level of the macros to return",
options: [
"personal",
"agents",
"shared",
"account",
],
optional: true,
},
active: {
type: "boolean",
label: "Active",
description: "Filter by active macros if `true` or inactive macros if `false`",
optional: true,
},
macroCategory: {
propDefinition: [
zendesk,
"macroCategory",
],
},
groupId: {
propDefinition: [
zendesk,
"groupId",
],
},
sortBy: {
type: "string",
label: "Sort By",
description: "The field to sort the results by",
options: [
"alphabetical",
"created_at",
"updated_at",
"usage_1h",
"usage_24h",
"usage_7d",
"usage_30d",
],
optional: true,
},
sortOrder: {
propDefinition: [
zendesk,
"sortOrder",
],
},
limit: {
propDefinition: [
zendesk,
"limit",
],
description: "Maximum number of macros to return",
},
},
async run({ $: step }) {
const results = this.zendesk.paginate({
fn: this.zendesk.listMacros,
args: {
step,
params: {
access: this.access,
active: this.active,
category: this.macroCategory,
group_id: this.groupId,
sort_by: this.sortBy,
sort_order: this.sortOrder,
},
},
resourceKey: "macros",
max: this.limit,
});

const macros = [];
for await (const macro of results) {
macros.push(macro);
}

step.export("$summary", `Successfully retrieved ${macros.length} macro${macros.length === 1
? ""
: "s"}`);

return macros;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import zendesk from "../../zendesk.app.mjs";

export default {
key: "zendesk-list-ticket-comments",
name: "List Ticket Comments",
description: "Retrieves all comments for a specific ticket. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_comments/#list-comments).",
version: "0.0.1",
type: "action",
props: {
zendesk,
ticketId: {
propDefinition: [
zendesk,
"ticketId",
],
},
sortOrder: {
propDefinition: [
zendesk,
"sortOrder",
],
},
limit: {
propDefinition: [
zendesk,
"limit",
],
description: "Maximum number of comments to return",
},
},
async run({ $: step }) {
const results = this.zendesk.paginate({
fn: this.zendesk.listTicketComments,
args: {
step,
ticketId: this.ticketId,
params: {
sort_order: this.sortOrder,
},
},
resourceKey: "comments",
max: this.limit,
});

const comments = [];
for await (const comment of results) {
comments.push(comment);
}

step.export("$summary", `Successfully retrieved ${comments.length} comment${comments.length === 1
? ""
: "s"}`);

return comments;
},
};
2 changes: 1 addition & 1 deletion components/zendesk/actions/list-tickets/list-tickets.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "List Tickets",
description: "Retrieves a list of tickets. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets).",
type: "action",
version: "0.0.3",
version: "0.0.4",
props: {
app,
sortBy: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "Remove Ticket Tags",
description: "Remove specific tags from a ticket. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/ticket-management/tags/#remove-tags).",
type: "action",
version: "0.0.1",
version: "0.0.2",
props: {
app,
ticketId: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "Search Tickets",
description: "Searches for tickets using Zendesk's search API. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/ticket-management/search/#search-tickets).",
type: "action",
version: "0.0.3",
version: "0.0.4",
props: {
app,
query: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "Set Ticket Tags",
description: "Set tags on a ticket (replaces all existing tags). [See the documentation](https://developer.zendesk.com/api-reference/ticketing/ticket-management/tags/#set-tags).",
type: "action",
version: "0.0.1",
version: "0.0.2",
props: {
app,
ticketId: {
Expand Down
2 changes: 1 addition & 1 deletion components/zendesk/actions/update-ticket/update-ticket.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default {
name: "Update Ticket",
description: "Updates a ticket and optionally manages tags. [See the documentation](https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#update-ticket).",
type: "action",
version: "0.1.5",
version: "0.1.6",
props: {
app,
ticketId: {
Expand Down
2 changes: 1 addition & 1 deletion components/zendesk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@pipedream/zendesk",
"version": "0.7.2",
"version": "0.8.0",
"description": "Pipedream Zendesk Components",
"main": "zendesk.app.mjs",
"keywords": [
Expand Down
23 changes: 23 additions & 0 deletions components/zendesk/sources/common/polling.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import zendesk from "../../zendesk.app.mjs";
import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";

export default {
props: {
zendesk,
db: "$.service.db",
timer: {
type: "$.interface.timer",
default: {
intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
},
},
},
methods: {
_getLastTs() {
return this.db.get("lastTs") || 0;
},
_setLastTs(ts) {
this.db.set("lastTs", ts);
},
},
};
18 changes: 10 additions & 8 deletions components/zendesk/sources/common/webhook.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,15 @@ export default {
isRelevant() {
return true;
},
emitEvent(payload) {
const ts = Date.parse(payload.updatedAt);
const id = `${payload.ticketId}-${ts}`;
this.$emit(payload, {
id,
summary: payload.title || payload.ticketId,
ts,
});
},
},
async run(event) {
const {
Expand Down Expand Up @@ -241,13 +250,6 @@ export default {
return;
}

const ts = Date.parse(payload.updatedAt);
const id = `${payload.ticketId}-${ts}`;

this.$emit(payload, {
id,
summary: payload.title || payload.ticketId,
ts,
});
this.emitEvent(payload);
},
};
29 changes: 29 additions & 0 deletions components/zendesk/sources/locale-updated/locale-updated.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import common from "../common/polling.mjs";

export default {
...common,
key: "zendesk-locale-updated",
name: "Locale Updated",

Check warning on line 6 in components/zendesk/sources/locale-updated/locale-updated.mjs

View workflow job for this annotation

GitHub Actions / Lint Code Base

Source names should start with "New". See https://pipedream.com/docs/components/guidelines/#source-name
type: "source",
description: "Emit new event when a locale has been updated",
version: "0.0.1",
dedupe: "unique",
async run() {
const lastTs = this._getLastTs();
let maxTs = lastTs;

const { locales } = await this.zendesk.listLocales();
for (const locale of locales) {
const ts = Date.parse(locale.updated_at);
if (ts > lastTs) {
this.$emit(locale, {
id: `${locale.id}-${ts}`,
summary: locale.name,
ts,
});
maxTs = Math.max(maxTs, ts);
}
}
this._setLastTs(maxTs);
},
};
Loading
Loading