समझिए
Setup
- एक Google Form बनाइए, जैसे Repair Request, सवाल: Name, Email, Phone, Item, Problem।
- Form में: Responses → Link to Sheets → नई spreadsheet बनाइए।
- वह spreadsheet खोलिए → Extensions → Apps Script (response sheet पर bound script)।
हर submission Form Responses 1 tab में एक row जोड़ता है: पहले Timestamp, फिर सवालों के क्रम में जवाब।
Form-submit event
एक installable trigger बनाइए:
function setupFormTrigger() {
ScriptApp.newTrigger('onFormSubmitHandler')
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit()
.create();
}
Response आने पर handler को e मिलता है:
function onFormSubmitHandler(e) {
console.log(e.values); // ['10/10/2026 14:05:11', 'Rahul', 'rahul@example.com', ...]
console.log(e.namedValues); // { 'Name': ['Rahul'], 'Email': ['rahul@example.com'], ... }
console.log(e.range.getRow()); // the row just added
}
e.namedValues बेहतर है — यह सवालों के titles इस्तेमाल करता है, इसलिए form में सवालों का क्रम बदलने से code नहीं टूटता। ध्यान दें कि हर value एक array के अंदर है: e.namedValues['Name'][0]।
Auto-reply email
function onFormSubmitHandler(e) {
const get = q => (e.namedValues[q] ? e.namedValues[q][0] : '').trim();
const name = get('Name');
const email = get('Email');
const item = get('Item');
if (!email) return;
const body =
`Dear ${name},\n\n` +
`We have received your repair request for: ${item}.\n` +
`Our team will contact you within 24 hours.\n\n` +
`Thank you,\nService Desk`;
MailApp.sendEmail(email, 'We received your request', body);
}
Ticket ID और status जोड़ना
Form के columns के दाईं ओर अतिरिक्त columns लिखें। Form columns: A Timestamp, B Name, C Email, D Phone, E Item, F Problem → हम G (Ticket ID) और H (Status) इस्तेमाल करेंगे।
function onFormSubmitHandler(e) {
const sheet = e.range.getSheet();
const row = e.range.getRow();
const ticketId = 'REP-' + String(row - 1).padStart(4, '0'); // REP-0001, REP-0002 ...
sheet.getRange(row, 7, 1, 2).setValues([[ticketId, 'New']]);
const email = (e.namedValues['Email'] || [''])[0];
if (email) {
MailApp.sendEmail(email, `Request ${ticketId} received`,
`Your ticket number is ${ticketId}. Please quote it when you call us.`);
}
// Alert the shop
MailApp.sendEmail('service@example.com', `New request ${ticketId}`,
Object.entries(e.namedValues).map(([q, a]) => `${q}: ${a[0]}`).join('\n'));
}
Tip: form के columns के बीच में columns न डालें — Google Forms position के हिसाब से लिखता है और नए सवाल आख़िर में जुड़ते हैं। अपने columns दाईं ओर रखें, या raw responses tab को न छुएँ और rows को अलग working tab में copy करें।
Duplicate trigger संभालना
कभी-कभी एक ही submission पर trigger दो बार चल सकता है। अगर इससे फ़र्क़ पड़ता है (जैसे आप SMS भेजते हैं या invoice बनाते हैं), तो काम करने से पहले जाँचें:
if (sheet.getRange(row, 7).getValue()) return; // ticket already assigned
मुख्य बातें
- Response spreadsheet पर installable onFormSubmit trigger लगाएँ।
- जवाब पढ़ने का सबसे सुरक्षित तरीका
e.namedValues['Question'][0]है। - अपने columns form के columns के दाईं ओर जोड़ें।