{
    "componentChunkName": "component---src-templates-post-js",
    "path": "/self-paced-email-course-customerio",
    "result": {"data":{"site":{"siteMetadata":{"title":"your friend Joel's digital garden","description":"Articles and notes from a collaborator at egghead.io. Musings on software, business, and life from a skilled virtual assistant.","author":{"name":"Joel Hooks"},"keywords":["Video Blogger"]}},"mdx":{"excerpt":"I split this into two campaigns and multiple segments for clarity.  This lets me loop through the logic instead of \"stacking\" a bunch of repetition in a single campaign. I'm not sure if this is technically fine in CIO and haven't tested it…","fields":{"github":"https://github.com/joelhooks/joelhooks-com/tree/master/content/blog/2021-04-16--self-paced-email-course-in-customerio~~F-l-isFmj/index.mdx"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"id\": \"F-l-isFmj\",\n  \"slug\": \"self-paced-email-course-customerio\",\n  \"date\": \"2021-04-16T00:00:00.000Z\",\n  \"title\": \"Self-Paced Email Course in Customer.io\",\n  \"published\": false\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"I split this into two campaigns and multiple segments for clarity.\\xA0\"), mdx(\"p\", null, \"This lets me loop through the logic instead of \\\"stacking\\\" a bunch of repetition in a single campaign. I'm not sure if this is technically fine in CIO and haven't tested it yet.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Course: Emailing\"), \" and \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Course: Progress\")), mdx(\"p\", null, \"Course: Emailing workflow is triggered by adding a user to the \\\"C: Emailing\\\" segment. It's manual so we can control how the customer flows from campaign to campaign.\"), mdx(\"p\", null, \"It uses the switch case node and looks at a \\\"state\\\" property that is set externally and emails the appropriate branch based on that value, or exits cold if it doesn't exist (note the empty branches will have emails)\"), mdx(\"p\", null, \"After the email is sent, it waits for 24 hours unless the customer enters the segment \\\"C: Quiz Activity\\\". If they don't do anything they are added to the segment \\\"C: Forced Advancement\\\"\"), mdx(\"p\", null, \"In both cases the \\\"C: Emailing\\\" segment is removed after the \\\"wait until\\\" is completed.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1035px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/fc2816ffa11bb601cd5fffe7db70a149/69d6b/workflow_one.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"96.91119691119692%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAABYlAAAWJQFJUiTwAAABY0lEQVQ4y51U0XKDMAzj/390N7o2JI4dJ9BpFwc24NrS8aA7Ao6QIzmdpIxnSIaCpAWRE1iy4dWebnnQ3DauyShnOBEEHyFJMU13jNN9U2e1+re3Wx7cEOE9zyoUIhlfngwcEygKchkRSKx2XTd4hg88K2QFkaC/OAw+mtLlzzdHVrhWdL0FuIE26uraufau495jcLUoIOeC+/37l2Df2r49gxZQZASKjTCwmvR26ArWDJ6Lbb0z4dCUT0oYQkQIBJGEPE0vNxyhSw9ba+vIath8ezc2GzBDRM2g6mzSY6KnhElHxMsHLv0XrtcBIdQ40fstP3IxuhtiZFPWjqThHGENea5uJjAna71Oh+bxHGE9qz4QBk/wvrrPUC02IacIa/aIUguwNMU1l2GemEdhP3Z5ngChBPYMYjHCRe05wt108NnYGEFVVi+NKIb1hfF/whoPL+buMuMt3OW8Qju/VE7N8g9okcVRhchHOQAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"customerio workflow interface\",\n    \"title\": \"customerio workflow interface\",\n    \"src\": \"/static/fc2816ffa11bb601cd5fffe7db70a149/e3189/workflow_one.png\",\n    \"srcSet\": [\"/static/fc2816ffa11bb601cd5fffe7db70a149/a2ead/workflow_one.png 259w\", \"/static/fc2816ffa11bb601cd5fffe7db70a149/6b9fd/workflow_one.png 518w\", \"/static/fc2816ffa11bb601cd5fffe7db70a149/e3189/workflow_one.png 1035w\", \"/static/fc2816ffa11bb601cd5fffe7db70a149/44d59/workflow_one.png 1553w\", \"/static/fc2816ffa11bb601cd5fffe7db70a149/69d6b/workflow_one.png 1912w\"],\n    \"sizes\": \"(max-width: 1035px) 100vw, 1035px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, \"\\\"C: Quiz Activity\\\" and\\xA0\\\"C: Forced Advancement\\\" both send the customer to Course: Progress campaign. This campaign does a little house keeping, updates the \\\"engagement attribute\\\" if they did the quiz, and adds them back to \\\"C: Emailing\\\" segment before removing the segment that they arrived in this campaign with.\"), mdx(\"p\", null, \"It's assumed that the \\\"op_state\\\" will be updated accordingly from an external source so the user will be routed to the right \\\"channel\\\" in the\\xA0Emailing\\xA0workflow.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1035px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/b8890a4ad6b2ff0d026e9ecaa7e7f85e/1d499/workflow_two.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"93.05019305019306%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAABYlAAAWJQFJUiTwAAABgElEQVQ4y6VUa2+DMBDr//+N24dJlaZ1hTwvCeHh6S4EsQJttyJZoSUY23eXU4gdjhBnhJDK+gROR0S8pq4HUYQ2DjHl/xO62IFCAlGCpyj38qGUHxLvEGZ8ZIK1DsY4WOtljTGBr2ma7pJuCD0lfHoH60jACq0N0Nqj63qJw/nwgFC+mCWzprVorkZUkFifn892W+XwdVGHKguhj6KEEaUYhZwhL9pQMg0JzpdMZc9OpkJI79/Q2gpCiBiGATn36PsBwzCCzgrOEZwntMrAWI9xnOQZ79kSXqzkxRuvjYYxHkpbNK0p1V0prqqPKr5YrpZqm3S5F1TL9X+2zEXh33y/S0jnViyxwlZZsTaO42KpWuYmZyfc6Fo7KGXLFK2UnmrD3lraTM/K5nr/blHWVa7W1lmtX6jR3O1D/3aRaeAqK2XgnBerfLH1ENaEc2/eI6Qvs6iTjHSZlH4YpTC/FT5BGLq8zPHtGDKqzcVu+ONp8woeE8oxFl87D7dITyv8AT71xTHWCDt3AAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"customerio workflow interface\",\n    \"title\": \"customerio workflow interface\",\n    \"src\": \"/static/b8890a4ad6b2ff0d026e9ecaa7e7f85e/e3189/workflow_two.png\",\n    \"srcSet\": [\"/static/b8890a4ad6b2ff0d026e9ecaa7e7f85e/a2ead/workflow_two.png 259w\", \"/static/b8890a4ad6b2ff0d026e9ecaa7e7f85e/6b9fd/workflow_two.png 518w\", \"/static/b8890a4ad6b2ff0d026e9ecaa7e7f85e/e3189/workflow_two.png 1035w\", \"/static/b8890a4ad6b2ff0d026e9ecaa7e7f85e/44d59/workflow_two.png 1553w\", \"/static/b8890a4ad6b2ff0d026e9ecaa7e7f85e/1d499/workflow_two.png 1632w\"],\n    \"sizes\": \"(max-width: 1035px) 100vw, 1035px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, \"The looping seems to make sense but is probably the weirdest part of the overall flow but the \\\"switch/case\\\" node is too good to pass up for a little state machine type workflow.\"));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Self-Paced Email Course in Customer.io","date":"April 16, 2021","banner":null,"slug":"self-paced-email-course-customerio","keywords":null}}},"pageContext":{"id":"0fc02c22-ae07-58ca-81fb-16bbba574811","prev":{"id":"7097dcd4-1831-5786-8f39-f070ba832f42","parent":{"name":"index","sourceInstanceName":"blog"},"excerpt":"This video from Jay Abraham is a great introduction to the strategy of preeminence. We are not a commodity. There are two forces trying to turn us into a commodity. Our competition wants to marginalize our advantage & differentiation. Consumers want…","fields":{"title":"Strategy of Preeminence","slug":"strategy-of-preeminence","date":"2021-08-01T00:00:00.000Z"}},"next":{"id":"b77ac617-766f-53f5-b7fa-b70a8fad9720","parent":{"name":"index","sourceInstanceName":"blog"},"excerpt":"The Video.js docs have a good explaination for using Video.js with React, but it focuses on a class based implementation. Getting Video.js to consistently work with React Hooks is fairly straight forward, with a gotcha or two. Here's the hook: The…","fields":{"title":"useVideoJs: a React Hooks for Video.js","slug":"usevideojs-a-react-hooks-for-videojs","date":"2021-03-26T00:00:00.000Z"}}}},
    "staticQueryHashes": ["1045846374"]}