Wie man die API aufruft
Host: https://vivoldi.com/api HTTP/1.1
Authorization: APIKey {Your API Key}
Content-type: application/json
{
"code": 0,
"message": "",
"result": Object
}
message - Die Antwortnachricht; eine Fehlermeldung wird zurückgegeben, wenn der Antwortcode ungleich Null ist.
result - Der Antwortwert, der je nach API-Typ als Zeichen oder JSON-Objekt zurückgegeben wird.
Link erstellen
Wenn Sie einen einzelnen kurzen Link erstellen möchten, können Sie ihn ganz einfach mit dieser API erzeugen.
Wenn Sie mehrere Links auf einmal erstellen möchten, versuchen Sie es mit der API für die Erstellung von Massenlinks.
Sie können Links auch schnell über das Menü "Bulk Link Generator" im Dashboard erstellen.
Für Nutzer des kostenlosen Tarifs sind die API-Aufrufe auf 10 Anfragen pro Minute begrenzt.
Wenn Sie ein höheres Volumen benötigen, sollten Sie ein Upgrade auf einen kostenpflichtigen Plan in Erwägung ziehen, um erweiterten Zugang zu erhalten.
Jeder Kurzlink enthält automatisch einen QR-Code, der über das URL-Format `vvd.bz/[linkId]/qr` aufgerufen werden kann.
Um die Größe des QR-Codes anzupassen, fügen Sie einfach den Parameter `size` an die URL an.
Verwenden Sie zum Beispiel `vvd.bz/[linkId]/qr?size=200`, um einen QR-Code mit einer Größe von 200 Pixeln zu erzeugen.
Post /api/link/v2/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
url | Lange URL | Die lange URL, zu der weitergeleitet wird, wenn der Kurzlink angeklickt wird. Bis zu 3.000 Byte möglich. | string | |
domain | Domain | Wenn leer, wird automatisch die Domain vvd.bz verwendet. Der Wert muss mit “https://” angegeben werden. Ist “brandLinkId” auf “Y” gesetzt, nutze “https://vvd.im”. Wenn du deine eigene Domain mit Vivoldi verknüpft hast, kannst du sie hier eintragen. Beispiel: https://vvd.bz | string | |
redirectType | Weiterleitungstyp | Legt fest, wie von Kurz-URL auf Lang-URL weitergeleitet wird. Wähle 200, 301 oder 302 als HTTP-Statuscode. Standardwert: 302 Mehr Infos zu Weiterleitungsmethoden findest du auf der “Glossar”-Seite. | int | |
grpIdx | Gruppen-ID | Die Angabe einer Gruppen-ID verknüpft den Link mit dieser Gruppe. Die GroupID erhältst du über die "Gruppenliste"-API. | int | |
brandLinkId | Brand Link ID | Bei Angabe eines Werts wird der Link mit dieser ID erstellt. (Wenn gesetzt, ist die Domain vvd.im statt vvd.bz.) Bei leerem Wert wird die Link-ID automatisch generiert. | string | |
ttl | Link-Titel | Wenn leer, wird der Seitentitel der langen URL gespeichert. Bei leerem Wert wird die lange URL aufgerufen und HTML geparst, daher bei langsamer Antwort besser einen Titel angeben. | string | |
description | Meta-Beschreibung | Du kannst das Meta-Description-Tag der Seite setzen, wenn “redirectType” auf “200” steht. Bei “301”, “302” usw. wird dieser Wert ignoriert. | string | |
memo | Notizen | Du kannst hier interne Informationen für die Verwaltung eintragen. Sie sind für Nutzer nicht sichtbar. | string | |
notfSubscYn | Push-Link | Bei Wert Y erscheint beim Klick auf den Link zuerst ein Web-Push-Popup, bevor weitergeleitet wird. Push-Nachrichten können an alle Nutzer mit Erlaubnis gesendet werden. Wenn abgelehnt oder geschlossen, wird direkt weitergeleitet. Standardwert (bei leer): N Mehr unter Web Push-Funktionsseite. | Y oder N | |
clksIpFilteringYn | IP-Filter für Klicks | Bei Y wird der Klickzähler für die gleiche IP in 3 Tagen nur einmal erhöht. Ab Tag 4 werden neue Klicks gezählt. Diese Option ist nur bei Link-Erstellung einstellbar, später nicht mehr änderbar. Funktion ab Personal-Tarif verfügbar. | Y oder N | |
pushNotifyYn | Push-Benachrichtigungen | Bei Y erhältst du Push-Nachrichten auf Mobilgeräte mit Vivoldi-App, wenn die Klickzahl (gemäß Einstellungen unter “Einstellungen -> Präferenzen”) erreicht ist. Verfügbar ab Personal-Tarif. | Y oder N | |
mailNotifyYn | E-Mail-Benachrichtigungen | Bei Y erhältst du Infos zur Klickzahl per E-Mail, wenn die Zielzahl erreicht ist. Verfügbar ab Personal-Tarif. | Y oder N | |
delYmd | Link-Löschdatum | Nach dem eingestellten Datum wird der Link automatisch entfernt. Löschintervall: stündlich Beispiel: 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"
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
result | Antwortwert (verkürzter Link) | string |
Bulk-Links erstellen
Erstellen Sie mehrere verkürzte Links auf einmal.
Wenn Sie eine große Anzahl von Links auf einmal erstellen möchten, verwenden Sie das Menü "Massenlinks erstellen" im Dashboard.
Sie können nur eine begrenzte Anzahl von Links auf einmal erstellen, und die Grenzen pro Plan sind wie folgt
Wenn Sie 3.000 Links erstellen möchten, müssen Sie diese API mehrfach aufrufen.
Persönlicher Plan: Bis zu 200
Premium-Tarif: bis zu 500
Business-Tarif: bis zu 1.000
Diese API ist ab dem Personal-Tarif verfügbar.
Post /api/link/v1/createBulk HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Felder | Typ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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"}
]
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
result | Antwortwert (verkürzter Link) | string |
Einen Link bearbeiten
Bearbeiten Sie den von Ihnen erstellten Kurzlink.
Sie können den Link-Typ nur ändern, wenn es sich um eine URL handelt; andere Typen werden nicht geändert, selbst wenn der API-Aufruf erfolgreich ist.
Put /api/link/v2/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
linkId | Link-ID | ID des erzeugten Kurzlinks. Beispiel: Ist die Kurzlink-Adresse "https://vvd.bz/fML", lautet die Link-ID fML. | string | |
domain | Domain | Die Domain der Kurzlink-Adresse. Beispiel: Ist die Kurzlink-Adresse "https://vvd.bz/fML", ist die Domain https://vvd.bz. Wichtig: Es muss https:// oder http:// eingegeben werden. Wird eine andere Domain als die des erzeugten Links angegeben, tritt ein Fehler auf. | string | |
redirectType | Weiterleitungstyp | Bestimmt, wie von der Kurz- zur Lang-URL weitergeleitet wird. HTTP-Statuscode: 200, 301 oder 302 möglich. Standardwert: 302. Mehr Informationen findest du auf der Glossar-Seite. | int | |
grpIdx | Gruppen-ID | Ändert die Gruppe des erzeugten Links. Um die Gruppen-ID zu erfahren, nutze die API "Gruppenliste". | int | |
url | Lange URL | Ändert die lange URL. Das Ändern der langen URL ist ab dem Premium-Tarif möglich. | string | |
ttl | Linktitel | Wenn leer, wird der Linktitel nicht geändert. | string | |
description | Meta-Beschreibung | Meta-Tag Beschreibung der Seite, wenn “redirectType” auf “200” steht. Wird bei “301”, “302” usw. ignoriert. | string | |
memo | Notizen | Zusätzliche administrative Informationen, die nicht für Nutzer sichtbar sind. Wenn leer, wird die Notiz nicht geändert. | string | |
notfSubscYn | Push-Link | Bei Y erscheint beim Klick ein Web-Push-Popup, bevor zur langen URL weitergeleitet wird. Falls Nutzer Push zugelassen haben, kannst du Push-Nachrichten an alle senden. Wenn abgelehnt/geschlossen, sofort zur langen URL. Ohne Wert ist N Standard. Mehr zu Push-Links: hier klicken. | Y oder N | |
pushNotifyYn | Push-Benachrichtigungen | Bei Y erhältst du Push-Benachrichtigungen aufs Handy mit installierter Vivoldi-App, wenn die Klickzahl gemäß "Einstellungen -> Präferenzen" erreicht ist. Funktion ab Personal-Tarif. | Y oder N | |
mailNotifyYn | E-Mail-Benachrichtigungen | Bei Y erhältst du bei Erreichen des Klickziels gemäß "Einstellungen -> Präferenzen" eine E-Mail-Benachrichtigung. Funktion ab Personal-Tarif. | Y oder N | |
delYmd | Link-Löschdatum | Nach dem eingestellten Datum wird der Link automatisch gelöscht. Löschzyklus: stündlich. Beispiel: 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":""
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
Einen Link löschen
Löschen Sie den von Ihnen erstellten Kurzlink.
Delete /api/link/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
linkId | Link-ID | ID des generierten Kurzlinks. Beispiel: Ist die Kurzlink-Adresse "https://vvd.bz/fML", lautet die Link-ID fML. URLEncode ist erforderlich, wenn eine Marken-Link-ID (selbst gesetzte Link-ID) verwendet wird und Sonderzeichen enthält. | string | |
domain | Domain | Die Domain der Kurzlink-Adresse. Beispiel: Ist die Kurzlink-Adresse "https://vvd.bz/fML", ist die Domain https://vvd.bz. Wichtig: Es muss https:// oder http:// angegeben werden. Wird eine andere Domain als die des Kurzlinks verwendet, tritt ein Fehler auf. Bei einer Marken-Link-ID (selbst gesetzte Link-ID) ist die Domain 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":""
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
Liste der Links
Zeigt eine Liste der erstellten Links an.
Es können nur URL-Links abgerufen werden; andere Arten von Links werden nicht abgerufen.
Diese API ist im Premium-Tarif verfügbar.
Get /api/link/v1/list HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
linkId | Link-ID | Suche die Liste nach Link-ID. URLEncode ist erforderlich, wenn die Link-ID Sonderzeichen enthält. | string | |
domain | Domain | Suche die Liste nach Link-Domain. Die Domain muss mit http:// oder https:// beginnen. | string | |
createTypeIdx | Erstellungstyp | 0: Alle Links, 270: Im Vivoldi-Dashboard erstellte Links, 272: Per API erstellte Links, 274: Massenlink-Erstellung | int | |
grpIdx | Gruppen-ID | Suche die Liste nach Gruppen-ID. Wenn kein Wert angegeben wird, ist der Standardwert 0. | int | |
url | Lange URL | Suche die Liste nach langer URL. Teilweise Suche nach der URL-Adresse möglich. | string | |
ttl | Linktitel | Suche die Liste nach Linktitel. Teilweise Suche nach dem Titel möglich. | string | |
brandLinkYn | Markenlinks | Wenn die Link-ID manuell vergeben und nicht automatisch generiert wurde, ist es ein Markenlink. Y: Aktiviert (Markenlink), N: Deaktiviert (automatisch generiert) | Y oder N | |
notfSubscYn | Push-Link | Y: Aktiviert, N: Deaktiviert | Y oder N | |
clksIpFilteringYn | Klick-IP-Filterung | Y: Aktiviert, N: Deaktiviert | Y oder N | |
pushNotifyYn | Klick-Push-Benachrichtigungen | Y: Aktiviert, N: Deaktiviert | Y oder N | |
mailNotifyYn | Klick-E-Mail-Benachrichtigungen | Y: Aktiviert, N: Deaktiviert | Y oder N | |
regStartYmdt | Erstellungsbeginn | Startdatum der Link-Erstellung, muss zwischen Start- und Enddatum liegen. Beispiel: 2022-11-08 00:00:00 | Date | |
regEndYmdt | Erstellungsende | Enddatum der Link-Erstellung, muss zwischen Start- und Enddatum liegen. Beispiel: 2022-11-08 23:59:59 Das Enddatum muss innerhalb eines Monats nach dem Startdatum liegen. | Date | |
pages | Seiten | Der Wert pages wird für die Paginierung verwendet, Standardwert ist 1. Pro Seite werden standardmäßig 30 Zeilen angezeigt. Wenn pages auf 2 gesetzt ist, werden die nächsten 30 Zeilen ab der 31. Zeile geladen. | int | |
delYmd | Link-Löschdatum | Nach dem angegebenen Datum wird der Link automatisch gelöscht. Wird ein Wert gesetzt, werden Daten vor diesem Datum angezeigt. Beispiel: 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"
}
]
}
}
Felder | Beschreibung | Typ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
result | extra (추가 정보)
list (링크 목록) - Array
| array |
Klickstatistiken nach Tageszeit
Klicks und Klicker im Zeitverlauf für einen einzelnen Link anzeigen.
Diese API ist ab dem Business-Tarif verfügbar.
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 |
Klickstatistik nach Datum
Sie können die Anzahl der Klicks auf einen einzelnen Link nach Datum und die Anzahl der Personen, die darauf geklickt haben, anzeigen.
Bei der Suche darf der Bereich der Start- und Enddaten nicht mehr als einen Monat betragen.
Diese API ist ab dem Business-Tarif verfügbar.
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 |
Gruppenliste
Ruft eine Liste der erstellten Linkgruppen ab.
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 |
Validierung von Links mit Ablaufdaten, Passwörtern und maximal zulässigen Klicks
Diese API ist für den Premium-Tarif verfügbar.
Wenn Sie den Zugriff auf einen Link einschränken, legen Sie ein Ablaufdatum, ein Passwort und die maximal zulässige Anzahl von Klicks fest.
Wenn Benutzer auf einen von Vivoldi generierten Link klicken, ist das in Ordnung, aber wenn sie direkt zu einer langen URL in ihrem Browser gehen, gibt es keine Möglichkeit, sie zu validieren.
Vivoldi bietet ein separates JavaScript-SDK, um dieses Problem zu lösen.
Wenn Sie das SDK zu einer Seite mit einem langen Link hinzufügen, ruft das SDK die Informationen des Links ab und überprüft das Ablaufdatum, das Passwort und die maximal zulässige Anzahl von Klicks.
Leiten Sie auf den Vivoldi-Kurzlink zurück oder blockieren Sie den Zugriff.
Fügen Sie das von Vivoldi bereitgestellte Skript in Ihre Veranstaltungs- oder Aktionsseite zwischen den
Fügen Sie das Skript von Vivoldi wie unten gezeigt in Ihre Seite ein:
<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 |
Coupon erstellen
Diese API ist ab dem Tarif Personal verfügbar.
Erstellen Sie einen Rabattcoupon. Wenn Sie mehrere Gutscheine auf einmal erstellen möchten, können Sie diese im Dashboard erstellen.
Sie können über die API keine Gutscheinbilder hochladen.
In diesem Fall können Sie Gutscheinbilder hochladen, wenn Sie eine Gutscheingruppe im Dashboard erstellen und die Gruppe angeben, wenn Sie den Gutschein erstellen.
Wenn Sie bei der Erstellung eines Coupons eine Coupongruppe angeben, werden einige Einstellungen ignoriert und die Einstellungen in der Coupongruppe werden angewendet.
Post /api/coupon/v1/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
cpnNo | Eine 8 bis 16-stellige Gutscheinnummer aus Großbuchstaben und Zahlen. Sonderzeichen sind nicht erlaubt. Wenn kein Wert eingegeben wird, wird die Gutscheinnummer vom System automatisch generiert. | string | ||
grpIdx | Gruppencoupons werden zur Verwaltung und Kategorisierung von Gutscheinen verwendet. Bei Überschneidung hat die Einstellung des Coupons Vorrang. Die Gruppen-ID findest du auf der Gutschein-Gruppen-Seite im Dashboard. Standardwert: 0 | int | ||
tmplIdx | Vorlagen geben an, wofür der Gutschein ist, wie er verwendet wird und welche Hinweise gelten. Die Template-ID findest du auf der Vorlagenseite für Gutscheine im Dashboard. Standardwert: 0 | int | ||
nm | Der Name des Gutscheins wird auf der Gutscheinseite angezeigt. | string | ||
discTypeIdx | Lege den Rabatt-Typ (Prozentsatz oder Betrag) fest. 457: Prozent-Rabatt (%), 458: Betrag-Rabatt Prozent-Rabatt: für prozentuale Rabatte. Betrag-Rabatt: für Rabatte mit festen Beträgen. | int | ||
disc | Gib bei Prozent-Rabatt (457) einen Wert zwischen 1% und 100% ein. Gib bei Betrag-Rabatt (458) den Rabattbetrag ein. | double | ||
discCurrency | Lege die Währung fest, wenn du einen Betrag-Rabatt (458) verwendest. KRW: Südkoreanischer Won, USD: US-Dollar, JPY: Japanischer Yen, EUR: Euro. Standardwert: KRW | string | ||
strtYmd | Lege das Startdatum für die Gültigkeit des Gutscheins fest. 10-stelliges Datum im Format jjjj-mm-tt. Beispiel: 2024-10-01 | date | ||
endYmd | Lege das Ablaufdatum des Gutscheins fest. 10-stelliges Datum im Format jjjj-mm-tt. Beispiel: 2024-12-31 | date | ||
onsiteYn | Wenn der Wert Y ist, wird auf der Gutscheinseite ein Button zum Einlösen angezeigt. Der Nutzer zeigt den Gutschein im Laden vor und das Personal löst ihn ein. Ideal für Filialgeschäfte. Standardwert: N | Y or N | ||
onsitePwd | Wenn du ein Passwort festlegst, muss das Personal dieses beim Einlösen eingeben. Der Nutzer kann den Gutschein nicht selbst einlösen. | string | ||
memo | Für interne Verwaltung der Gutscheine verwendbar. Nicht für Nutzer sichtbar. | string | ||
url | Nach Eingabe einer URL erscheint auf der Gutscheinseite der Button „Gutschein einlösen“, der auf die hinterlegte URL verweist. Ist ein Gutscheinbild hinterlegt, führt auch ein Klick auf das Bild zur URL. | string | ||
useLimit | Lege die maximale Anzahl Einlösungen pro Person fest. Bei Nutzung der REST API von Vivoldi ist für Werte zwischen 2 und 5 die Nutzer-ID Pflicht. Im Dashboard kannst du „Unbegrenzt“ oder „1-mal“ wählen. Bei „Unbegrenzt“ kann der Gutschein beliebig oft eingelöst werden. 0: Unbegrenzt, 1: 1-mal, 2: 2-mal, 3: 3-mal, 4: 4-mal, 5: 5-mal | int | ||
color | Farbe des Gutscheintextes auf der Seite. HEX-Wert mit bis zu 9 Stellen inkl. Transparenz. Standardwert: #4F4F4FFF | string | ||
background | Hintergrundfarbe des Gutscheins auf der Seite. HEX-Wert mit bis zu 9 Stellen inkl. Transparenz. Standardwert: #FFFFFFFF | string | ||
userId | Dient zur Verwaltung, wer Gutscheine ausgestellt und eingelöst hat. Bei einer Begrenzung von 2 bis 5 ist die Nutzer-ID Pflicht. Meist ist das die Login-ID des Nutzers. | string | ||
userNm | Wenn der Empfänger des Gutscheins bekannt ist, gib hier den Namen an. Dient zur Nachverfolgung von Ausgabe und Einlösung. | string | ||
userPhnno | Kontakt des Nutzers, der den Gutschein einlöst. | string | ||
userEml | E-Mail-Adresse des Nutzers, der den Gutschein einlöst. | string | ||
userEtc1 | Zusätzliche Nutzerinformationen für die interne Verwaltung. | string | ||
userEtc2 | Zusätzliche Nutzerinformationen für die interne Verwaltung. | 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"
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
result | Antwortwert (Coupon-Nummer) | string |
Coupon bearbeiten
Diese API ist ab dem Tarif Personal verfügbar.
Ändern Sie die Informationen im erstellten Coupon.
Wenn Sie einem Coupon eine Gruppe zuweisen, werden einige Einstellungen ignoriert und die Einstellungen der Coupongruppe übernommen.
Bei Gutscheinen, die bereits eingelöst wurden, können Sie nur die "Notizen" bearbeiten, nicht aber die anderen Informationen.
Put /api/coupon/v1/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
cpnNo | Die Gutscheinnummer, die Sie ändern möchten. Geben Sie nur die Gutscheinnummer ohne das Zeichen "-" ein. | string | ||
grpIdx | Gutscheingruppen dienen zur Verwaltung der Kategorisierung von Gutscheinen. Wenn sowohl Gruppen- als auch Gutschein-Einstellungen vorhanden sind, werden die Gutschein-Einstellungen ignoriert. Die Gruppen-ID (IDX) finden Sie auf der Gutschein-Gruppen-Seite im Dashboard. Standardwert: 0 | int | ||
tmplIdx | Gutscheinvorlagen werden verwendet, um Benutzern eine Beschreibung, Hinweise zur Nutzung und wichtige Hinweise für den Gutschein bereitzustellen. Die Template-ID (IDX) finden Sie auf der Gutscheinvorlagen-Seite im Dashboard. Standardwert: 0 | int | ||
nm | Der Name des Gutscheins wird auf der Gutscheinseite angezeigt. | string | ||
discTypeIdx | Legt den Rabatt-Typ für den Gutschein fest (Prozentsatz oder Betrag). 457: Prozentrabatt (%), 458: Betragsrabatt Prozentrabatt: Wird verwendet, um einen Rabatt in Prozent anzugeben. Betragsrabatt: Wird verwendet, um einen festen Betrag zu gewähren. | int | ||
disc | Wenn der Rabatt-Typ "Prozentsatz" (457) ist, geben Sie einen Wert zwischen 1% und 100% ein. Wenn der Rabatt-Typ "Betrag" (458) ist, geben Sie den Rabattbetrag ein. | double | ||
discCurrency | Sie können die Währung einstellen, wenn der Rabatt-Typ "Betrag" (458) ist. KRW: Südkoreanischer Won, USD: US-Dollar, JPY: Japanischer Yen, EUR: Euro. Standardwert: KRW | string | ||
strtYmd | Das Startdatum des Gutschein-Gültigkeitszeitraums festlegen. 10-stelliger Wert im Format jjjj-mm-tt. Beispiel: 2024-10-01 | date | ||
endYmd | Das Ablaufdatum des Gutschein-Gültigkeitszeitraums festlegen. 10-stelliger Wert im Format jjjj-mm-tt. Beispiel: 2024-12-31 | date | ||
onsiteYn | Wenn dieser Wert Y ist, wird auf der Gutscheinseite ein Button zum Einlösen angezeigt. Der Nutzer zeigt den Gutschein dem Personal, das den Gutschein dann einlöst. Dies ist besonders praktisch, wenn Sie ein Ladengeschäft betreiben. | Y or N | ||
onsitePwd | Wenn Sie ein Passwort festlegen, muss das Personal dieses beim Einlösen des Gutscheins eingeben. Benutzer können den Gutschein nicht selbstständig einlösen. | string | ||
memo | Wird für die interne Verwaltung von Gutscheinen verwendet. Notizen sind für Benutzer nicht sichtbar. | string | ||
url | Wenn Sie eine URL eingeben, erscheint auf der Gutscheinseite ein „Gutschein einlösen“-Button, der bei Klick auf die eingegebene URL weiterleitet. Wenn ein Gutscheinbild hochgeladen wurde, führt auch ein Klick auf das Bild zur URL. | string | ||
useLimit | Lege fest, wie oft ein Gutschein pro Person verwendet werden kann. Bei Verwendung der Vivoldi REST API zur Verarbeitung von Gutscheineinlösungen ist ein Wert zwischen 2 und 5 erforderlich. In diesem Fall muss die Nutzer-ID angegeben werden. Bei manueller Verwaltung im Dashboard können Sie "Unbegrenzt" oder "1 Mal" auswählen. Wenn Sie "Unbegrenzt" wählen, kann der Gutschein beliebig oft eingelöst werden. 0: Unbegrenzt, 1: 1 Mal, 2: 2 Mal, 3: 3 Mal, 4: 4 Mal, 5: 5 Mal | int | ||
color | Legt die Farbe des Gutscheintextes auf der Gutscheinseite fest. Muss als HEX-Wert mit bis zu 9 Zeichen (inklusive Transparenz) angegeben werden. Standardwert: #4F4F4FFF | string | ||
background | Legt die Hintergrundfarbe des Gutscheins auf der Gutscheinseite fest. Muss als HEX-Wert mit bis zu 9 Zeichen (inklusive Transparenz) angegeben werden. Standardwert: #FFFFFFFF | string | ||
userId | Dient zur Verwaltung, wer einen Gutschein erhalten und eingelöst hat. Wenn der Wert für die maximale Gutscheinverwendung pro Person zwischen 2 und 5 liegt, muss die Nutzer-ID angegeben werden. In der Regel geben Sie die Login-ID des registrierten Nutzers Ihrer Website an. | string | ||
userNm | Wenn Sie bereits wissen, wer den Gutschein erhalten soll, geben Sie den Namen des Nutzers ein, der den Gutschein verwenden wird. Dies ist für die Verwaltung der Ausgabe und Einlösung des Gutscheins erforderlich. | string | ||
userPhnno | Geben Sie die Kontaktdaten des Nutzers ein, der den Gutschein einlöst. | string | ||
userEml | Geben Sie die E-Mail-Adresse des Nutzers ein, der den Gutschein einlöst. | string | ||
userEtc1 | Geben Sie zusätzliche Informationen über den Nutzer für interne Verwaltungszwecke ein. | string | ||
userEtc2 | Geben Sie zusätzliche Informationen über den Nutzer für interne Verwaltungszwecke ein. | 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
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
Coupon löschen
Diese API ist ab dem Tarif Personal verfügbar.
Löschen Sie den erstellten Coupon.
Um mehrere Coupons auf einmal zu löschen, verwenden Sie das Dashboard.
Delete /api/coupon/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
cpnNo | Coupon number | Die zu löschende Gutscheinnummer. | 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":""
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
Kupon validieren
Wird verwendet, um zu prüfen und zu validieren, ob der Coupon gültig ist, bevor "Coupon einlösen" verarbeitet wird.
Überprüfen Sie die Gültigkeit des Gutscheins wie unten dargestellt.
- Prüfen Sie das Ablaufdatum des Gutscheins. (Startdatum und Ablaufdatum)
- Überprüfen Sie die maximale Anzahl von Gutscheinen pro Person.
- Überprüfen Sie die Einlösung des Gutscheins.
Get /api/coupon/v1/validate HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
cpnNo | Coupon number | Die zu validierende Gutscheinnummer. Wenn die Validierung fehlschlägt, überprüfen Sie die Nachricht in der Antwort. | 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
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
Kupon verwenden
Diese API ist ab dem Tarif Personal verfügbar.
Während Sie die Verarbeitung von "Coupon einlösen" manuell in der Couponliste in Ihrem Dashboard verwalten können, können Sie diese API automatisieren, indem Sie sie aufrufen, wenn ein Nutzer einen Coupon auf Ihrer Website einlöst.
Put /api/coupon/v1/use HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Felder | Feldbeschreibungen | Beschreibung | Erforderlich | Typ |
---|---|---|---|---|
cpnNo | Coupon number | Die „eingelöste“ Gutscheinnummer, die verarbeitet werden soll. Geben Sie nur die Gutscheinnummer ohne das Zeichen „-“ ein. | string | |
onsitePwd | On-site coupon usage password | Wenn für die Nutzung vor Ort ein Passwort festgelegt wurde, geben Sie das festgelegte Passwort ein. Bei falschem Passwort kann der Gutschein nicht eingelöst werden. | string | |
userId | User ID | Dient zur Verwaltung, wer Gutscheine ausgestellt und eingelöst hat. Wenn der Wert für die maximale Gutscheineinlösung pro Person zwischen 2 und 5 liegt, muss die Benutzer-ID angegeben werden. Geben Sie in der Regel die Login-ID des registrierten Benutzers Ihrer Website ein. | string | |
memo | Notes | Sie können Notizen zur Verwaltung von Gutscheineinlösungen eingeben. Geben Sie die IP-Adresse des Nutzers, die Seite und den Dienst ein, auf denen der Gutschein eingelöst wurde, sowie weitere Informationen. Wenn die maximale Anzahl der Gutscheineinlösungen pro Person unbegrenzt ist, wissen Sie nicht, wer den Gutschein eingelöst hat – verwalten Sie dann nach Benutzername oder Notiz. | 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
}
Felder | Beschreibung | Typ |
---|---|---|
code | Antwortcode (0:Erfolg) | int |
message | Die Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist. | string |
Push-Nachrichten senden
Diese API ist unabhängig von Vivoldis URL-Verkürzungsdienst und richtet sich an jeden, der eine Website betreibt.
Um Push-Nachrichten an Nutzer zu senden, die Ihre Website besuchen, muss der Nutzer der "Benachrichtigungserlaubnis" in seinem Webbrowser zustimmen.
Wenn er die Benachrichtigungserlaubnis ablehnt, können Sie keine Push-Nachrichten versenden.
Nachdem Sie das von Vivoldi bereitgestellte JavaScript SDK auf Ihrer Website installiert haben, zeigt der Webbrowser ein Pop-up-Fenster für die "Benachrichtigungserlaubnis" an, wenn ein Nutzer Ihre Website besucht.
Wenn der Nutzer der Genehmigung zustimmt, werden die Benachrichtigungsdaten auf der Seite "Push-Nachrichten -> Website-Push senden" des Dashboards aufgeführt.
Wenn zum Beispiel 100 Benutzer den Benachrichtigungsberechtigungen auf Ihrer Website zugestimmt haben, werden 100 Daten in der Liste angezeigt.
Wenn Sie eine Push-Nachricht über das Dashboard senden, wird die Nachricht an alle in der Liste angezeigten Benutzer gesendet.
Jeder kann das von Vivoldi bereitgestellte JavaScript-SDK installieren, um Nutzerdaten zu sammeln.
Allerdings müssen Sie Geld auf Ihrem Konto haben, um Push-Nachrichten zu versenden.
Die Kosten für den Versand von Push-Nachrichten betragen 10 KRW pro Nachricht, oder Sie können ein monatliches Abonnement abschließen, um eine unbegrenzte Anzahl von Nachrichten zu versenden.
Die Installation des JavaScript-SDK ist so einfach, wie das Hinzufügen zwischen <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>
API-Schlüssel können auf der Seite "Developer API" in Ihrem Dashboard erstellt werden, und publicKey finden Sie in der Liste, sobald Sie Ihre Domain auf der Seite "Push Messages -> Domain Management" registriert haben.
Wenn das Skript sofort beim Laden der Webseite ausgeführt wird, wie im obigen Beispiel, ist die Wahrscheinlichkeit groß, dass der Webbrowser es automatisch blockiert, ohne das Popup-Fenster mit der Benachrichtigungserlaubnis anzuzeigen.
(Mit Ausnahme des Google Chrome-Browsers)
Daher empfehlen wir, eine Schaltfläche zu Ihrer Seite hinzuzufügen und das Skript in das onclick-Ereignis der Schaltfläche einzufügen.
Wenn alles fertig ist, müssen Sie als Letztes eine neue Datei sw.min.js erstellen und sie in das Stammverzeichnis Ihrer Website hochladen.
Zum Beispiel: https://example.com/sw.min.js
Wenn Sie auf den oben genannten Pfad zugreifen, sollte das Skript im Webbrowser angezeigt werden, damit die Benachrichtigung richtig funktioniert.
Kopieren Sie den nachstehenden Code und fügen Sie ihn in Ihre neu erstellte sw.min.js-Datei ein.
'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)]));}});
Wenn Sie nun auf Ihre Website zugreifen, sollten Sie die Benachrichtigungserlaubnis sehen.
Wenn Sie die Benachrichtigungserlaubnis erteilt haben, prüfen Sie, ob Sie auf der Seite "Website-Push-Versand" Ihres Vivoldi-Dashboards Benachrichtigungsdaten sehen.