Class FormResponse

ফর্ম প্রতিক্রিয়া

সম্পূর্ণ ফর্মটির একটি প্রতিক্রিয়া। একটি FormResponse তিনভাবে ব্যবহার করা যেতে পারে: একজন উত্তরদাতার জমা দেওয়া উত্তরগুলি অ্যাক্সেস করতে ( getItemResponses() দেখুন), প্রোগ্রাম্যাটিকভাবে ফর্মে একটি প্রতিক্রিয়া জমা দিতে ( withItemResponse(response) এবং submit() দেখুন), এবং ফর্মটির জন্য একটি URL তৈরি করতে যা প্রদত্ত উত্তরগুলি ব্যবহার করে ফিল্ডগুলি আগে থেকেই পূরণ করে দেয়। একটি Form থেকে FormResponse তৈরি বা অ্যাক্সেস করা যেতে পারে।

// Open a form by ID and log the responses to each question.
const form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
const formResponses = form.getResponses();
for (let i = 0; i < formResponses.length; i++) {
  const formResponse = formResponses[i];
  const itemResponses = formResponse.getItemResponses();
  for (let j = 0; j < itemResponses.length; j++) {
    const itemResponse = itemResponses[j];
    Logger.log(
        'Response #%s to the question "%s" was "%s"',
        (i + 1).toString(),
        itemResponse.getItem().getTitle(),
        itemResponse.getResponse(),
    );
  }
}

পদ্ধতি

পদ্ধতি রিটার্ন টাইপ সংক্ষিপ্ত বিবরণ
get Edit Response Url() String একটি URL তৈরি করে যা ইতিমধ্যে জমা দেওয়া কোনো উত্তর সম্পাদনা করতে ব্যবহার করা যেতে পারে।
get Gradable Item Responses() Item Response[] একটি ফর্মের উত্তরে থাকা সমস্ত আইটেমের প্রতিক্রিয়া, ফর্মে আইটেমগুলো যে ক্রমে থাকে ঠিক সেই ক্রমেই নিয়ে আসে।
get Gradable Response For Item(item) Item Response কোনো প্রদত্ত আইটেমের জন্য, ফর্মের উত্তরে থাকা আইটেম প্রতিক্রিয়াটি পাওয়া যায়।
get Id() String|null ফর্ম রেসপন্সের আইডিটি পাওয়া যায়।
get Item Responses() Item Response[] একটি ফর্মের উত্তরে থাকা সমস্ত আইটেমের প্রতিক্রিয়া, ফর্মে আইটেমগুলো যে ক্রমে থাকে ঠিক সেই ক্রমেই নিয়ে আসে।
get Respondent Email() String যদি Form.setCollectEmail(collect) ` সেটিংটি সক্রিয় করা থাকে, তাহলে যিনি উত্তর জমা দিয়েছেন তার ইমেল ঠিকানা সংগ্রহ করে।
get Response For Item(item) Item Response একটি নির্দিষ্ট আইটেমের জন্য, এই ফর্মের উত্তরে থাকা আইটেম প্রতিক্রিয়াটি পাওয়া যায়।
get Timestamp() Date ফর্মের উত্তর জমা দেওয়ার টাইমস্ট্যাম্প সংগ্রহ করে।
submit() Form Response প্রতিক্রিয়া জমা দেয়।
to Prefilled Url() String এই ফর্মের উত্তরের উপর ভিত্তি করে এমন একটি ফর্মের জন্য URL তৈরি করে, যেখানে উত্তরগুলো আগে থেকেই পূরণ করা থাকে।
with Item Grade(gradedResponse) Form Response প্রদত্ত আইটেম উত্তরের গ্রেডগুলো একটি ফর্ম উত্তরে যোগ করে।
with Item Response(response) Form Response প্রদত্ত আইটেমের প্রতিক্রিয়াটি একটি ফর্মের প্রতিক্রিয়ার সাথে যুক্ত করে।

বিস্তারিত ডকুমেন্টেশন

getEditResponseUrl()

একটি ইউআরএল তৈরি করে যা ইতিমধ্যে জমা দেওয়া একটি প্রতিক্রিয়া সম্পাদনা করতে ব্যবহার করা যেতে পারে। যদি Form.setAllowResponseEdits(enabled) সেটিংটি নিষ্ক্রিয় থাকে, তাহলে লিঙ্কটি এমন একটি পৃষ্ঠায় নিয়ে যায় যেখানে ব্যাখ্যা করা থাকে যে ফর্মের প্রতিক্রিয়া সম্পাদনা করা নিষ্ক্রিয় করা হয়েছে। যে কেউ লিঙ্কটিতে গেলে প্রতিক্রিয়াটি সম্পাদনা করতে পারে, যদিও Form.setRequireLogin(requireLogin) সেটিংটি সক্রিয় থাকলে ফর্মটিতে অ্যাক্সেস সহ একটি অ্যাকাউন্ট প্রয়োজন হবে। যদি Form.setCollectEmail(collect) সেটিংটি সক্রিয় থাকে, তাহলে ফর্মটি মূল উত্তরদাতার ইমেল ঠিকানার পরিবর্তে প্রতিক্রিয়াটি সম্পাদনা করা ব্যবহারকারীর ইমেল ঠিকানা রেকর্ড করে।

স্ক্রিপ্ট দ্বারা তৈরি করা কিন্তু এখনও জমা না দেওয়া কোনো ফর্ম প্রতিক্রিয়ার জন্য, এই পদ্ধতিটি null রিটার্ন করে।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets the first form response.
const formResponse = form.getResponses()[0];

// Gets the edit URL for the first form response and logs it to the console.
const editUrl = formResponse.getEditResponseUrl();
console.log(editUrl);

ফেরত

String — জমা দেওয়া প্রতিক্রিয়া পরিবর্তন করার জন্য URL।

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

getGradableItemResponses()

একটি ফর্ম রেসপন্সের মধ্যে থাকা সমস্ত আইটেমের প্রতিক্রিয়া, ফর্মে আইটেমগুলো যে ক্রমে প্রদর্শিত হয় ঠিক সেই ক্রমেই নিয়ে আসে। এই মেথডটি getItemResponses() এর মতোই কাজ করে, কিন্তু কোনো অনুপস্থিত উত্তরের গ্রেডিং করার সুযোগ দেওয়ার জন্য, যদি সংশ্লিষ্ট Item গ্রেড করার যোগ্য হয় (অর্থাৎ, এর একটি পয়েন্ট ভ্যালু থাকে), তাহলে কোনো প্রকৃত প্রতিক্রিয়া না থাকলেও এটি একটি ItemResponse রিটার্ন করে। তবে, যদি Item গ্রেড করার যোগ্য না হয়, তাহলে এই মেথডটি সেই আইটেমটিকে তার রিটার্ন করা অ্যারে থেকে বাদ দিয়ে দেয়।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets an array of the form's responses.
const formResponses = form.getResponses();

// Gets the item responses contained in each form response.
for (const formResponse of formResponses) {
  const gradableItemsResponses = formResponse.getGradableItemResponses();

  // Logs the title and score for each item response to the console.
  for (const gradableItemsResponse of gradableItemsResponses) {
    console.log(`${gradableItemsResponse.getItem().getTitle()}
       score ${gradableItemsResponse.getScore()}`);
  }
}

ফেরত

ItemResponse[] — ফর্মের মধ্যে থাকা প্রতিটি প্রশ্নের উত্তরের একটি অ্যারে, যার জন্য উত্তরদাতা একটি স্কোর পেতে পারেন।

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

getGradableResponseForItem(item)

প্রদত্ত কোনো আইটেমের জন্য ফর্মের উত্তরে থাকা আইটেম রেসপন্সটি এই মেথডটি নিয়ে আসে। এই মেথডটি getResponseForItem(item) এর মতোই কাজ করে, কিন্তু কোনো অনুপস্থিত উত্তরের গ্রেডিং করার সুযোগ দেওয়ার জন্য, যদি সংশ্লিষ্ট Item গ্রেডিং করা যায় (অর্থাৎ, এর একটি পয়েন্ট ভ্যালু থাকে), তাহলে কোনো প্রকৃত রেসপন্স না থাকলেও এটি একটি ItemResponse রিটার্ন করে। তবে, যদি Item গ্রেডযোগ্য না হয়, তাহলে এই মেথডটি null রিটার্ন করে।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets an array of the form's responses.
const formResponses = form.getResponses();

// Gets the item responses contained in a form response.
for (const formResponse of formResponses) {
  const formItemResponses = formResponse.getGradableItemResponses();

  // Logs the title and score for responses to the first item of the form.
  const itemResponse = formResponse.getGradableResponseForItem(
      formItemResponses[0].getItem(),
  );
  console.log(
      `${itemResponse.getItem().getTitle()} score ${itemResponse.getScore()}`,
  );
}

প্যারামিটার

নাম প্রকার বর্ণনা
item Item

ফেরত

ItemResponse — প্রদত্ত আইটেমের জন্য প্রতিক্রিয়া, অথবা যদি কোনো প্রতিক্রিয়া না থাকে এবং আইটেমটি মূল্যায়ন করা না হয়ে থাকে তবে null


getId()

ফর্ম রেসপন্সের আইডিটি গ্রহণ করে। ফর্ম রেসপন্স সাবমিট করা না থাকলে এই মেথডটি null রিটার্ন করে।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets an array of the form's responses.
const formResponses = form.getResponses();

// Loops through the form responses and logs the ID for each form response to
// the console.
for (const formResponse of formResponses) {
  console.log(`Response ID: ${formResponse.getId()}`);
}

ফেরত

String|null — ফর্ম প্রতিক্রিয়ার আইডি, অথবা ফর্ম প্রতিক্রিয়া জমা দেওয়া না হলে null

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

getItemResponses()

একটি ফর্ম রেসপন্সের মধ্যে থাকা সমস্ত আইটেমের প্রতিক্রিয়া, ফর্মে আইটেমগুলো যে ক্রমে প্রদর্শিত হয় ঠিক সেই ক্রমেই নিয়ে আসে। যদি ফর্ম রেসপন্সে কোনো নির্দিষ্ট TextItem , DateItem , TimeItem , বা ParagraphTextItem এর জন্য কোনো প্রতিক্রিয়া না থাকে, তাহলে সেই আইটেমের জন্য ফেরত আসা ItemResponse প্রতিক্রিয়া হিসেবে একটি খালি স্ট্রিং থাকবে। যদি ফর্ম রেসপন্স অন্য কোনো আইটেম টাইপের জন্য প্রতিক্রিয়া বাদ দেয়, তাহলে এই মেথডটি তার ফেরত আসা অ্যারে থেকে সেই আইটেমটিকে বাদ দেয়।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets the responses to the form.
const formResponses = form.getResponses();

// Iterates over the responses.
for (const formResponse of formResponses) {
  // Gets the item responses from each form response.
  const itemResponses = formResponse.getItemResponses();

  // Iterates over the item responses.
  for (const itemResponse of itemResponses) {
    // Logs the items' questions and responses to the console.
    console.log(
        `Response to the question '${itemResponse.getItem().getTitle()}' was
      '${itemResponse.getResponse()}'`);
  }
}

ফেরত

ItemResponse[] — ফর্মের মধ্যে থাকা প্রতিটি প্রশ্নের উত্তরের একটি অ্যারে, যেগুলোর জন্য উত্তরদাতা একটি উত্তর প্রদান করেছেন।

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

getRespondentEmail()

যদি Form.setCollectEmail(collect) ` সেটিংটি সক্রিয় করা থাকে, তাহলে যিনি উত্তর জমা দিয়েছেন তার ইমেল ঠিকানা সংগ্রহ করে।

স্ক্রিপ্ট দ্বারা তৈরি করা কিন্তু এখনও জমা না দেওয়া কোনো ফর্ম প্রতিক্রিয়ার জন্য, এই পদ্ধতিটি null রিটার্ন করে।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets an array of the form's responses.
const formResponses = form.getResponses();

// Loops through the responses and logs each respondent's email to the console.
// To collect respondent emails, ensure that Form.setCollectEmail(collect) is
// set to true.
for (const formResponse of formResponses) {
  console.log(`Respondent Email: ${formResponse.getRespondentEmail()}`);
}

ফেরত

String — যিনি এই উত্তরটি জমা দিয়েছেন তাঁর ইমেল ঠিকানা, যদি পাওয়া যায়, অথবা null , যদি স্ক্রিপ্টটি এই উত্তরটি তৈরি করে থাকে কিন্তু এখনও জমা না দিয়ে থাকে।

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

getResponseForItem(item)

একটি নির্দিষ্ট আইটেমের জন্য, এই ফর্মের উত্তরে থাকা আইটেম প্রতিক্রিয়াটি পাওয়া যায়।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets the first item on the form.
const item = form.getItems()[0];

// Gets an array of the form's responses.
const formResponses = form.getResponses();

// Loops through the responses and logs each response to the first item to the
// console.
for (const formResponse of formResponses) {
  const itemResponse = formResponse.getResponseForItem(item);
  console.log(itemResponse.getResponse());
}

প্যারামিটার

নাম প্রকার বর্ণনা
item Item

ফেরত

ItemResponse — প্রদত্ত আইটেমের প্রতিক্রিয়া, অথবা কোনো প্রতিক্রিয়া না থাকলে null


getTimestamp()

ফর্মের উত্তর জমা দেওয়ার টাইমস্ট্যাম্প সংগ্রহ করে।

স্ক্রিপ্ট দ্বারা তৈরি করা কিন্তু এখনও জমা না দেওয়া কোনো ফর্ম প্রতিক্রিয়ার জন্য, এই পদ্ধতিটি null রিটার্ন করে।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets an array of the form's responses.
const formResponses = form.getResponses();

// Loops through the responses and logs the timestamp of each response to the
// console.
for (const formResponse of formResponses) {
  console.log(`Timestamp: ${formResponse.getTimestamp()}`);
}

ফেরত

Date — যে সময়ে এই প্রতিক্রিয়াটি জমা দেওয়া হয়েছিল, অথবা যদি স্ক্রিপ্টটি এই প্রতিক্রিয়াটি তৈরি করে থাকে কিন্তু এখনও জমা না দিয়ে থাকে তবে এটি null

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

submit()

প্রতিক্রিয়াটি জমা দেয়। যদি প্রতিক্রিয়াটি আগে থেকেই জমা দেওয়া হয়ে থাকে, তাহলে একটি স্ক্রিপ্টিং ব্যতিক্রম প্রদর্শন করে।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Creates an empty response for the form.
const formResponse = form.createResponse();

// Submits an empty response.
formResponse.submit();

ফেরত

FormResponse — ফর্মের রেসপন্স স্টোরে সংরক্ষিত একটি নতুন তৈরি করা রেসপন্স।

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

toPrefilledUrl()

এই ফর্মের উত্তরের উপর ভিত্তি করে এমন একটি ফর্মের জন্য URL তৈরি করে, যেখানে উত্তরগুলো আগে থেকেই পূরণ করা থাকে।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Gets the first form response.
const formResponse = form.getResponses()[0];

// Generates and logs the URL of a pre-filled form response based on the answers
// of the first form response.
const prefilledUrl = formResponse.toPrefilledUrl();
console.log(prefilledUrl);

ফেরত

String — আগে থেকে পূরণ করা উত্তরসহ একটি ফর্মের URL।

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

withItemGrade(gradedResponse)

প্রদত্ত আইটেম রেসপন্সের গ্রেডগুলো একটি ফর্ম রেসপন্সে যোগ করে। এই মেথডটি শুধুমাত্র সেইসব ফর্ম রেসপন্সের ক্ষেত্রে প্রযোজ্য যা ইতোমধ্যে সাবমিট করা হয়েছে, এবং সাবমিট করার পরেই কেবল সংরক্ষিত গ্রেডগুলোকে প্রভাবিত করে। এই মেথডটি শুধুমাত্র আইটেম রেসপন্সের গ্রেডগুলো আপডেট করে; এটি মূল রেসপন্সকে প্রভাবিত করে না (যেহেতু রেসপন্সটি ইতোমধ্যে সাবমিট করা হয়ে গেছে)। যদি একই আইটেমের জন্য এই মেথডটি একাধিকবার কল করা হয়, তবে শুধুমাত্র সর্বশেষ গ্রেডটি সংরক্ষিত থাকবে। যদি ItemResponse-এ কোনো গ্রেড না থাকে, তবে এই মেথডটি আইটেমটির গ্রেডগুলো মুছে দেয়।

// Programmatically award partial credit for a given response
const form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
const formResponses = form.getResponses();
const formItems = form.getItems();
for (const formResponse of formResponses) {
  for (const item of formItems) {
    const points = item.asMultipleChoiceItem().getPoints();
    const itemResponse = formResponse.getGradableResponseForItem(item);
    Logger.log('Award half credit for answers containing the word "Kennedy"');
    const answer = itemResponse.getResponse();

    if (answer?.includes('Kennedy')) {
      itemResponse.setScore(points / 2);
      formResponse.withItemGrade(itemResponse);
    }
  }
}
form.submitGrades(formResponses);

প্যারামিটার

নাম প্রকার বর্ণনা
graded Response Item Response

ফেরত

FormResponse — এই FormResponse , চেইনিংয়ের জন্য।

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms

withItemResponse(response)

প্রদত্ত আইটেম প্রতিক্রিয়াটি একটি ফর্ম প্রতিক্রিয়ার সাথে যুক্ত করে। এই পদ্ধতিটি শুধুমাত্র সেইসব ফর্ম প্রতিক্রিয়ার ক্ষেত্রে প্রযোজ্য যা স্ক্রিপ্ট দ্বারা তৈরি করা হয়েছে কিন্তু এখনও জমা দেওয়া হয়নি; এটি সংরক্ষিত প্রতিক্রিয়াগুলিকে প্রভাবিত করতে পারে না। যদি একই আইটেমের জন্য এই পদ্ধতিটি একাধিকবার কল করা হয়, তবে শুধুমাত্র সর্বশেষ আইটেম প্রতিক্রিয়াটিই সংরক্ষিত থাকবে।

// Opens the Forms file by its ID.
// If you created your script from within a Google Forms file, you can
// use FormApp.getActiveForm() instead.
// TODO(developer): Replace the ID with your own.
const form = FormApp.openById('abc123456');

// Creates a response for the form.
const formResponse = form.createResponse();

// Appends a checkbox item to the form.
const item = form.addCheckboxItem();

// Sets the title of the item to 'Which items are ice cream flavors?'
item.setTitle('Which items are ice cream flavors?');

// Sets choices for the item.
item.setChoices([
  item.createChoice('Vanilla'),
  item.createChoice('Strawberry'),
  item.createChoice('Brick'),
]);

// Creates a response for the item.
const response = item.createResponse(['Vanilla', 'Strawberry']);

// Adds the item response to the form response.
formResponse.withItemResponse(response);

// Submits the form response.
formResponse.submit();

প্যারামিটার

নাম প্রকার বর্ণনা
response Item Response

ফেরত

FormResponse — এই FormResponse , চেইনিং-এর জন্য।

অনুমোদন

যে স্ক্রিপ্টগুলো এই পদ্ধতি ব্যবহার করে, সেগুলোর জন্য নিম্নলিখিত এক বা একাধিক স্কোপের মাধ্যমে অনুমোদনের প্রয়োজন হয়:

  • https://www.googleapis.com/auth/forms.currentonly
  • https://www.googleapis.com/auth/forms