En esta página, se describe cómo realizar las siguientes tareas relacionadas con formularios:
- Publica el formulario para que las personas que lo responden puedan acceder a él
- Cómo encontrar a un encuestado para tu formulario
- Comparte tu formulario con más personas que responden
- Cómo quitar personas que responden de tu formulario
- Comprueba si el formulario acepta respuestas de "Cualquier persona con el vínculo".
- Cómo cerrar un formulario
- Cómo anular la publicación de un formulario
- Cómo dejar de aceptar respuestas en 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 responden tu formulario
Puedes recuperar una lista de todos los usuarios que tienen acceso de respuesta (el rol PUBLISHED_READER) con Form.getPublishedReaders(). Esto devuelve un array de objetos de usuario.
REST
Anexa 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 de modo 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 responden 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 responde, se revocará su capacidad para ver y enviar el formulario, a menos que tenga acceso a través de otros medios, como el uso compartido del dominio o el acceso a la unidad compartida.
Cómo quitar un solo encuestado por dirección de correo electrónico
REST
DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/PERMISSION
Puedes encontrar el permissionID "enumerando los respondientes" 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 con 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, sigue estos pasos:
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 puede responder el formulario", 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} Cuando se anula la publicación de un formulario, este deja de estar disponible y automáticamente deja 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 en un formulario sin anular su publicación, puedes usar el método Form.setAcceptingResponses(false)
.
Los encuestados 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 creados recientemente admiten la configuración de publicación.
Verifica si un formulario es heredado o no determinando si admite la publicación. Este método se usa para determinar si están habilitados los métodos setPublished(enabled)
y isPublished()
, y los permisos de respuesta.
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