API Bidireksional

BiDiStreamingAnalyzeContent API adalah API utama untuk pengalaman audio dan multimodal 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 antar-manusia dan batas waktu yang diperpanjang hingga 15 menit. Selain 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 mengirimkan 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 berlanjut hingga Anda mengakhirinya dengan menutup setengah aliran.

Panduan streaming

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

  1. Panggil metode BiDiStreamingAnalyzeContent dan tetapkan kolom berikut:
    • BiDiStreamingAnalyzeContentRequest.participant
    • (Opsional) BiDiStreamingAnalyzeContentRequest.voice_session_config.input_audio_sample_rate_hertz (Jika ditentukan, opsi ini akan menggantikan konfigurasi dari ConversationProfile.stt_config.sample_rate_hertz.)
    • (Opsional) BiDiStreamingAnalyzeContentRequest.voice_session_config.input_audio_encoding (Jika ditentukan, opsi 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 aliran 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 sebagian aliran kapan saja. Setelah Anda menutup sebagian aliran, server akan mengirimkan kembali respons yang berisi hasil pengenalan yang tersisa, beserta potensi saran Bantuan Agen.
  6. Mulai atau mulai ulang streaming baru dalam kasus berikut:
    • Streaming rusak. Misalnya, streaming berhenti saat seharusnya tidak berhenti.
    • Percakapan Anda hampir mencapai batas maksimum permintaan 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)
    yield dialogflow_v2beta1.BidiStreamingAnalyzeContentRequest(
        config={
            "participant": participant.name,
        }
    )
    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 untuk telepon

Anda dapat mengaktifkan integrasi SipRec telephony untuk menggunakan BidiStreamingAnalyzeContent dalam pemrosesan audio. Konfigurasi 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 Profil Percakapan > nama profil.

  3. Buka Setelan telepon.

  4. Klik untuk mengaktifkan Gunakan Bidirectional Streaming API> Simpan.

API

Anda dapat memanggil API secara langsung untuk membuat atau memperbarui profil percakapan dengan mengonfigurasi tanda 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 penambahan batas kuota.

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