Titik masuk untuk HappyOyster Android SDK adalah objek singleton HappyOyster. Kecuali initialize, updateToken, attachVideo, dan sendCommand, semua metode bisnis adalah fungsi suspend yang melempar SDKError saat gagal. Mencakup tiga mode petualangan / pengarahan / akting, konfigurasi model yang diperlukan, dan aspectRatio.
CancellationException tanpa perubahan alih-alih mengonversinya menjadi SDKError. Pembatalan tidak membatalkan permintaan yang telah diterima oleh server.
Untuk alur integrasi, instalasi, dan praktik terbaik, lihat Panduan Integrasi Android SDK Happy Oyster.
Terminologi Inti
Istilah | Arti |
|---|---|
token | API Key gateway Bailian: disuntikkan sebagai token Bearer oleh aplikasi Anda melalui |
ticket | Kredensial pengalaman sekali pakai: ditukar oleh server Anda melalui platform terbuka dan dikirimkan ke klien, hanya digunakan untuk satu |
Persyaratan Lingkungan
Item | Persyaratan |
|---|---|
minSdk | 24 (Android 7.0) dan di atasnya |
compileSdk | 36 |
Bahasa | Kotlin (API |
ABI |
|
Jaringan | Akses internet publik diperlukan |
Konsep Inti
Konsep | Deskripsi |
|---|---|
Dunia | Dunia AI, yang berisi karakter dan adegan. Dibuat dan dikelola oleh server Anda. |
Travel | Satu pengalaman real-time tunggal. Siklus hidup dasar: |
Mode |
|
Video waktu nyata | Dibuat dan dipelihara secara otomatis oleh SDK setelah |
Ikhtisar
Metode HappyOyster
Metode | Deskripsi |
|---|---|
| Menginisialisasi SDK. Inisialisasi ulang saat idle didukung; inisialisasi ulang saat Travel sedang dimulai, aktif, atau berakhir akan ditolak dengan |
| Menyuntikkan/memperbarui API Key gateway Bailian (token Bearer). |
| Memulai pengalaman dengan kredensial sekali pakai dan secara otomatis membangun koneksi video waktu nyata. |
| Menjeda pengalaman secara asinkron (pengarahan dan Akting, dan hanya jika pengalaman mendukung penjedaan); setelah diterima, jeda aktual ditentukan oleh |
| Melanjutkan pengalaman yang dijeda (pengarahan dan Akting); mencakup backoff coba lagi 3× secara internal. |
| Memutar ulang ke jumlah detik yang ditentukan (hanya pengarahan, status |
| Mengirimkan instruksi teks untuk menggerakkan narasi (pengarahan dan Akting, |
| Mengirimkan perintah kontrol arah/tampilan/tindakan (mode petualangan, hanya |
| Mengembalikan |
| Mengakhiri pengalaman, secara otomatis memutuskan koneksi waktu nyata dan melepaskan semua sumber daya sesi. |
| String versi SDK (SemVer), sebuah konstanta waktu kompilasi. |
Event
Peristiwa | Deskripsi |
|---|---|
| Perubahan status pengalaman (termasuk siklus hidup video waktu nyata); nilai didefinisikan dalam |
| Panggilan balik ketika alur otomatis internal gagal; kesalahan fatal juga mengakhiri pengalaman saat ini. |
Tipe data utama
Tipe | Deskripsi |
|---|---|
| Konfigurasi inisialisasi SDK ( |
| Status pengalaman: |
| Mode pengalaman: |
| Model pembuatan dunia: |
| Dikembalikan oleh |
| Parameter untuk |
| Kesalahan SDK; berisi |
HappyOyster.initialize
Menginisialisasi SDK; panggil sebelum API lainnya (sebaiknya dalam Application.onCreate). config wajib diisi dan harus membawa apiHost Bailian akun Anda serta model berupa happyoyster-1.0-directing / happyoyster-1.0-acting / happyoyster-1.0-adventure (sesuai dengan entri Open API). SDK menyusun URL permintaan sebagai berikut:
model tidak memiliki nilai default: mengabaikannya saat membuat SDKConfig merupakan kesalahan waktu kompilasi. Meneruskan nilai kosong menyebabkan initialize melempar SDKError(100002) secara sinkron; tidak ada runtime yang dibuat atau diganti dan tidak ada permintaan jaringan yang dilakukan. SDK hanya menyimpan konteks aplikasi, bukan Activity. Inisialisasi ulang hanya didukung saat runtime sebelumnya sedang idle. Untuk mengganti model, lakukan inisialisasi ulang dengan model baru saat idle; jika Travel sedang dimulai, aktif, atau berakhir, tunggu endTravel() terlebih dahulu.
- Untuk mendukung kepatuhan terhadap persyaratan hukum dan data yang berlaku, jika pengguna target Anda mencakup pengguna AS, Anda harus mengonfigurasi API Host wilayah AS selama inisialisasi SDK untuk layanan yang disediakan kepada pengguna tersebut.
- Pengembang bertanggung jawab atas konfigurasi yang benar dan menanggung tanggung jawab yang sesuai berdasarkan hukum yang berlaku jika gagal mengikuti persyaratan ini.
Tanda Tangan
Parameter
Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
|
| Ya | Disarankan untuk meneruskan |
|
| Ya | Konfigurasi SDK; harus menyertakan |
Mengembalikan
Tidak ada nilai kembalian.
Kesalahan
code | Deskripsi |
|---|---|
|
|
| Inisialisasi ulang ditolak karena Travel sedang dimulai, aktif, atau berakhir. Tunggu |
HappyOyster.updateToken
Menyuntikkan/memperbarui Kunci API gateway Bailian. Aman untuk thread dan dapat dipanggil setelah initialize; SDK menggunakan token terbaru untuk startTravel dan permintaan kontrol pengalaman berikutnya. ticket adalah kredensial pengalaman sekali pakai dan tidak boleh dicampuradukkan dengan token Bearer.
Tanda Tangan
Parameter
Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
|
| Ya | API Key gateway Bailian, digunakan sebagai token Bearer. |
Mengembalikan
Tidak ada nilai kembalian.
Kesalahan
code | Deskripsi |
|---|---|
| SDK belum diinisialisasi. |
HappyOyster.startTravel
Memulai pengalaman dengan ticket sekali pakai. Jika berhasil, SDK secara otomatis membuat koneksi video real-time dan memulai polling status internal, dengan status ditampilkan melalui onStatusChanged.
ticketadalah kredensial sekali pakai dan dianggap terpakai setelah panggilan dilakukan.- Hanya satu Travel konkuren yang diizinkan per aplikasi pada waktu tertentu; memanggil lagi saat pengalaman sedang berlangsung akan melempar
SDKError(103004), denganSDKError.rawhanya berisi ringkasan yang disamarkan dari tiket yang sedang aktif untuk diagnosis, tidak pernah tiket lengkap. - Secara opsional teruskan
maxExperienceTimeSecuntuk membatasi durasi maksimum pengalaman ini (hanya mode penjelajahan dunia / petualangan); lihat Parameter.
StartTravelData.creationModel (CreationModelValue, default CreationModelValue.Simple): menunjukkan model pembuatan dunia, yaitu bagaimana konten skrip dikelola. simple (default) adalah dunia berbasis instruksi biasa; dunia penjelajahan dunia juga dinormalisasi ke nilai ini. scriptlist adalah dunia ScriptList terstruktur—konten skripnya tidak diakses melalui SDK ini. Dalam mode ScriptList (creationModel == CreationModelValue.ScriptList), pemanggilan sendInstruct akan ditolak dan melempar SDKError(103002). Bidang ini secara default bernilai simple.
StartTravelData.aspectRatio (String?): rasio aspek pemutaran yang ditetapkan server untuk sesi ini, sebagai string width:height. Non-null hanya untuk Akting—"9:16" (potret, default sisi server saat pembuatan) atau "16:9" (lanskap); null untuk mode penjelajahan dunia dan pengarahan, dan null ketika server tidak melaporkan nilainya. SDK mempertahankan nilai yang tidak dikenal apa adanya (tidak menciutkannya menjadi null), sehingga host harus memperlakukan nilai yang tidak dikenali seperti null dan kembali ke orientasi default mereka sendiri; SDK itu sendiri tidak menggunakan bidang ini.
Nilai ini dikirimkan bersama nilai kembalian startTravel(): sesuaikan ukuran kontainer pemutaran darinya setelah startTravel() kembali dan sebelum memanggil attachVideo() serta menambahkan tampilan yang dikembalikan ke tata letak Anda—SDK hanya mulai mengikat aliran jarak jauh untuk rendering setelah host memasang tampilannya, sehingga memutuskan orientasi pada titik tersebut masih mendahului frame yang dirender pertama kali (namun, tidak dijamin terjadi sebelum SDK bergabung dengan ruang real-time). Tampilan jarak jauh diikat dengan mode render clip-to-fill, sehingga kontainer yang orientasinya tidak sesuai dengan nilai ini akan memotong gambar alih-alih memberikan efek letterbox.
Tanda Tangan
Parameter
Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
|
| Ya | Kredensial pengalaman sekali pakai, yang dikirimkan oleh server Anda. |
|
| Tidak | Durasi maksimum pengalaman ini dalam detik; dunia mengakhiri sesi secara otomatis setelah durasi tercapai. Hanya berlaku untuk mode penjelajahan dunia (petualangan); diabaikan dalam mode pengarahan (pengarahan real-time) dan Akting. Nilai yang diizinkan dikonfigurasi oleh server, saat ini |
Mengembalikan
Mengembalikan StartTravelData, yang berisi metadata pengalaman (mode, version, creationModel, aspectRatio, dll.). Periksa metadata yang dikembalikan sebelum memutuskan cara berinteraksi (misalnya, travel.mode, travel.creationModel, travel.version); untuk Acting, sesuaikan juga ukuran kontainer pemutaran dari travel.aspectRatio.
Kesalahan
code | Deskripsi |
|---|---|
|
|
|
|
| Parameter tidak valid (misalnya |
| Dunia tidak dalam status siap |
| Alokasi sumber daya / kegagalan layanan internal |
| Travel sudah sedang dimulai, aktif, atau berakhir, atau |
HappyOyster.pauseTravel / HappyOyster.resumeTravel
Jeda / lanjutkan pengalaman. SDK hanya mengelola satu Travel pada satu waktu; encryptedTravelId diperoleh secara internal oleh SDK dan tidak perlu diteruskan oleh pemanggil.
Prasyarat:
pauseTravel: hanya dapat dipanggil dalam pengarahan atau Akting dan ketika statusnyarunning.resumeTravel: hanya dapat dipanggil dalam pengarahan atau Akting dan ketika statusnyapaused.
StartTravelData.version—storyV2 untuk directing, actingV2 untuk Acting; dibandingkan dengan mengabaikan spasi di sekitarnya dan huruf besar/kecil), jika tidak, baik pauseTravel maupun resumeTravel mengembalikan 103002. Acting mendukung jeda / lanjut tetapi tidak mendukung rewindTravel.
Jeda bersifat asinkron (penting): pauseTravel adalah operasi "berat"—panggilan yang berhasil (pengembalian metode) hanya berarti jeda telah diterima; pada saat itu pengalaman belum benar-benar dijeda. Jeda baru menjadi nyata setelah callback onStatusChanged melaporkan paused. Oleh karena itu, gerakkan mesin status host dan pengontrolan panggilan dari callback tersebut: antara "memanggil pauseTravel" dan "menerima callback paused" Anda dapat menandai status lokal sebagai pausing; hanya setelah menerima paused Anda boleh memulai resumeTravel atau rewindTravel. Jangan menganggap pengembalian pauseTravel sebagai sudah dijeda.
Penanganan koneksi real-time: setelah jeda aktual, SDK memutus koneksi real-time; saat dilanjutkan, SDK secara otomatis bergabung kembali dan memulihkan gambar menggunakan kredensial yang diberikan selama startTravel yang sama, tanpa intervensi host.
Penghalang pembongkaran jeda terurut: setelah Paused dipancarkan, pembongkaran ruang real-time di sisi server mungkin masih tertunda sebentar. SDK menetapkan jendela penyelesaian 3 detik dari konfirmasi jeda. Jika resumeTravel atau rewindTravel dipanggil dalam jendela tersebut, panggilan penangguhan pertama-tama menunggu sisa waktu secara non-blokir, kemudian mengirimkan permintaan API pembukaan ulang ruang. Tidak ada penundaan yang ditambahkan jika 3 detik telah berlalu secara alami. Hal ini mencegah pembongkaran jeda yang terlambat menutup ruang yang baru dibuka dan memunculkan 105001.
Percobaan ulang API resume: resumeTravel secara internal mencoba ulang hingga 3 kali saat gagal (backoff 1 d / 2 d / 3 d) untuk menangani ketidaktersediaan layanan singkat setelah jeda; hanya jika semua 3 upaya gagal, kesalahan akan diteruskan ke atas.
resumeTravel berhasil dikembalikan sebelum memulai pauseTravel lagi, untuk menghindari perpindahan yang terlalu sering. Ini adalah rekomendasi cooldown panggilan sisi host dan tidak diberlakukan oleh SDK itu sendiri. Lihat Panduan Integrasi Android SDK Happy Oyster untuk detailnya.Tanda Tangan
Parameter
Tidak ada parameter.
Mengembalikan
Mengembalikan TravelStateData (berisi encryptedTravelId, status).
Kesalahan
code | Deskripsi |
|---|---|
| Tidak ada pengalaman aktif |
| Status tidak diizinkan, atau pengalaman ini tidak mendukung jeda / lanjut |
| Dipanggil dalam mode petualangan; hanya pengarahan dan Akting yang mendukung jeda / lanjut |
HappyOyster.rewindTravel
Memutar ulang ke jumlah detik yang ditentukan. encryptedTravelId diperoleh secara internal oleh SDK.
Prasyarat: hanya dapat dipanggil dalam mode directing dan saat status paused (mundur tidak diizinkan dalam status running). Tidak semua pengalaman directing mendukung mundurn, dan yang tidak didukung akan mengembalikan 103002. Setelah mundur berhasil, pengalaman dilanjutkan secara otomatis dan SDK secara otomatis menyambungkan ulang RTC, tanpa intervensi host.
Acting sama sekali tidak memiliki kemampuan mundur: memanggilnya dalam Acting ditolak secara lokal oleh SDK dengan 103003, dan tidak ada permintaan yang dikeluarkan. Dalam Acting, host sebaiknya menyembunyikan titik masuk mundur alih-alih sekadar menonaktifkan tombol.
Tanda Tangan
Parameter
Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
|
| Ya | Jumlah detik target untuk mundur, yang harus merupakan kelipatan dari 4 (misalnya, 4, 8, 12). Nilai yang bukan kelipatan dari 4 akan dibulatkan ke bawah oleh server menjadi kelipatan 4 terdekat yang lebih kecil (misalnya, memberikan 7 menghasilkan 4). |
Mengembalikan
Mengembalikan RewindTravelData (berisi encryptedTravelId, status, resumedAtSec), di mana resumedAtSec adalah jumlah detik tujuan pemutaran ulang yang sebenarnya oleh server (sudah dibulatkan ke bawah menjadi kelipatan 4).
Kesalahan
code | Deskripsi |
|---|---|
| Tidak ada pengalaman aktif |
| Status bukan |
| Dipanggil dalam mode petualangan atau Akting; hanya mode pengarahan yang mendukung pemutaran ulang |
HappyOyster.sendInstruct
Mengirim instruksi teks untuk menggerakkan narasi. Valid dalam directing atau Acting dan saat status pengalaman adalah running atau paused. encryptedTravelId diperoleh secara internal oleh SDK.
Perilaku dalam status terjeda: SDK tidak melanjutkan secara otomatis saat terjeda; instruksi dikirim langsung. Terserah host untuk memutuskan apakah akan memanggil resumeTravel terlebih dahulu sebelum mengirim instruksi.
Tanda Tangan
Parameter
Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
|
| Ya | Konten instruksi teks yang akan dikirim. |
Mengembalikan
Mengembalikan SendInstructData (berisi encryptedTravelId, content, accepted).
Kesalahan
code | Deskripsi |
|---|---|
| Tidak ada pengalaman aktif (tidak pernah memanggil |
| Mode saat ini bukan pengarahan maupun Akting (dipanggil dalam mode petualangan) |
| Status pengalaman bukan |
| Blokir moderasi konten |
| Travel tidak ada |
HappyOyster.sendCommand
Mengirimkan perintah kontrol arah/tampilan/tindakan. Hanya valid dalam mode petualangan dan ketika running.
- Panggil pada thread utama; panggilan di luar thread utama secara sinkron melempar
IllegalStateException. - Tidak ada pengalaman aktif melaporkan
103001. - Memanggil di luar mode petualangan (pengarahan / Akting) akan melaporkan
103003. - Status yang tidak diizinkan melaporkan
103002. - Uplink dibangun melalui aliran audio senyap (SDK tidak merekam atau mengunggah audio nyata);
RECORD_AUDIObukan prasyarat mutlak untuk DataChannel, namun mendeklarasikan dan memberikannya sangat disarankan untuk kompatibilitas lintas perangkat (lihat Panduan Integrasi Happy Oyster Android SDK § Instalasi · Izin).105004berarti saluran real-time belum siap / pengiriman gagal (misalnya gangguan koneksi DataChannel atau anomali saluran real-time); hal ini tidak dipicu secara langsung oleh izin yang hilang.
sendCommand secara internal membatasi penulisan DataChannel dalam interval 42 ms (sekitar 24 fps). Validasi status berjalan secara sinkron dan segera, melempar kesalahan seketika pada panggilan ilegal; penulisan DataChannel yang sebenarnya dibatasi secara asinkron. Jika setidaknya 42 ms telah berlalu sejak pengiriman sebelumnya, perintah dikirimkan segera (termasuk panggilan pertama). Jika tidak, perintah yang tertunda diganti dengan nilai terbaru dan dikirimkan sekali di akhir jendela 42 ms saat ini. Beberapa panggilan dalam satu jendela karenanya menghasilkan satu penulisan on-wire yang berisi nilai terakhir. Host dapat memanggil sendCommand pada kecepatan frame game tanpa menerapkan pembatas laju sendiri.
Kegagalan pengiriman selama pembatasan: flush yang dibatasi bersifat asinkron, dan kegagalan pengiriman tidak dapat dilempar ke pemanggil—kesalahan ditampilkan melalui callback onError (non-fatal, 105004). Perintah yang tertunda dibuang saat sesi berakhir (perintah tersebut tidak akan dikirim setelah sesi berakhir).
Bidang dan nilai AdventureCommand:
Bidang | Semantik | Nilai |
|---|---|---|
| Pergerakan: maju/kiri/mundur/kanan/diagonal/diam |
|
| Tampilan: atas/bawah/kiri/kanan/diagonal/none |
|
| Interaksi: lompat/serang/jongkok/lari cepat/none |
|
W_A, bukan W dan A konkuren dalam bidang yang sama). Setiap panggilan harus membawa status saat ini yang lengkap.
Praktik terbaik: tindakan sekali tekan vs tindakan tertahan
Gunakan interval 42 ms sebagai model mental:
-
Tindakan satu kali (misalnya, ketuk lompat/serang atau ambil satu langkah): panggil sekali. SDK mengirimkannya pada interval terdekat; tidak diperlukan panggilan berulang atau perintah
Nonelanjutan. -
Tindakan tahan (misalnya, terus bergerak atau berputar): panggil setiap frame saat ditahan. SDK mengeluarkan sekitar satu perintah setiap 42 md. Saat dilepaskan, kirimkan secara eksplisit satu perintah yang berisi
Noneuntuk mengatur ulang status. SDK tidak pernah menghasilkan perintah pengaturan ulang secara otomatis.
Tanda Tangan
Parameter
Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
|
| Ya | Objek perintah yang berisi tiga bidang |
Mengembalikan
Tidak ada nilai kembalian (sinkron). Validasi status berjalan secara sinkron dan segera; penulisan DataChannel dibatasi secara asinkron.
Kesalahan
code | Deskripsi |
|---|---|
| Tidak ada pengalaman aktif |
| Status tidak diizinkan |
| Dipanggil di luar mode petualangan (pengarahan / Akting) |
| Kegagalan pengiriman flush yang dibatasi (non-fatal, panggilan balik asinkron) |
HappyOyster.attachVideo
Mengembalikan SurfaceView untuk pemutaran, yang Anda tambahkan ke tata letak Anda; SDK secara internal menyelesaikan pengikatan render dengan stream jarak jauh.
- Panggil pada thread utama; panggilan di luar thread utama secara sinkron melempar
IllegalStateException. - SDK hanya menyimpan referensi lemah ke Tampilan yang dikembalikan dan melepaskan pengikatan render ketika pengalaman berakhir; Anda harus menghapus Tampilan dari tata letak sendiri.
- Untuk pengalaman Acting, sesuaikan ukuran kontainer pemutaran dari
StartTravelData.aspectRatiosebelum menambahkan tampilan yang dikembalikan ke tata letak Anda: rendering terikat dengan mode clip-to-fill, sehingga orientasi yang tidak cocok akan memotong gambar (lihatstartTravel).
Tanda Tangan
Parameter
Tidak ada parameter.
Mengembalikan
Mengembalikan SurfaceView; tambahkan ke tata letak Anda untuk memutar video waktu nyata.
Kesalahan
code | Deskripsi |
|---|---|
| SDK belum diinisialisasi |
HappyOyster.endTravel
Mengakhiri pengalaman. encryptedTravelId diperoleh secara internal oleh SDK. Setelah panggilan berhasil (atau keluar tidak normal), SDK secara otomatis memutus koneksi real-time, menghentikan polling internal, dan melepaskan semua sumber daya sesi, dan ticket saat ini divalidasi pada saat yang sama.
Tanda Tangan
Parameter
Tidak ada parameter.
Mengembalikan
Mengembalikan EndTravelData (berisi encryptedTravelId, status, endedAt, durationSec).
Kesalahan
code | Deskripsi |
|---|---|
| SDK belum diinisialisasi |
| Tidak ada pengalaman aktif |
HappyOyster.VERSION
Mengembalikan string versi SDK (SemVer), seperti "x.y.z". Nilai ini adalah konstanta waktu kompilasi yang disuntikkan oleh properti Gradle VERSION_NAME; nilainya dapat dibaca dengan aman tanpa memanggil initialize terlebih dahulu.
Tanda Tangan
Mengembalikan
String versi SDK, seperti "x.y.z".
Pendengaran Peristiwa
Peristiwa | Deskripsi |
|---|---|
| Perubahan status pengalaman (termasuk siklus hidup video waktu nyata); nilai didefinisikan dalam |
| Panggilan balik ketika alur otomatis internal gagal; kesalahan fatal juga mengakhiri pengalaman saat ini (lihat bagian kode kesalahan). |
addListener / removeListener harus dipanggil setelah initialize; memanggilnya sebelum inisialisasi akan melempar SDKError(100001). Disarankan untuk mendaftarkan listener segera setelah HappyOyster.initialize(...) berhasil dikembalikan.Model Data
Kode Kesalahan
Kesalahan diidentifikasi oleh code numerik. SDK meneruskan kode kesalahan bisnis yang dapat ditangani oleh pemanggil (umumnya 4xxxxx / 5xxxxx); kode kesalahan SDK lokal adalah 1xxxxx.
Kode kesalahan bisnis (umum)
code | Arti | Penanganan yang disarankan |
|---|---|---|
| Parameter tidak valid (enum tidak valid, dll.) | Periksa parameter permintaan atau versi SDK |
|
| Minta server Anda menerbitkan ulang kredensial |
|
| Kredensial bersifat sekali pakai; terbitkan ulang |
| Dunia tidak ada, telah dihapus, atau bukan milik pengembang saat ini (termasuk dunia yang sudah dihapus dalam kredensial | Pilih ulang Dunia yang valid |
| Dunia tidak dalam status siap | Tunggu hingga dunia siap sebelum memulai |
| Pelanggaran konten input (moderasi konten); berlaku untuk instruksi teks | Ubah konten masukan dan coba lagi |
| Spesifikasi layanan tidak diaktifkan untuk akun ini | Jangan coba lagi karena kapasitas penuh; beralihlah ke spesifikasi yang diaktifkan atau minta pengaktifan |
| Konfigurasi kapasitas sementara tidak tersedia | Coba lagi nanti |
| Sumber daya Travel tidak ada atau ID bukan milik akun saat ini | Mulai ulang Travel |
| Permintaan bertentangan dengan status sumber daya saat ini | Periksa status Travel |
| Batas konkurensi SKU tercapai | Coba lagi setelah sesi yang ada berakhir (jangan kelirukan dengan |
| Tidak ada kapasitas yang tersedia saat ini | Coba lagi nanti |
| Alokasi sumber daya inferensi / kegagalan layanan internal | Coba lagi nanti |
| Kesalahan sistem internal | Coba lagi nanti / laporkan |
Kode kesalahan lokal sisi klien
code | Arti | Fatal? | Penanganan yang disarankan |
|---|---|---|---|
| Dipanggil sebelum SDK diinisialisasi | Panggilan ditolak |
|
|
| Inisialisasi gagal | Teruskan nama dan versi model lengkap yang tidak kosong, lalu panggil |
| Kunci API gateway Bailian tidak disuntikkan | Tidak | Coba lagi setelah |
| Kunci API Bearer gateway Bailian kedaluwarsa atau ditolak. Catatan: ini adalah Kunci Bearer gateway, bukan tiket sekali pakai; kesalahan kredensial tingkat tiket diidentifikasi oleh kode server enam digit (misalnya, | Tidak | Dapatkan kembali Kunci Bearer dan |
| Tidak ada pengalaman aktif saat ini | Panggilan ditolak |
|
| Status saat ini tidak mengizinkan operasi ini (termasuk: ketidakcocokan status; pengalaman tidak mendukung jeda / lanjut / mundur untuk | Panggilan ditolak | Periksa status dan mode pengalaman; |
| Ketidakcocokan mode: | Panggilan ditolak | Periksa apakah mode saat ini sesuai dengan persyaratan antarmuka |
| Panggilan | Panggilan ditolak | Tunggu |
| Koneksi waktu nyata gagal | Ya | Akhiri dan mulai ulang |
| Waktu bergabung waktu nyata habis | Ya | Akhiri dan mulai ulang |
| Waktu menunggu frame pertama video habis | Ya | Akhiri dan mulai ulang |
| Saluran waktu nyata belum siap / pengiriman gagal | Tidak | Konfirmasikan saluran real-time siap dan coba ulang |
| Panggilan pensinyalan HTTP gateway SDK tidak mengembalikan respons dalam | Tidak | Disarankan untuk mencoba kembali, atau tingkatkan |
| Berakhir otomatis karena tidak ada stream: frame pertama tidak pernah tiba, atau stream terputus saat berjalan dan tidak pulih sebelum batas waktu. SDK secara proaktif mengakhiri pengalaman saat ini | Ya | Akhiri dan mulai ulang |
| Kesalahan jaringan lokal | Tidak | Dapat dicoba ulang |
| Penguraian respons gagal | Tidak | Dilempar ke pemanggil ketika dipicu oleh panggilan eksplisit; pada polling status internal, hanya |
| Layanan hulu mengembalikan respons kesalahan yang tidak dapat dikenali; SDK telah menyimpan informasi asli dalam | Tidak | Dapat dicoba ulang; jika berlanjut, selidiki ketersediaan layanan bersama dengan |
| SDK dinonaktifkan dari jarak jauh (dimatikan sepenuhnya atau versi terlalu rendah); alasannya ada di | Ya (ketika SDK mendeteksi hasil penonaktifan, SDK secara otomatis mengakhiri pengalaman yang sedang berlangsung; Anda dapat memulai ulang setelah pemulihan) | Berikan petunjuk kepada pengguna berdasarkan alasan di |
100001/100002/103xxx hanya menolak/melempar untuk panggilan tersebut (100002 secara langsung menggagalkan inisialisasi) dan tidak mengakhiri pengalaman.- Kesalahan fatal: SDK secara otomatis mengakhiri pengalaman saat ini (memutuskan koneksi real-time, melepaskan sumber daya, memanggil
endTravel) dan memunculkannya melaluionError; host harus membersihkan status pengalaman saat ini dan mengizinkan memulai ulang. Terdapat empat kategori: ① polling status internal membaca status pengalamanfailed(misalnya, kegagalan inferensi500001); ② koneksi real-time fatal (105001/105002/105003); ③ berakhir otomatis tanpa aliran (105006: frame pertama tidak pernah tiba, atau aliran terputus saat berjalan dan tidak pulih sebelum batas waktu, dan SDK secara proaktif mengakhirinya); ④ SDK dinonaktifkan dari jarak jauh (108001). - Kesalahan non-fatal: tidak mengakhiri pengalaman dan hanya dimunculkan melalui
onError; Anda dapat memanggilupdateTokenlagi atau menunggu layanan / saluran real-time pulih sebelum melanjutkan. Satu permintaan gagal dari polling status internal itu sendiri (jaringan106001, parsing106002, anomali hulu106003, kesalahan bisnis5xxxxx) termasuk dalam kategori ini—polling berlanjut pada siklus berikutnya, dan hanya ketika membaca statusfailedbarulah pengalaman diakhiri; kegagalan autentikasi101001dan kegagalan pengiriman flush-terbatas asinkronsendCommand105004juga bersifat non-fatal. Catatan: SDK tidak pernah mengirimkan payload keepalive apa pun melalui saluran real-time, sehingga105004tidak dapat muncul saat sesi idle—hal ini hanya dapat dipicu oleh panggilansendCommandAnda sendiri.