Comment appeler l’API
Host: https://vivoldi.com/api HTTP/1.1
Authorization: APIKey {Your API Key}
Content-type: application/json
{
"code": 0,
"message": "",
"result": Object
}
message - Le message de réponse, un message d’erreur est renvoyé si le code de réponse est différent de zéro.
result - La valeur de la réponse, renvoyée sous la forme d’un caractère ou d’un objet JSON en fonction du type d’API.
Créer un lien
Si vous souhaitez créer un seul lien court, vous pouvez facilement le générer à l’aide de cette API.
Pour créer plusieurs liens à la fois, essayez d’utiliser l’API de création de liens en bloc.
Vous pouvez également générer rapidement des liens à l’aide du menu "Bulk Link Generator" (Générateur de liens en masse) du tableau de bord.
Pour les utilisateurs du plan gratuit, les appels à l’API sont limités à 10 requêtes par minute.
Si vous avez besoin d’un volume plus important, envisagez de passer à un plan payant pour bénéficier d’un accès étendu.
Chaque lien court inclut automatiquement un code QR, accessible via le format d’URL `vvd.bz/[linkId]/qr`.
Pour ajuster la taille du code QR, il suffit d’ajouter le paramètre `size` à l’URL.
Par exemple, utilisez `vvd.bz/[linkId]/qr?size=200` pour générer un code QR d’une taille de 200 pixels.
Post /api/link/v2/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
url | URL longue | L’URL longue vers laquelle l’utilisateur sera redirigé lorsqu’il clique sur le lien court. Taille maximale: 3000 octets. | string | |
domain | Domaine | Si ce champ est vide, le domaine par défaut sera vvd.bz. Le champ doit inclure “https://”, et si l’option “brandLinkId” est “Y”, utiliser le domaine “https://vvd.im”. Si votre domaine est relié à Vivoldi, vous pouvez le définir ici. Exemple: https://vvd.bz | string | |
redirectType | Type de redirection | Définit comment la redirection se fait de l’URL courte vers l’URL longue. Valeurs possibles: 200, 301 ou 302 (HTTP). Valeur par défaut: 302 Pour plus de détails, voir la page “Glossaire”. | int | |
grpIdx | ID de groupe | Renseigner un ID de groupe permet d’associer le lien à ce groupe. Pour l’obtenir, utilisez l’API “Liste des groupes”. | int | |
brandLinkId | ID de lien de marque | Si une valeur est renseignée, le lien sera créé avec cet ID. (Si configuré, le domaine sera vvd.im et non vvd.bz.) Si vide, l’ID de lien est généré automatiquement. | string | |
ttl | Titre du lien | Si vide, le titre de la page web de l’URL longue sera utilisé. Si vide, Vivoldi analysera le HTML de l’URL longue, ce qui peut ralentir la réponse. Renseignez le titre si possible. | string | |
description | Méta description | Vous pouvez définir la méta description si “redirectType” vaut “200”. Ce champ est ignoré si “redirectType” est “301”, “302”, etc. | string | |
metaImg | Méta-image | Vous ne pouvez définir la balise méta-image que lorsque la valeur de redirectType est « 200 ». La valeur méta-image doit être au format URL commençant par « https:// ». Si redirectType est « 301 » ou « 302 », la valeur est ignorée. | string | |
memo | Notes | Vous pouvez ajouter des informations supplémentaires pour la gestion, non visibles par les utilisateurs. | string | |
notfSubscYn | Lien Push | Si la valeur est Y, une fenêtre de notification push s’affichera avant la redirection, et vous pourrez envoyer des notifications à tous les utilisateurs qui l’autorisent. Si l’utilisateur refuse ou ferme la fenêtre, il est redirigé vers l’URL longue. Par défaut (si vide), la valeur est N. Pour plus d’informations, consultez la page dédiée Web Push. | Y ou N | |
pushNotifyYn | Notifications push | Si Y, vous recevrez une notification push sur mobile (avec l’app Vivoldi) à chaque fois que le nombre de clics configuré dans “Préférences” est atteint. Disponible à partir du forfait Personnel. | Y ou N | |
mailNotifyYn | Notifications e-mail | Si Y, vous recevrez un e-mail chaque fois que le seuil de clics défini dans les préférences du lien est atteint. Disponible à partir du forfait Personnel. | Y ou N | |
delYmd | Date de suppression du lien | Après la date renseignée, le lien est automatiquement supprimé par le système. Cycle de suppression: chaque heure Exemple: 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"
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
result | Valeur de la réponse (lien abrégé) | string |
Création de liens en masse
Créer plusieurs liens raccourcis en une seule fois.
Si vous souhaitez créer un grand nombre de liens en une seule fois, utilisez le menu "Créer des liens en masse" dans le tableau de bord.
Vous ne pouvez créer qu’un nombre limité de liens à la fois, et les limites par plan sont les suivantes
Si vous souhaitez générer 3 000 liens, vous devrez appeler cette API plusieurs fois.
Plan personnel : Jusqu’à 200
Plan Premium : jusqu’à 500
Plan d’affaires : jusqu’à 1 000
Cette API est disponible à partir du plan personnel.
Post /api/link/v1/createBulk HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Domaines | Type | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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"}
]
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
result | Valeur de la réponse (lien abrégé) | string |
Modifier un lien
Modifiez le lien court que vous avez créé.
Vous ne pouvez modifier le type de lien que s’il s’agit d’une URL ; les autres types ne sont pas modifiés, même si l’appel à l’API aboutit.
Put /api/link/v2/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
linkId | ID de lien | ID du lien court généré. Exemple : Si l’adresse du lien court est "https://vvd.bz/fML", l’ID de lien est fML. | string | |
domain | Domaine | Le domaine de l’adresse du lien court. Exemple : Si l’adresse du lien court est "https://vvd.bz/fML", le domaine est https://vvd.bz. Important : Vous devez saisir https:// ou http://. Si vous indiquez un domaine différent de celui du lien généré, une erreur se produira. | string | |
redirectType | Type de redirection | Définit la méthode de redirection du lien court vers l’URL longue. Valeurs possibles : 200, 301 ou 302 (HTTP). Par défaut : 302. Pour plus d’informations, voir la page “Glossaire”. | int | |
grpIdx | ID de groupe | Permet de changer le groupe du lien généré. Pour obtenir l’ID de groupe, vous devez utiliser l’API "Liste des groupes". | int | |
url | URL longue | Permet de modifier l’URL longue. La modification de l’URL longue est disponible à partir de l’offre Premium. | string | |
ttl | Titre du lien | Si la valeur est vide, le titre du lien ne sera pas modifié. | string | |
description | Méta description | Vous pouvez définir la balise meta description de la page si “redirectType” vaut “200”. Ce champ est ignoré si “redirectType” est “301”, “302”, etc. | string | |
metaImg | Méta-image | Vous ne pouvez définir la balise méta-image que lorsque la valeur de redirectType est « 200 ». La valeur méta-image doit être au format URL commençant par « https:// ». Si redirectType est « 301 » ou « 302 », la valeur est ignorée. | string | |
memo | Notes | Vous pouvez ajouter des informations administratives supplémentaires, qui ne seront pas visibles par les utilisateurs. Si le champ est vide, la note ne sera pas modifiée. | string | |
notfSubscYn | Lien Push | Si la valeur est Y, cliquer sur le lien généré affichera une notification push avant de diriger vers l’URL longue. Si l’utilisateur a accepté les notifications push, vous pouvez envoyer un message push à tous les utilisateurs autorisés. Si l’utilisateur refuse ou ferme la notification, il sera immédiatement redirigé vers l’URL longue. Si vous ne renseignez pas de valeur, la valeur par défaut sera N. Pour en savoir plus sur les liens d’abonnement push, cliquez ici. | Y ou N | |
pushNotifyYn | Notifications push | Si la valeur est Y, vous recevrez des notifications push sur vos appareils mobiles avec l’application Vivoldi installée chaque fois qu’un lien atteint le nombre de clics défini dans les paramètres du lien dans "Paramètres -> Préférences". Cette fonctionnalité est disponible à partir de l’offre Personnel. | Y ou N | |
mailNotifyYn | Notifications e-mail | Si la valeur est Y, vous recevrez un e-mail à votre adresse Vivoldi à chaque fois que le nombre de clics défini dans les paramètres du lien dans "Paramètres -> Préférences" est atteint. Cette fonctionnalité est disponible à partir de l’offre Personnel. | Y ou N | |
delYmd | Date de suppression du lien | Après la date indiquée, le lien est automatiquement supprimé par le système. Cycle de suppression : toutes les heures. Exemple : 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":""
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
Supprimer un lien
Supprimez le lien court que vous avez créé.
Delete /api/link/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
linkId | ID de lien | ID du lien court généré. Exemple : Si l’adresse du lien court est "https://vvd.bz/fML", l’ID de lien est fML. L’encodage URL (URLEncode) est requis si vous définissez un LinkID personnalisé (ID défini par vous-même) et qu’il contient des caractères spéciaux. | string | |
domain | Domaine | Le domaine de l’adresse du lien court. Exemple : Si l’adresse du lien court est "https://vvd.bz/fML", le domaine est https://vvd.bz. Important : La valeur doit commencer par https:// ou http://. Si vous définissez un domaine différent de celui du lien généré, une erreur se produira. Pour un LinkID personnalisé (ID que vous définissez vous-même), le domaine est 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":""
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
Liste de liens
Affiche une liste des liens créés.
Seuls les liens URL peuvent être récupérés ; les autres types de liens ne sont pas récupérés.
Cette API est disponible sur le plan Premium.
Get /api/link/v1/list HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
linkId | ID de lien | Rechercher dans la liste par ID de lien. URLEncode est requis si l’ID de lien contient des caractères spéciaux. | string | |
domain | Domaine | Rechercher dans la liste par domaine du lien. Le domaine doit commencer par http:// ou https://. | string | |
createTypeIdx | Type de création | 0 : Tous les liens, 270 : Liens créés dans le tableau de bord Vivoldi, 272 : Liens créés via l’API, 274 : Génération de liens en masse | int | |
grpIdx | ID de groupe | Rechercher dans la liste par ID de groupe. Si aucune valeur n’est renseignée, la valeur par défaut est 0. | int | |
url | URL longue | Rechercher dans la liste par URL longue. Recherche partielle sur l’adresse possible. | string | |
ttl | Titre du lien | Rechercher dans la liste par titre du lien. Recherche partielle possible. | string | |
brandLinkYn | Liens de marque | Si l’ID de lien n’est pas généré automatiquement et est défini manuellement, il s’agit d’un lien de marque. Y : Activé (lien de marque), N : Désactivé (lien généré automatiquement) | Y ou N | |
notfSubscYn | Lien Push | Y : Activé, N : Désactivé | Y ou N | |
pushNotifyYn | Notifications push de clics | Y : Activé, N : Désactivé | Y ou N | |
mailNotifyYn | Notifications e-mail de clics | Y : Activé, N : Désactivé | Y ou N | |
regStartYmdt | Date de début de création | La date de début à laquelle le lien a été créé, qui doit être comprise entre la date de début et la date de fin. Exemple : 2022-11-08 00:00:00 | Date | |
regEndYmdt | Date de fin de création | La date de fin à laquelle le lien a été créé, qui doit être comprise entre la date de début et la date de fin. Exemple : 2022-11-08 23:59:59 La date de fin doit être fixée dans un délai d’un mois à partir de la date de début. | Date | |
pages | Pages | La valeur pages est utilisée pour la pagination et la valeur par défaut est 1. Par défaut, 30 lignes sont affichées par page, et si la valeur de pages est 2, 30 lignes à partir de la 31e ligne seront affichées. | int | |
delYmd | Date de suppression du lien | Après la date définie, le lien est automatiquement supprimé par le système. Si une valeur est définie, seules les données antérieures à cette date sont récupérées. Exemple : 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",
"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",
"delYmd":"2025-12-31",
"regYmdt":"2022-11-07 17:10:22",
"modYmdt":"2022-11-07 17:10:22"
}
]
}
}
Domaines | Description | Type | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
result | extra (추가 정보)
list (링크 목록) - Array
| array |
Statistiques de clics par heure de la journée
Visualisez les clics et les cliqueurs au fil du temps pour un seul lien.
Cette API est disponible à partir du plan Business.
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 |
Statistiques de clics par date
Vous pouvez afficher le nombre de clics sur un lien unique par date et le nombre de personnes qui ont cliqué sur ce lien.
Lors d’une recherche, l’intervalle des dates de début et de fin ne peut être supérieur à un mois.
Cette API est disponible à partir du plan Business.
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 |
Liste des groupes
Permet d’obtenir une liste des groupes de liens créés.
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",
"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",
"regYmdt":"2019-10-21 15:30:20",
"modYmdt":"2019-10-22 11:20:50"
}
]
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||
result | 그룹 목록:
| array |
Valider les liens avec les dates d’expiration, les mots de passe et le nombre maximum de clics autorisés
Cette API est disponible sur le plan Premium.
Lorsque vous restreignez l’accès à un lien, vous définissez une date d’expiration, un mot de passe et un nombre maximum de clics autorisés.
Si les utilisateurs cliquent sur un lien généré par Vivoldi, tout va bien, mais s’ils vont directement à une longue URL dans leur navigateur, il n’y a aucun moyen de la valider.
Vivoldi fournit un SDK JavaScript séparé pour résoudre ce problème.
Lorsque vous ajoutez le SDK à une page contenant un lien long, le SDK récupère les informations du lien et vérifie la date d’expiration, le mot de passe et le nombre maximal de clics autorisés.
Redirigez vers le lien court de Vivoldi ou bloquez l’accès.
Ajoutez le script fourni par Vivoldi à votre page d’événement ou de promotion entre les
Ajoutez le script de Vivoldi à votre page comme indiqué ci-dessous :
<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 |
Créer un coupon
Cette API est disponible à partir du plan personnel.
Créer un coupon de réduction. Si vous souhaitez créer plusieurs coupons à la fois, créez-les dans le tableau de bord.
Vous ne pouvez pas télécharger les images des coupons à l’aide de l’API.
Dans ce cas, vous pouvez télécharger des images de coupon lorsque vous créez un groupe de coupons dans le tableau de bord et que vous spécifiez le groupe lorsque vous créez le coupon.
Si vous spécifiez un groupe de coupons lorsque vous créez un coupon, certains paramètres sont ignorés et les paramètres du groupe de coupons sont appliqués.
Post /api/coupon/v1/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
cpnNo | Un numéro de coupon de 8 à 16 chiffres composé de lettres majuscules et de chiffres. Les caractères spéciaux ne sont pas autorisés. Si ce champ est vide, le numéro du coupon est généré automatiquement par le système. | string | ||
grpIdx | Les groupes de coupons servent à organiser les coupons par catégorie. En cas de conflit, le paramètre du coupon prévaut. Voir l’IDX de groupe sur la page des groupes de coupons du tableau de bord. Valeur par défaut : 0 | int | ||
tmplIdx | Les modèles de coupons précisent l’usage, l’utilisation et les conditions du coupon. L’IDX du modèle se trouve sur la page des modèles de coupons dans le tableau de bord. Valeur par défaut : 0 | int | ||
nm | Le nom du coupon apparaît sur la page du coupon. | string | ||
discTypeIdx | Définir le type de réduction (taux ou montant) du coupon. 457 : Réduction en pourcentage (%), 458 : Réduction en montant. Réduction en pourcentage : applique un pourcentage. Réduction en montant : applique un montant fixe. | int | ||
disc | Saisir une valeur entre 1 % et 100 % pour un taux (457). Entrer le montant pour une réduction en valeur (458). | double | ||
discCurrency | Possibilité de définir la devise pour les réductions en montant (458). KRW : won coréen, USD : dollar américain, JPY : yen japonais, EUR : euro. Valeur par défaut : KRW | string | ||
strtYmd | Définir la date de début de validité du coupon. Valeur à 10 chiffres, format aaaa-mm-jj. Exemple : 2024-10-01 | date | ||
endYmd | Définir la date de fin de validité du coupon. Valeur à 10 chiffres, format aaaa-mm-jj. Exemple : 2024-12-31 | date | ||
onsiteYn | Si la valeur est Y, la page du coupon affiche un bouton pour valider le coupon en magasin. L’utilisateur présente le coupon à un employé, qui valide le coupon. Utile pour les boutiques physiques. Valeur par défaut : N | Y or N | ||
onsitePwd | En cas de mot de passe, le personnel du magasin doit le saisir pour valider le coupon. L’utilisateur ne peut pas valider le coupon lui-même. | string | ||
memo | Utilisé à des fins internes pour gérer les coupons. Non visible pour les utilisateurs. | string | ||
url | Si une URL est renseignée, la page du coupon affiche un bouton « Utiliser le coupon » qui dirige vers cette URL. Si une image de coupon est ajoutée, cliquer sur l’image ouvre également l’URL. | string | ||
useLimit | Définir le nombre maximum d’utilisations par personne. Si la limite par personne est comprise entre 2 et 5 (API REST Vivoldi), l’ID utilisateur est obligatoire. Depuis le tableau de bord, vous pouvez choisir « Illimité » ou « 1 fois ». Si vous choisissez « Illimité », le coupon peut être utilisé un nombre illimité de fois. 0 : Illimité, 1 : 1 fois, 2 : 2 fois, 3 : 3 fois, 4 : 4 fois, 5 : 5 fois | int | ||
color | Définir la couleur du texte du coupon sur la page. À saisir en format HEX, jusqu’à 9 caractères, incluant la transparence. Valeur par défaut : #4F4F4FFF | string | ||
background | Définir la couleur d’arrière-plan du coupon sur la page. À saisir en format HEX, jusqu’à 9 caractères, incluant la transparence. Valeur par défaut : #FFFFFFFF | string | ||
userId | Permet de savoir qui a émis ou utilisé le coupon. Si la limite d’utilisations par personne est entre 2 et 5, l’ID utilisateur est obligatoire. En général, il s’agit de l’identifiant de connexion de l’utilisateur. | string | ||
userNm | Si vous connaissez déjà l’utilisateur, renseignez son nom ici. Utile pour gérer l’émission et l’utilisation du coupon. | string | ||
userPhnno | Saisir le contact de l’utilisateur qui utilisera le coupon. | string | ||
userEml | Saisir l’adresse e-mail de l’utilisateur qui utilisera le coupon. | string | ||
userEtc1 | Saisir des informations supplémentaires sur l’utilisateur à des fins administratives. | string | ||
userEtc2 | Saisir des informations supplémentaires sur l’utilisateur à des fins administratives. | 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"
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
result | Valeur de la réponse (numéro de coupon) | string |
Editer le coupon
Cette API est disponible à partir du plan personnel.
Modifier les informations du coupon créé.
Lorsque vous affectez un groupe à un coupon, certains paramètres sont ignorés et les paramètres du groupe de coupons sont appliqués.
Pour les coupons qui ont déjà été échangés, vous ne pouvez modifier que les "Notes", mais pas les autres informations.
Put /api/coupon/v1/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
cpnNo | Le numéro de coupon que vous souhaitez modifier. Saisissez uniquement le numéro du coupon, sans le caractère « - ». | string | ||
grpIdx | Les groupes de coupons servent à organiser la catégorisation des coupons. Si les réglages du groupe et du coupon coexistent, les réglages du coupon sont ignorés. Vous pouvez trouver l’IDX du groupe sur la page Groupes de coupons de votre tableau de bord. Valeur par défaut : 0 | int | ||
tmplIdx | Les modèles de coupon permettent de fournir une description, des instructions d’utilisation et des avertissements à l’utilisateur. Vous pouvez trouver l’IDX du modèle sur la page Modèles de coupons de votre tableau de bord. Valeur par défaut : 0 | int | ||
nm | Le nom du coupon est affiché sur la page du coupon. | string | ||
discTypeIdx | Définit le type de réduction pour le coupon (taux ou montant). 457 : Réduction en pourcentage (%), 458 : Réduction en montant Réduction en pourcentage : utilisée pour offrir une remise en pourcentage. Réduction en montant : utilisée pour offrir une remise à montant fixe. | int | ||
disc | Si le type de réduction est « taux » (457), indiquez une valeur comprise entre 1 % et 100 %. Si le type de réduction est « montant » (458), indiquez le montant de la réduction. | double | ||
discCurrency | Vous pouvez définir l’unité monétaire lorsque le type de réduction est « montant » (458). KRW : won coréen, USD : dollar américain, JPY : yen japonais, EUR : euro. Valeur par défaut : KRW | string | ||
strtYmd | Définissez la date de début de validité du coupon. Valeur à 10 chiffres au format aaaa-mm-jj. Exemple : 2024-10-01 | date | ||
endYmd | Définissez la date d’expiration du coupon. Valeur à 10 chiffres au format aaaa-mm-jj. Exemple : 2024-12-31 | date | ||
onsiteYn | Si cette valeur est Y, un bouton s’affiche sur la page du coupon pour valider l’utilisation du coupon. L’utilisateur présente le coupon à un membre du personnel qui effectue la validation. Ceci est utile si vous possédez un magasin physique. | Y or N | ||
onsitePwd | Si vous définissez un mot de passe, le personnel du magasin doit le saisir pour valider l’utilisation du coupon. Les utilisateurs ne peuvent pas valider eux-mêmes le coupon. | string | ||
memo | Utilisé pour la gestion interne des coupons. Les notes ne sont pas visibles des utilisateurs. | string | ||
url | Si vous saisissez une URL, un bouton « Utiliser le coupon » s’affichera sur la page du coupon et redirigera vers l’URL saisie lors du clic. Si une image de coupon est téléchargée, cliquer sur l’image redirigera également vers l’URL. | string | ||
useLimit | Définissez le nombre maximum d’utilisations d’un coupon par personne. Lors de l’utilisation de l’API REST de Vivoldi pour traiter l’utilisation des coupons, une valeur comprise entre 2 et 5 est requise. Dans ce cas, l’identifiant utilisateur doit être renseigné. Lors de la gestion manuelle sur le tableau de bord, vous pouvez choisir « Illimité » ou « 1 fois ». Si vous choisissez « Illimité », n’importe qui peut utiliser le coupon sans limitation. 0 : Illimité, 1 : 1 fois, 2 : 2 fois, 3 : 3 fois, 4 : 4 fois, 5 : 5 fois | int | ||
color | Définit la couleur du texte du coupon sur la page du coupon. Doit être saisie sous forme de valeur HEX jusqu’à 9 caractères, y compris la transparence. Valeur par défaut : #4F4F4FFF | string | ||
background | Définit la couleur d’arrière-plan du coupon sur la page du coupon. Doit être saisie sous forme de valeur HEX jusqu’à 9 caractères, y compris la transparence. Valeur par défaut : #FFFFFFFF | string | ||
userId | Permet de gérer qui a reçu et utilisé le coupon. Si la valeur pour l’utilisation maximale par personne est comprise entre 2 et 5, l’ID utilisateur est requis. En général, saisissez l’identifiant de connexion du membre inscrit sur votre site. | string | ||
userNm | Si vous savez déjà qui recevra le coupon, saisissez le nom de l’utilisateur qui l’utilisera. Ceci est nécessaire pour la gestion de l’émission et de l’utilisation des coupons. | string | ||
userPhnno | Renseignez les coordonnées de l’utilisateur qui utilisera le coupon. | string | ||
userEml | Renseignez l’adresse e-mail de l’utilisateur qui utilisera le coupon. | string | ||
userEtc1 | Indiquez des informations supplémentaires sur l’utilisateur à des fins administratives internes. | string | ||
userEtc2 | Indiquez des informations supplémentaires sur l’utilisateur à des fins administratives internes. | 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
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
Supprimer le coupon
Cette API est disponible à partir du plan personnel.
Supprimer le coupon créé.
Pour supprimer plusieurs coupons à la fois, utilisez le tableau de bord.
Delete /api/coupon/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
cpnNo | Coupon number | Le numéro du coupon à supprimer. | 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":""
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
Valider le coupon
Utilisée pour vérifier et valider si le coupon est valide avant de traiter "Redeem coupon".
Vérifier la validation du coupon comme indiqué ci-dessous.
- Valider la date d’expiration du coupon. (date de début et date d’expiration)
- Valider le nombre maximum de coupons par personne.
- Validez le remboursement du coupon.
Get /api/coupon/v1/validate HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
cpnNo | Coupon number | Le numéro du coupon à valider. Si la validation échoue, vérifiez le message dans la réponse. | 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
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
Utiliser le coupon
Cette API est disponible à partir du plan personnel.
Bien que vous puissiez gérer manuellement le traitement "racheter un coupon" dans la liste des coupons de votre tableau de bord, cette API vous permet de l’automatiser en l’appelant lorsqu’un utilisateur rachète un coupon sur votre site web.
Put /api/coupon/v1/use HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Domaines | Description des champs | Description | Exigée | Type |
---|---|---|---|---|
cpnNo | Coupon number | Numéro de coupon « utilisé » à traiter. Saisissez uniquement le numéro du coupon, sans le signe « - ». | string | |
onsitePwd | On-site coupon usage password | Si un mot de passe a été défini pour l’utilisation en magasin, saisissez ce mot de passe. Si le mot de passe est incorrect, vous ne pourrez pas utiliser le coupon. | string | |
userId | User ID | Permet de gérer qui a émis et qui a utilisé les coupons. Si la valeur du nombre maximum d’utilisations par personne est comprise entre 2 et 5, l’ID utilisateur doit être renseigné. En général, saisissez l’identifiant de connexion du membre inscrit sur votre site web. | string | |
memo | Notes | Vous pouvez saisir des notes pour gérer l’utilisation des coupons. Indiquez l’adresse IP de l’utilisateur, la page et le service où le coupon a été utilisé, ainsi que toute autre information. Lorsque le nombre maximal d’utilisations par personne est illimité, vous ne savez pas qui a utilisé le coupon, donc vous pouvez gérer par nom d’utilisateur ou note. | 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
}
Domaines | Description | Type |
---|---|---|
code | Code de réponse (0:Succès) | int |
message | Le message de réponse, ou un message connexe si le code de réponse est différent de zéro. | string |
Envoyer des messages push
Cette API est indépendante du service de raccourcissement d’URL de Vivoldi et est destinée à toute personne qui gère un site web.
Afin d’envoyer des messages push aux utilisateurs qui visitent votre site web, l’utilisateur doit accepter la "permission de notification" dans son navigateur web.
S’il refuse l’autorisation de notification, vous ne pourrez pas envoyer de messages push.
Après avoir installé le SDK JavaScript fourni par Vivoldi sur votre site web, le navigateur web affichera une fenêtre contextuelle pour les "autorisations de notification" lorsqu’un utilisateur visitera votre site web.
Si l’utilisateur accepte la permission, les données de notification seront répertoriées sur la page "Push Messages -> Send website push" du tableau de bord.
Par exemple, si 100 utilisateurs ont accepté les autorisations de notification sur votre site web, vous verrez 100 données dans la liste.
Lorsque vous envoyez un message push à partir du tableau de bord, le message est envoyé à tous les utilisateurs figurant dans la liste.
Tout le monde peut installer le SDK JavaScript fourni par Vivoldi pour collecter des données sur les utilisateurs.
Cependant, vous devez avoir de l’argent sur votre compte pour envoyer des messages push.
Le coût de l’envoi de messages push est de 10 KRW par message, ou vous pouvez souscrire à un abonnement mensuel pour envoyer un nombre illimité de messages.
L’installation du SDK JavaScript est aussi simple que de l’ajouter entre les <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>
Les clés API peuvent être créées sur la page "Developer API" dans votre tableau de bord, et publicKey peut être trouvé dans la liste une fois que vous avez enregistré votre domaine sur la page "Push Messages -> Domain Management".
Si le script est exécuté dès le chargement de la page web, comme dans l’exemple ci-dessus, il est fort probable que le navigateur web le bloque automatiquement sans afficher la fenêtre contextuelle de notification d’autorisation.
(Sauf pour le navigateur Google Chrome)
Par conséquent, nous vous recommandons d’ajouter un bouton à votre page et d’insérer le script dans l’événement onclick du bouton.
Une fois que tout est prêt, la dernière chose à faire est de créer un nouveau fichier sw.min.js et de le télécharger à la racine de votre site web.
Par exemple : https://example.com/sw.min.js
Lorsque vous accédez au chemin ci-dessus, le script doit s’afficher dans le navigateur web pour que la notification fonctionne correctement.
Copiez et collez le code ci-dessous dans votre fichier sw.min.js nouvellement créé.
'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)]));}});
Maintenant, lorsque vous accédez à votre site web, vous devriez voir l’autorisation de notification.
Lorsque vous avez autorisé la permission de notification, vérifiez si vous voyez des données de notification sur la page "Website Push Sending" de votre tableau de bord Vivoldi.