全部产品
Search
文档中心

Application Real-Time Monitoring Service:Referensi SDK

更新时间:Jul 02, 2025

Layanan Pemantauan Real-Time Aplikasi (ARMS) Browser Monitoring menyediakan berbagai item konfigurasi SDK untuk memenuhi kebutuhan yang berbeda. Anda dapat menggunakan item konfigurasi ini untuk mengabaikan URL, Operasi API, atau kesalahan JavaScript (JS), menggabungkan halaman dengan menghapus karakter non-kunci dari URL, serta mengurangi data yang dilaporkan atau beban kerja melalui pengambilan sampel acak.

Metode dalam topik ini

pid | uid | tag | page | setUsername | enableSPA | parseHash | disableHook | ignoreUrlCase | urlHelper | apiHelper | parseResponse | ignore | disabled | sample | pvSample | sendResource | useFmp | enableLinkTrace | release | environment | behavior | c1\c2\c3 | autoSendPerf

Menggunakan item konfigurasi SDK

Anda dapat menggunakan item konfigurasi SDK dengan salah satu metode berikut:

  • Saat menginstal agen Browser Monitoring ke halaman, tambahkan parameter ke config sesuai kebutuhan Anda.

    Sebagai contoh, dalam kode sampel berikut, selain parameter pid default, parameter enableSPA untuk aplikasi satu halaman (SPAs) ditambahkan ke config:

    <script>
    !(function(c,b,d,a){c[a]||(c[a]={});c[a].config={pid:"xxxxxx",enableSPA:true};
    with(b)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("crossorigin","",src=d)
    })(window,document,"https://retcode.alicdn.com/retcode/bl.js","__bl");
    </script>
  • Setelah halaman diinisialisasi, panggil metode setConfig dalam kode JavaScript untuk memodifikasi item konfigurasi.

    Tabel berikut menjelaskan parameter dari metode __bl.setConfig(next).

    Parameter

    Tipe

    Deskripsi

    Diperlukan

    Nilai default

    next

    Object

    Item konfigurasi dan nilainya yang ingin Anda modifikasi.

    Ya

    Tidak ada

pid

pid

String

ID unik proyek. Ini dibuat secara otomatis oleh ARMS saat membuat situs.

Ya

Tidak ada

[Kembali ke Atas]

uid

uid

String

ID pengguna. Nilainya adalah pengenal pengguna dan dapat digunakan untuk mencari pengguna. Anda dapat menentukan nilai kustom. Jika Anda tidak menentukan parameter ini, SDK akan menghasilkan dan memperbarui setiap enam bulan.

  • Skenario Weex: diperlukan

  • Skema lainnya: tidak diperlukan

  • Skema Weex: Tidak ada

  • Skema lainnya: dihasilkan secara otomatis oleh SDK

Kode berikut memberikan contoh cara memanggil metode setConfig untuk memodifikasi item konfigurasi SDK:

__bl.setConfig({
    uid: 12345
});        
Catatan

Anda tidak dapat memanggil metode setConfig untuk memodifikasi parameter uid saat memantau mini program. Sebagai gantinya, Anda dapat memanggil metode setUsername untuk mengidentifikasi pengguna.

[Kembali ke Atas]

tag

tag

String

Tag input. Setiap log membawa tag.

Tidak

Tidak ada

[Kembali ke Atas]

page

page

String

Nama halaman.

Tidak

Secara default, bagian kunci dari URL halaman saat ini diambil: host + pathname.

Catatan

Anda dapat menggunakan properti ignoreErrors untuk menanyakan kesalahan yang ingin Anda laporkan. Untuk informasi lebih lanjut, lihat ignore.

[Kembali ke Atas]

setUsername

setUsername

Fungsi

Digunakan untuk menetapkan metode yang perlu mengembalikan nama pengguna bertipe String.

Tidak

Tidak ada

Item konfigurasi ini digunakan untuk membuat fungsi yang mendapatkan nama pengguna sebagai string. Setelah nama pengguna diperoleh, Anda dapat menerapkan pelacakan sesi end-to-end dan menanyakan sesi berdasarkan nama pengguna untuk memecahkan masalah.

Catatan
  • Jika nama pengguna tidak dapat diperoleh saat halaman diinisialisasi, Anda dapat menetapkan nilai pengembalian menjadi null bukan nama pengguna sementara. Jika Anda menetapkan nilai pengembalian menjadi null, metode setUsername akan dipanggil lagi untuk mendapatkan nama pengguna saat SDK digunakan untuk mengirim log. Namun, jika Anda menetapkan nilai pengembalian menjadi nama pengguna sementara, nama pengguna tersebut digunakan dan setUsername tidak dipanggil lagi untuk mendapatkan nama pengguna sebenarnya.

  • Metode setUsername hanya dapat disetel sekali selama runtime. Untuk memodifikasi metode, mulai ulang aplikasi.

Kode berikut memberikan contoh cara memanggil metode setConfig untuk memodifikasi item konfigurasi SDK:

__bl.setConfig({
    setUsername: function () {
        return "username_xxx";
    }
});            

[Kembali ke Atas]

enableSPA

enableSPA

Boolean

Mendengarkan event hashchange pada halaman dan melaporkan PV lagi. Ini berlaku untuk skenario aplikasi satu halaman.

Tidak (didukung hanya dalam skenario Web)

false

[Kembali ke Atas]

parseHash

parseHash

Fungsi

Digunakan bersama dengan enableSPA.

Tidak

Lihat di bawah

Dalam SPA, ketika parameter enableSPA disetel ke true dan halaman memicu event hashchange, parameter parseHash digunakan untuk mengurai URL hash menjadi nama halaman yang ditunjukkan oleh bidang Page. Untuk informasi lebih lanjut tentang SPA, lihat Pelaporan data halaman SPA.

Default value

Nilai default diperoleh dengan menggunakan metode pemrosesan string berikut:

function (hash) {
    var page = hash ? hash.replace(/^#/, '').replace(/\?.*$/, '') : '';
    return page || '[index]';
}           

Umumnya, Anda tidak perlu memodifikasi parameter ini. Namun, jika Anda ingin menggunakan nama halaman kustom untuk melaporkan data spesifik halaman, atau jika URL hash kompleks, Anda dapat memodifikasi item konfigurasi ini. Contoh:

// Tentukan pemetaan antara URL hash dan nama halaman.
var PAGE_MAP = {
    '/': 'Beranda',
    '/contact': 'Hubungi kami',
    '/list': 'Daftar data',
    // ...
};
// Panggil metode SDK setelah halaman dimuat.
window.addEventListener('load', function (e) {
    // Panggil metode setConfig untuk memodifikasi item konfigurasi parseHash.
    __bl.setConfig({
        parseHash: function (hash) {
            key = hash.replace(/\?.*$/, '');
            return PAGE_MAP[key] || 'Halaman tidak dikenal';
        }
    });
});

[Kembali ke Atas]

disableHook

Penting

Parameter disableHook hanya berlaku saat konfigurasi diinisialisasi.

disableHook

Boolean

Nonaktifkan pendengar permintaan AJAX.

Tidak

false: Secara default, mendengarkan dan digunakan untuk melaporkan tingkat keberhasilan panggilan API.

[Kembali ke Atas]

ignoreUrlCase

ignoreUrlCase

Boolean

Abaikan huruf besar/kecil pada URL Halaman.

Tidak

true: Tidak peka huruf besar/kecil secara default.

[Kembali ke Atas]

urlHelper

urlHelper

*

Digunakan sebagai pengganti parameter lama ignoreUrlPath, digunakan untuk mengonfigurasi aturan penyaringan URL.

Tidak

Lihat di bawah

Saat URL halaman dalam format http://example.com/projects/123456 (di mana nilai yang mengikuti projects adalah ID proyek), data spesifik halaman dilaporkan dengan nama halaman sebagai example.com/projects/123456. Dalam kasus ini, data halaman serupa tentang proyek tidak dapat digabungkan. Jika Anda ingin menggabungkan data halaman serupa, tetapkan parameter urlHelper untuk menghapus karakter non-kunci dari URL halaman, seperti ID proyek dalam contoh ini.

Penting
  • Parameter urlHelper menggantikan parameter ignoreUrlPath untuk mengabaikan karakter non-kunci dalam URL halaman. Jika Anda menentukan parameter ignoreUrlPath, konfigurasi tersebut masih berlaku. Jika kedua parameter ignoreUrlPath dan urlHelper ditentukan, konfigurasi yang ditentukan oleh parameter urlHelper berlaku.

  • Item konfigurasi ini hanya valid ketika URL halaman diperoleh secara otomatis dan digunakan sebagai nama halaman untuk pelaporan data. Parameter ini tidak valid saat Anda secara manual memodifikasi nama halaman dengan memanggil metode setPage atau setConfig, atau saat parameter enableSPA disetel ke true. Untuk informasi lebih lanjut tentang metode setConfig, lihat Metode SDK.

Default value

Nilai default dari item konfigurasi ini adalah array dalam kode sampel berikut. Dalam banyak kasus, Anda tidak perlu memodifikasi nilainya:

[
    // Ganti semua digit dalam URL dengan tanda bintang (*).
    {rule: /\/([a-z\-_]+)?\d{2,20}/g, target: '/$1**'},
    // Hapus garis miring (/) di akhir URL.
    /\/$/
]                    

Nilai default parameter ini digunakan untuk mengganti digit dengan tanda bintang (*) dalam string seperti xxxx/123456. Sebagai contoh, xxxx/00001 dan xxxx/00002 diubah menjadi xxxx/**.

Value types

Nilai parameter urlHelper dapat berupa salah satu dari tipe berikut:

  • String atau RegExp (ekspresi reguler): String yang cocok akan dihapus.

  • Object<rule, target>: Objek tersebut berisi dua kunci, rule dan target, yang merupakan parameter input metode replace dalam string JavaScript. Untuk informasi lebih lanjut, lihat metode String::replace yang dijelaskan dalam tutorial JavaScript terkait.

  • Function: String asli digunakan sebagai parameter input untuk membuat fungsi. Nilai pengembalian fungsi digunakan sebagai nama halaman.

  • Array: Tipe nilai ini digunakan untuk menetapkan beberapa aturan untuk menghapus karakter non-kunci dalam URL halaman. Nilai setiap aturan dapat berupa salah satu tipe sebelumnya.

[Kembali ke Atas]

apiHelper

apiHelper

*

Digunakan sebagai pengganti parameter lama ignoreApiPath, digunakan untuk mengonfigurasi aturan penyaringan API.

Tidak

Lihat di bawah

Parameter ini digunakan untuk menghapus karakter non-kunci dalam URL halaman saat data spesifik halaman tentang Operasi API dilaporkan secara otomatis. Penggunaan dan fungsi parameter ini sama dengan urlHelper.

Penting

Parameter apiHelper menggantikan parameter ignoreApiPath untuk mengabaikan karakter non-kunci dalam URL Operasi API. Jika Anda menentukan parameter ignoreApiPath, konfigurasi tersebut masih berlaku. Jika kedua parameter ignoreApiPath dan apiHelper ditentukan, konfigurasi yang ditentukan oleh parameter apiHelper berlaku.

Default value

Nilai default parameter ini adalah objek dan tidak perlu dimodifikasi:

{rule: /(\w+)\/\d{2,}/g, target: '$1'}                    

Nilai default parameter ini digunakan untuk menghapus digit dalam string URL seperti xxxx/123456.

Jika Anda ingin melaporkan parameter setelah ? dalam data spesifik halaman Operasi API, seperti parameter pid dalam https://arms.console.aliyun.com/apm?pid=fr6fbgbeot, lakukan langkah-langkah berikut untuk melaporkan data secara manual:

  • Panggil metode ignore untuk menonaktifkan pelaporan data otomatis. Untuk informasi lebih lanjut, lihat ignore.

  • Panggil metode api() untuk melaporkan data spesifik halaman tentang Operasi API secara manual. Untuk informasi lebih lanjut, lihat api().

[Kembali ke Atas]

parseResponse

parseResponse

Fungsi

Digunakan untuk mengurai data yang dikembalikan selama pelaporan API otomatis.

Tidak

Lihat di bawah

Item konfigurasi ini digunakan untuk mengurai data yang dikembalikan saat data spesifik halaman Operasi API dilaporkan secara otomatis.

Default value

Kode sampel berikut menunjukkan konfigurasi default:

function (res) {
    if (!res || typeof res !== 'object') return {};
    var code = res.code;
    var msg = res.msg || res.message || res.subMsg || res.errorMsg || res.ret || res.errorResponse || '';
    if (typeof msg === 'object') {
        code = code || msg.code;
        msg = msg.msg || msg.message || msg.info || msg.ret || JSON.stringify(msg);
    }
    return {msg: msg, code: code, success: true};
}                    

Kode sebelumnya digunakan untuk mengurai data yang dikembalikan dan mengekstrak parameter msg dan code. Umumnya, Anda tidak perlu memodifikasi konfigurasi default. Anda juga dapat memodifikasi konfigurasi berdasarkan kebutuhan bisnis Anda.

[Kembali ke Atas]

ignore

ignore

Object

Mengabaikan URL/API/kesalahan JS yang ditentukan. Log yang memenuhi aturan akan diabaikan dan tidak dilaporkan. Mereka mencakup sub-item konfigurasi ignoreUrls, ignoreApis, ignoreErrors, dan ignoreResErrors.

Tidak

Lihat di bawah

Nilai parameter ignore adalah objek yang berisi empat properti: ignoreUrls, ignoreApis, ignoreErrors, dan ignoreResErrors. Anda dapat menyetel satu atau lebih properti dari nilai parameter tersebut.

Default value

Kode sampel berikut menunjukkan konfigurasi default:

ignore: {
        ignoreUrls: [],
        ignoreApis: [],
        ignoreErrors: [],
        ignoreResErrors: []
    },                    

ignoreUrls

Properti ignoreUrls digunakan untuk mengabaikan URL yang sesuai dengan aturan yang Anda tentukan. Log dari URL ini tidak dilaporkan. Nilai properti ini bisa berupa string (ditunjukkan oleh tipe String), ekspresi reguler (ditunjukkan oleh tipe RegExp), metode (ditunjukkan oleh tipe Function), atau array yang berisi data dari tipe-tipe sebelumnya. Contoh:

__bl.setConfig({
                ignore: {
                    ignoreUrls: [
                    'http://host1/',  // Tentukan string.
                    /.+?host2.+/,     // Tentukan ekspresi reguler.
                    function(str) {   // Tentukan metode.
                        if (str && str.indexOf('host3') >= 0) {
                            return true; // Data tidak dilaporkan.
                        }
                        return false; // Data dilaporkan.
                    }]
                }
            });                    

ignoreApis

Properti ignoreApis digunakan untuk mengabaikan API yang sesuai dengan aturan yang Anda tentukan. Nilai properti ini bisa berupa string (ditunjukkan oleh tipe String), ekspresi reguler (ditunjukkan oleh tipe RegExp), metode (ditunjukkan oleh tipe Function), atau array yang berisi data dari tipe-tipe sebelumnya. Contoh:

__bl.setConfig({
                ignore: {
                    ignoreApis: [
                    'api1','api2','api3', // Tentukan string.
                    /^random/,  // Tentukan ekspresi reguler.
                    function(str) { // Tentukan metode.
                        if (str && str.indexOf('api3') >= 0) return true; // Data tidak dilaporkan.
                        return false; // Data dilaporkan.
                    }]
                }
            });                    

ignoreErrors

Properti ignoreErrors digunakan untuk mengabaikan kesalahan JS yang sesuai dengan aturan yang Anda tentukan. Nilai properti ini bisa berupa string (ditunjukkan oleh tipe String), ekspresi reguler (ditunjukkan oleh tipe RegExp), metode (ditunjukkan oleh tipe Function), atau array yang berisi data dari tipe-tipe sebelumnya. Contoh:

__bl.setConfig({
                ignore: {
                    ignoreErrors: [
                    'test error', // Tentukan string.
                    /^Script error\.?$/, // Tentukan ekspresi reguler.
                    function(str) { // Tentukan metode.
                        if (str && str.indexOf('Unknown error') >= 0) return true;   // Data tidak dilaporkan.
                        return false; // Data dilaporkan.
                    }]
                }
            });            

ignoreResErrors

Properti ignoreResErrors digunakan untuk mengabaikan kesalahan sumber daya yang sesuai dengan aturan yang Anda tentukan. Nilai properti ini bisa berupa string (ditunjukkan olehtipe String), ekspresi reguler (ditunjukkan oleh tipe RegExp), metode (ditunjukkan oleh tipe Function), atau array yang berisi data dari tipe-tipe sebelumnya. Contoh:

__bl.setConfig({
                ignore: {
                    ignoreResErrors: [
                    'http://xx/picture.jpg', // Tentukan string.
                    /jpg$/, // Tentukan ekspresi reguler.
                    function(str) { // Tentukan metode.
                        if (str && str.indexOf('xx.jpg') >= 0) return true;   // Data tidak dilaporkan.
                        return false; // Data dilaporkan.
                    }]
                }
            });

[Kembali ke Atas]

disabled

disabled

Boolean

Menentukan apakah akan menonaktifkan fungsi pelaporan log.

Tidak

false

[Kembali ke Atas]

sample

sample

Integer

Menentukan laju pengambilan sampel log kinerja dan log tentang Operasi API yang berhasil. Nilainya adalah bilangan bulat mulai dari 1 hingga 100. Laju pengambilan sampel dapat dihitung menggunakan rumus berikut: 1/Nilai sample. Untuk informasi lebih lanjut tentang metrik log kinerja dan log Operasi API yang berhasil, lihat Metrik statistik.

Tidak

1

Manfaat:

  • Mengurangi biaya dengan hanya melaporkan data API yang diambil sampel. Kami merekomendasikan agar Anda mengidentifikasi data yang tidak memerlukan pemantauan dengan menyetel parameter ignore. Untuk informasi lebih lanjut, lihat ignore.

  • Mengurangi overhead kinerja pengumpulan data.

Deskripsi:

  • Anda dapat menyetel item konfigurasi ini untuk secara acak memilih dan melaporkan log kinerja serta log tentang Operasi API yang berhasil. Ini mengurangi volume data yang dilaporkan dan beban kerja. Saat ARMS memproses log yang dilaporkan di latar belakang, ARMS memulihkan data berdasarkan konfigurasi pengambilan sampel. Dengan cara ini, metrik seperti tingkat kesalahan JS atau tingkat kegagalan API tidak terpengaruh oleh pengambilan sampel dan tetap akurat. Namun, saat Anda menyetel parameter ini, Anda mungkin tidak dapat memperoleh data rinci seperti detail API.

  • Nilai default parameter sample adalah 1. Nilai valid dari parameter ini adalah bilangan bulat dari 1 hingga 100. Laju pengambilan sampel dapat dihitung menggunakan rumus berikut: 1/Nilai sample. Sebagai contoh, nilai parameter 1, 10, dan 100 menunjukkan laju pengambilan sampel 100%, 10%, dan 1%.

Peringatan

Saat total volume data kecil dan pengambilan sampel acak masih dilakukan, penyimpangan besar mungkin diperkenalkan ke hasil statistik. Kami merekomendasikan agar Anda menggunakan item konfigurasi ini untuk situs web yang jumlah tampilan halaman harian rata-rata (PV) lebih dari 1 juta.

[Kembali ke Atas]

pvSample

Parameter

Tipe

Deskripsi

Diperlukan

Nilai default

pvSample

Integer

Menentukan laju pengambilan sampel log PV. Nilainya adalah bilangan bulat mulai dari 1 hingga 100. Laju pengambilan sampel dapat dihitung menggunakan rumus berikut: 1/Nilai pvSample.

Tidak

1

Manfaat:

  • Mengurangi biaya dengan hanya melaporkan data PV yang diambil sampel.

  • Mengurangi overhead kinerja pengumpulan data.

Deskripsi:

  • Anda dapat menyetel item konfigurasi ini untuk secara acak memilih dan melaporkan log PV. Ini mengurangi volume data yang dilaporkan dan beban kerja. Saat ARMS memproses log yang dilaporkan di latar belakang, ARMS memulihkan data berdasarkan konfigurasi pengambilan sampel. Dengan cara ini, metrik seperti tingkat kesalahan JS tidak terpengaruh oleh pengambilan sampel dan tetap akurat.

  • Nilai default parameter pvSample adalah 1. Nilai valid dari parameter ini adalah bilangan bulat dari 1 hingga 100. Laju pengambilan sampel dapat dihitung menggunakan rumus berikut: 1/Nilai pvSample. Sebagai contoh, nilai parameter 1, 10, dan 100 menunjukkan laju pengambilan sampel 100%, 10%, dan 1%.

[Kembali ke Atas]

sendResource

sendResource

Boolean

Melaporkan sumber daya statis pada halaman.

Tidak

false

Jika parameter sendResource disetel ke true, sumber daya statis yang dimuat ke halaman saat ini dilaporkan saat event load dipicu untuk halaman. Jika pemuatan halaman lambat, Anda dapat melihat bagan air terjun sumber daya statis di halaman Session Traces untuk menentukan penyebabnya.

Kode berikut memberikan contoh cara menyetel parameter sendResource:

<script>
!(function(c,b,d,a){c[a]||(c[a]={});c[a].config={pid:"xxxxxx",sendResource:true};
with(b)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("crossorigin","",src=d)
})(window,document,"https://retcode.alicdn.com/retcode/bl.js","__bl");
</script>            
Catatan

Saat Anda ingin mendiagnosis pemuatan halaman yang lambat, Anda harus mengonfigurasi parameter sendResource dalam config, seperti yang ditunjukkan dalam kode sampel sebelumnya. Dengan cara ini, sumber daya statis dilaporkan saat event load dipicu. Jika Anda memanggil metode setConfig, sumber daya statis mungkin dilaporkan setelah event load selesai. Dalam kasus ini, parameter sendResource tidak dapat membantu Anda mengidentifikasi penyebab pemuatan halaman yang lambat.

[Kembali ke Atas]

useFmp

useFmp

Boolean

Mengumpulkan data FMP (First Meaningful Paint, rendering pertama yang bermakna) layar pertama.

Tidak

false

[Kembali ke Atas]

enableLinkTrace

enableLinkTrace

Boolean

Untuk informasi lebih lanjut tentang Analisis Tracing depan-belakang, lihat Gunakan fitur tracing depan-belakang untuk mendiagnosis kesalahan API.

Tidak (hanya didukung oleh skenario Web, applet Alipay, applet WeChat, dan applet DingTalk)

false

[Kembali ke Atas]

release

Penting

Anda harus mengonfigurasi release dalam config selama inisialisasi halaman. Jangan panggil metode setConfig.

release

String

Versi aplikasi. Kami merekomendasikan agar Anda mengonfigurasi parameter ini untuk melihat informasi laporan versi yang berbeda.

Tidak

undefined

[Kembali ke Atas]

environment

environment

String

Bidang lingkungan. Nilai valid: prod, gray, pre, daily, dan local.

  • Nilai prod menunjukkan lingkungan online.

  • Nilai gray menunjukkan lingkungan rilis bertahap.

  • Nilai pre menunjukkan lingkungan staging.

  • Nilai daily menunjukkan lingkungan harian.

  • Nilai local menunjukkan lingkungan lokal.

Tidak

prod

[Kembali ke Atas]

behavior

behavior

Boolean

Menentukan apakah akan mencatat perilaku pengguna yang melaporkan kesalahan untuk mempermudah pemecahan masalah.

Tidak (hanya didukung dalam skenario Web dan mini-program)

Nilai default Browser adalah true, dan nilai default mini program adalah false.

[Kembali ke Atas]

autoSendPerf

autoSendPerf

Boolean

Menentukan apakah mengizinkan pengiriman log kinerja secara otomatis.

Tidak

true

[Kembali ke Atas]

c1\c2\c3

Selain item konfigurasi sebelumnya, SDK ARMS menyediakan tiga item konfigurasi kustom yang dapat Anda konfigurasikan untuk memenuhi kebutuhan bisnis Anda. Setelah Anda mengonfigurasi bidang tersebut, nilai-nilai bidang tersebut termasuk dalam semua log yang dilaporkan.

c1

String

Bidang layanan kustom. Setiap log membawa bidang ini.

Tidak

Tidak ada

c2

String

Bidang layanan kustom. Setiap log membawa bidang ini.

Tidak

Tidak ada

c3

String

Bidang layanan kustom. Setiap log membawa bidang ini.

Tidak

Tidak ada

Catatan

c1\c2\c3 adalah data yang dibawa dalam semua laporan pada halaman kustom saat ini. Secara umum, c1\c2\c3 terkait dengan layanan Anda. Saat Anda menginisialisasi Browser Monitoring SDK untuk JavaScript, Anda dapat menentukan parameter SDK untuk menanyakan data, seperti tingkat VIP pengguna.

[Kembali ke Atas]