Migliora il modello preaddestrato con i dati sugli eventi del cliente

Cloud Talent Solution è un servizio che porta l'apprendimento alla tua esperienza di ricerca lavoro, restituendo risultati di alta qualità a un lavoro. utenti che va ben oltre i limiti dei metodi tipici 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 ai candidati registrando gli eventi client in base all'attività del candidato.

Registra gli eventi del 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 chi cerca un lavoro fa clic su un risultato per visualizzare la descrizione completa dell'offerta, puoi inviare un evento VIEW che registra l'interesse della persona per la 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 informazioni su come installare e utilizzare la libreria client per CTS, consulta Librerie client di 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 informazioni su come installare e utilizzare la libreria client per CTS, consulta Librerie client di CTS. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API CTS Java.

Per autenticarti a CTS, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


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());
    }
  }
}

Node.js

Per informazioni su come installare e utilizzare la libreria client per CTS, consulta Librerie client di CTS. Per ulteriori informazioni, consulta API Node.js di CTS documentazione di riferimento.

Per autenticarti a CTS, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


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

/**
 * Creates a client event
 *
 * @param projectId {string} Your Google Cloud Project ID
 * @param tenantId {string} Identifier of the Tenant
 * @param requestId {string} A unique ID generated in the API responses.
 * Value should be set to the request_id from an API response.
 * @param eventId {string} A unique identifier, generated by the client application
 */
function sampleCreateClientEvent(projectId, tenantId, requestId, eventId) {
  const client = new talent.EventServiceClient();
  // const projectId = 'Your Google Cloud Project ID';
  // const tenantId = 'Your Tenant ID (using tenancy is optional)';
  // const requestId = '[request_id from ResponseMetadata]';
  // const eventId = '[Set this to a unique identifier]';
  const formattedParent = client.tenantPath(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
  const seconds = 0;
  const createTime = {
    seconds: seconds,
  };

  // The type of event attributed to the behavior of the end user
  const type = 'VIEW';

  // List of job names associated with this event
  const jobsElement = 'projects/[Project ID]/tenants/[Tenant ID]/jobs/[Job ID]';
  const jobsElement2 =
    'projects/[Project ID]/tenants/[Tenant ID]/jobs/[Job ID]';
  const jobs = [jobsElement, jobsElement2];
  const jobEvent = {
    type: type,
    jobs: jobs,
  };
  const clientEvent = {
    requestId: requestId,
    eventId: eventId,
    createTime: createTime,
    jobEvent: jobEvent,
  };
  const request = {
    parent: formattedParent,
    clientEvent: clientEvent,
  };
  client
    .createClientEvent(request)
    .then(responses => {
      const response = responses[0];
      console.log('Created client event');
      console.log(`Response: ${response}`);
    })
    .catch(err => {
      console.error(err);
    });
}

Python

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

Per autenticarti a CTS, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


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 Data e ora con precisione al nanosecondo. Questo timestamp deve riflettere il momento in cui l'evento non è stato realmente inviato, ma non quando è stato inviato.

  • Gli oggetti del campo unione event: jobEvent vengono utilizzati con la funzionalità Ricerca di lavoro e vengono emessi quando un candidato interagisce con il servizio.

Messaggio di evento di esempio

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

JSON

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

// Union field event can be only be a jobEvent: "jobEvent": { object (JobEvent) }, // 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. Il candidato 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 inviato al server del cliente contiene un requestId univoco (ad es. 8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==). Utilizza questo requestId per tutti i messaggi futuri relativi a questa particolare 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. 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. La persona in cerca di lavoro fa domanda per l'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 il candidato completa una richiesta interna, invia a 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: nella risposta della chiamata all'API SearchJobsRequest viene generato un nuovo requestId che genera la seconda pagina dei risultati. (ad esempio 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. Il candidato esegue una ricerca. Ad esempio: Product mgr SF

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

    L'oggetto di risposta alla ricerca di lavoro contiene un requestId univoco (ad esempio: a2179a9b-cf73-413e-8076-98af08b991ad). Usa questo requestId per tutto il futuro messaggi relativi a questa chiamata 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. 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. La persona in cerca di impiego esegue una domanda con un solo clic per accedere a un lavoro, come descritto 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. Il candidato torna ai risultati di ricerca e si candida per un lavoro direttamente dalla pagina dei risultati di ricerca. La procedura di candidatura reindirizza la persona in cerca di lavoro a un'altra dominio esterno al sito tenant (applicazione esterna) da cui progressi del richiedente non possono essere monitorati.

    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"]}
    }
    

    È diverso da APPLICATION_REDIRECT, in cui chi cerca un lavoro si trova nella pagina della descrizione dell'offerta al momento del reindirizzamento.

Verificare l'implementazione degli eventi client

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