mirror of
https://github.com/pacnpal/django-anymail.git
synced 2025-12-20 03:41:05 -05:00
SparkPost: initial open and AMP tracking events
* Add SPARKPOST_TRACK_INITIAL_OPEN_AS_OPENED boolean setting, default False, controlling whether to report SparkPost "Initial Open" events as Anymail "opened". * Add mapping for SparkPost "AMP Click", "AMP Open", and "AMP Initial Open" events. * Update outdated doc references to SparkPost site Closes #206
This commit is contained in:
@@ -8,6 +8,7 @@ from .base import AnymailBaseWebhookView
|
||||
from ..exceptions import AnymailConfigurationError
|
||||
from ..inbound import AnymailInboundMessage
|
||||
from ..signals import inbound, tracking, AnymailInboundEvent, AnymailTrackingEvent, EventType, RejectReason
|
||||
from ..utils import get_anymail_setting
|
||||
|
||||
|
||||
class SparkPostBaseWebhookView(AnymailBaseWebhookView):
|
||||
@@ -64,12 +65,21 @@ class SparkPostTrackingWebhookView(SparkPostBaseWebhookView):
|
||||
'delay': EventType.DEFERRED,
|
||||
'click': EventType.CLICKED,
|
||||
'open': EventType.OPENED,
|
||||
'amp_click': EventType.CLICKED,
|
||||
'amp_open': EventType.OPENED,
|
||||
'generation_failure': EventType.FAILED,
|
||||
'generation_rejection': EventType.REJECTED,
|
||||
'list_unsubscribe': EventType.UNSUBSCRIBED,
|
||||
'link_unsubscribe': EventType.UNSUBSCRIBED,
|
||||
}
|
||||
|
||||
# Additional event_types mapping when Anymail setting
|
||||
# SPARKPOST_TRACK_INITIAL_OPEN_AS_OPENED is enabled.
|
||||
initial_open_event_types = {
|
||||
'initial_open': EventType.OPENED,
|
||||
'amp_initial_open': EventType.OPENED,
|
||||
}
|
||||
|
||||
reject_reasons = {
|
||||
# Map SparkPost event.bounce_class: Anymail normalized reject reason.
|
||||
# Can also supply (RejectReason, EventType) for bounce_class that affects our event_type.
|
||||
@@ -96,6 +106,19 @@ class SparkPostTrackingWebhookView(SparkPostBaseWebhookView):
|
||||
'100': (RejectReason.OTHER, EventType.AUTORESPONDED), # Challenge-Response
|
||||
}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
# Set Anymail setting SPARKPOST_TRACK_INITIAL_OPEN_AS_OPENED True
|
||||
# to report *both* "open" and "initial_open" as Anymail "opened" events.
|
||||
# (Otherwise only "open" maps to "opened", matching the behavior of most
|
||||
# other ESPs.) Handling "initial_open" is opt-in, to help avoid duplicate
|
||||
# "opened" events on the same first open.
|
||||
track_initial_open_as_opened = get_anymail_setting(
|
||||
'track_initial_open_as_opened', default=False,
|
||||
esp_name=self.esp_name, kwargs=kwargs)
|
||||
if track_initial_open_as_opened:
|
||||
self.event_types = {**self.event_types, **self.initial_open_event_types}
|
||||
super().__init__(**kwargs)
|
||||
|
||||
def esp_to_anymail_event(self, event_class, event, raw_event):
|
||||
if event_class == 'relay_message':
|
||||
# This is an inbound event
|
||||
|
||||
Reference in New Issue
Block a user