feat: Add CCAI API

PiperOrigin-RevId: 361003369
This commit is contained in:
Google APIs 2021-03-04 14:23:03 -08:00 committed by Copybara-Service
parent 4b4e8be384
commit 369e98ef9c
13 changed files with 3055 additions and 0 deletions

View file

@ -22,14 +22,20 @@ proto_library(
name = "dialogflow_proto",
srcs = [
"agent.proto",
"answer_record.proto",
"audio_config.proto",
"context.proto",
"conversation.proto",
"conversation_event.proto",
"conversation_profile.proto",
"document.proto",
"entity_type.proto",
"environment.proto",
"gcs.proto",
"human_agent_assistant_event.proto",
"intent.proto",
"knowledge_base.proto",
"participant.proto",
"session.proto",
"session_entity_type.proto",
"validation_result.proto",
@ -43,6 +49,7 @@ proto_library(
"//google/longrunning:operations_proto",
"//google/rpc:status_proto",
"//google/type:latlng_proto",
"@com_google_protobuf//:any_proto",
"@com_google_protobuf//:duration_proto",
"@com_google_protobuf//:empty_proto",
"@com_google_protobuf//:field_mask_proto",
@ -56,6 +63,7 @@ proto_library_with_info(
deps = [
":dialogflow_proto",
"//google/cloud:common_resources_proto",
"//google/cloud/dialogflow:common_resources_proto",
],
)
@ -148,6 +156,7 @@ go_gapic_library(
"//google/longrunning:longrunning_go_proto",
"@com_google_cloud_go//longrunning:go_default_library",
"@com_google_cloud_go//longrunning/autogen:go_default_library",
"@io_bazel_rules_go//proto/wkt:any_go_proto",
"@io_bazel_rules_go//proto/wkt:duration_go_proto",
"@io_bazel_rules_go//proto/wkt:struct_go_proto",
],

View file

@ -0,0 +1,322 @@
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.dialogflow.v2beta1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/dialogflow/v2beta1/participant.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Dialogflow.V2beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1;dialogflow";
option java_multiple_files = true;
option java_outer_classname = "AnswerRecordsProto";
option java_package = "com.google.cloud.dialogflow.v2beta1";
option objc_class_prefix = "DF";
// Service for managing [AnswerRecords][google.cloud.dialogflow.v2beta1.AnswerRecord].
service AnswerRecords {
option (google.api.default_host) = "dialogflow.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/dialogflow";
// Deprecated.
// Retrieves a specific answer record.
rpc GetAnswerRecord(GetAnswerRecordRequest) returns (AnswerRecord) {
option deprecated = true;
option (google.api.http) = {
get: "/v2beta1/{name=projects/*/answerRecords/*}"
additional_bindings {
get: "/v2beta1/{name=projects/*/locations/*/answerRecords/*}"
}
};
}
// Returns the list of all answer records in the specified project in reverse
// chronological order.
rpc ListAnswerRecords(ListAnswerRecordsRequest) returns (ListAnswerRecordsResponse) {
option (google.api.http) = {
get: "/v2beta1/{parent=projects/*}/answerRecords"
additional_bindings {
get: "/v2beta1/{parent=projects/*/locations/*}/answerRecords"
}
};
option (google.api.method_signature) = "parent";
}
// Updates the specified answer record.
rpc UpdateAnswerRecord(UpdateAnswerRecordRequest) returns (AnswerRecord) {
option (google.api.http) = {
patch: "/v2beta1/{answer_record.name=projects/*/answerRecords/*}"
body: "answer_record"
additional_bindings {
patch: "/v2beta1/{answer_record.name=projects/*/locations/*/answerRecords/*}"
body: "answer_record"
}
};
option (google.api.method_signature) = "answer_record,update_mask";
}
}
// Answer records are records to manage answer history and feedbacks for
// Dialogflow.
//
// Currently, answer record includes:
//
// - human agent assistant article suggestion
// - human agent assistant faq article
//
// It doesn't include:
//
// - `DetectIntent` intent matching
// - `DetectIntent` knowledge
//
// Answer records are not related to the conversation history in the
// Dialogflow Console. A Record is generated even when the end-user disables
// conversation history in the console. Records are created when there's a human
// agent assistant suggestion generated.
//
// A typical workflow for customers provide feedback to an answer is:
//
// 1. For human agent assistant, customers get suggestion via ListSuggestions
// API. Together with the answers, [AnswerRecord.name][google.cloud.dialogflow.v2beta1.AnswerRecord.name] are returned to the
// customers.
// 2. The customer uses the [AnswerRecord.name][google.cloud.dialogflow.v2beta1.AnswerRecord.name] to call the
// [UpdateAnswerRecord][] method to send feedback about a specific answer
// that they believe is wrong.
message AnswerRecord {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/AnswerRecord"
pattern: "projects/{project}/answerRecords/{answer_record}"
pattern: "projects/{project}/locations/{location}/answerRecords/{answer_record}"
};
// The unique identifier of this answer record.
// Required for [AnswerRecords.UpdateAnswerRecord][google.cloud.dialogflow.v2beta1.AnswerRecords.UpdateAnswerRecord] method.
// Format: `projects/<Project ID>/locations/<Location
// ID>/answerRecords/<Answer Record ID>`.
string name = 1;
// Optional. The AnswerFeedback for this record. You can set this with
// [AnswerRecords.UpdateAnswerRecord][google.cloud.dialogflow.v2beta1.AnswerRecords.UpdateAnswerRecord] in order to give us feedback about
// this answer.
AnswerFeedback answer_feedback = 3;
// Output only. The record for this answer.
oneof record {
// Output only. The record for human agent assistant.
AgentAssistantRecord agent_assistant_record = 4;
}
}
// Represents a record of a human agent assistant answer.
message AgentAssistantRecord {
// Output only. The agent assistant answer.
oneof answer {
// Output only. The article suggestion answer.
ArticleAnswer article_suggestion_answer = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The FAQ answer.
FaqAnswer faq_answer = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
}
}
// Represents feedback the customer has about the quality & correctness of a
// certain answer in a conversation.
message AnswerFeedback {
// The correctness level of an answer.
enum CorrectnessLevel {
// Correctness level unspecified.
CORRECTNESS_LEVEL_UNSPECIFIED = 0;
// Answer is totally wrong.
NOT_CORRECT = 1;
// Answer is partially correct.
PARTIALLY_CORRECT = 2;
// Answer is fully correct.
FULLY_CORRECT = 3;
}
// The correctness level of the specific answer.
CorrectnessLevel correctness_level = 1;
// Normally, detail feedback is provided when answer is not fully correct.
oneof detail_feedback {
// Optional. Detail feedback of agent assistant suggestions.
AgentAssistantFeedback agent_assistant_detail_feedback = 2;
}
// Indicates whether the answer/item was clicked by the human agent
// or not. Default to false.
bool clicked = 3;
// Time when the answer/item was clicked.
google.protobuf.Timestamp click_time = 5;
// Indicates whether the answer/item was displayed to the human
// agent in the agent desktop UI. Default to false.
bool displayed = 4;
// Time when the answer/item was displayed.
google.protobuf.Timestamp display_time = 6;
}
// Detail feedback of Agent Assistant result.
message AgentAssistantFeedback {
// Feedback for conversation summarization.
message SummarizationFeedback {
// Timestamp when composing of the summary starts.
google.protobuf.Timestamp start_timestamp = 1;
// Timestamp when the summary was submitted.
google.protobuf.Timestamp submit_timestamp = 2;
// Text of actual submitted summary.
string summary_text = 3;
}
// Relevance of an answer.
enum AnswerRelevance {
// Answer relevance unspecified.
ANSWER_RELEVANCE_UNSPECIFIED = 0;
// Answer is irrelevant to query.
IRRELEVANT = 1;
// Answer is relevant to query.
RELEVANT = 2;
}
// Correctness of document.
enum DocumentCorrectness {
// Document correctness unspecified.
DOCUMENT_CORRECTNESS_UNSPECIFIED = 0;
// Information in document is incorrect.
INCORRECT = 1;
// Information in document is correct.
CORRECT = 2;
}
// Efficiency of document.
enum DocumentEfficiency {
// Document efficiency unspecified.
DOCUMENT_EFFICIENCY_UNSPECIFIED = 0;
// Document is inefficient.
INEFFICIENT = 1;
// Document is efficient.
EFFICIENT = 2;
}
// Optional. Whether or not the suggested answer is relevant.
//
// For example:
//
// * Query: "Can I change my mailing address?"
// * Suggested document says: "Items must be returned/exchanged within 60
// days of the purchase date."
// * [answer_relevance][google.cloud.dialogflow.v2beta1.AgentAssistantFeedback.answer_relevance]: [AnswerRelevance.IRRELEVANT][google.cloud.dialogflow.v2beta1.AgentAssistantFeedback.AnswerRelevance.IRRELEVANT]
AnswerRelevance answer_relevance = 1;
// Optional. Whether or not the information in the document is correct.
//
// For example:
//
// * Query: "Can I return the package in 2 days once received?"
// * Suggested document says: "Items must be returned/exchanged within 60
// days of the purchase date."
// * Ground truth: "No return or exchange is allowed."
// * [document_correctness]: INCORRECT
DocumentCorrectness document_correctness = 2;
// Optional. Whether or not the suggested document is efficient. For example,
// if the document is poorly written, hard to understand, hard to use or
// too long to find useful information, [document_efficiency][google.cloud.dialogflow.v2beta1.AgentAssistantFeedback.document_efficiency] is
// [DocumentEfficiency.INEFFICIENT][google.cloud.dialogflow.v2beta1.AgentAssistantFeedback.DocumentEfficiency.INEFFICIENT].
DocumentEfficiency document_efficiency = 3;
// Feedback for conversation summarization.
SummarizationFeedback summarization_feedback = 4;
}
// Request message for [AnswerRecords.GetAnswerRecord][google.cloud.dialogflow.v2beta1.AnswerRecords.GetAnswerRecord].
message GetAnswerRecordRequest {
// Required. The name of the answer record to retrieve.
// Format: `projects/<Project ID>/locations/<Location
// ID>/answerRecords/<Answer Record Id>`.
string name = 1;
}
// Request message for [AnswerRecords.ListAnswerRecords][google.cloud.dialogflow.v2beta1.AnswerRecords.ListAnswerRecords].
message ListAnswerRecordsRequest {
// Required. The project to list all answer records for in reverse
// chronological order. Format: `projects/<Project ID>/locations/<Location
// ID>`.
string parent = 1 [(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/AnswerRecord"
}];
// Optional. The maximum number of records to return in a single page.
// The server may return fewer records than this. If unspecified, we use 10.
// The maximum is 100.
int32 page_size = 3;
// Optional. The
// [ListAnswerRecordsResponse.next_page_token][google.cloud.dialogflow.v2beta1.ListAnswerRecordsResponse.next_page_token]
// value returned from a previous list request used to continue listing on
// the next page.
string page_token = 4;
}
// Response message for [AnswerRecords.ListAnswerRecords][google.cloud.dialogflow.v2beta1.AnswerRecords.ListAnswerRecords].
message ListAnswerRecordsResponse {
// The list of answer records.
repeated AnswerRecord answer_records = 1;
// A token to retrieve next page of results. Or empty if there are no more
// results.
// Pass this value in the
// [ListAnswerRecordsRequest.page_token][google.cloud.dialogflow.v2beta1.ListAnswerRecordsRequest.page_token]
// field in the subsequent call to `ListAnswerRecords` method to retrieve the
// next page of results.
string next_page_token = 2;
}
// Request message for [AnswerRecords.UpdateAnswerRecord][google.cloud.dialogflow.v2beta1.AnswerRecords.UpdateAnswerRecord].
message UpdateAnswerRecordRequest {
// Required. Answer record to update.
AnswerRecord answer_record = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/AnswerRecord"
}
];
// Required. The mask to control which fields get updated.
google.protobuf.FieldMask update_mask = 2;
}

View file

@ -248,6 +248,12 @@ message InputAudioConfig {
// Note: When specified, InputAudioConfig.single_utterance takes precedence
// over StreamingDetectIntentRequest.single_utterance.
bool single_utterance = 8;
// Only used in [Participants.AnalyzeContent][google.cloud.dialogflow.v2beta1.Participants.AnalyzeContent] and
// [Participants.StreamingAnalyzeContent][google.cloud.dialogflow.v2beta1.Participants.StreamingAnalyzeContent].
// If `false` and recognition doesn't return any result, trigger
// `NO_SPEECH_RECOGNIZED` event to Dialogflow agent.
bool disable_no_speech_recognized_event = 14;
}
// Description of which voice to use for speech synthesis.
@ -360,6 +366,15 @@ enum OutputAudioEncoding {
OUTPUT_AUDIO_ENCODING_OGG_OPUS = 3;
}
// Configures speech transcription for [ConversationProfile][google.cloud.dialogflow.v2beta1.ConversationProfile].
message SpeechToTextConfig {
// Optional. The speech model used in speech to text.
// `SPEECH_MODEL_VARIANT_UNSPECIFIED`, `USE_BEST_AVAILABLE` will be treated as
// `USE_ENHANCED`. It can be overridden in [AnalyzeContentRequest][google.cloud.dialogflow.v2beta1.AnalyzeContentRequest] and
// [StreamingAnalyzeContentRequest][google.cloud.dialogflow.v2beta1.StreamingAnalyzeContentRequest] request.
SpeechModelVariant speech_model_variant = 1 [(google.api.field_behavior) = OPTIONAL];
}
// [DTMF](https://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling)
// digit in Telephony Gateway.
enum TelephonyDtmf {

View file

@ -0,0 +1,581 @@
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.dialogflow.v2beta1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/dialogflow/v2beta1/gcs.proto";
import "google/cloud/dialogflow/v2beta1/participant.proto";
import "google/cloud/dialogflow/v2beta1/session.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
import "google/rpc/status.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Dialogflow.V2beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1;dialogflow";
option java_multiple_files = true;
option java_outer_classname = "ConversationProto";
option java_package = "com.google.cloud.dialogflow.v2beta1";
option objc_class_prefix = "DF";
// Service for managing [Conversations][google.cloud.dialogflow.v2beta1.Conversation].
service Conversations {
option (google.api.default_host) = "dialogflow.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/dialogflow";
// Creates a new conversation. Conversations are auto-completed after 24
// hours.
//
// Conversation Lifecycle:
// There are two stages during a conversation: Automated Agent Stage and
// Assist Stage.
//
// For Automated Agent Stage, there will be a dialogflow agent responding to
// user queries.
//
// For Assist Stage, there's no dialogflow agent responding to user queries.
// But we will provide suggestions which are generated from conversation.
//
// If [Conversation.conversation_profile][google.cloud.dialogflow.v2beta1.Conversation.conversation_profile] is configured for a dialogflow
// agent, conversation will start from `Automated Agent Stage`, otherwise, it
// will start from `Assist Stage`. And during `Automated Agent Stage`, once an
// [Intent][google.cloud.dialogflow.v2beta1.Intent] with [Intent.live_agent_handoff][google.cloud.dialogflow.v2beta1.Intent.live_agent_handoff] is triggered, conversation
// will transfer to Assist Stage.
rpc CreateConversation(CreateConversationRequest) returns (Conversation) {
option (google.api.http) = {
post: "/v2beta1/{parent=projects/*}/conversations"
body: "conversation"
additional_bindings {
post: "/v2beta1/{parent=projects/*/locations/*}/conversations"
body: "conversation"
}
};
option (google.api.method_signature) = "parent,conversation";
}
// Returns the list of all conversations in the specified project.
rpc ListConversations(ListConversationsRequest) returns (ListConversationsResponse) {
option (google.api.http) = {
get: "/v2beta1/{parent=projects/*}/conversations"
additional_bindings {
get: "/v2beta1/{parent=projects/*/locations/*}/conversations"
}
};
option (google.api.method_signature) = "parent";
}
// Retrieves the specific conversation.
rpc GetConversation(GetConversationRequest) returns (Conversation) {
option (google.api.http) = {
get: "/v2beta1/{name=projects/*/conversations/*}"
additional_bindings {
get: "/v2beta1/{name=projects/*/locations/*/conversations/*}"
}
};
option (google.api.method_signature) = "name";
}
// Completes the specified conversation. Finished conversations are purged
// from the database after 30 days.
rpc CompleteConversation(CompleteConversationRequest) returns (Conversation) {
option (google.api.http) = {
post: "/v2beta1/{name=projects/*/conversations/*}:complete"
body: "*"
additional_bindings {
post: "/v2beta1/{name=projects/*/locations/*/conversations/*}:complete"
body: "*"
}
};
option (google.api.method_signature) = "name";
}
// Creates a call matcher that links incoming SIP calls to the specified
// conversation if they fulfill specified criteria.
rpc CreateCallMatcher(CreateCallMatcherRequest) returns (CallMatcher) {
option (google.api.http) = {
post: "/v2beta1/{parent=projects/*/conversations/*}/callMatchers"
body: "call_matcher"
additional_bindings {
post: "/v2beta1/{parent=projects/*/locations/*/conversations/*}/callMatchers"
body: "*"
}
};
option (google.api.method_signature) = "parent,call_matcher";
}
// Returns the list of all call matchers in the specified conversation.
rpc ListCallMatchers(ListCallMatchersRequest) returns (ListCallMatchersResponse) {
option (google.api.http) = {
get: "/v2beta1/{parent=projects/*/conversations/*}/callMatchers"
additional_bindings {
get: "/v2beta1/{parent=projects/*/locations/*/conversations/*}/callMatchers"
}
};
option (google.api.method_signature) = "parent";
}
// Requests deletion of a call matcher.
rpc DeleteCallMatcher(DeleteCallMatcherRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v2beta1/{name=projects/*/conversations/*/callMatchers/*}"
additional_bindings {
delete: "/v2beta1/{name=projects/*/locations/*/conversations/*/callMatchers/*}"
}
};
option (google.api.method_signature) = "name";
}
// Batch ingests messages to conversation. Customers can use this RPC to
// ingest historical messages to conversation.
rpc BatchCreateMessages(BatchCreateMessagesRequest) returns (BatchCreateMessagesResponse) {
option (google.api.http) = {
post: "/v2beta1/{parent=projects/*/conversations/*}/messages:batchCreate"
body: "*"
additional_bindings {
post: "/v2beta1/{parent=projects/*/locations/*/conversations/*}/messages:batchCreate"
body: "*"
}
};
option (google.api.method_signature) = "parent";
}
// Lists messages that belong to a given conversation.
// `messages` are ordered by `create_time` in descending order. To fetch
// updates without duplication, send request with filter
// `create_time_epoch_microseconds >
// [first item's create_time of previous request]` and empty page_token.
rpc ListMessages(ListMessagesRequest) returns (ListMessagesResponse) {
option (google.api.http) = {
get: "/v2beta1/{parent=projects/*/conversations/*}/messages"
additional_bindings {
get: "/v2beta1/{parent=projects/*/locations/*/conversations/*}/messages"
}
};
option (google.api.method_signature) = "parent";
}
}
// Represents a conversation.
// A conversation is an interaction between an agent, including live agents
// and Dialogflow agents, and a support customer. Conversations can
// include phone calls and text-based chat sessions.
message Conversation {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/Conversation"
pattern: "projects/{project}/conversations/{conversation}"
pattern: "projects/{project}/locations/{location}/conversations/{conversation}"
};
// Enumeration of the completion status of the conversation.
enum LifecycleState {
// Unknown.
LIFECYCLE_STATE_UNSPECIFIED = 0;
// Conversation is currently open for media analysis.
IN_PROGRESS = 1;
// Conversation has been completed.
COMPLETED = 2;
}
// Enumeration of the different conversation stages a conversation can be in.
// Reference:
// https://cloud.google.com/dialogflow/priv/docs/contact-center/basics#stages
enum ConversationStage {
// Unknown. Should never be used after a conversation is successfully
// created.
CONVERSATION_STAGE_UNSPECIFIED = 0;
// The conversation should return virtual agent responses into the
// conversation.
VIRTUAL_AGENT_STAGE = 1;
// The conversation should not provide responses, just listen and provide
// suggestions.
HUMAN_ASSIST_STAGE = 2;
}
// Output only. The unique identifier of this conversation.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>`.
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The current state of the Conversation.
LifecycleState lifecycle_state = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
// Required. The Conversation Profile to be used to configure this
// Conversation. This field cannot be updated.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversationProfiles/<Conversation Profile ID>`.
string conversation_profile = 3 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/ConversationProfile"
}
];
// Output only. Required if the conversation is to be connected over
// telephony.
ConversationPhoneNumber phone_number = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
// The stage of a conversation. It indicates whether the virtual agent or a
// human agent is handling the conversation.
//
// If the conversation is created with the conversation profile that has
// Dialogflow config set, defaults to
// [ConversationStage.VIRTUAL_AGENT_STAGE][google.cloud.dialogflow.v2beta1.Conversation.ConversationStage.VIRTUAL_AGENT_STAGE]; Otherwise, defaults to
// [ConversationStage.HUMAN_ASSIST_STAGE][google.cloud.dialogflow.v2beta1.Conversation.ConversationStage.HUMAN_ASSIST_STAGE].
//
// If the conversation is created with the conversation profile that has
// Dialogflow config set but explicitly sets conversation_stage to
// [ConversationStage.HUMAN_ASSIST_STAGE][google.cloud.dialogflow.v2beta1.Conversation.ConversationStage.HUMAN_ASSIST_STAGE], it skips
// [ConversationStage.VIRTUAL_AGENT_STAGE][google.cloud.dialogflow.v2beta1.Conversation.ConversationStage.VIRTUAL_AGENT_STAGE] stage and directly goes to
// [ConversationStage.HUMAN_ASSIST_STAGE][google.cloud.dialogflow.v2beta1.Conversation.ConversationStage.HUMAN_ASSIST_STAGE].
ConversationStage conversation_stage = 7;
// Output only. The time the conversation was started.
google.protobuf.Timestamp start_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time the conversation was finished.
google.protobuf.Timestamp end_time = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// Represents a phone number for telephony integration. It allows for connecting
// a particular conversation over telephony.
message ConversationPhoneNumber {
// Output only. The phone number to connect to this conversation.
string phone_number = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// Represents a call matcher that describes criteria for matching incoming SIP
// calls to a conversation. When Dialogflow get a SIP call from a third-party
// carrier, Dialogflow matches the call to an existing conversation by either:
//
// * Extracting the conversation id from the
// [Call-Info header](https://tools.ietf.org/html/rfc3261#section-20.9), e.g.
// `Call-Info:
// <http://dialogflow.googleapis.com/v2beta1/projects/111/conversations/222>
// ;purpose=Goog-ContactCenter-Conversation`.
// * Or, if that doesn't work, matching incoming [SIP
// headers](https://tools.ietf.org/html/rfc3261#section-7.3)
// against any [CallMatcher][google.cloud.dialogflow.v2beta1.CallMatcher] for the conversation.
//
// If an incoming SIP call without valid `Call-Info` header matches to zero or
// multiple conversations with `CallMatcher`, we reject it.
//
// A call matcher contains equality conditions for SIP headers that all have
// to be fulfilled in order for a SIP call to match.
//
// The matched SIP headers consist of well-known headers (`To`, `From`,
// `Call-ID`) and custom headers. A [CallMatcher][google.cloud.dialogflow.v2beta1.CallMatcher] is only valid if it
// specifies:
//
// * At least 1 custom header,
// * or at least 2 well-known headers.
message CallMatcher {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/CallMatcher"
pattern: "projects/{project}/conversations/{conversation}/callMatchers/{call_matcher}"
pattern: "projects/{project}/locations/{location}/conversations/{conversation}/callMatchers/{call_matcher}"
};
// Custom SIP headers. See the [description of headers in
// the RFC](https://tools.ietf.org/html/rfc3261#section-7.3).
message CustomHeaders {
// Cisco's proprietary `Cisco-Guid` header.
string cisco_guid = 1;
}
// Output only. The unique identifier of this call matcher.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>/callMatchers/<Call Matcher ID>`.
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Value of the [`To`
// header](https://tools.ietf.org/html/rfc3261#section-8.1.1.2) to match. If
// empty or unspecified, we don't match to the
// [`To` header](https://tools.ietf.org/html/rfc3261#section-8.1.1.2).
string to_header = 2;
// Value of the [`From`
// header](https://tools.ietf.org/html/rfc3261#section-8.1.1.3) to match. If
// empty or unspecified, we don't match to the
// [`From` header](https://tools.ietf.org/html/rfc3261#section-8.1.1.3).
string from_header = 3;
// Value of the [`Call-ID`
// header](https://tools.ietf.org/html/rfc3261#section-8.1.1.4) to match. If
// empty or unspecified, we don't match to the
// [`Call-ID` header](https://tools.ietf.org/html/rfc3261#section-8.1.1.4).
string call_id_header = 4;
// Custom SIP headers that must match.
CustomHeaders custom_headers = 5;
}
// The request message for [Conversations.CreateConversation][google.cloud.dialogflow.v2beta1.Conversations.CreateConversation].
message CreateConversationRequest {
// Required. Resource identifier of the project creating the conversation.
// Format: `projects/<Project ID>/locations/<Location ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/Conversation"
}
];
// Required. The conversation to create.
Conversation conversation = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. Identifier of the conversation. Generally it's auto generated by Google.
// Only set it if you cannot wait for the response to return a
// auto-generated one to you.
//
// The conversation ID must be compliant with the regression fomula
// "[a-zA-Z][a-zA-Z0-9_-]*" with the characters length in range of [3,64].
// If the field is provided, the caller is resposible for
// 1. the uniqueness of the ID, otherwise the request will be rejected.
// 2. the consistency for whether to use custom ID or not under a project to
// better ensure uniqueness.
string conversation_id = 3 [(google.api.field_behavior) = OPTIONAL];
}
// The request message for [Conversations.ListConversations][google.cloud.dialogflow.v2beta1.Conversations.ListConversations].
message ListConversationsRequest {
// Required. The project from which to list all conversation.
// Format: `projects/<Project ID>/locations/<Location ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/Conversation"
}
];
// Optional. The maximum number of items to return in a single page. By
// default 100 and at most 1000.
int32 page_size = 2;
// Optional. The next_page_token value returned from a previous list request.
string page_token = 3;
// A filter expression that filters conversations listed in the response. In
// general, the expression must specify the field name, a comparison operator,
// and the value to use for filtering:
// <ul>
// <li>The value must be a string, a number, or a boolean.</li>
// <li>The comparison operator must be either `=`,`!=`, `>`, or `<`.</li>
// <li>To filter on multiple expressions, separate the
// expressions with `AND` or `OR` (omitting both implies `AND`).</li>
// <li>For clarity, expressions can be enclosed in parentheses.</li>
// </ul>
// Only `lifecycle_state` can be filtered on in this way. For example,
// the following expression only returns `COMPLETED` conversations:
//
// `lifecycle_state = "COMPLETED"`
//
// For more information about filtering, see
// [API Filtering](https://aip.dev/160).
string filter = 4;
}
// The response message for [Conversations.ListConversations][google.cloud.dialogflow.v2beta1.Conversations.ListConversations].
message ListConversationsResponse {
// The list of conversations. There will be a maximum number of items
// returned based on the page_size field in the request.
repeated Conversation conversations = 1;
// Token to retrieve the next page of results, or empty if there are no
// more results in the list.
string next_page_token = 2;
}
// The request message for [Conversations.GetConversation][google.cloud.dialogflow.v2beta1.Conversations.GetConversation].
message GetConversationRequest {
// Required. The name of the conversation. Format:
// `projects/<Project ID>/locations/<Location ID>/conversations/<Conversation
// ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Conversation"
}
];
}
// The request message for [Conversations.CompleteConversation][google.cloud.dialogflow.v2beta1.Conversations.CompleteConversation].
message CompleteConversationRequest {
// Required. Resource identifier of the conversation to close.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Conversation"
}
];
}
// The request message for [Conversations.CreateCallMatcher][google.cloud.dialogflow.v2beta1.Conversations.CreateCallMatcher].
message CreateCallMatcherRequest {
// Required. Resource identifier of the conversation adding the call matcher.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/CallMatcher"
}
];
// Required. The call matcher to create.
CallMatcher call_matcher = 2;
}
// The request message for [Conversations.ListCallMatchers][google.cloud.dialogflow.v2beta1.Conversations.ListCallMatchers].
message ListCallMatchersRequest {
// Required. The conversation to list all call matchers from.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/CallMatcher"
}
];
// Optional. The maximum number of items to return in a single page. By
// default 100 and at most 1000.
int32 page_size = 2;
// Optional. The next_page_token value returned from a previous list request.
string page_token = 3;
}
// The response message for [Conversations.ListCallMatchers][google.cloud.dialogflow.v2beta1.Conversations.ListCallMatchers].
message ListCallMatchersResponse {
// The list of call matchers. There is a maximum number of items
// returned based on the page_size field in the request.
repeated CallMatcher call_matchers = 1;
// Token to retrieve the next page of results or empty if there are no
// more results in the list.
string next_page_token = 2;
}
// The request message for [Conversations.DeleteCallMatcher][google.cloud.dialogflow.v2beta1.Conversations.DeleteCallMatcher].
message DeleteCallMatcherRequest {
// Required. The unique identifier of the [CallMatcher][google.cloud.dialogflow.v2beta1.CallMatcher] to delete.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>/callMatchers/<CallMatcher ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/CallMatcher"
}
];
}
// The request message to create one Message. Currently it is only used in
// BatchCreateMessagesRequest.
message CreateMessageRequest {
// Required. Resource identifier of the conversation to create message.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Conversation"
}
];
// Required. The message to create.
// [Message.participant][google.cloud.dialogflow.v2beta1.Message.participant] is required.
Message message = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for [Conversations.BatchCreateMessagesRequest][].
message BatchCreateMessagesRequest {
// Required. Resource identifier of the conversation to create message.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Conversation"
}
];
// Required. A maximum of 1000 Messages can be created in a batch.
// [CreateMessageRequest.message.send_time][] is required. All created
// messages will have identical [Message.create_time][google.cloud.dialogflow.v2beta1.Message.create_time].
repeated CreateMessageRequest requests = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for [Conversations.BatchCreateMessagesResponse][].
message BatchCreateMessagesResponse {
// Messages created.
repeated Message messages = 1;
}
// The request message for [Conversations.ListMessages][google.cloud.dialogflow.v2beta1.Conversations.ListMessages].
message ListMessagesRequest {
// Required. The name of the conversation to list messages for.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversations/<Conversation ID>`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/Message"
}
];
// Optional. Filter on message fields. Currently predicates on `create_time`
// and `create_time_epoch_microseconds` are supported. `create_time` only
// support milliseconds accuracy. E.g.,
// `create_time_epoch_microseconds > 1551790877964485` or
// `create_time > 2017-01-15T01:30:15.01Z`.
//
// For more information about filtering, see
// [API Filtering](https://aip.dev/160).
string filter = 4;
// Optional. The maximum number of items to return in a single page. By
// default 100 and at most 1000.
int32 page_size = 2;
// Optional. The next_page_token value returned from a previous list request.
string page_token = 3;
}
// The response message for [Conversations.ListMessages][google.cloud.dialogflow.v2beta1.Conversations.ListMessages].
message ListMessagesResponse {
// Required. The list of messages. There will be a maximum number of items
// returned based on the page_size field in the request.
// `messages` is sorted by `create_time` in descending order.
repeated Message messages = 1;
// Optional. Token to retrieve the next page of results, or empty if there are
// no more results in the list.
string next_page_token = 2;
}

View file

@ -0,0 +1,82 @@
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.dialogflow.v2beta1;
import "google/cloud/dialogflow/v2beta1/participant.proto";
import "google/rpc/status.proto";
import "google/api/annotations.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Dialogflow.V2beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1;dialogflow";
option java_multiple_files = true;
option java_outer_classname = "ConversationEventProto";
option java_package = "com.google.cloud.dialogflow.v2beta1";
option objc_class_prefix = "DF";
// Represents a notification sent to Pub/Sub subscribers for conversation
// lifecycle events.
message ConversationEvent {
// Enumeration of the types of events available.
enum Type {
// Type not set.
TYPE_UNSPECIFIED = 0;
// A new conversation has been opened. This is fired when a telephone call
// is answered, or a conversation is created via the API.
CONVERSATION_STARTED = 1;
// An existing conversation has closed. This is fired when a telephone call
// is terminated, or a conversation is closed via the API.
CONVERSATION_FINISHED = 2;
// An existing conversation has received a new message, either from API or
// telephony. It is configured in
// [ConversationProfile.new_message_event_notification_config][google.cloud.dialogflow.v2beta1.ConversationProfile.new_message_event_notification_config]
NEW_MESSAGE = 5;
// Unrecoverable error during a telephone call.
//
// In general non-recoverable errors only occur if something was
// misconfigured in the ConversationProfile corresponding to the call. After
// a non-recoverable error, Dialogflow may stop responding.
//
// We don't fire this event:
//
// * in an API call because we can directly return the error, or,
// * when we can recover from an error.
UNRECOVERABLE_ERROR = 4;
}
// Required. The unique identifier of the conversation this notification
// refers to.
// Format: `projects/<Project ID>/conversations/<Conversation ID>`.
string conversation = 1;
// Required. The type of the event that this notification refers to.
Type type = 2;
// Optional. More detailed information about an error. Only set for type
// UNRECOVERABLE_ERROR_IN_PHONE_CALL.
google.rpc.Status error_status = 3;
// Payload of conversation event.
oneof payload {
// Payload of NEW_MESSAGE event.
Message new_message_payload = 4;
}
}

View file

@ -0,0 +1,564 @@
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.dialogflow.v2beta1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/dialogflow/v2beta1/audio_config.proto";
import "google/cloud/dialogflow/v2beta1/document.proto";
import "google/cloud/dialogflow/v2beta1/participant.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Dialogflow.V2beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1;dialogflow";
option java_multiple_files = true;
option java_outer_classname = "ConversationProfileProto";
option java_package = "com.google.cloud.dialogflow.v2beta1";
option objc_class_prefix = "DF";
// Service for managing [ConversationProfiles][google.cloud.dialogflow.v2beta1.ConversationProfile].
service ConversationProfiles {
option (google.api.default_host) = "dialogflow.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform,"
"https://www.googleapis.com/auth/dialogflow";
// Returns the list of all conversation profiles in the specified project.
rpc ListConversationProfiles(ListConversationProfilesRequest) returns (ListConversationProfilesResponse) {
option (google.api.http) = {
get: "/v2beta1/{parent=projects/*}/conversationProfiles"
additional_bindings {
get: "/v2beta1/{parent=projects/*/locations/*}/conversationProfiles"
}
};
option (google.api.method_signature) = "parent";
}
// Retrieves the specified conversation profile.
rpc GetConversationProfile(GetConversationProfileRequest) returns (ConversationProfile) {
option (google.api.http) = {
get: "/v2beta1/{name=projects/*/conversationProfiles/*}"
additional_bindings {
get: "/v2beta1/{name=projects/*/locations/*/conversationProfiles/*}"
}
};
option (google.api.method_signature) = "name";
}
// Creates a conversation profile in the specified project.
//
// [ConversationProfile.CreateTime][] and [ConversationProfile.UpdateTime][]
// aren't populated in the response. You can retrieve them via
// [GetConversationProfile][google.cloud.dialogflow.v2beta1.ConversationProfiles.GetConversationProfile] API.
rpc CreateConversationProfile(CreateConversationProfileRequest) returns (ConversationProfile) {
option (google.api.http) = {
post: "/v2beta1/{parent=projects/*}/conversationProfiles"
body: "conversation_profile"
additional_bindings {
post: "/v2beta1/{parent=projects/*/locations/*}/conversationProfiles"
body: "conversation_profile"
}
};
option (google.api.method_signature) = "parent,conversation_profile";
}
// Updates the specified conversation profile.
//
// [ConversationProfile.CreateTime][] and [ConversationProfile.UpdateTime][]
// aren't populated in the response. You can retrieve them via
// [GetConversationProfile][google.cloud.dialogflow.v2beta1.ConversationProfiles.GetConversationProfile] API.
rpc UpdateConversationProfile(UpdateConversationProfileRequest) returns (ConversationProfile) {
option (google.api.http) = {
patch: "/v2beta1/{conversation_profile.name=projects/*/conversationProfiles/*}"
body: "conversation_profile"
additional_bindings {
patch: "/v2beta1/{conversation_profile.name=projects/*/locations/*/conversationProfiles/*}"
body: "conversation_profile"
}
};
option (google.api.method_signature) = "conversation_profile,update_mask";
}
// Deletes the specified conversation profile.
rpc DeleteConversationProfile(DeleteConversationProfileRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v2beta1/{name=projects/*/conversationProfiles/*}"
additional_bindings {
delete: "/v2beta1/{name=projects/*/locations/*/conversationProfiles/*}"
}
};
option (google.api.method_signature) = "name";
}
}
// Defines the services to connect to incoming Dialogflow conversations.
message ConversationProfile {
option (google.api.resource) = {
type: "dialogflow.googleapis.com/ConversationProfile"
pattern: "projects/{project}/conversationProfiles/{conversation_profile}"
pattern: "projects/{project}/locations/{location}/conversationProfiles/{conversation_profile}"
};
// The unique identifier of this conversation profile.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversationProfiles/<Conversation Profile ID>`.
string name = 1;
// Required. Human readable name for this profile. Max length 1024 bytes.
string display_name = 2 [(google.api.field_behavior) = REQUIRED];
// Output only. Create time of the conversation profile.
google.protobuf.Timestamp create_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Update time of the conversation profile.
google.protobuf.Timestamp update_time = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
// Configuration for an automated agent to use with this profile.
AutomatedAgentConfig automated_agent_config = 3;
// Configuration for agent assistance to use with this profile.
HumanAgentAssistantConfig human_agent_assistant_config = 4;
// Configuration for connecting to a live agent.
HumanAgentHandoffConfig human_agent_handoff_config = 5;
// Configuration for publishing conversation lifecycle events.
NotificationConfig notification_config = 6;
// Configuration for logging conversation lifecycle events.
LoggingConfig logging_config = 7;
// Configuration for publishing new message events. Event will be sent in
// format of [ConversationEvent][google.cloud.dialogflow.v2beta1.ConversationEvent]
NotificationConfig new_message_event_notification_config = 8;
// Settings for speech transcription.
SpeechToTextConfig stt_config = 9;
// Language code for the conversation profile. If not specified, the language
// is en-US. Language at ConversationProfile should be set for all non en-us
// languages.
string language_code = 10;
}
// Defines the Automated Agent to connect to a conversation.
message AutomatedAgentConfig {
// Required. ID of the Dialogflow agent environment to use.
//
// This project needs to either be the same project as the conversation or you
// need to grant `service-<Conversation Project
// Number>@gcp-sa-dialogflow.iam.gserviceaccount.com` the `Dialogflow API
// Service Agent` role in this project.
//
// - For ES agents, use format: `projects/<Project ID>/locations/<Location
// ID>/agent/environments/<Environment ID or '-'>`. If environment is not
// specified, the default `draft` environment is used. Refer to
// [DetectIntentRequest](/dialogflow/docs/reference/rpc/google.cloud.dialogflow.v2beta1#google.cloud.dialogflow.v2beta1.DetectIntentRequest)
// for more details.
//
// - For CX agents, use format `projects/<Project ID>/locations/<Location
// ID>/agents/<Agent ID>/environments/<Environment ID
// or '-'>`. If environment is not specified, the default `draft` environment
// is used.
string agent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Agent"
}
];
}
// Defines the Human Agent Assistant to connect to a conversation.
message HumanAgentAssistantConfig {
// Settings of suggestion trigger.
message SuggestionTriggerSettings {
// Do not trigger if last utterance is small talk.
bool no_small_talk = 1;
// Only trigger suggestion if participant role of last utterance is
// END_USER.
bool only_end_user = 2;
}
// Config for suggestion features.
message SuggestionFeatureConfig {
// The suggestion feature.
SuggestionFeature suggestion_feature = 5;
// Automatically iterates all participants and tries to compile
// suggestions.
//
// Supported features: ARTICLE_SUGGESTION, FAQ, DIALOGFLOW_ASSIST.
bool enable_event_based_suggestion = 3;
// Settings of suggestion trigger.
//
// Currently, only ARTICLE_SUGGESTION, FAQ, and DIALOGFLOW_ASSIST will use
// this field.
SuggestionTriggerSettings suggestion_trigger_settings = 10;
// Configs of query.
SuggestionQueryConfig query_config = 6;
// Configs of custom conversation model.
ConversationModelConfig conversation_model_config = 7;
}
// Detail human agent assistant config.
message SuggestionConfig {
// Configuration of different suggestion features. One feature can have only
// one config.
repeated SuggestionFeatureConfig feature_configs = 2;
// If `group_suggestion_responses` is false, and there are multiple
// `feature_configs` in `event based suggestion` or
// StreamingAnalyzeContent, we will try to deliver suggestions to customers
// as soon as we get new suggestion. Different type of suggestions based on
// the same context will be in separate Pub/Sub event or
// `StreamingAnalyzeContentResponse`.
//
// If `group_suggestion_responses` set to true. All the suggestions to the
// same participant based on the same context will be grouped into a single
// Pub/Sub event or StreamingAnalyzeContentResponse.
bool group_suggestion_responses = 3;
}
// Config for suggestion query.
message SuggestionQueryConfig {
// Knowledge base source settings.
//
// Supported features: ARTICLE_SUGGESTION, FAQ.
message KnowledgeBaseQuerySource {
// Required. Knowledge bases to query. Format:
// `projects/<Project ID>/locations/<Location
// ID>/knowledgeBases/<Knowledge Base ID>`. Currently, only one knowledge
// base is supported.
repeated string knowledge_bases = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/KnowledgeBase"
}
];
}
// Document source settings.
//
// Supported features: SMART_REPLY, SMART_COMPOSE.
message DocumentQuerySource {
// Required. Knowledge documents to query from. Format:
// `projects/<Project ID>/locations/<Location
// ID>/knowledgeBases/<KnowledgeBase ID>/documents/<Document ID>`.
// Currently, only one document is supported.
repeated string documents = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Document"
}
];
}
// Dialogflow source setting.
//
// Supported feature: DIALOGFLOW_ASSIST.
message DialogflowQuerySource {
// Required. The name of a dialogflow virtual agent used for end user side intent
// detection and suggestion. Format: `projects/<Project Number /
// ID>/locations/<Location ID>/agent`. When multiple agents are allowed in
// the same Dialogflow project.
string agent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/Agent"
}
];
}
// Settings that determine how to filter recent conversation context when
// generating suggestions.
message ContextFilterSettings {
// If set to true, the last message from virtual agent (hand off message)
// and the message before it (trigger message of hand off) are dropped.
bool drop_handoff_messages = 1;
// If set to true, all messages from virtual agent are dropped.
bool drop_virtual_agent_messages = 2;
// If set to true, all messages from ivr stage are dropped.
bool drop_ivr_messages = 3;
}
// Source of query.
oneof query_source {
// Query from knowledgebase. It is used by:
// ARTICLE_SUGGESTION, FAQ.
KnowledgeBaseQuerySource knowledge_base_query_source = 1;
// Query from knowledge base document. It is used by:
// SMART_REPLY, SMART_COMPOSE.
DocumentQuerySource document_query_source = 2;
// Query from Dialogflow agent. It is used by DIALOGFLOW_ASSIST.
DialogflowQuerySource dialogflow_query_source = 3;
}
// Maximum number of results to return. Currently, if unset, defaults to 10.
// And the max number is 20.
int32 max_results = 4;
// Confidence threshold of query result.
//
// Agent Assist gives each suggestion a score in the range [0.0, 1.0], based
// on the relevance between the suggestion and the current conversation
// context. A score of 0.0 has no relevance, while a score of 1.0 has high
// relevance. Only suggestions with a score greater than or equal to the
// value of this field are included in the results.
//
// For a baseline model (the default), the recommended value is in the range
// [0.05, 0.1].
//
// For a custom model, there is no recommended value. Tune this value by
// starting from a very low value and slowly increasing until you have
// desired results.
//
// If this field is not set, it is default to 0.0, which means that all
// suggestions are returned.
//
// Supported features: ARTICLE_SUGGESTION, FAQ, SMART_REPLY, SMART_COMPOSE.
float confidence_threshold = 5;
// Determines how recent conversation context is filtered when generating
// suggestions. If unspecified, no messages will be dropped.
ContextFilterSettings context_filter_settings = 7;
}
// Custom conversation models used in agent assist feature.
//
// Supported feature: ARTICLE_SUGGESTION, SMART_COMPOSE, SMART_REPLY.
message ConversationModelConfig {
// Required. Conversation model resource name. Format: `projects/<Project
// ID>/conversationModels/<Model ID>`.
string model = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/ConversationModel"
}
];
}
// Configuration for analyses to run on each conversation message.
message MessageAnalysisConfig {
// Enable entity extraction in conversation messages on [agent assist
// stage](https://cloud.google.com/dialogflow/priv/docs/contact-center/basics#stages).
// If unspecified, defaults to false.
bool enable_entity_extraction = 2;
// Enable sentiment analysis in conversation messages on [agent assist
// stage](https://cloud.google.com/dialogflow/priv/docs/contact-center/basics#stages).
// If unspecified, defaults to false. Sentiment analysis inspects user input
// and identifies the prevailing subjective opinion, especially to determine
// a user's attitude as positive, negative, or neutral:
// https://cloud.google.com/natural-language/docs/basics#sentiment_analysis
// For [Participants.StreamingAnalyzeContent][google.cloud.dialogflow.v2beta1.Participants.StreamingAnalyzeContent] method, result will be in
// [StreamingAnalyzeContentResponse.message.SentimentAnalysisResult][google.cloud.dialogflow.v2beta1.StreamingAnalyzeContentResponse.message].
// For [Participants.AnalyzeContent][google.cloud.dialogflow.v2beta1.Participants.AnalyzeContent] method, result will be in
// [AnalyzeContentResponse.message.SentimentAnalysisResult][google.cloud.dialogflow.v2beta1.AnalyzeContentResponse.message]
// For [Conversations.ListMessages][google.cloud.dialogflow.v2beta1.Conversations.ListMessages] method, result will be in
// [ListMessagesResponse.messages.SentimentAnalysisResult][google.cloud.dialogflow.v2beta1.ListMessagesResponse.messages]
// If Pub/Sub notification is configured, result will be in
// [ConversationEvent.new_message_payload.SentimentAnalysisResult][google.cloud.dialogflow.v2beta1.ConversationEvent.new_message_payload].
bool enable_sentiment_analysis = 3;
}
// Pub/Sub topic on which to publish new agent assistant events.
NotificationConfig notification_config = 2;
// Configuration for agent assistance of human agent participant.
SuggestionConfig human_agent_suggestion_config = 3;
// Configuration for agent assistance of end user participant.
SuggestionConfig end_user_suggestion_config = 4;
// Configuration for message analysis.
MessageAnalysisConfig message_analysis_config = 5;
}
// Defines the hand off to a live agent, typically on which external agent
// service provider to connect to a conversation.
message HumanAgentHandoffConfig {
// Configuration specific to LivePerson (https://www.liveperson.com).
message LivePersonConfig {
// Required. Account number of the LivePerson account to connect. This is
// the account number you input at the login page.
string account_number = 1 [(google.api.field_behavior) = REQUIRED];
}
// Configuration specific to Salesforce Live Agent.
message SalesforceLiveAgentConfig {
// Required. The organization ID of the Salesforce account.
string organization_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Live Agent deployment ID.
string deployment_id = 2 [(google.api.field_behavior) = REQUIRED];
// Required. Live Agent chat button ID.
string button_id = 3 [(google.api.field_behavior) = REQUIRED];
// Required. Domain of the Live Agent endpoint for this agent. You can find
// the endpoint URL in the `Live Agent settings` page. For example if URL
// has the form https://d.la4-c2-phx.salesforceliveagent.com/...,
// you should fill in d.la4-c2-phx.salesforceliveagent.com.
string endpoint_domain = 4 [(google.api.field_behavior) = REQUIRED];
}
// Required. Specifies which agent service to connect for human agent handoff.
oneof agent_service {
// Uses LivePerson (https://www.liveperson.com).
LivePersonConfig live_person_config = 1;
// Uses Salesforce Live Agent.
SalesforceLiveAgentConfig salesforce_live_agent_config = 2;
}
}
// Defines notification behavior.
message NotificationConfig {
// Format of cloud pub/sub message.
enum MessageFormat {
// If it is unspecified, PROTO will be used.
MESSAGE_FORMAT_UNSPECIFIED = 0;
// Pubsub message will be serialized proto.
PROTO = 1;
// Pubsub message will be json.
JSON = 2;
}
// Name of the Pub/Sub topic to publish conversation
// events like
// [CONVERSATION_STARTED][google.cloud.dialogflow.v2beta1.ConversationEvent.Type.CONVERSATION_STARTED] as
// serialized [ConversationEvent][google.cloud.dialogflow.v2beta1.ConversationEvent] protos.
//
// Notification works for phone calls, if this topic either is in the same
// project as the conversation or you grant `service-<Conversation Project
// Number>@gcp-sa-dialogflow.iam.gserviceaccount.com` the `Dialogflow Service
// Agent` role in the topic project.
//
// Format: `projects/<Project ID>/locations/<Location ID>/topics/<Topic ID>`.
string topic = 1;
// Format of message.
MessageFormat message_format = 2;
}
// Defines logging behavior for conversation lifecycle events.
message LoggingConfig {
// Whether to log conversation events like
// [CONVERSATION_STARTED][google.cloud.dialogflow.v2beta1.ConversationEvent.Type.CONVERSATION_STARTED] to
// Stackdriver in the conversation project as JSON format
// [ConversationEvent][google.cloud.dialogflow.v2beta1.ConversationEvent] protos.
bool enable_stackdriver_logging = 3;
}
// The request message for [ConversationProfiles.ListConversationProfiles][google.cloud.dialogflow.v2beta1.ConversationProfiles.ListConversationProfiles].
message ListConversationProfilesRequest {
// Required. The project to list all conversation profiles from.
// Format: `projects/<Project ID>/locations/<Location ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/ConversationProfile"
}
];
// The maximum number of items to return in a single page. By
// default 100 and at most 1000.
int32 page_size = 2;
// The next_page_token value returned from a previous list request.
string page_token = 3;
}
// The response message for [ConversationProfiles.ListConversationProfiles][google.cloud.dialogflow.v2beta1.ConversationProfiles.ListConversationProfiles].
message ListConversationProfilesResponse {
// The list of project conversation profiles. There is a maximum number
// of items returned based on the page_size field in the request.
repeated ConversationProfile conversation_profiles = 1;
// Token to retrieve the next page of results, or empty if there are no
// more results in the list.
string next_page_token = 2;
}
// The request message for [ConversationProfiles.GetConversationProfile][google.cloud.dialogflow.v2beta1.ConversationProfiles.GetConversationProfile].
message GetConversationProfileRequest {
// Required. The resource name of the conversation profile.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversationProfiles/<Conversation Profile ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/ConversationProfile"
}
];
}
// The request message for [ConversationProfiles.CreateConversationProfile][google.cloud.dialogflow.v2beta1.ConversationProfiles.CreateConversationProfile].
message CreateConversationProfileRequest {
// Required. The project to create a conversation profile for.
// Format: `projects/<Project ID>/locations/<Location ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/ConversationProfile"
}
];
// Required. The conversation profile to create.
ConversationProfile conversation_profile = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for [ConversationProfiles.UpdateConversationProfile][google.cloud.dialogflow.v2beta1.ConversationProfiles.UpdateConversationProfile].
message UpdateConversationProfileRequest {
// Required. The conversation profile to update.
ConversationProfile conversation_profile = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The mask to control which fields to update.
google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED];
}
// The request message for [ConversationProfiles.DeleteConversationProfile][google.cloud.dialogflow.v2beta1.ConversationProfiles.DeleteConversationProfile].
//
// This operation fails if the conversation profile is still referenced from
// a phone number.
message DeleteConversationProfileRequest {
// Required. The name of the conversation profile to delete.
// Format: `projects/<Project ID>/locations/<Location
// ID>/conversationProfiles/<Conversation Profile ID>`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dialogflow.googleapis.com/ConversationProfile"
}
];
}

View file

@ -5,19 +5,26 @@ title: Dialogflow API
apis:
- name: google.cloud.dialogflow.v2beta1.Agents
- name: google.cloud.dialogflow.v2beta1.AnswerRecords
- name: google.cloud.dialogflow.v2beta1.Contexts
- name: google.cloud.dialogflow.v2beta1.ConversationProfiles
- name: google.cloud.dialogflow.v2beta1.Conversations
- name: google.cloud.dialogflow.v2beta1.Documents
- name: google.cloud.dialogflow.v2beta1.EntityTypes
- name: google.cloud.dialogflow.v2beta1.Environments
- name: google.cloud.dialogflow.v2beta1.Intents
- name: google.cloud.dialogflow.v2beta1.KnowledgeBases
- name: google.cloud.dialogflow.v2beta1.Participants
- name: google.cloud.dialogflow.v2beta1.SessionEntityTypes
- name: google.cloud.dialogflow.v2beta1.Sessions
types:
- name: google.cloud.dialogflow.v2beta1.BatchUpdateEntityTypesResponse
- name: google.cloud.dialogflow.v2beta1.BatchUpdateIntentsResponse
- name: google.cloud.dialogflow.v2beta1.ConversationEvent
- name: google.cloud.dialogflow.v2beta1.ExportAgentResponse
- name: google.cloud.dialogflow.v2beta1.HumanAgentAssistantEvent
- name: google.cloud.dialogflow.v2beta1.ImportDocumentsResponse
- name: google.cloud.dialogflow.v2beta1.KnowledgeOperationMetadata
- name: google.cloud.dialogflow.v2beta1.OriginalDetectIntentRequest
- name: google.cloud.dialogflow.v2beta1.WebhookRequest
@ -47,8 +54,14 @@ backend:
rules:
- selector: 'google.cloud.dialogflow.v2beta1.Agents.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.v2beta1.AnswerRecords.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.v2beta1.Contexts.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.v2beta1.ConversationProfiles.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.v2beta1.Conversations.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.v2beta1.Documents.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.v2beta1.EntityTypes.*'
@ -59,6 +72,12 @@ backend:
deadline: 60.0
- selector: 'google.cloud.dialogflow.v2beta1.KnowledgeBases.*'
deadline: 60.0
- selector: 'google.cloud.dialogflow.v2beta1.Participants.*'
deadline: 60.0
- selector: google.cloud.dialogflow.v2beta1.Participants.AnalyzeContent
deadline: 220.0
- selector: google.cloud.dialogflow.v2beta1.Participants.StreamingAnalyzeContent
deadline: 220.0
- selector: 'google.cloud.dialogflow.v2beta1.SessionEntityTypes.*'
deadline: 60.0
- selector: google.cloud.dialogflow.v2beta1.Sessions.DetectIntent
@ -90,11 +109,26 @@ authentication:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.v2beta1.AnswerRecords.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.v2beta1.Contexts.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.v2beta1.ConversationProfiles.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.v2beta1.Conversations.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.v2beta1.Documents.*'
oauth:
canonical_scopes: |-
@ -120,6 +154,11 @@ authentication:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.v2beta1.Participants.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform,
https://www.googleapis.com/auth/dialogflow
- selector: 'google.cloud.dialogflow.v2beta1.SessionEntityTypes.*'
oauth:
canonical_scopes: |-

View file

@ -100,6 +100,22 @@ service Documents {
};
}
// Create documents by importing data from external sources.
rpc ImportDocuments(ImportDocumentsRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v2beta1/{parent=projects/*/knowledgeBases/*}/documents:import"
body: "*"
additional_bindings {
post: "/v2beta1/{parent=projects/*/locations/*/knowledgeBases/*}/documents:import"
body: "*"
}
};
option (google.longrunning.operation_info) = {
response_type: "ImportDocumentsResponse"
metadata_type: "KnowledgeOperationMetadata"
};
}
// Deletes the specified document.
//
// Note: The `projects.agent.knowledgeBases.documents` resource is deprecated;
@ -219,6 +235,13 @@ message Document {
// Documents for which unstructured text is extracted and used for
// question answering.
EXTRACTIVE_QA = 2;
// The entire document content as a whole can be used for query results.
// Only for Contact Center Solutions on Dialogflow.
ARTICLE_SUGGESTION = 3;
// The legacy enum for agent-facing smart reply feature.
SMART_REPLY = 4;
}
// Optional. The document resource name.
@ -283,6 +306,12 @@ message Document {
// This reload may have been triggered automatically or manually
// and may not have succeeded.
ReloadStatus latest_reload_status = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Metadata for the document. The metadata supports arbitrary
// key-value pairs. Suggested use cases include storing a document's title,
// an external URL distinct from the document's content_uri, etc.
// The max size of a `key` or a `value` of the metadata is 1024 bytes.
map<string, string> metadata = 7 [(google.api.field_behavior) = OPTIONAL];
}
// Request message for [Documents.GetDocument][google.cloud.dialogflow.v2beta1.Documents.GetDocument].
@ -371,6 +400,62 @@ message CreateDocumentRequest {
bool import_gcs_custom_metadata = 3;
}
// Request message for [Documents.ImportDocuments][google.cloud.dialogflow.v2beta1.Documents.ImportDocuments].
message ImportDocumentsRequest {
// Required. The knowledge base to import documents into.
// Format: `projects/<Project ID>/locations/<Location
// ID>/knowledgeBases/<Knowledge Base ID>`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dialogflow.googleapis.com/Document"
}
];
// Required. The source to use for importing documents.
//
// If the source captures multiple objects, then multiple documents will be
// created, one corresponding to each object, and all of these documents will
// be created using the same document template.
oneof source {
// The Google Cloud Storage location for the documents.
// The path can include a wildcard.
//
// These URIs may have the forms
// `gs://<bucket-name>/<object-name>`.
// `gs://<bucket-name>/<object-path>/*.<extension>`.
GcsSources gcs_source = 2;
}
// Required. Document template used for importing all the documents.
ImportDocumentTemplate document_template = 3 [(google.api.field_behavior) = REQUIRED];
// Whether to import custom metadata from Google Cloud Storage.
// Only valid when the document source is Google Cloud Storage URI.
bool import_gcs_custom_metadata = 4;
}
// The template used for importing documents.
message ImportDocumentTemplate {
// Required. The MIME type of the document.
string mime_type = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The knowledge type of document content.
repeated Document.KnowledgeType knowledge_types = 2 [(google.api.field_behavior) = REQUIRED];
// Metadata for the document. The metadata supports arbitrary
// key-value pairs. Suggested use cases include storing a document's title,
// an external URL distinct from the document's content_uri, etc.
// The max size of a `key` or a `value` of the metadata is 1024 bytes.
map<string, string> metadata = 3;
}
// Response message for [Documents.ImportDocuments][google.cloud.dialogflow.v2beta1.Documents.ImportDocuments].
message ImportDocumentsResponse {
// Includes details about skipped documents or any other warnings.
repeated google.rpc.Status warnings = 1;
}
// Request message for [Documents.DeleteDocument][google.cloud.dialogflow.v2beta1.Documents.DeleteDocument].
message DeleteDocumentRequest {
// Required. The name of the document to delete.

View file

@ -27,6 +27,15 @@ option java_outer_classname = "GcsProto";
option java_package = "com.google.cloud.dialogflow.v2beta1";
option objc_class_prefix = "DF";
// Google Cloud Storage locations for the inputs.
message GcsSources {
// Required. Google Cloud Storage URIs for the inputs. A URI is of the
// form:
// gs://bucket/object-prefix-or-name
// Whether a prefix or name is used depends on the use case.
repeated string uris = 2 [(google.api.field_behavior) = REQUIRED];
}
// Google Cloud Storage location for single input.
message GcsSource {
// Required. The Google Cloud Storage URIs for the inputs. A URI is of the

View file

@ -0,0 +1,51 @@
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.dialogflow.v2beta1;
import "google/cloud/dialogflow/v2beta1/participant.proto";
import "google/api/annotations.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Google.Cloud.Dialogflow.V2beta1";
option go_package = "google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1;dialogflow";
option java_multiple_files = true;
option java_outer_classname = "HumanAgentAssistantEventProto";
option java_package = "com.google.cloud.dialogflow.v2beta1";
option objc_class_prefix = "DF";
// Output only. Represents a notification sent to Pub/Sub subscribers for
// agent assistant events in a specific conversation.
message HumanAgentAssistantEvent {
// The conversation this notification refers to.
// Format: `projects/<Project ID>/conversations/<Conversation ID>`.
string conversation = 1;
// The participant that the suggestion is compiled for. And This field is used
// to call [Participants.ListSuggestions][google.cloud.dialogflow.v2beta1.Participants.ListSuggestions] API. Format:
// `projects/<Project ID>/conversations/<Conversation
// ID>/participants/<Participant ID>`.
// It will not be set in legacy workflow.
// [HumanAgentAssistantConfig.name][google.cloud.dialogflow.v2beta1.HumanAgentAssistantConfig.name] for more
// information.
string participant = 3;
// The suggestion results payload that this notification refers to. It will
// only be set when
// [HumanAgentAssistantConfig.SuggestionConfig.group_suggestion_responses][google.cloud.dialogflow.v2beta1.HumanAgentAssistantConfig.SuggestionConfig.group_suggestion_responses]
// sets to true.
repeated SuggestionResult suggestion_results = 5;
}

View file

@ -1117,6 +1117,12 @@ message Intent {
// auto-markup in the UI is turned off.
bool ml_disabled = 19 [(google.api.field_behavior) = OPTIONAL];
// Optional. Indicates that a live agent should be brought in to handle the
// interaction with the user. In most cases, when you set this flag to true,
// you would also want to set end_interaction to true as well. Default is
// false.
bool live_agent_handoff = 20 [(google.api.field_behavior) = OPTIONAL];
// Optional. Indicates that this intent ends an interaction. Some integrations
// (e.g., Actions on Google or Dialogflow phone gateway) use this information
// to close interaction with an end user. Default is false.

File diff suppressed because it is too large Load diff

View file

@ -117,6 +117,12 @@ message WebhookResponse {
// `fulfillment_messages`, and `payload` fields.
EventInput followup_event_input = 6;
// Indicates that a live agent should be brought in to handle the
// interaction with the user. In most cases, when you set this flag to true,
// you would also want to set end_interaction to true as well. Default is
// false.
bool live_agent_handoff = 7;
// Optional. Indicates that this intent ends an interaction. Some integrations
// (e.g., Actions on Google or Dialogflow phone gateway) use this information
// to close interaction with an end user. Default is false.