Μετάβαση στο κύριο περιεχόμενο

Διαχείριση συνδρομών

Αυτό το έγγραφο περιγράφει το ολοκληρωμένο σύστημα διαχείρισης συνδρομών και συγκατάθεσης του Joryio, το οποίο χειρίζεται συνδρομές ανά κανάλι, συνδρομές βάσει λίστας/θέματος, κεφαλίδες RFC 8058 List-Unsubscribe, χειρισμό bounces και δυνατότητες συμμόρφωσης.

Περιεχόμενα

  1. Επισκόπηση
  2. Μοντέλα δεδομένων
  3. Συνδρομές καναλιού
  4. Ενσωμάτωση Web SDK
  5. Λίστες συνδρομών
  6. Ομάδες συνδρομών ανά αριθμό (SMS και WhatsApp)
  7. Κεφαλίδα List-Unsubscribe (RFC 8058)
  8. Σελίδα προτιμήσεων (προσαρμοσμένο design)
  9. Χειρισμός Bounce
  10. Μεταβλητές Liquid template
  11. Φίλτρα τμημάτων
  12. Αναφορά API
  13. Ρύθμιση
  14. Συμμόρφωση

Επισκόπηση

Το σύστημα διαχείρισης συνδρομών του Joryio παρέχει:

  • Συνδρομές ανά κανάλι: Παρακολούθηση κατάστασης opt-in/opt-out για email, SMS, WhatsApp, push notifications και Viber
  • Συνδρομές βάσει λίστας: Επιτρέψτε στους χρήστες να εγγράφονται σε συγκεκριμένα θέματα ή λίστες αποστολής
  • Συμμόρφωση RFC 8058: Κεφαλίδες διαγραφής με ένα κλικ για βελτιωμένη παραδοσιμότητα email
  • Χειρισμό bounce: Αυτόματος χειρισμός soft και hard bounces
  • Audit logging: Πλήρες ιστορικό αλλαγών συνδρομής για συμμόρφωση
  • Φιλτράρισμα τμημάτων: Στόχευση χρηστών βάσει κατάστασης συνδρομής

Μοντέλα δεδομένων

Συνδρομή καναλιού (ανά χρήστη)

Κάθε χρήστης έχει κατάσταση συνδρομής για κάθε κανάλι επικοινωνίας:

interface ChannelSubscription {
status: 'optedIn' | 'subscribed' | 'unsubscribed';
optInDate?: Date;
optOutDate?: Date;
optInSource?: string; // 'api', 'web_form', 'import', 'manual'
consentText?: string; // Consent text shown at opt-in
}

interface EmailSubscription extends ChannelSubscription {
bounceType?: 'soft' | 'hard' | null;
bounceCount?: number;
lastBounceAt?: Date;
isValid?: boolean; // false if hard bounced
}

interface UserSubscriptions {
email?: EmailSubscription;
sms?: ChannelSubscription;
whatsapp?: ChannelSubscription;
push?: ChannelSubscription;
viber?: ChannelSubscription;
}

Λίστα συνδρομών

Οι λίστες είναι θέματα ή κατηγορίες στις οποίες μπορούν να εγγραφούν χρήστες:

interface SubscriptionList {
id: string;
organizationId: string;
workspaceId: string;
name: string;
description?: string;
channels: ('email' | 'sms' | 'whatsapp' | 'push' | 'viber')[];
isPublic: boolean; // Show in preference center
type: 'marketing' | 'transactional';
requireDoubleOptIn: boolean;
archivedAt?: Date;
createdAt: Date;
updatedAt: Date;
}

Μέλος λίστας

Παρακολουθεί σε ποιες λίστες είναι εγγεγραμμένοι οι χρήστες:

interface ListSubscription {
contactId: string;
listId: string;
channel: 'email' | 'sms' | 'whatsapp' | 'push' | 'viber';
status: 'optedIn' | 'subscribed' | 'unsubscribed';
subscribedAt?: Date;
unsubscribedAt?: Date;
optInSource?: string;
}

Συνδρομές καναλιού

Τύποι κατάστασης

ΚατάστασηΠεριγραφή
optedInΟ χρήστης ολοκλήρωσε επιβεβαίωση double opt-in
subscribedΟ χρήστης είναι εγγεγραμμένος (single opt-in)
unsubscribedΟ χρήστης έχει διαγραφεί

Ενημέρωση κατάστασης καναλιού

// Via API
await subscriptionsApi.updateChannelSubscription(userId, 'email', {
status: 'unsubscribed',
source: 'preference_center',
reason: 'User requested via preference center'
});

Βέλτιστες πρακτικές

  • Καταγράφετε πάντα την πηγή των αλλαγών συνδρομής
  • Αποθηκεύετε το κείμενο συγκατάθεσης όταν οι χρήστες επιλέγουν opt-in
  • Για συμμόρφωση με GDPR, χρησιμοποιήστε double opt-in για Ευρωπαίους χρήστες

Ενσωμάτωση Web SDK

Το Joryio Web SDK σάς επιτρέπει να διαχειρίζεστε προτιμήσεις συνδρομής χρηστών απευθείας από τον ιστότοπο ή τη web εφαρμογή σας.

Εγκατάσταση

<!-- Via script tag (served from the Joryio API) -->
<script src="https://api-eu1.joryio.com/sdk/web/latest/joryio.min.js"></script>

<!-- Or via npm -->
npm install @joryio/web-sdk

Τύποι κατάστασης συνδρομής

Το SDK παρέχει τρεις τιμές κατάστασης συνδρομής:

ΚατάστασηΠεριγραφή
SubscriptionStatus.OPTED_INΟ χρήστης επέλεξε ρητά opt-in (π.χ. επιβεβαίωσε double opt-in)
SubscriptionStatus.SUBSCRIBEDΟ χρήστης είναι εγγεγραμμένος αλλά δεν έχει επιλέξει ρητά opt-in
SubscriptionStatus.UNSUBSCRIBEDΟ χρήστης έχει επιλέξει opt-out

Ορισμός συνδρομών καναλιού

import { JoryioSDK, SubscriptionStatus } from '@joryio/web-sdk';

// Initialize SDK
const sdk = new JoryioSDK({ sdkKey: 'jry_sdk_web_...' });

// Set subscription for a single channel (write-only for security - no getters)
sdk.user.setSubscription('email', SubscriptionStatus.OPTED_IN);
sdk.user.setSubscription('sms', SubscriptionStatus.SUBSCRIBED);
sdk.user.setSubscription('push', SubscriptionStatus.UNSUBSCRIBED);
sdk.user.setSubscription('whatsapp', SubscriptionStatus.SUBSCRIBED);

// Set multiple channels at once
sdk.user.setSubscriptions({
email: SubscriptionStatus.OPTED_IN,
sms: SubscriptionStatus.UNSUBSCRIBED,
whatsapp: SubscriptionStatus.SUBSCRIBED,
push: SubscriptionStatus.OPTED_IN
});

Διαχείριση ομάδων συνδρομών (λίστες)

// Add user to a subscription group/list
sdk.user.addToSubscriptionGroup('newsletter-list-id', 'email');
sdk.user.addToSubscriptionGroup('product-updates-id', 'push');

// Remove user from a subscription group/list
sdk.user.removeFromSubscriptionGroup('newsletter-list-id', 'email');

// The channel parameter is optional, defaults to 'email'
sdk.user.addToSubscriptionGroup('weekly-digest-id');

Σημειώσεις ασφάλειας

Το αντικείμενο User του SDK είναι μόνο για εγγραφή για λόγους ασφάλειας:

  • Δεν υπάρχει μέθοδος getSubscriptions() - αποτρέπει άλλους ιστότοπους/scripts από την ανάγνωση δεδομένων συνδρομής χρήστη
  • Δεν υπάρχουν getter methods - όλες οι ενέργειες είναι μονόδρομες εγγραφές στο backend
  • Έλεγχος ταυτότητας με κλειδί SDK - όλα τα αιτήματα ελέγχονται με το κλειδί SDK σας
  • Το SDK ενεργεί πάντα ως "ο τρέχων χρήστης" - τα setSubscription / addToSubscriptionGroup δεν δέχονται id στόχου· εφαρμόζονται σε όποιον είναι ταυτοποιημένο το SDK εκείνη τη στιγμή (το id ενός ανώνυμου επισκέπτη, ή τον χρήστη που περάσατε στο identify()). Δεν υπάρχει τρόπος ένας επισκέπτης να αλλάξει τις συνδρομές κάποιου άλλου μέσω του SDK.
  • Με ενεργοποιημένο το SDK Authentication, οι αλλαγές συνδρομής απαιτούν ταυτοποιημένο χρήστη. Ένα anonymousId δημιουργείται από τον client και δεν μπορεί να συνδεθεί κρυπτογραφικά με το υπογεγραμμένο token σας, οπότε μόλις ενεργοποιήσετε το SDK Authentication μια αλλαγή συνδρομής μόνο-ανώνυμη απορρίπτεται - καλέστε πρώτα identify(userId) ώστε η αλλαγή να είναι συνδεδεμένη με token. Με το SDK Authentication ανενεργό, το ανώνυμο opt-in/opt-out γίνεται δεκτό όπως πριν.

Υποστήριξη TypeScript

import {
JoryioSDK,
SubscriptionStatus,
SubscriptionChannel,
SubscriptionPreferences
} from '@joryio/web-sdk';

const sdk = new JoryioSDK({ sdkKey: 'jry_sdk_web_...' });

// Type-safe subscription updates
const preferences: SubscriptionPreferences = {
email: SubscriptionStatus.OPTED_IN,
sms: SubscriptionStatus.UNSUBSCRIBED,
};

sdk.user.setSubscriptions(preferences);

// Type-safe channel selection
const channel: SubscriptionChannel = 'email';
sdk.user.setSubscription(channel, SubscriptionStatus.OPTED_IN);

Παράδειγμα: Σελίδα ρυθμίσεων προτιμήσεων

// On your settings page
function handleSubscriptionToggle(channel, isEnabled) {
sdk.user.setSubscription(
channel,
isEnabled ? SubscriptionStatus.SUBSCRIBED : SubscriptionStatus.UNSUBSCRIBED
);
}

// Usage
handleSubscriptionToggle('email', true); // Subscribe to email
handleSubscriptionToggle('sms', false); // Unsubscribe from SMS

Παράδειγμα: Εγγραφή σε newsletter

function subscribeToNewsletter(email) {
// First identify the user
sdk.identify(email);
sdk.setAttributes({ email: email });

// Then subscribe to the newsletter list
sdk.user.setSubscription('email', SubscriptionStatus.OPTED_IN);
sdk.user.addToSubscriptionGroup('newsletter-list-id', 'email');
}

Λίστες συνδρομών

Δημιουργία λίστας

const list = await listsApi.create({
name: 'Weekly Newsletter',
description: 'Our weekly digest of product updates',
channels: ['email'],
isPublic: true, // Show in preference center
type: 'marketing',
requireDoubleOptIn: false
});

Διαχείριση μελών

// Subscribe a user to a list
await subscriptionsApi.subscribeToList(userId, listId, 'email', {
source: 'api',
consentText: 'Weekly newsletter signup'
});

// Unsubscribe a user
await subscriptionsApi.unsubscribeFromList(userId, listId, 'email');

// Bulk operations (never re-subscribe contacts who opted out)
await listsApi.bulkAddMembers(listId, contactIds, 'email');
await listsApi.bulkRemoveMembers(listId, contactIds, 'email');

Δημόσιες και ιδιωτικές λίστες

  • Δημόσιες λίστες (isPublic: true): Εμφανίζονται στο preference center και οι χρήστες μπορούν να τις διαχειριστούν οι ίδιοι
  • Ιδιωτικές λίστες (isPublic: false): Διαχειρίζονται μόνο από admins και δεν εμφανίζονται στους χρήστες

Ομάδες συνδρομών ανά αριθμό (SMS και WhatsApp)

Μια λίστα συνδρομών που συνδέεται με συγκεκριμένο αποστολέα - δηλαδή η λίστα φέρει senderId - λειτουργεί ως ομάδα συνδρομών ανά αριθμό. Για SMS, η ομάδα είναι ανά αριθμό· για WhatsApp, είναι ανά WABA (WhatsApp Business Account). Έτσι, μια επαφή μπορεί να επιλέξει opt-out από μηνύματα ενός αριθμού/WABA ενώ παραμένει εγγεγραμμένη σε άλλους.

Πώς περιορίζονται και αποθηκεύονται τα opt-outs

  • Τα opt-outs αποθηκεύονται ανά ομάδα. Κάθε ομάδα ανά αριθμό παρακολουθεί τη δική της κατάσταση opt-out, ξεχωριστά από την καθολική συγκατάθεση καναλιού της επαφής και από άλλους αριθμούς/WABA.
  • Τόσο οι αποστολές καμπάνιας όσο και journey τηρούν τα opt-outs. Πριν από την αποστολή, το σύστημα ελέγχει την κατάσταση opt-out του παραλήπτη για την ομάδα του αριθμού αποστολής / WABA. Αν η επαφή έχει επιλέξει opt-out από αυτή την ομάδα, η αποστολή παραλείπεται. Σε journey η επαφή συνεχίζει στο επόμενο βήμα - παραλείπεται μόνο το μήνυμα, όχι το journey.
  • Προεπιλεγμένος αριθμός SMS. Όταν στέλνετε από τον προεπιλεγμένο αριθμό του workspace, τα opt-outs περιορίζονται στην ομάδα αυτού του προεπιλεγμένου αριθμού.

Περιορισμός εισερχόμενων STOP / START

Όταν ένας παραλήπτης απαντά με keyword, αυτό εφαρμόζεται στον συγκεκριμένο αριθμό (SMS) / WABA (WhatsApp) στον οποίο έφτασε το μήνυμα:

  • Το STOP (και κάθε άλλο keyword opt-out εκτός από STOPALL) περιορίζεται στην ομάδα ανά αριθμό / ανά WABA - διαγράφει την επαφή μόνο από τα μηνύματα αυτού του αριθμού/WABA.
  • Το STOPALL ισχύει για όλο το κανάλι - διαγράφει την επαφή από κάθε αριθμό/WABA σε αυτό το κανάλι.
  • Το START επανεγγράφει την επαφή στην ίδια ομάδα αριθμού / WABA.
Μια εισερχόμενη διεύθυνση webhook είναι δεμένη σε έναν χώρο εργασίας

Οι χώροι εργασίας είναι ξεχωριστές μάρκες, οπότε ένα STOP απεγγράφει την επαφή από εκείνη τη μάρκα - όχι από ολόκληρο τον λογαριασμό. Αυτό το εύρος προκύπτει από την εισερχόμενη διεύθυνση webhook, η οποία φέρει έναν χώρο εργασίας.

Το Joryio δεν μπορεί να συμπεράνει τη μάρκα από το ίδιο το μήνυμα. Οι αποστολείς αναγνωρίζονται με όνομα (για παράδειγμα Acme), ενώ μια απάντηση φτάνει σε έναν αριθμό τηλεφώνου - δεν υπάρχει κοινό στοιχείο για αντιστοίχιση.

Έτσι, κάθε απάντηση και κάθε απεγγραφή που φτάνει σε μια δεδομένη εισερχόμενη διεύθυνση καταγράφεται στον χώρο εργασίας εκείνης της διεύθυνσης. Αν ένας λογαριασμός παρόχου εξυπηρετεί περισσότερες από μία μάρκες, ρυθμίστε ξεχωριστή εισερχόμενη διεύθυνση ανά αριθμό στην πύλη του παρόχου, ή δώστε σε κάθε μάρκα τον δικό της λογαριασμό παρόχου. Διαφορετικά, ένα STOP που προοριζόταν για τη Μάρκα Β καταγράφεται στη Μάρκα Α, και η Μάρκα Β συνεχίζει να στέλνει.

Keywords

Ο χειρισμός εισερχόμενων SMS keywords βασίζεται σε τρία επίπεδα: ένα πάντα ενεργό αγγλικό σύνολο βάσης, τοπικοποιημένες προεπιλογές (ενεργές από προεπιλογή) και τις δικές σας προσαρμοσμένες προσθήκες. Όλα συγχωνεύονται κατά την αντιστοίχιση.

Αγγλικό σύνολο βάσης (πάντα ενεργό, δεν αφαιρείται)

Αυτά απαιτούνται για συμμόρφωση FCC / CTIA και δεν μπορούν ποτέ να απενεργοποιηθούν:

ΤύποςKeywords
Opt-outSTOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT, REVOKE, OPTOUT
Opt-inSTART, YES, UNSTOP, SUBSCRIBE, OPTIN
ΒοήθειαHELP, INFO
Βάση FCC Απριλίου 2025

Τα REVOKE και OPTOUT είναι μέρος του συνόλου βάσης opt-out (κανόνας FCC για ανάκληση συγκατάθεσης SMS του Απριλίου 2025). Τιμώνται πάντα - δεν χρειάζεται να τα προσθέσετε ή να τα ενεργοποιήσετε.

Εμβέλεια συνδέσμου διαγραφής σε κόμβους SMS και Viber (journey)

Ένα βήμα μηνύματος SMS ή Viber σε ένα journey φέρει έναν σύνδεσμο διαγραφής του οποίου την εμβέλεια μπορείτε να επιλέξετε ανά κόμβο. Ο αποστολέας "Από" ορίζει τη λίστα συνδρομής, οπότε από προεπιλογή ο σύνδεσμος διαγραφής (και ένα εισερχόμενο STOP) αφαιρεί την επαφή μόνο από τη λίστα αυτού του αποστολέα - παραμένει προσβάσιμη από τους άλλους αποστολείς σας.

Στους κόμβους μηνύματος SMS και Viber, το στοιχείο ελέγχου "Ο σύνδεσμος διαγραφής αφαιρεί από:" προσφέρει:

ΕπιλογήΣυμπεριφορά
Η λίστα αυτού του αποστολέα (προεπιλογή)Ο σύνδεσμος διαγραφής κάνει opt-out την επαφή μόνο από τη λίστα του αποστέλλοντος αριθμού/αποστολέα - όπως ακριβώς η εμβέλεια ενός STOP που στέλνεται με μήνυμα.
Όλα τα SMS / Όλα τα Viber (καθολικό)Ο σύνδεσμος διαγραφής κάνει opt-out την επαφή από ολόκληρο το κανάλι - ισοδύναμο με STOPALL.

Η προεπιλογή (λίστα αποστολέα) είναι η λιγότερο απρόσμενη και πιο στοχευμένη επιλογή, και διατηρεί τον σύνδεσμο διαγραφής συνεπή με την εμβέλεια του εισερχόμενου STOP. Διευρύνετέ την σε καθολική μόνο όταν ένας κόμβος αντιπροσωπεύει πραγματικά μια διαγραφή σε επίπεδο καναλιού. Αυτό αντικατοπτρίζει το μοντέλο καθολικό-έναντι-λίστας της διαγραφής email (List-Unsubscribe) - το ίδιο μοντέλο, εφαρμοσμένο ανά κόμβο για SMS και Viber.


Τα email opt-outs ακολουθούν τη διεύθυνση (διπλές επαφές)

Η ίδια διεύθυνση email μπορεί νόμιμα να ανήκει σε περισσότερες από μία επαφές σε ένα workspace - για παράδειγμα, ένα άτομο που εισήχθη δύο φορές ή δημιουργήθηκε από διαφορετικές πηγές. Οι διαγραφές email και τα hard bounces καταγράφονται στη διεύθυνση email (με εύρος workspace), όχι μόνο στην εγγραφή επαφής που έλαβε το μήνυμα. Αυτό αντιστοιχεί στον τρόπο με τον οποίο ώριμες πλατφόρμες engagement χειρίζονται τη συγκατάθεση email και σημαίνει ότι μια διαγραφή τιμάται για το άτομο, χωρίς να χάνεται επειδή μια διπλή εγγραφή φαινόταν ακόμη εγγεγραμμένη.

Τι σημαίνει αυτό

  • Η διαγραφή καλύπτει κάθε διπλότυπο. Όταν κάποιος διαγράφεται - από σύνδεσμο διαγραφής, την κεφαλίδα one-click List-Unsubscribe, σελίδα προτιμήσεων ή αναφορά spam - όλες οι επαφές του workspace με το ίδιο email καταστέλλονται, όχι μόνο εκείνη που έλαβε το email.
  • Καθολικό έναντι λίστας. Η καθολική διαγραφή καταστέλλει τη διεύθυνση σε όλο το κανάλι (κάθε καμπάνια και journey). Η διαγραφή λίστας/θέματος καταστέλλει τη διεύθυνση μόνο για αυτή τη λίστα - το άτομο παραμένει προσβάσιμο σε άλλες λίστες.
  • Τα hard bounces ακολουθούν επίσης τη διεύθυνση. Ένα hard bounce καταστέλλει τη διεύθυνση σε όλο το workspace, ώστε μια διπλή επαφή να μη συνεχίζει να στέλνει σε ανενεργό mailbox. Η καταστολή παραδοσιμότητας δεν αίρεται με μεταγενέστερη επανεγγραφή (μόνο πραγματική αλλαγή email / μη αυτόματη εκκαθάριση την αποκαθιστά) - αυτό προστατεύει τη φήμη αποστολέα σας.
  • Εύρος workspace. Η καταστολή συνδέεται με το workspace που έστειλε στη διεύθυνση. Μια διαγραφή σε ένα workspace δεν σιωπά τη διεύθυνση σε διαφορετικό workspace του ίδιου λογαριασμού.
  • Παράκαμψη transactional. Αποστολή ρυθμισμένη να φτάνει σε όλες τις επαφές (η transactional/all προτίμηση) παρακάμπτει ακόμα τα opt-outs συγκατάθεσης, αλλά διεύθυνση με hard bounce δεν λαμβάνει ποτέ μήνυμα - δεν έχει νόημα η αποστολή σε ανενεργό mailbox.

Τόσο οι αποστολές καμπάνιας όσο και journey το ελέγχουν κατά την αποστολή, άρα μια διπλή επαφή που δημιουργείται μετά το opt-out εξακολουθεί να καταστέλλεται.


Κεφαλίδα List-Unsubscribe (RFC 8058)

Επισκόπηση

Το RFC 8058 ορίζει έναν τυπικό τρόπο για τους email clients να παρέχουν λειτουργία διαγραφής με ένα κλικ. Το Joryio προσθέτει αυτόματα αυτές τις κεφαλίδες στα εξερχόμενα email.

Κεφαλίδες που προστίθενται

List-Unsubscribe: <https://api-eu1.joryio.com/u/{token}>
List-Unsubscribe-Post: List-Unsubscribe=One-Click

Ρύθμιση

Ενεργοποιήστε στις ρυθμίσεις workspace:

subscriptionSettings: {
listUnsubscribe: {
enabled: true,
includeMailto: true, // Include mailto: link (recommended for Gmail)
scope: 'global' // 'global' or 'list'
}
}

Επιλογές εύρους

ΕύροςΣυμπεριφορά
globalΗ διαγραφή με ένα κλικ αφαιρεί τον χρήστη από όλες τις επικοινωνίες email
listΔιαγράφει μόνο από τη συγκεκριμένη λίστα από την οποία στάλθηκε το email

Στοιχείο ελέγχου σε επίπεδο καμπάνιας

Για μια καμπάνια email, το βήμα Compose του composer έχει ένα ενιαίο στοιχείο ελέγχου Διαγραφή που ελέγχει τόσο την παρουσία του συνδέσμου/κεφαλίδας διαγραφής ενός κλικ όσο και από τι αφαιρεί τους παραλήπτες:

  • Καθολική διαγραφή (προεπιλογή) - η κεφαλίδα περιλαμβάνεται και η διαγραφή ενός κλικ αφαιρεί τον παραλήπτη από όλα τα email (διαγραφή σε όλο τον χώρο εργασίας). Αυτή είναι η κανονική επιλογή για marketing email.
  • Διαγραφή από: <θέμα> (εμφανίζεται μόνο όταν ο χώρος εργασίας έχει λίστες συνδρομών) - η κεφαλίδα περιλαμβάνεται και η διαγραφή αφαιρεί τον παραλήπτη μόνο από αυτό το θέμα, αφήνοντας άθικτα τα υπόλοιπα θέματά του. Η επιλογή θέματος κάνει επίσης την αποστολή να παραλείπει όποιον έχει ήδη διαγραφεί από αυτό.
  • Χωρίς διαγραφή - μόνο συναλλακτικό - καταστέλλει πλήρως την κεφαλίδα List-Unsubscribe για αυτή την αποστολή (αποδείξεις, επαναφορές κωδικού, κωδικοί μίας χρήσης), που εξαιρούνται από τις απαιτήσεις opt-out.

Στόχευση έναντι εύρους διαγραφής. Αυτό το στοιχείο ελέγχου αφορά μόνο τον σύνδεσμο/κεφαλίδα διαγραφής. Δεν φιλτράρει παραλήπτες. Για να στείλετε μόνο στους συνδρομητές ενός θέματος, προσθέστε ένα φίλτρο 'μέλος λίστας' στο βήμα Κοινό - το φίλτρο ήδη εξαιρεί όποιον διαγράφηκε από τη λίστα και υπολογίζεται κατά την αποστολή.

Τα SMS / WhatsApp δεν έχουν κεφαλίδα RFC 8058, οπότε το βήμα Compose τους εμφανίζει αντ' αυτού ένα στοιχείο ελέγχου Θέμα διαγραφής (Καθολικό έναντι συγκεκριμένου θέματος) με την ίδια σημασία εύρους· δεν υπάρχει επιλογή "χωρίς διαγραφή" επειδή μια διαγραφή STOP τηρείται πάντα.

Κατά την αποστολή, η επιλογή της καμπάνιας συγχωνεύεται πάνω από την πολιτική workspace. Η αποθηκευμένη μορφή:

campaign.channelConfig = {
// omit listUnsubscribe entirely to inherit the workspace policy (= Global)
listUnsubscribe: {
enabled: false, // "No unsubscribe": suppress the header for this campaign
},
};
// Topic scope is stored separately as the campaign's subscriptionCategoryId.

Συμμόρφωση: επιλέξτε "Χωρίς διαγραφή" μόνο για γνήσια transactional / relationship μηνύματα. Τα μαζικά και marketing email απαιτούν κεφαλίδα List-Unsubscribe (κανόνες αποστολέων μαζικού email Gmail και Yahoo).


Σελίδα προτιμήσεων (προσαρμοσμένο design)

Από προεπιλογή, οι παραλήπτες που επιλέγουν σύνδεσμο διαγραφής ή «διαχείριση προτιμήσεων» βλέπουν το ενσωματωμένο preference center του Joryio. Μπορείτε να το αντικαταστήσετε με δική σας branded σελίδα.

Πού: Ρυθμίσεις → Subscriptions → Preference page.

Η σελίδα είναι ανά workspace και έχει τρεις λειτουργίες:

  • Built-in default - το τυπικό preference center του Joryio (εναλλαγές καναλιών + λιστών). Λειτουργεί πάντα, χωρίς ρύθμιση.
  • Custom HTML - πλήρης editor HTML/Liquid με live preview (απόδοση με δείγμα δεδομένων). Περιγράφεται παρακάτω.
  • Redirect to URL - παραλείπει εντελώς τη σελίδα μας και στέλνει τον παραλήπτη στη δική σας. Στον σύνδεσμο διαγραφής καταγράφουμε πρώτα το opt-out και μετά ανακατευθύνουμε στο URL σας με προσαρτημένα ?email=…&status=unsubscribed. Ο σύνδεσμος διαχείρισης προτιμήσεων ανακατευθύνει με ?token=…, το οποίο η σελίδα σας μπορεί να χρησιμοποιήσει για ανάγνωση/εγγραφή προτιμήσεων μέσω του δημόσιου API. Η συμμόρφωση διατηρείται σε κάθε περίπτωση.

Πώς λειτουργεί

  • Συντάσσετε το σώμα σελίδας σε HTML. Μπορεί να χρησιμοποιεί Liquid: εξατομίκευση ({{ firstName }}, {{ email }}), content blocks ({{ blocks.<slug> }}) και τα subscription URL tags παρακάτω.
  • Τοποθετήστε το tag {{ preferences_form }} στο σημείο όπου πρέπει να εμφανιστούν τα λειτουργικά στοιχεία ελέγχου συνδρομών (εναλλαγές καναλιών + λιστών, Save, Unsubscribe from all) - το Joryio αποδίδει τη λειτουργική φόρμα σε αυτό το σημείο.
  • Αν παραλείψετε το tag, τα στοιχεία ελέγχου προστίθενται αυτόματα στο τέλος, ώστε ο παραλήπτης να μπορεί πάντα να διαγραφεί (ο editor προειδοποιεί όταν λείπει το tag).
  • Η σελίδα αποδίδεται στην πλευρά του διακομιστή για κάθε παραλήπτη (ώστε τα URL διαγραφής και η εξατομίκευση να είναι πραγματικά) και κατόπιν καθαρίζεται πριν φτάσει στο πρόγραμμα περιήγησης: διατηρούνται layout, εικόνες, inline styles και scoped block <style>· αφαιρούνται scripts, event handlers, iframes, στοιχεία <form> και CSS που περιέχει scripts.

Διαθέσιμα tags

TagΠεριγραφή
{{ preferences_form }}Τα λειτουργικά στοιχεία ελέγχου συνδρομής (τοποθετήστε μία φορά)
{{ unsubscribe_url }}Καθολική διαγραφή
{{ preferences_url }}Σύνδεσμος επιστροφής σε αυτή τη σελίδα
{{ resubscribe_url }}Σύνδεσμος επανεγγραφής
{{ firstName }} / {{ email }}Εξατομίκευση παραλήπτη
{{ blocks.<slug> }}Επαναχρησιμοποιήσιμο content block

Σημειώσεις

  • Γίνεται δεκτό πλήρες markup σελίδας (<html>/<head>/<body>). Η σελίδα είναι αυτόνομη οθόνη, επομένως αποδίδεται το περιεχόμενο και τα styles του body.
  • Η ίδια σελίδα εξυπηρετεί τόσο τη διαγραφή με ένα κλικ (/u/:token) όσο και τους συνδέσμους διαχείρισης προτιμήσεων (/preferences/:token).
  • Η ενσωματωμένη προεπιλεγμένη σελίδα προσφέρει επίσης προαιρετικό «reason for unsubscribing» (καταγράφεται στο audit log + το συμβάν message.unsubscribed) και ενέργεια «Re-subscribe to all». Ένα {{ resubscribe_url }} (που προσαρτά ?action=resubscribe) επανεγγράφει όταν ανοίξει.

Χειρισμός Bounce

Τύποι Bounce

ΤύποςΠεριγραφήΕνέργεια
Soft BounceΠροσωρινή αποτυχία παράδοσης (γεμάτο mailbox, διακομιστής εκτός λειτουργίας)Μετράται μέσα σε χρονικό παράθυρο· κλιμακώνεται σε hard bounce μετά από πολλές εμφανίσεις
Hard BounceΜόνιμη αποτυχία παράδοσης (μη έγκυρη διεύθυνση, domain δεν υπάρχει)Επισημαίνει το email ως μη έγκυρο (καταστέλλεται από αποστολές)

Ένα hard bounce επισημαίνει τη διεύθυνση ως μη έγκυρη και σταματά την αποστολή προς αυτή, αλλά δεν διαγράφει την επαφή - δεν ζήτησε opt-out, οπότε η συγκατάθεσή της παραμένει ανέπαφη (η εκκαθάριση bounce, π.χ. κατά αλλαγή email, την κάνει ξανά αποδέκτη). Η καταστολή ακολουθεί τη διεύθυνση email σε κάθε διπλή επαφή του workspace (δείτε Τα email opt-outs ακολουθούν τη διεύθυνση), άρα δεν στέλνεται ούτε σε δεύτερη επαφή με το ίδιο ανενεργό mailbox. Ένα soft bounce γίνεται ανεκτό έως softBounceMaxRetries φορές μέσα στο softBounceRetryHours. Πέρα από αυτό αντιμετωπίζεται ως hard bounce.

Ρύθμιση

subscriptionSettings: {
bounceHandling: {
softBounceRetryHours: 24, // Window in which soft bounces are counted
softBounceMaxRetries: 5, // Soft bounces in-window before escalating to a hard bounce
resubscribeOnEmailChange: true // Clear the invalid flag when the email changes
}
}

Ενσωμάτωση Webhook

Το Joryio επεξεργάζεται αυτόματα bounce webhooks από:

  • Amazon SES: Ειδοποιήσεις SNS
  • SendGrid: Event webhooks
  • Mailgun: Webhooks

Τα webhooks bounce/event παρόχων ρυθμίζονται με τον email provider σας κατά το onboarding - τα συμβάντα έπειτα εισέρχονται αυτόματα.

Μη αυτόματη εκκαθάριση Bounce

Οι administrators μπορούν να εκκαθαρίσουν κατάσταση bounce μέσω UI ή API:

await subscriptionsApi.clearBounceStatus(userId, 'Email confirmed valid by user');

Μεταβλητές Liquid template

Διαθέσιμες μεταβλητές

Χρησιμοποιήστε αυτές στα email templates σας:

ΜεταβλητήΠεριγραφή
{{ unsubscribe_url }}URL καθολικής διαγραφής
{{ unsubscribe_url_list }}URL διαγραφής για συγκεκριμένη λίστα
{{ category_unsubscribe_url }}Διαγραφή από τη λίστα συνδρομών του email (alias του URL λίστας· επιστρέφει σε καθολικό)
{{ preferences_url }}URL preference center
{{ resubscribe_url }}URL επανεγγραφής (για win-back καμπάνιες)

Παράδειγμα χρήσης

<p>Don't want to receive these emails?</p>
<p>
<a href="{{ unsubscribe_url_list }}">Unsubscribe from this list</a>
or
<a href="{{ preferences_url }}">Manage your preferences</a>
</p>

Φίλτρα τμημάτων

Τύποι φίλτρων

Τρεις νέοι τύποι φίλτρων για τμηματοποίηση:

Φίλτρο συνδρομής καναλιού

Στοχεύστε χρήστες βάσει κατάστασης συνδρομής καναλιού:

{
type: 'channel_subscription',
operator: 'subscribed_to_channel', // or 'not_subscribed_to_channel'
channel: 'email',
subscriptionStatus: 'opted_in' // optional: specific status
}

Φίλτρο μέλους λίστας

Στοχεύστε χρήστες βάσει συμμετοχής σε λίστα:

{
type: 'list_membership',
operator: 'member_of_list', // or 'not_member_of_list'
listId: 'list-uuid',
channel: 'email' // optional: specific channel
}

Φίλτρο κατάστασης Bounce

Στοχεύστε χρήστες βάσει εγκυρότητας email:

{
type: 'bounce_status',
operator: 'email_valid' // 'email_valid', 'email_bounced',
// 'email_hard_bounced', 'email_soft_bounced'
}

Περιπτώσεις χρήσης

  1. Αποστολή μόνο σε χρήστες με opt-in:

    { type: 'channel_subscription', operator: 'subscribed_to_channel',
    channel: 'email', subscriptionStatus: 'opted_in' }
  2. Εξαίρεση bounced emails:

    { type: 'bounce_status', operator: 'email_valid' }
  3. Στόχευση συνδρομητών newsletter:

    { type: 'list_membership', operator: 'member_of_list',
    listId: 'newsletter-list-id' }

Αναφορά API

Η πλήρης αναφορά REST για διαχείριση συγκατάθεσης καναλιού, λιστών συνδρομών και συμμετοχής σε λίστες - κάθε endpoint με παραδείγματα αιτήματος/απόκρισης και απαιτούμενα scopes - βρίσκεται στη σελίδα Subscriptions API.

Δύο πράγματα που αξίζει να γνωρίζετε πριν την κλήση:

  • Μπορείτε να εγγράψετε κατά τη δημιουργία. Το POST /users δέχεται προαιρετικό array subscriptions που εφαρμόζεται στην ίδια κλήση - δείτε το Users API. Οι συνδρομές κατά τη δημιουργία δεν επαναφέρουν ποτέ υπάρχον opt-out· η εκ νέου επιλογή opt-in μιας διαγραμμένης επαφής εξακολουθεί να απαιτεί το αποκλειστικό endpoint εγγραφής παρακάτω.
  • Το :userId σε αυτές τις διαδρομές είναι το εσωτερικό id επαφής του Joryio (όπως επιστρέφεται από το Users API), όχι το εξωτερικό σας user id.

Ένα τυπικό opt-in - εγγράψτε επαφή σε λίστα στο κανάλι email:

curl -X POST https://api-eu1.joryio.com/subscriptions/contacts/665f1c2ab3d4e5f6a7b8c9d0/lists/3f6c1a2e-9d4b-4f0a-8c7e-1b2d3e4f5a6b \
-H "Authorization: Bearer jry_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "channel": "email", "source": "api", "consentText": "Weekly newsletter signup" }'

Δημόσια endpoints (χωρίς έλεγχο ταυτότητας)

// One-click unsubscribe (RFC 8058)
POST /u/:token

// Get preferences
GET /preferences/:token

// Save preferences
POST /preferences/:token
Body: { channels: [...], lists: [...] }

SDK Endpoints (έλεγχος ταυτότητας με κλειδί SDK)

Αυτά τα endpoints χρησιμοποιούνται από το Web SDK και ελέγχονται μέσω κεφαλίδας X-SDK-Key.

// Update channel subscription
POST /v1/subscriptions/channel
Headers: { 'X-SDK-Key': 'jry_sdk_web_...' }
Body: {
channel: 'email' | 'sms' | 'whatsapp' | 'push' | 'viber',
status: 'optedIn' | 'subscribed' | 'unsubscribed',
userId?: string, // Use if user is identified
anonymousId?: string // Use if user is anonymous
}

// Update subscription group (list) membership
POST /v1/subscriptions/group
Headers: { 'X-SDK-Key': 'jry_sdk_web_...' }
Body: {
groupId: string, // List ID
channel: 'email' | 'sms' | 'whatsapp' | 'push' | 'viber',
action: 'subscribe' | 'unsubscribe',
userId?: string,
anonymousId?: string
}

Ρύθμιση

Ρυθμίσεις Workspace

Ρυθμίστε τις συνδρομές στις Ρυθμίσεις > Subscriptions:

interface SubscriptionSettings {
listUnsubscribe?: {
enabled: boolean;
includeMailto: boolean;
scope: 'global' | 'list';
};
bounceHandling?: {
softBounceRetryHours: number; // Window for counting soft bounces
softBounceMaxRetries?: number; // Soft bounces in-window before escalating to hard
resubscribeOnEmailChange: boolean; // Clear the invalid flag when the email changes
};
doubleOptIn?: {
defaultEnabled: boolean;
confirmationEmailTemplateId?: string;
};
bccEmail?: string; // For compliance archiving
}

Συμμόρφωση

Δικλίδα ασφαλείας υποσέλιδου διαγραφής

Για να μη σταλεί ποτέ marketing email χωρίς τρόπο opt-out:

  • Compliance footer block - ένα content block compliance_footer (δημιουργείται αυτόματα με λογική προεπιλογή την πρώτη φορά που ενεργοποιείτε το auto-append) περιέχει τη διεύθυνσή σας και συνδέσμους διαγραφής/προτιμήσεων. Αναφερθείτε σε αυτό οπουδήποτε με {{ blocks.compliance_footer }} ή επεξεργαστείτε το στα Content Blocks.
  • Auto-append toggle - Ρυθμίσεις → Subscriptions → «Auto-append an unsubscribe footer when missing». Όταν είναι ενεργό, η διαδρομή αποστολής email προσθέτει το compliance footer σε κάθε marketing email (που φέρει κεφαλίδα List-Unsubscribe) του οποίου το σώμα δεν έχει σύνδεσμο διαγραφής/προτιμήσεων. Λειτουργεί fail-open: δεν μπλοκάρει ποτέ αποστολή.
  • Προειδοποίηση composer - ο composer email καμπάνιας εμφανίζει προειδοποίηση όταν το σώμα email δεν έχει σύνδεσμο διαγραφής, ώστε να το εντοπίσετε πριν την αποστολή. Προσφέρει δύο ενσωματωμένες συντομεύσεις - Add a link (ανοίγει τον editor για εισαγωγή) και enable auto-append footer (μεταβαίνει στη σελίδα Subscriptions) - και μπορεί να απορριφθεί για τη συνεδρία. Όταν το auto-append είναι ήδη ενεργό, γίνεται πιο ήπια σημείωση πληροφοριών, καθώς το footer προστίθεται για εσάς.

Οι λίστες συνδρομών μπορούν επίσης να επιλεγούν σε SMS, WhatsApp και Viber journey nodes (όχι μόνο email), ώστε η πύλη αποστολής ανά κόμβο να παραλείπει επαφές που διαγράφηκαν από αυτή τη λίστα σε οποιοδήποτε κανάλι.

GDPR (Ευρώπη)

  • Χρησιμοποιήστε double opt-in για χρήστες ΕΕ
  • Αποθηκεύστε κείμενο και timestamp συγκατάθεσης
  • Παρέχετε εύκολη πρόσβαση σε preference center
  • Τιμάτε αμέσως αιτήματα διαγραφής
  • Διατηρείτε audit log όλων των αλλαγών συνδρομής

CAN-SPAM (Ηνωμένες Πολιτείες)

  • Συμπεριλάβετε φυσική ταχυδρομική διεύθυνση στα email
  • Τιμάτε αιτήματα διαγραφής εντός 10 εργάσιμων ημερών (το Joryio το κάνει αμέσως)
  • Σαφής αναγνώριση εμπορικών email
  • Όχι παραπλανητικές γραμμές θέματος

TCPA (Ηνωμένες Πολιτείες - SMS)

  • Λάβετε ρητή γραπτή συγκατάθεση πριν από αποστολή SMS
  • Τιμάτε άμεσα τα keywords STOP
  • Παρέχετε οδηγίες opt-out στα μηνύματα
  • Το Joryio χειρίζεται αυτόματα: STOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT, REVOKE, OPTOUT (το πάντα ενεργό αγγλικό σύνολο βάσης), καθώς και τοπικοποιημένες προεπιλογές (π.χ. Hebrew הסר) και τυχόν προσαρμοσμένα keywords που προσθέτετε

Χειρισμός SMS και WhatsApp Keywords

Το Joryio επεξεργάζεται αυτόματα εισερχόμενα keywords, αντιστοιχίζοντάς τα χωρίς διάκριση πεζών/κεφαλαίων και στίξης (Stop, STOP!, " stop " μετρούν όλα). Το STOPALL είναι το μόνο ενσωματωμένο opt-out για όλο το κανάλι (μαζί με τυχόν προσαρμοσμένα keywords opt-out για όλο το κανάλι που ρυθμίζετε). Κάθε άλλο keyword opt-out περιορίζεται στην ομάδα συνδρομών ανά αριθμό / ανά WABA στην οποία έφτασε το μήνυμα και το START επανεγγράφει την ίδια ομάδα αριθμού/WABA. Για το πλήρες σύνολο - αγγλικό σύνολο βάσης (με REVOKE / OPTOUT), τοπικοποιημένες προεπιλογές και προσαρμοσμένες προσθήκες - καθώς και τον κανόνα επανεγγραφής, δείτε Keywords παραπάνω.

SMS

KeywordΕνέργεια
STOP, UNSUBSCRIBE, CANCEL, END, QUIT, REVOKE, OPTOUTOpt-out από την ομάδα του αριθμού λήψης
STOPALLOpt-out σε όλο το κανάλι (κάθε αριθμός)
START, YES, UNSTOP, SUBSCRIBE, OPTINΕπανεγγραφή στην ομάδα του αριθμού λήψης
HELP, INFOΑποστολή μηνύματος βοήθειας
Τοπικοποιημένες προεπιλογές (π.χ. הסר, PARE, ARRET) + προσαρμοσμένες προσθήκεςΊδια ενέργεια με την κατηγορία τους παραπάνω

WhatsApp

KeywordΕνέργεια
STOP, UNSUBSCRIBE, CANCEL, END, QUIT, OPTOUT, OPT-OUTOpt-out από την ομάδα του WABA λήψης
STOPALLOpt-out σε όλο το κανάλι (κάθε WABA)
START, UNSTOP, SUBSCRIBE, YES, OPTIN, OPT-INΕπανεγγραφή στην ομάδα του WABA λήψης

Τα εισερχόμενα webhooks επαληθεύονται με υπογραφή - τα πλαστά STOP / START απορρίπτονται και πάροχοι που δεν υποστηρίζουν επαλήθευση εισερχόμενης υπογραφής απορρίπτονται για εισερχόμενα keywords. Αν η ομάδα ανά αριθμό / ανά WABA δεν μπορεί να επιλυθεί, το opt-out εφαρμόζεται με ασφαλή αποτυχία σε όλο το κανάλι.

Το εισερχόμενο SMS webhook ρυθμίζεται στους αριθμούς σας κατά το onboarding - τα keywords επεξεργάζονται αυτόματα.


Βέλτιστες πρακτικές

  1. Χρησιμοποιείτε πάντα κεφαλίδες List-Unsubscribe - βελτιώνει την παραδοσιμότητα και το Gmail εμφανίζει κουμπί διαγραφής.

  2. Εφαρμόστε double opt-in για marketing - καλύτερη ποιότητα λίστας και συμμόρφωση.

  3. Παρακολουθείτε ποσοστά bounce - υψηλά ποσοστά bounce βλάπτουν τη φήμη αποστολέα.

  4. Δημιουργήστε τμήματα βάσει κατάστασης συνδρομής - στέλνετε μόνο σε χρήστες με opt-in.

  5. Κάντε τη διαγραφή εύκολη - ένα κλικ, χωρίς απαίτηση σύνδεσης.

  6. Διατηρείτε audit logs - απαιτούνται για συμμόρφωση και βοηθούν σε διαφορές.

  7. Δοκιμάστε το preference center - βεβαιωθείτε ότι οι χρήστες μπορούν εύκολα να διαχειρίζονται προτιμήσεις.

  8. Χρησιμοποιήστε διαγραφή ανά λίστα - επιτρέπει στους χρήστες να παραμένουν εγγεγραμμένοι σε ορισμένο περιεχόμενο.


Αντιμετώπιση προβλημάτων

Συνήθη ζητήματα

Τα email δεν αποστέλλονται

  • Ελέγξτε αν ο χρήστης έχει κατάσταση unsubscribed για το κανάλι email
  • Ελέγξτε αν το email έχει επισημανθεί ως μη έγκυρο λόγω bounces
  • Επαληθεύστε την κατάσταση bounce στο προφίλ χρήστη

Η διαγραφή δεν λειτουργεί

  • Ελέγξτε τη λήξη token (προεπιλογή 90 ημέρες)
  • Επαληθεύστε ότι η υπογραφή token είναι σωστή
  • Ελέγξτε το audit log για σφάλματα

Το bounce δεν επεξεργάζεται

  • Επαληθεύστε ότι το URL webhook έχει ρυθμιστεί σωστά στον email provider
  • Ελέγξτε τον έλεγχο ταυτότητας webhook
  • Ελέγξτε τα error logs

Debugging

Ελέγξτε την κατάσταση συνδρομής:

# API call
curl -X GET "https://api-eu1.joryio.com/subscriptions/contacts/{userId}" \
-H "Authorization: Bearer {token}"

Δείτε το audit log:

curl -X GET "https://api-eu1.joryio.com/subscriptions/contacts/{userId}/history" \
-H "Authorization: Bearer {token}"

Τοπικοποιημένες προεπιλογές (ενεργές από προεπιλογή, προσθετικές)

Συνηθισμένες λέξεις opt-out / opt-in / βοήθειας σε άλλες γλώσσες αναγνωρίζονται εξαρχής, ώστε μια επαφή να μπορεί να επιλέξει opt-out στη δική της γλώσσα. Παραδείγματα:

ΓλώσσαOpt-outOpt-inΒοήθεια
Hebrewהסר, הסרה, עצור, ביטול, הפסקהתחל, הצטרף, כןעזרה, מידע
SpanishPARE, BASTA, CANCELAR, ALTOSI, ALTAAYUDA
FrenchARRET, ARRÊT, DESABONNEROUIAIDE
GermanSTOPP, ABBESTELLENJAHILFE
PortuguesePARAR, SAIR--

Προσαρμοσμένες προσθήκες (ανά οργανισμό)

Στις Ρυθμίσεις → SMS / Subscriptions μπορείτε να προσθέσετε δικά σας keywords opt-out, opt-in και βοήθειας (καθώς και δικά σας keywords opt-out για όλο το κανάλι). Το σύνολο βάσης και οι τοπικοποιημένες προεπιλογές εμφανίζονται μόνο για ανάγνωση δίπλα στην επεξεργάσιμη προσαρμοσμένη λίστα, επομένως διαχειρίζεστε μόνο τις προσθήκες σας. Τα SMS keywords ρυθμίζονται σε επίπεδο οργανισμού.

WhatsApp

ΤύποςKeywords
Opt-outSTOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT, OPTOUT, OPT-OUT
Opt-inSTART, UNSTOP, SUBSCRIBE, YES, OPTIN, OPT-IN

Μόνο το STOPALL ισχύει για όλο το κανάλι· κάθε άλλο keyword opt-out παραπάνω περιορίζεται στην ομάδα ανά αριθμό / ανά WABA. Το ίδιο ισχύει για τυχόν προσαρμοσμένα keywords opt-out για όλο το κανάλι που ρυθμίζετε για SMS - συμπεριφέρονται όπως το STOPALL, ενώ τα συνηθισμένα keywords opt-out παραμένουν περιορισμένα στον αριθμό όπου έφτασε το μήνυμα.

Πώς η αντιστοίχιση ανέχεται «de minimis» παραλλαγές

Η εισερχόμενη αντιστοίχιση δεν επηρεάζεται από πεζά/κεφαλαία ούτε από στίξη/κενά, σύμφωνα με την καθοδήγηση CTIA ότι μικρές («de minimis») παραλλαγές πρέπει να τιμώνται. Πριν από την αντιστοίχιση, κανονικοποιούνται τόσο η πρώτη λέξη όσο και ολόκληρο το σώμα μηνύματος: αφαιρούνται η περιβάλλουσα στίξη και τα κενά και τα γράμματα ASCII μετατρέπονται σε κεφαλαία. Επομένως τα Stop, STOP!, " stop " και STOP. μετρούν όλα ως STOP.

Η κανονικοποίηση είναι ασφαλής για μη ASCII - τα Hebrew, Arabic και άλλα συστήματα γραφής δεν έχουν πεζά/κεφαλαία, άρα περνούν αμετάβλητα (הסר παραμένει הסר). Αφαιρούνται μόνο η περιβάλλουσα στίξη και τα κενά.

Επανεγγραφή μετά από opt-out

Ο τρόπος επιστροφής μιας επαφής εξαρτάται από τον τρόπο με τον οποίο επέλεξε opt-out:

  • Έστειλε STOP (ή άλλο keyword opt-out) → πρέπει να στείλει START. Όταν μια επαφή επιλέγει opt-out με απάντηση SMS, ο πάροχος (π.χ. Twilio) τοποθετεί block σε επίπεδο παρόχου σε αυτόν τον αριθμό. Δεν υπάρχει API για εκκαθάρισή του - ο μόνος τρόπος επιστροφής είναι η επαφή να στείλει START (ή άλλο keyword opt-in) από το ίδιο τηλέφωνο. Το Joryio δεν επανεγγράφει ποτέ αναγκαστικά κάποιον που έστειλε STOP· η επανεγγραφή ξεκινά πάντα από την επαφή.
  • Επέλεξε opt-out σε hosted page / preference center → μπορεί να επιλέξει opt-in στον ιστότοπο. Μια επαφή που διαγράφηκε μέσω συνδέσμου ή preference center (όχι με SMS) μπορεί να εγγραφεί ξανά με τον ίδιο τρόπο - π.χ. μέσω {{ resubscribe_url }} ή ενεργοποιώντας ξανά SMS στο preference center.

Προτεραιότητα και ασφαλής αποτυχία

  • Η καθολική διαγραφή καναλιού υπερισχύει των ομάδων. Μια καθολική διαγραφή καναλιού - π.χ. ολόκληρο το κανάλι SMS ή WhatsApp της επαφής ορισμένο σε unsubscribed - είναι hard kill-switch που υπερισχύει κάθε συνδρομής ανά ομάδα. Αν το κανάλι είναι καθολικά unsubscribed, καμία ομάδα ανά αριθμό δεν μπορεί να ενεργοποιήσει ξανά αποστολές προς την επαφή.
  • Ασφαλής αποτυχία σε επίπεδο καναλιού. Αν η ομάδα ανά αριθμό / ανά WABA δεν μπορεί να επιλυθεί, το σύστημα εφαρμόζει την επιλογή opt-out σε όλο το κανάλι, αντί να διακινδυνεύσει συνέχιση μηνυμάτων προς επαφή που προσπάθησε να διαγραφεί.

Ασφάλεια εισερχομένων

  • Τα εισερχόμενα webhooks επαληθεύονται με υπογραφή· πλαστά μηνύματα STOP / START απορρίπτονται.
  • Πάροχοι που δεν υποστηρίζουν επαλήθευση εισερχόμενης υπογραφής απορρίπτονται για εισερχόμενα keywords.
Τα αλφαριθμητικά ονόματα αποστολέα δεν μπορούν να λάβουν STOP

Μια ομάδα ανά αριθμό λειτουργεί μόνο σε αποστολέα που μπορεί να λάβει απαντήσεις. Ένας αριθμός τηλεφώνου είναι αμφίδρομος - οι παραλήπτες μπορούν να απαντήσουν, επομένως λειτουργούν τα STOP / opt-out. Ένα αλφαριθμητικό όνομα αποστολέα είναι μονόδρομο - οι παραλήπτες δεν μπορούν να απαντήσουν, άρα τα keywords STOP / opt-out δεν λειτουργούν σε αυτό. Η διαθεσιμότητα αλφαριθμητικών ονομάτων αποστολέα εξαρτάται από τη ρύθμιση του παρόχου SMS.