CHALLENGE:
- Have attendees see only your branded forms and emails, not those ugly GoToWebinar ones
- Not have to manually set up all the merge fields and tags every time you run a new webinar
- Send reminders one hour before and at the start of the webinar without hard coding the dates and times
- Have attendance marked and tagged automatically
- Optional: Have attendance marked and tagged automatically for a webinar series
SOLUTION:
All of these things take time and time is your most precious asset. Why pay someone to do this over and over again when you can create this campaign, set it and forget it?
This tutorial and accompanying video gives you the step-by-step to create a dynamic, Go To Webinar integration with Infusionsoft, which showcases six different Pocket Developer plug-ins: Any Text Anywhere, Any Date, Any Format, Anywhere, Universal Delay Timer, Custom Delay Timer, Tags On The Fly and the GoToWebinar Integration.
Don’t want to set this up yourself? Let one of our concierges do it for you. Just purchase all the necessary blocks. Then email concierge@theapiguys.com. We will have it all set up for you in a jif.
STEP-BY-STEP
1. In Campaign Builder, create the following:
- a sequence named “Register in GTW”
- an API goal named “PDWakeUp1dfg”
- a sequence named “Add Webinar merge fields”
- a sequence named “Send confirmation Email”
- an API goal named “PDResumedhs3d”
- a sequence named “Send one hour reminder”
- an API goal named “PDResumeSew22”
- a sequence named “Send reminder at start time”
- an API goal named “PDResumeD6ts”
- a sequence named “Mark Attendance and Set
Webinar Replay Link field” - two tag goals – both connected to the previous sequence – named “Attended Tag” and “Did Not Attend Tag”
- connect a sequence named “Attended Emails and Tags On The Fly” to the Attended Tag goal
- connect a sequence named “Did Not Attend Emails and Tags On The Fly” to the Did Not Attend Tag goal
- connect the two previous sequences to a single sequence named “Remove Attended/Did Not Tags and Wipe Stash Field”
2. In the sequence named “Register in GTW”, create the following:
- Configure an HTTP POST snippet named “Pocket Developer GTW block” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/GoToWebinar/gotowebinar.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- action => register
- webinar => 4762872526542099714
- saveTitleTo => Contact._WebinarTitle
- saveDateTo => Contact._YourWebinarDate0
- saveJoinUrlTo => Contact._WebinarJoinURL
This assumes you have already installed and configured the GoToWebinar plug-in and created the webinar. The number in webinar is the GoToWebinar webinar ID and the action tells it to register this person.
- Configure an HTTP POST snippet named “Pocket Developer Custom Delay Timer Delay 120 seconds for GTW info to get back” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/CustomDelay/customdelay.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- callName => PDWakeUp1dfg
- delayFor => 120
Pocket Developer Custom Delay Timer is going to pause 120 seconds and then trigger the API goal following it to resume the campaign. The callName must match the callName in the API Goal immediately following this sequence.
3. Configure the API Goal, “PDWakeUp1dfg”, as follows:
- integration => Your app name
- Call Name => PDWakeUp1dfg
Pocket Developer Custom Delay Timer waits 120 seconds and then triggers this API Goal. That is why Call name must match in both places.
4. In the sequence named “Add Webinar Merge Fields”, create the following:
- Configure an HTTP POST snippet named “PDev Any Date: Put pretty date in text field” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/AnyDate/anydate.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- date => ~Contact._YourWebinarDate0~
- format => l, F j, Y
- saveTo => Contact._Yourwebinardatehumanform
The Any Date plug-in takes the date field populated by the GoToWebinar plug-in and converts that to a date like Saturday, August 30, 2014 for merging into emails. The format of the date is determined by the format value.
- Configure an HTTP POST snippet named “Pocket Developer Any Date Put time in text field” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/AnyDate/anydate.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- date => ~Contact._YourWebinarDate0~
- format => g:i A ET
- saveTo => Contact._Yourwebinaretime
Notice this time Any Date takes the exact same date and converts it into a time, like 4:00 PM ET, and saves it in a different text field so it can be merged.
- Configure an HTTP POST snippet named “Pocket Developer Any Date: Put date in date field for field timer” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/AnyDate/anydate.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- date => ~Contact._YourWebinarDate0~
- format => Y-m-dTH:i:s/li>
- saveTo => Contact._NextWebinarDate
This time we put the date in the required Infusionsoft format in a Date field so we can use it for a Field Timer. Field Timers do not work with DateTime or Text fields.
5. In the sequence named “Send Confirmation Email”, create the following:
- Configure a confirmation email to be sent upon registration:
Notice the merge fields we populated in the previous sequence are now used in our email to make it dynamic.
- Configure an HTTP POST snippet named “PDev Trigger API Goal: Trigger 1 hr before webinar” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/TriggerAPI/trigger.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- triggerDate => ~Contact._YourWebinarDate0~
- triggerTime => ~Contact._YourWebinareTime~
- adjustment => -1 hour
- callName => PDResumedhs3d
The Pocket Developer Universal Delay Timer plug-in will trigger the API Goal, named PDResumedhs3d, and resume the campaign, 1 hour before the webinar start. This cannot be done with both date and time dynamically currently in Campaign Builder.
6. Configure the API Goal, “PDResumedhs3d”, as follows:
- integration => Your app name
- Call Name => PDResumedhs3d
7. In the sequence named “Send One Hour Reminder”, create the following:
- Configure a reminder email to be sent one hour before the webinar begins using previously populated merge fields
- Configure an HTTP POST snippet named “PDev Trigger API Goal: Trigger at webinar start time” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/TriggerAPI/trigger.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- triggerDate => ~Contact._YourWebinarDate0~
- triggerTime => ~Contact._YourWebinareTime~
- callName => PDResumeSew22
The Pocket Developer Universal Delay Timer plug-in will trigger the API Goal, named PDResumeSew22, and resume the campaign at the webinar start so one last reminder email can be sent.
8. Configure the API Goal, “PDResumeSew22”, as follows:
- integration => Your app name
- Call Name => PDResumeSew22
Pocket Developer Custom Delay Timer waits the webinar start time and then triggers this API Goal. Remember: the call names must match in both the POST Snippet and the API Goal.
9. In the sequence named “Send Reminder At Start Time”, create the following:
- Configure a reminder email to be sent as the webinar begins, using previously populated merge fields
- Configure an HTTP POST snippet named “PDev Trigger API Goal: Trigger at 4 hrs after webinar start time” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/TriggerAPI/trigger.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- triggerDate => ~Contact._YourWebinarDate0~
- triggerTime => ~Contact._YourWebinareTime~
- adjustment => +4 hours
- callName => PDResumeD6ts
Remember the callNames can be anything. They just have to be unique and match the callName in the corresponding API Goal.
10. Configure the API Goal, “PDResumeD6ts”, as follows:
- integration => Your app name
- Call Name => PDResumeD6ts
11. In the sequence named “Mark Attendance and Set Webinar Replay Link field”, create the following:
- Configure an HTTP POST snippet named “PDev Any Date to Any Text: Update Webinar Replay Field” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/AnyDate/anydate.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- date => ~Contact._YourWebinarDate0~
- format => Ymd
- request => http://theapiguys.com/scripts/PocketDeveloper/Blocks/AnyText/anytext.php?textToSave=http://theapiguys.com/blog/{result}-webinar-replay/&saveTo=Contact._LinkToHandout
- saveTo => Contact._MiddleName
This part is ninja. The “request” parameter chains two plug-ins together. In this case, Any Date Anywhere and Any Text Anywhere are chained. The request parameter uses the URL and a query string to pass the result of Any Date ({result}), to Any Text, in order to create a URL in a custom field that looks like http://yourdomain/blog/20140904-webinar-replay. That URL can be merged into the upcoming emails without having to change the campaign each time. You just have to create the replay page names to match and it will all be dynamic. We are using Contact._MiddleName to store the URL just to save custom fields, but you could put it in any text field.
- Configure an HTTP POST snippet named “PDev GTW Set Attended Did Not Attend Tags” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/GoToWebinar/gotowebinar.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- action => attendance
- webinar => Your Webinar Id
- absent => tag ID you want applied for those who were absent
- present => tag ID you want applied for those who were present
This post uses the GoToWebinar plug-in to fetch attendance for your webinar and apply tags to attendees accordingly. This is one of two places you must manually update webinar ID for each webinar.
12. From the Mark Attendance sequence, configure two Tag Goals – one triggered by your Absent tag and one by Present tag – as follows:
13. In the sequence named “Attended Emails and Tags On The Fly”, create the following:
- Configure a “thank-you” email for attendees:
Notice the merge field for the video link we populated in the previous sequence is now used in our email to make it dynamic.
- Configure an HTTP POST snippet named “PDev Tags On The Fly: Create Event Attended Category and Tag” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/TagsFly/tags.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- tagCategory => Event Attended
- tagName => %~Contact.MiddleName~ PD Launch Demo%
- Do the same for the Did Not Attend Emails and Tags On The Fly sequence, substituting Event Not Attended for the tagCategory name.
We stored the webinar date, in the form of YYYYMMDD, in the Middle Name field, back in Step 11. Now we are merging that into a new tagName YYYYMMDD PD Launch Demo. If the tag category and/or name don’t exist, they will be created. The tags will be applied to contacts whether it already exists or had to be created. Note that ‘%’ is the wildcard symbol in Infusionsoft.
13. In the sequence named “Attended Emails and Tags On The Fly”, create the following:
- Configure a “thank-you” email for attendees:
Notice the merge field for the video link we populated in the previous sequence is now used in our email to make it dynamic.
- Configure an HTTP POST snippet named “PDev Tags On The Fly: Create Event Attended Category and Tag” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/TagsFly/tags.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- tagCategory => Event Attended
- tagName => %~Contact.MiddleName~ PD Launch Demo%
- Do the same for the Did Not Attend Emails and Tags On The Fly sequence, substituting Event Not Attended for the tagCategory name.
We stored the webinar date, in the form of YYYYMMDD, in the Middle Name field, back in Step 11. Now we are merging that into a new tagName YYYYMMDD PD Launch Demo. If the tag category and/or name don’t exist, they will be created. The tags will be applied to contacts whether it already exists or had to be created. Note that ‘%’ is the wildcard symbol in Infusionsoft.
14. In the sequence named “Remove Attended/Did Not Tags and Wipe Stash Field”, create the following:
- Remove your generic Absent/Present tags so you can use them again if this contact attends another webinar:
- Configure an HTTP POST snippet named “PDev AnyText Wipe MiddleName Stash Field” as follows:
- POST URL => http://theapiguys.com/scripts/PocketDeveloper/Blocks/AnyText/anytext.php
- contactId => ~Contact.Id~ (you shouldn’t need to change this)
- textToSave =>
- saveTo => Contact.MiddleName