Melhore o modelo pré-preparado com dados de eventos do cliente (v4beta1)

A Cloud Talent Solution é um serviço que aplica a aprendizagem automática à sua experiência de pesquisa de emprego, devolvendo resultados de alta qualidade aos candidatos a emprego que vão muito além das limitações dos métodos típicos baseados em palavras-chave. O CTS aplica imediatamente modelos de relevância e ontologias de empregos/competências aos detalhes dos seus empregos. Pode melhorar os resultados devolvidos aos candidatos a emprego registando eventos do cliente com base na atividade do candidato.

Registe eventos para clientes através de createClientEventRequest

Quando um candidato a emprego realiza uma ação específica, pode usar a Pesquisa de emprego para registar essa ação. Por exemplo, o candidato a emprego ou outra entidade que interaja com o serviço teve um emprego (ou uma lista de empregos) apresentado na sua vista, como numa lista de resultados da pesquisa num formato comprimido ou recortado. Pode enviar um evento IMPRESSION para o Cloud Talent Solution para fornecer dados sobre o contexto da pesquisa e os resultados que um candidato a emprego pode ver. Quando o candidato clica num resultado de emprego para ver a descrição completa do emprego, pode enviar um evento VIEW que regista o interesse do candidato na posição escolhida.

O exemplo seguinte ilustra como enviar uma mensagem para a Cloud Talent Solution usando uma API. O candidato a emprego ou outra entidade que interage com o serviço teve um emprego (ou uma lista de empregos) apresentado na respetiva vista, como numa lista de resultados da pesquisa num formato comprimido ou recortado. Este evento está normalmente associado a uma pessoa à procura de emprego que vê uma lista de empregos numa única página.

Go

Para saber como instalar e usar a biblioteca cliente para o CTS, consulte o artigo Bibliotecas cliente do CTS. Para mais informações, consulte a documentação de referência da API Go CTS.

Para se autenticar no CTS, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

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

Para mais informações sobre a instalação e a criação de um cliente da Cloud Talent Solution, consulte as bibliotecas de cliente da 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

Para mais informações sobre a instalação e a criação de um cliente da Cloud Talent Solution, consulte o artigo Bibliotecas de cliente da 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)

Mensagens de eventos

Campos obrigatórios:

  • eventId (Definido pelo cliente): cada mensagem enviada para a Cloud Talent Solution tem de ter um eventId único. Como prática recomendada, incorpore a data/hora ao definir este campo para garantir que não existem duplicados. O comprimento máximo deste campo é de 255 carateres.

  • requestId: o valor de requestId devolvido pelo objeto de resposta da pesquisa. Este valor é exclusivo de uma chamada API SearchJobsRequest específica. É usado para todas as mensagens subsequentes provenientes do evento IMPRESSION de pesquisa original. Quando é feita uma nova chamada API SearchJobsRequest (por exemplo, o candidato vai para a página seguinte de resultados), o requestId muda.

  • createTime A data/hora do evento (no formato Timestamp, com precisão de nanosegundos). Esta data/hora deve refletir o momento em que o evento ocorreu realmente e não o momento em que a mensagem foi enviada.

  • Campo de união event: pode ser jobEvent ou profileEvent. jobEvent são usados com a funcionalidade de pesquisa de emprego e são emitidos quando um candidato a emprego interage com o serviço.

Mensagem de evento de exemplo

A chamada API no exemplo de código acima deve gerar uma mensagem JSON no seguinte 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. }

Cenários e fluxos de trabalho

Seguem-se dois cenários de exemplo de um candidato a emprego que pesquisa, vê e candidata-se a um emprego.

Fluxo de trabalho 1

  1. A pessoa à procura de emprego faz uma pesquisa. Por exemplo: Product mgr SF

    Os resultados da pesquisa são devolvidos à pessoa à procura de emprego.

    O objeto de resposta de pesquisa de emprego enviado de volta para o servidor do cliente contém um requestId único (por exemplo: 8d2bdd5d-1361-42a5-a0fd-bd2b58b7d8fb:APAb7ISd4Sc5faibw2V5hTU/OoC2WAW5AA==). Use este requestId para todas as mensagens futuras relacionadas com esta chamada da API SearchJobsRequest específica.

    Enviar uma mensagem IMPRESSION para a Cloud Talent Solution.

    Mensagem de evento de exemplo:

    {
      "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. O candidato seleciona um resultado (uma oferta de emprego) para ver os detalhes completos do emprego.

    Enviar uma mensagem VIEW para 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. A pessoa à procura de emprego candidata-se à oferta de emprego visualizada.

    a. Se o candidato for redirecionado para uma página no mesmo domínio (uma página de candidatura interna), envie uma mensagem APPLICATION_START para a Cloud Talent Solution.

    {
      "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 o candidato for redirecionado para uma página de candidatura externa, envie uma mensagem APPLICATION_REDIRECT para a Cloud Talent Solution.

    {
      "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 o candidato conclui uma candidatura interna, envie uma mensagem APPLICATION_FINISH para a Cloud Talent Solution:

    {
      "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. O candidato volta aos resultados da pesquisa e continua para a página 2 (ou continua para a página 2 sem ter clicado numa oferta de emprego).

    Envie à Cloud Talent Solution uma mensagem IMPRESSION com o conjunto seguinte de resultados da página 2. Nota: existe um novo requestId que é gerado na resposta da chamada da API SearchJobsRequest que gera a segunda página de resultados. (por exemplo, 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. O candidato continua para a página 3 dos resultados da pesquisa.

    Envie uma mensagem IMPRESSION para a Cloud Talent Solution com o conjunto seguinte de resultados. NOTA: existe um novo requestId (por exemplo, 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"]}
    }
    

Fluxo de trabalho 2

  1. A pessoa à procura de emprego faz uma pesquisa. Por exemplo: Product mgr SF

    Os resultados da pesquisa são devolvidos à pessoa à procura de emprego.

    O objeto de resposta de pesquisa de emprego contém um requestId exclusivo (por exemplo: a2179a9b-cf73-413e-8076-98af08b991ad). Use este requestId para todas as mensagens futuras relacionadas com esta chamada API SearchJobsRequest.

    Enviar uma mensagem IMPRESSION para 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. O candidato seleciona um resultado (uma oferta de emprego) para ver os detalhes completos do emprego.

    Enviar uma mensagem VIEW para 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. O candidato a emprego realiza uma candidatura com um único clique a um emprego, conforme descrito em APPLICATION_QUICK_SUBMISSION.

    Envie uma mensagem APPLICATION_QUICK_SUBMISSION para a Cloud Talent Solution com o conjunto seguinte de resultados.

    {
      "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. O candidato realiza as seguintes ações.

    a. O candidato a emprego volta aos resultados da pesquisa e candidata-se a um emprego diretamente a partir da página de resultados da pesquisa. O processo de candidatura é mais longo do que o definido em APPLICATION_QUICK_SUBMISSION (ou seja, é um processo de candidatura de vários passos).

    Enviar uma mensagem APPLICATION_START_FROM_SERP para a Cloud Talent Solution.

    {
      "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. O candidato a emprego conclui a candidatura ao emprego. Enviar uma mensagem APPLICATION_FINISH para 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. O candidato a emprego volta aos resultados da pesquisa e candidata-se a um emprego diretamente a partir da página de resultados da pesquisa. O processo de candidatura redireciona o candidato para outro domínio que está fora do site do inquilino (candidatura externa) a partir do qual não é possível acompanhar o progresso do candidato.

    Enviar uma mensagem APPLICATION_REDIRECT_FROM_SERP para 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"]}
    }
    

    Isto é diferente de APPLICATION_REDIRECT, em que um candidato está na página de descrição do emprego quando é reencaminhado.

Valide a implementação de eventos de cliente

O Cloud Talent Solution oferece-lhe ferramentas de autosserviço que pode usar para validar a implementação de eventos de cliente. Consulte as ferramentas de gestão para mais informações acerca das opções de autosserviço disponíveis.