En esta página, se describe cómo realizar estas tareas relacionadas con los formularios:
- Publica el formulario para que las personas que lo responden puedan acceder a él
- Cómo encontrar a un usuario que respondió tu formulario
- Comparte tu formulario con más personas que responden
- Cómo quitar personas que respondieron de tu formulario
- Comprueba si el formulario acepta respuestas de "Cualquier persona que tenga el vínculo".
- Cómo cerrar un formulario
- Cómo anular la publicación de un formulario
- Cómo dejar de aceptar respuestas a un formulario
- Cómo verificar si un formulario es heredado
Antes de comenzar
Realiza las siguientes tareas antes de continuar con las tareas de esta página:
Obtén el ID del formulario. El ID del formulario se muestra en el campo
formId
de la respuesta cuando creas un formulario conforms.create
.
Publica el formulario para que las personas que lo responden puedan acceder a él
Puedes publicar un formulario existente con el método forms.setPublishSettings
.
Llama al método
forms.setPublishSettings
con el ID del formulario.
REST
Cuerpo de la solicitud de muestra
{
"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
Cómo encontrar a las personas que respondieron tu formulario
Puedes recuperar una lista de todos los usuarios que tienen acceso de persona que responde (el rol PUBLISHED_READER) con Form.getPublishedReaders(). Esto muestra un array de objetos de usuario.
REST
Adjunta el parámetro de consulta includePermissionsForView=published
a la URL de la solicitud.
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
Comparte tu formulario con más personas que responden
Para agregar personas que responden a un formulario para que puedan abrirlo y responderlo, puedes usar el método permissions.create
de Drive.
Llama al método
permissions.create
con el ID del formulario y la configuración de acceso.
REST
Cuerpo de la solicitud de muestra
{
"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
Cómo quitar personas que respondieron de tu formulario
Puedes quitar a los encuestados individuales por su dirección de correo electrónico o con un objeto User. Si quitas a una persona que respondió, se revoca su capacidad de ver y enviar el formulario, a menos que tenga acceso a través de otros medios, como el uso compartido de dominios o el acceso a unidades compartidas.
Cómo quitar un solo encargado de responder por dirección de correo electrónico
REST
DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/PERMISSION
Puedes encontrar permissionID "enumerando a los respondedores" como se describió 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
Comprueba si el formulario acepta respuestas de "Cualquier persona que tenga el vínculo".
Para verificar si el formulario acepta respuestas de cualquier persona que tenga un vínculo, debes activar el servicio avanzado de Drive.
- Activa el servicio avanzado de Drive:
- Abre tu proyecto de Apps Script.
- Haz clic en Servicios (el ícono de signo más junto a Servicio).
- Busca la API de Drive y haz clic en Agregar.
- Haz clic en Agregar.
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 establecer que cualquier persona que tenga el vínculo pueda responder el formulario, haz lo siguiente:
Apps Script
function `setAnyoneWithLinkResponder`(formId) {
Drive.Permissions.create({
type: 'anyone',
view: 'published',
role: 'reader',
}, formId);
}
Python
Node.js
Para quitar la opción "Cualquier persona que tenga el vínculo", sigue estos pasos:
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
Cómo cerrar un formulario
Para anular la publicación de un formulario, usa el método Forms.setPublished(false). {/apps-script/reference/forms/form#setpublishedenabled} Si dejas de publicar un formulario, este dejará de estar disponible y, automáticamente, dejará de aceptar respuestas.
REST
Cuerpo de la solicitud de muestra
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 dejar de aceptar respuestas de un formulario sin dejar de publicarlo, puedes usar el método Form.setAcceptingResponses(false)
.
Las personas que respondan tu formulario verán la página y el mensaje del formulario cerrado.
REST
Cuerpo de la solicitud de muestra
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
Cómo verificar si un formulario es heredado
Los formularios heredados son aquellos que no tienen el campo publishSettings, mientras que todos los formularios nuevos creados admiten la configuración de publicación.
Para verificar si un formulario es heredado o no, determina si admite la publicación. Este método se usa para determinar si los métodos setPublished(enabled)
y isPublished()
, y los permisos del respondedor están habilitados.
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