Vortrainiertes Modell mit Clientereignisdaten verbessern (v4beta1)

Cloud Talent Solution ist ein Dienst, der die Suche nach Jobs mit maschinellem Lernen kombiniert und Jobsuchenden qualitativ hochwertige Ergebnisse liefert, die weit über die Möglichkeiten von traditionellen Suchmethoden mit Suchbegriffen hinausgehen. CTS wendet vorkonfigurierte Relevanzmodelle und Job-/Qualifikationsontologien auf Ihre Jobdetails an. Sie können die an Jobsuchende zurückgegebenen Ergebnisse verbessern. Dazu zeichnen Sie Clientereignisse basierend auf der Aktivität des Jobsuchenden auf. Hinweis: Einige der in dieser Anleitung verlinkten Ressourcen stehen ggf. nur auf Englisch zur Verfügung.

Zeichnen Sie Client-Ereignisse mit createClientEventRequest auf

Wenn ein Jobsuchender eine bestimmte Aktion ausführt, können Sie diese Aktion mithilfe der Jobsuche aufzeichnen. Beispielsweise hat sich der Jobsuchende oder die sonstige mit dem Dienst interagierende Entität einen Job (oder eine Liste von Jobs) angesehen, etwa in einer Liste mit Suchergebnissen in einem komprimierten oder verkürzten Format. Sie können ein IMPRESSION-Ereignis an Cloud Talent Solution senden, um Daten zum Kontext der Suche und zu den Ergebnissen bereitzustellen, die ein Jobsuchender sehen kann. Wenn der Jobsuchende auf ein Stellenergebnis klickt, um die vollständige Stellenbeschreibung anzuzeigen, können Sie ein VIEW-Ereignis senden, das das Interesse des Jobsuchenden an der ausgewählten Stelle registriert.

Das folgende Beispiel zeigt, wie Sie mithilfe der API eine Nachricht an Cloud Talent Solution senden. Der Arbeitssuchende oder eine andere Entität, die mit dem Dienst interagiert, hat einen Job (oder eine Liste von Jobs) in seiner Ansicht gerendert, z. B. in einer Liste von Suchergebnissen in einem komprimierten oder abgeschnittenen Format. Dieses Ereignis ist typisch für einen Jobsuchenden, der sich eine Liste von Jobs auf einer einzelnen Seite ansieht.

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für CTS finden Sie unter CTS-Clientbibliotheken. Weitere Informationen finden Sie in der CTS Go-API Referenzdokumentation.

Richten Sie zur Authentifizierung bei CTS die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Weitere Informationen zum Installieren und Erstellen eines Cloud Talent Solution-Clients finden Sie unter Cloud Talent Solution-Clientbibliotheken.


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

Weitere Informationen zum Installieren und Erstellen eines Cloud Talent Solution-Clients finden Sie unter Cloud Talent Solution-Clientbibliotheken.


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)

Ereignismeldungen

Pflichtfelder:

  • eventId (vom Kunden definiert): Jede an Cloud Talent Solution gesendete Nachricht muss eine eindeutige eventId haben. Beziehen Sie beim Definieren dieses Feldes möglichst den Zeitstempel ein, um Duplikate zu vermeiden. Die maximale Länge dieses Feldes beträgt 255 Zeichen.

  • requestId: Der Wert des requestId, der vom Suchantwortobjekt zurückgegeben wird. Dieser Wert ist für einen bestimmten SearchJobsRequest API-Aufruf eindeutig. Es wird für alle nachfolgenden Nachrichten verwendet, die aus dem ursprünglichen Suchereignis IMPRESSION stammen. Wenn ein neuer SearchJobsRequest API-Aufruf erfolgt (Beispiel: Der Jobsuchende wechselt zur nächsten Ergebnisseite), ändert sich requestId.

  • createTime Der Zeitstempel des Ereignisses (im Zeitstempel -Format, auf Nanosekunden genau. Dieser Zeitstempel sollte angeben, wann das Ereignis tatsächlich aufgetreten ist, nicht wann die Nachricht gesendet wurde.

  • Vereinigungsfeld event: Kann entweder jobEvent oder profileEvent sein. jobEvent Objekte werden mit der Funktion "Jobsuche" verwendet und ausgegeben, wenn ein Jobsuchender mit dem Dienst interagiert.

Beispiel für die Ereignisnachricht

Der API-Aufruf im obigen Codebeispiel sollte eine JSON-Nachricht im folgenden Format generieren:

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. }

Szenarien und Workflows

Im Folgenden finden Sie zwei Beispielszenarien, in denen Jobsuchende Stellen suchen, ansehen und sich dafür bewerben.

Workflow 1

  1. Der Jobsuchende führt eine Suche aus. Beispiel: Produkt-Mgr SF

    An den Jobsuchenden werden Suchergebnisse zurückgegeben.

    Das an den Server des Kunden zurückgesendete Antwortobjekt für die Jobsuche enthält eine eindeutige requestId (zum Beispiel: 8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==). Verwenden Sie diese requestId für alle zukünftigen Nachrichten, die sich auf diesen bestimmten SearchJobsRequest-API-Aufruf beziehen.

    Eine IMPRESSION-Nachricht wird an Cloud Talent Solution gesendet.

    Beispiel für die Ereignisnachricht:

    {
      "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. Der Jobsuchende wählt ein Ergebnis (eine Jobanzeige) aus, um alle Details des Jobs zu sehen.

    Eine VIEW-Nachricht wird an Cloud Talent Solution gesendet.

    {
      "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. Der Jobsuchende bewirbt sich für den Job, den er sich angesehen hat.

    a. Wird der Jobsuchende an eine Seite innerhalb derselben Domain (interne Bewerbungsseite) weitergeleitet, wird eine Nachricht vom Typ APPLICATION_START an Cloud Talent Solution gesendet.

    {
      "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. Wird der Jobsuchende an eine externe Bewerbungsseite weitergeleitet, wird eine Nachricht vom Typ APPLICATION_REDIRECT an Cloud Talent Solution gesendet.

    {
      "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. Wenn der Stellensuchende eine interne Bewerbung abgeschlossen hat, senden Sie Cloud Talent Solution eine APPLICATION_FINISH-Nachricht:

    {
      "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. Der Jobsuchende kehrt zu den Suchergebnissen zurück und fährt mit Seite 2 fort oder er fährt mit Seite 2 fort, ohne auf eine Stellenanzeige geklickt zu haben.

    An Cloud Talent Solution wird eine IMPRESSION-Nachricht mit den nächsten Ergebnissen von Seite 2 gesendet. Hinweis: In der Antwort des SearchJobsRequest API-Aufrufs, der die zweite Ergebnisseite generiert, wird eine neue requestId generiert. (Zum Beispiel 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. Der Jobsuchende fährt mit Seite 3 der Suchergebnisse fort.

    An Cloud Talent Solution wird eine IMPRESSION-Nachricht mit den nächsten Ergebnissen gesendet. HINWEIS: Es gibt eine neue requestId (zum Beispiel 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"]}
    }
    

Workflow 2

  1. Der Jobsuchende führt eine Suche aus. Beispiel: Produkt-Mgr SF

    An den Jobsuchenden werden Suchergebnisse zurückgegeben.

    Das Antwortobjekt für die Jobsuche enthält ein eindeutiges requestId (zum Beispiel: a2179a9b-cf73-413e-8076-98af08b991ad). Verwenden Sie diese requestId für alle zukünftigen Nachrichten im Zusammenhang mit diesem SearchJobsRequest API-Aufruf.

    Eine IMPRESSION-Nachricht wird an Cloud Talent Solution gesendet.

    {
      "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. Der Jobsuchende wählt ein Ergebnis (eine Jobanzeige) aus, um alle Details des Jobs zu sehen.

    Eine VIEW-Nachricht wird an Cloud Talent Solution gesendet.

    {
      "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. Der Jobsuchende führt eine Einzelklick-Anwendung für einen Job aus, wie in APPLICATION_QUICK_SUBMISSION beschrieben.

    An Cloud Talent Solution wird eine Nachricht vom Typ APPLICATION_QUICK_SUBMISSION mit den nächsten Ergebnissen gesendet.

    {
      "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. Der Jobsuchende führt folgende Schritte aus.

    a. Der Jobsuchende kehrt zu den Suchergebnissen zurück und bewirbt sich direkt auf der Suchergebnisseite für einen Job. Der Bewerbungsprozess ist länger als in APPLICATION_QUICK_SUBMISSION definiert, setzt sich also aus mehreren Schritten zusammen.

    Eine APPLICATION_START_FROM_SERP-Nachricht wird an Cloud Talent Solution gesendet.

    {
      "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. Der Jobsuchende ist mit der Bewerbung für den Job fertig. Eine APPLICATION_FINISH-Nachricht wird an Cloud Talent Solution gesendet.

    {
      "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. Der Jobsuchende kehrt zu den Suchergebnissen zurück und bewirbt sich direkt auf der Suchergebnisseite für einen Job. Der Bewerbungsprozess leitet den Jobsuchenden an eine andere Domain weiter, die sich außerhalb der Mandanten-Website befindet (externe Bewerbung) und von der aus die weiteren Aktionen des Bewerbers nicht nachverfolgt werden können.

    Eine APPLICATION_REDIRECT_FROM_SERP-Nachricht wird an Cloud Talent Solution gesendet.

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

    Dies unterscheidet sich von der Nachricht APPLICATION_REDIRECT, bei der ein Jobsuchender von der Seite mit der Jobbeschreibung aus weitergeleitet wird.

Implementierung des Clientereignisses bestätigen

Cloud Talent Solution bietet Ihnen Self-Service-Tools, mit denen Sie die Implementierung von Clientereignissen bestätigen können. Weitere Informationen zu den verfügbaren Self-Service-Optionen finden Sie unter Managementtools.