Informations de base sur le job

Une ressource Job (offre d'emploi) représente une offre d'emploi ou une liste d'offres d'emploi (ou encore une "mission" ou une "demande d'ouverture de poste" selon le contexte). Une offre d'emploi appartient à une ressource Company (entreprise) qui est l'entité responsable du recrutement pour ce poste.

Vous pouvez accéder à une offre d'emploi à l'aide des méthodes LIST et GET, et la manipuler au moyen des méthodes CREATE, UPDATE et DELETE. La prise en compte des modifications dans l'index de Cloud Talent Solutions peut prendre plusieurs minutes.

Les offres d'emploi sont délimitées par le champ d'application d'un compte de service. Les données des offres d'emploi ne sont accessibles qu'aux requêtes de recherche authentifiées à l'aide des identifiants du compte de service correspondant.

Pour faciliter la résolution des problèmes et la catégorisation, synchronisez l'index des offres d'emploi de Cloud Talent Solution avec votre propre index, et maintenez une relation entre le nom (name) généré par Cloud Talent Solution et l'identifiant unique de l'offre dans votre système. La modification et la création d'emplois dans votre système nécessite d'envoyer à Cloud Talent Solution un appel CRUD adéquat en temps réel pour que ces modifications soient immédiatement prises en compte. L'index Cloud Talent Solution doit être ajouté au pipeline existant d'ingestion des emplois.

Créer une tâche

Vous pouvez créer une offre d'emploi à l'aide de l'exemple de code ci-dessous. Consultez la page Démarrage rapide : créer des entreprises et des offres d'emploi pour en savoir plus. Des tutoriels vidéo et des ateliers de programmation interactifs sont également disponibles.

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez la page Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Go documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

import (
	"context"
	"fmt"
	"io"

	talent "cloud.google.com/go/talent/apiv4beta1"
	talentpb "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
)

// createJob create a job as given.
func createJob(w io.Writer, projectID, companyID, requisitionID, title, URI, description, address1, address2, languageCode string) (*talentpb.Job, error) {
	ctx := context.Background()

	// Initialize a jobService client.
	c, err := talent.NewJobClient(ctx)
	if err != nil {
		fmt.Printf("talent.NewJobClient: %v\n", err)
		return nil, err
	}

	jobToCreate := &talentpb.Job{
		CompanyName:   fmt.Sprintf("projects/%s/companies/%s", projectID, companyID),
		RequisitionId: requisitionID,
		Title:         title,
		ApplicationInfo: &talentpb.Job_ApplicationInfo{
			Uris: []string{URI},
		},
		Description:  description,
		Addresses:    []string{address1, address2},
		LanguageCode: languageCode,
	}

	// Construct a createJob request.
	req := &talentpb.CreateJobRequest{
		Parent: fmt.Sprintf("projects/%s", projectID),
		Job:    jobToCreate,
	}

	resp, err := c.CreateJob(ctx, req)
	if err != nil {
		fmt.Printf("Failed to create job: %v\n", err)
		return nil, err
	}

	fmt.Printf("Created job: %q\n", resp.GetName())

	return resp, nil
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Java documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.cloud.talent.v4.CreateJobRequest;
import com.google.cloud.talent.v4.Job;
import com.google.cloud.talent.v4.JobServiceClient;
import com.google.cloud.talent.v4.TenantName;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class JobSearchCreateJob {

  public static void createJob() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String tenantId = "your-tenant-id";
    String companyId = "your-company-id";
    String requisitionId = "your-unique-req-id";
    String jobApplicationUrl = "your-job-url";
    // String projectId = "me-qa-1";
    // String tenantId = "8ed97629-27ee-4215-909b-18cfe3b7e8e3";
    // String companyId = "05317758-b30e-4b26-a57d-d9e54e4cccd8";
    // String requisitionId = "test-requisitionid-1";
    // String jobApplicationUrl = "http://job.url";
    createJob(projectId, tenantId, companyId, requisitionId, jobApplicationUrl);
  }

  // Create a job.
  public static void createJob(
      String projectId,
      String tenantId,
      String companyId,
      String requisitionId,
      String jobApplicationUrl)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
      TenantName parent = TenantName.of(projectId, tenantId);
      Job.ApplicationInfo applicationInfo =
          Job.ApplicationInfo.newBuilder().addUris(jobApplicationUrl).build();

      List<String> addresses =
          Arrays.asList(
              "1600 Amphitheatre Parkway, Mountain View, CA 94043",
              "111 8th Avenue, New York, NY 10011");

      // By default, job will expire in 30 days.
      // https://cloud.google.com/talent-solution/job-search/docs/jobs
      Job job =
          Job.newBuilder()
              .setCompany(companyId)
              .setRequisitionId(requisitionId)
              .setTitle("Software Developer")
              .setDescription("Develop, maintain the software solutions.")
              .setApplicationInfo(applicationInfo)
              .addAllAddresses(addresses)
              .setLanguageCode("en-US")
              .build();

      CreateJobRequest request =
          CreateJobRequest.newBuilder().setParent(parent.toString()).setJob(job).build();

      Job response = jobServiceClient.createJob(request);
      System.out.format("Created job: %s%n", response.getName());
    }
  }
}

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Node.js documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


const talent = require('@google-cloud/talent').v4;

/**
 * Create Job
 *
 * @param projectId {string} Your Google Cloud Project ID
 * @param tenantId {string} Identifier of the Tenant
 */
function sampleCreateJob(
  projectId,
  tenantId,
  companyName,
  requisitionId,
  title,
  description,
  jobApplicationUrl,
  addressOne,
  addressTwo,
  languageCode
) {
  const client = new talent.JobServiceClient();
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  // const companyName = 'Company name, e.g. projects/your-project/companies/company-id';
  // const requisitionId = 'Job requisition ID, aka Posting ID. Unique per job.';
  // const title = 'Software Engineer';
  // const description = 'This is a description of this <i>wonderful</i> job!';
  // const jobApplicationUrl = 'https://www.example.org/job-posting/123';
  // const addressOne = '1600 Amphitheatre Parkway, Mountain View, CA 94043';
  // const addressTwo = '111 8th Avenue, New York, NY 10011';
  // const languageCode = 'en-US';
  const formattedParent = client.tenantPath(projectId, tenantId);
  const uris = [jobApplicationUrl];
  const applicationInfo = {
    uris: uris,
  };
  const addresses = [addressOne, addressTwo];
  const job = {
    company: companyName,
    requisitionId: requisitionId,
    title: title,
    description: description,
    applicationInfo: applicationInfo,
    addresses: addresses,
    languageCode: languageCode,
  };
  const request = {
    parent: formattedParent,
    job: job,
  };
  client
    .createJob(request)
    .then(responses => {
      const response = responses[0];
      console.log(`Created job: ${response.name}`);
    })
    .catch(err => {
      console.error(err);
    });
}

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez la page Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Python documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


from google.cloud import talent


def create_job(
    project_id,
    tenant_id,
    company_id,
    requisition_id,
    job_application_url,
):
    """Create Job"""

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # company_id = 'Company name, e.g. projects/your-project/companies/company-id'
    # requisition_id = 'Job requisition ID, aka Posting ID. Unique per job.'
    # title = 'Software Engineer'
    # description = 'This is a description of this <i>wonderful</i> job!'
    # job_application_url = 'https://www.example.org/job-posting/123'
    # address_one = '1600 Amphitheatre Parkway, Mountain View, CA 94043'
    # address_two = '111 8th Avenue, New York, NY 10011'
    # language_code = 'en-US'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    if isinstance(company_id, bytes):
        company_id = company_id.decode("utf-8")
    if isinstance(requisition_id, bytes):
        requisition_id = requisition_id.decode("utf-8")
    if isinstance(job_application_url, bytes):
        job_application_url = job_application_url.decode("utf-8")
    parent = f"projects/{project_id}/tenants/{tenant_id}"
    uris = [job_application_url]
    application_info = {"uris": uris}
    addresses = [
        "1600 Amphitheatre Parkway, Mountain View, CA 94043",
        "111 8th Avenue, New York, NY 10011",
    ]
    job = {
        "company": company_id,
        "requisition_id": requisition_id,
        "title": "Software Developer",
        "description": "Develop, maintain the software solutions.",
        "application_info": application_info,
        "addresses": addresses,
        "language_code": "en-US",
    }

    response = client.create_job(parent=parent, job=job)
    print(f"Created job: {response.name}")
    return response.name

Champs obligatoires

Les champs suivants doivent être renseignés lors de la création et de la mise à jour d'un objet emploi (Job) :

  • companyName : nom de la ressource de l'entreprise proposant l'offre d'emploi. Par exemple, companyName=\"projects/{ProjectId}/companies/{CompanyId}\".

  • requisitionId : ID de l'ouverture de poste, également appelé ID de publication, que vous attribuez pour identifier une offre d'emploi. Vous pouvez utiliser ce champ pour l'identification des clients et le suivi des offres d'emploi. Nombre maximum de caractères autorisés : 225.

    L'unicité d'une offre d'emploi est déterminée à l'aide d'une combinaison des attributs requisitionID, companyName et de la localisation. Si un poste est créé avec une clé spécifique composée de ces attributs, cette clé est stockée dans l'index de Cloud Talent Solution. Tant que le poste n'est pas supprimé, aucun autre poste comportant ces mêmes champs ne peut être créé.

  • title : intitulé du poste, par exemple "Ingénieur logiciel". Le nombre maximal de caractères autorisés est de 500

    Pour résoudre le problème des résultats de recherche manqués du fait d'intitulés de poste non standards, Cloud Talent Solution exploite tous les champs de l'offre d'emploi pour comprendre le contexte et stocker en interne un intitulé "nettoyé". Lorsqu'une requête de recherche est envoyée au service, la requête est également nettoyée puis mappée par les ontologies avec les emplois correspondants.

  • description : description de l'offre d'emploi, qui comprend généralement une description de l'entreprise et des informations connexes structurées en plusieurs paragraphes. Des champs distincts sont fournis dans l'objet de l'offre d'emploi pour décrire les responsabilités, les qualifications requises et autres caractéristiques. Il est recommandé de les utiliser.

    Ce champ accepte et nettoie les saisies au format HTML et autorise l'utilisation de balises de mise en forme (gras, italique, listes numérotées ou listes à puces). Le nombre maximal de caractères autorisés est de 100 000.

Choisissez l'une des options suivantes :

  • applicationInfo.uris : URL des pages de candidature.

  • applicationInfo.emails : adresses e-mail pour l'envoi des CV ou candidatures.

  • applicationInfo.instruction : instructions pour soumettre une candidature, telles que "Envoyez votre candidature à ...". Ce champ accepte et nettoie les saisies au format HTML et autorise l'utilisation de balises de mise en forme (gras, italique, listes numérotées et listes à puces). Nombre maximum de caractères autorisés : 3 000.

Champs couramment utilisés

  • postingExpireTime : heure à laquelle l'offre d'emploi expire, basée sur l'horodatage. Une fois le délai écoulé, l'offre d'emploi est marquée comme expirée et n'apparaît plus dans les résultats de recherche. Cette date doit être antérieure au 31/12/2100 dans le fuseau horaire UTC. Les dates non valides (telles que les dates passées) sont ignorées. La date d'expiration par défaut d'une offre d'emploi est fixée à 30 jours après son heure de création dans le fuseau horaire UTC.

    Le contenu des offres d'emploi expirées peut toujours être récupéré jusqu'à 90 jours après l'expiration à l'aide de l'opérateur GET. Passé ce délai de 90 jours, l'offre d'emploi n'est plus renvoyée par l'opérateur GET.

  • addresses : bureau(x). Il est recommandé de fournir les adresses complètes des lieux de recrutement afin d'améliorer les résultats de Job Search, y compris les recherches d'emploi effectuées en fonction du temps de trajet. Le nombre maximum de caractères autorisés est de 500. De plus amples informations sur addresses sont disponibles dans la section Bonnes pratiques ci-dessous.

  • promotionValue : une valeur supérieure à 0 définit l'offre comme une "sélection d'emploi", qui n'est renvoyée qu'à l'occasion de recherches d'emploi de type FEATURED_JOBS. Plus la valeur est élevée, plus l'offre apparaît haut dans les résultats de recherche. Pour en savoir plus, consultez la section Offres d'emploi à la une.

Utiliser des champs d'offre d'emploi personnalisés

Cloud Talent Solution comporte plusieurs champs d'offre d'emploi intégrés aux schémas de l'API. Cependant, il se peut que certains champs ne fassent pas partie des champs prédéfinis. Bien que nous vous recommandions d'utiliser les champs prêts à l'emploi dans la mesure du possible, Cloud Talent Solution fournit également des champs customAttributes pour les offres d'emploi. Ces attributs peuvent être filtrables ou non filtrables. Pour en savoir plus, consultez la documentation sur customAttributes.

  • customAttributes : ce champ stocke jusqu'à 100 attributs personnalisés permettant de stocker les données personnalisées de l'offre d'emploi. Ces champs peuvent être utilisés comme critères de filtrage en spécifiant le champ jobQuery dans la recherche d'emploi. De plus, n'importe lequel de ces champs peut être défini dans l'attribut keywordSearchableJobCustomAttributes de company, donc un terme de recherche ayant une correspondance exacte avec l'un des champs de keywordSearchableJobCustomAttributes renvoie les offres d'emploi qui incluent la correspondance.

L'exemple de code suivant montre comment créer une offre d'emploi à l'aide d'un customAttribute :

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Go documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

import (
	"context"
	"fmt"
	"io"

	talent "cloud.google.com/go/talent/apiv4beta1"
	"cloud.google.com/go/talent/apiv4beta1/talentpb"
	"github.com/gofrs/uuid"
	money "google.golang.org/genproto/googleapis/type/money"
)

// createJobWithCustomAttributes creates a job with custom attributes.
func createJobWithCustomAttributes(w io.Writer, projectID, companyID, jobTitle string) (*talentpb.Job, error) {
	ctx := context.Background()

	// Initialize a job service client.
	c, err := talent.NewJobClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("talent.NewJobClient: %w", err)
	}
	defer c.Close()

	// requisitionID shoud be the unique ID in your system
	requisitionID := fmt.Sprintf("job-with-custom-attribute-%s", uuid.Must(uuid.NewV4()).String())
	jobToCreate := &talentpb.Job{
		Company:       fmt.Sprintf("projects/%s/companies/%s", projectID, companyID),
		RequisitionId: requisitionID,
		Title:         jobTitle,
		ApplicationInfo: &talentpb.Job_ApplicationInfo{
			Uris: []string{"https://googlesample.com/career"},
		},
		Description:     "Design, devolop, test, deploy, maintain and improve software.",
		LanguageCode:    "en-US",
		PromotionValue:  2,
		EmploymentTypes: []talentpb.EmploymentType{talentpb.EmploymentType_FULL_TIME},
		Addresses:       []string{"Mountain View, CA"},
		CustomAttributes: map[string]*talentpb.CustomAttribute{
			"someFieldString": {
				Filterable:   true,
				StringValues: []string{"someStrVal"},
			},
			"someFieldLong": {
				Filterable: true,
				LongValues: []int64{900},
			},
		},
		CompensationInfo: &talentpb.CompensationInfo{
			Entries: []*talentpb.CompensationInfo_CompensationEntry{
				{
					Type: talentpb.CompensationInfo_BASE,
					Unit: talentpb.CompensationInfo_HOURLY,
					CompensationAmount: &talentpb.CompensationInfo_CompensationEntry_Amount{
						Amount: &money.Money{
							CurrencyCode: "USD",
							Units:        1,
						},
					},
				},
			},
		},
	}

	// Construct a createJob request.
	req := &talentpb.CreateJobRequest{
		Parent: fmt.Sprintf("projects/%s", projectID),
		Job:    jobToCreate,
	}

	resp, err := c.CreateJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("CreateJob: %w", err)
	}

	fmt.Fprintf(w, "Created job with custom attributres: %q\n", resp.GetName())
	fmt.Fprintf(w, "Custom long field has value: %v\n", resp.GetCustomAttributes()["someFieldLong"].GetLongValues())

	return resp, nil
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Java documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.cloud.talent.v4.CreateJobRequest;
import com.google.cloud.talent.v4.CustomAttribute;
import com.google.cloud.talent.v4.Job;
import com.google.cloud.talent.v4.JobServiceClient;
import com.google.cloud.talent.v4.TenantName;
import java.io.IOException;

public class JobSearchCreateJobCustomAttributes {

  public static void createJob() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String tenantId = "your-tenant-id";
    String companyId = "your-company-id";
    String requisitionId = "your-unique-req-id";
    createJob(projectId, tenantId, companyId, requisitionId);
  }

  // Create Job with Custom Attributes.
  public static void createJob(
      String projectId, String tenantId, String companyId, String requisitionId)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
      TenantName parent = TenantName.of(projectId, tenantId);

      // Custom attribute can be string or numeric value, and can be filtered in search queries.
      // https://cloud.google.com/talent-solution/job-search/docs/custom-attributes
      CustomAttribute customAttribute =
          CustomAttribute.newBuilder()
              .addStringValues("Internship")
              .addStringValues("Apprenticeship")
              .setFilterable(true)
              .build();

      Job job =
          Job.newBuilder()
              .setCompany(companyId)
              .setTitle("Software Developer I")
              .setDescription("This is a description of this <i>wonderful</i> job!")
              .putCustomAttributes("FOR_STUDENTS", customAttribute)
              .setRequisitionId(requisitionId)
              .setLanguageCode("en-US")
              .build();

      CreateJobRequest request =
          CreateJobRequest.newBuilder().setParent(parent.toString()).setJob(job).build();
      Job response = jobServiceClient.createJob(request);
      System.out.printf("Created job: %s\n", response.getName());
    }
  }
}

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez la page Bibliothèques clientes CTS. Pour en savoir plus, consultez la documentation de référence de l'API CTS Node.js.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


const talent = require('@google-cloud/talent').v4;

/**
 * Create Job with Custom Attributes
 *
 * @param projectId {string} Your Google Cloud Project ID
 * @param tenantId {string} Identifier of the Tenantd
 */
function sampleCreateJob(
  projectId,
  tenantId,
  companyName,
  requisitionId,
  languageCode
) {
  const client = new talent.JobServiceClient();
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  // const companyName = 'Company name, e.g. projects/your-project/companies/company-id';
  // const requisitionId = 'Job requisition ID, aka Posting ID. Unique per job.';
  // const languageCode = 'en-US';
  const formattedParent = client.tenantPath(projectId, tenantId);
  const job = {
    company: companyName,
    requisitionId: requisitionId,
    languageCode: languageCode,
  };
  const request = {
    parent: formattedParent,
    job: job,
  };
  client
    .createJob(request)
    .then(responses => {
      const response = responses[0];
      console.log(`Created job: ${response.name}`);
    })
    .catch(err => {
      console.error(err);
    });
}

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Python documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


from google.cloud import talent


def create_job(project_id, tenant_id, company_id, requisition_id):
    """Create Job with Custom Attributes"""

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # company_id = 'Company name, e.g. projects/your-project/companies/company-id'
    # requisition_id = 'Job requisition ID, aka Posting ID. Unique per job.'
    # language_code = 'en-US'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    if isinstance(company_id, bytes):
        company_id = company_id.decode("utf-8")

    # Custom attribute can be string or numeric value,
    # and can be filtered in search queries.
    # https://cloud.google.com/talent-solution/job-search/docs/custom-attributes
    custom_attribute = talent.CustomAttribute()
    custom_attribute.filterable = True
    custom_attribute.string_values.append("Intern")
    custom_attribute.string_values.append("Apprenticeship")

    parent = f"projects/{project_id}/tenants/{tenant_id}"

    job = talent.Job(
        company=company_id,
        title="Software Engineer",
        requisition_id=requisition_id,
        description="This is a description of this job",
        language_code="en-us",
        custom_attributes={"FOR_STUDENTS": custom_attribute},
    )

    response = client.create_job(parent=parent, job=job)
    print(f"Created job: {response.name}")
    return response.name

Récupérer une offre d'emploi

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Go documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

import (
	"context"
	"fmt"
	"io"

	talent "cloud.google.com/go/talent/apiv4beta1"
	talentpb "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
)

// getJob gets an existing job by its resource name.
func getJob(w io.Writer, projectID, jobID string) (*talentpb.Job, error) {
	ctx := context.Background()

	// Initialize a jobService client.
	c, err := talent.NewJobClient(ctx)
	if err != nil {
		fmt.Printf("talent.NewJobClient: %v\n", err)
		return nil, err
	}

	// Construct a getJob request.
	jobName := fmt.Sprintf("projects/%s/jobs/%s", projectID, jobID)
	req := &talentpb.GetJobRequest{
		// The resource name of the job to retrieve.
		// The format is "projects/{project_id}/jobs/{job_id}".
		Name: jobName,
	}

	resp, err := c.GetJob(ctx, req)
	if err != nil {
		fmt.Printf("Failed to get job %s: %v\n", jobName, err)
		return nil, err
	}

	fmt.Fprintf(w, "Job: %q\n", resp.GetName())
	fmt.Fprintf(w, "Job title: %v\n", resp.GetTitle())

	return resp, err
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez la documentation de référence de l'API CTS Java.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.cloud.talent.v4.GetJobRequest;
import com.google.cloud.talent.v4.Job;
import com.google.cloud.talent.v4.JobName;
import com.google.cloud.talent.v4.JobServiceClient;
import java.io.IOException;

public class JobSearchGetJob {

  public static void getJob() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String tenantId = "your-tenant-id";
    String jobId = "your-job-id";
    getJob(projectId, tenantId, jobId);
  }

  // Get Job.
  public static void getJob(String projectId, String tenantId, String jobId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
      JobName name = JobName.of(projectId, tenantId, jobId);

      GetJobRequest request = GetJobRequest.newBuilder().setName(name.toString()).build();

      Job response = jobServiceClient.getJob(request);
      System.out.format("Job name: %s%n", response.getName());
      System.out.format("Requisition ID: %s%n", response.getRequisitionId());
      System.out.format("Title: %s%n", response.getTitle());
      System.out.format("Description: %s%n", response.getDescription());
      System.out.format("Posting language: %s%n", response.getLanguageCode());
      for (String address : response.getAddressesList()) {
        System.out.format("Address: %s%n", address);
      }
      for (String email : response.getApplicationInfo().getEmailsList()) {
        System.out.format("Email: %s%n", email);
      }
      for (String websiteUri : response.getApplicationInfo().getUrisList()) {
        System.out.format("Website: %s%n", websiteUri);
      }
    }
  }
}

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez la documentation de référence de l'API CTS Node.js.

Pour vous authentifier auprès de CTS, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


const talent = require('@google-cloud/talent').v4;

/** Get Job */
function sampleGetJob(projectId, tenantId, jobId) {
  const client = new talent.JobServiceClient();
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  // const jobId = 'Job ID';
  const formattedName = client.jobPath(projectId, tenantId, jobId);
  client
    .getJob({name: formattedName})
    .then(responses => {
      const response = responses[0];
      console.log(`Job name: ${response.name}`);
      console.log(`Requisition ID: ${response.requisitionId}`);
      console.log(`Title: ${response.title}`);
      console.log(`Description: ${response.description}`);
      console.log(`Posting language: ${response.languageCode}`);
      for (const address of response.addresses) {
        console.log(`Address: ${address}`);
      }
      for (const email of response.applicationInfo.emails) {
        console.log(`Email: ${email}`);
      }
      for (const websiteUri of response.applicationInfo.uris) {
        console.log(`Website: ${websiteUri}`);
      }
    })
    .catch(err => {
      console.error(err);
    });
}

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Python documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


from google.cloud import talent


def get_job(project_id, tenant_id, job_id):
    """Get Job"""

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # job_id = 'Job ID'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    if isinstance(job_id, bytes):
        job_id = job_id.decode("utf-8")
    name = client.job_path(project_id, tenant_id, job_id)

    response = client.get_job(name=name)
    print(f"Job name: {response.name}")
    print(f"Requisition ID: {response.requisition_id}")
    print(f"Title: {response.title}")
    print(f"Description: {response.description}")
    print(f"Posting language: {response.language_code}")
    for address in response.addresses:
        print(f"Address: {address}")
    for email in response.application_info.emails:
        print(f"Email: {email}")
    for website_uri in response.application_info.uris:
        print(f"Website: {website_uri}")

Répertorier des tâches

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez la documentation de référence de l'API CTS Go.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

import (
	"context"
	"fmt"
	"io"

	talent "cloud.google.com/go/talent/apiv4beta1"
	"google.golang.org/api/iterator"
	talentpb "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
)

// listJobs lists jobs with a filter, for example
// `companyName="projects/my-project/companies/123"`.
func listJobs(w io.Writer, projectID, companyID string) error {
	ctx := context.Background()

	// Initialize a jobService client.
	c, err := talent.NewJobClient(ctx)
	if err != nil {
		fmt.Printf("talent.NewJobClient: %v\n", err)
		return err
	}

	// Construct a listJobs request.
	companyName := fmt.Sprintf("projects/%s/companies/%s", projectID, companyID)
	req := &talentpb.ListJobsRequest{
		Parent: "projects/" + projectID,
		Filter: fmt.Sprintf("companyName=%q", companyName),
	}

	it := c.ListJobs(ctx, req)

	for {
		resp, err := it.Next()
		if err == iterator.Done {
			return nil
		}
		if err != nil {
			fmt.Printf("it.Next: %v\n", err)
			return err
		}
		fmt.Fprintf(w, "Listing job: %v\n", resp.GetName())
		fmt.Fprintf(w, "Job title: %v\n", resp.GetTitle())
	}
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez la documentation de référence de l'API CTS Java.

Pour vous authentifier auprès de CTS, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.cloud.talent.v4.Job;
import com.google.cloud.talent.v4.JobServiceClient;
import com.google.cloud.talent.v4.ListJobsRequest;
import com.google.cloud.talent.v4.TenantName;
import java.io.IOException;

public class JobSearchListJobs {

  public static void listJobs() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String tenantId = "your-tenant-id";
    String query = "count(base_compensation, [bucket(12, 20)])";
    listJobs(projectId, tenantId, query);
  }

  // Search Jobs with histogram queries.
  public static void listJobs(String projectId, String tenantId, String filter) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
      TenantName parent = TenantName.of(projectId, tenantId);
      ListJobsRequest request =
          ListJobsRequest.newBuilder().setParent(parent.toString()).setFilter(filter).build();
      for (Job responseItem : jobServiceClient.listJobs(request).iterateAll()) {
        System.out.format("Job name: %s%n", responseItem.getName());
        System.out.format("Job requisition ID: %s%n", responseItem.getRequisitionId());
        System.out.format("Job title: %s%n", responseItem.getTitle());
        System.out.format("Job description: %s%n", responseItem.getDescription());
      }
    }
  }
}

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez la documentation de référence de l'API CTS Node.js.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


const talent = require('@google-cloud/talent').v4;

/**
 * List Jobs
 *
 * @param projectId {string} Your Google Cloud Project ID
 * @param tenantId {string} Identifier of the Tenant
 */
function sampleListJobs(projectId, tenantId, filter) {
  const client = new talent.JobServiceClient();
  // Iterate over all elements.
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  // const filter = 'companyName=projects/my-project/companies/company-id';
  const formattedParent = client.tenantPath(projectId, tenantId);
  const request = {
    parent: formattedParent,
    filter: filter,
  };

  client
    .listJobs(request)
    .then(responses => {
      const resources = responses[0];
      for (const resource of resources) {
        console.log(`Job name: ${resource.name}`);
        console.log(`Job requisition ID: ${resource.requisitionId}`);
        console.log(`Job title: ${resource.title}`);
        console.log(`Job description: ${resource.description}`);
      }
    })
    .catch(err => {
      console.error(err);
    });
}

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Python documentation de référence.

Pour vous authentifier auprès de CTS, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


from google.cloud import talent


def list_jobs(project_id, tenant_id, filter_):
    """List Jobs"""

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # filter_ = 'companyName=projects/my-project/companies/company-id'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    if isinstance(filter_, bytes):
        filter_ = filter_.decode("utf-8")
    parent = f"projects/{project_id}/tenants/{tenant_id}"

    # Iterate over all results
    results = []
    for job in client.list_jobs(parent=parent, filter=filter_):
        results.append(job.name)
        print("Job name: {job.name}")
        print("Job requisition ID: {job.requisition_id}")
        print("Job title: {job.title}")
        print("Job description: {job.description}")
    return results

Supprimer une offre d'emploi

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Go documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

import (
	"context"
	"fmt"
	"io"

	talent "cloud.google.com/go/talent/apiv4beta1"
	talentpb "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
)

// deleteJob deletes an existing job by its resource name.
func deleteJob(w io.Writer, projectID, jobID string) error {
	ctx := context.Background()

	// Initialize a jobService client.
	c, err := talent.NewJobClient(ctx)
	if err != nil {
		fmt.Printf("talent.NewJobClient: %v\n", err)
		return err
	}

	// Construct a deleteJob request.
	jobName := fmt.Sprintf("projects/%s/jobs/%s", projectID, jobID)
	req := &talentpb.DeleteJobRequest{
		// The resource name of the job to be deleted.
		// The format is "projects/{project_id}/jobs/{job_id}".
		Name: jobName,
	}

	if err := c.DeleteJob(ctx, req); err != nil {
		fmt.Printf("Delete(%s): %v\n", jobName, err)
		return err
	}

	fmt.Printf("Deleted job: %q\n", jobName)

	return err
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Java documentation de référence.

Pour vous authentifier auprès de CTS, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.cloud.talent.v4.DeleteJobRequest;
import com.google.cloud.talent.v4.JobName;
import com.google.cloud.talent.v4.JobServiceClient;
import java.io.IOException;

public class JobSearchDeleteJob {

  public static void deleteJob() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String tenantId = "your-tenant-id";
    String jobId = "your-job-id";
    deleteJob(projectId, tenantId, jobId);
  }

  // Delete Job.
  public static void deleteJob(String projectId, String tenantId, String jobId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient jobServiceClient = JobServiceClient.create()) {
      JobName name = JobName.of(projectId, tenantId, jobId);

      DeleteJobRequest request = DeleteJobRequest.newBuilder().setName(name.toString()).build();

      jobServiceClient.deleteJob(request);
      System.out.println("Deleted job.");
    }
  }
}

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez la documentation de référence de l'API CTS Node.js.

Pour vous authentifier auprès de CTS, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


const talent = require('@google-cloud/talent').v4;

/** Delete Job */
function sampleDeleteJob(projectId, tenantId, jobId) {
  const client = new talent.JobServiceClient();
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  // const jobId = 'Company ID';
  const formattedName = client.jobPath(projectId, tenantId, jobId);
  client.deleteJob({name: formattedName}).catch(err => {
    console.error(err);
  });
  console.log('Deleted job.');
}

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour CTS, consultez Bibliothèques clientes CTS. Pour en savoir plus, consultez les API CTS Python documentation de référence.

Pour vous authentifier auprès de CTS, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


from google.cloud import talent


def delete_job(project_id, tenant_id, job_id):
    """Delete Job"""

    client = talent.JobServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # job_id = 'Company ID'

    if isinstance(project_id, bytes):
        project_id = project_id.decode("utf-8")
    if isinstance(tenant_id, bytes):
        tenant_id = tenant_id.decode("utf-8")
    if isinstance(job_id, bytes):
        job_id = job_id.decode("utf-8")
    name = client.job_path(project_id, tenant_id, job_id)

    client.delete_job(name=name)
    print("Deleted job.")

Bonnes pratiques

Champs de localisation géographique

Dans la mesure du possible, nous vous recommandons de renseigner l'adresse postale d'un emploi dans le champ addresses. Vous affinerez ainsi la localisation et la pertinence de l'offre. Si aucune rue ne peut être indiquée, saisissez autant d'informations que possible. Les adresses sont acceptées jusqu'au niveau du pays. Les références de région (telles que "Nord-Ouest Pacifique") ne sont pas acceptées.

Cloud Talent Solution utilise les données du champ addresses pour renseigner le champ derivedInfo.locations (sortie uniquement). En l'absence d'adresse complète, le service utilise d'autres références, telles que le nom de l'entreprise, pour déterminer s'il est possible de déduire une adresse plus précise pour l'offre d'emploi.

Par exemple, si l'emplacement d'une offre d'emploi dans le secteur informatique est défini comme étant Mountain View et que l'entreprise concernée est Google, le service analyse l'objet company correspondant pour identifier si le champ headquartersAddress comporte une adresse plus précise et si cette adresse est située dans la même ville que l'offre. Si tel est le cas, le service comprend que l'emploi à pourvoir est "probablement" à cette adresse et renseigne le champ derivedInfo.locations en conséquence.

Si les données d'adresse de l'entreprise ne sont pas disponibles, le service utilise une combinaison de connaissances exclusives et d'informations sur l'emploi/l'entreprise pour renseigner le champ derivedInfo.locations.

Étant donné que la valeur derivedInfo.locations représente la meilleure estimation possible, vous pouvez aussi utiliser les données des champs derivedInfo.locations ou addresses pour afficher l'adresse de l'offre d'emploi.

Une offre d'emploi ne peut pas être associée à plus de 50 emplacements. Si une offre doit être associée à davantage d'emplacements, vous pouvez créer plusieurs offres d'emploi identiques possédant chacune un attribut requisitionID unique (par exemple, "ReqA", "ReqA-1", "ReqA-2", etc.). En effet, il n'est pas possible de créer plusieurs offres ayant les mêmes attributs requisitionId, companyName et languageCode. Si l'attribut original requisitionId doit être conservé, définissez un paramètre CustomAttribute pour le stockage. Il est recommandé de regrouper les emplacements géographiques les plus proches dans la même offre d'emploi pour faciliter la recherche.

Adresses acceptées

Toute adresse reconnue par l'API Google Maps Geocoding (dans le champ formattedAddress) est acceptée par Cloud Talent Solution. Si vous tentez de créer une offre d'emploi ou d'exécuter une recherche à l'aide d'une adresse non reconnue, le service renvoie une erreur 400.

Si une adresse professionnelle est mal référencée dans l'API Google Maps Geocoding, remplissez un rapport de bug pour le signaler. Comptez jusqu'à cinq jours pour que la correction soit effective.

Saisie semi-automatique des adresses

Cloud Talent Solution ne propose pas de suggestions de saisie semi-automatique pour les emplacements de postes. Utilisez l'API Google Maps Places ou d'autres services de localisation similaires pour alimenter les suggestions de saisie semi-automatique.

Emplois à l'échelle d'un État, d'un pays ou en télétravail

Le champ postingRegion permet de spécifier si le poste est proposé au niveau de l'État, du pays ou en télétravail.

  • Les offres d'emploi au niveau ADMINISTRATIVE_AREA et NATION apparaissent dans les résultats des recherches pour lesquelles l'emplacement spécifié existe dans l'État ou le pays définis dans l'offre. Par exemple, si une offre d'emploi ADMINISTRATIVE_AREA est publiée dans "WA, USA", elle est renvoyée si le champ LocationFilter indique "Seattle".

  • Les offres d'emploi TELECOMMUTE sont renvoyées dans toute recherche liée à un emplacement, mais elles sont considérées comme moins pertinentes. Elles peuvent être ciblées dans une recherche en définissant l'option telecommutePreference sur TELECOMMUTE_ALLOWED dans le champ LocationFilter de la recherche.