Description

Contains the list of messages split by content (title, text) and media (icons, images) types. Messages pool may be configured in a way to use various combinations of content and media entries to create random or predefined messages for the campaigns.

Structure

class MessagePool(SafeModelWithSignalSwitcher, ModelWithJsonFields, WithArchivation):
    _safedelete_policy = SOFT_DELETE_CASCADE
    name = models.CharField(max_length=100, null=True, blank=True)
    owner = models.ForeignKey(CustomUser, null=False, blank=False, on_delete=models.CASCADE, related_name='msg_pools')
 
    content_mix = deprecate_field(models.NullBooleanField(blank=True))
    media_mix = deprecate_field(models.NullBooleanField(blank=True))
    content_media_mix = models.NullBooleanField(blank=True)
    pairwise_content_media_mix = models.NullBooleanField(blank=True)
    variations = models.CharField(choices=MessagePoolVariations.choices, max_length=100,
                                  default=MessagePoolVariations.IMAGES_ICONS_AND_TITLES_TEXTS)
 
    badge = models.ForeignKey(Image, on_delete=models.SET_NULL, null=True, blank=True, default=None)
    media_package = models.ForeignKey(MessagePoolMediaPackage, on_delete=models.SET_NULL,
                                      null=True, default=None, blank=True, related_name='media_package_pools')
    content_package = models.ForeignKey(MessagePoolContentPackage, on_delete=models.SET_NULL,
                                        null=True, default=None, blank=True, related_name='content_package_pools')
 
    content_parts_json = models.TextField(null=True, blank=True, default=None)
    content_parts = PoolContentPartsField(persistent_field_name='content_parts_json')
    content_tracker = FieldTracker(fields=['content_parts_json', 'content_media_mix', 'messages_count'])
 
    built = models.BooleanField(default=False)
    finished = models.BooleanField(default=False)
    status = models.CharField(max_length=100, choices=MessagePoolStatuses.choices, default=MessagePoolStatuses.default,
                              null=True)
    created_date = models.DateTimeField(auto_now_add=True, null=True)
    buttons = models.TextField(null=True, default=None, blank=True)
    buttons_list = PoolButtonsField(persistent_field_name='buttons')
 
    stateful_limit = models.IntegerField(null=True, default=0)
    optimised = models.NullBooleanField(null=True, default=False)