Sendy_Spec.md 4.2 KB

Sendy Mail List Spec

Using rails to get member groups from kdan cloud.

Using gem Sequel to access sendy mysql db

Features

  1. To create list

    • prefix: [ZCR]
    • manually enter description
  2. To add subscriber into list

    • member_center
      • from_application (member.from_application)
      • comfirmed (member.confirmed_at)
      • location (member.identity.location)
      • language (member.identity.language)
    • iap_service
      • app_series (receipt.product.app.app_series)
      • pack (receipt.product.pack)
      • platform (receipt.product.app.device)
      • subscription_status (kdan.pack_subscriptions)
    • A/B Testing
      • Main version %, default 100%
  3. To prevent unsubscribed, bounced, complaint emails into the list

    • Unsubscribe flag should be considered as global
    • Cache unsubscribed, bounced, complaint emails as black list
  4. To delete list

Models

IAP Service

Kdan

has_many :pack_subscriptions, class: 'KdanPackSubscriptionStatus'

Pack

has_many :products
has_many :subscribed_kdans, class: 'KdanPackSubscriptionStatus'
{
  name:string,
  code:string
}
# C365
Pack.create(name: 'Creativity 365', code: 'C365')
Pack.create(name: 'Creativity 365 Teacher & Student Offer', code: 'C365TS')
Pack.create(name: 'Creativity 365 Education', code: 'C365EDU')
Pack.create(name: 'Creativity 365 Business', code: 'C365BUS')
# D365
Pack.create(name: 'Document 365', code: 'D365')
Pack.create(name: 'Document 365 Volumen Licensing', code: 'D365VL')
# Cloud
Pack.create(name: 'Cloud Pack for Animation Desk', code: 'cloud_pack_ad')
Pack.create(name: 'Cloud Pack for Noteledge', code: 'cloud_pack_nl')
Pack.create(name: 'Cloud Pack for PDF', code: 'cloud_pack_pdf')
Pack.create(name: 'Cloud Pack for Write-on', code: 'cloud_pack_wo')
Pack.create(name: 'Cloud Pack for Pocket Scanner', code: 'cloud_pack_scan')
# Deluxe
Pack.create(name: 'Deluxe Pack for Animation Desk', code: 'deluxe_pack_Ad')
Pack.create(name: 'Deluxe Pack for Noteledge', code: 'deluxe_pack_nl')
Pack.create(name: 'Deluxe Pack for PDF', code: 'deluxe_pack_pdf')
Pack.create(name: 'Deluxe Pack for Write-on', code: 'deluxe_pack_wo')
Pack.create(name: 'Deluxe Pack for Pocket Scanner', code: 'deluxe_pack_scan')

Product

belongs_to :pack

KdanPackSubscriptionStatus

belongs_to :kdan
belongs_to :pack
{
  kdan_id:integer,
  pack_id:integer,
  stauts:[free_trial, active, expired, refund, cancel]
}
  • free_trial: this subscription is in its free trial period.
  • active: this subscription is active now.
  • expired: this subscription is expired now.
  • cancel: this subscription has been canceled on auto-renew.
  • refund: this subscription has been refund.
  • status priority: active > free_trial > expired > refund > cancel

Schedule.rb

  • update KdanPackSubscriptionStatus every 15m
  • select updated receipts in 15min
  • select expired receipts in 15min

CR System

SendyMailList

{
  description:string,
  sendy_list_long_id:string,
  sendy_list_short_id:integer,
  select_criteria:json,
  active_count:integer,
  unsubscribed_count:integer,
  bounced_count:integer,
  bounced_soft_count:integer,
  complaint_count:integer,
  sendy_delete_at:datetime,
}

SendyBlackList

{
  email:string,
  reason: [unsubscribed, bounced, bounced_soft, complaint]
}

Schedule.rb

  • update SendyBlackList every 15m
  • select subscribers.timestamp > 15.minutes.ago

Views

CR System

Select Criteria

  • member_center
    • from_application
    • comfirmed
    • location
    • language
  • iap_service
    • app_series
    • pack
    • platform
    • subscription_status
  • A/B Testing
    • Main version %, default 100%

Search Result

Going to Build up Sendy list [Go]

  • List Name: [ZCR] my list
  • List Count: 100
  • List Content:
    • kdan_id, email, from_application, comfirmed, location, language, app_series, pack, platform

  • List Name: [ZCR] my list ver. A
  • List Count: 100
  • List Content:

    • kdan_id, email, from_application, comfirmed, location, language, app_series, pack, platform
  • List Name: [ZCR] my list ver. B

  • List Count: 100

  • List Content:

    • kdan_id, email, from_application, comfirmed, location, language, app_series, pack, platform