Noções básicas sobre a vaga (v3)

Um recurso de vaga representa uma postagem de vagas de trabalho (também conhecida como "anúncio de vaga" ou "requisição de trabalho"). Uma vaga pertence a uma empresa, que é a entidade contratante responsável por ela.

É possível manipular uma vaga com os métodos "create", "update" e "deletion" e acessá-la com os métodos "list" e "get". O índice da Cloud Talent Solution pode levar até cinco minutos para refletir as alterações.

As vagas estão contidas no escopo de uma conta de serviço. Somente as solicitações de pesquisa autenticadas por meio de credenciais de uma conta de serviço específica podem ser usadas para acessar o conteúdo dessas vagas.

Para facilitar a solução de problemas e a triagem, sincronize o índice de vagas do Cloud Talent Solution com seu próprio índice de vagas e mantenha uma relação entre o name gerado pelo Cloud Talent Solution e o identificador de vaga exclusivo do seu sistema. À medida que as vagas mudam ou são incluídas no sistema, a chamada CRUD apropriada precisa ser enviada à Cloud Talent Solution em tempo real para garantir que essas alterações sejam refletidas imediatamente. O índice da Cloud Talent Solution precisa ser adicionado ao canal de processamento de vagas existente.

Criar um job

Para criar uma vaga, consulte o Guia de início rápido: criar empresas e vagas para ver mais detalhes.

Java

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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

C#

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do Cloud Talent Solution.


public static Job CreateJob(Job jobToBeCreated)
{
    try
    {
        CreateJobRequest createJobRequest = new CreateJobRequest();
        createJobRequest.Job = jobToBeCreated;

        Job jobCreated = jobServiceClient.Projects.Jobs.Create(createJobRequest, parent).Execute();
        Console.WriteLine("Job created: " + jobCreated.Name);
        return jobCreated;
    }
    catch (Exception e)
    {
        Console.WriteLine("Got exception while creating job");
        throw e;
    }
}

Go

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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: %v", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %v", 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: %v", jobToCreate.RequisitionId, err)
	}
	return job, err
}

Node.js

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do Cloud Talent Solution.


/**
 * Create a job.
 */
const createJob = async (jobServiceClient, jobToBeCreated) => {
  try {
    const request = {
      parent: `projects/${PROJECT_ID}`,
      resource: {
        job: jobToBeCreated,
      },
    };

    const jobCreated = await jobServiceClient.projects.jobs.create(request);

    console.log(`Job created: ${JSON.stringify(jobCreated.data)}`);
    return jobCreated.data;
  } catch (e) {
    console.error(`Got exception while creating job!`);
    throw e;
  }
};

Ruby

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de clientes do Cloud Talent Solution.

# project_id         = "Id of the project"
# job_to_be_created  = "Job to be created"

require "google/apis/jobs_v3"

jobs = Google::Apis::JobsV3

talent_solution_client = jobs::CloudTalentSolutionService.new
talent_solution_client.authorization = Google::Auth.get_application_default(
  "https://www.googleapis.com/auth/jobs"
)

begin
  create_job_request = jobs::CreateJobRequest.new job: job_to_be_created
  job_created = talent_solution_client.create_job project_id, create_job_request
  puts "Job created: #{job_created.to_json}"
  return job_created
rescue StandardError => e
  puts "Exception occurred while creating job: #{e}"
end

Campos obrigatórios

Os seguintes campos são obrigatórios durante a criação e a atualização da vaga:

  • companyName: o nome do recurso da empresa que está listando a vaga, como projects/[PROJECT_ID]/companies/[COMPANY_ID].

  • requisitionId: o ID da requisição, também conhecido como ID de postagem, atribuído pelo cliente para identificar uma vaga. Esse campo é destinado à identificação do cliente e ao rastreamento de requisições pelos clientes. O número máximo de caracteres permitidos é 225.

    A exclusividade de uma postagem de vaga é determinada usando uma combinação de requisitionID, companyName e a localidade do trabalho. Caso uma vaga seja criada com uma chave específica desses atributos, essa chave será armazenada no índice da Cloud Talent Solution, e nenhuma outra vaga com esses mesmos campos poderá ser criada até a exclusão dessa vaga.

  • title: o título do cargo, como “Engenheiro de software”. O número máximo de caracteres permitidos é 500.

    Para corrigir o problema de resultados da pesquisa não encontrados por causa de títulos de vaga não padrão, a Cloud Talent Solution aproveita todos os campos fornecidos na vaga para entender o contexto dela e armazenar internamente um título "limpo" da vaga. Quando uma solicitação de pesquisa é enviada para o serviço, a consulta da pesquisa também é limpa, e as ontologias são usadas a fim de mapear a consulta limpa para vagas limpas relevantes.

  • description: a descrição da vaga, que normalmente inclui uma descrição de vários parágrafos sobre a empresa e informações relacionadas. Campos separados são fornecidos no objeto da vaga para responsabilidades, qualificações e outras características dela. É recomendado o uso desses campos separados.

    Esse campo aceita e limpa a entrada HTML, além de aceitar tags de marcação, como negrito, itálico, lista ordenada e lista não ordenada. O número máximo de caracteres permitidos é 100.000.

Opções:

  • applicationInfo.uris[]: o(s) URL(s) da(s) página(s) do aplicativo.

  • applicationInfo.emails[]: endereço(s) de email para que os currículos ou aplicativos devem ser enviados.

  • applicationInfo.instruction: instruções para se candidatar, como "Envie sua inscrição para...". Esse campo aceita e limpa a entrada HTML, além de aceitar tags de marcação, como negrito, itálico, lista ordenada e lista não ordenada. O número máximo de caracteres permitidos é 3.000.

Campos mais usados

  • postingExpireTime: a hora em que a postagem de vaga expira, com base no carimbo de data e hora. Após essa hora, a vaga será marcada como expirada e não aparecerá nos resultados da pesquisa. Essa data precisa ser anterior a 31/12/2100 no fuso horário UTC. As datas inválidas (como passadas) são ignoradas. A data padrão de expiração da vaga é 30 dias após a hora de criação da vaga no fuso horário UTC.

    O conteúdo das vagas expiradas ainda poderá ser recuperado 60 dias após a expiração da vaga usando o operador GET. Depois desse prazo de 60 dias, o trabalho não será retornado por meio de uma operação GET.

  • addresses[]: locais em que a vaga está sendo disponibilizada. É recomendável informar o endereço completo do local de contratação para permitir melhores resultados da API, inclusive pesquisas de vagas por tempo de deslocamento diário. O número máximo de caracteres permitidos é 500. Veja mais informações sobre addresses[] na seção Práticas recomendadas abaixo.

  • promotionValue: um valor maior que 0 define essa vaga como "vaga em destaque", que é retornada apenas nas pesquisas do tipo FEATURED_JOBS. Valores mais altos ficam em posições mais elevadas nos resultados da pesquisa em destaque. Consulte Vagas em destaque para mais informações.

Campos personalizados

  • customAttributes: esse campo armazena até 100 atributos personalizados usados para armazenar dados personalizados sobre a vaga. Esses campos podem ser filtrados usando um pedido de pesquisa especificando o campo jobQuery de uma solicitação de busca de vaga. Além disso, qualquer um desses campos pode ser definido no atributo keywordSearchableJobCustomAttributes da empresa. Portanto, um termo de pesquisa que tenha uma correspondência exata em qualquer um dos campos em keywordSearchableJobCustomAttributes retorna qualquer vaga que tenha essa correspondência.

Atualizar uma vaga

Atualizar vaga sem fieldMask

Java

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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

C#

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do Cloud Talent Solution.


public static Job UpdateJob(string jobName, Job toBeUpdated)
{
    try
    {
        UpdateJobRequest updateJobRequest = new UpdateJobRequest()
        {
            Job = toBeUpdated
        };
        Job jobUpdated = jobServiceClient.Projects.Jobs.Patch(updateJobRequest, jobName).Execute();
        Console.WriteLine("Job updated: " + ToJsonString(jobUpdated));
        return jobUpdated;
    }
    catch (Exception e)
    {
        Console.WriteLine("Got exception while updating job");
        throw e;
    }
}

Go

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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: %v", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %v", 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: %v", jobName, err)
	}

	return job, err
}

Node.js

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do Cloud Talent Solution.


/**
 * Update a job.
 */
const updateJob = async (jobServiceClient, jobName, jobToBeUpdated) => {
  try {
    const request = {
      name: jobName,
      resource: {
        job: jobToBeUpdated,
      },
    };

    const jobUpdated = await jobServiceClient.projects.jobs.patch(request);

    console.log(`Job updated: ${JSON.stringify(jobUpdated.data)}`);
    return jobUpdated.data;
  } catch (e) {
    console.error(`Got exception while updating job!`);
    throw e;
  }
};

Ruby

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de clientes do Cloud Talent Solution.

# job_name     = "The name of the job you want to update"
# job_to_be_updated  = "The new job object to be updated"
require "google/apis/jobs_v3"

jobs = Google::Apis::JobsV3

talent_solution_client = jobs::CloudTalentSolutionService.new
talent_solution_client.authorization = Google::Auth.get_application_default(
  "https://www.googleapis.com/auth/jobs"
)

begin
  update_job_request = jobs::UpdateJobRequest.new job: job_to_be_updated
  job_updated = talent_solution_client.patch_project_job job_name, update_job_request
  puts "Job updated: #{job_updated.to_json}"
  return job_updated
rescue StandardError => e
  puts "Exception occurred while updating job: #{e}"
end

Atualizar vaga com fieldMask

Java

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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

C#

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do Cloud Talent Solution.


public static Job UpdateJobWithFieldMask(string jobName, string fieldMask, Job jobToBeUpdated)
{
    try
    {
        UpdateJobRequest updateJobRequest = new UpdateJobRequest()
        {
            Job = jobToBeUpdated,
            UpdateMask = fieldMask
        };

        Job jobUpdated = jobServiceClient.Projects.Jobs.Patch(updateJobRequest, jobName).Execute();
        Console.WriteLine("Job updated with fieldMask: " + ToJsonString(jobUpdated));
        return jobUpdated;
    }
    catch (Exception e)
    {
        Console.WriteLine("Got exception while updating job with field mask");
        throw e;
    }
}

Go

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do 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: %v", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %v", 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
}

Node.js

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de cliente do Cloud Talent Solution.


/**
 * Update a job with field mask.
 */
const updateJobWithFieldMask = async (
  jobServiceClient,
  jobName,
  jobToBeUpdated,
  fieldMask
) => {
  try {
    const request = {
      name: jobName,
      resource: {
        job: jobToBeUpdated,
        updateMask: fieldMask,
      },
    };

    const jobUpdated = await jobServiceClient.projects.jobs.patch(request);

    console.log(`Job updated: ${JSON.stringify(jobUpdated.data)}`);
    return jobUpdated.data;
  } catch (e) {
    console.error(`Got exception while updating job with field mask!`);
    throw e;
  }
};

Ruby

Para mais informações sobre a instalação e criação de um cliente do Cloud Talent Solution, consulte Bibliotecas de clientes do Cloud Talent Solution.

# job_name     = "The name of the job you want to update"
# field_mask   = "The field mask you want to update"
# job_updated  = "The new job object to be updated"

require "google/apis/jobs_v3"

jobs = Google::Apis::JobsV3

talent_solution_client = jobs::CloudTalentSolutionService.new
talent_solution_client.authorization = Google::Auth.get_application_default(
  "https://www.googleapis.com/auth/jobs"
)

begin
  update_job_request = jobs::UpdateJobRequest.new job:         job_to_be_updated,
                                                  update_mask: field_mask
  job_updated = talent_solution_client.patch_project_job job_name, update_job_request
  puts "Job updated with filedMask #{update_job_request.update_mask}. "
  puts "Updated job: #{job_updated.to_json}"
  return job_updated
rescue StandardError => e
  puts "Exception occurred while updating job with field mask: #{e}"
end

Práticas recomendadas

Campos de local

Sempre que possível, recomendamos fornecer o endereço de uma vaga no campo addresses[]. Isso ajuda na detecção e na relevância do local. Quando um endereço no nível da rua não estiver disponível, especifique o máximo de informações possível. Os endereços são compatíveis até o nível do país. Designações de região (como "Noroeste do Pacífico") não são permitidas.

O Cloud Talent Solution usa os dados no campo addresses[] para preencher o campo derivedInfo.locations[] (somente saída). Quando um endereço completo não for fornecido, o serviço usará outros sinais, como o nome da empresa, para determinar se um endereço mais completo pode ser inferido para a postagem da vaga.

Por exemplo, se o local de uma vaga de software for especificado como Mountain View e a empresa associada à vaga for Google, o serviço procurará o objeto da empresa para ver se há um endereço melhor no campo headquartersAddress e se esse endereço está na mesma cidade que a postagem de vaga. Se estiver, o serviço entenderá que a vaga "provavelmente" fica nesse endereço e preencherá o campo derivedInfo.locations[] de maneira adequada.

Se os dados de endereço da empresa não estiverem disponíveis, o serviço utilizará uma combinação de conhecimento proprietário e informações da vaga/empresa para informar no campo derivedInfo.locations[].

Como o valor derivedInfo.locations[] é um esforço de melhor estimativa, use os dados derivedInfo.locations[] ou o campo addresses ao exibir o endereço da vaga.

Uma postagem de vaga pode ter, no máximo, 50 locais associados. Se a vagar tiver mais locais, é possível dividi-la em várias vagas, cada uma com um requisitionId exclusivo (por exemplo, "ReqA", "ReqA-1", "ReqA-2" etc.), porque não são permitidos trabalhos com o mesmo requisitionId, companyName e languageCode. Para preservar o requisitionId original, será necessário usar um CustomAttribute no armazenamento. É recomendável agrupar os locais mais próximos entre si na mesma vaga para uma melhor experiência de pesquisa.

Endereços compatíveis

Qualquer endereço reconhecido pela API Geocoding do Google Maps (no campo formattedAddress) é aceito pelo Cloud Talent Solution. O serviço retornará um erro 400 se você tentar criar uma vaga ou executar uma pesquisa usando um endereço não reconhecido.

Se um endereço comercial estiver listado incorretamente na API Geocoding Google Maps, registre um bug para corrigi-lo. As correções podem levar até cinco dias para entrar em vigor.

Preenchimento automático de endereços

A Cloud Talent Solution não fornece sugestões de preenchimento automático para locais. Use a API Google Maps Places, ou outros serviços de localização semelhantes, para inserir sugestões de preenchimento automático.

Vagas estaduais, nacionais e remotas

As vagas podem ser especificadas para todo o estado, para todo o país ou como trabalho remoto com o uso do campo postingRegion do recurso da vaga.

  • As vagas ADMINISTRATIVE_AREA e NATION são retornadas para qualquer pesquisa com local existente dentro do estado/país da postagem da vaga. Por exemplo, se uma vaga ADMINISTRATIVE_AREA tiver um local "WA, EUA", ela será retornada para pesquisas em que LocationFilter especifica "Seattle".

  • As vagas TELECOMMUTE são retornadas em qualquer pesquisa relacionada ao local, mas são tratadas como menos relevantes. Elas podem ser direcionadas em uma pesquisa definindo a sinalização telecommutePreference para TELECOMMUTE_ALLOWED no LocationFilter da pesquisa.