11import type { ToolConfig } from '@/tools/types'
22import {
3+ appendCursorPaginationParams ,
34 buildZendeskUrl ,
45 extractCursorPagingInfo ,
56 handleZendeskError ,
@@ -18,7 +19,7 @@ export interface ZendeskGetTicketsParams {
1819 assigneeId ?: string
1920 organizationId ?: string
2021 sort ?: string
21- /** Internal: set by auto-pagination via buildNextPageParams */
22+ perPage ?: string
2223 pageAfter ?: string
2324}
2425
@@ -43,7 +44,7 @@ export const zendeskGetTicketsTool: ToolConfig<ZendeskGetTicketsParams, ZendeskG
4344 id : 'zendesk_get_tickets' ,
4445 name : 'Get Tickets from Zendesk' ,
4546 description : 'Retrieve a list of tickets from Zendesk with optional filtering' ,
46- version : '2 .0.0' ,
47+ version : '1 .0.0' ,
4748
4849 params : {
4950 email : {
@@ -101,6 +102,18 @@ export const zendeskGetTicketsTool: ToolConfig<ZendeskGetTicketsParams, ZendeskG
101102 description :
102103 'Sort field for ticket listing (only applies without filters): "updated_at", "id", or "status". Prefix with "-" for descending (e.g., "-updated_at")' ,
103104 } ,
105+ perPage : {
106+ type : 'string' ,
107+ required : false ,
108+ visibility : 'user-or-llm' ,
109+ description : 'Results per page as a number string (default: "100", max: "100")' ,
110+ } ,
111+ pageAfter : {
112+ type : 'string' ,
113+ required : false ,
114+ visibility : 'user-or-llm' ,
115+ description : 'Cursor from a previous response to fetch the next page of results' ,
116+ } ,
104117 } ,
105118
106119 request : {
@@ -125,16 +138,15 @@ export const zendeskGetTicketsTool: ToolConfig<ZendeskGetTicketsParams, ZendeskG
125138 const queryParams = new URLSearchParams ( )
126139 queryParams . append ( 'query' , searchTerms . join ( ' ' ) )
127140 queryParams . append ( 'filter[type]' , 'ticket' )
128- queryParams . append ( 'page[size]' , '100' )
129- if ( params . pageAfter ) queryParams . append ( 'page[after]' , params . pageAfter )
141+ appendCursorPaginationParams ( queryParams , params )
130142
131143 return `${ buildZendeskUrl ( params . subdomain , '/search/export' ) } ?${ queryParams . toString ( ) } `
132144 }
133145
146+ // No filters - use the simple /tickets endpoint with cursor-based pagination
134147 const queryParams = new URLSearchParams ( )
135148 if ( params . sort ) queryParams . append ( 'sort' , params . sort )
136- queryParams . append ( 'page[size]' , '100' )
137- if ( params . pageAfter ) queryParams . append ( 'page[after]' , params . pageAfter )
149+ appendCursorPaginationParams ( queryParams , params )
138150
139151 const query = queryParams . toString ( )
140152 const url = buildZendeskUrl ( params . subdomain , '/tickets' )
@@ -182,19 +194,4 @@ export const zendeskGetTicketsTool: ToolConfig<ZendeskGetTicketsParams, ZendeskG
182194 paging : PAGING_OUTPUT ,
183195 metadata : METADATA_OUTPUT ,
184196 } ,
185-
186- pagination : {
187- pageField : 'tickets' ,
188- getItems : ( output ) => output . tickets ?? [ ] ,
189- getNextPageToken : ( output ) => {
190- if ( output . paging ?. has_more && output . paging ?. after_cursor ) {
191- return output . paging . after_cursor
192- }
193- return null
194- } ,
195- buildNextPageParams : ( params , token ) => ( {
196- ...params ,
197- pageAfter : String ( token ) ,
198- } ) ,
199- } ,
200197 }
0 commit comments