Integration Considerations

Data Mapping

You'll need to create a plan for how to keep your data models synchronized. Data must be pulled from 360Alumni's API rather than pushed via an event-driven integration model. So your integration needs to periodically scan the data and provide a change log to act upon.

Once you have decided upon your synchronization model, you need to identify which fields you are going to keep synchronized between the two systems. Use the User Object reference page to help with your mapping. You can also download a copy of the following spreadsheet to use for your mapping:

  1. Open the 360Alumni User Data Mapping Template.
  2. Select File > Download as >, from the open template.

  3. Select your preferred format to save the spreadsheet:
  4. Excel
  5. OpenDocument
  6. Comma separated values (CSV)
  7. Tab separated values (TSV)
  8. The template is sorted by JSON field column. You might find it useful to do your mapping by resorting your spreadsheet by the Preferred Order column.
Middleware

Another consideration is the middleware that provides the "bridge" between 360Alumni and your database. Middleware provides enforcement of business logic such as conversion of the data format or structures. Another example of middleware tasks is adding a layer of protection so bad data or glitches can not create chaos in the destination system. An example of middleware is Zapier, which is a middleware "clearinghouse" - offering prepackaged middleware "scripts" for thousands of software applications. 360Alumni has a privately available "Zap" which can be used by our clients who run Salesforce.

Synchronization

One method of integrating your application with 360Alumni is via a polling and synchronization method. This involves checking the database periodically for changes and then updating records accordingly. A polling and sync integration works by running a script that checks for updates and then will update a target based on changes. You can make these integrations two-way by simply applying the business logic you create to both checks.

The following integration example uses a CRM to show how a sync integration can work. Awesome University has a CRM that they use to keep track of their alumni and ensure they can keep track of their donations. They have recently become a partner with 360Alumni and would like to ensure that their alumni database in their CRM and 360Alumni remains in sync. In order to accomplish this they will be setting up a sync with 360Alumni using the "Users" endpoint of the API.

Step 1: Determine the Business Requirements of your Integration

For Awesome University's integration they have determined they want to perform a two way sync with 360Alumni and the contacts in their CRM system. They determined this by finding out the business requirements by talking with stakeholders in their organization. This involved a short series of meetings where they discussed what data they wanted to keep in sync with 360Alumni. They decided upon a two way sync because it would allow them to maintain their alumni directory both organically and still be able to manage it through their CRM.

Step 2: Decide What Data to Synchronize

Awesome University had to decide what parts of their contact data they wanted to keep in sync, so they referred to 360Alumni's field list and settled upon the first name, last name, email, and phone number fields only. They did this because they had only maintained these pieces of contact information in their CRM so they wanted to get them updated as users provided updates. They could have included additional fields but chose a lean approach for phase 1 of their integration.

Step 3: Create the Synchronization Script

Awesome University maintains a couple of in house servers so they decided their script will be written in node.js and run once a day at 1 AM on one of their linux environments. Their script will simply look at records that were changed in each system and then update or create records on each of the respective environments. This also allows Awesome University to put in any transformations they need.

Name

Type

Required

Description

Format

amount

number

Required

Words

campaign_id

number

Required

Words

created_at

string

Words

Words

first_name

string

Words

id

string

Words

Words

last_name

string

Words

user_id

number

Words

JSON Donation Object Sample

The following JSON Donation object is suitable for copying.

[
 {
   "id": "14",
   "campaign_id": 16,
   "user_id": 1102,
   "first_name": "Maria",
   "last_name": "Reile",
   "amount": 15,
   "created_at": "2013-12-12 22:59:38",
   "transaction_id": "5770260782"
 }
]

Name

Type

Required

Description

Format

ambassadors

array of ambassador objects

optional

See ambassador object below.

author

author object

optional

See the author object below.

createdAt

string

The date this campaign record was created.

.YYYY-MM-DD Year-Month-Day

details

string

The detailed description of the organisation and campaign.

end_date

string

The date the campaign ends.

.YYYY-MM-DD Year-Month-Day

goal

number

The monetary goal for the campaign,

id

number

Required

A unique ID for this campaign auto-generated by 360Alumni.

image

string

A URL to an image representing the campaign or organization.

URL

islnactive

number

The status of whether the campaign is active. 1: is active 0: is inactive

raised

number

The monetary amount raised by the campaign.

start_date

string

The date the campaign starts.

.YYYY-MM-DD Year-Month-Day

thank_you_message

string

A thank-you message that can be sent to donors.

title

string

Required

The title for the campaign.

type

string

The type of the campaign length such as short or ongoing.

updatedAt

string

The date this campaign record was modified.

.YYYY-MM-DD Year-Month-Day

Ambassador Object

Name

Type

Required

Format

user_id

number

Required

The user ID identifying an ambassador for the campaign generated by 360Alumni. See also the User Object.

first_name

string

Required

The ambassador's first name.

last_name

string

Required

The ambassador's last name.

JSON Campaign Object Sample

{
  "id": 17,
  "title": "Aspiring Director's Fund",
  "details": "<p>The Motion Picture Association (MPA) and the Asia Pacific Screen Awards (APSA) gives an opportunity to aspiring filmmakers with the MPA APSA Academy Film Fund. MPA APSA Academy Film Funds is a unique initiative which has aided aspiring film makers in a lot of development in new film projects.</p>",
  "goal": 501,
  "thank_you_message": "Dear #name#,\r\n\r\nThank you for your $#amount# donation to the #title# campaign! We truly appreciate your support.\r\nEvery bit helps, and you've taken us one step closer to achieving our goal.\r\nCheck back often to see which of your friends have donated, and the progress we've made. \r\n\r\nThanks for helping us to make this our most successful year yet!\r\n\r\nSincerely, 360Alumni Support",
  "type": "short",
  "start_date": "2013-11-15 00:00:00",
  "end_date": "2017-01-31 00:00:00",
  "createdAt": "2013-11-15 17:33:07",
  "updatedAt": "2016-06-16 11:42:09",
  "isInactive": null,
  "author": {
    "user_id": 1092,
    "first_name": "Georgette",
    "last_name": "Lucas"
  },
  "raised": "465",
  "image": "/cdn/images/f19cb30cf19d512a9de8f487a5bc1d13.jpg",
  "ambassadors": [
      {
      "user_id": 1103,
      "first_name": "Ken",
      "last_name": "Richardson"
      }
   ]
}

JSON Field
(* = Required)

JSON Type (size)

Valid Values

Description

Format

about
text
A text description of the user.
activated_at
string (255)
The date the user's account was activated.
YYYY-MM-DD Year-Month-Day
admin_notes
text
Notes by the client administrator.

approved
number (6)
1, 0
The user's approval status.
1: The user's account is approved.
0: The user's account is not approved.
bad_email
number (11)
1, 0
The status of the validity of the email address. See also the email field.
1: Email is valid.
0: Email is not valid.
client_id
number (11)
The client ID.
createdAt
string (255)
The date the user's account was created.
YYYY-MM-DD Year-Month-Day
custom_fields
array
An array of optional custom-defined fields.
{"custom-field-name" : "custom-field-value" },
dob_day
number (11)
01 - 31
Date of birth day. The two digit day in the month of the user's birth day.
DD
dob_month
number (11)
01 - 12
Date of birth month. The two digit month of the user's birth day.
MM
dob_year
number (11)
Date of birth year. The year of the user's birthday.
YYYY
email*
string (255)
The user's email address
emma_member_id
string (255)
The user's EMMA member number from the EMail Marketing Association.
enabled
number (11)
1, 0
The status of whether the user's account is enabled or not.
1: enabled
0: not enabled
facebook_link
string (255)
The user's facebook URL link.
URL
first_login
number (11)
1, 0
The status of whether the user has logged in for the first time.
1: The user has logged in at least once.
0: The user has not logged in yet.
first_name*
string (255)
User's first name.
gender
character (1)
m, f
The user's gender.
groups
array
An array of optional user group names (string) of which this user is a member.
For example, "admin", "read-only", and so on.
groups [ "group-name1", "group-name2" ]
hard_bounce
number (11)
Number of email hard bounces.
When an email is rejected by a subscriber's email server due to a permanent delivery error, it's called a hard bounce.
home_address1
string (255)
The first line of the home address.
home_address2
string (255)
The second line of the home address.
home_city
string (255)
The city of the home address.
home_country
number (11)
The two-letter postal abbreviation for the country of the home address.
home_geohash
The home geographic location in the geohash form of a short string of letters and digits.
home_geohash_l1
The home geohash value to 1 digit precision.
home_geohash_l2
The home geohash value to 2 digit precision.
home_geohash_l3
The home geohash value to 3 digit precision.
home_geohash_l4
The home geohash value to 4 digit precision.
home_geohash_l5
The home geohash value to 5 digit precision.
home_geohash_l6
The home geohash value to 6 digit precision.
home_lat
number (10.7)
The geographical latitude of the home address.
home_lng
number (10.7)
The geographical longitude of the home address.
home_phone
string (255)
User's home telephone number.
home_state
number (11) ?
The two-letter postal abbreviation for the state of the home address.
SS
home_zipcode
string (255)
The postal zip code of the home address.
#####[-####]
image
A picture of the user.
inst_id
string (255)
instagram_link
string(255)
The user's Instagram URL link.
URL
isConfirmed
1, 0
isPrimary
1, 0
is_import_user
number (6)
1, 0
The status of whether the user's account was created from an import or not.
1: The user's account is imported.
0: The user's account is not imported.
last_activity_at
string (255)
The date of last activity for the user's record.
YYYY-MM-DD Year-Month-Day
last_login
string (255)
The date the user last logged in.
YYYY-MM-DD Year-Month-Day
last_name*
string (255)
The user's last name.
linkedin_link
string (255)
The user's LinkedIn URL link.
URL
maiden_name
string (255)
The user's maiden name.
middle_name
string (255)
The user's middle name.
mobile_phone
string (255)
The user's mobile phone number.
name_suffix
A name suffix (such as PhD or Jr.)
name_title
A name title (such as Ms, Mr, Dr.)
nickname
string (255)
A user's nickname.
preferred_email
number (6)
The user's preferred email.
preferred_phone
number (6)
The user's preferred email.
profile_url
string (255)
Personal URL. Allow to access own personal profile page.
salt
string (255)
secondary_email
string (255)
A secondary user email.
soft_bounce
number (11)
The number of email soft bounces.
When an email is rejected by a subscriber's email server due to a temporary email delivery issue, it's called a soft bounce.
tags
array
An array of optional tag names (string) associated with this user. Tags provide labels representing any subject that can be applied to any user.
tags [ "tag-name1", "tag-name2" ]
terms_and_conditions
number (6)
1, 0
The status of whether the user has agreed to the Terms and Conditions.
1: has agreed
0: has not agreed
twitter_link
string (255)
unsubscribe
number (11)
updatedAt
string (255)
The date the user's account was last updated.
YYYY-MM-DD Year-Month-Day
user_career_info
user_id*
auto-generated by 360Alumni
user_industry
user_language
user_publication
array
user_skill
user_study_area*
array
auto-generated by 360Alumni
user_timezone
string (255)
The timezone of the user's home address.
username
string (255)
website
string (255)
The work website URL.
URL
work_address1
string (255)
The first line of the work address.
work_address2
string (255)
The second line of the work address.
work_city
string (255)
The city of the work address.
work_country
number (11)
The two-letter postal abbreviation for the country of the work address.
work_geohash
The work geographic location in the geohash form of a short string of letters and digits.
work_geohash_l1
The work geohash value to 1 digit precision.
work_geohash_l2
The work geohash value to 2 digit precision.
work_geohash_l3
The work geohash value to 3 digit precision.
work_geohash_l4
The work geohash value to 4 digit precision.
work_geohash_l5
The work geohash value to 5 digit precision.
work_geohash_l6
The work geohash value to 6 digit precision.
work_lat
number (10.7)
The geographical latitude of the work address.
work_lng
number (10.7)
The geographical longitude of the work address.
work_phone
string (255)
User's work telephone number.
work_state
number (11)
The two-letter postal abbreviation for the state of the work address.
SS
work_zipcode
string (255)
The postal zip code of the work address.
#####[- ####]
year_graduated
number (11)
The year the user graduated.
YYYY

JSON User Object Sample

The following JSON User object is suitable for copying.

[
 {
   "about": "Lorem ipsum Lorem ipsum",
   "activated_at": "1970-01-01 00:00:00",
   "admin_notes": null,
   "approved": 1,
   "bad_email": 0,
   "client_id": 5,
   "createdAt": "2013-11-08 11:53:41",
   "custom_fields": [],
   "dob_day": null,
   "dob_month": null,
   "dob_year": null,
   "email": null,
   "emma_member_id": null,
   "enabled": 1,
   "facebook_link": null,
   "first_login": 1,
   "first_name": "360Alumni",
   "gender": null,
   "groups": [
     "admin"
   ],
   "hard_bounce": 0,
   "home_address1": null,
   "home_address2": null,
   "home_city": "westport",
   "home_country": null,
   "home_geohash": null,
   "home_geohash_l1": null,
   "home_geohash_l2": null,
   "home_geohash_l3": null,
   "home_geohash_l4": null,
   "home_geohash_l5": null,
   "home_geohash_l6": null,
   "home_lat": null,
   "home_lng": null,
   "home_phone": "123-456-7991",
   "home_state": null,
   "home_zipcode": "06880",
   "image": "/cdn/images/e7dba1170d2a97fcc4bef6c4afaf2f99.png",
   "inst_id": "0034100000AQCVFAA5",
   "instagram_link": null,
   "isConfirmed": 1,
   "isPrimary": 1,
   "is_import_user": 0,
   "last_activity_at": "1970-01-01 00:00:00",
   "last_login": "2014-09-02 13:37:25",
   "last_name": "Demo",
   "linkedin_link": null,
   "maiden_name": null,
   "middle_name": null,
   "mobile_phone": "123-456-7890",
   "name_suffix": null,
   "name_title": null,
   "nickname": null,
   "preferred_email": null,
   "preferred_phone": null,
   "salt": "",
   "secondary_email": [],
   "soft_bounce": 11,
   "tags": [],
   "terms_and_conditions": 1,
   "twitter_link": null,
   "unsubscribe": 0,
   "updatedAt": "2016-10-28 03:04:02",
   "user_career_info": [],
   "user_id": 1090,
   "user_industry": [],
   "user_language": [],
   "user_skill": [],
   "user_study_area": [
     {
       "study_area": "Associate in Fine Arts",
       "year": [
         "2012"
       ],
       "study_organization": "business"
     }
   ],
   "user_timezone": null,
   "username": null,
   "website": null,
   "work_address1": null,
   "work_address2": null,
   "work_city": null,
   "work_country": null,
   "work_geohash": "9yegjbpfrcz",
   "work_geohash_l1": "9",
   "work_geohash_l2": "9y",
   "work_geohash_l3": "9ye",
   "work_geohash_l4": "9yeg",
   "work_geohash_l5": "9yegj",
   "work_geohash_l6": "9yegjb",
   "work_lat": "37.0902400",
   "work_lng": "-95.7128910",
   "work_phone": null,
   "work_state": null,
   "work_zipcode": null,
   "year_graduated": 2012
 }
]

Type

Format

Description

Date

YYYY-MM-DD

Year-Month-Day. Example: 2018-03-21

Realize the power of your network

Unlock your organization’s potential

Get Demo