Publikowanie przez HTTP¶
Najprostszy sposób publikowania wiadomości to wykorzystanie żądań HTTP POST lub PUT.
Podstawowe publikowanie¶
Żądanie POST¶
Żądanie PUT¶
Obie metody działają identycznie - użyj tej, która jest wygodniejsza.
Parametry wiadomości¶
Dodaj szczegóły do swoich wiadomości używając nagłówków HTTP:
Tytuł¶
curl -d "Wdrożenie zakończone pomyślnie" \
-H "X-Title: Wdrożenie produkcyjne" \
https://app.notifer.io/deployments
Priorytet¶
Ustaw priorytet od 1 (min) do 5 (pilne):
Tagi¶
Dodaj tagi oddzielone przecinkami:
curl -d "Utracono połączenie z bazą danych" \
-H "X-Tags: database,error,production" \
https://app.notifer.io/alerts
Połączone parametry¶
curl -d "Użycie CPU na poziomie 95%" \
-H "X-Title: Alert serwera" \
-H "X-Priority: 4" \
-H "X-Tags: server,cpu,warning" \
https://app.notifer.io/monitoring
Uwierzytelnianie¶
Publiczne tematy¶
Nie jest wymagane uwierzytelnianie - każdy może publikować:
Bezpieczeństwo tematów PUBLIC
Każdy, kto zna nazwę tematu, może do niego publikować! Obejmuje to:
- Brak wymaganego uwierzytelniania
- Tylko ograniczenie liczby żądań na podstawie IP (100 żądań/minutę na IP)
- Brak możliwości blokowania konkretnych użytkowników
Dla systemów produkcyjnych lub wrażliwych danych używaj tematów PRIVATE.
Dobre praktyki dla tematów PUBLIC:
- Używaj trudnych do odgadnięcia nazw (np.
swift-falcon-x8k2jf9a) - Nie udostępniaj nazw tematów w publicznych repozytoriach lub dokumentacji
- Tematy muszą być najpierw utworzone przez panel, zanim będzie można do nich publikować
Temat musi istnieć przed publikowaniem:
Prywatne tematy¶
Prywatne tematy wymagają uwierzytelniania. Masz trzy opcje:
Opcja 1: Token dostępu do tematu (zalecane)¶
Użyj nagłówka X-Topic-Token z tokenem dostępu specyficznym dla tematu:
curl -d "Wiadomość prywatna" \
-H "X-Topic-Token: tk_your_token_here" \
https://app.notifer.io/private-topic
Tworzenie tokena dostępu do tematu:
# Najpierw uzyskaj token JWT przez zalogowanie się
curl -X POST https://app.notifer.io/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"your_password"}'
# Utwórz token dostępu do tematu
curl -X POST https://app.notifer.io/api/topics/private-topic/access-tokens \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My script token",
"permissions": ["publish"]
}'
# Odpowiedź zawiera token:
# {
# "id": "...",
# "token": "tk_abc123...",
# "topic": "private-topic",
# "permissions": ["publish"]
# }
Alternatywnie przekaż token jako parametr zapytania:
Opcja 2: Token JWT¶
Użyj nagłówka Authorization z tokenem JWT użytkownika:
curl -d "Wiadomość prywatna" \
-H "Authorization: Bearer eyJhbGciOiJIUz..." \
https://app.notifer.io/private-topic
Opcja 3: Klucz API¶
Użyj nagłówka X-API-Key z kluczem API użytkownika:
curl -d "Wiadomość prywatna" \
-H "X-API-Key: noti_your_key_here" \
https://app.notifer.io/private-topic
Zalecenie: Użyj tokenów dostępu do tematu (Opcja 1) dla zautomatyzowanych skryptów i integracji, ponieważ: - Są ograniczone do konkretnych tematów - Mogą mieć ograniczone uprawnienia (tylko publikowanie) - Mogą być unieważnione bez wpływu na inne integracje
Formatowanie Markdown¶
Wiadomości obsługują Markdown:
curl -d "**Pogrubienie**, *kursywa*, \`kod\`, i [linki](https://example.com)" \
https://app.notifer.io/formatted-messages
Obsługiwany Markdown:
**bold**→ bold*italic*→ italic`code`→code[link](url)→ link# Heading→ Heading- List item→ List item> Quote→ Quote```code block```→ Code block
Format odpowiedzi¶
Odpowiedź sukcesu¶
{
"id": "msg_abc123",
"topic": "your-topic",
"message": "Twoja wiadomość tutaj",
"title": "Opcjonalny tytuł",
"priority": 3,
"tags": ["tag1", "tag2"],
"timestamp": "2025-11-02T10:30:00Z"
}
Kod statusu: 200 OK lub 201 Created
Odpowiedź błędu¶
Popularne kody statusu:
400 Bad Request- Nieprawidłowe parametry401 Unauthorized- Brak lub nieprawidłowe uwierzytelnienie403 Forbidden- Brak uprawnień do publikowania404 Not Found- Temat nie istnieje (dla prywatnych tematów)429 Too Many Requests- Przekroczono limit żądań
Przykłady z rzeczywistości¶
Monitorowanie serwera¶
#!/bin/bash
# Sprawdź miejsce na dysku i powiadom, jeśli > 80%
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE -gt 80 ]; then
curl -d "Użycie dysku na poziomie ${USAGE}%" \
-H "X-Priority: 4" \
-H "X-Tags: server,disk,warning" \
https://app.notifer.io/server-alerts
fi
Pipeline CI/CD¶
# Przykład GitHub Actions
- name: Notify deployment
run: |
curl -d "Wdrożenie do produkcji zakończone" \
-H "X-Title: Deploy Success" \
-H "X-Tags: ci,deploy,production" \
-H "X-Topic-Token: ${{ secrets.NOTIFER_TOPIC_TOKEN }}" \
https://app.notifer.io/ci-notifications
Kopia zapasowa bazy danych¶
#!/bin/bash
# Wykonaj kopię zapasową bazy danych i powiadom
if pg_dump mydb > backup.sql; then
curl -d "Kopia zapasowa bazy danych zakończona pomyślnie" \
-H "X-Title: Backup Success" \
-H "X-Priority: 3" \
-H "X-Tags: backup,database,success" \
https://app.notifer.io/backups
else
curl -d "Kopia zapasowa bazy danych NIE POWIODŁA SIĘ!" \
-H "X-Title: Backup Failed" \
-H "X-Priority: 5" \
-H "X-Tags: backup,database,error" \
https://app.notifer.io/backups
fi
Monitorowanie logów¶
# Powiadom o błędzie w logach
tail -f /var/log/app.log | grep -i error | while read line; do
curl -d "$line" \
-H "X-Title: Application Error" \
-H "X-Priority: 4" \
-H "X-Tags: logs,error" \
https://app.notifer.io/app-errors
done
Sprawdzanie stanu zdrowia¶
#!/bin/bash
# Sprawdź usługę i powiadom, jeśli nie działa
if ! curl -sf https://myapp.com/health > /dev/null; then
curl -d "Sprawdzanie stanu zdrowia usługi nie powiodło się!" \
-H "X-Priority: 5" \
-H "X-Tags: health,critical" \
-H "X-Topic-Token: tk_your_token_here" \
https://app.notifer.io/alerts
fi
Opcje zaawansowane¶
Ograniczanie liczby żądań¶
Przestrzegaj limitów żądań sprawdzając nagłówki odpowiedzi:
Nagłówki odpowiedzi:
Logika ponawiania¶
Zaimplementuj wykładniczy backoff dla nieudanych żądań:
#!/bin/bash
MAX_RETRIES=3
RETRY_DELAY=1
for i in $(seq 1 $MAX_RETRIES); do
if curl -d "Wiadomość" https://app.notifer.io/topic; then
exit 0
fi
echo "Próba $i nie powiodła się, czekam ${RETRY_DELAY}s"
sleep $RETRY_DELAY
RETRY_DELAY=$((RETRY_DELAY * 2))
done
echo "Wszystkie próby nie powiodły się"
exit 1
Następne kroki¶
- Publikowanie Python - Publikuj z Python (requests)
- Publikowanie JavaScript - Publikuj z Node.js lub przeglądarki
- Narzędzie CLI - Interfejs wiersza poleceń
- Klucze API - Zarządzaj uwierzytelnianiem