Migliorare il modello preaddestrato con i dati sugli eventi client (v4beta1)

Cloud Talent Solution è un servizio che applica il machine learning alla tua esperienza di ricerca di impiego, offrendo ai candidati risultati di alta qualità che superano i limiti dei metodi tradizionali basati su parole chiave. Subito del riquadro, il CTS applica i modelli di pertinenza e il lavoro/le competenze onlogie ai dettagli del job. Puoi migliorare i risultati restituiti al job chi cerca un impiego registrando gli eventi del cliente in base all'attività della persona in cerca di impiego.

Registra gli eventi client utilizzando createClientEventRequest

Quando una persona in cerca di lavoro esegue una specifica , puoi utilizzare Ricerca lavoro per registrarla. Ad esempio, il candidato o un'altra entità che interagisce con il servizio ha visualizzato un'offerta di lavoro (o un elenco di offerte di lavoro), ad esempio in un elenco di risultati di ricerca in un formato compresso o tagliato. Puoi inviare un evento IMPRESSION a Cloud Talent Solution per fornire dati sul contesto della ricerca e sui risultati a chi è in cerca di lavoro. Quando la persona in cerca di lavoro fa clic su un risultato di lavoro per visualizzarlo la descrizione completa del lavoro, puoi inviare un evento VIEW che registri l'interesse della persona in cerca di lavoro nella posizione scelta.

L'esempio seguente illustra come inviare un messaggio a Cloud Talent Solution utilizzando un'API. La persona in cerca di lavoro o un'altra entità che interagisce con il servizio ha visualizzato un job (o un elenco di job), ad esempio in un elenco risultati di ricerca in formato compresso o troncato. Questo evento solitamente è associati a una persona in cerca di lavoro che visualizza un elenco di offerte di lavoro su un'unica pagina.

Go

Per scoprire come installare e utilizzare la libreria client per CTS, consulta Librerie client CTS. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API CTS Go.

Per eseguire l'autenticazione su CTS, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"fmt"
	"io"
	"time"

	talent "cloud.google.com/go/talent/apiv4beta1"
	"cloud.google.com/go/talent/apiv4beta1/talentpb"
	"github.com/golang/protobuf/ptypes"
)

// createClientEvent creates a client event.
func createClientEvent(w io.Writer, projectID string, requestID string, eventID string, relatedJobNames []string) (*talentpb.ClientEvent, error) {
	ctx := context.Background()

	// Create an eventService client.
	c, err := talent.NewEventClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("talent.NewEventClient: %w", err)
	}
	defer c.Close()

	createTime, _ := ptypes.TimestampProto(time.Now())
	clientEventToCreate := &talentpb.ClientEvent{
		RequestId:  requestID,
		EventId:    eventID,
		CreateTime: createTime,
		Event: &talentpb.ClientEvent_JobEvent{
			JobEvent: &talentpb.JobEvent{
				Type: talentpb.JobEvent_VIEW,
				Jobs: relatedJobNames,
			},
		},
	}

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

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

	fmt.Fprintf(w, "Client event created: %v\n", resp.GetEvent())

	return resp, nil
}

Java

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client Cloud Talent Solution.


import com.google.cloud.talent.v4beta1.ClientEvent;
import com.google.cloud.talent.v4beta1.CreateClientEventRequest;
import com.google.cloud.talent.v4beta1.EventServiceClient;
import com.google.cloud.talent.v4beta1.JobEvent;
import com.google.cloud.talent.v4beta1.TenantName;
import com.google.protobuf.Timestamp;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class JobSearchCreateClientEvent {

  public static void createClientEvent() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String tenantId = "your-tenant-id";
    String requestId = "your-req-id-from-response-metadata";
    String eventId = "your-unique-identifier-id";
    createClientEvent(projectId, tenantId, requestId, eventId);
  }

  // Creates a client event.
  public static void createClientEvent(
      String projectId, String tenantId, String requestId, String eventId) 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 (EventServiceClient eventServiceClient = EventServiceClient.create()) {
      TenantName parent = TenantName.of(projectId, tenantId);

      // The timestamp of the event as seconds of UTC time since Unix epoch
      // For more information on how to create google.protobuf.Timestamps
      // See:
      // https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto
      long seconds = 3L;
      Timestamp createTime = Timestamp.newBuilder().setSeconds(seconds).build();

      // The type of event attributed to the behavior of the end user
      JobEvent.JobEventType type = JobEvent.JobEventType.VIEW;

      // List of job names associated with this event
      String jobsElement = "projects/[Project ID]/tenants/[Tenant ID]/jobs/[Job ID]";
      String jobsElement2 = "projects/[Project ID]/tenants/[Tenant ID]/jobs/[Job ID]";

      List<String> jobs = Arrays.asList(jobsElement, jobsElement2);
      JobEvent jobEvent = JobEvent.newBuilder().setType(type).addAllJobs(jobs).build();
      ClientEvent clientEvent =
          ClientEvent.newBuilder()
              .setRequestId(requestId)
              .setEventId(eventId)
              .setCreateTime(createTime)
              .setJobEvent(jobEvent)
              .build();
      CreateClientEventRequest request =
          CreateClientEventRequest.newBuilder()
              .setParent(parent.toString())
              .setClientEvent(clientEvent)
              .build();
      ClientEvent response = eventServiceClient.createClientEvent(request);
      System.out.println("Created client event. ");
      System.out.println(response.toString());
    }
  }
}

Python

Per saperne di più sull'installazione e sulla creazione di un client Cloud Talent Solution, consulta Librerie client Cloud Talent Solution.


from google.cloud import talent
from google.cloud.talent import enums


def create_client_event(project_id, tenant_id, request_id, event_id):
    """
    Creates a client event

    Args:
      project_id Your Google Cloud Project ID
      tenant_id Identifier of the Tenant
      request_id A unique ID generated in the API responses.
      Value should be set to the request_id from an API response.
      event_id A unique identifier, generated by the client application
    """

    client = talent.EventServiceClient()

    # project_id = 'Your Google Cloud Project ID'
    # tenant_id = 'Your Tenant ID (using tenancy is optional)'
    # request_id = '[request_id from ResponseMetadata]'
    # event_id = '[Set this to a unique identifier]'

    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(request_id, bytes):
        request_id = request_id.decode("utf-8")
    if isinstance(event_id, bytes):
        event_id = event_id.decode("utf-8")
    parent = f"projects/{project_id}/tenants/{tenant_id}"

    # The timestamp of the event as seconds of UTC time since Unix epoch
    # For more information on how to create google.protobuf.Timestamps
    # See:
    # https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto
    seconds = 0
    create_time = {"seconds": seconds}

    # The type of event attributed to the behavior of the end user
    type_ = enums.JobEvent.JobEventType.VIEW

    # List of job names associated with this event
    jobs_element = "projects/[Project ID]/tenants/[Tenant ID]/jobs/[Job ID]"
    jobs_element_2 = "projects/[Project ID]/tenants/[Tenant ID]/jobs/[Job ID]"
    jobs = [jobs_element, jobs_element_2]
    job_event = {"type": type_, "jobs": jobs}
    client_event = {
        "request_id": request_id,
        "event_id": event_id,
        "create_time": create_time,
        "job_event": job_event,
    }

    response = client.create_client_event(parent=parent, client_event=client_event)
    print(response)

Messaggi di evento

Campi obbligatori:

  • eventId (definito dal cliente): ogni messaggio inviato a Cloud Talent Solution deve hanno un valore eventId univoco. Come best practice, incorpora il timestamp durante la definizione di questo campo per garantire l'assenza di duplicati. La lunghezza massima di questo campo è di 255 caratteri.

  • requestId: il valore di requestId restituito dall'oggetto risposta di ricerca. Questo valore è univoco per una determinata chiamata API SearchJobsRequest. Viene utilizzato per tutti i messaggi successivi derivanti dalla ricerca originale IMPRESSION. Quando viene effettuata una nuova chiamata API SearchJobsRequest (ad esempio: la persona in cerca di lavoro va alla pagina dei risultati successiva), il valore requestId cambia.

  • createTime Il timestamp dell'evento (in formato Timestamp con precisione al nanosecondo. Questo timestamp deve riflettere il momento in cui si è verificato effettivamente l'evento, non il momento in cui è stato inviato il messaggio.

  • Campo unione event: può essere jobEvent o profileEvent. Gli oggetti jobEvent vengono utilizzati con la funzionalità di ricerca di lavoro e vengono emessi quando un candidato interagisce con il servizio.

Messaggio di evento di esempio

La chiamata API nell'esempio di codice riportato sopra deve generare un messaggio JSON nella seguente formato:

JSON

{
  "requestId": string,
  "eventId": string,
  "createTime": string,
  "eventNotes": string,

// Union field event can be only one of the following: "jobEvent": { object (JobEvent) }, "profileEvent": { object (ProfileEvent) } // End of list of possible types for union field event. }

Scenari e flussi di lavoro

Di seguito sono riportati due scenari di esempio in cui la persona in cerca di lavoro cercare, visualizzare e candidarsi per un lavoro.

Flusso di lavoro 1

  1. La persona in cerca di lavoro esegue una ricerca. Ad esempio: Product mgr SF

    I risultati di ricerca vengono restituiti alla persona in cerca di lavoro.

    L'oggetto di risposta della ricerca job rinviato al server del cliente contiene un'etichetta univoco requestId (ad esempio: 8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==). Usa questo requestId per tutti i messaggi futuri correlati a questo problema specifico Chiamata API SearchJobsRequest.

    Invia a Cloud Talent Solution un messaggio IMPRESSION.

    Messaggio evento di esempio:

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID1",
      "createTime": "2018-12-19T16:39:57-08:00",
      "jobEvent":
      {"type":"IMPRESSION",
      "jobs":["jobs/4000000000", "jobs/4000000001","jobs/4000000002",
      "jobs/4000000003", "jobs/4000000004"]}
    }
    
  2. Il candidato seleziona un risultato (un'offerta di lavoro) per visualizzare i dettagli completi della posizione.

    Invia un messaggio VIEW a Cloud Talent Solution.

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID2",
      "createTime": "2018-12-19T16:40:57-08:00",
      "jobEvent":
      {"type":"VIEW",
      "jobs":["jobs/4000000000"]}
    
    }
    
  3. Il candidato si candida all'offerta di lavoro visualizzata.

    a. Se la persona in cerca di lavoro viene reindirizzata a una pagina all'interno dello stesso dominio (una pagina di applicazione interna), invia a Cloud Talent Solution un APPLICATION_START.

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID3",
      "createTime": "2018-12-19T16:41:57-08:00",
      "jobEvent":
      {"type":"APPLICATION_START",
    "jobs":["jobs/4000000000"]}
    }
    

    b. Se il candidato viene reindirizzato a una pagina di candidatura esterna, invia a Cloud Talent Solution un messaggio APPLICATION_REDIRECT.

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID3",
      "createTime": "2018-12-19T16:41:57-08:00",
      "jobEvent":
      {"type":"APPLICATION_REDIRECT",
      "jobs":["jobs/4000000000"]}
    
    }
    
  4. Quando la persona in cerca di lavoro completa una candidatura interna, invia Cloud Talent Solution un messaggio APPLICATION_FINISH:

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID4",
      "createTime": "2018-12-19T16:43:57-08:00",
      "jobEvent":
      {"type":"APPLICATION_FINISH",
      "jobs":["jobs/4000000000"]}
    
    }
    
  5. Il candidato torna ai risultati di ricerca e passa alla pagina 2 (oppure passa alla pagina 2 senza aver fatto clic su un'offerta di lavoro).

    Invia a Cloud Talent Solution un messaggio IMPRESSION con l'insieme di risultati successivo dalla pagina 2. Nota: viene generato un nuovo requestId nella risposta della chiamata API SearchJobsRequest che genera la seconda pagina di risultati. (ad es. 99e5b99c-f1ba-4f85-b17d-ccf878f451f9:APAb7IRESj+/Hzwa3bBd54P3qPx2yOWm5w==).

    {
      "requestId": "99e5b99c-f1ba-4f85-b17d-ccf878f451f9:APAb7IRESj+/Hzwa3bBd54P3qPx2yOWm5w==",
      "eventId": "ID5",
      "createTime": "2018-12-19T18:39:57-08:00",
      "jobEvent":
      {"type":"IMPRESSION",
      "jobs":["jobs/4000000005", "jobs/4000000006","jobs/4000000007",
      "jobs/4000000008", "jobs/4000000009"]}
    }
    
  6. La persona in cerca di lavoro continua fino alla pagina 3 dei risultati di ricerca.

    Invia un messaggio IMPRESSION a Cloud Talent Solution con il successivo insieme di risultati. NOTA: è disponibile un nuovo requestId (ad esempio, e2d2b916-78c3-4c65-aecc-d8452bc0afb0:APAb7IRvCsNPiRXYkgF8PN5e8BkbFzKOyg==).

    {
      "requestId": "e2d2b916-78c3-4c65-aecc-d8452bc0afb0:APAb7IRvCsNPiRXYkgF8PN5e8BkbFzKOyg==",
      "eventId": "ID6",
      "createTime": "2018-12-19T16:41:57-08:00",
      "jobEvent":
      {"type":"IMPRESSION",
      "jobs":["jobs/4000000010", "jobs/4000000011","jobs/4000000012",
      "jobs/400000013", "jobs/4000000014"]}
    }
    

Flusso di lavoro 2

  1. La persona in cerca di lavoro esegue una ricerca. Ad esempio: Product mgr SF

    I risultati di ricerca vengono restituiti alla persona in cerca di lavoro.

    L'oggetto della risposta alla ricerca di lavoro contiene un requestId univoco (ad es. a2179a9b-cf73-413e-8076-98af08b991ad). Utilizza questo requestId per tutti i messaggi futuri correlati a questa chiamata all'API SearchJobsRequest.

    Invia un messaggio IMPRESSIONE a Cloud Talent Solution.

    {
      "requestId": "a2179a9b-cf73-413e-8076-98af08b991ad",
      "eventId": "ID1",
      "createTime": "2018-12-19T16:39:57-08:00",
      "jobEvent":
      {"type":"IMPRESSION",
      "jobs":["jobs/4000000000", "jobs/4000000001","jobs/4000000002",
      "jobs/4000000003", "jobs/4000000004"]}
    }
    
  2. La persona in cerca di lavoro seleziona un risultato (un'offerta di lavoro) per visualizzare i dettagli completi del lavoro.

    Invia un messaggio VIEW a Cloud Talent Solution.

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID2",
      "createTime": "2018-12-19T16:40:57-08:00",
      "jobEvent":
      {"type":"VIEW",
      "jobs":["jobs/4000000000"]}
    }
    
  3. Il candidato invia una candidatura con un solo clic per un'offerta di lavoro, come descritto in APPLICATION_QUICK_SUBMISSION.

    Invia a Cloud Talent Solution un messaggio APPLICATION_QUICK_SUBMISSION con il prossimo insieme di risultati.

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID3",
      "createTime": "2018-12-19T16:41:57-08:00",
      "jobEvent":
      {"type":"APPLICATION_QUICK_SUBMISSION",
      "jobs":["jobs/4000000000"]}
     }
    
  4. Il candidato esegue le seguenti azioni.

    a. La persona in cerca di lavoro torna ai risultati di ricerca che fanno direttamente domanda per un lavoro dalla pagina dei risultati di ricerca. La procedura di richiesta è più lunga di quella definita in APPLICATION_QUICK_SUBMISSION (ovvero è una procedura di richiesta in più passaggi).

    Invia a Cloud Talent Solution un messaggio APPLICATION_START_FROM_SERP.

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID4",
      "createTime": "2018-12-19T16:43:57-08:00",
      "jobEvent":
      {"type":"APPLICATION_START_FROM_SERP",
      "jobs":["jobs/4000000000"]}
    }
    

    b. Il candidato completa la domanda di lavoro. Invia un messaggio APPLICATION_FINISH a Cloud Talent Solution.

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID5",
      "createTime": "2018-12-19T16:44:57-08:00",
      "jobEvent":
      {"type":"APPLICATION_FINISH",
      "jobs":["jobs/4000000000"]}
    }
    
  5. La persona in cerca di lavoro torna ai risultati di ricerca e si applica a un lavoro direttamente dalla pagina dei risultati di ricerca. La procedura di candidatura reindirizza il candidato a un altro dominio esterno al sito del tenant (applicazione esterna) da cui non è possibile monitorare l'avanzamento del candidato.

    Invia un messaggio APPLICATION_REDIRECT_FROM_SERP a Cloud Talent Solution.

    {
      "requestId": "8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==",
      "eventId": "ID6",
      "createTime": "2018-12-19T16:45:57-08:00",
      "jobEvent":
      {"type":"APPLICATION_START_FROM_SERP",
      "jobs":["jobs/4000000001"]}
    }
    

    Questo è diverso da APPLICATION_REDIRECT, dove una persona in cerca di lavoro si trova pagina della descrizione.

Verificare l'implementazione degli eventi client

Cloud Talent Solution fornisce strumenti self-service che puoi utilizzare per verificare l'implementazione degli eventi client. Per ulteriori informazioni sulle opzioni self-service disponibili, consulta gli strumenti di gestione.