Nozioni di base sul job (v3)

Una risorsa Job rappresenta un'offerta di lavoro (detta anche "elenco di offerte di lavoro" o "richiesta di lavoro"). Un lavoro appartiene a una società che è la persona giuridica che assume la responsabilità del lavoro.

Un job può essere manipolato utilizzando i metodi di creazione, aggiornamento ed eliminazione, a cui si accede utilizzando i metodi list e get. Potrebbero essere necessari fino a 5 minuti l'indice di Cloud Talent Solution per riflettere i cambiamenti.

I job sono contenuti nell'ambito di un account di servizio. Solo rete di ricerca richieste autenticate utilizzando le credenziali di un particolare servizio può essere utilizzato 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. Come offerte di lavoro modifiche o vengono introdotte nel sistema, la chiamata CRUD appropriata deve essere inviati 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 maggiori 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 a essere utilizzato dal cliente per l'identificazione del cliente e il monitoraggio delle richieste. Il valore 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 creata con una chiave specifica di questi attributi, questa chiave viene archiviata Impossibile creare l'indice di Cloud Talent Solution e non è possibile creare altri job con questi stessi campi fino all'eliminazione del job.

  • 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 sfrutta tutti i campi forniti nel job per comprendere il contesto del job e archiviare internamente una "pulire" qualifica del lavoro. Quando viene inviata una richiesta di ricerca al servizio, query di ricerca viene ripulita e le ontologie vengono utilizzate per mappare una query più pulita ai job puliti 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 sanitizza l'input HTML e accetta grassetto, corsivo tag di markup per 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 il curriculum o le domande di adesione deve essere inviato.

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

Campi di uso comune

  • postingExpireTime: l'ora, in base al timestamp, alla scadenza dell'offerta di lavoro. Una volta trascorso questo periodo di tempo, il lavoro viene contrassegnato come scaduto e non verrà visualizzato in risultati di ricerca. Questa data deve essere precedente al 31/12/2100 nel fuso orario UTC. Le date non valide (ad es. 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 il lavoro assume. 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 job come "job in primo piano" che viene restituito solo nelle ricerche di lavoro di tipo FEATURED_JOBS. Superiore vengono restituiti più in alto nei risultati di ricerca in primo piano. Consulta: Job in primo piano per ulteriori informazioni.

Campi personalizzati

  • customAttributes: questo campo memorizza fino a 100 attributi personalizzati utilizzati per archiviare dati personalizzati sul job. Questi campi possono essere filtrati usando 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.

Aggiorna un job

Aggiorna il 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 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 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 il job con fieldMask

Java

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client 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 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 stradale di un lavoro nel campo addresses[]. Ciò contribuisce al rilevamento della posizione e alla pertinenza. Quando indirizzo a livello stradale non è disponibile. Inserisci quante più informazioni possibile. Gli indirizzi sono supportati fino al livello di paese. Le designazioni delle regioni (ad esempio "Pacifico nord-occidentale") non sono supportate.

Cloud Talent Solution utilizza i dati nel campo addresses[] per compilare nel 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 software è specificata come Mountain View, e l'azienda a cui è associato il job è Google, il servizio cerca l'oggetto dell'azienda per vedere se un indirizzo migliore è specificato nel campo headquartersAddress e se l'indirizzo si trova nella stessa città come offerta 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 previsione, ti consigliamo di utilizzare i dati derivedInfo.locations[] o il campo addresses, quando viene visualizzato l'indirizzo del lavoro.

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 l'elemento requisitionId originale deve essere conservato, un elemento CustomAttribute per l'archiviazione. Ti consigliamo di raggruppare le località più vicine a nello stesso lavoro per una migliore esperienza di ricerca.

Indirizzi supportati

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

Se l'indirizzo di un'attività è elencato in modo errato nell'API Geocoding di Google Maps, segnalare un bug per richiederne la correzione. 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 a livello di stato, nazionale o telelavoro utilizzando Campo postingRegion del job risorsa.

  • Vengono restituiti ADMINISTRATIVE_AREA e NATION job per qualsiasi ricerca la cui località esiste nello stato/paese dell'offerta 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. Per effettuare una ricerca, è possibile impostarli come target telecommutePreference flag a TELECOMMUTE_ALLOWED nella ricerca LocationFilter