Nesta página, descrevemos como realizar estas tarefas com formulários:
- Publique o formulário para que os participantes possam acessá-lo
- Encontrar um participante do formulário
- Compartilhar o formulário com mais participantes
- Remover participantes do formulário
- Verifique se o formulário está aceitando respostas de "Qualquer pessoa com o link"
- Fechar um formulário
- Cancelar a publicação de um formulário
- Parar de aceitar respostas em um formulário
- Verificar se um formulário é legado
Antes de começar
Faça as seguintes tarefas antes de continuar com as tarefas desta página:
- Consiga o ID do formulário. O ID do formulário é retornado no campo - formIdda resposta quando você cria um formulário usando- forms.create.
Publique o formulário para que os participantes possam acessá-lo
É possível publicar um formulário usando o método
forms.setPublishSettings.
- Chame o método - forms.setPublishSettingscom o ID do formulário.
REST
Exemplo de corpo de solicitação
{
  "publishSettings": {
    "isPublished": true,
    "isAcceptingResponses": true
  }
}
Apps Script
/**
 * Publishes a Google Form using its URL.
 */
function publishMyForm() {
  // Replace with the URL of your Google Form
  const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
  try {
    const form = FormApp.openByUrl(formUrl);
    // Publish the form. This also enables accepting responses.
    form.setPublished(true);
    Logger.log(`Form "${form.getTitle()}" published successfully.`);
    // Optional: Verify the state
    if (form.isPublished()) {
      Logger.log('Form is now published.');
    }
    if (form.isAcceptingResponses()) {
      Logger.log('Form is now accepting responses.')
    }
  } catch (error) {
    Logger.log(`Error publishing form: ${error}`);
  }
}
Python
Node.js
Encontrar participantes do seu formulário
É possível recuperar uma lista de todos os usuários que têm acesso de resposta (a função PUBLISHED_READER) usando Form.getPublishedReaders(). Isso retorna uma matriz de objetos de usuário.
REST
Anexe o parâmetro de consulta includePermissionsForView=published ao URL da solicitação.
Apps Script
/**
 * Gets and logs the email addresses of all responders for a form.
 */
function listResponders() {
  // Replace with the URL of your Google Form
  const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
  try {
    const form = FormApp.openByUrl(formUrl);
    // Get the array of User objects representing responders
    const responders = form.getPublishedReaders();
    // Log the responders
    Logger.log("Following can respond to the form");
    responders.forEach(responder => Logger.log(responder.getEmail()));
    return responders;
  } catch (error) {
    Logger.log(`Error getting responders: ${error}`);
  }
}
Python
Node.js
Compartilhar o formulário com mais participantes
Para adicionar pessoas a um formulário para que elas possam abrir e responder, use o método permissions.create do Drive.
- Chame o método - permissions.createcom o ID do formulário e as configurações de acesso.
REST
Exemplo de corpo de solicitação
{
  "view": "published",
  "role": "reader",
  "type": "user",
  "emailAddress": "user@example.com"
}
Apps Script
/**
 * Adds a single responder to a form using their email address.
*/
function `addSingleResponderByEmail()` {
// Replace with the URL of your Google Form
  const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
  // Replace with the responder's email address
  const responderEmail = 'responder@example.com';
  try {
    const form = FormApp.openByUrl(formUrl);
    // Add the user as a responder
    form.addPublishedReader(responderEmail);
    Logger.log(`Added ${responderEmail} as a responder to form "${
        form.getTitle()}".`);
  } catch (error) {
    Logger.log(`Error adding responder: ${error}`);
  }
}
Python
Node.js
Remover participantes do formulário
É possível remover respondentes individuais pelo endereço de e-mail ou usando um objeto User. A remoção de um participante revoga a capacidade dele de acessar e enviar o formulário, a menos que ele tenha acesso por outros meios, como compartilhamento de domínio ou acesso a um drive compartilhado.
Remover um único participante por endereço de e-mail
REST
DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/PERMISSION 
O permissionID pode ser encontrado listando os participantes, conforme descrito anteriormente.
Apps Script
/**
 * Removes a single responder from a form using their email address.
*/
function `removeSingleResponderByEmail()` {
  // Replace with the URL of your Google Form
  const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
  // Replace with the responder's email address to remove
  const responderEmailToRemove = 'responder-to-remove@example.com';
  try {
    const form = FormApp.openByUrl(formUrl);
    // Remove the user as a responder
    form.removePublishedReader(responderEmailToRemove);
    Logger.log(`Removed ${responderEmailToRemove} as a responder from form "${
        form.getTitle()}".`);
  } catch (error) {
    Logger.log(`Error removing responder: ${error}`);
  }
}
Python
Node.js
Verifique se o formulário aceita respostas de "Qualquer pessoa com o link"
Para verificar se o formulário aceita respostas de qualquer pessoa com um link, ative o serviço avançado do Drive.
- Ative o serviço avançado do Drive:
- Abra seu projeto do Apps Script.
- Clique em Serviços (o ícone de adição ao lado de Serviço).
- Encontre a API Drive e clique em Adicionar.
- Clique em Adicionar.
 
Apps Script
function `isAnyoneWithLinkResponder`(formId) {
  let permissions = Drive.Permissions.list(formId, { includePermissionsForView: 'published' }).permissions;
  if (permissions) {
    for (const permission of permissions) {
      if (permission.type === 'anyone' && permission.view === 'published' && permission.role === 'reader') {
        return true;
      }
    }
  }
  return false;
}
Python
Node.js
Para definir que "Qualquer pessoa com o link" pode responder ao formulário:
Apps Script
function `setAnyoneWithLinkResponder`(formId) {
  Drive.Permissions.create({
    type: 'anyone',
    view: 'published',
    role: 'reader',
  }, formId);
}
Python
Node.js
Para remover a opção "Qualquer pessoa com o link" pode responder ao formulário:
Apps Script
function `removeAnyoneWithLinkResponder`(formId) {
  let permissions = Drive.Permissions.list(formId, { includePermissionsForView: 'published' }).permissions;
  if (permissions) {
    for (const permission of permissions) {
      if (permission.type === 'anyone' && permission.role === 'reader') {
        Drive.Permissions.remove(formId, permission.id);
      }
    }
  }
}
Python
Node.js
Fechar um formulário
Para cancelar a publicação de um formulário, use o método Forms.setPublished(false). {/apps-script/reference/forms/form#setpublishedenabled} Ao cancelar a publicação de um formulário, ele fica indisponível e para automaticamente de aceitar respostas.
REST
Exemplo de corpo de solicitação
POST https://forms.googleapis.com/v1/forms/{formId}:setPublishSettings
{
  "publishSettings": {
    "publishState": {
      "isPublished": false
    }
  }
}
Apps Script
/**
* Unpublishes a Google Form using its URL.
*/
function unpublishMyForm() {
  // Replace with the URL of your Google Form
  const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
  try {
    const form = FormApp.openByUrl(formUrl);
    // Unpublish the form. This also disables accepting responses.
    form.setPublished(false);
    Logger.log(`Form "${form.getTitle()}" unpublished successfully.`);
    // Optional: Verify the state
    if (!form.isPublished()) {
      Logger.log('Form is now unpublished.');
    }
    if (!form.isAcceptingResponses()) {
      Logger.log('Form is no longer accepting responses.');
    }
  } catch (error) {
    Logger.log(`Error unpublishing form: ${error}`);
  }
}
Python
Node.js
Para parar de aceitar respostas em um formulário sem cancelar a publicação, use o método
Form.setAcceptingResponses(false).
Os participantes vão ver a página e a mensagem do formulário fechado.
REST
Exemplo de corpo de solicitação
POST https://forms.googleapis.com/v1/forms/{formId}:setPublishSettings
{
  "publishSettings": {
    "publishState": {
      "isPublished": true,
      "isAcceptingResponses": false
    }
  }
}
Apps Script
/**
 * Stop a Google Form from accepting responses using its URL.
*/
function closeMyFormForAcceptingResponses() {
  // Replace with the URL of your Google Form
  const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
  try {
    const form = FormApp.openByUrl(formUrl);
    // This disables the form for accepting responses.
    form.setAcceptingResponses(false);
    Logger.log(`Form "${form.getTitle()}" closed for accepting responses successfully.`);
    // Optional: Verify the state
    if (form.isPublished()) {
      Logger.log('Form is still published.');
    }
    if (!form.isAcceptingResponses()) {
      Logger.log('Form is no longer accepting responses.');
    }
  } catch (error) {
    Logger.log(`Error unpublishing form: ${error}`);
  }
}
Python
Node.js
Verificar se um formulário é legado
Os formulários legados não têm o campo "publishSettings", enquanto todos os novos formulários criados têm suporte para configurações de publicação.
Verifique se um formulário é legado ou não determinando se ele oferece suporte à
publicação. Esse método é usado para determinar se os métodos
setPublished(enabled)
e isPublished()
e as permissões de resposta estão ativados.
Apps Script
/**
 * Checks if a form supports advanced responder permissions (i.e., is not a legacy form).
*/
function `checkIfFormSupportsPublishing()` {
  // TODO(developer): Replace the URL with your own.
  const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
  try {
    const form = FormApp.openByUrl(formUrl);
    // Checks whether the form supports publishing or not and logs it to the console.
    const supportsPublishing = form.supportsAdvancedResponderPermissions();
    if (supportsPublishing) {
      Logger.log(`Form "${form.getTitle()}" supports publishing (not a legacy
          form).`);
    } else {
      Logger.log(`Form "${form.getTitle()}" is a legacy form (does not support
          publishing).`);
    }
    return supportsPublishing;
  } catch (error) {
    Logger.log(`Error unpublishing form: ${error}`);
  }
}
Python
Node.js