Conceptos básicos de los trabajos (v3)

Un recurso de trabajo representa una publicación de trabajo (también llamada “ficha de trabajo” o “requerimiento de trabajo”). Cada trabajo pertenece a una empresa, que es la entidad que contrata y es responsable del trabajo.

Los trabajos se pueden manipular mediante métodos de creación, actualización y eliminación, y se puede acceder a ellos mediante los métodos list y get. Pueden transcurrir hasta 5 minutos antes de que se apliquen los cambios en el índice de Cloud Talent Solution.

Los trabajos se almacenan en el alcance de una cuenta de servicio. Solo se pueden usar solicitudes de búsqueda autenticadas con las credenciales de una cuenta de servicio determinada para acceder al contenido de estos trabajos.

Para facilitar la solución y detección de problemas, sincroniza el índice de trabajos de Cloud Talent Solution con el tuyo y mantén una relación entre el name que generó Cloud Talent Solution y el identificador único de los trabajos de tu sistema. Cuando se ingresen trabajos a tu sistema o se modifiquen en él, se debe enviar la llamada CRUD correspondiente a Cloud Talent Solution en tiempo real para garantizar que los cambios se reflejen de inmediato. Se debe agregar el índice de Cloud Talent Solution a la canalización de transferencia de trabajos existente.

Crea un trabajo

Consulta la Guía de inicio rápido: Crea empresas y trabajos para obtener más información sobre cómo crear un trabajo.

Java

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/** Create a job. */
public static Job createJob(Job jobToBeCreated) throws IOException {
  try {
    CreateJobRequest createJobRequest = new CreateJobRequest().setJob(jobToBeCreated);

    Job jobCreated =
        talentSolutionClient
            .projects()
            .jobs()
            .create(DEFAULT_PROJECT_ID, createJobRequest)
            .execute();
    System.out.println("Job created: " + jobCreated);
    return jobCreated;
  } catch (IOException e) {
    System.out.println("Got exception while creating job");
    throw e;
  }
}

Python

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

def create_job(client_service, job_to_be_created):
    try:
        request = {"job": job_to_be_created}
        job_created = (
            client_service.projects()
            .jobs()
            .create(parent=parent, body=request)
            .execute()
        )
        print("Job created: %s" % job_created)
        return job_created
    except Error as e:
        print("Got exception while creating job")
        raise e

Go

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


// createJob create a job as given.
func createJob(w io.Writer, projectID string, jobToCreate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	parent := "projects/" + projectID
	req := &talent.CreateJobRequest{
		Job: jobToCreate,
	}
	job, err := service.Projects.Jobs.Create(parent, req).Do()
	if err != nil {
		return nil, fmt.Errorf("Failed to create job %q, Err: %w", jobToCreate.RequisitionId, err)
	}
	return job, err
}

Campos obligatorios

Se deben completar los siguientes campos durante la creación y la actualización de los trabajos:

  • companyName: El nombre de recurso de la empresa que publica el trabajo, como projects/[PROJECT_ID]/companies/[COMPANY_ID].

  • requisitionId: El ID de requisito, también llamado ID de publicación, que asigna el cliente para identificar un trabajo. Este campo está diseñado para que los clientes lo usen a fin de identificar los clientes y realizar un seguimiento de las solicitudes. La cantidad máxima de caracteres permitida es 255.

    Para determinar que una publicación de trabajo sea única, se usa una combinación de requisitionID, companyName y la configuración regional del trabajo. Si se crea un trabajo con una clave específica de estos atributos, la clave se almacena en el índice de Cloud Talent Solution y no se pueden crear más trabajos con esos mismos campos hasta que se borre el primero.

  • title: El título del trabajo, como "Ingeniero de software" La cantidad máxima de caracteres permitida es 500.

    Para corregir el problema de los resultados de la búsqueda perdidos a causa de cargos de trabajo no estándar, Cloud Talent Solution aprovecha todos los campos proporcionados del trabajo a fin de comprender su contexto y almacenar de manera interna un cargo “limpio”. Cuando se envía una solicitud de búsqueda al servicio, la consulta de la búsqueda también se limpia y se usan estas ontologías para asignarla a trabajos limpios relevantes.

  • description: La descripción del trabajo, que, por lo general, incluye una descripción de varios párrafos sobre la empresa y la información relacionada. El objeto del trabajo cuenta con campos independientes para las responsabilidades, las cualificaciones y otras de sus características. Se recomienda el uso de estos campos del trabajo independientes.

    Este campo acepta la entrada HTML y la limpia, además de aceptar las etiquetas de lenguaje de marcado de negrita, cursiva, lista ordenada y lista sin ordenar. La cantidad máxima de caracteres permitida es 100,000.

Uno de los siguientes:

  • applicationInfo.uris[]: Son las URL de las páginas de postulación.

  • applicationInfo.emails[]: Direcciones de correo electrónico a las que se deben enviar los currículums o las aplicaciones.

  • applicationInfo.instruction: Son las instrucciones de postulación, como "Envía tu solicitud a…". Este campo acepta y depura la entrada HTML, y acepta las etiquetas de lenguaje de lista sin ordenar, lista ordenada, negrita y cursiva. La cantidad máxima de caracteres permitida es 3,000.

Campos de uso común

  • postingExpireTime: Indica el momento, en función de la marca de tiempo, en el que vence la publicación de trabajos. Después de este momento, el trabajo se marca como vencido y no aparecerá en los resultados de la búsqueda. La fecha debe ser como máximo el 31 de diciembre de 2100 en la zona horaria UTC. Se ignoran las fechas no válidas (como las fechas pasadas). La fecha de vencimiento predeterminada es 30 días después de la creación del trabajo en la zona horaria UTC.

    El contenido de los trabajos vencidos permanece disponible y se puede recuperar hasta 60 días después de la fecha de vencimiento mediante el operador GET. Después de este plazo, el trabajo dejará de mostrarse mediante la operación GET.

  • addresses[]: Las ubicaciones del trabajo en las que contratarán trabajadores Se recomienda proporcionar las direcciones completas de las ubicaciones de contratación para que la API genere mejores resultados, incluidas las búsquedas de trabajo por tiempo de viaje cotidiano. La cantidad máxima de caracteres permitida es 500. Puedes encontrar más información sobre addresses[] en la sección Prácticas recomendadas a continuación.

  • promotionValue: Si el valor es superior a 0, se define a este trabajo como un “trabajo destacado”, que se muestra solo en búsquedas de trabajo de tipo FEATURED_JOBS. Los valores más altos se muestran más arriba en los resultados destacados de la búsqueda. Consulta Trabajos destacados para obtener más información.

Campos personalizados

  • customAttributes: En este campo, se almacenan hasta 100 atributos personalizados que se pueden usar para almacenar datos personalizados sobre el trabajo. Estos campos se pueden filtrar con una solicitud de búsqueda que especifica el campo jobQuery de una solicitud de búsqueda de trabajo. Además, cualquiera de estos campos se puede configurar en el atributo keywordSearchableJobCustomAttributes de la empresa. Por lo tanto, un término de búsqueda que tenga una coincidencia exacta en cualquiera de los campos de keywordSearchableJobCustomAttributes mostrará cualquier trabajo que incluya da la coincidencia.

Actualiza un trabajo

Actualiza el trabajo sin fieldMask

Java

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/** Update a job. */
public static Job updateJob(String jobName, Job jobToBeUpdated) throws IOException {
  try {
    UpdateJobRequest updateJobRequest = new UpdateJobRequest().setJob(jobToBeUpdated);
    Job jobUpdated =
        talentSolutionClient.projects().jobs().patch(jobName, updateJobRequest).execute();
    System.out.println("Job updated: " + jobUpdated);
    return jobUpdated;
  } catch (IOException e) {
    System.out.println("Got exception while updating job");
    throw e;
  }
}

Python

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

def update_job(client_service, job_name, job_to_be_updated):
    try:
        request = {"job": job_to_be_updated}
        job_updated = (
            client_service.projects()
            .jobs()
            .patch(name=job_name, body=request)
            .execute()
        )
        print("Job updated: %s" % job_updated)
        return job_updated
    except Error as e:
        print("Got exception while updating job")
        raise e

Go

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


// updateJob update a job with all fields except name.
func updateJob(w io.Writer, jobName string, jobToUpdate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	req := &talent.UpdateJobRequest{
		Job: jobToUpdate,
	}
	job, err := service.Projects.Jobs.Patch(jobName, req).Do()
	if err != nil {
		return nil, fmt.Errorf("Failed to update job %s: %w", jobName, err)
	}

	return job, err
}

Actualiza el trabajo con fieldMask

Java

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


/** Update a job. */
public static Job updateJobWithFieldMask(String jobName, String fieldMask, Job jobToBeUpdated)
    throws IOException {
  try {
    UpdateJobRequest updateJobRequest =
        new UpdateJobRequest().setUpdateMask(fieldMask).setJob(jobToBeUpdated);
    Job jobUpdated =
        talentSolutionClient.projects().jobs().patch(jobName, updateJobRequest).execute();
    System.out.println("Job updated: " + jobUpdated);
    return jobUpdated;
  } catch (IOException e) {
    System.out.println("Got exception while updating job");
    throw e;
  }
}

Python

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.

def update_job_with_field_mask(client_service, job_name, job_to_be_updated, field_mask):
    try:
        request = {"job": job_to_be_updated, "update_mask": field_mask}
        job_updated = (
            client_service.projects()
            .jobs()
            .patch(name=job_name, body=request)
            .execute()
        )
        print("Job updated: %s" % job_updated)
        return job_updated
    except Error as e:
        print("Got exception while updating job with field mask")
        raise e

Go

Consulta Bibliotecas cliente de Cloud Talent Solution para obtener más información sobre cómo instalar y crear un cliente de Cloud Talent Solution.


// updateJobWithMask updates a job by name with specific fields.
// mask is a comma separated list top-level fields of talent.Job.
func updateJobWithMask(w io.Writer, jobName string, mask string, jobToUpdate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	req := &talent.UpdateJobRequest{
		Job:        jobToUpdate,
		UpdateMask: mask,
	}
	job, err := service.Projects.Jobs.Patch(jobName, req).Do()
	if err != nil {
		log.Fatalf("Failed to update job %s with field mask %s, Err: %v", jobName, mask, err)
	}

	return job, err
}

Prácticas recomendadas

Campos de ubicación

Siempre que sea posible, recomendamos proporcionar la dirección completa del trabajo en el campo addresses[]. Esto facilita la detección y la relevancia de la ubicación. Si la dirección no tiene una calle, ingresa la mayor cantidad de información posible. Las direcciones admiten información hasta el nivel de los países. No se admiten las denominaciones regionales (como “Noroeste del Pacífico”).

Cloud Talent Solution usa los datos del campo addresses[] para propagar el campo derivedInfo.locations[] (solo salida). Cuando no se proporciona una dirección completa, el servicio usa otras señales, como el nombre de la empresa, a fin de determinar si se puede deducir una dirección más completa para la publicación de trabajo.

Por ejemplo, si la ubicación de un trabajo de software se especifica como Mountain View y la empresa a la que está asociada es Google, el servicio busca el objeto de la empresa para ver si se proporciona una dirección en el campo headquartersAddress, y si esa dirección se encuentra en la misma ciudad que la publicación de trabajo. Si ambas condiciones se cumplen, el servicio entiende que es probable que el trabajo se encuentre en esa dirección y completa el campo derivedInfo.locations[] de forma adecuada.

Si los datos de la dirección de la empresa no están disponibles, el servicio usa una combinación de conocimientos propios e información sobre el trabajo o la empresa para completar el campo derivedInfo.locations[].

Debido a que el valor de derivedInfo.locations[] es una estimación, es posible que quieras usar los datos de derivedInfo.locations[] o el campo addresses cuando se muestre la dirección del trabajo.

Una publicación de trabajo puede tener un máximo de 50 ubicaciones asociadas. Si un trabajo tiene más ubicaciones, puedes dividirlo en varios trabajos, cada uno con un requisitionId único (p. ej., “ReqA”, “ReqA-1”, “ReqA-2”, etc.), ya que tiene varios trabajos con los mismos atributos requisitionId, companyName y languageCode. Si se debe conservar la requisitionId original, se debe usar un CustomAttribute para el almacenamiento. Se recomienda agrupar las ubicaciones cercanas en el mismo trabajo a fin de proporcionar una mejor experiencia de búsqueda.

Direcciones admitidas

Cloud Talent Solution acepta cualquier dirección que reconozca la API de Google Maps Geocoding (en el campo formattedAddress). El servicio muestra un error 400 si intentas crear un trabajo o ejecutar una búsqueda con una dirección no reconocida.

Si la dirección de una empresa aparece de manera incorrecta en la API de Google Maps Geocoding, informa un error para que la corrijan. Las correcciones pueden tardar hasta 5 días en aplicarse.

Autocompletado de direcciones

Cloud Talent Solution no proporciona sugerencias de autocompletado de ubicaciones. Usa la API de Google Maps Places o servicios de ubicación similares para propagar sugerencias de autocompletado.

Trabajos estatales, nacionales y desde casa

El campo postingRegion del recurso de trabajo permite especificar si el trabajo es estatal, nacional o desde casa.

  • Los trabajos de ADMINISTRATIVE_AREA y NATION se muestran en todas las búsquedas cuya ubicación exista en el estado o país de la publicación de trabajo. Por ejemplo, si la ubicación de un trabajo de ADMINISTRATIVE_AREA es “WA, EE.UU.”, se mostrará en las búsquedas cuyo LocationFilter especifique “Seattle”.

  • Los trabajos de TELECOMMUTE se muestran en todas las búsquedas relacionadas con la ubicación, pero su relevancia es menor. Se pueden establecer como objetivo en una búsqueda si configuras la marca telecommutePreference como TELECOMMUTE_ALLOWED en el LocationFilter de la búsqueda.