Nozioni di base sul job (v3)

Una risorsa Job rappresenta un'offerta di lavoro (nota anche come "elenco offerte di lavoro" o "richiesta di lavoro"). Un lavoro appartiene a una società che è l'entità che assume responsabile del lavoro.

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

I job rientrano 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 semplificare la risoluzione dei problemi e la classificazione, sincronizza l'indice dei job di Cloud Talent Solution con il tuo indice delle offerte di lavoro e mantieni una relazione tra il name generato da Cloud Talent Solution e l'identificatore univoco del job nel tuo sistema. Man mano che i lavori cambiano o vengono introdotti nel tuo sistema, la chiamata CRUD appropriata deve essere inviata a Cloud Talent Solution in tempo reale per garantire che le 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 lavoro, consulta la Guida rapida alla creazione di aziende e offerte di lavoro per ulteriori dettagli.

Java

Per saperne di più sull'installazione e sulla creazione di un client di 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 di 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 di 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 pubblica l'elenco del lavoro, ad esempio projects/[PROJECT_ID]/companies/[COMPANY_ID].

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

    L'unicità di un'offerta di lavoro viene determinata utilizzando una combinazione di requisitionID, companyName e impostazioni internazionali del job. Se un job viene creato con una chiave specifica di questi attributi, la chiave viene archiviata nell'indice di Cloud Talent Solution e non è possibile creare altri job con gli stessi campi finché 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 della mancanza di risultati di ricerca a causa di qualifiche non standard, Cloud Talent Solution utilizza tutti i campi forniti nel job per comprendere il contesto del job e archiviare internamente un titolo "pulito" del job. Quando una richiesta di ricerca viene inviata al servizio, viene cancellata anche la query di ricerca e le ontologie vengono utilizzate per mappare la query ripulita ai job clean pertinenti.

  • description: la descrizione del lavoro, che in genere include una descrizione in più paragrafi dell'azienda e delle informazioni correlate. Vengono forniti campi distinti sull'oggetto del lavoro per responsabilità, qualifiche e altre caratteristiche del lavoro. Si consiglia di utilizzare questi campi separati del job.

    Questo campo accetta e sanitizza l'input HTML e accetta tag di markup in grassetto, corsivo, elenchi ordinati ed elenchi non ordinati. Il numero massimo di caratteri consentiti è 100.000.

Il valore sarà uno dei seguenti:

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

  • applicationInfo.emails[]: indirizzi email a cui inviare i curricula o le domande di partecipazione.

  • applicationInfo.instruction: istruzioni per l'applicazione, ad esempio "Invia la tua applicazione a ...". Questo campo accetta e sanitizza l'input HTML e accetta grassetto, corsivo, tag di elenco ordinati ed elenchi non ordinati. Il numero massimo di caratteri consentiti è 3000.

Campi di uso comune

  • postingExpireTime: il momento in cui scade l'offerta di lavoro, in base al timestamp. Trascorso questo periodo, 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.

    Il contenuto dei job scaduti può essere comunque recuperato fino a 60 giorni dopo la scadenza del job utilizzando l'operatore GET. Dopo questa scadenza, il job non verrà restituito tramite un'operazione GET.

  • addresses[]: località in cui l'offerta di lavoro è in corso. Ti consigliamo di fornire gli indirizzi completi della sede in cui si trova la sede in cui si trova la persona che assume per migliorare i risultati dell'API, incluse le ricerche di lavoro in base alla durata del 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 job come un "job in primo piano", che viene restituito solo nelle ricerche di job di tipo FEATURED_JOBS. I valori più alti vengono restituiti più in alto nei risultati di ricerca in primo piano. Consulta Job in primo piano per ulteriori informazioni.

Campi personalizzati

  • customAttributes: in questo campo vengono archiviati fino a 100 attributi personalizzati utilizzati per archiviare i dati personalizzati relativi al job. Questi campi possono essere filtrati in base a una richiesta di ricerca che specifichi il campo jobQuery di una richiesta di ricerca di job. Inoltre, uno qualsiasi di questi campi può essere impostato nell'attributo keywordSearchableJobCustomAttributes dell'azienda, quindi un termine di ricerca con una corrispondenza esatta in uno qualsiasi dei campi di keywordSearchableJobCustomAttributes restituirà qualsiasi job che include la corrispondenza.

Aggiorna un job

Aggiorna job senza fieldMask

Java

Per saperne di più sull'installazione e sulla creazione di un client di 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 di 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 di 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 di 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 di 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 di 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 relativi alla località

Se possibile, ti consigliamo di fornire la via di un lavoro nel campo addresses[]. Ciò favorisce il rilevamento della posizione e la pertinenza. Quando un indirizzo a livello stradale non è disponibile, inserisci il maggior numero possibile di informazioni. Gli indirizzi sono supportati fino a livello di paese. Le designazioni delle regioni (come "Pacifico nord-ovest") non sono supportate.

Cloud Talent Solution utilizza i dati del campo addresses[] per compilare il campo derivedInfo.locations[] (solo output). 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 l'offerta di lavoro.

Ad esempio, se la posizione di un'offerta di lavoro software è specificata come Mountain View e l'azienda a cui l'offerta è associata è Google, il servizio cerca l'oggetto aziendale per verificare se nel campo headquartersAddress è presente un indirizzo migliore e se questo indirizzo si trova nella stessa città dell'offerta di lavoro. Se è così, il servizio comprende che il lavoro è "probabile" in quell'indirizzo e compila il campo derivedInfo.locations[] in modo appropriato.

Se i dati sugli indirizzi dell'azienda non sono disponibili, il servizio utilizza una combinazione di conoscenze proprietarie e informazioni sul lavoro/azienda per fornire informazioni al campo derivedInfo.locations[].

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

A un'offerta di lavoro non possono essere associate più di 50 sedi. Se un job ha più località, puoi suddividerlo in più job, ciascuno con un ID requisito univoco (ad es. "ReqA", "ReqA-1", "ReqA-2" e così via) poiché non è consentito avere più job con gli stessi requisitionId, companyName e languageCode. Se è necessario conservare il valore requisitionId originale, è necessario utilizzare un CustomAttribute per l'archiviazione. Ti consigliamo di raggruppare le sedi più vicine tra loro nello stesso lavoro per migliorare l'esperienza di ricerca.

Indirizzi supportati

Tutti gli indirizzi riconosciuti dall'API Google Maps Geocoding (nel campo formattedAddress) sono accettati da Cloud Talent Solution. Il servizio restituisce un errore 400 se tenti di creare un job o eseguire una ricerca utilizzando un indirizzo non riconosciuto.

Se l'indirizzo di un'attività non è indicato correttamente nell'API Google Maps Geocoding, segnala un bug per risolverlo. L'applicazione delle correzioni può richiedere fino a 5 giorni.

Completamento automatico degli indirizzi

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 completare i suggerimenti di completamento automatico.

Offerte di lavoro a livello statale, nazionale e di telelavoro

I job possono essere specificati a livello di stato, nazionale o telelavoro utilizzando il campo postingRegion della risorsa Job.

  • Le offerte di lavoro ADMINISTRATIVE_AREA e NATION vengono restituite per qualsiasi ricerca la cui posizione esiste all'interno dello stato/paese dell'offerta di lavoro. Ad esempio, se un job ADMINISTRATIVE_AREA ha una località "WA, USA", viene restituito per le ricerche in cui LocationFilter specifica "Seattle".

  • TELECOMMUTE offerte di lavoro vengono restituite in qualsiasi ricerca correlata alla località, ma sono trattate come meno pertinenti. Possono essere scelti come target in una ricerca impostando il flag telecommutePreference su TELECOMMUTE_ALLOWED nella LocationFilter della ricerca.