exportdefaultasyncfunctionmain(args) { let { apiKey, domain, name } = args.inputVars; // Input variables
// Check if the user has inputted the required variables if (!apiKey || !domain || !name) { return { // Returns the error path so we can continue the design next: { path: 'error' }, // Renders a debug message in Voiceflow trace: [{ type: "debug", payload: { message: "Missing required input variables for this function" } }] }; } function base64Encode(str) { const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; let output = ''; for (let i = 0; i < str.length; i += 3) { const byte1 = str.charCodeAt(i) & 0xFF; const byte2 = i + 1 < str.length ? str.charCodeAt(i + 1) & 0xFF : 0; const byte3 = i + 2 < str.length ? str.charCodeAt(i + 2) & 0xFF : 0; const enc1 = byte1 >> 2; const enc2 = ((byte1 & 0x3) << 4) | (byte2 >> 4); const enc3 = ((byte2 & 0xF) << 2) | (byte3 >> 6); const enc4 = byte3 & 0x3F; if (isNaN(byte2)) { output += charSet.charAt(enc1) + charSet.charAt(enc2) + '=='; } else if (isNaN(byte3)) { output += charSet.charAt(enc1) + charSet.charAt(enc2) + charSet.charAt(enc3) + '='; } else { output += charSet.charAt(enc1) + charSet.charAt(enc2) + charSet.charAt(enc3) + charSet.charAt(enc4); } } return output; }
// Base URL for searching contacts in Freshdesk const url = `https://${domain}.freshdesk.com/api/v2/contacts/autocomplete?term=${encodeURIComponent(name)}`;
// This is where we made the fetch request, we use try-catch for error handling try { // Make the fetch request const response = await fetch(url, config);
// Check if the response status is OK (status in the range 200-299) if (!response.ok) { // If not OK, throw an error to be caught by the catch block throw new Error(`HTTP error! status: ${response.status}`); }
// Parse the response const responseBody = await response.json; if(responseBody.length == 0 ){ return { // Map the success path so we can continue in our flow next: { path: 'error' }, trace: [{ type: "debug", payload: { message: "Error: No contacts found."} }]
}; } // Create the return objects if this is successful return { // Map the success path so we can continue in our flow next: { path: 'success' }, // Optionally, return the response body if needed outputVars: { results: JSON.stringify(responseBody) } }; } // Catches all the errors we threw and displays the debug message catch (error) { return { // Maps the error path so we can continue in our design next: { path: 'error' }, // Renders a debug message in Voiceflow with the error trace: [{ type: "debug", payload: { message: "Error:" + error.message + ' ' + url } }] }; } }