Nozioni di base sul job (v3)

Una risorsa Job rappresenta un'offerta di lavoro (indicata anche come "annuncio di lavoro" o "richiesta di lavoro"). Un lavoro appartiene a una società che è la persona giuridica responsabile dell'assunzione.

Un job può essere manipolato utilizzando i metodi di creazione, aggiornamento ed eliminazione e viene visualizzato utilizzando i metodi list e get. Potrebbero essere necessari fino a 5 minuti affinché l'indice Cloud Talent Solution rifletta le modifiche.

I job sono contenuti nell'ambito di un account di servizio. Solo le richieste di ricerca autenticate utilizzando le credenziali di un determinato account di servizio possono essere utilizzate per accedere ai contenuti di questi job.

Per una facile risoluzione dei problemi e una classificazione, sincronizza l'indice dei job di Cloud Talent Solution con il tuo indice dei job e mantieni una relazione tra il name generato da Cloud Talent Solution e l'identificatore univoco del job nel tuo sistema. Man mano che le offerte cambiano o vengono introdotte nel sistema, la chiamata CRUD appropriata deve essere inviata a Cloud Talent Solution in tempo reale per garantire che queste modifiche vengano applicate immediatamente. L'indice di Cloud Talent Solution deve essere aggiunto alla pipeline di importazione dei job esistente.

Crea un job

Per creare un job, consulta la guida rapida: Creare aziende e job per ulteriori dettagli.

Java

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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
}

Campi obbligatori

I seguenti campi sono obbligatori durante la creazione e l'aggiornamento del job:

  • companyName: il nome della risorsa dell'azienda che elenca il lavoro, ad esempio projects/[PROJECT_ID]/companies/[COMPANY_ID].

  • requisitionId: l'ID richiesta, noto anche come ID pubblicazione, assegnato dal cliente per identificare un lavoro. Questo campo è destinato all'utilizzo da parte dei clienti per l'identificazione e il monitoraggio delle richieste. Il numero massimo di caratteri consentiti è 225.

    L'unicità di un'offerta di lavoro viene determinata utilizzando una combinazione di requisitionID, companyName e la lingua del lavoro. Se un job viene creato con una chiave specifica di questi attributi, questa chiave viene archiviata nell'indice Cloud Talent Solution e non è possibile creare altri job con gli stessi campi fino a quando il job non viene eliminato.

  • title: il titolo del lavoro, ad esempio "Ingegnere informatico". Il numero massimo di caratteri consentiti è 500.

    Per risolvere il problema dei risultati di ricerca mancanti a causa di titoli di lavoro non standard, Cloud Talent Solution sfrutta tutti i campi forniti nella scheda Lavoro per comprendere il contesto della posizione e memorizzare internamente un titolo "pulito" della posizione. Quando una richiesta di ricerca viene inviata al servizio, viene pulita anche la query di ricerca e le ontologie vengono utilizzate per mappare la query pulita ai job di pulizia pertinenti.

  • description: la descrizione del lavoro, che in genere include una descrizione in più paragrafi dell'azienda e informazioni correlate. Nell'oggetto job sono forniti campi separati per responsabilità, qualifiche e altre caratteristiche del lavoro. Ti consigliamo di utilizzare questi campi di job separati.

    Questo campo accetta e convalida l'input HTML e i tag di markup in grassetto, corsivo, elenco ordinato ed elenco non ordinato. Il numero massimo di caratteri consentiti è 100.000.

Il valore sarà uno dei seguenti:

  • applicationInfo.uris[]: gli URL delle pagine dell'applicazione.

  • applicationInfo.emails[]: indirizzi email a cui devono essere inviati i curriculum o le domande di candidatura.

  • applicationInfo.instruction: istruzioni per la richiesta, ad esempio "Invia la tua richiesta all'indirizzo ...". Questo campo accetta e convalida l'input HTML e i tag markup in grassetto, in corsivo, di elenco ordinato ed elenco non ordinato. Il numero massimo di caratteri consentiti è 3000.

Campi di uso comune

  • postingExpireTime: l'ora di scadenza dell'annuncio di lavoro, in base al timestamp. Una volta trascorso questo periodo di tempo, il job viene contrassegnato come scaduto e non viene visualizzato nei risultati di ricerca. Questa data deve essere precedente al 31/12/2100 nel fuso orario UTC. Le date non valide (ad esempio quelle passate) vengono ignorate. La data predefinita di scadenza del job è 30 giorni dopo l'ora di creazione del job nel fuso orario UTC.

    I contenuti dei job scaduti possono essere recuperati fino a 60 giorni dopo la scadenza del job utilizzando l'operatore GET. Dopo questa scadenza di 60 giorni, il job non verrà restituito tramite un'operazione GET.

  • addresses[]: località in cui viene assunto il personale. Ti consigliamo di fornire gli indirizzi stradali completi della sede di assunzione per ottenere risultati migliori dell'API, incluse le ricerche di lavoro per tempo di tragitto giornaliero. Il numero massimo di caratteri consentiti è 500. Ulteriori informazioni su addresses[] sono disponibili nella sezione Best practice di seguito.

  • promotionValue: un valore maggiore di 0 definisce questo annuncio come "annuncio in primo piano", che viene restituito solo nelle ricerche di annunci di tipo FEATURED_JOBS. I valori più elevati vengono visualizzati più in alto nei risultati di ricerca in primo piano. Per ulteriori informazioni, consulta la sezione Posti di lavoro in primo piano.

Campi personalizzati

  • customAttributes: questo campo memorizza fino a 100 attributi personalizzati utilizzati per memorizzare dati personalizzati sul job. Questi campi possono essere filtrati utilizzando una richiesta di ricerca che specifica il campo jobQuery di una richiesta di ricerca di lavoro. Inoltre, qualsiasi di questi campi può essere impostato nell'attributo keywordSearchableJobCustomAttributes della società, pertanto un termine di ricerca che ha una corrispondenza esatta in uno dei campi in keywordSearchableJobCustomAttributes restituisce tutti i job che includono la corrispondenza.

Aggiornare un job

Aggiorna job senza fieldMask

Java

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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
}

Aggiorna job con fieldMask

Java

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client di 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
}

Best practice

Campi posizione

Se possibile, ti consigliamo di fornire l'indirizzo di un job nel addresses[] campo. Ciò contribuisce al rilevamento della posizione e alla pertinenza. Se non è disponibile un indirizzo al piano terra, inserisci quante più informazioni possibili. Gli indirizzi sono supportati fino al livello di paese. Le designazioni delle regioni (ad es. "Nordovest Pacifico") non sono supportate.

Cloud Talent Solution utilizza i dati nel campo addresses[] per compilare il campo (solo output) derivedInfo.locations[]. Quando non viene fornito un indirizzo completo, il servizio utilizza altri indicatori, come il nome dell'azienda, per determinare se è possibile dedurre un indirizzo più completo per la scheda di lavoro.

Ad esempio, se la posizione di un job di software è specificata come Mountain View e l'azienda a cui è associato è Google, il servizio cerca l'oggetto azienda per verificare se nel campo headquartersAddress è fornito un indirizzo migliore e se questo indirizzo si trova nella stessa città della pubblicazione di lavoro. In questo caso, il servizio comprende che il lavoro è "probabile" in quell'indirizzo e compila il campo derivedInfo.locations[] di conseguenza.

Se i dati dell'indirizzo dell'azienda non sono disponibili, il servizio utilizza una combinazione di conoscenze proprietarie e informazioni su lavoro/azienda per compilare il campo derivedInfo.locations[].

Poiché il valore derivedInfo.locations[] è una stima approssimativa, ti consigliamo di utilizzare i dati derivedInfo.locations[] o il campo addresses quando mostri l'indirizzo del job.

A un annuncio di lavoro non possono essere associate più di 50 località. Se un job ha più sedi, puoi suddividerlo in più job ciascuno con un identificativo requisitionId univoco (ad es. "ReqA", "ReqA-1", "ReqA-2" e così via), poiché non è consentito avere più job con gli stessi valori requisitionId, companyName e languageCode. Se è necessario conservare il file requisitionId originale, per l'archiviazione deve essere utilizzato un file CustomAttribute. Per una migliore esperienza di ricerca, ti consigliamo di raggruppare le sedi più vicine tra loro nello stesso job.

Indirizzi supportati

Qualsiasi indirizzo riconosciuto dall'API Geocoding di Google Maps (nel formattedAddress campo) è accettato da Cloud Talent Solution. Il servizio restituisce un errore 400 se provi a creare un job o a eseguire una ricerca utilizzando un indirizzo non riconosciuto.

Se l'indirizzo di un'attività è elencato in modo errato nell'API Geocoding di Google Maps, segnala un bug perché venga corretto. L'applicazione delle correzioni può richiedere fino a 5 giorni.

Completamento automatico dell'indirizzo

Cloud Talent Solution non fornisce suggerimenti di completamento automatico per le località. Utilizza l'API Google Maps Places o altri servizi di geolocalizzazione simili per compilare i suggerimenti di completamento automatico.

Lavori a livello statale, nazionale e con possibilità di telelavoro

I lavori possono essere specificati come a livello di stato, a livello nazionale o con lavoro da remoto utilizzando il campo postingRegion della risorsa Job.

  • I lavori ADMINISTRATIVE_AREA e NATION vengono restituiti per qualsiasi ricerca la cui località esista all'interno dello stato/del paese dell'annuncio di lavoro. Ad esempio, se un job ADMINISTRATIVE_AREA ha la località "WA, USA", viene restituito per le ricerche il cui LocationFilter specifica "Seattle".

  • I job TELECOMMUTE vengono restituiti in qualsiasi ricerca relativa alla località, ma vengono trattati come meno pertinenti. Possono essere scelti come target in una ricerca impostando il flag telecommutePreference su TELECOMMUTE_ALLOWED in LocationFilter della ricerca.