I'm encountering an issue while attempting to integrate a Google Form with Salesforce. Whenever a form submission occurs,
An error occurred in onFormSubmit: { [Exception: Request failed for https://xxxxxxxx_developper.sandbox.lightning.force.com returned code 405. Truncated server response:
[{"errorCode":"METHOD_NOT_ALLOWED","message":"HTTP Method 'GET' not allowed. Allowed are POST"}] (use muteHttpExceptions option to examine full response)] name: 'Exception' }
// Constants for Salesforce API endpoints
var AUTHORIZE_URL = 'https://test.salesforce.com//services/oauth2/authorize';
var TOKEN_URL = "https://test.salesforce.com/services/oauth2/token";
// Function to handle form submission errors
function handleFormSubmitError(error) {
console.error('An error occurred in onFormSubmit:', error);
}
// Function to handle successful form submission (assuming successful update)
function handleFormSubmitSuccess() {
console.log('Form submission successful!');
// You can add further actions here, like displaying a success message
}
function onFormSubmit(e) {
try {
var formResponse = e.response;
// Check if form response is undefined
if (!formResponse) {
console.error('Form response is undefined.');
return;
}
var formItems = formResponse.getItemResponses();
// Check if form items are undefined or empty
if (!formItems || formItems.length === 0) {
console.error('Form items are undefined or empty.');
return;
}
// Get Salesforce access token (assuming asynchronous retrieval)
getSalesforceToken()
.then(salesforceTokenData => updateSalesforceLead(formItems, salesforceTokenData))
.catch(handleFormSubmitError);
} catch (error) {
handleFormSubmitError(error);
}
}
// Function to check if access token is expired (replace with your logic)
function isTokenExpired(tokenData) {
// Implement logic to check token expiration based on its properties (e.g., expires_at)
return false; // Placeholder for now
}
function updateSalesforceLead(formItems, salesforceTokenData) {
// Check if token data or access token is missing
if (!salesforceTokenData || !salesforceTokenData.access_token) {
console.error('Failed to get Salesforce access token.');
return;
}
// Prepare Salesforce payload based on form data
var salesforce_payload = {
'Email': formItems[0].getResponse(),
'Num_SIREN__c': formItems[1].getResponse(),
'Zip_code': formItems[2].getResponse(),
'Opco': formItems[3].getResponse(),
'RaisonFormation__c': formItems[4].getResponse(),
'Benefice_attendus__c': formItems[5].getResponse(),
'Date_Souhaite__c': formItems[6].getResponse(),
'NumberOfEmployees': formItems[7].getResponse(),
'Intra_inter__c': formItems[8].getResponse(),
'Lieux_formation__c': formItems[9].getResponse(),
'Message__c': formItems[10].getResponse(),
};
var feedUrl = 'https://xxxxxx--developper.sandbox.lightning.force.com/services/apexrest/v1/googleform';
var options = {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + salesforceTokenData.access_token,
'Content-Type': 'application/json'
},
payload: JSON.stringify(salesforce_payload)
};
UrlFetchApp.fetch(feedUrl, options)
.then(response => {
console.log('Salesforce response:', response.getContentText());
handleFormSubmitSuccess(); // Call success handler if response is successful (update logic needed)
})
.catch(handleFormSubmitError);
}
async function getSalesforceToken() {
var grant_type = 'password';
var client_id = 'xxxxxxxxxxx';
var client_secret = 'xxxxxxxxxx';
var salesforce_username = 'xxxxxxxxx';
var salesforce_password = 'xxxxxxxxxxx';
var payload = {
'grant_type': grant_type,
'client_id': client_id,
'client_secret': client_secret,
'username': salesforce_username,
'password': salesforce_password
};
try {
var response = await UrlFetchApp.fetch(TOKEN_URL, {
method: 'post',
contentType: 'application/x-www-form-urlencoded',
payload: payload
});
if (response.getResponseCode() === 200) {
var tokenData = JSON.parse(response.getContentText());
console.log('Salesforce access token obtained successfully:', tokenData.access_token);
return tokenData;
} else {
console.error('Failed to get Salesforce access token. Response:', response.getContentText());
throw new Error('Failed to get Salesforce access token.');
}
} catch (error) {
console.error('Error fetching Salesforce access token:', error);
throw error;
}
}