Agentic Advocacy: Building an AI-Powered Community
Thursday, October 22 at 3 p.m. ET / 12 p.m. PT
By submitting this form, you will receive the information requested as well as sales and/or marketing communications from Higher Logic. You can unsubscribe from receiving communications using the link in the footer of our emails. For further details regarding your rights and how we process your personal data, please refer to our Privacy Policy.
Meet Our Presenter
Power of Connection Webinar
What does an AI-powered community look like in practice? Mary Green of Infor will share how her team is using AI and Higher Logic Vanilla to improve three critical parts of the member experience:
Mary Green
Director of Community Platforms, Infor and Founder at CMA Weekly
This practical session will explore how thoughtful automation can reduce manual work, help members find value faster, and create clearer paths from participation to advocacy. Attendees will leave with tangible ideas they can adapt to make their own communities more responsive, scalable, and connected.
Marius Ciortea
Chief Community Officer
Higher Logic
tag on your * website or Marketo landing page template(s) where you want to use the * UTM tracking functionality. * ***************************************************************************/ /************************** CONFIGURATION OPTIONS **************************/ /* MARKETO UTM FIELDS: * Input field names for your Marketo instance in the right column below. * If you're not sure what to put here, export all fields from within your * Marketo instance under Admin > Field Management > Export Field Names * (requires admin access) and use your UTM fields' SOAP API Name from the * downloaded Fields.xls file. This is case sensitive! */ var dpi_marketoUtmFields = { 'utm_source' : 'utm_source__c' ,'utm_medium' : 'utm_medium__c' ,'utm_campaign' : 'utm_campaign__c' ,'utm_term' : 'utm_term__c' ,'utm_content' : 'utm_content__c' }; /* DOMAIN NAME (optional): * Optionally, set your primary domain name so that the cookie can be read on * your main website and across all subdomains. Will auto-detect current * domain if unchanged. */ var dpi_cookieDomain = 'higherlogic.com'; /*********************** DO NOT EDIT BELOW THIS LINE ************************/ /*! * JavaScript Cookie v2.1.3 * https://github.com/js-cookie/js-cookie * * Copyright 2006, 2015 Klaus Hartl & Fagner Brack * Released under the MIT license */ ;(function (factory) { var registeredInModuleLoader = false; if (typeof define === 'function' && define.amd) { define(factory); registeredInModuleLoader = true; } if (typeof exports === 'object') { module.exports = factory(); registeredInModuleLoader = true; } if (!registeredInModuleLoader) { var OldCookies = window.Cookies; var api = window.Cookies = factory(); api.noConflict = function () { window.Cookies = OldCookies; return api; }; } }(function () { function extend () { var i = 0; var result = {}; for (; i < arguments.length; i++) { var attributes = arguments[ i ]; for (var key in attributes) { result[key] = attributes[key]; } } return result; } function init (converter) { function api (key, value, attributes) { var result; if (typeof document === 'undefined') { return; } // Write if (arguments.length > 1) { attributes = extend({ path: '/' }, api.defaults, attributes); if (typeof attributes.expires === 'number') { var expires = new Date(); expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); attributes.expires = expires; } try { result = JSON.stringify(value); if (/^[\{\[]/.test(result)) { value = result; } } catch (e) {} if (!converter.write) { value = encodeURIComponent(String(value)) .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); } else { value = converter.write(value, key); } key = encodeURIComponent(String(key)); key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); key = key.replace(/[\(\)]/g, escape); return (document.cookie = [ key, '=', value, attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE attributes.path ? '; path=' + attributes.path : '', attributes.domain ? '; domain=' + attributes.domain : '', attributes.secure ? '; secure' : '' ].join('')); } // Read if (!key) { result = {}; } // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. Also prevents odd result when // calling "get()" var cookies = document.cookie ? document.cookie.split('; ') : []; var rdecode = /(%[0-9A-Z]{2})+/g; var i = 0; for (; i < cookies.length; i++) { var parts = cookies[i].split('='); var cookie = parts.slice(1).join('='); if (cookie.charAt(0) === '"') { cookie = cookie.slice(1, -1); } try { var name = parts[0].replace(rdecode, decodeURIComponent); cookie = converter.read ? converter.read(cookie, name) : converter(cookie, name) || cookie.replace(rdecode, decodeURIComponent); if (this.json) { try { cookie = JSON.parse(cookie); } catch (e) {} } if (key === name) { result = cookie; break; } if (!key) { result[name] = cookie; } } catch (e) {} } return result; } api.set = api; api.get = function (key) { return api.call(api, key); }; api.getJSON = function () { return api.apply({ json: true }, [].slice.call(arguments)); }; api.defaults = {}; api.remove = function (key, attributes) { api(key, '', extend(attributes, { expires: -1 })); }; api.withConverter = init; return api; } return init(function () {}); })); /***************************** CUSTOM FUNCTIONS *****************************/ // Retrieve a named value from query string function dpi_getQueryStringValue(key) { key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars var match = location.search.match(new RegExp("[?&]"+key+"=([^&]+)(&|$)")); return match && decodeURIComponent(match[1].replace(/\+/g, " ")); } // Get domain name function dpi_getDomain() { var regex = /[\w-]+.(com|net|org|co.uk|co|us)/ig; var url = location.hostname; return url.match(regex)[0]; } /************************ MARKETO UTM TRACKING LOGIC ************************/ // Create empty objects for UTM parameters var dpi_queryStringUtmVals = {}; var dpi_cookieUtmVals = {}; // Set cookie domain from current domain if default is not changed if(dpi_cookieDomain == 'example.com') { dpi_cookieDomain = dpi_getDomain(); } // Retrieve all UTM query string params and values, store to object for( property in dpi_marketoUtmFields ) { if(dpi_getQueryStringValue(property) && dpi_getQueryStringValue(property).length > 0) { dpi_queryStringUtmVals[dpi_marketoUtmFields[property]] = dpi_getQueryStringValue(property); } } // If we have any UTM query string values... if(Object.keys(dpi_queryStringUtmVals).length > 0) { // Then create or update the cookie with whatever query string variables are available Cookies.set('dpi_utmVals', dpi_queryStringUtmVals , { expires: 3652, domain: '.'+dpi_cookieDomain }); } function populateUTMFields(e){ var ubForm = e.target.forms[0], utmFieldsObj = Cookies.getJSON('dpi_utmVals'); for(let propName in utmFieldsObj){ var inputEl = ubForm.querySelector("[name='" + propName + "']"); if(inputEl){ inputEl.value = utmFieldsObj[propName]; } } } // Is there a cookie set with UTM values? if( typeof Cookies.getJSON('dpi_utmVals') != "undefined" ) { // Yes, the cookie is set if (document.readyState == "loading") { document.addEventListener("DOMContentLoaded", populateUTMFields); } else { populateUTMFields({ target: document }); } window.ub.hooks.afterFormSubmit.push(function(){ Cookies.remove('dpi_utmVals', { domain: '.'+dpi_cookieDomain } ); }); }