Cara memanggil API
Host: https://vivoldi.com/api HTTP/1.1
Authorization: APIKey {Your API Key}
Content-type: application/json
{
"code": 0,
"message": "",
"result": Object
}
message - Pesan respons, pesan kesalahan dikembalikan jika kode respons bukan nol.
result - Nilai respons, dikembalikan sebagai karakter atau objek JSON tergantung pada jenis API.
Buat tautan
Jika Anda ingin membuat satu tautan pendek, Anda dapat dengan mudah membuatnya menggunakan API ini.
Untuk membuat beberapa tautan sekaligus, coba gunakan API Pembuatan Tautan Massal .
Anda juga dapat membuat tautan dengan cepat melalui menu "Pembuat Tautan Massal" di dasbor.
Untuk pengguna paket gratis, panggilan API dibatasi hingga 10 permintaan per menit.
Jika Anda membutuhkan volume yang lebih tinggi, pertimbangkan untuk meningkatkan ke paket berbayar untuk akses yang lebih luas.
Setiap tautan pendek secara otomatis menyertakan kode QR, yang dapat diakses melalui format URL `vvd.bz/[linkId]/qr`.
Untuk menyesuaikan ukuran kode QR, cukup tambahkan parameter `size` ke URL.
Sebagai contoh, gunakan `vvd.bz/[linkId]/qr?size=200` untuk menghasilkan kode QR dengan ukuran 200 piksel.
Post /api/link/v2/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
url | URL Panjang | URL panjang yang akan menjadi tujuan saat tautan pendek yang dibuat diklik. Panjang maksimal 3.000 byte. | string | |
domain | Domain | Jika dikosongkan, otomatis akan menggunakan domain vvd.bz. Harus menyertakan "https://", dan jika opsi “brandLinkId” adalah “Y”, gunakan domain “https://vvd.im”. Jika domain Anda telah terhubung ke Vivoldi, bisa diatur di sini. Contoh: https://vvd.bz | string | |
redirectType | Tipe Redirect | Mengatur bagaimana perpindahan dari URL pendek ke URL panjang. Bisa memilih salah satu kode status HTTP: 200, 301, atau 302. Nilai default: 302 Untuk info lebih lanjut, lihat halaman “Glosarium”. | int | |
grpIdx | ID Grup | Menentukan ID grup akan membuat tautan terhubung ke grup tersebut. Untuk melihat GroupID, gunakan API “Daftar Grup”. | int | |
brandLinkId | ID Tautan Merek | Jika diisi, tautan akan dibuat dengan ID tersebut. (Jika diatur, domain akan menjadi vvd.im, bukan vvd.bz) Jika dikosongkan, linkID akan dibuat otomatis. | string | |
ttl | Judul Tautan | Jika kosong, akan menggunakan judul halaman web dari URL panjang. Jika kosong, sistem akan mengakses URL panjang dan melakukan parsing HTML, sehingga jika API terasa lambat, sebaiknya tentukan judulnya. | string | |
description | Deskripsi Meta | Bisa diatur sebagai tag meta description halaman jika “redirectType” bernilai “200”. Nilai ini diabaikan jika “redirectType” adalah “301”, “302”, dsb. | string | |
memo | Catatan | Bisa diisi informasi tambahan untuk kebutuhan administrasi dan tidak akan terlihat oleh pengguna. | string | |
notfSubscYn | Tautan Push | Jika bernilai Y, saat tautan diakses, pop-up notifikasi push akan muncul sebelum diarahkan ke URL panjang. Notifikasi dapat dikirim ke semua pengguna yang mengizinkan. Jika pengguna menolak atau menutup pop-up, langsung diarahkan ke URL panjang. Jika kosong, default adalah N. Info lebih lanjut di halaman fitur Web Push. | Y atau N | |
clksIpFilteringYn | IP Filtering Klik | Jika bernilai Y, jumlah klik dari IP yang sama dalam 3 hari hanya dihitung 1 kali. Mulai hari ke-4, klik akan dihitung lagi. Opsi ini hanya dapat diatur saat pembuatan link, tidak bisa diubah setelahnya. Fitur tersedia mulai Paket Personal. | Y atau N | |
pushNotifyYn | Notifikasi Push | Jika bernilai Y, Anda akan menerima notifikasi push di perangkat dengan aplikasi Vivoldi ketika jumlah klik tercapai (set sesuai pengaturan tautan di menu “Pengaturan -> Preferensi”). Tersedia mulai Paket Personal. | Y atau N | |
mailNotifyYn | Notifikasi Email | Jika bernilai Y, info jumlah klik akan dikirim ke email terdaftar Vivoldi setiap kali target klik tercapai (pengaturan di menu “Pengaturan -> Preferensi”). Tersedia mulai Paket Personal. | Y atau N | |
delYmd | Tanggal Penghapusan Tautan | Setelah tanggal yang ditentukan, tautan akan otomatis dihapus oleh sistem. Siklus penghapusan: setiap jam Contoh: 2025-12-31 | Date |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnCreateLink" type="button">Create Link</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnCreateLink").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'POST',
url: 'https://vivoldi.com/api/link/v2/create',
data: JSON.stringify({'url':'https://google.com','domain':'https://vvd.bz'}),
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('short url: ' + res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/link/v2/create";
$params = array (
"url" => "https://www.facebook.com/vivoldi365",
"domain" => "https://vvd.bz",
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CreateLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("url", "https://www.facebook.com/vivoldi365");
params.put("domain", "https://vvd.bz");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v2/create"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.POST(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Short URL: " + json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":"https://vvd.bz/jH3d"
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
result | Nilai respons (tautan yang dipersingkat) | string |
Membuat Tautan Secara Massal
Membuat beberapa tautan yang dipersingkat sekaligus.
Jika Anda ingin membuat banyak tautan sekaligus, gunakan menu "Buat tautan massal" di dasbor.
Anda hanya dapat membuat tautan dalam jumlah terbatas dalam satu waktu, dan batas per paket adalah sebagai berikut
Jika Anda ingin membuat 3.000 tautan, Anda harus memanggil API ini beberapa kali.
Paket pribadi: Hingga 200
Paket premium: hingga 500
Paket bisnis: hingga 1.000
API ini tersedia mulai dari paket Personal.
Post /api/link/v1/createBulk HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Bidang | Jenis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
links |
| array |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnCreateBulkLinks" type="button">Create bulk links</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnCreateBulkLinks").on('click', function(evt){
evt.preventDefault();
const params = {
'links': [
{'url':'https://google.com','domain':'https://vvd.bz'},
{'url':'https://facebook.com','domain':'https://vvd.bz'},
{'url':'https://twitter.com','domain':'https://vvd.bz'}
]
};
$.ajax({
type: 'POST',
url: 'https://vivoldi.com/api/link/v1/createBulk',
data: JSON.stringify(params),
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 10000
}).done(function(res){
if (res.code === 0) {
console.log(res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/link/v1/createBulk";
$params = array (
"links" => array(
array(
"url" => "https://google.com",
"domain" => "https://vvd.bz"
),
array(
"url" => "https://facebook.com",
"domain" => "https://vvd.bz"
),
array(
"url" => "https://twitter.com",
"domain" => "https://vvd.bz"
)
)
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.json.JSONArray;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CreateLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject link1 = new JSONObject();
link1.put("url", "https://google.com").put("domain", "https://vvd.bz");
JSONObject link2 = new JSONObject();
link2.put("url", "https://facebook.com").put("domain", "https://vvd.bz");
JSONObject link3 = new JSONObject();
link3.put("url", "https://twitter.com").put("domain", "https://vvd.bz");
JSONArray links = new JSONArray();
links.put(link1);
links.put(link2);
links.put(link3);
JSONObject params = new JSONObject();
params.put("links", links);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v2/create"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.POST(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Short URL: " + json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":[
{shortUrl: "https://vvd.bz/bbuR", url: "https://google.com"},
{shortUrl: "https://vvd.bz/bbuS", url: "https://facebook.com"},
{shortUrl: "https://vvd.bz/bbuT", url: "https://twitter.com"}
]
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
result | Nilai respons (tautan yang dipersingkat) | string |
Mengedit tautan
Edit tautan pendek yang Anda buat.
Anda hanya dapat memodifikasi jenis tautan jika berupa URL; jenis lainnya tidak dimodifikasi meskipun panggilan API berhasil.
Put /api/link/v2/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
linkId | ID Tautan | ID dari tautan pendek yang dihasilkan. Contoh: Jika alamat tautan pendek adalah "https://vvd.bz/fML", maka link ID adalah fML. | string | |
domain | Domain | Domain dari alamat tautan pendek. Contoh: Jika alamat tautan pendek adalah "https://vvd.bz/fML", domainnya adalah https://vvd.bz. Penting: Harus memasukkan https:// atau http://. Jika diatur ke domain yang berbeda dari tautan yang dihasilkan, akan terjadi error. | string | |
redirectType | Tipe Redirect | Mengatur bagaimana navigasi dari URL pendek ke URL panjang. Bisa memilih salah satu dari 200, 301, atau 302 sebagai kode status HTTP. Default: 302. Untuk info lebih lanjut tentang metode redirect, lihat halaman “Glosarium”. | int | |
grpIdx | ID Grup | Mengubah grup tautan yang dihasilkan. Untuk mengetahui ID grup, gunakan API "Daftar Grup". | int | |
url | URL Panjang | Mengubah URL panjang. Hanya bisa diubah mulai paket Premium. | string | |
ttl | Judul Tautan | Jika kosong, judul tautan tidak diubah. | string | |
description | Meta Deskripsi | Bisa diatur sebagai meta tag halaman ketika “redirectType” bernilai “200”. Nilai ini diabaikan jika “redirectType” adalah “301”, “302”, dan seterusnya. | string | |
memo | Catatan | Bisa menambahkan informasi administrasi tambahan tanpa ditampilkan ke pengguna. Jika kosong, catatan tidak diubah. | string | |
notfSubscYn | Push Link | Jika bernilai Y, saat link diklik akan muncul pop-up notifikasi push sebelum diarahkan ke URL panjang, dan jika pengguna sudah mengaktifkan push, kamu bisa mengirim pesan push ke semua yang mengizinkan. Jika menolak atau menutup pop-up, akan langsung diarahkan ke URL panjang. Jika tidak diisi, default adalah N. Untuk info lebih lanjut tentang push subscription link, klik di sini. | Y atau N | |
pushNotifyYn | Notifikasi Push | Jika bernilai Y, kamu akan menerima notifikasi push ke perangkat mobile dengan aplikasi Vivoldi jika link mencapai jumlah klik yang diatur di menu "Pengaturan -> Preferensi". Fitur ini tersedia mulai Paket Personal. | Y atau N | |
mailNotifyYn | Notifikasi Email | Jika bernilai Y, kamu akan menerima info jumlah klik ke email terdaftar Vivoldi ketika mencapai target klik yang diatur di menu "Pengaturan -> Preferensi". Fitur ini tersedia mulai Paket Personal. | Y atau N | |
delYmd | Tanggal Penghapusan Tautan | Setelah tanggal yang diatur, tautan akan otomatis dihapus oleh sistem. Siklus penghapusan: setiap jam. Contoh: 2025-12-31 | Date |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnUpdateLink" type="button">Update Link</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnUpdateLink").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'PUT',
url: 'https://vivoldi.com/api/link/v2/edit',
data: JSON.stringify({'linkId':'jH3d','domain':'https://vvd.bz','ttl':'new title','memo':'new my memo'}),
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('Success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/link/v2/edit";
$params = array (
"linkId" => "4Rt3",
"domain" => "https://vvd.bz",
"ttl" => "new title",
"memo" => "new my memo"
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class UpdateLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("linkId", "jH3d");
params.put("domain", "https://vvd.bz");
params.put("ttl", "new title");
params.put("memo", "new my memo");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v2/edit"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.PUT(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":""
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
Menghapus tautan
Hapus tautan pendek yang Anda buat.
Delete /api/link/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
linkId | ID Tautan | ID dari tautan pendek yang dihasilkan. Contoh: Jika alamat tautan pendek adalah "https://vvd.bz/fML", maka linkID-nya adalah fML. URLEncode diperlukan jika menggunakan LinkID bermerek (LinkID yang Anda tentukan sendiri) dan berisi karakter khusus. | string | |
domain | Domain | Domain dari alamat tautan pendek. Contoh: Jika alamat tautan pendek adalah "https://vvd.bz/fML", maka domainnya adalah https://vvd.bz. Penting: Nilai harus dimulai dengan https:// atau http://. Jika Anda mengatur domain berbeda dari tautan pendek yang dihasilkan, akan terjadi error. Untuk LinkID bermerek (LinkID yang Anda tentukan sendiri), domainnya adalah https://vvd.im. | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnDeleteLink" type="button">Delete Link</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnDeleteLink").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'DELETE',
url: 'https://vivoldi.com/api/link/v1/remove?linkId=강남스타벅스점&domain=https://vvd.im',
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('Success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$linkId = urlencode("강남스타벅스점");
$url = "https://vivoldi.com/api/link/v1/remove?linkId=$linkId&domain=https://vvd.im";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DeleteLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v1/remove?linkId=강남스타벅스점&domain=https://vvd.im"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.DELETE()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":""
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
Daftar tautan
Melihat daftar tautan yang dibuat.
Hanya tautan URL yang dapat diambil; jenis tautan lainnya tidak dapat diambil.
API ini tersedia pada paket Premium.
Get /api/link/v1/list HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
linkId | ID Tautan | Cari daftar berdasarkan ID tautan. URLEncode diperlukan jika ID tautan berisi karakter khusus. | string | |
domain | Domain | Cari daftar berdasarkan domain tautan. Domain harus diawali dengan http:// atau https://. | string | |
createTypeIdx | Jenis pembuatan | 0: Semua tautan, 270: Tautan yang dibuat di dashboard Vivoldi, 272: Tautan dari API, 274: Pembuatan tautan massal | int | |
grpIdx | ID Grup | Cari daftar berdasarkan ID grup. Jika kosong, nilai default adalah 0. | int | |
url | URL Panjang | Cari daftar berdasarkan URL panjang. Bisa mencari sebagian alamat URL. | string | |
ttl | Judul Tautan | Cari daftar berdasarkan judul tautan. Bisa mencari sebagian judul. | string | |
brandLinkYn | Tautan bermerek | Jika ID tautan diatur manual dan bukan otomatis, itu adalah tautan bermerek. Y: Aktif (tautan bermerek), N: Tidak aktif (tautan otomatis) | Y atau N | |
notfSubscYn | Tautan Push | Y: Aktif, N: Tidak aktif | Y atau N | |
clksIpFilteringYn | Penyaringan klik berdasarkan IP | Y: Aktif, N: Tidak aktif | Y atau N | |
pushNotifyYn | Notifikasi klik (Push) | Y: Aktif, N: Tidak aktif | Y atau N | |
mailNotifyYn | Notifikasi klik (Email) | Y: Aktif, N: Tidak aktif | Y atau N | |
regStartYmdt | Tanggal mulai pembuatan | Tanggal mulai saat tautan dibuat, harus di antara tanggal mulai dan akhir. Contoh: 2022-11-08 00:00:00 | Date | |
regEndYmdt | Tanggal akhir pembuatan | Tanggal akhir saat tautan dibuat, harus di antara tanggal mulai dan akhir. Contoh: 2022-11-08 23:59:59 Tanggal akhir maksimal satu bulan dari tanggal mulai. | Date | |
pages | Halaman | Nilai pages digunakan untuk paginasi dan default-nya adalah 1. Satu halaman berisi 30 baris data, dan jika pages bernilai 2, maka akan ditampilkan data dari baris ke-31. | int | |
delYmd | Tanggal penghapusan tautan | Setelah tanggal yang ditetapkan, tautan akan otomatis dihapus. Jika diatur, data yang ditampilkan adalah sebelum tanggal tersebut. Contoh: 2025-12-31 | Date |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnLinkList" type="button">Get link list</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnLinkList").on('click', function(evt){
evt.preventDefault();
const regStartYmdt = encodeURI('2024-06-01 00:00:00');
const regEndYmdt = encodeURI('2024-06-30 23:59:59');
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/link/v1/list?regStartYmdt='+regStartYmdt+'®EndYmdt='+regEndYmdt,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$regStartYmdt = urlencode("2024-06-01 00:00:00");
$regEndYmdt = urlencode("2024-06-30 23:59:59");
$url = "https://vivoldi.com/api/link/v1/list?regStartYmdt=$regStartYmdt®EndYmdt=$regEndYmdt";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ListLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
String regStartYmdt = URLEncoder.encode("2024-06-01 00:00:00", StandardCharsets.UTF_8);
String regEndYmdt = URLEncoder.encode("2024-06-30 23:59:59", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v1/list?regStartYmdt="+regStartYmdt+"®EndYmdt="+regEndYmdt))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":{
"extra": {
"pages":1,
"nextPages":1,
"nextYn":"N",
"count":2,
"totalCount":2
},
"list": [
{
"linkId":"createpostinglinks",
"domain":"https://vvd.im",
"typeIdx":103,
"typeNm":"URL",
"ttl":"게시물 링크를 이용한 유튜브 동영상을 추가하여 짧은 링크 만들기",
"memo":"",
"url":"https://vvd.im/createpostinglinks",
"grpIdx":0,
"grpNm":"",
"acesCnt":5072,
"acesCntToday":315,
"lastClkYmdt":"2022-11-07 04:45:10",
"longUrl":"https://vivoldi.com/blog/url-shortener/create-posts-link-url-shortener",
"blockOverseasSticsYn":"N",
"notfSubscYn":"N",
"kakaoNotifyYn":"N",
"pushNotifyYn":"N",
"mailNotifyYn":"N",
"clksIpFilteringYn":"N",
"delYmd":"",
"regYmdt":"2022-11-02 04:27:05",
"modYmdt":"2022-11-02 04:27:05"
},
{
"linkId":"4Rth",
"domain":"https://vvd.bz",
"typeIdx":103,
"typeNm":"URL",
"ttl":"NAVER",
"memo":"",
"url":"https://vvd.bz/4Rth",
"grpIdx":128,
"grpNm":"테스트",
"acesCnt":19,
"acesCntToday":3,
"lastClkYmdt":"2022-11-07 17:20:40",
"longUrl":"https://www.naver.com",
"blockOverseasSticsYn":"N",
"notfSubscYn":"N",
"kakaoNotifyYn":"N",
"pushNotifyYn":"Y",
"mailNotifyYn":"N",
"clksIpFilteringYn":"Y",
"delYmd":"2025-12-31",
"regYmdt":"2022-11-07 17:10:22",
"modYmdt":"2022-11-07 17:10:22"
}
]
}
}
Bidang | Deskripsi | Jenis | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
result | extra (추가 정보)
list (링크 목록) - Array
| array |
Statistik klik berdasarkan waktu dalam sehari
Melihat klik dan kliker dari waktu ke waktu untuk satu tautan.
API ini tersedia mulai dari paket Bisnis.
Get /api/statistics/v1/clicks-by-time HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
필드 | 필드 설명 | 설명 | 필수 | 유형 |
---|---|---|---|---|
linkId | 링크 ID | 링크 ID로 통계를 조회합니다. 브랜드 링크(링크ID를 직접 설정)로 설정된 링크 중 특수문자가 포함되어 있으면 URLEncode가 필요합니다. | string | |
domain | 도메인 | 링크 도메인으로 목록을 조회합니다. 도메인 앞에 반드시 http:// 또는 https:// 값을 붙여야 합니다. 브랜드 링크(링크ID를 직접 설정)가 설정되어 있는 경우 도메인은 https://vvd.bz이 아닌 https://vvd.im 입니다. | string | |
ymd | 날짜 | 해당 날짜의 시간대별 클릭 수와 클릭 사람 수 목록을 조회합니다. 오늘로 부터 최대 7일 전 날짜만 입력할 수 있습니다. 예: 2024-06-14 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnClickList" type="button">Get click list</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnClickList").on('click', function(evt){
evt.preventDefault();
const linkId = 'y6Tg';
const domain = 'https://vvd.bz';
const ymd = '2024-06-14';
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/statistics/v1/clicks-by-time?linkId='+linkId+'&domain='+domain+'&ymd='+ymd,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$linkId = "y6Tg";
$domain = "https://vvd.bz";
$ymd = "2024-06-14";
$url = "https://vivoldi.com/api/statistics/v1/clicks-by-time?linkId=$linkId&domain=$domain&ymd=$ymd";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ClickList {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
String nm = URLEncoder.encode("my test group", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/statistics/v1/clicks-by-time?linkId=y6Tg&domain=https://vvd.bz&ymd=2024-06-14"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":[
{
"ymd":"2024-06-14",
"hour":"00",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":24,
"pernCnt":17,
},
{
"ymd":"2024-06-14",
"hour":"08",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":121,
"pernCnt":198,
}
{
"ymd":"2024-06-14",
"hour":"14",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":84,
"pernCnt":68,
}
]
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||
result | 통계 목록:
| array |
Statistik klik berdasarkan tanggal
Anda dapat melihat jumlah klik pada satu tautan berdasarkan tanggal dan jumlah orang yang mengekliknya.
Saat mencari, rentang tanggal mulai dan berakhir tidak boleh lebih dari satu bulan.
API ini tersedia mulai dari paket Bisnis.
Get /api/statistics/v1/clicks-by-date HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
필드 | 필드 설명 | 설명 | 필수 | 유형 |
---|---|---|---|---|
linkId | 링크 ID | 링크 ID로 통계를 조회합니다. 브랜드 링크(링크ID를 직접 설정)로 설정된 링크 중 특수문자가 포함되어 있으면 URLEncode가 필요합니다. | string | |
domain | 도메인 | 링크 도메인으로 목록을 조회합니다. 도메인 앞에 반드시 http:// 또는 https:// 값을 붙여야 합니다. 브랜드 링크(링크ID를 직접 설정)가 설정되어 있는 경우 도메인은 https://vvd.bz이 아닌 https://vvd.im 입니다. | string | |
startYmd | 시작 날짜 | 링크를 클릭한 시작 날짜로 클릭 날짜가 시작 날짜와 종료 날짜 사이 포함되어야 합니다. 예: 2024-05-01 | string | |
endYmd | 종료 날짜 | 링크를 클릭한 종료 날짜로 클릭 날짜가 시작 날짜와 종료 날짜 사이 포함되어야 합니다. 시작 날짜와 종료 날짜 범위는 최대 1달입니다. 예: 2024-05-31 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnClickList" type="button">Get click list</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnClickList").on('click', function(evt){
evt.preventDefault();
const linkId = 'y6Tg';
const domain = 'https://vvd.bz';
const startYmd = '2024-05-01';
const endYmd = '2024-05-31';
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/statistics/v1/clicks-by-date?linkId='+linkId+'&domain='+domain+'&startYmd='+startYmd+'&endYmd='+endYmd,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$linkId = "y6Tg";
$domain = "https://vvd.bz";
$startYmd = "2024-05-01";
$endYmd = "2024-05-31";
$url = "https://vivoldi.com/api/statistics/v1/clicks-by-date?linkId=$linkId&domain=$domain&startYmd=$startYmd&endYmd=$endYmd";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ClickList {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
String nm = URLEncoder.encode("my test group", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/statistics/v1/clicks-by-date?linkId=y6Tg&domain=https://vvd.bz&startYmd=2024-05-01&endYmd=2024-05-31"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":[
{
"ymd":"2024-05-01",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":384,
"pernCnt":295,
},
{
"ymd":"2024-05-02",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":18543,
"pernCnt":15691,
}
{
"ymd":"2024-05-03",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":5408,
"pernCnt":5006,
}
]
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||
result | 통계 목록:
| array |
Daftar Grup
Mendapatkan daftar grup tautan yang dibuat.
Get /api/group/v1/list HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
필드 | 필드 설명 | 설명 | 필수 | 유형 |
---|---|---|---|---|
grpIdx | 그룹 ID | 그룹 ID로 목록을 조회합니다. | int | |
nm | 그룹 이름 | 그룹 이름을 설정하면 그룹 목록을 조회할 때 그룹 이름을 검색하여 조회합니다. 그룹 이름 검색은 equals 조회가 아닌 like 조회입니다. | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnGroupList" type="button">Get group list</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnGroupList").on('click', function(evt){
evt.preventDefault();
const nm = encodeURI('my test group');
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/group/v1/list?nm='+nm,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$nm = urlencode("my test group");
$url = "https://vivoldi.com/api/group/v1/list?nm=$nm";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class GroupList {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
String nm = URLEncoder.encode("my test group", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/group/v1/list?nm="+nm))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":[
{
"idx":1,
"nm":"쿠팡 전자제품",
"memo":"10만원 ~ 50만원 제품",
"linkCnt":112,
"blockOverseasSticsYn":"N",
"notfSubscYn":"N",
"kakaoNotifyYn":"N",
"pushNotifyYn":"N",
"mailNotifyYn":"N",
"clksIpFilteringYn":"N",
"regYmdt":"2019-10-20 02:30:00",
"modYmdt":"2019-10-20 02:30:00"
},
{
"idx":2,
"nm":"쿠팡 전자제품 (100만원 이상)",
"memo":"100만원 이상 제품",
"linkCnt":68,
"blockOverseasSticsYn":"N",
"notfSubscYn":"Y",
"kakaoNotifyYn":"N",
"pushNotifyYn":"Y",
"mailNotifyYn":"N",
"clksIpFilteringYn":"Y",
"regYmdt":"2019-10-21 15:30:20",
"modYmdt":"2019-10-22 11:20:50"
}
]
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||
result | 그룹 목록:
| array |
Validasi tautan dengan tanggal kedaluwarsa, kata sandi, dan klik maksimum yang diizinkan
API ini tersedia pada paket Premium.
Ketika Anda membatasi akses ke sebuah tautan, Anda menetapkan tanggal kedaluwarsa, kata sandi, dan jumlah maksimum klik yang diizinkan.
Jika pengguna mengklik tautan yang dibuat oleh Vivoldi, tidak masalah, tetapi jika mereka langsung menuju ke URL yang panjang pada peramban mereka, tidak ada cara untuk memvalidasinya.
Vivoldi menyediakan SDK JavaScript terpisah untuk mengatasi masalah ini.
Ketika Anda menambahkan SDK ke halaman dengan tautan yang panjang, SDK akan mengambil informasi tautan dan memeriksa tanggal kedaluwarsa, kata sandi, dan jumlah maksimum klik yang diizinkan.
Alihkan kembali ke tautan pendek Vivoldi atau blokir akses.
Tambahkan skrip yang disediakan oleh Vivoldi ke halaman acara atau promosi Anda di antara
Tambahkan skrip Vivoldi ke halaman Anda seperti yang ditunjukkan di bawah ini:
<html>
<head>
<title>샘플 페이지</title>
<script src="https://opencdn.vivoldi.com/js/v1/link.validate.min.js?v=202401191" type="text/javascript"></script>
<script>
const linkId = 'xY5h'; // 생성한 링크ID
const domain = 'https://vvd.bz'; // 링크 도메인 (vvd.bz 또는 vvd.im)
const apiKey = 'oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'; // 귀하의 API Key
vvdLinkValidate(linkId, domain, apiKey); // 비볼디에서 제공하는 SDK의 함수 호출
</script>
</head>
<body>
.
.
.
</body>
</html>
Get /api/validate/v1/link HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/x-www-form-urlencoded
필드 | 필드 설명 | 설명 | 필수 | 유형 |
---|---|---|---|---|
linkId | 링크 ID | 유효기간, 비밀번호, 최대 클릭 허용 수가 설정된 링크의 ID | string | |
domain | 도메인 | 생성된 링크의 도메인 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnValidate" type="button">Get validate</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnValidate").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/validate/v1/link?linkId=4Rug&domain=https://vvd.bz',
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$linkId = "4Rug";
$domain = "https://vvd.bz";
$url = "https://vivoldi.com/api/validate/v1/link?linkId=$linkId&domain=$domain";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class LinkValidate {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/validate/v1/link?linkId=4Rug&domain=https://vvd.bz"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result": {
"linkId": "xY5h",
"domain": "https://vvd.bz",
"expireUseYn": "N",
"expireYn": "N",
"expireUrl": "https://",
"acesMaxUseYn": "Y",
"acesMaxYn": "Y",
"acesMaxCnt": 1000,
"acesCnt": 1,
"pernCnt": 1,
"agentKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"url": "https://vvd.bz/xY5h",
"pwdUseYn": "Y",
"pwdConfirmYn: "Y"
}
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
result |
| object |
Buat kupon
API ini tersedia mulai dari paket Personal.
Membuat kupon diskon. Jika Anda ingin membuat beberapa kupon sekaligus, buatlah di dasbor.
Anda tidak dapat mengunggah gambar kupon menggunakan API.
Dalam hal ini, Anda dapat mengunggah gambar kupon saat Anda membuat grup kupon di dasbor dan menentukan grup saat Anda membuat kupon.
Jika Anda menentukan grup kupon saat Anda membuat kupon, maka beberapa pengaturan akan diabaikan dan pengaturan dalam grup kupon akan diterapkan.
Post /api/coupon/v1/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
cpnNo | Nomor kupon 8~16 digit yang terdiri dari huruf kapital dan angka. Karakter khusus tidak diperbolehkan. Jika nilai ini kosong, nomor kupon akan dibuat otomatis oleh sistem. | string | ||
grpIdx | Grup kupon digunakan untuk mengelola kategori kupon. Jika pengaturan grup dan pengaturan kupon bertabrakan, pengaturan kupon akan diabaikan. Anda bisa melihat grup IDX pada halaman grup kupon di dashboard. Nilai default: 0 | int | ||
tmplIdx | Template kupon digunakan untuk mendeskripsikan kegunaan kupon, cara pakai, dan ketentuan lainnya. Template IDX dapat ditemukan di halaman template kupon pada dashboard. Nilai default: 0 | int | ||
nm | Nama kupon akan ditampilkan di halaman kupon. | string | ||
discTypeIdx | Tentukan jenis diskon (persen atau nominal) untuk kupon. 457: Diskon persen (%), 458: Diskon nominal. Diskon persen: digunakan untuk diskon dalam bentuk persen. Diskon nominal: digunakan untuk diskon dalam jumlah tertentu. | int | ||
disc | Masukkan nilai antara 1% dan 100% jika diskon berupa persen (457). Masukkan jumlah diskon jika tipenya nominal (458). | double | ||
discCurrency | Anda dapat memilih satuan mata uang jika menggunakan diskon nominal (458). KRW: won Korea, USD: dolar AS, JPY: yen Jepang, EUR: euro. Nilai default: KRW | string | ||
strtYmd | Tentukan tanggal mulai masa berlaku kupon. Masukkan 10 digit dengan format yyyy-mm-dd. Contoh: 2024-10-01 | date | ||
endYmd | Tentukan tanggal berakhirnya masa berlaku kupon. Masukkan 10 digit dengan format yyyy-mm-dd. Contoh: 2024-12-31 | date | ||
onsiteYn | Jika nilai ini Y, halaman kupon akan menampilkan tombol untuk menukarkan kupon di tempat. Pengguna menunjukkan kupon ke staf toko untuk ditukarkan. Fitur ini berguna untuk toko fisik. Nilai default: N | Y or N | ||
onsitePwd | Jika Anda mengatur kata sandi, staf toko harus memasukkannya saat memproses penukaran kupon. Pengguna tidak bisa menukarkan kupon sendiri. | string | ||
memo | Dapat digunakan untuk keperluan internal dalam pengelolaan kupon. Catatan ini tidak terlihat oleh pengguna. | string | ||
url | Setelah Anda memasukkan URL, halaman kupon akan menampilkan tombol “Tukar kupon” yang akan mengarahkan ke URL tersebut. Jika gambar kupon diunggah, mengklik gambar juga akan membuka URL itu. | string | ||
useLimit | Tentukan batas maksimum penukaran kupon per orang. Pada penggunaan REST API Vivoldi, jumlah penukaran harus antara 2 hingga 5 dan memerlukan user ID. Saat mengelola manual melalui dashboard, hanya bisa memilih “Tidak terbatas” atau “1 kali”. Jika memilih “Tidak terbatas”, siapa pun dapat menukarkan kupon tanpa batas. 0: Tidak terbatas, 1: 1 kali, 2: 2 kali, 3: 3 kali, 4: 4 kali, 5: 5 kali | int | ||
color | Tentukan warna teks kupon pada halaman kupon. Harus dimasukkan dalam format HEX hingga 9 digit (termasuk transparansi). Nilai default: #4F4F4FFF | string | ||
background | Atur warna latar belakang kupon pada halaman kupon. Harus dalam format HEX hingga 9 digit (termasuk transparansi). Nilai default: #FFFFFFFF | string | ||
userId | Digunakan untuk mengelola siapa yang menerbitkan dan menukarkan kupon. Jika batas penukaran per orang antara 2-5, user ID wajib diisi. Biasanya, masukkan ID login anggota yang terdaftar di situs Anda. | string | ||
userNm | Jika sudah tahu siapa yang akan menerima kupon, masukkan nama pengguna di sini. Ini digunakan untuk mengelola penerbitan dan penukaran kupon. | string | ||
userPhnno | Masukkan nomor kontak pengguna yang akan menukarkan kupon. | string | ||
userEml | Masukkan email pengguna yang akan menukarkan kupon. | string | ||
userEtc1 | Masukkan informasi tambahan pengguna untuk keperluan administrasi internal. | string | ||
userEtc2 | Masukkan informasi tambahan pengguna untuk keperluan administrasi internal. | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnCreateCoupon" type="button">Create Coupon</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnCreateCoupon").on('click', function(evt){
evt.preventDefault();
const data = JSON.stringify({
'cpnNo':'', // auto create
'grpIdx':271,
'tmplIdx':0,
'nm':'5,000원 할인 쿠폰',
'discTypeIdx':458,
'disc':5000,
'strtYmd':'2024-10-01',
'endYmd':'2025-12-31',
'memo':'신규 회원가입, Address:211.111.222.33',
'url':'https://bestshop.com/product/bags/42316',
'useLimit':1,
'userId':'att78z',
'userNm':'홍길동',
'userPhnno':'010-1111-2345',
'userEml':'test@gmail.com',
'userEtc1':'VIP 회원'
});
$.ajax({
type: 'POST',
url: 'https://vivoldi.com/api/coupon/v1/create',
data: data,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('Coupon number: ' + res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/coupon/v1/create";
$params = array (
"cpnNo" => "", // auto create
"grpIdx" => 271,
"tmplIdx" => 0,
"nm" => "5,000원 할인 쿠폰",
"discTypeIdx" => 458,
"disc" => 5000,
"strtYmd" => "2024-10-01",
"endYmd" => "2025-12-31",
"memo" => "신규 회원가입, Address:211.111.222.33",
"url" => "https://bestshop.com/product/bags/42316",
"useLimit" => 1,
"userId" => "att78z",
"userNm" => "홍길동",
"userPhnno" => "010-1111-2345",
"userEml" => "test@gmail.com",
"userEtc1" => "VIP 회원"
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CreateCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("cpnNo", ""); // auto create
params.put("grpIdx", 271);
params.put("tmplIdx", 0);
params.put("nm", "5,000원 할인 쿠폰");
params.put("discTypeIdx", 458);
params.put("disc", 5000);
params.put("strtYmd", "2024-10-01");
params.put("endYmd", "2025-12-31");
params.put("memo", "신규 회원가입, Address:211.111.222.33");
params.put("url", "https://bestshop.com/product/bags/42316");
params.put("useLimit", 1);
params.put("userId", "att78z");
params.put("userNm", "홍길동");
params.put("userPhnno", "010-1111-2345");
params.put("userEml", "test@gmail.com");
params.put("userEtc1", "VIP 회원");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/coupon/v1/create"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.POST(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Coupon number: " + json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":"ZJLF0399WQBEQZJM"
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
result | Nilai respons (Nomor kupon) | string |
Edit kupon
API ini tersedia mulai dari paket Personal.
Mengubah informasi dalam kupon yang dibuat.
Saat Anda menetapkan grup ke kupon, beberapa pengaturan diabaikan dan pengaturan dalam grup kupon diterapkan.
Untuk kupon yang telah ditukarkan, Anda hanya dapat mengedit "Catatan" tetapi tidak dapat mengedit informasi lainnya.
Put /api/coupon/v1/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
cpnNo | Nomor kupon yang ingin Anda perbarui. Masukkan hanya nomor kupon, tanpa karakter "-". | string | ||
grpIdx | Grup kupon digunakan untuk mengelola pengkategorian kupon. Jika ada pengaturan grup dan pengaturan kupon bersamaan, pengaturan kupon akan diabaikan. Anda dapat menemukan grup IDX di halaman Grup Kupon di dashboard. Nilai default: 0 | int | ||
tmplIdx | Template kupon digunakan untuk memberikan deskripsi, petunjuk penggunaan, dan peringatan kepada pengguna. Anda dapat menemukan template IDX di halaman Template Kupon di dashboard. Nilai default: 0 | int | ||
nm | Nama kupon akan ditampilkan di halaman kupon. | string | ||
discTypeIdx | Mengatur tipe diskon untuk kupon (persentase atau nominal). 457: Diskon persentase (%), 458: Diskon nominal Diskon persentase: digunakan untuk memberikan diskon berdasarkan persentase. Diskon nominal: digunakan untuk memberikan diskon dengan jumlah tetap. | int | ||
disc | Jika tipe diskon adalah persentase (457), masukkan nilai antara 1% hingga 100%. Jika tipe diskon adalah nominal (458), masukkan jumlah diskonnya. | double | ||
discCurrency | Anda dapat mengatur satuan mata uang jika tipe diskon adalah nominal (458). KRW: Won Korea, USD: Dolar AS, JPY: Yen Jepang, EUR: Euro. Nilai default: KRW | string | ||
strtYmd | Atur tanggal mulai masa berlaku kupon. Nilai 10 digit dengan format yyyy-mm-dd. Contoh: 2024-10-01 | date | ||
endYmd | Atur tanggal kadaluwarsa masa berlaku kupon. Nilai 10 digit dengan format yyyy-mm-dd. Contoh: 2024-12-31 | date | ||
onsiteYn | Jika nilai ini Y, tombol penukaran kupon akan ditampilkan di halaman kupon. Pengguna menunjukkan kupon ke staf toko, lalu staf akan menukarkannya. Fitur ini berguna jika Anda memiliki toko fisik. | Y or N | ||
onsitePwd | Jika Anda mengatur kata sandi, staf toko harus memasukkannya saat menukarkan kupon. Pengguna tidak dapat menukarkan kupon secara mandiri. | string | ||
memo | Digunakan untuk manajemen internal kupon. Catatan tidak terlihat oleh pengguna. | string | ||
url | Jika Anda memasukkan URL, tombol "Tukar kupon" akan muncul di halaman kupon dan akan mengarahkan ke URL tersebut saat diklik. Jika gambar kupon diunggah, mengklik gambar juga akan mengarahkan ke URL. | string | ||
useLimit | Atur jumlah maksimum penukaran kupon per orang. Saat menggunakan REST API Vivoldi untuk memproses penukaran, nilai antara 2 dan 5 wajib diisi. Dalam hal ini, user ID wajib diisi. Saat mengelola penukaran manual melalui dashboard, Anda dapat memilih "Tanpa batas" atau "1 kali". Jika memilih "Tanpa batas", siapa pun dapat menukarkan kupon tanpa batas penggunaan. 0: Tanpa batas, 1: 1 kali, 2: 2 kali, 3: 3 kali, 4: 4 kali, 5: 5 kali | int | ||
color | Mengatur warna teks kupon di halaman kupon. Harus diisi dalam format HEX hingga 9 digit, termasuk transparansi. Nilai default: #4F4F4FFF | string | ||
background | Mengatur warna latar belakang kupon di halaman kupon. Harus diisi dalam format HEX hingga 9 digit, termasuk transparansi. Nilai default: #FFFFFFFF | string | ||
userId | Digunakan untuk mengelola siapa yang menerima dan siapa yang menukarkan kupon. Jika batas maksimal penukaran per orang adalah 2~5, user ID wajib diisi. Biasanya, masukkan ID login anggota yang terdaftar di website Anda. | string | ||
userNm | Jika Anda sudah mengetahui siapa yang akan menerima kupon, masukkan nama pengguna yang akan menggunakannya. Ini diperlukan untuk mengelola penerbitan dan penukaran kupon. | string | ||
userPhnno | Atur informasi kontak pengguna yang akan menukarkan kupon. | string | ||
userEml | Atur alamat email pengguna yang akan menukarkan kupon. | string | ||
userEtc1 | Atur informasi tambahan tentang pengguna untuk keperluan administrasi internal. | string | ||
userEtc2 | Atur informasi tambahan tentang pengguna untuk keperluan administrasi internal. | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnEditCoupon" type="button">Edit Coupon</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnEditCoupon").on('click', function(evt){
evt.preventDefault();
const data = JSON.stringify({
'cpnNo':'ZJLF0399WQBEQZJM',
'nm':'40% 할인 쿠폰',
'discTypeIdx':457,
'disc':40
});
$.ajax({
type: 'PUT',
url: 'https://vivoldi.com/api/coupon/v1/edit',
data: data,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/coupon/v1/edit";
$params = array (
"cpnNo" => "ZJLF0399WQBEQZJM",
"nm" => "40% 할인 쿠폰",
"discTypeIdx" => 457,
"disc" => 40
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class EditCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("cpnNo", "ZJLF0399WQBEQZJM");
params.put("nm", "40% 할인 쿠폰");
params.put("discTypeIdx", 457);
params.put("disc", 40);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/coupon/v1/edit"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.PUT(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":null
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
Hapus kupon
API ini tersedia mulai dari paket Personal.
Menghapus kupon yang dibuat.
Untuk menghapus beberapa kupon sekaligus, gunakan dasbor.
Delete /api/coupon/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
cpnNo | Coupon number | Nomor kupon yang akan dihapus. | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnDeleteCoupon" type="button">Delete Coupon</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnDeleteCoupon").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'DELETE',
url: 'https://vivoldi.com/api/coupon/v1/remove?cpnNo=ZJLF0399WQBEQZJM',
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('Success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$cpnNo = "ZJLF0399WQBEQZJM";
$url = "https://vivoldi.com/api/coupon/v1/remove?cpnNo=$cpnNo";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DeleteCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v1/remove?cpnNo=ZJLF0399WQBEQZJM"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.DELETE()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":""
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
Validasi kupon
Digunakan untuk memeriksa dan memvalidasi apakah kupon tersebut valid sebelum memproses "Tukarkan kupon".
Verifikasi validasi kupon seperti yang ditunjukkan di bawah ini.
- Validasi tanggal kedaluwarsa kupon. (tanggal mulai dan tanggal kedaluwarsa)
- Validasi jumlah maksimum kupon per orang.
- Validasi penukaran kupon.
Get /api/coupon/v1/validate HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
cpnNo | Coupon number | Nomor kupon yang akan divalidasi. Jika validasi gagal, periksa pesan di respons. | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnValidate" type="button">Get validate</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnValidate").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/coupon/v1/validate?cpnNo=ZJLF0399WQBEQZJM',
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log('사용 가능한 쿠폰입니다.');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$cpnNo = "ZJLF0399WQBEQZJM";
$url = "https://vivoldi.com/api/coupon/v1/validate?cpnNo=$cpnNo";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
echo "사용 가능한 쿠폰입니다.";
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ValidateCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/coupon/v1/validate?cpnNo=ZJLF0399WQBEQZJM"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("사용 가능한 쿠폰입니다.");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result": null
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
Gunakan kupon
API ini tersedia mulai dari paket Personal.
Meskipun Anda dapat mengelola proses "menukarkan kupon" secara manual di daftar kupon di dasbor Anda, API ini memungkinkan Anda untuk mengotomatiskannya dengan memanggilnya saat pengguna menukarkan kupon di situs web Anda.
Put /api/coupon/v1/use HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Bidang | Deskripsi Lapangan | Deskripsi | Diperlukan | Jenis |
---|---|---|---|---|
cpnNo | Coupon number | Nomor kupon “ditukarkan” yang akan diproses. Masukkan hanya nomor kupon tanpa tanda “-”. | string | |
onsitePwd | On-site coupon usage password | Jika telah diatur kata sandi untuk penggunaan kupon di toko, masukkan kata sandi yang telah ditetapkan. Jika kata sandi salah, Anda tidak dapat menggunakan kupon tersebut. | string | |
userId | User ID | Digunakan untuk mengelola siapa yang mengeluarkan dan menukarkan kupon. Jika nilai maksimum penukaran per orang adalah antara 2 hingga 5, user ID harus diisi. Biasanya, masukkan ID login anggota yang terdaftar di situs Anda. | string | |
memo | Notes | Anda dapat memasukkan catatan untuk mengelola penukaran kupon. Masukkan alamat IP pengguna, halaman dan layanan tempat kupon ditukarkan, serta informasi lainnya. Jika jumlah maksimum penukaran per orang tidak terbatas, Anda tidak tahu siapa yang menukarkan kupon, sehingga dapat mengelola berdasarkan nama pengguna atau catatan. | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnUseCoupon" type="button">Use Coupon</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnUseCoupon").on('click', function(evt){
evt.preventDefault();
const data = JSON.stringify({
'cpnNo':'ZJLF0399WQBEQZJM',
'userId':'x77hu',
'memo':'IP Address: 210.123.111.222, Request Page: example.com/shop/bags/p112233'
});
$.ajax({
type: 'PUT',
url: 'https://vivoldi.com/api/coupon/v1/use',
data: data,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/coupon/v1/use";
$params = array (
"cpnNo" => "ZJLF0399WQBEQZJM",
"userId" => "x77hu",
"memo" => "IP Address: 210.123.111.222, Request Page: example.com/shop/bags/p112233"
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class UseCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("cpnNo", "ZJLF0399WQBEQZJM");
params.put("userId", "x77hu");
params.put("memo", "IP Address: 210.123.111.222, Request Page: example.com/shop/bags/p112233");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/coupon/v1/use"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.PUT(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":null
}
Bidang | Deskripsi | Jenis |
---|---|---|
code | Kode respons (0: Sukses) | int |
message | Pesan respons, atau pesan terkait jika kode respons bukan nol. | string |
Mengirim pesan push
API ini tidak bergantung pada layanan Pemendek URL Vivoldi dan ditujukan untuk siapa saja yang menjalankan situs web.
Untuk mengirim pesan push ke pengguna yang mengunjungi situs web Anda, pengguna harus menyetujui "izin notifikasi" di browser web mereka.
Jika mereka menolak izin notifikasi, Anda tidak akan dapat mengirim pesan push.
Setelah Anda menginstal JavaScript SDK yang disediakan oleh Vivoldi di situs web Anda, browser web akan menampilkan jendela pop-up untuk "Izin Pemberitahuan" ketika pengguna mengunjungi situs web Anda.
Jika pengguna menyetujui izin tersebut, data notifikasi akan dicantumkan di halaman " Push Messages -> Send website push" pada dashboard.
Sebagai contoh, jika 100 pengguna telah menyetujui izin notifikasi di situs web Anda, Anda akan melihat 100 data dalam daftar.
Ketika Anda mengirim pesan push dari dasbor, pesan tersebut akan dikirim ke semua pengguna yang ditampilkan dalam daftar.
Siapa pun dapat menginstal JavaScript SDK yang disediakan oleh Vivoldi untuk mengumpulkan data pengguna.
Namun, Anda harus memiliki uang di akun Anda untuk mengirim pesan push.
Biaya untuk mengirim pesan push adalah 10 KRW per pesan, atau Anda bisa mendaftar untuk berlangganan bulanan untuk mengirim pesan dalam jumlah tak terbatas.
Menginstal JavaScript SDK semudah menambahkannya di antara < head>...</head>.
<html>
<head>
<title>example page</title>
<script src="https://opencdn.vivoldi.com/js/webpush.min.js?v=202502051" type="text/javascript"></script>
<script>
const apiKey = 'oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'; // your api key
const publicKey = 'XXXXXYTRlpG8mXXXXXiuBZ6BtjyOfgPsDArFYWF2PxZbY4egmDNias1gEfN_5wftScr39K8BbcjXXXXX'; // "푸시 메시지 -> 도메인 관리" 페이지에서 등록한 도메인의 Public Key
const params = {apiKey:apiKey, publicKey:publicKey};
webpush.register(params); // 알림 권한 팝업 창 띄우기 (이미 권한을 허용하였다면 팝업이 표시되지 않습니다)
</script>
</head>
<body>
.
.
.
</body>
</html>
Kunci API dapat dibuat pada halaman "API Pengembang" di dasbor Anda, dan publicKey dapat ditemukan dalam daftar setelah Anda mendaftarkan domain pada halaman " Pesan Push -> Manajemen Domain".
Jika skrip dieksekusi segera setelah halaman web dimuat, seperti pada contoh di atas, kemungkinan besar browser web akan memblokirnya secara otomatis tanpa menampilkan jendela popup notifikasi izin.
(Kecuali untuk browser Google Chrome)
Oleh karena itu, kami sarankan untuk menambahkan tombol ke halaman Anda dan menyisipkan skrip di event onclick tombol tersebut.
Setelah semuanya siap, hal terakhir yang perlu Anda lakukan adalah membuat berkas sw. min.js baru dan mengunggahnya ke root situs web Anda.
Sebagai contoh: https://example.com/sw.min.js
Ketika mengakses jalur di atas, skrip harus ditampilkan di peramban web agar notifikasi dapat berfungsi dengan baik.
Salin dan tempelkan kode di bawah ini ke dalam file sw.min.js yang baru Anda buat.
'use strict';const a0_0x5374e1=a0_0xe038;(function(_0x1227c0,_0x51a60b){const _0x31ab77=a0_0xe038,_0x20d84d=_0x1227c0();while(!![]){try{const _0x12de05=parseInt(_0x31ab77(0x189))/0x1+-parseInt(_0x31ab77(0x188))/0x2+-parseInt(_0x31ab77(0x175))/0x3+parseInt(_0x31ab77(0x196))/0x4+parseInt(_0x31ab77(0x191))/0x5*(parseInt(_0x31ab77(0x179))/0x6)+parseInt(_0x31ab77(0x190))/0x7*(-parseInt(_0x31ab77(0x18a))/0x8)+parseInt(_0x31ab77(0x181))/0x9*(parseInt(_0x31ab77(0x173))/0xa);if(_0x12de05===_0x51a60b)break;else _0x20d84d['push'](_0x20d84d['shift']());}catch(_0x40c5f5){_0x20d84d['push'](_0x20d84d['shift']());}}}(a0_0x3c7d,0xc9d27));function a0_0xe038(_0x596680,_0x1be660){const _0x3c7dc3=a0_0x3c7d();return a0_0xe038=function(_0xe03880,_0x22c065){_0xe03880=_0xe03880-0x170;let _0x16ce5f=_0x3c7dc3[_0xe03880];return _0x16ce5f;},a0_0xe038(_0x596680,_0x1be660);}function a0_0x3c7d(){const _0x45d9ad=['waitUntil','notification','20673aXYLrA','navigator','title','focus','icon','toLowerCase','image','168378lbyyZD','193689SqVukM','41896sLUVSk','macintosh','close','registration','userAgent','body','1253fKQvUq','2054765fkWElD','install','includes','openWindow','badge','4620004XrYmFj','notificationclick','ko-KR','url','showNotification','parse','바로가기','window','platform','mac','actions','1490bVkBER','action','1993722LznGRH','navigate','button','activate','12Yewkpl','push','matchAll','data','then','addEventListener'];a0_0x3c7d=function(){return _0x45d9ad;};return a0_0x3c7d();}self['addEventListener'](a0_0x5374e1(0x192),_0x220cef=>{self['skipWaiting']();}),self[a0_0x5374e1(0x17e)](a0_0x5374e1(0x178),_0x4e57ea=>{const _0x4e29f9=a0_0x5374e1;_0x4e57ea[_0x4e29f9(0x17f)](clients['claim']());}),self[a0_0x5374e1(0x17e)](a0_0x5374e1(0x17a),function(_0x5b8772){const _0x578b75=a0_0x5374e1,_0x6a0810=JSON[_0x578b75(0x19b)](_0x5b8772[_0x578b75(0x17c)]['text']()),_0x41c647=navigator['language'],_0x3709b8=_0x41c647==='ko'||_0x41c647===_0x578b75(0x198),_0x398015=self[_0x578b75(0x182)]['platform']['toLowerCase']()[_0x578b75(0x193)](_0x578b75(0x171)),_0x570dee=self[_0x578b75(0x182)]['userAgent']['toLowerCase']()[_0x578b75(0x193)](_0x578b75(0x18b)),_0x417e2c={'tag':'renotify','renotify':!![],'body':_0x6a0810[_0x578b75(0x18f)],'icon':_0x6a0810[_0x578b75(0x185)],'badge':_0x6a0810[_0x578b75(0x195)],'requireInteraction':!![],'vibrate':[0x12c,0x64,0x190,0xc8,0x1f4],'data':_0x6a0810,'actions':[{'action':'go','type':_0x578b75(0x177),'title':_0x3709b8?_0x578b75(0x19c):'GO'},{'action':_0x578b75(0x18c),'type':'button','title':_0x3709b8?'닫기':'CLOSE'}]};_0x6a0810[_0x578b75(0x187)]&&(_0x417e2c[_0x578b75(0x187)]=_0x6a0810[_0x578b75(0x187)]),(_0x398015||_0x570dee)&&delete _0x417e2c[_0x578b75(0x172)],_0x5b8772['waitUntil'](self[_0x578b75(0x18d)][_0x578b75(0x19a)](_0x6a0810[_0x578b75(0x183)],_0x417e2c));}),self[a0_0x5374e1(0x17e)](a0_0x5374e1(0x197),function(_0x278188){const _0x1737d2=a0_0x5374e1;_0x278188['notification'][_0x1737d2(0x18c)]();const _0x381024=self['navigator'][_0x1737d2(0x170)][_0x1737d2(0x186)]()[_0x1737d2(0x193)]('mac'),_0x419533=self[_0x1737d2(0x182)][_0x1737d2(0x18e)][_0x1737d2(0x186)]()[_0x1737d2(0x193)](_0x1737d2(0x18b));if(_0x381024||_0x419533)_0x278188[_0x1737d2(0x17f)](clients[_0x1737d2(0x17b)]({'type':_0x1737d2(0x19d)})[_0x1737d2(0x17d)](_0x55a8eb=>{const _0x25611a=_0x1737d2;_0x55a8eb['length']>0x0?(_0x55a8eb[0x0][_0x25611a(0x176)](_0x278188[_0x25611a(0x180)][_0x25611a(0x17c)][_0x25611a(0x199)]),_0x55a8eb[0x0][_0x25611a(0x184)]()):clients[_0x25611a(0x194)](_0x278188[_0x25611a(0x180)]['data'][_0x25611a(0x199)]);}));else switch(_0x278188[_0x1737d2(0x174)]){case'go':_0x278188[_0x1737d2(0x17f)](clients[_0x1737d2(0x194)](_0x278188[_0x1737d2(0x180)][_0x1737d2(0x17c)][_0x1737d2(0x199)]));break;case _0x1737d2(0x18c):break;default:_0x278188['waitUntil'](clients[_0x1737d2(0x194)](_0x278188[_0x1737d2(0x180)][_0x1737d2(0x17c)][_0x1737d2(0x199)]));}});
Sekarang, ketika Anda mengakses situs web Anda, Anda akan melihat izin notifikasi.
Setelah Anda mengizinkan izin notifikasi, periksa apakah Anda melihat data notifikasi di halaman "Pengiriman Push Situs Web " pada dasbor Vivoldi Anda.