Kasus penggunaan
- Ketika bisnis Anda memerlukan performa real-time yang tinggi untuk data. Misalnya, saat karyawan baru bergabung atau keluar, aplikasi perlu memperbarui data pengguna dengan segera. Dalam kasus ini, langgananlah peristiwa Kontak.
- Ketika aplikasi Anda perlu merespons tindakan pengguna dengan cepat. Misalnya, saat pengguna bergabung ke obrolan grup, aplikasi dapat berlangganan peristiwa obrolan grup untuk mengirim pesan sambutan ketika pengguna memasuki obrolan grup.
Proses Langganan peristiwa
Proses Langganan peristiwa ditunjukkan pada gambar di bawah ini. Pertama, konfigurasikan URL penerima permintaan HTTP di DingTalk Open Platform untuk menerima push peristiwa yang dilanggan, lalu tetapkan peristiwa yang akan dilanggan. Setelah Anda mengonfigurasi URL permintaan, DingTalk Open Platform mengirimkan permintaan POST ke URL tersebut. Langganan peristiwa hanya selesai ketika sebuah string terenkripsi yang berisi “success” dikembalikan dengan benar dalam waktu yang ditentukan.Konfigurasikan URL permintaan dan Langganan peristiwa
- Masuk ke Developer Console dan temukan aplikasi internal yang telah Anda buat.
-
Klik Event Subscription, lalu klik Edit untuk mengonfigurasi URL HTTP yang digunakan untuk menerima permintaan.
Note
Pastikan URL ini dapat diakses melalui jaringan publik.
Setelah Anda mengedit URL permintaan dan mengklik tombol Save, Open Platform melakukan push permintaan POST application/json ke URL yang Anda konfigurasikan untuk memverifikasi validitasnya. Permintaannya adalah sebagai berikut:
Saat Anda menerima permintaan verifikasi POST dari Open Platform, dekripsikan dan kembalikan sebuah string terenkripsi yang berisi success (dalam format JSON) dalam waktu 1.500 ms. Setelah DingTalk Open Platform menerima informasi JSON yang dikembalikan, ia mendekripsinya. Jika ia dapat memperoleh string success yang benar, push callback diverifikasi sebagai normal. Jika tidak, ia ditentukan sebagai callback yang gagal.
- Setelah Anda berhasil mengonfigurasi URL permintaan, aktifkan peristiwa yang akan dilanggan di area daftar Event Subscription.
Menerima dan merespons peristiwa
-
Menerima informasi peristiwa
Ketika suatu peristiwa terjadi, DingTalk secara aktif mengirimkan permintaan POST ke URL HTTP yang dikonfigurasi untuk melakukan push informasi peristiwa yang bersangkutan. Misalnya, setelah Anda berlangganan peristiwa Kontak, ketika Kontak berubah, informasi peristiwa di-push ke URL HTTP yang terdaftar dalam format berikut.
Note
Server DingTalk melakukan push informasi secara real-time. Jika URL callback organisasi tidak mengembalikan informasi terenkripsi yang benar ke server DingTalk dalam waktu 1.500 milidetik, server DingTalk menentukan push tersebut gagal.
Format URL permintaan adalah sebagai berikut:
Data JSON yang disertakan adalah sebagai berikut:Di mana:
- signature adalah tanda tangan dari isi pesan.
- timestamp adalah stempel waktu.
- nonce adalah string acak.
- encrypt adalah informasi peristiwa terenkripsi yang di-push.
-
Merespons informasi peristiwa
Saat Anda menerima permintaan verifikasi POST dari Open Platform, dekripsikan dan kembalikan sebuah string terenkripsi yang berisi success (dalam format JSON) dalam waktu 1.500 ms. Setelah DingTalk Open Platform menerima informasi JSON yang dikembalikan, ia mendekripsinya. Jika ia dapat memperoleh string success yang benar, push callback diverifikasi sebagai normal. Jika tidak, ia ditentukan sebagai callback yang gagal.
Format data spesifik yang dikembalikan ke DingTalk adalah sebagai berikut:
Note
Format data yang dikembalikan harus JSON.
Di mana:
- msg_signature adalah tanda tangan dari isi pesan.
- timeStamp adalah stempel waktu.
- nonce adalah string acak.
- encrypt adalah string success yang terenkripsi.
Enkripsi dan dekripsi pesan
Untuk memastikan keamanan transmisi data, DingTalk menyertakan token yang dikonfigurasi guna memverifikasi sumber peristiwa saat melakukan push peristiwa yang dilanggan. DingTalk juga menggunakan key ini untuk mengenkripsi konten pesan secara simetris. Klik di sini untuk mendapatkan library enkripsi dan dekripsi callback beserta demo yang bersangkutan. Server DingTalk mengodekan isi pesan plaintext msg menjadiencrypt. encrypt = Base64_Encode(AES_Encrypt[random(16B) + msg_len(4B) + msg + $key]) adalah pengodean Base64 dari pesan plaintext msg yang terenkripsi. Di mana:
- random adalah string acak sepanjang 16 byte.
- msg_len adalah panjang 4 byte dari msg, dalam urutan byte jaringan (network byte order).
- msg adalah plaintext dari isi pesan.
- key adalah appKey dari aplikasi.
- Dekode Base64 pada ciphertext: aes_msg=Base64_Decode(encrypt);
- Gunakan AESKey untuk melakukan dekripsi AES: rand_msg=AES_Decrypt(aes_msg);
- Proses enkripsi dan dekripsi dalam contoh kode ini bergantung pada kelas utilitas DingCallbackCrypto. Lihat dingtalk-callback-Crypto.
-
Constant.OWNER_KEY dalam contoh dijelaskan sebagai berikut:
- Ketika Anda menggunakan metode dalam dokumen ini untuk menerima peristiwa yang dilanggan yang di-push oleh DingTalk, peristiwa tersebut di-push pada dimensi aplikasi. OWNER_KEY adalah App Key dari aplikasi, yang dapat diperoleh pada halaman detail aplikasi di Developer Console.
- Ketika Anda menggunakan metode HTTP callback registration API untuk menerima peristiwa yang dilanggan yang di-push oleh DingTalk, peristiwa tersebut di-push pada dimensi organisasi. OWNER_KEY adalah CorpId.
FAQ
- Deskripsi masalah Ketika Anda mengklik Save, halaman melaporkan error “HTTP request result verification returned field value failed”, seperti ditunjukkan pada gambar di bawah ini.
-
Penyebab
- Salah satu nilai bidang dalam informasi JSON yang dikembalikan ke server DingTalk salah.
- Informasi yang dikembalikan ke server DingTalk tidak dalam format JSON.
-
Solusi
Buatlah sebuah metode main, gunakan keempat nilai bidang yang dikembalikan oleh URL callback, panggil encryption API, dan verifikasi apakah nilai yang diperoleh adalah string success.
Misalnya:
Hasil eksekusi pada titik ini adalah sebagai berikut:
- Jika Anda memperoleh string success, nilai yang dikembalikan sudah benar, dan masalahnya terletak pada format nilai parameter yang dikembalikan callback API ke server DingTalk yang salah. Konfirmasikan kembali parameter tersebut.
-
Jika eksekusi menghasilkan error, error runtime yang umum beserta penyebabnya adalah sebagai berikut: