Noções básicas de tarefas (v3)

Um recurso Job representa uma publicação de emprego (também denominada "oferta de trabalho" ou "requisição de emprego"). Uma vaga pertence a uma empresa que é a entidade de contratação responsável pela vaga.

É possível manipular uma tarefa através dos métodos de criação, atualização e eliminação, e aceder à mesma através dos métodos de listagem e obtenção. O índice do Cloud Talent Solution pode demorar até 5 minutos a refletir as alterações.

Os trabalhos estão contidos no âmbito de uma conta de serviço. Apenas os pedidos de pesquisa autenticados através das credenciais de uma determinada conta de serviço podem ser usados para aceder ao conteúdo destas tarefas.

Para uma resolução de problemas e uma triagem fáceis, sincronize o índice de tarefas da Cloud Talent Solution com o seu próprio índice de tarefas e mantenha uma relação entre o name gerado pela Cloud Talent Solution, bem como o identificador de tarefas exclusivo no seu sistema. À medida que os trabalhos mudam ou são introduzidos no seu sistema, a chamada CRUD adequada deve ser enviada para o Cloud Talent Solution em tempo real para garantir que estas alterações são refletidas imediatamente. O índice da Cloud Talent Solution tem de ser adicionado ao pipeline de carregamento de tarefas existente.

Crie um trabalho

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

Java

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

Para mais informações sobre a instalação e a criação de um cliente da Cloud Talent Solution, consulte as bibliotecas de cliente da 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 obrigatórios

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

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

  • requisitionId: o ID de requisição, também denominado ID de publicação, atribuído pelo cliente para identificar um emprego. Este campo destina-se a ser usado pelos clientes para identificação do cliente e acompanhamento de requisições. O número máximo de carateres permitidos é 225.

    A unicidade de uma oferta de emprego é determinada através de uma combinação do requisitionID, do companyName e da localização do emprego. Se uma tarefa for criada com uma chave específica destes atributos, esta chave é armazenada no índice da Cloud Talent Solution e não é possível criar outras tarefas com estes mesmos campos até que a tarefa seja eliminada.

  • title: o título da profissão, como "Engenheiro de software". O número máximo de carateres permitidos é 500.

    Para corrigir o problema de resultados de pesquisa perdidos devido a cargos não padrão, a Cloud Talent Solution tira partido de todos os campos fornecidos no Job para compreender o contexto do trabalho e armazenar internamente um título "limpo" do trabalho. Quando um pedido de pesquisa é enviado para o serviço, a consulta de pesquisa também é limpa, e as ontologias são usadas para mapear a consulta limpa para tarefas limpas relevantes.

  • description: a descrição do trabalho, que normalmente inclui uma descrição de vários parágrafos da empresa e informações relacionadas. São fornecidos campos separados no objeto de trabalho para responsabilidades, qualificações e outras caraterísticas do trabalho. Recomendamos a utilização destes campos de tarefas separados.

    Este campo aceita e limpa a entrada HTML, e aceita etiquetas de marcação em negrito, itálico, lista ordenada e lista não ordenada. O número máximo de carateres permitidos é 100 000.

Uma das seguintes opções:

  • applicationInfo.uris[]: os URLs das páginas da aplicação.

  • applicationInfo.emails[]: endereços de email para os quais devem ser enviados currículos ou candidaturas.

  • applicationInfo.instruction: instruções de candidatura, como "Envie a sua candidatura por correio para …". Este campo aceita e limpa a entrada de HTML, e aceita etiquetas de marcação em negrito, itálico, lista ordenada e lista não ordenada. O número máximo de carateres permitidos é 3000.

Campos usados frequentemente

  • postingExpireTime: a hora, com base na data/hora, em que a oferta de emprego expira. Após a ocorrência da hora, a tarefa é marcada como expirada e não aparece nos resultados da pesquisa. Esta data deve ser anterior a 31/12/2100 no fuso horário UTC. As datas inválidas (como datas no passado) são ignoradas. A data predefinida em que a tarefa expira é 30 dias após a hora de criação da tarefa no fuso horário UTC.

    O conteúdo de trabalhos expirados ainda pode ser obtido até 60 dias após a expiração do trabalho através do operador GET. Após este prazo de 60 dias, a tarefa não é devolvida através de uma operação GET.

  • addresses[]: localizações onde o emprego está a contratar. Recomendamos que indique as moradas completas do local de contratação para permitir melhores resultados da API, incluindo pesquisas de emprego por tempo de trajeto. O número máximo de carateres permitido é 500. Estão disponíveis mais informações sobre addresses[] na secção Práticas recomendadas abaixo.

  • promotionValue: um valor superior a 0 define este emprego como um "emprego em destaque", que só é devolvido em pesquisas de emprego do tipo FEATURED_JOBS. Os valores mais elevados são devolvidos em posições mais altas nos resultados da pesquisa em destaque. Consulte o artigo Anúncios de emprego em destaque para mais informações.

Campos personalizados

  • customAttributes: este campo armazena até 100 atributos personalizados usados para armazenar dados personalizados sobre a tarefa. Estes campos podem ser filtrados através de um pedido de pesquisa que especifique o campo jobQuery de um pedido de pesquisa de emprego. Além disso, qualquer um destes campos pode ser definido no atributo keywordSearchableJobCustomAttributes da empresa, pelo que um termo de pesquisa que tenha uma correspondência exata em qualquer um dos campos em keywordSearchableJobCustomAttributes devolve qualquer emprego que inclua a correspondência.

Atualize uma tarefa

Atualize a oferta de emprego sem fieldMask

Java

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

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

Atualize a tarefa com fieldMask

Java

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

Para mais informações sobre a instalação e a criação de um cliente da Cloud Talent Solution, consulte as bibliotecas de cliente da 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áticas recomendadas

Campos de localização

Sempre que possível, recomendamos que indique a morada da rua de um emprego no campo addresses[]. Isto ajuda na deteção de localização e na relevância. Quando não estiver disponível uma morada ao nível da rua, introduza o máximo de informações possível. Os endereços são suportados até ao nível do país. As designações de regiões (como "Noroeste Pacífico") não são suportadas.

A Cloud Talent Solution usa os dados no campo addresses[] para preencher o campo (apenas saída) derivedInfo.locations[]. Quando não é fornecida uma morada completa, o serviço usa outros sinais, como o nome da empresa, para determinar se é possível inferir uma morada mais completa para a publicação de emprego.

Por exemplo, se a localização de um trabalho de software for especificada como Mountain View e a empresa à qual o trabalho está associado for Google, o serviço procura o objeto da empresa para ver se é fornecida uma morada mais precisa no campo headquartersAddress e se essa morada está na mesma cidade que a publicação de emprego. Se for o caso, o serviço compreende que o trabalho é "provavelmente" nesse endereço e preenche o campo derivedInfo.locations[] adequadamente.

Se os dados da morada da empresa não estiverem disponíveis, o serviço usa uma combinação de conhecimentos proprietários e informações de emprego/empresa para preencher o campo derivedInfo.locations[].

Uma vez que o valor derivedInfo.locations[] é uma estimativa, recomendamos que use os dados derivedInfo.locations[] ou o campo addresses quando apresentar a morada do trabalho.

Uma publicação de emprego não pode ter mais de 50 localizações associadas. Se uma tarefa tiver mais localizações, pode dividi-la em várias tarefas, cada uma com um requisitionId exclusivo (por exemplo, "ReqA", "ReqA-1", "ReqA-2", etc.), uma vez que não é permitido ter várias tarefas com o mesmo requisitionId, companyName e languageCode. Se o requisitionId original tiver de ser preservado, deve usar um CustomAttribute para armazenamento. Recomendamos que agrupe as localizações mais próximas entre si no mesmo trabalho para uma melhor experiência de pesquisa.

Moradas suportadas

Qualquer morada reconhecida pela API Google Maps Geocoding (no campo formattedAddress) é aceite pela Cloud Talent Solution. O serviço devolve um erro 400 se tentar criar uma tarefa ou executar uma pesquisa com um endereço não reconhecido.

Se a morada de uma empresa estiver incorretamente indicada na API Google Maps Geocoding, apresente um erro para que seja corrigido. As correções podem demorar até 5 dias a entrar em vigor.

Conclusão automática de moradas

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

Empregos em todo o estado, em todo o país e de teletrabalho

Os trabalhos podem ser especificados como estaduais, nacionais ou de teletrabalho, através do campo postingRegion do recurso Job.

  • Os trabalhos ADMINISTRATIVE_AREA e NATION são devolvidos para qualquer pesquisa cuja localização exista no estado/país da publicação de emprego. Por exemplo, se um ADMINISTRATIVE_AREA trabalho tiver a localização "WA, EUA", é devolvido para pesquisas cujo LocationFilter especifica "Seattle".

  • TELECOMMUTE são devolvidos em qualquer pesquisa relacionada com a localização, mas são tratados como menos relevantes. Podem ser segmentados numa pesquisa definindo o flag telecommutePreference como TELECOMMUTE_ALLOWED no LocationFilter da pesquisa.