API promemoria
API Crea promemoria
Crea un messaggio WhatsApp ricorrente che viene inviato automaticamente secondo una pianificazione. Usala per promemoria di pagamento, check-in settimanali, follow-up quotidiani e altri messaggi che si ripetono.
https://wbiztool.com/api/v1/reminder/create/Corpo: JSON o campi di un modulo
Descrivi la pianificazione con un'espressione cron e un fuso orario. Ogni volta che la pianificazione corrisponde, Wbiztool mette in coda un messaggio per il numero di telefono o il gruppo, proprio come un messaggio inviato con Invia messaggio. I promemoria che crei qui compaiono anche nella pagina Promemoria della tua dashboard, dove puoi metterli in pausa o modificarli.
Esempio rapido#
curl -X POST https://wbiztool.com/api/v1/reminder/create/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Monthly rent reminder",
"phone": "919876543210",
"message": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"cron_expression": "0 10 1 * *",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/create/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Monthly rent reminder",
"phone": "919876543210",
"message": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"cron_expression": "0 10 1 * *",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
try:
result = response.json() # read the body even when the HTTP code is 400
except ValueError:
raise SystemExit(f"HTTP {response.status_code}: not JSON. Check that your api_key exists.")
if result["status"] == 1:
print("Reminder created with reminder_id", result["reminder_id"])
else:
print("Failed:", result["message"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/reminder/create/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
reminder_name: "Monthly rent reminder",
phone: "919876543210",
message: "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
cron_expression: "0 10 1 * *",
timezone: "Asia/Kolkata",
}),
});
// Read the body even when the HTTP code is 400. A non-JSON reply means the api_key wasn't found.
const text = await response.text();
let result;
try {
result = JSON.parse(text);
} catch {
throw new Error(`HTTP ${response.status}: not JSON. Check that your api_key exists.`);
}
if (result.status === 1) {
console.log("Reminder created with reminder_id", result.reminder_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'reminder_name' => 'Monthly rent reminder',
'phone' => '919876543210',
'message' => 'Hi Aman, a reminder that your rent is due on {current_date_formatted}.',
'cron_expression' => '0 10 1 * *',
'timezone' => 'Asia/Kolkata',
];
$ch = curl_init('https://wbiztool.com/api/v1/reminder/create/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($result === null) {
echo "HTTP $httpCode: not JSON. Check that your api_key exists.";
} elseif ($result['status'] === 1) {
echo 'Reminder created with reminder_id ' . $result['reminder_id'];
} else {
echo 'Failed: ' . $result['message'];
}Questo promemoria viene inviato alle 10:00 ora indiana il giorno 1 di ogni mese. Sostituisci 12345, YOUR_API_KEY e 678 con i tuoi valori. Consulta Autenticazione per sapere dove trovarli.
Parametri della richiesta#
Invia i parametri come corpo JSON o come campi di un modulo. In JSON, invia ogni valore testuale (api_key, reminder_name, phone, message, cron_expression, timezone, img_url, file_name) come stringa.
Autenticazione
client_idintegerobbligatorioIl tuo ID Client API, da Impostazioni → Chiavi API.
api_keystringobbligatorioLa tua chiave API, dalla stessa pagina.
Mittente
whatsapp_clientintegerfacoltativoID del numero WhatsApp da cui inviare, dalle Impostazioni WhatsApp. Se lo ometti, o se l'ID non è nel tuo spazio di lavoro, ogni promemoria viene inviato dal primo numero collegato del tuo spazio di lavoro al momento dell'esecuzione.
Promemoria
reminder_namestringobbligatorioUn nome per il promemoria, mostrato nella pagina Promemoria e disponibile nel messaggio come
{reminder_name}.phonestringobbligatorioIl numero WhatsApp del destinatario con il prefisso internazionale, ad esempio
919876543210. Non esiste un parametrocountry_codeseparato. Spazi,+,-,.e parentesi vengono rimossi, così come uno0iniziale (fino a due zeri iniziali in un corpo JSON). Un valore che non è composto solo da cifre viene trattato come nome di un gruppo WhatsApp.messagestringobbligatorioIl testo del messaggio. Può includere variabili di modello che vengono compilate a ogni esecuzione del promemoria. La formattazione di WhatsApp funziona:
*bold*,_italic_,~strikethrough~.cron_expressionstringobbligatorioQuando inviare, come espressione cron a cinque campi, ad esempio
0 9 * * 1-5. Vedi Espressioni cron.timezonestringfacoltativoIl fuso orario in cui viene eseguita l'espressione cron, come nome di fuso orario IANA, ad esempio
Asia/Kolkata,America/New_YorkoEurope/London. Omettilo per usareUTC. Una stringa vuota restituisceInvalid timezone. Consulta il Riferimento fusi orari per l'elenco completo.
Immagini e file
msg_typeintegerfacoltativo0testo (predefinito),1immagine o2file, conmessagecome didascalia. Qualsiasi altro valore viene trattato come0.img_urlstringObbligatorio quando msg_type è 1 o 2URL pubblico
httpohttpsdell'immagine, o del file permsg_type2, fino a 1.000 caratteri. Viene scaricato a ogni esecuzione del promemoria, quindi mantieni il link funzionante. Puoi ospitare i file con l'API Carica file multimediali.file_namestringObbligatorio quando msg_type è 2Per
msg_type2, il nome del file con la sua estensione, fino a 100 caratteri, ad esempioinvoice.pdf. Ignorato per gli altri tipi di messaggio.
Espressioni cron#
Un'espressione cron è composta da cinque valori separati da spazi. Il promemoria viene eseguito ogni volta che l'ora corrente in timezone corrisponde a tutti e cinque:
┌───────── minute (0-59)
│ ┌─────── hour (0-23)
│ │ ┌───── day of month (1-31)
│ │ │ ┌─── month (1-12)
│ │ │ │ ┌─ day of week (0-7, where 0 and 7 are Sunday)
│ │ │ │ │
0 9 * * 1-5
| Simbolo | Significato | Esempio |
|---|---|---|
* | Ogni valore | * nel campo dell'ora significa ogni ora. |
, | Un elenco di valori | 9,18 nel campo dell'ora significa alle 9:00 e alle 18:00. |
- | Un intervallo | 1-5 nel campo del giorno della settimana significa da lunedì a venerdì. |
/ | Un passo | */6 nel campo dell'ora significa ogni 6 ore. |
Esempi comuni#
| Espressione | Esecuzione |
|---|---|
0 9 * * * | Ogni giorno alle 9:00 |
0 9 * * 1-5 | Da lunedì a venerdì alle 9:00 |
0 9 * * 1 | Ogni lunedì alle 9:00 |
30 18 * * 0 | Ogni domenica alle 18:30 |
0 9,18 * * * | Ogni giorno alle 9:00 e alle 18:00 |
0 */6 * * * | Ogni 6 ore, allo scoccare dell'ora |
*/30 9-17 * * 1-5 | Ogni 30 minuti dalle 9:00 alle 17:30, da lunedì a venerdì |
0 9 1 * * | Il giorno 1 di ogni mese alle 9:00 |
0 10 15 * * | Il giorno 15 di ogni mese alle 10:00 |
0 8 1 1 * | Ogni 1° gennaio alle 8:00 |
Gli orari sono nel timezone del promemoria. Usa solo cinque campi: non aggiungere un campo per i secondi né scorciatoie come @daily.
Variabili di modello#
Questi segnaposto in message vengono sostituiti a ogni esecuzione del promemoria. Date e orari sono nel timezone del promemoria.
| Variabile | Sostituita con | Esempio |
|---|---|---|
{current_date} | Data | 2026-10-01 |
{current_date_formatted} | Data in lettere, con il giorno a due cifre | October 01, 2026 |
{current_time} | Ora in formato 24 ore | 09:00:00 |
{current_time_12h} | Ora in formato 12 ore | 09:00 AM |
{current_datetime} | Data e ora | 2026-10-01 09:00:00 |
{timezone} | Il valore di timezone | Asia/Kolkata |
{timezone_short} | Abbreviazione del fuso orario | IST |
{reminder_name} | Il valore di reminder_name | Monthly rent reminder |
{to_number} | Il valore di phone salvato | 919876543210 |
{client_name} | Nome del proprietario dello spazio di lavoro | |
{organisation_name} | Nome del tuo spazio di lavoro |
Promemoria con immagine#
curl -X POST https://wbiztool.com/api/v1/reminder/create/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Weekly class timetable",
"phone": "919876543210",
"msg_type": 1,
"img_url": "https://example.com/timetable.png",
"message": "Here is this week'\''s timetable.",
"cron_expression": "0 8 * * 1",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/create/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Weekly class timetable",
"phone": "919876543210",
"msg_type": 1,
"img_url": "https://example.com/timetable.png",
"message": "Here is this week's timetable.",
"cron_expression": "0 8 * * 1",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
print(response.status_code, response.text)// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/reminder/create/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
reminder_name: "Weekly class timetable",
phone: "919876543210",
msg_type: 1,
img_url: "https://example.com/timetable.png",
message: "Here is this week's timetable.",
cron_expression: "0 8 * * 1",
timezone: "Asia/Kolkata",
}),
});
console.log(response.status, await response.text());<?php
$ch = curl_init('https://wbiztool.com/api/v1/reminder/create/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'reminder_name' => 'Weekly class timetable',
'phone' => '919876543210',
'msg_type' => 1,
'img_url' => 'https://example.com/timetable.png',
'message' => "Here is this week's timetable.",
'cron_expression' => '0 8 * * 1',
'timezone' => 'Asia/Kolkata',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);L'esempio PHP invia campi di un modulo invece di JSON. Funzionano entrambi.
Risposta#
Una richiesta riuscita restituisce HTTP 200:
{
"reminder_id": 3187,
"message": "Reminder created successfully",
"status": 1
}
| Campo | Tipo | Descrizione |
|---|---|---|
status | integer | 1 se il promemoria è stato creato, 0 se la richiesta non è riuscita. |
message | string | Reminder created successfully, altrimenti l'errore. |
reminder_id | integer | ID del nuovo promemoria. Salvalo per annullare il promemoria in seguito. Presente solo in caso di successo. |
I nuovi promemoria sono attivi immediatamente.
Errori#
Gli errori restituiscono HTTP 400 con status impostato su 0, salvo dove indicato:
{ "status": 0, "message": "Invalid timezone" }
| Messaggio | Come risolvere |
|---|---|
Invalid JSON format: … | Il corpo JSON non è valido, spesso a causa di una virgola finale o di un a capo non codificato in message. Usa \n per andare a capo. Ricevi questo errore anche per una richiesta con campi di un modulo senza client_id, o per qualsiasi richiesta GET. |
Invalid client id. | Invia client_id come numero. |
Reminder name cannot be null | Aggiungi reminder_name. |
Phone number cannot be null | Aggiungi phone. |
Message template cannot be null | Aggiungi message. |
Cron expression cannot be null | Aggiungi cron_expression. |
Auth Error - Please send correct API key and Client id | Invia un api_key non vuoto. |
Invalid cron expression | Verifica che l'espressione abbia cinque campi validi. Vedi Espressioni cron. |
Invalid timezone | Usa un nome IANA come Asia/Kolkata, non un'abbreviazione come IST. |
Image URL cannot be null for image messages | Per msg_type 1, invia img_url. |
File URL cannot be null for file messages | Per msg_type 2, invia file_name. |
Auth Error: invalid api key | La chiave appartiene a un altro client_id. |
Auth Error: please check client id | La chiave non è associata a uno spazio di lavoro. Crea una nuova chiave nello spazio di lavoro che vuoi usare. |
Demo Account cannot access APIs | Usa un account normale. |
Not enough credits | Il tuo piano non ha più messaggi disponibili. |
Upgrade your plan to use reminders feature | Il tuo piano non include i promemoria. Passa a un piano superiore. |
WhatsApp Logged Out. Please Reconnect!! | Il numero whatsapp_client è scollegato. Ricollegalo nelle Impostazioni WhatsApp. |
Invalid WhatsApp client id | Invia whatsapp_client come numero. |
Error creating reminder: … (HTTP 500) | Non è stato possibile salvare il promemoria. Controlla i valori inviati, ad esempio che img_url non superi i 1.000 caratteri e file_name i 100. |
Come vengono eseguiti i promemoria#
- La pianificazione viene controllata nel
timezonedel promemoria e il messaggio viene messo in coda quando l'ora corrente corrisponde all'espressione cron. - Ogni esecuzione crea un messaggio normale che viene inviato dal tuo numero WhatsApp, quindi il numero deve restare collegato.
- Un'esecuzione viene saltata se il tuo spazio di lavoro non ha più crediti, oppure se non è stato impostato alcun
whatsapp_cliente in quel momento nessun numero del tuo spazio di lavoro è collegato. - Se
whatsapp_clientè impostato, ogni esecuzione viene messa in coda su quel numero anche se nel frattempo è stato disconnesso, e resta lì in attesa. Non c'è alcun ripiego su un altro numero. - I promemoria vengono controllati periodicamente, non al secondo, e il messaggio attende poi nella coda di invio come qualsiasi altro. Non fare affidamento su tempi esatti. Se un controllo viene eseguito in ritardo, l'esecuzione viene comunque inviata fino a 10 minuti dopo (fino a 1 minuto dopo per la prima esecuzione di un promemoria); oltre quel limite viene saltata. La stessa esecuzione non viene mai inviata due volte.
Suggerimenti#
- Elenca e fai pulizia: ottieni i tuoi promemoria e i relativi ID con Elenca promemoria e fermane uno con Annulla promemoria.
- Mettere in pausa e modificare non è possibile tramite l'API. Usa la pagina Promemoria della tua dashboard.
- Molti promemoria insieme: la pagina Promemoria permette anche di importare promemoria da un file CSV.
- A capo nel JSON: scrivili come
\nall'interno dimessage. Un a capo letterale rende il JSON non valido.
