Bidirectional API

BiDiStreamingAnalyzeContent API adalah API utama untuk pengalaman audio dan multi-modal generasi berikutnya di Conversational Agents dan Agent Assist. API ini memfasilitasi streaming data audio dan menampilkan transkripsi atau saran agen manusia kepada Anda.

Tidak seperti API sebelumnya, konfigurasi audio yang disederhanakan telah mengoptimalkan dukungan untuk percakapan antarmanusia dan batas waktu yang diperpanjang selama 15 menit. Kecuali untuk terjemahan langsung, API ini juga mendukung semua fitur Agent Assist yang didukung oleh StreamingAnalyzeContent.

Dasar-dasar streaming

Diagram berikut menggambarkan cara kerja streaming.

Mulai streaming dengan mengirim konfigurasi audio ke server. Kemudian, Anda mengirim file audio, dan server akan mengirimkan transkrip atau saran untuk agen manusia. Kirim lebih banyak data audio untuk mendapatkan lebih banyak transkrip dan saran. Pertukaran ini akan terus berlanjut hingga Anda mengakhirinya dengan menutup streaming secara setengah.

Panduan streaming

Untuk menggunakan BiDiStreamingAnalyzeContent API saat runtime percakapan, ikuti panduan berikut.

  1. Panggil metode BiDiStreamingAnalyzeContent dan tetapkan kolom berikut:
    • BiDiStreamingAnalyzeContentRequest.participant
    • (Opsional) BiDiStreamingAnalyzeContentRequest.voice_session_config.input_audio_sample_rate_hertz (Jika ditentukan, konfigurasi ini akan menggantikan konfigurasi dari ConversationProfile.stt_config.sample_rate_hertz.)
    • (Opsional) BiDiStreamingAnalyzeContentRequest.voice_session_config.input_audio_encoding (Jika ditentukan, konfigurasi ini akan menggantikan konfigurasi dari ConversationProfile.stt_config.audio_encoding.)
  2. Siapkan streaming dan tetapkan konfigurasi audio dengan permintaan BiDiStreamingAnalyzeContent pertama Anda.
  3. Dalam permintaan berikutnya, kirim byte audio ke streaming melalui BiDiStreamingAnalyzeContentRequest.audio.
  4. Setelah mengirim permintaan kedua dengan payload audio, Anda akan menerima beberapa BidiStreamingAnalyzeContentResponses dari streaming.
    • Hasil transkripsi sementara dan akhir tersedia dengan perintah berikut: BiDiStreamingAnalyzeContentResponse.recognition_result.
    • Anda dapat mengakses saran agen manusia dan pesan percakapan yang diproses dengan perintah berikut: BiDiStreamingAnalyzeContentResponse.analyze_content_response.
  5. Anda dapat menutup streaming secara setengah kapan saja. Setelah Anda menutup streaming secara setengah, server akan mengirimkan kembali respons yang berisi hasil pengenalan yang tersisa, beserta saran Agent Assist yang potensial.
  6. Mulai atau mulai ulang streaming baru dalam kasus berikut:
    • Streaming rusak. Misalnya, streaming berhenti saat seharusnya tidak berhenti.
    • Percakapan Anda mendekati batas maksimum permintaan, yaitu 15 menit.
  7. Untuk kualitas terbaik, saat Anda memulai streaming, kirim data audio yang dihasilkan setelah speech_end_offset terakhir dari BiDiStreamingAnalyzeContentResponse.recognition_result dengan is_final=true ke BidiStreamingAnalyzeContent.

Menggunakan API melalui library klien Python

Library klien membantu Anda mengakses Google API dari bahasa kode tertentu. Anda dapat menggunakan library klien Python untuk Agent Assist dengan BidiStreamingAnalyzeContent sebagai berikut.

from google.cloud import dialogflow_v2beta1
from google.api_core.client_options import ClientOptions
from google.cloud import storage

import time
import google.auth
import participant_management
import conversation_management


PROJECT_ID="your-project-id"
CONVERSATION_PROFILE_ID="your-conversation-profile-id"
BUCKET_NAME="your-audio-bucket-name"

SAMPLE_RATE =48000
# Calculate the bytes with Sample_rate_hertz * bit Depth / 8 -> bytes
# 48000(sample/second) * 16(bits/sample) / 8 = 96000 byte per second,
# 96000 / 10 = 9600 we send 0.1 second to the stream API
POINT_ONE_SECOND_IN_BYTES = 9600
FOLDER_PTAH_FOR_CUSTOMER_AUDIO="your-customer-audios-files-path" 
FOLDER_PTAH_FOR_AGENT_AUDIO="your-agent-audios-file-path"
client_options = ClientOptions(api_endpoint="dialogflow.googleapis.com")
credentials, _ = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform",
                                             "https://www.googleapis.com/auth/dialogflow"])

storage_client = storage.Client(credentials = credentials, project=PROJECT_ID)

participant_client = dialogflow_v2beta1.ParticipantsClient(client_options=client_options,
                                                           credentials=credentials)

def download_blob(bucket_name, folder_path, audio_array : list):
    """Uploads a file to the bucket."""
    bucket = storage_client.bucket(bucket_name, user_project=PROJECT_ID)
    blobs = bucket.list_blobs(prefix=folder_path)
    for blob in blobs:
      if not blob.name.endswith('/'):
          audio_array.append(blob.download_as_string())

def request_iterator(participant : dialogflow_v2beta1.Participant, audios):
    """Iterate the request for bidi streaming analyze content
    """

    yield dialogflow_v2beta1.BidiStreamingAnalyzeContentRequest(
        config={
            "participant": participant.name,
            "voice_session_config": {
                "input_audio_encoding": dialogflow_v2beta1.AudioEncoding.AUDIO_ENCODING_LINEAR_16,
                "input_audio_sample_rate_hertz": SAMPLE_RATE,
            },
        }
    )
    print(f"participant {participant}")

    for i in range(0, len(audios)):
      audios_array = audio_request_iterator(audios[i])
      for chunk in audios_array:
        if not chunk:
            break
        yield dialogflow_v2beta1.BidiStreamingAnalyzeContentRequest(
        input={
            "audio":chunk
            },
        )
        time.sleep(0.1)
    time.sleep(0.1)

def participant_bidi_streaming_analyze_content(participant, audios):
    """call bidi streaming analyze content API
    """
    bidi_responses = participant_client.bidi_streaming_analyze_content(
        requests=request_iterator(participant, audios)
    )

    for response in bidi_responses:
        bidi_streaming_analyze_content_response_handler(response)

def bidi_streaming_analyze_content_response_handler(response: dialogflow_v2beta1.BidiStreamingAnalyzeContentResponse):
    """Call Bidi Streaming Analyze Content
    """
    if  response.recognition_result:
         print(f"Recognition result: { response.recognition_result.transcript}", )

def audio_request_iterator(audio):
    """Iterate the request for bidi streaming analyze content
    """
    total_audio_length = len(audio)
    print(f"total audio length {total_audio_length}")
    array = []
    for i in range(0, total_audio_length, POINT_ONE_SECOND_IN_BYTES):
        chunk = audio[i : i + POINT_ONE_SECOND_IN_BYTES]
        array.append(chunk)
        if not chunk:
            break
    return array

def python_client_handler():
    """Downloads audios from the google cloud storage bucket and stream to
    the Bidi streaming AnalyzeContent site.
    """
    print("Start streaming")
    conversation = conversation_management.create_conversation(
        project_id=PROJECT_ID, conversation_profile_id=CONVERSATION_PROFILE_ID_STAGING
    )
    conversation_id = conversation.name.split("conversations/")[1].rstrip()
    human_agent = human_agent = participant_management.create_participant(
        project_id=PROJECT_ID, conversation_id=conversation_id, role="HUMAN_AGENT"
    )

    end_user =    end_user = participant_management.create_participant(
        project_id=PROJECT_ID, conversation_id=conversation_id, role="END_USER"
    )

    end_user_requests = []
    agent_request= []
    download_blob(BUCKET_NAME, FOLDER_PTAH_FOR_CUSTOMER_AUDIO, end_user_requests)
    download_blob(BUCKET_NAME, FOLDER_PTAH_FOR_AGENT_AUDIO, agent_request)

    participant_bidi_streaming_analyze_content( human_agent, agent_request)
    participant_bidi_streaming_analyze_content( end_user, end_user_requests)

    conversation_management.complete_conversation(PROJECT_ID, conversation_id)

Mengaktifkan integrasi SipRec telepon

Anda dapat mengaktifkan integrasi SipRec telepon untuk menggunakan BidiStreamingAnalyzeContent untuk pemrosesan audio. Konfigurasikan pemrosesan audio Anda dengan konsol Agent Assist atau permintaan API langsung.

Konsol

Ikuti langkah-langkah berikut untuk mengonfigurasi pemrosesan audio Anda agar menggunakan BidiStreamingAnalyzeContent.

  1. Buka konsol Agent Assist dan pilih project Anda.

    Konsol Agent Assist

  2. Klik Conversation Profiles > nama profil.

  3. Buka Telephony settings.

  4. Klik untuk mengaktifkan Use Bidirectional Streaming API> Save.

API

Anda dapat memanggil API secara langsung untuk membuat atau memperbarui profil percakapan dengan mengonfigurasi flag di ConversationProfile.use_bidi_streaming.

Contoh konfigurasi:

{
"name": "projects/PROJECT_ID/locations/global/conversationProfiles/CONVERSATION_PROFILE_ID",f
"displayName": "CONVERSATION_PROFILE_NAME",
"automatedAgentConfig": {
},
"humanAgentAssistantConfig": {
  "notificationConfig": {
    "topic": "projects/PROJECT_ID/topics/FEATURE_SUGGESTION_TOPIC_ID",
    "messageFormat": "JSON"
      },
  },
"useBidiStreaming": true,
"languageCode": "en-US"
}

Kuota

Jumlah permintaan BidiStreamingAnalyzeContent serentak dibatasi oleh kuota baru ConcurrentBidiStreamingSessionsPerProjectPerRegion. Lihat Google Cloud panduan kuota untuk mengetahui informasi tentang penggunaan kuota dan cara meminta peningkatan batas kuota.

Untuk kuota, penggunaan permintaan BidiStreamingAnalyzeContent ke endpoint Dialogflow global dan multi-region AS berada di region us-central1.