Related links: Product Requirements Brief, Technical Spec

In 2019, we launched sending Activate Account emails to new users who are created via Chompy CSV import. The Activate Account email prompts the new user to activate their DoSomething account by setting a password upon visiting a URL in the email content.

This is implemented via the following steps:

  • When the Chompy import creates a new (password-less) user in Northstar, it executes a POST /v2/resets request to Northstar, passing the new Northstar user id as the required id parameter, and a password reset type (e.g. rock-the-vote-activate-account) as the required type parameter.

  • When Northstar receives a POST /v2/resets request, it will:
    • Generate a valid password reset URL for the given user id and reset type, e.g. https://identity.dosomething.org/password/reset/rock-the-vote-activate-account/0b68a813dc3354af96a1749be77ed8a0e8d03de12940ea7310a382c28ad?email=puppet+sloth%40dosomething.org
    • Create a call_to_action_email event in Customer.io (via Blink) for the user, passing the password URL as an actionUrl parameter and reset type as a type parameter.
  • When Customer.io receives a call_to_action_email event with type equal to rock-the-vote-activate-account or breakdown-activate-account, it sends an email to the user prompting them to visit the given actionUrl to activate their account.

  • When the user visits the Activate Account URL in the email (e.g. https://identity.dosomething.org/password/reset/rock-the-vote-activate-account/:token?email=:email), they are prompted to join DoSomething.org by creating a password.
    • When the password reset URL (/password/reset/:type/:token) has a type route parameter that contains activate-account, the form displays “Activate Account” copy instead of the default “Forgot Password” copy. We match by substring so multiple activate account types can re-purpose this form.
  • Upon creating a password and submitting the form, Northstar creates a password_updated event in Customer.io for the user, passing the reset type (e.g. rock-the-vote-activate-account) as an updated-via parameter.

  • When Customer.io receives a password_updated event with updated-via containing activate-account, it sends an Account Activated email to the user confirming that they have activated their DoSomething.org account.
    • We match by substring so multiple activate account types can re-purpose this confirmation email.

Creating new Activate Account emails #

Here are the steps for creating a new type of Activate Account email:

  1. In Northstar, add a new valid value that can be sent as the type parameter in a POST /v2/resets request. This value should contain the string activate-account to repurpose re-branding Northstar’s Reset Password form as an Activate Account form, as well as re-purposing the Account Activated Event Triggered Campaign.

  2. In Customer.io, create a new Event Triggered Campaign that sends an email to a user when a call_to_action_email event is created with the new type you’ve added in Step 1.

  3. You’re done! Execute a Northstar POST /resets API request (or call Gateway PHP’s sendUserPasswordReset) with the id of the user to send the email to, along with the new type you’ve added, to send your new type of Activate Account to the user.

Current imports #

We currently use Chompy to import users from three sources:

  • Rock The Vote - sends Activate Account emails

  • Call Power

  • Email subscriptions (Instapage marketing sites, e.g. https://lets.dosomething.org) - sends Activate Account emails for Breakdown subscribers

Retired imports #

  • TurboVote - Imported via Chompy

  • Niche - Imported via Quicksilver

  • AfterSchool - Imported via Quicksilver

  • Celebs Gone Good - Created via Voting App

  • Athletes Gone Good - Created via Voting App

  • Mailchimp - Before we switched to Customer.io, we used Mailchimp to send emails. Grandpa Phoenix had an email opt-in form that would directly add subscribers in Mailchimp, without creating a Drupal user. When we migrated from Mailchimp to Customer.io, the data team ran a one-time import that created users for Mailchimp emails that did not have accounts.