Generate Asynchronous Reports with createReport
mainUse createReport for infrequent, large data queries (up to tens of millions of records). The report is generated in the background. Vonage recommends limiting queries to a maximum of 7 million records.
Workflow:
- Call
createReportto start the request. - Use
getReport(requestId)to poll the status. - Once
requestStatusis no longerPENDINGorPROCESSING, use thelinks.downloadReport.hrefto download the file. - Use
cancelReport(requestId)if you need to stop a pending report.
// Create the report
const report = await reportsClient.createReport({
product: 'SMS',
accountId: API_KEY,
dateStart: '2024-01-01T00:00:00Z',
dateEnd: '2024-02-01T00:00:00Z',
callbackUrl: 'https://example.com/webhook',
});
console.log(`Report ID: ${report.requestId}`);
// Poll until complete
let status = await reportsClient.getReport(report.requestId);
while (status.requestStatus === 'PENDING' || status.requestStatus === 'PROCESSING') {
await new Promise((resolve) => setTimeout(resolve, 5000));
status = await reportsClient.getReport(report.requestId);
}
console.log(`Download: ${status.links.downloadReport?.href}`);
// Cancel a pending report
await reportsClient.cancelReport(report.requestId);