Platform Telepon Google

Panduan ini menjelaskan proses pembuatan dan konfigurasi nomor telepon Google Telephony Platform (GTP) baru untuk aplikasi agen Anda. Fitur siap pakai ini memungkinkan Anda melampirkan nomor telepon baru ke agen yang dapat menangani traffic masuk hanya dalam beberapa menit.

Jika ingin menggunakan nomor telepon yang sudah ada, Anda dapat mengonfigurasi sistem Session Border Control (SBC) untuk otomatis mengalihkan nomor yang ada ke nomor GTP baru. Untuk mengetahui petunjuk mendetail tentang integrasi dan penyiapan SBC, lihat dokumentasi telepon Dialogflow CX.

Sebelum memulai

  1. Ikuti langkah-langkah di halaman penyiapan dan pembersihan untuk membuat atau mengonfigurasi project yang ingin Anda gunakan untuk deployment.
  2. Buat dan konfigurasi aplikasi agen untuk digunakan dalam deployment.
  3. Aktifkan Dialogflow API di project.

Batasan

Batasan berikut berlaku:

  • Nomor telepon PSTN (Public Switched Telephone Network) standar didukung untuk multi-region us. Untuk multi-region eu, Anda dapat menggunakan nomor telepon virtual.
  • Hanya nomor telepon Amerika Serikat yang didukung di multi-region us.
  • Nomor telepon virtual tidak dapat dihubungi dari telepon PSTN standar.

Menghubungkan aplikasi agen ke nomor telepon GTP

  1. Buka konsol CX Agent Studio dan pilih aplikasi agen Anda.
  2. Di bagian atas konsol, klik tab Deploy, lalu Connect to a platform. Jika Anda sudah memiliki channel yang di-deploy, klik +New channel.
  3. Masukkan Name untuk channel, lalu pilih Google Telephony Platform (GTP) dari menu Platform.
  4. Opsi defaultnya adalah menyediakan nomor telepon virtual untuk menguji aplikasi agen Anda di browser. Untuk menyediakan nomor telepon PSTN (Public Switched Telephone Network) standar, pilih opsi tersebut dari menu drop-down Connection type.
  5. Pilih Version untuk deployment. Jika Anda tidak memiliki versi yang sudah ada, buat versi baru.
  6. (Opsional) Klik tombol Channel-specific behavior untuk mengonfigurasi opsi tambahan. Anda dapat mengubah panjang respons agen, mengaktifkan input DTMF, dan mengizinkan pengguna mengganggu respons agen. Untuk mengetahui informasi selengkapnya tentang setelan ini, lihat dokumentasi setelan aplikasi agen.
  7. Klik Create channel. Anda kini dapat melihat nomor telepon dan ID deployment untuk channel tersebut.
  8. Jika Anda menyediakan nomor telepon PSTN, hubungi nomor tersebut untuk menguji apakah nomor tersebut terhubung ke aplikasi agen Anda, lalu klik Done. Channel baru akan muncul di halaman Deployed channels aplikasi agen. Anda kini dapat menggunakan nomor ini agar pelanggan dapat menghubungi agen Anda. Jika Anda menyediakan nomor telepon virtual, Anda dapat mengujinya di widget WebRTC.

Menguji aplikasi agen di widget WebRTC

Baik Anda menyediakan PSTN standar maupun nomor telepon virtual, Anda dapat menguji aplikasi agen di widget WebRTC menggunakan audio, video, atau teks.

  1. Di bagian atas konsol, klik tab Deploy.
  2. Klik ikon di samping nama channel yang di-deploy. Widget WebRTC akan terbuka di sebelah kanan.
  3. Jika diminta oleh widget WebRTC, berikan izin browser untuk mengakses mikrofon dan kamera Anda.
  4. Berinteraksi dengan agen Anda melalui audio, video, atau teks. Saat menggunakan video, Anda juga dapat beralih ke berbagi layar menggunakan menu drop-down di samping ikon kamera.

Mengonfigurasi perilaku aplikasi agen

Anda dapat menyesuaikan perilaku agen terkait mengakhiri dan mentransfer panggilan.

Mengonfigurasi penghentian panggilan agen

Untuk mengizinkan agen menghentikan panggilan:

  1. Klik simbol plus di kanan atas agen, lalu klik Add tools.
  2. Tambahkan alat end_session ke agen (dan semua sub-agen, jika ada). Alat sistem ini otomatis tersedia untuk setiap agen secara default.
  3. Tambahkan deskripsi perilaku penghentian panggilan ke petunjuk. Contoh: End the call by executing the end_session tool with arguments reason="customer_query_ended".

Mentransfer panggilan ke agen manusia

Untuk mengonfigurasi agen agar mentransfer panggilan ke agen manusia dan mengakhiri bagian panggilan agen virtual:

  • Tambahkan alat sistem end_session ke agen (dan semua sub-agen, jika ada).
  • Buat variabel berikut:
    • escalationMessage: Secara opsional, tambahkan teks ke kolom Default value jika Anda ingin agen mengucapkan pesan sebelum mentransfer panggilan.
    • telephonyTransferCall: Tetapkan Type ke Custom schema. Masukkan objek JSON berikut di kotak input Schema dengan nomor telepon yang ingin Anda gunakan untuk mentransfer panggilan (format E.164 diperlukan).
{
  "phoneNumber": "+PHONE_NUMBER"
}
  • Tambahkan deskripsi perilaku ini ke petunjuk Anda. Contoh: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

Transfer agen manusia yang didukung partner

Jika sistem Anda menyertakan partner non-Google ada dua opsi yang tersedia untuk transfer agen manusia: Variabel liveAgentHandoff atau variabel telephonyPayload. Dalam kedua kasus tersebut, payload JSON dapat bervariasi bergantung pada petunjuk partner.

Transfer agen manusia dengan penyerahan agen langsung:

  • Tambahkan alat sistem end_session ke agen (dan semua sub-agen, jika ada).
  • Buat variabel berikut:
    • liveAgentHandoff: Tetapkan Type ke Custom schema dan tambahkan skema JSON yang diperlukan partner, misalnya:
{
  "PARTNER_NAME": {
    "type": "action",
    "action": "deflection",
    "deflection_type": "sip",
    "sip_uri": "SIP_URI",
    "sip_refer": true,
    "sip_parameters": {
      "x-header": "value"
    }
  }
}
  • Tambahkan deskripsi perilaku ini ke petunjuk Anda. Contoh: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

Transfer agen manusia dengan payload kustom:

  • Tambahkan alat sistem end_session ke agen (dan semua sub-agen, jika ada).
  • Buat variabel berikut:
    • telephonyPayload: Tetapkan Type ke Custom schema dan tambahkan skema JSON yang diperlukan partner, misalnya:
{
  "PARTNER_NAME": {
    "type": "action",
    "action": "deflection",
    "deflection_type": "sip",
    "sip_uri": "SIP_URI",
    "sip_refer": true,
    "sip_parameters": {
      "x-header": "value"
    }
  }
}
  • Tambahkan deskripsi perilaku ini ke petunjuk Anda. Contoh: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

Menggunakan sinyal SIP untuk meneruskan data ke dan dari agen

Jika telah melakukan integrasi SBC, Anda dapat menggunakan sinyal SIP untuk meneruskan data ke agen menggunakan header SIP. Anda juga dapat meneruskan data saat BYE, REFER, atau INVITE dipicu oleh agen.

Semua data yang diteruskan ke agen dapat diakses menggunakan variabel. Anda harus membuat variabel terlebih dahulu untuk mengakses data tersebut.

Nomor telepon penelepon (ANI) disimpan dalam variabel telephony-caller-id dengan jenis Text.

Jika agen harus mengucapkan pesan sebelum melakukan eskalasi, pesan tersebut harus disimpan dalam variabel escalationMessage dengan jenis Text.

Untuk melakukan SIP REFER atau SIP INVITE, variabel telephonyTransferCall dengan jenis Custom schema (advanced) harus ada dengan variabel phoneNumber dan useOriginatingTrunk yang ditentukan.

Data apa pun yang perlu diteruskan harus ada dalam variabel liveAgentHandoff dengan jenis Custom schema (advanced).

Header SIP UUI

Anda dapat meneruskan daftar key-value pair yang dipisahkan titik koma dan dienkode hex, diikuti dengan ;encoding=hex;purpose=Goog-Session-Param. Untuk mengaksesnya dalam agen, buat variabel dengan nama uui-headers dan jenis List.

Misalnya, jika string key1=value1;key2=value2 perlu diteruskan, header UUI berikut harus dikirim, dengan payload adalah nilai yang dienkode hex key1=value1;key2=value2.

User-to-User: 6B6579313D76616C7565313B6B6579323D76616C756532;encoding=hex;purpose=Goog-Session-Param

Variabel uui-headers akan berisi objek berikut:

"uui-headers": ["key1=value1;key2=value2"]

Untuk meneruskan uuiHeaders saat memanggil alat end_session, tentukan params={"liveAgentHandoff": {"uuiHeaders": [ {uui-headers}[0] ]}}

Misalnya, jika header UUI yang diteruskan harus diteruskan saat SIP BYE, Anda akan memiliki petunjuk yang mirip dengan berikut ini:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"uuiHeaders": [ {uui-headers}[0] ]}}.

Header x-SIP

Header SIP yang dimulai dengan x- dapat diteruskan ke agen dan disimpan sebagai variabel x-headers dan jenis Custom schema (advanced). Awalan x- dihapus dari nama header dalam variabel.

Misalnya, jika SIP INVITE berisi header berikut:

x-billing-id: 12345

Variabel x-headers akan berisi objek berikut:

{
  "x-headers": {
    "billing-id": "12345"
  }
}

Untuk meneruskan xHeaders, saat memanggil alat end_session, tentukan params={"liveAgentHandoff": {"xHeaders": {x-headers} }}

Misalnya, jika x-header yang diteruskan harus diteruskan saat SIP BYE, Anda akan memiliki petunjuk yang mirip dengan berikut ini:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers} }}.

Mengirim SIP BYE

Saat agen mengakhiri panggilan, SIP BYE akan dikirim. Untuk mengirim uuiHeaders dan xHeaders di SIP BYE, gunakan petunjuk yang mirip dengan contoh berikut:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

Mengirim SIP REFER

Jika agen perlu mengeskalasi panggilan ke agen manusia dan mengakhiri panggilan, SIP REFER harus digunakan. SIP REFER dipicu dengan menentukan "sipRefer": true dalam variabel liveAgentHandoff dan nomor refer-to harus diberikan dalam variabel telephonyTransferCall. Contoh petunjuk untuk melakukan SIP REFER dan meneruskan uuiHeaders dan xHeaders:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"sipRefer": true, "xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

Mengirim SIP INVITE

Jika agen perlu mengeskalasi panggilan ke agen manusia dan tetap melakukan panggilan sehingga fitur Agent Assist dapat digunakan, SIP INVITE harus digunakan. SIP INVITE dipicu oleh phoneNumber dalam variabel telephonyTransferCall. Contoh petunjuk untuk melakukan SIP INVITE dan meneruskan uuiHeaders dan xHeaders:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

Membuat pengendali untuk panggilan jarak jauh yang terputus

Saat pelanggan menutup telepon, peristiwa tertentu, sys.remote-call-disconnected, akan dipicu, yang dapat digunakan untuk memicu panggilan alat dalam CX Agent Studio. Pada contoh berikut, alat sum dipanggil saat pelanggan menutup telepon.

Alat sum ditentukan sebagai alat kode Python dan berisi kode:

def sum(x: int, y: int) -> int:
  """
  Computes the sum of two numbers.

  Args:
    x: The first number.
    y: The second number.

  Returns:
    The sum of the two numbers.
  """
  return x+y

Di agen root, buat callback Before LLM dengan logika untuk memantau peristiwa panggilan yang terputus. Di LlmResponse, lakukan panggilan alat sum, lalu panggil alat end_session.

def before_model_callback(callback_context: CallbackContext, llm_request: LlmRequest) -> Optional[LlmResponse]:

  for part in callback_context.get_last_user_input():
    if part.text == "<event>sys.remote-call-disconnected</event>":
      return LlmResponse.from_parts(
        [Part.from_function_call('sum', {'x': 1, 'y': 2}),
         Part.from_end_session(reason='sum tool called after caller disconnected')]
      )
  return None