0

Search Tickets

by
Published Nov 7, 2023

Search tickets with Zendesk search syntax, e.g. `status:open priority:high`, `assignee:me updated>24hours`, `requester:[email protected]`, `tags:vip`. `type:ticket` is added for you. Offset-paged (`page`, up to 100 per page); search returns at most 1,000 results per query.

Script zendesk Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 2 hours ago
1
//native
2

3
/**
4
 * Search Tickets
5
 * Search tickets with Zendesk search syntax, e.g. `status:open priority:high`, `assignee:me updated>24hours`, `requester:jane@example.com`, `tags:vip`. `type:ticket` is added for you. Offset-paged (`page`, up to 100 per page); search returns at most 1,000 results per query.
6
 */
7
export async function main(
8
  auth: RT.Zendesk,
9
  query: string,
10
  sort_by:
11
    | "updated_at"
12
    | "created_at"
13
    | "priority"
14
    | "status"
15
    | "ticket_type"
16
    | undefined,
17
  sort_order: "asc" | "desc" | undefined,
18
  page: number | undefined,
19
  per_page: number | undefined
20
) {
21
  const url = new URL(`https://${auth.subdomain}.zendesk.com/api/v2/search`)
22
  url.searchParams.append("query", `type:ticket ${query}`)
23
  if (sort_by) {
24
    url.searchParams.append("sort_by", sort_by)
25
  }
26
  if (sort_order) {
27
    url.searchParams.append("sort_order", sort_order)
28
  }
29
  url.searchParams.append("page", String(page || 1))
30
  url.searchParams.append("per_page", String(per_page || 100))
31

32
  const response = await fetch(url, {
33
    headers: {
34
      Authorization: auth.token
35
        ? `Bearer ${auth.token}`
36
        : `Basic ${btoa(`${auth.username}:${auth.password}`)}`,
37
      Accept: "application/json",
38
    },
39
  })
40

41
  if (!response.ok) {
42
    throw new Error(`${response.status} ${await response.text()}`)
43
  }
44

45
  return await response.json()
46
}
47

Other submissions
  • Submitted by hugo697 Typescript (fetch-only)
    Created 528 days ago
    1
    type Zendesk = {
    2
      username: string;
    3
      password: string;
    4
      subdomain: string;
    5
    };
    6
    /**
    7
     * List Search Results
    8
     * Use the ampersand character (&) to append the `sort_by` or `sort_order` parameters to the URL.
    9
     */
    10
    export async function main(
    11
      auth: Zendesk,
    12
      query: string | undefined,
    13
      sort_by: string | undefined,
    14
      sort_order: string | undefined
    15
    ) {
    16
      const url = new URL(`https://${auth.subdomain}.zendesk.com/api/v2/search`);
    17
      for (const [k, v] of [
    18
        ["query", query],
    19
        ["sort_by", sort_by],
    20
        ["sort_order", sort_order],
    21
      ]) {
    22
        if (v !== undefined && v !== "") {
    23
          url.searchParams.append(k, v);
    24
        }
    25
      }
    26
      const response = await fetch(url, {
    27
        method: "GET",
    28
        headers: {
    29
          Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
    30
        },
    31
        body: undefined,
    32
      });
    33
      if (!response.ok) {
    34
        const text = await response.text();
    35
        throw new Error(`${response.status} ${text}`);
    36
      }
    37
      return await response.json();
    38
    }
    39