Endpoint panggilan

Endpoint API panggilan menyediakan akses ke objek panggilan. Objek panggilan dibuat untuk setiap panggilan yang dilakukan ke dan dari Contact Center AI Platform (CCAI Platform).

Berikut adalah endpoint API panggilan:

Objek panggilan

Berikut adalah contoh objek panggilan:

[
  {
    "id": 0,
    "parent_id": 0,
    "lang": "en",
    "call_type": "Voice Scheduled (API)",
    "status": "scheduled",
    "created_at": "2018-06-07T19:49:52.896Z",
    "queued_at": "2018-06-07T19:49:52.896Z",
    "assigned_at": "2018-06-07T19:49:52.896Z",
    "connected_at": "2018-06-07T19:49:52.896Z",
    "ends_at": "2018-06-07T19:49:52.896Z",
    "scheduled_at": "2018-06-07T19:49:52.896Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": 0,
    "has_feedback": true,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": "string",
    "out_ticket_url": "string",
    "verified": true,
    "recording_url": "string",
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_details": "string",
    "fail_reason": "nothing",
    "support_number": "string",
    "selected_menu": {
      "id": 0,
      "name": "string",
      "parent_id": 0,
      "position": 0,
      "deleted": true,
      "hidden": "string",
      "menu_type": "ivr_menu",
      "output_msg": "string"
    },
    "menu_path": {
      "items_count": 0,
      "name": "string",
      "materialized_path": "string"
    },
    "agent_info": {
      "id": 0,
      "name": "string",
      "last_name": "string",
      "first_name": "string",
      "agent_number": "string",
      "avatar_url": "string"
    },
    "end_user": {
      "id": 0,
      "identifier": "string",
      "out_contact_id": "string"
    },
    "photos": [
      {
        "id": 0,
        "photo_type": "photo",
        "url": "string"
      }
    ],
    "videos": [
      {
        "id": 0,
        "url": "string"
      }
    ],
    "transfers": [
      {
        "id": 0,
        "status": "transferring",
        "fail_reason": "nothing",
        "created_at": "2018-06-07T19:49:52.896Z",
        "from_menu": {
          "items_count": 0,
          "name": "string",
          "materialized_path": "string"
        },
        "to_menu": {
          "items_count": 0,
          "name": "string",
          "materialized_path": "string"
        },
        "from_agent": {
          "id": 0,
          "name": "string",
          "last_name": "string",
          "first_name": "string",
          "agent_number": "string",
          "avatar_url": "string"
        },
        "to_agent": {
          "id": 0,
          "name": "string",
          "last_name": "string",
          "first_name": "string",
          "agent_number": "string",
          "avatar_url": "string"
        }
      }
    ],
    "participants": [
      {
        "id": 0,
        "type": "end_user",
        "status": "waiting",
        "call_id": 0,
        "user_id": 0,
        "end_user_id": 0,
        "call_duration": 0,
        "hold_duration": 0,
        "connected_at": "2018-06-07T19:49:52.896Z",
        "ended_at": "2018-06-07T19:49:52.896Z",
        "fail_reason": "nothing"
      }
    ]
  }
]

Definisi status panggilan

Kolom status dapat berada dalam salah satu status berikut:

Status Panggilan Deskripsi
Memilih Status yang terjadi saat pengguna akhir telah menghubungi pusat kontak, tetapi masih menavigasi opsi menu sebelum ditempatkan di menu leaf.
Dalam antrean Status yang terjadi setelah pengguna akhir memilih node menu leaf dan memulai permintaan panggilan untuk disiarkan atau dikirim ke beberapa agen.
Assigned Status yang terjadi saat agen dipilih untuk menerima panggilan pengguna akhir. Hal ini terjadi saat panggilan dijawab oleh agen.
Menghubungkan Status yang terjadi setelah agen ditetapkan, dan koneksi sedang dibuat antara pengguna akhir dan agen.
Terhubung Status yang terjadi saat panggilan telah membuat koneksi dan agen serta pengguna akhir berada dalam panggilan.
Selesai Status yang terjadi saat panggilan berakhir setelah terhubung.
Gagal Status yang terjadi saat panggilan berakhir sebelum berhasil terhubung. Alasan kegagalan juga akan diberikan untuk detail tambahan.
Mengalihkan Status yang terjadi saat panggilan gagal saat mencoba terhubung dan Platform CCAI mencoba menghubungkan panggilan dengan penyedia VOIP lain.
Dipulihkan Status yang terjadi saat panggilan yang gagal dipanggil kembali. Panggilan baru ini adalah turunan dari panggilan asli. Memulihkan catatan yang panggilan baliknya selesai tanpa error.
Dijadwalkan Status yang terjadi saat pengguna akhir telah menjadwalkan panggilan mendatang menggunakan Dalam Web atau Dalam Aplikasi.
Hanya Tindakan Status yang terjadi saat panggilan yang ditangani oleh penyedia telepon klien kami sendiri terhubung ke iOS atau Android SDK kami.
Tindakan Selesai Saja Status yang terjadi saat panggilan yang ditangani oleh penyedia teleponi klien kami sendiri terhubung ke iOS atau Android SDK kami dan selesai
Tembakan berbelok arah Status yang terjadi berdasarkan konfigurasi untuk antrean yang melebihi kapasitas atau panggilan di luar jam kerja. Opsi pengalihan mencakup pesan suara, menjadwalkan panggilan, dan lainnya. Pengalihan akan bervariasi berdasarkan saluran (Dalam aplikasi, IVR, Dalam web)
Pesan suara Status yang terjadi saat pengguna akhir dialihkan ke opsi pesan suara, dan memilih untuk meninggalkan pesan suara untuk didengarkan nanti. Status ini ada saat pengguna akhir meninggalkan pesan suara
Pesan Suara Diterima Status yang terjadi setelah pengguna akhir meninggalkan pesan suara dan agen belum mendengarkan pesan suara tersebut
Pesan Suara Dibaca Status yang terjadi saat agen telah membuka pesan suara untuk didengarkan.

Definisi jenis panggilan

Bidang call_type hanya dapat berupa salah satu dari nilai berikut:

Jenis Panggilan Deskripsi
Voice Outbound (API) Panggilan dilakukan dari Outbound Call API.
Voice Inbound (API) Panggilan dilakukan dari Incoming Call API.
Suara Terjadwal (API) Panggilan dilakukan dari Scheduled Call API.

Kode respons API umum

Berikut adalah Respons API yang paling umum:

Kode Respons Arti
201 Permintaan API telah berhasil dan akan membuat panggilan
202 Permintaan API berhasil, tetapi intervensi manual diperlukan di dalam widget untuk menyelesaikan tindakan
400 jenis panggilan tidak valid - pastikan call_type didukung
400 Agen tidak tersedia untuk menerima panggilan ini
400 Parameter tidak ada - periksa untuk memastikan bahwa parameter yang diperlukan telah ditambahkan
404 Resource tidak ditemukan - Periksa subdomain Anda

Panggilan keluar - end_user_number

Parameter Wajib Jenis Data Definisi
call_tye TRUE String Panggil tye untuk membuat. "Voice Outbound (API)", "OutboundCall" (tidak digunakan lagi) tersedia untuk saat ini
agent_email TRUE String Alamat email agen yang akan ditugaskan untuk panggilan keluar.
ticket_id FALSE String ID tiket CRM dan akan menghubungi pengguna akhir yang terkait dengan tiket tersebut.
end_user_number FALSE String Nomor telepon pengguna akhir yang akan melakukan panggilan. ticket_id memiliki prioritas yang lebih tinggi daripada end_user_number.
outbound_number FALSE String Nomor keluar yang dibuat dengan benar dan dikelola dari Setelan > Nomor Telepon > Pengelolaan Nomor Telepon. Nomor keluar default akan digunakan jika kosong
lang FALSE String Bahasa dalam panggilan. Menggunakan kode ISO 639-1. (Default: "en")

Endpoint:

Method: POST
Type: RAW
URL: https://{subdomain}.​{domain}​/apps/api/v1/calls

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}

Contoh permintaan dan respons

Bagian berikut memberikan contoh permintaan ke endpoint.

Error : Agen tidak tersedia untuk menerima panggilan ini

Contoh ini menunjukkan skenario kegagalan saat agen tidak tersedia untuk menerima panggilan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respons: Error : Agen tidak tersedia untuk menerima panggilan ini
{
    "message": "Agent is not available to take this call"
}

Kode Status: 400

Membuat panggilan keluar dengan nomor pengguna akhir

Contoh ini menunjukkan cara melakukan panggilan keluar untuk nomor pengguna akhir tertentu.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Respons: Buat panggilan keluar dengan end_user_number
{
    "id": 397,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:27:30.406Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:27:30.441Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/avatar.jpg"
    },
    "end_user": null,
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 610,
            "type": "agent",
            "status": "waiting",
            "call_id": 397,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 611,
            "type": "end_user",
            "status": "waiting",
            "call_id": 397,
            "user_id": null,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Kode Status: 201

Membuat panggilan keluar dengan ID tiket

Contoh ini menunjukkan pembuatan panggilan keluar dengan ID tiket tertentu.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "ticket_id": "71450",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Respons: Membuat panggilan keluar dengan ticket_id
{
    "id": 398,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:28:47.955Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:28:47.971Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": "71450",
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/avatar.png"
    },
    "end_user": {
        "id": 67,
        "identifier": null,
        "out_contact_id": "381630957514"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 612,
            "type": "agent",
            "status": "waiting",
            "call_id": 398,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 613,
            "type": "end_user",
            "status": "waiting",
            "call_id": 398,
            "user_id": null,
            "end_user_id": 67,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Kode Status: 201

Error : ID tiket atau nomor pengguna akhir diperlukan

Contoh ini menunjukkan kasus kegagalan saat ID tiket atau nomor pengguna akhir diperlukan, tetapi tidak diberikan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Respons: Error : ticket_id atau end_user_number wajib diisi

{
    "message": "ticket_id or end_user_number required"
}

Kode Status: 400

Error : Bukan email agen yang valid

Contoh ini menunjukkan kegagalan saat alamat email yang diberikan untuk agen tidak valid.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Respons: Error : Bukan email agen yang valid

{
    "message": "Not a valid agent email"
}

Kode Status: 400

Error : Email agen diperlukan

Contoh ini menunjukkan kegagalan saat alamat email tidak diberikan untuk agen.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Respons: Error : Email agen wajib diisi

{
    "message": "Agent email required"
}

Kode Status: 400

Error : Agen tidak memiliki akses untuk melakukan panggilan

Contoh ini menunjukkan kegagalan saat agen yang ditentukan tidak diizinkan untuk dapat melakukan panggilan keluar.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respons: Error : Agen tidak memiliki akses untuk melakukan panggilan
{
    "message": "Agent does not have access to make calls"
}

Kode Status: 400

Error : end_user_number tidak terbentuk dengan baik

Contoh ini menunjukkan skenario kegagalan saat nomor pengguna akhir yang diberikan tidak diformat dengan benar.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Respons: Error : end_user_number tidak terbentuk dengan baik
{
    "message": "end_user_number is not well-formed"
}

Kode Status: 400

Error : Kontak tidak ditemukan

Contoh ini menunjukkan skenario kegagalan saat kontak yang diberikan tidak ada.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "ticket_id": 1,
    "lang": "en"
}
Respons: Error : Kontak tidak ditemukan
{
    "message": "Contact not found"
}

Kode Status: 400

Diterima : Perlu memilih nomor keluar

Dalam contoh ini, panggilan keluar diterima, tetapi agen harus memilih nomor keluar yang akan digunakan sebelum panggilan dilakukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}
Respons
{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Kode Status: 200

Error : Jenis panggilan tidak valid

Contoh ini menunjukkan skenario kegagalan saat jenis panggilan yang diberikan tidak valid.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Respons: Error : Jenis panggilan tidak valid
{
    "message": "Invalid call type"
}

Kode Status: 400

Memicu adaptor panggilan dengan beberapa nomor keluar

Dalam skenario ini, adaptor panggilan akan diminta dengan beberapa nomor keluar.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}
Respons
{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "lang": "en"
}

Kode Status: 200

Diterima : Agen harus melakukan panggilan keluar dengan ID tiket

Contoh ini menunjukkan permintaan saat agen harus melakukan panggilan keluar berdasarkan ID tiket yang diberikan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Kode Status: 202

Panggilan Keluar - ticket_id

Parameter Wajib Jenis Data Definisi
call_type TRUE String Jenis panggilan yang akan dibuat. "Voice Outbound (API)", "OutboundCall" (tidak digunakan lagi) tersedia untuk saat ini
agent_email TRUE String Alamat email agen yang akan ditugaskan untuk panggilan keluar.
ticket_id FALSE String ID tiket CRM dan akan menghubungi pengguna akhir yang terkait dengan tiket tersebut.
end_user_number FALSE String Nomor telepon pengguna akhir yang akan melakukan panggilan. ticket_id memiliki prioritas yang lebih tinggi daripada end_user_number.
outbound_number FALSE String Nomor keluar yang dibuat dengan benar dan dikelola dari Setelan > Nomor Telepon > Pengelolaan Nomor Telepon. Nomor keluar default akan digunakan jika kosong
lang FALSE String Bahasa dalam panggilan. Menggunakan kode ISO 639-1. (Default: "en")

Endpoint:

Method: POST
Type: RAW
URL: https://{subdomain}.{domain}​/apps/api/v1/calls

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "ticket_id": "123123",
    "lang": "en"
}

Contoh permintaan dan respons

Bagian berikut memberikan contoh permintaan ke endpoint.

Error : ID tiket atau nomor pengguna akhir diperlukan

Dalam contoh ini, skenario kegagalan ID tiket atau nomor pengguna akhir tidak ada, tetapi diperlukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Respons: Error : ticket_id atau end_user_number wajib diisi

{
    "message": "ticket_id or end_user_number required"
}

Kode Status: 400

Error : Email agen diperlukan

Dalam contoh ini, kami menunjukkan skenario kegagalan saat email agen tidak diberikan, tetapi diperlukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respons: Error : Email agen wajib diisi
{
    "message": "Agent email required"
}

Kode Status: 400

Membuat panggilan keluar dengan nomor pengguna akhir

Dalam contoh ini, kami menunjukkan cara membuat panggilan keluar dengan memberikan nomor pengguna akhir.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Respons: Buat panggilan keluar dengan end_user_number
{
    "id": 397,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:27:30.406Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:27:30.441Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reaso": "not_voicemail",
    "deflection": "n_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/default-profile.png"
    },
    "end_user": null,
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 610,
            "type": "agent",
            "status": "waiting",
            "call_id": 397,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 611,
            "type": "end_user",
            "status": "waiting",
            "call_id": 397,
            "user_id": null,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Kode Status: 201

Error : Jenis panggilan tidak valid

Dalam contoh ini, kita menunjukkan skenario kegagalan saat jenis panggilan yang diberikan tidak valid.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "ScheduledCall",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Respons: Error : Jenis panggilan tidak valid
{
    "message": "Invalid call type"
}

Kode Status: 400

Memicu adaptor panggilan dengan beberapa nomor keluar

Dalam contoh ini, kami menunjukkan cara memicu adaptor panggilan dengan beberapa nomor telepon keluar.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "lang": "en"
}

Kode Status: 202

Diterima : Agen harus melakukan panggilan keluar dengan ID tiket

Dalam contoh ini, kami menunjukkan cara melakukan panggilan keluar dengan ID tiket dan agen menerima permintaan tersebut.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json
***Isi:*** ```json { "call_type": "Voice Outbound (API)", "agent_email": "allen@somedomain.com", "end_user_number": "+1 205-123-4567", "lang": "en" } ``` ***Kode Status:*** 202 #### Error : Agen tidak memiliki akses untuk melakukan panggilan Dalam contoh ini, kami menunjukkan skenario kegagalan saat permintaan pembuatan panggilan dikirimkan, tetapi agen tidak memiliki akses untuk dapat melakukan panggilan keluar. ##### Permintaan ***Header:***
Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respons: Error : Agen tidak memiliki akses untuk melakukan panggilan
{
    "message": "Agent does not have access to make calls"
}

Kode Status: 400

Buat panggilan keluar dengan ID tiket.

Dalam contoh ini, kita menunjukkan skenario pembuatan panggilan keluar dengan ID tiket.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "ticket_id": "71450",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Respons: Membuat panggilan keluar dengan ticket_id
{
    "id": 398,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:28:47.955Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:28:47.971Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": "71450",
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/default-profile.png"
    },
    "end_user": {
        "id": 67,
        "identifier": null,
        "out_contact_id": "381630957514"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 612,
            "type": "agent",
            "status": "waiting",
            "call_id": 398,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 613,
            "type": "end_user",
            "status": "waiting",
            "call_id": 398,
            "user_id": null,
            "end_user_id": 67,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Kode Status: 201

Diterima : Perlu memilih nomor keluar

Dalam contoh ini, kami menunjukkan skenario saat permintaan panggilan keluar dibuat dengan kebutuhan untuk memilih nomor keluar, lalu diterima.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Kode Status: 202

Error : Agen tidak tersedia untuk menerima panggilan ini

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan dibuat, tetapi agen tidak tersedia untuk menerima panggilan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respons: Error : Agen tidak tersedia untuk menerima panggilan ini
{
    "message": "Agent is not available to take this call"
}

Kode Status: 400

Error : Nomor pengguna akhir tidak terbentuk dengan baik

Dalam contoh ini, kami menunjukkan skenario kegagalan saat nomor telepon pengguna akhir yang diberikan salah format.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Respons: Error : end_user_number tidak terbentuk dengan baik
{
    "message": "end_user_number is not well-formed"
}

Kode Status: 400

Error : Bukan email agen yang valid

Dalam contoh ini, kita menunjukkan skenario kegagalan saat email agen yang diberikan tidak valid.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respons: Error : Bukan email agen yang valid
{
    "message": "Not a valid agent email"
}

Kode Status: 400

Error : Kontak tidak ditemukan

Dalam contoh ini, kita menunjukkan skenario kegagalan saat kontak yang diberikan tidak dapat ditemukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "ticket_id": 1,
    "lang": "en"
}
Respons: Error : Kontak tidak ditemukan
{
    "message": "Contact not found"
}

Kode Status: 400

Panggilan Masuk

Parameter Wajib Jenis Data Definisi
call_type TRUE String Jenis panggilan yang akan dibuat. Gunakan "Voice Inbound (API)" atau "IncomingCall" (tidak digunakan lagi) untuk membuat panggilan masuk.
menu_id TRUE Bilangan bulat ID menu untuk mengatribusikan panggilan. Hanya ID menu IVR dan Web yang diterima.
end_user_number TRUE String Nomor telepon pengguna akhir yang akan dihubungi. Jika ticket_id dan end_user_number diteruskan, ticket_id akan diprioritaskan.
lang FALSE String Bahasa dalam panggilan. Menggunakan kode ISO 639-1. (Default: "en")
ticket_id FALSE String ID tiket CRM. Nomor telepon pengguna akhir yang terkait dengan tiket akan dihubungi. Jika ticket_id dan end_user_number diteruskan, ticket_id akan diprioritaskan.
outbound_number FALSE String Nomor telepon keluar yang akan digunakan untuk panggilan. Nomor telepon keluar global default akan digunakan jika input tidak diteruskan atau tidak valid. Nomor keluar dikelola dari Setelan > Antrean > EDIT / LIHAT > Pilih antrean > Nomor Telepon Keluar.
recording_permission FALSE String Nilai hanya dievaluasi jika fitur "Opsi Perekaman Panggilan" ditetapkan ke "Minta Izin Pengguna untuk Merekam". Dapat dikonfigurasi di Setelan > Antrean > EDIT / LIHAT > Pilih antrean > Opsi Perekaman Panggilan. Jika nilainya adalah "recording_permission_not_asked" (default) atau "recording_permission_denied", panggilan tidak akan direkam. Jika nilainya adalah "recording_permission_granted", panggilan akan direkam.

Endpoint:

Method: POST
Type: RAW
URL: https://{{subdomain}}.{{domain}}/apps/api/v1/calls

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}

Contoh permintaan dan respons

Bagian berikut memberikan contoh permintaan ke endpoint.

Error : Nomor pengguna akhir tidak terbentuk dengan baik

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan masuk dibuat, tetapi nomor pengguna akhir yang diberikan salah format.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 999-657-12",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : end_user_number tidak terbentuk dengan baik
{
    "message": "end_user_number is not well formed"
}

Kode Status: 400

Error : Menu dalam status 'pengalihan manual', tidak dapat menerima panggilan

Dalam contoh ini, kita menunjukkan skenario kegagalan saat panggilan dirutekan ke ID menu, tetapi menu tersebut dalam status pengalihan manual dan oleh karena itu tidak dapat menerima panggilan masuk.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Menu dalam status 'pengalihan manual', tidak dapat menerima panggilan
{
    "message": "Menu is in 'manual redirection' state, can't accept calls"
}

Kode Status: 400

Error : Jenis panggilan tidak valid

Dalam contoh ini, kita menunjukkan skenario kegagalan saat panggilan masuk dibuat, tetapi jenis panggilan yang diberikan tidak valid.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "InvalidCallType",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Jenis panggilan tidak valid
{
    "message": "Invalid call type"
}

Kode Status: 400

Error : ID menu wajib diisi

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan masuk dibuat, tetapi ID menu yang diberikan tidak valid.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : menu_id wajib diisi
{
    "message": "menu_id is required"
}

Kode Status: 400

Error : Hanya ID IVR dan menu seluler yang diizinkan

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan masuk dibuat, tetapi ID menu yang diberikan bukan ID menu IVR atau seluler.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 50,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Hanya ID IVR dan menu seluler yang diizinkan
{
    "message": "Only IVR and mobile menu IDs are permitted"
}

Kode Status: 400

Membuat panggilan masuk dengan nomor pengguna akhir

Contoh ini menunjukkan cara membuat panggilan masuk dengan nomor pengguna akhir tertentu.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+82-10-6861-2345",
    "recording_permission": "recording_permission_granted"
}
Respons: Buat panggilan masuk dengan end_user_number
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": "2019-09-10T00:19:14.421Z",
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Kode Status: 201

Error : Menu dalam status 'di luar jam kerja', tidak dapat menerima panggilan masuk

Contoh ini menunjukkan kegagalan saat ID menu yang diberikan berada dalam status after hours.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Menu dalam status 'di luar jam kerja', tidak dapat menerima panggilan masuk
{
    "message": "Menu is in 'after hours' state, can't accept incoming calls"
}

Kode Status: 400

Error : Bahasa tidak tersedia

Contoh ini menunjukkan permintaan kegagalan saat bahasa yang ditentukan tidak tersedia.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "fr",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Bahasa tidak tersedia
{
    "message": "Language 'fr' is not available"
}

Kode Status: 400

Membuat panggilan masuk dengan ID tiket

Contoh ini menunjukkan permintaan untuk membuat panggilan masuk dengan ID tiket terkait.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Buat panggilan masuk dengan ticket_id
{
    "id": 519,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T05:12:26.000Z",
    "queued_at": "2019-09-10T05:12:26.295Z",
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": "76517",
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 826,
            "type": "end_user",
            "status": "waiting",
            "call_id": 519,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T05:12:26.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Kode Status: 201

Error : Bahasa tidak ditemukan

Contoh ini menunjukkan kegagalan saat bahasa yang diberikan tidak ditemukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "xy",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Bahasa tidak ditemukan
{
    "message": "Language 'xy' is not found"
}

Kode Status: 400

Error : menu_id tidak ditemukan

Contoh ini menunjukkan kegagalan saat ID menu yang diberikan tidak ditemukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9999,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : menu_id tidak ditemukan
{
    "message": "menu_id 9999 is not found"
}

Kode Status: 400

Error : menu_id tidak terbentuk dengan baik

Contoh ini menunjukkan kegagalan saat ID menu yang diberikan tidak benar.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": "menu_999",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : menu_id tidak terbentuk dengan baik
{
    "message": "menu_id is not well formed"
}

Kode Status: 400

Error : Nomor pengguna akhir wajib diisi

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan masuk dibuat, tetapi nomor telepon pengguna akhir tidak diberikan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "recording_permission": "recording_permission_granted"
}
Respons: Error : end_user_number wajib diisi
{
    "message": "end_user_number is required"
}

Kode Status: 400

Panggilan terjadwal

Parameter Wajib Jenis Data Definisi
call_type TRUE String Jenis panggilan yang akan dibuat. Gunakan "Voice Scheduled (API)" atau "ScheduledCall" (tidak digunakan lagi) untuk membuat panggilan terjadwal.
menu_id TRUE Bilangan bulat ID menu untuk mengatribusikan panggilan. Hanya ID menu Seluler dan Web yang diterima.
call_id FALSE Bilangan bulat ID panggilan sebelumnya, yang akan ditautkan sebagai panggilan induk dari panggilan terjadwal yang baru dibuat. Jika ID panggilan digunakan, menu_id dapat bersifat opsional.
end_user_number TRUE String Nomor telepon pengguna akhir yang akan dihubungi. Jika ticket_id dan end_user_number diteruskan, ticket_id akan diprioritaskan.
lang FALSE String Bahasa dalam panggilan. Menggunakan kode ISO 639-1. (Default: "en")
ticket_id FALSE String ID tiket CRM. Nomor telepon pengguna akhir yang terkait dengan tiket akan dihubungi. Jika ticket_id dan end_user_number diteruskan, ticket_id akan diprioritaskan.
scheduled_at TRUE String Waktu terjadwal panggilan. Menggunakan format ISO 8601 untuk waktu mendatang yang valid.
recording_permission FALSE String Nilai hanya dievaluasi jika fitur "Opsi Perekaman Panggilan" ditetapkan ke "Minta Izin Pengguna untuk Merekam". Dapat dikonfigurasi di Setelan > Antrean > EDIT / LIHAT > Pilih antrean > Opsi Perekaman Panggilan. Jika nilainya adalah "recording_permission_not_asked" (default) atau "recording_permission_denied", panggilan tidak akan direkam. Jika nilainya adalah "recording_permission_granted", panggilan akan direkam.

Endpoint:

Method: POST
Type: RAW
URL: https://{{subdomain}}.{{domain}}/apps/api/v1/calls

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}

Contoh permintaan dan respons

Bagian berikut memberikan contoh permintaan ke endpoint.

Error : end_user_number tidak terbentuk dengan baik

Contoh ini menunjukkan kegagalan karena end_user_number tidak diformat dengan benar.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 999-657-12",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : end_user_number tidak terbentuk dengan baik
{
    "message": "end_user_number is not well formed"
}

Kode Status: 400

Error : Menu dalam status 'pengalihan manual', tidak dapat menerima panggilan

Contoh ini menunjukkan kegagalan saat ID menu yang ditentukan disetel ke pengalihan menu dan tidak dapat menerima panggilan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Menu dalam status 'pengalihan manual', tidak dapat menerima panggilan
{
    "message": "Menu is in 'manual redirection' state, can't accept calls"
}

Kode Status: 400

Error : Jenis panggilan tidak valid

Contoh ini menunjukkan kegagalan saat permintaan dibuat dan jenis panggilan tidak valid.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "InvalidCallType",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Jenis panggilan tidak valid
{
    "message": "Invalid call type"
}

Kode Status: 400

Error : menu_id wajib diisi

Contoh ini menunjukkan permintaan dan respons saat ID menu tidak diberikan, tetapi diperlukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : menu_id wajib diisi
{
    "message": "menu_id is required"
}

Kode Status: 400

Error : Hanya ID menu seluler dan web yang diizinkan

Contoh ini menunjukkan permintaan yang gagal saat ID menu yang diberikan bukan ID menu web atau seluler.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 50,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Hanya ID menu seluler dan web yang diizinkan
{
    "message": "Only mobile and web menu IDs are permitted"
}

Kode Status: 400

Membuat panggilan terjadwal dengan ID menu

Contoh ini menunjukkan cara membuat panggilan terjadwal dengan ID menu tertentu.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+82-10-6861-2345",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Buat panggilan terjadwal dengan ID menu
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": null,
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Kode Status: 201

Membuat panggilan terjadwal dengan ID panggilan

Contoh ini menunjukkan cara membuat panggilan terjadwal dengan ID panggilan tertentu.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "call_id": 514,
    "end_user_number": "+82-10-6861-2345",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Membuat panggilan terjadwal dengan ID panggilan
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": null,
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Kode Status: 201

Error : Menu dalam status 'di luar jam kerja', tidak dapat menerima panggilan masuk

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan terjadwal dibuat, tetapi menu yang diberikan berada di luar jam operasional dan oleh karena itu tidak dapat menerima panggilan masuk.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Menu dalam status 'di luar jam kerja', tidak dapat menerima panggilan masuk
{
    "message": "Menu is in 'after hours' state, can't accept incoming calls"
}

Kode Status: 400

Error : Bahasa tidak tersedia

Contoh ini menunjukkan kegagalan saat bahasa yang ditentukan tidak valid.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "fr",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Bahasa tidak tersedia
{
    "message": "Language 'fr' is not available"
}

Kode Status: 400

Error : Bahasa tidak ditemukan

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan terjadwal dibuat, tetapi bahasa tidak valid atau tidak tersedia.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "xy",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : Bahasa tidak ditemukan
{
    "message": "Language 'xy' is not found"
}

Kode Status: 400

Error : ID menu tidak ditemukan

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan terjadwal dibuat, tetapi ID menu yang diberikan tidak valid dan tidak ditemukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9999,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : ID menu tidak ditemukan
{
    "message": "menu_id 9999 is not found"
}

Kode Status: 400

Error : ID menu tidak terbentuk dengan baik

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan terjadwal dibuat, tetapi ID menu yang diberikan salah format.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": "menu_999",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : menu_id tidak terbentuk dengan baik
{
    "message": "menu_id is not well formed"
}

Kode Status: 400

Error : Nomor pengguna akhir wajib diisi

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan terjadwal dibuat, tetapi nomor pengguna akhir tidak diberikan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : end_user_number wajib diisi
{
    "message": "end_user_number is required"
}

Kode Status: 400

Error : scheduled_at wajib diisi

Dalam contoh ini, kami menunjukkan skenario kegagalan saat panggilan terjadwal dibuat, tetapi nilai waktu yang dijadwalkan tidak ada, padahal diperlukan.

Permintaan

Header:

Kunci Nilai Deskripsi
Content-Type application/json

Isi:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respons: Error : scheduled_at wajib diisi
{
    "message": "scheduled_at is required"
}

Kode Status: 400

Mendapatkan atribut data yang dicadangkan selama panggilan

Endpoint

Method: GET
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag

Contoh permintaan dan respons

Bagian ini berisi contoh permintaan dan respons untuk endpoint.

Berhasil

Contoh ini menunjukkan panggilan yang berhasil.

Permintaan

Variabel URL

Kunci Nilai Deskripsi
id integer (Wajib diisi)
Respons
{
    "verified_customer": "boolean",
    "bad_actor": "boolean",
    "repeat_customer": "boolean"
}

Kode status 0

Memperbarui atribut data yang dicadangkan selama panggilan

Endpoint

Method: PATCH
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag

Variabel URL

Kunci Nilai Deskripsi
id integer (Wajib diisi)

Body

{
    "verified_customer": "boolean",
    "bad_actor": "boolean",
    "repeat_customers": "boolean"
}

Meneruskan parameter data ke agen virtual di tengah sesi

Untuk menggunakan API aplikasi guna meneruskan parameter data ke agen virtual di tengah sesi panggilan, lihat Meneruskan parameter data ke agen virtual di tengah sesi.