By Wendel Schultz, Senior Software Engineer
Every technology stack provides you with a cursory introduction on how to get started; the proverbial “Hello World” application. At first brush, integrating with Infusionsoft doesn’t always seem straightforward and obvious. There seems to be an impedance mismatch between the API and Infusionsoft functionality.
The keystone to an effective integration is to understand the Infusionsoft Campaign Builder. This article introduces Campaign Builder from a software design perspective to inform your integration strategy and assist you to effectively leverage Infusionsoft.
To Whom It May Concern.
This article is the first in a series to demystify Infusionsoft from a developer perspective. Computer Science-y terms like asynchronous, ordered list, rules engine, batch jobs and use case are littered throughout; they should help you feel warm inside letting you know you’re in the right place.
As a third-party product, you often times don’t view and use Infusionsoft’s software the way Infusionsoft’s customers do. In many instances, we as developers don’t particularly care to. As a matter of intentional design, we don’t get too close. After all, we aren’t practitioners of the product, right? Our business model and customer focus isn’t on the problems Infusionsoft has already solved; rather, it is the additional problems we solve. Why should we get mired with the nuances of Infusionsoft’s user-facing application? Our world is in the API.
My thoughts have been on you and these questions for a long time now. I’d like to provide what insight I can into these considerations and help you get more out of your Infusionsoft integration.
In this article, you will:
- Meet Campaign Builder
- Learn The Four Pillars of the Campaign Builder, identifying use cases
- Plan to Strategize Effectively: Campaign Builder, the API & You
Act I: Campaign Builder
Confessions of an API.
If you’ve worked with Infusionsoft’s API for any amount of time, you’ll agree that maybe a bit too much detail has leaked through. In the early years of our API, we hadn’t grown enough to know how best to provide our developer partners (you) access to this Golden Goose. In particular, Infusionsoft hasn’t historically provided clear abstractions around high-level platform operations.
For example, getting a complete picture for an order requires: getting the order, setting the line items, creating the invoice, adding the invoice items and recording the payments. Further, a subscription renewal is conceptually equivalent but is modeled in different objects lending to little code reuse. Additionally, “magic strings” are the key to success. We expect consumers of raw data to understand the semantics of that data. This makes for unclear usage models and difficult code handoff. The ambiguous documentation challenges the developer community as well.
As developers, one thing we’ve come to expect from an API is the capability to perform the high-level operations that an application affords the user. In this way, we can provide a near-native experience for the integration. At Infusionsoft, we expose much of our data model, but not enough around our business rules surrounding the data.
To get the most out of your integration, you’ll need to lasso the power of Campaign Builder to minimize the statefulness and complexity of your products.
Why Campaign Builder?
At its core, Infusionsoft is all-in-one small business automation; it detects when things should happen and then initiates responses to those things. The automation ties who is interacting, with what experience the business wants for that prospect or customer. Examples of the experience might include:
- Attending a webinar
- Downloading a white paper
- Purchasing a t-shirt
- Subscribing to a newsletter
- Following up after joining some program
- Reminding about renewals
- Extending some sort of customer reward (discount or promo)
- Sending additional information (as part of a sales pipeline)
- Segmenting customers to better understand and serve them
Whatever the experience is, Infusionsoft’s Campaign Builder allows the business to be very intentional about that piece of the customer journey. (Infusionsoft teaches this journey as Lifecycle Marketing) We developers generally don’t like marketing – though ironically we love processing and analyzing the data to identify patterns and trends.
So that’s why. Campaign Builder is the tool a business uses to create and guide a deliberate user experience with that business. It is a workflow authoring tool, where the “workflow” is the “customer experience.” And, ultimately, the customer’s experience matters.
The irony of that sentiment isn’t lost. As a API user, we recognize that your user experience is suboptimal, but know that we are aggressively working towards making right by our API users, because that is an important experience too!
Act II. The Four Pillars of the Campaign Builder
Not to dawdle any longer, the Four Pillars of the Campaign Builder are:
- Campaign Builder is Contact-centric
- Campaign Builder is an Event Engine
- Goals are Events; Sequences are an Ordered List of Pre-Defined Automated Events
- Events beget Sequences
Contacts are the core entity at the center of the Infusionsoft CRM. Importing contacts, emailing contacts, filtering contacts, calling contacts and selling to contacts. Contacts can be customers, customers who give the business money and receive value for it, but they can also be leads or prospects. In Campaign Builder, Tasks are always associated with a Contact. In Campaign Builder, Appointments are always associated with a Contact. Custom Fields are always for Contact (while you can have custom fields on other entities like Opportunities, the Campaign Builder doesn’t use them). In particular, you will find in Campaign Builder that you cannot modify other entities such as Order (Job) or Subscription (Job Recurring).
This means that when you think about events, you must understand that the Campaign Builder event is relative to a Contact since Infusionsoft shepherds this contact through a deliberate customer experience.
Campaign Builder consumes events then responds to those events based on the experience that has been laid out. Certain steps in the Campaign Builder (actions) also emit events which can trigger automation, though possibly unknowingly. In the Campaign Builder canvas, campaigns can seem disjoint, unconnected or confusing. Campaigns started losing their mystery once I embraced the asynchronous nature of a campaign’s state transitions.
As a software integration, you can inject into a campaign one particularly powerful event located on FunnelService. With this understanding, “achieveGoal” makes much more sense. Putting a sequence of actions after this event is a piece of automation you alone control — your secret sauce.
Goals and Sequences.
Most of the business world doesn’t think in terms of event loops or asynchronous event handlers. In Campaign Builder, the word “goal” is layman speak for event. A series of reactive pre-defined actions is called a sequence.
Many, many events are sent and trapped inside Infusionsoft, but the events that Campaign Builder responds to and emits are very specific and enumerated. Campaign Builder responds to the following events:
- User Applies a Tag
- User Applies a Note
- User Submits an Internal Form
- User Completes a (Campaign Builder) Task
- User Moves an Opportunity
- A Contact Web Form Submission
- A Contact Landing Page Form Submission
- A Contact Link Click
- A Contact Reaches a Lead Score
- A Contact Product Purchase
- GroSocial Form is Submitted
- Twitter Lead Gen Card is Submitted
- API Call is Made (via XMLRPC service method FunnelService.achieveGoal)
Campaign Builder can perform the following pre-defined actions in a Sequence:
- Until a fixed date/time in the future
- For a fixed delay
- For a fixed delay after a Contact Field
- Send Communications
- Email (via email templates and merged Contact info)
- Phone Call
- Send a Letter
- Apply a Tag
- Add a Note
- Create a Task for that Contact
- Assign an Owner
- Create an Opportunity
- Create a Fulfillment List
- Send Contact Data over an HTTP POST to a configured web resource (via Campaign Builder sequence communication action, HTTP POST)
Goals, Sequences and Flow … OH MY!
As noted above, goals are events; in particular, an event which triggers a sequence to start. Sequences may or may not complete; in the event a subsequent goal is reached, any sequence leading up to that goal is terminated. Following a goal or sequence, flow control can split via a rules engine based on Contact field values. The new flows execute conditionally, including mutually exclusive and parallel concurrent flows. Parallel flows can also join to provide a consistent conclusion.
Side note: As you read through the API documentation and other support resources, keep in mind that the terms “Campaign” is the same, rebranded “Funnel.” Also, a “Sequence” is the same, rebranded “Flow.” A “Tag” is often referenced as “Contact Group” in the documentation.
Act III. Strategies
It was ceremoniously amazing when I had these epiphanies. The first three, in particular, cleared away so much confusion for me. Even working at Infusionsoft, armed with these nuggets of truth I could more easily grok what I needed to do in order to get my campaigns to behave “properly.” The latter two particularly help me make a bit more sense of Campaign Builder’s UI.
Effective Examples. Let’s look at a few common patterns.
- CustomerHub manages content subscriptions for its customers using Infusionsoft.
- The holiday season is a great time for a business to reach its audience. Start with a holiday promo campaign and POST out contact interactions to your application to further refine content and offerings or to provide additional insightful analytics for that contact. Then, initiate custom campaign sequences relevant to the targeted segment.
- Maybe your consultancy wants to build a list of your own customers by offering free consultations.
We are currently in the process of planning the next set of performant, task-based APIs. At some point, we’ll deprecate difficult legacy APIs. We are also committed to ensuring that our partners can continue to achieve the success they’ve come to realize; we don’t intend to retire anything until we provide APIs that are at least as empowering. We love our developer community.
A few examples of APIs we’re considering include:
- Cleaner, simpler tasks, notes and appointments
- Full-text heuristic search backed by a scalable search engine such as Lucene (SOLR, Elastic Search, Lucandra/Solandra)
For as many exciting bursts of ideas which race through my mind when I think of all this stuff, I can’t help but feel a bit frustrated at the same time. After all, so much of this depends on specific behavior we need to install as a campaign in their Infusionsoft account. Just reading that, most of us had a rush of annoying and brittle documented pages flash through our minds. Screenshots teaching our customers how to create and configure these campaigns. And upgrades. And compatibility. And… and… ugh.
We are mindful of this as well. For some time, we have been working on creating a means whereby third parties (you) can write domain-relevant campaigns, then easily and reliably install that campaign into an Infusionsoft account. Since sometimes, as we’ve seen, a product purchase is the initiating event, you’ll be able to package up products. Similarly, importing this content will create any missing Tags and other resources your campaigns will need. A new tool within Infusionsoft will enable this capability, named the Content Publishing Tool (CPT).
The scope and availability of CPT is still under discussion. Currently we are using it to create the Campaigns offered in the Marketplace and we’re investigating how to introduce third-party content. After all, managing feature-compatible content packages across upgrades is nontrivial and we need to remove as many barriers of entry and maintenance as possible while ensuring maximum reliability for users.
Maybe the fifth pillar of Campaign Builder will be the Content Publishing Tool. With your content offered in the Marketplace, you can focus your efforts on creating then demonstrating the value to customers, not the mechanics of getting your wares installed. When we get closer to that day, we’ll share more about it and its potential.