diff --git a/.env.example b/.env.example index 53effe367c..0976097aed 100644 --- a/.env.example +++ b/.env.example @@ -6,4 +6,4 @@ CONTEXT=development PLATFORM_API_TOKEN=generate a token from your Segment workspace PAPI_TOKEN=generate a token from your Segment workspace ALGOLIA_APP_ID= -ALGOLIA_SEARCH_KEY= +ALGOLIA_SEARCH_KEY= \ No newline at end of file diff --git a/.github/styles/Vocab/Docs/accept.txt b/.github/styles/Vocab/Docs/accept.txt index cd70b7d5b0..c8ee10b01a 100644 --- a/.github/styles/Vocab/Docs/accept.txt +++ b/.github/styles/Vocab/Docs/accept.txt @@ -22,6 +22,7 @@ Aampe adset Adwords Aircall +Airdat(?:e|es) Algolia allowlist Amberflo @@ -33,22 +34,28 @@ Automations aws background(?:ed|ing) Bento +Bing +Blackbaud Blitzllama blocklist Bluedot bool boolean +Braze's Breyta Chargebee chatbot cli CloudFront Cocoapods +comScore Contentful +Cordova Criteo csv Databricks datetime +debouncing deeplink Dev Doubleclick @@ -99,6 +106,7 @@ Marketo Matcha matchers measurability +Metrix middleware Middleware Mixpanel @@ -122,6 +130,7 @@ performant Pinterest Pipedrive Preact +Proguard Qualtrics reformat(:?s) remarket diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000000..59511e1d28 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +ruby 2.7.8 diff --git a/.yarn/cache/ansi-regex-npm-2.1.1-ddd24d102b-190abd03e4.zip b/.yarn/cache/ansi-regex-npm-2.1.1-ddd24d102b-190abd03e4.zip deleted file mode 100644 index 39b4640377..0000000000 Binary files a/.yarn/cache/ansi-regex-npm-2.1.1-ddd24d102b-190abd03e4.zip and /dev/null differ diff --git a/.yarn/cache/ansi-styles-npm-2.2.1-f3297e782c-ebc0e00381.zip b/.yarn/cache/ansi-styles-npm-2.2.1-f3297e782c-ebc0e00381.zip deleted file mode 100644 index 5581240ca2..0000000000 Binary files a/.yarn/cache/ansi-styles-npm-2.2.1-f3297e782c-ebc0e00381.zip and /dev/null differ diff --git a/.yarn/cache/browser-sync-client-npm-2.27.11-78c81d4261-ff2b7bba6e.zip b/.yarn/cache/browser-sync-client-npm-2.27.11-78c81d4261-ff2b7bba6e.zip deleted file mode 100644 index 3874e0bddf..0000000000 Binary files a/.yarn/cache/browser-sync-client-npm-2.27.11-78c81d4261-ff2b7bba6e.zip and /dev/null differ diff --git a/.yarn/cache/browser-sync-client-npm-2.29.1-059622c046-9ed2828e1d.zip b/.yarn/cache/browser-sync-client-npm-2.29.1-059622c046-9ed2828e1d.zip new file mode 100644 index 0000000000..6072da58d3 Binary files /dev/null and b/.yarn/cache/browser-sync-client-npm-2.29.1-059622c046-9ed2828e1d.zip differ diff --git a/.yarn/cache/browser-sync-npm-2.27.11-12ebbf104d-fe88631e82.zip b/.yarn/cache/browser-sync-npm-2.29.1-5000e8430b-5f04e6bdd7.zip similarity index 70% rename from .yarn/cache/browser-sync-npm-2.27.11-12ebbf104d-fe88631e82.zip rename to .yarn/cache/browser-sync-npm-2.29.1-5000e8430b-5f04e6bdd7.zip index bc5fc06815..3f715ffc54 100644 Binary files a/.yarn/cache/browser-sync-npm-2.27.11-12ebbf104d-fe88631e82.zip and b/.yarn/cache/browser-sync-npm-2.29.1-5000e8430b-5f04e6bdd7.zip differ diff --git a/.yarn/cache/browser-sync-ui-npm-2.27.11-94871f38c1-f74c3cdc95.zip b/.yarn/cache/browser-sync-ui-npm-2.29.1-5004248362-db70373cc3.zip similarity index 89% rename from .yarn/cache/browser-sync-ui-npm-2.27.11-94871f38c1-f74c3cdc95.zip rename to .yarn/cache/browser-sync-ui-npm-2.29.1-5004248362-db70373cc3.zip index 1cc20472b1..2cbcc23d9c 100644 Binary files a/.yarn/cache/browser-sync-ui-npm-2.27.11-94871f38c1-f74c3cdc95.zip and b/.yarn/cache/browser-sync-ui-npm-2.29.1-5004248362-db70373cc3.zip differ diff --git a/.yarn/cache/chalk-npm-1.1.3-59144c3a87-9d2ea6b98f.zip b/.yarn/cache/chalk-npm-1.1.3-59144c3a87-9d2ea6b98f.zip deleted file mode 100644 index e7d3003b97..0000000000 Binary files a/.yarn/cache/chalk-npm-1.1.3-59144c3a87-9d2ea6b98f.zip and /dev/null differ diff --git a/.yarn/cache/cookiejar-npm-2.1.3-ec18b65dd0-88259983eb.zip b/.yarn/cache/cookiejar-npm-2.1.3-ec18b65dd0-88259983eb.zip deleted file mode 100644 index 4ff9823e6d..0000000000 Binary files a/.yarn/cache/cookiejar-npm-2.1.3-ec18b65dd0-88259983eb.zip and /dev/null differ diff --git a/.yarn/cache/cookiejar-npm-2.1.4-e418c49b9e-c444211196.zip b/.yarn/cache/cookiejar-npm-2.1.4-e418c49b9e-c444211196.zip new file mode 100644 index 0000000000..2f5e5ac2fd Binary files /dev/null and b/.yarn/cache/cookiejar-npm-2.1.4-e418c49b9e-c444211196.zip differ diff --git a/.yarn/cache/dlv-npm-1.1.3-187c903a21-d7381bca22.zip b/.yarn/cache/dlv-npm-1.1.3-187c903a21-d7381bca22.zip deleted file mode 100644 index 882709b311..0000000000 Binary files a/.yarn/cache/dlv-npm-1.1.3-187c903a21-d7381bca22.zip and /dev/null differ diff --git a/.yarn/cache/eazy-logger-npm-3.1.0-29215733e6-ddb613b6a3.zip b/.yarn/cache/eazy-logger-npm-4.0.1-1f98b860f4-2005f4676c.zip similarity index 88% rename from .yarn/cache/eazy-logger-npm-3.1.0-29215733e6-ddb613b6a3.zip rename to .yarn/cache/eazy-logger-npm-4.0.1-1f98b860f4-2005f4676c.zip index e5d5329423..f12c129e23 100644 Binary files a/.yarn/cache/eazy-logger-npm-3.1.0-29215733e6-ddb613b6a3.zip and b/.yarn/cache/eazy-logger-npm-4.0.1-1f98b860f4-2005f4676c.zip differ diff --git a/.yarn/cache/has-ansi-npm-2.0.0-9bf0cff2af-1b51daa021.zip b/.yarn/cache/has-ansi-npm-2.0.0-9bf0cff2af-1b51daa021.zip deleted file mode 100644 index 61a5a3439f..0000000000 Binary files a/.yarn/cache/has-ansi-npm-2.0.0-9bf0cff2af-1b51daa021.zip and /dev/null differ diff --git a/.yarn/cache/http-cache-semantics-npm-4.1.0-860520a31f-974de94a81.zip b/.yarn/cache/http-cache-semantics-npm-4.1.0-860520a31f-974de94a81.zip deleted file mode 100644 index ed85c1c4c7..0000000000 Binary files a/.yarn/cache/http-cache-semantics-npm-4.1.0-860520a31f-974de94a81.zip and /dev/null differ diff --git a/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip b/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip new file mode 100644 index 0000000000..19f1e0a201 Binary files /dev/null and b/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip differ diff --git a/.yarn/cache/minimist-npm-1.2.5-ced0e1f617-86706ce5b3.zip b/.yarn/cache/minimist-npm-1.2.5-ced0e1f617-86706ce5b3.zip deleted file mode 100644 index c5b7cfe0b4..0000000000 Binary files a/.yarn/cache/minimist-npm-1.2.5-ced0e1f617-86706ce5b3.zip and /dev/null differ diff --git a/.yarn/cache/minimist-npm-1.2.8-d7af7b1dce-75a6d645fb.zip b/.yarn/cache/minimist-npm-1.2.8-d7af7b1dce-75a6d645fb.zip new file mode 100644 index 0000000000..bd385cb325 Binary files /dev/null and b/.yarn/cache/minimist-npm-1.2.8-d7af7b1dce-75a6d645fb.zip differ diff --git a/.yarn/cache/rxjs-npm-5.5.12-d7a14bc716-3c2522402b.zip b/.yarn/cache/rxjs-npm-5.5.12-d7a14bc716-3c2522402b.zip deleted file mode 100644 index 83bcdc407a..0000000000 Binary files a/.yarn/cache/rxjs-npm-5.5.12-d7a14bc716-3c2522402b.zip and /dev/null differ diff --git a/.yarn/cache/socket.io-parser-npm-4.2.1-7ef513b498-2582202f22.zip b/.yarn/cache/socket.io-parser-npm-4.2.1-7ef513b498-2582202f22.zip deleted file mode 100644 index 145410df88..0000000000 Binary files a/.yarn/cache/socket.io-parser-npm-4.2.1-7ef513b498-2582202f22.zip and /dev/null differ diff --git a/.yarn/cache/socket.io-parser-npm-4.2.4-bf87f78bcd-61540ef99a.zip b/.yarn/cache/socket.io-parser-npm-4.2.4-bf87f78bcd-61540ef99a.zip new file mode 100644 index 0000000000..084f1c14c8 Binary files /dev/null and b/.yarn/cache/socket.io-parser-npm-4.2.4-bf87f78bcd-61540ef99a.zip differ diff --git a/.yarn/cache/strip-ansi-npm-3.0.1-6aec1365b9-9b974de611.zip b/.yarn/cache/strip-ansi-npm-3.0.1-6aec1365b9-9b974de611.zip deleted file mode 100644 index a1c9f6a0b6..0000000000 Binary files a/.yarn/cache/strip-ansi-npm-3.0.1-6aec1365b9-9b974de611.zip and /dev/null differ diff --git a/.yarn/cache/supports-color-npm-2.0.0-22c0f0adbc-602538c581.zip b/.yarn/cache/supports-color-npm-2.0.0-22c0f0adbc-602538c581.zip deleted file mode 100644 index c4608ecfe9..0000000000 Binary files a/.yarn/cache/supports-color-npm-2.0.0-22c0f0adbc-602538c581.zip and /dev/null differ diff --git a/.yarn/cache/symbol-observable-npm-1.0.1-f74766c3fc-8e8a4591f4.zip b/.yarn/cache/symbol-observable-npm-1.0.1-f74766c3fc-8e8a4591f4.zip deleted file mode 100644 index 96b552c83f..0000000000 Binary files a/.yarn/cache/symbol-observable-npm-1.0.1-f74766c3fc-8e8a4591f4.zip and /dev/null differ diff --git a/.yarn/cache/tfunk-npm-4.0.0-ddcb0791d3-91eb2880b2.zip b/.yarn/cache/tfunk-npm-4.0.0-ddcb0791d3-91eb2880b2.zip deleted file mode 100644 index 0272c86a57..0000000000 Binary files a/.yarn/cache/tfunk-npm-4.0.0-ddcb0791d3-91eb2880b2.zip and /dev/null differ diff --git a/.yarn/cache/typescript-npm-4.8.3-7c28a78612-8286a5edca.zip b/.yarn/cache/typescript-npm-4.8.3-7c28a78612-8286a5edca.zip deleted file mode 100644 index dede9ce19d..0000000000 Binary files a/.yarn/cache/typescript-npm-4.8.3-7c28a78612-8286a5edca.zip and /dev/null differ diff --git a/.yarn/cache/typescript-patch-503665b0dc-0404a09c62.zip b/.yarn/cache/typescript-patch-503665b0dc-0404a09c62.zip deleted file mode 100644 index 1f1e54fdde..0000000000 Binary files a/.yarn/cache/typescript-patch-503665b0dc-0404a09c62.zip and /dev/null differ diff --git a/.yarn/cache/ua-parser-js-npm-1.0.2-c3376785e2-ff7f6d79a9.zip b/.yarn/cache/ua-parser-js-npm-1.0.2-c3376785e2-ff7f6d79a9.zip deleted file mode 100644 index c48c9df4a9..0000000000 Binary files a/.yarn/cache/ua-parser-js-npm-1.0.2-c3376785e2-ff7f6d79a9.zip and /dev/null differ diff --git a/.yarn/cache/ua-parser-js-npm-1.0.35-38ecdb7612-02370d38a0.zip b/.yarn/cache/ua-parser-js-npm-1.0.35-38ecdb7612-02370d38a0.zip new file mode 100644 index 0000000000..4557387964 Binary files /dev/null and b/.yarn/cache/ua-parser-js-npm-1.0.35-38ecdb7612-02370d38a0.zip differ diff --git a/CODEOWNERS b/CODEOWNERS index 6afe7997cf..78e3ce8044 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -21,55 +21,33 @@ CODEOWNERS @segmentio/segment-doc-team # Libraries owners -/src/connections/catalog/libraries @stayseesong @markzegarelli +/src/connections/catalog/libraries @stayseesong # Destinations owners -/src/connections/destinations @stayseesong @markzegarelli +# /src/connections/destinations @stayseesong= # Stratconn ## Adobe -/src/connections/destinations/catalog/adobe-analytics/ @kdaswani -/src/connections/destinations/catalog/actions-adobe-target-web/ @kdaswani -/src/connections/destinations/catalog/actions-adobe-target-cloud/ @kdaswani -/src/connections/destinations/catalog/marketo-v2/ @kdaswani -/src/connections/destinations/catalog/marketo-static-lists/ @kdaswani + ## Facebook -/src/connections/destinations/catalog/facebook-pixel/ @kdaswani -/src/connections/destinations/catalog/actions-facebook-conversions-api/ @kdaswani -/src/connections/destinations/catalog/facebook-app-events/ @kdaswani -/src/connections/destinations/catalog/facebook-offline-conversions/ @kdaswani -/src/connections/destinations/catalog/personas-facebook-custom-audiences/ @kdaswani + ## Google -/src/connections/destinations/catalog/firebase/ @kdaswani -/src/connections/destinations/catalog/google-analytics/ @kdaswani -/src/connections/destinations/catalog/actions-google-analytics-4/ @kdaswani -/src/connections/destinations/catalog/google-tag-manager/ @kdaswani -/src/connections/destinations/catalog/actions-google-enhanced-conversions/ @kdaswani -/src/connections/destinations/catalog/doubleclick-floodlight/ @kdaswani -/src/connections/destinations/catalog/google-ads-classic/ @kdaswani -/src/connections/destinations/catalog/google-ads-gtag/ @kdaswani -/src/connections/destinations/catalog/google-cloud-function/ @kdaswani -/src/connections/destinations/catalog/google-cloud-pubsub/ @kdaswani -/src/connections/destinations/catalog/adwords-remarketing-lists/ @kdaswani -/src/connections/destinations/catalog/personas-display-video-360/ @kdaswani + ## Salesforce -/src/connections/destinations/catalog/salesforce/ @kdaswani -/src/connections/destinations/catalog/actions-salesforce/ @kdaswani -/src/connections/destinations/catalog/salesforce-marketing-cloud/ @kdaswani -/src/connections/destinations/catalog/pardot/ @kdaswani + # Engage -/src/engage/ @markzegarelli @pwseg @rchinn-segment +/src/engage/ @pwseg -# Personas owners -/src/personas @pwseg @rchinn-segent +# Unify +/src/unify @pwseg # Protocols owners /src/protocols @forstisabella # Storage owners -/src/connections/storage @forstisabella \ No newline at end of file +/src/connections/storage @forstisabella diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ffbc45271f..1cb9c5b9f4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,7 +41,7 @@ The most interesting ones are: **Save all images locally! No linking to third-party hosted images!** Images are published to our CDN from the build step, and this means they won't go missing if the hosting service dujour goes out of business. -There are no _enforced_ naming conventions at this time. Files that start with an underscore are ignored by Jekyll. Anything you see with `asset` was dowloaded by a script to migrate it out of Contents.io. +There are no _enforced_ naming conventions at this time. Files that start with an underscore are ignored by Jekyll. Anything you see with `asset` was downloaded by a script to migrate it out of Contents.io. In general, it's a good practice to name images with a description that helps you (& other docs maintainers) figure out where they should go within a page, or within a larger folder of images. @@ -77,6 +77,16 @@ Sources pages check if the source is a cloud-app, then include information about Content with in each `.md` file is markdown. For information about styling, and available extensions, see `_src/utils/formatguide.md` or the live version [here](https://segment.com/docs/utils/formatguide). +## Building a preview + +Netlify allows you to build a preview environment on any PR you create in GitHub. This is helpful when you want to send out a review, and the formatting and design are important to those reviewers. + +To build a preview site, add `[netlify-build]` to a commit message on your PR. Here's an example of what the preview build will look like: + +https://github.com/segmentio/segment-docs/pull/6051#issuecomment-1942723573 + +You can rebuild the preview by adding a new commit with `[netlify-build]` in the commit message. + ### Front matter Repository Markdown files often contain front matter metadata, which you'll find at the top of the file. These front matter variables instruct Jekyll how to build and render the page as HTML. @@ -101,7 +111,7 @@ Front matter variables have unique functions, including the following: - `hide-personas-partial`: defaults to false. When true, hides the section of content from `destination-footer.md` that talks about being able to receive personas data. - `integration_type`: This is set in the `_config.yml` on three paths to add a noun (Source, Destination, or Warehouse) to the end of the title, and the end of the title tag in the html layout. It also controls the layout and icon for some of these. - `source-type`: These are only used to supplement when a Cloud App in the sources path doesn't appear in the Config API list, and needs its type explicitly set. It runs some logic in the `cloud-app-note.md` to explain which cloud-apps are object vs event sources. - +- `private`: Used to indicate that a destination is not publicly available (Private Beta or Pilot status), and is not available in the public catalog. When `private: true`, the build pulls integration metadata from `src/_data/catalog/destinations_private.yml`. To update the list of private destinations, use the `make private_destination` command, and enter the integration's ID when prompted. #### Utility front matter - `published`: defaults to true. Set this to "false" to prevent Jekyll from rendering an HTML page for this file. Good for when you're working on something in the repo but aren't ready to release it yet, and don't want to use a Draft PR. - `hidden`: omits the file from the `sitemap.xml`, adds a `` to the top of the generated HTML file, and drops it from the convenience script for regenerating the nav. @@ -112,3 +122,4 @@ Front matter variables have unique functions, including the following: - `redirect_from`: Defaults to null. Takes an array of URLs from the front matter in a file, and generates a "stub" page at each URL at build-time. Each stub file redirects to the original file. Use the path from the root of the content directory, for example `/connections/destinations/catalog/` rather than `/docs/connections/destinations/catalog/`. **Note** We are mostly using NGINX redirects for SEO purposes. Approximately quarterly, we'll collect these and add them to NGINX. - `seo-changefreq`: default: `weekly `. Use the values [in the sitemap spec](https://www.sitemaps.org/protocol.html#xmlTagDefinitions). - sets the `changefreq` tag in the sitemap.xml generator, which tells search crawlers how often to check back. - `seo-priority`: values from `1.0` to `0.1`, default: `0.5 `. Sets the `Priority` tag in the sitemap +- `engage`: defaults to false. Hides the connection modes table and adds a note in the Destination Info box that reads "This destination is **only** compatible with [Twilio Engage](https://segment.com/docs/engage/)." diff --git a/Gemfile.lock b/Gemfile.lock index 23d34e3ad5..8f5e6c086c 100755 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,20 +1,20 @@ GIT remote: https://github.com/jekyll/jekyll.git - revision: 26a949df85a1f9577e8080e19f2196c8a3db17ec + revision: 58a1f62b2349bb477fc9999c40331cecdca577d8 specs: - jekyll (4.2.1) + jekyll (4.3.2) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) i18n (~> 1.0) - jekyll-sass-converter (~> 2.0) + jekyll-sass-converter (>= 2.0, < 4.0) jekyll-watch (~> 2.0) kramdown (~> 2.3, >= 2.3.1) kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) mercenary (>= 0.3.6, < 0.5) pathutil (~> 0.9) - rouge (~> 3.0) + rouge (>= 3.0, < 5.0) safe_yaml (~> 1.0) terminal-table (>= 1.8, < 4.0) webrick (~> 1.7) @@ -22,8 +22,8 @@ GIT GEM remote: https://rubygems.org/ specs: - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) + addressable (2.8.4) + public_suffix (>= 2.0.2, < 6.0) algolia_html_extractor (2.6.4) json (~> 2.0) nokogiri (~> 1.10) @@ -32,37 +32,23 @@ GEM json (>= 1.5.1) colorator (1.1.0) commonmarker (0.23.9) - concurrent-ruby (1.1.9) - dotenv (2.7.6) - em-websocket (0.5.2) + concurrent-ruby (1.2.2) + dotenv (2.8.1) + em-websocket (0.5.3) eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) + http_parser.rb (~> 0) eventmachine (1.2.7) - faraday (1.8.0) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0.1) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.1) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - multipart-post (>= 1.2, < 3) + faraday (2.7.5) + faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-httpclient (1.0.1) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - ffi (1.15.4) + faraday-net_http (3.0.2) + ffi (1.15.5) filesize (0.2.0) forwardable-extended (2.6.0) - http_parser.rb (0.6.0) + google-protobuf (3.23.2-x86_64-darwin) + http_parser.rb (0.8.0) httpclient (2.8.3) - i18n (1.8.10) + i18n (1.13.0) concurrent-ruby (~> 1.0) jekyll-algolia (1.7.1) algolia_html_extractor (~> 2.6) @@ -73,9 +59,8 @@ GEM nokogiri (~> 1.6) progressbar (~> 1.9) verbal_expressions (~> 0.1.5) - jekyll-commonmark (1.3.1) - commonmarker (~> 0.14) - jekyll (>= 3.7, < 5.0) + jekyll-commonmark (1.4.0) + commonmarker (~> 0.22) jekyll-dotenv (0.2.0) dotenv (~> 2.7) jekyll (~> 4) @@ -86,67 +71,57 @@ GEM posix-spawn (~> 0.3.9) jekyll-redirect-from (0.16.0) jekyll (>= 3.3, < 5.0) - jekyll-sass-converter (2.1.0) - sassc (> 2.0.1, < 3.0) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) jekyll-sitemap (1.4.0) jekyll (>= 3.7, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.6.0) - kramdown (2.3.1) + json (2.6.3) + kramdown (2.4.0) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.0) + liquid (4.0.4) + listen (3.8.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.4.0) - mini_portile2 (2.8.1) - multipart-post (2.1.1) - nokogiri (1.14.3) - mini_portile2 (~> 2.8.0) - racc (~> 1.4) - nokogiri (1.14.3-arm64-darwin) - racc (~> 1.4) - nokogiri (1.14.3-x86_64-darwin) - racc (~> 1.4) - nokogiri (1.14.3-x86_64-linux) + nokogiri (1.15.2-x86_64-darwin) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) posix-spawn (0.3.15) premonition (2.0.1) - progressbar (1.11.0) - public_suffix (4.0.6) + progressbar (1.13.0) + public_suffix (5.0.1) racc (1.6.2) rake (13.0.6) - rb-fsevent (0.11.0) + rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) rexml (3.2.5) - rouge (3.26.1) + rouge (4.1.2) ruby2_keywords (0.0.5) safe_yaml (1.0.5) - sassc (2.4.0) - ffi (~> 1.9) + sass-embedded (1.62.1-x86_64-darwin) + google-protobuf (~> 3.21) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thread_safe (0.3.6) - tzinfo (1.2.10) + tzinfo (1.2.11) thread_safe (~> 0.1) - tzinfo-data (1.2021.4) + tzinfo-data (1.2023.3) tzinfo (>= 1.0.0) - unicode-display_width (2.1.0) + unicode-display_width (2.4.2) verbal_expressions (0.1.5) wdm (0.1.1) - webrick (1.7.0) + webrick (1.8.1) PLATFORMS - arm64-darwin-20 ruby + x86_64-darwin-19 x86_64-darwin-20 - x86_64-linux DEPENDENCIES dotenv @@ -166,4 +141,4 @@ DEPENDENCIES wdm (~> 0.1.0) BUNDLED WITH - 2.2.2 + 2.2.18 diff --git a/Makefile b/Makefile index 129bc477aa..431c19f456 100755 --- a/Makefile +++ b/Makefile @@ -55,29 +55,8 @@ package: build serve: package @docker run -p 4000:80 segment-docs:latest -# gives us user-transparent way to swap between two different systems -.PHONY: catalog -catalog: catalog-papi - -# uses the old configapi -.PHONY: capi -capi: vendor/bundle - @node scripts/catalog_capi.js - -# shorter alias -.PHONY: catalog-capi -catalog-capi: vendor/bundle - @node scripts/catalog_capi.js - -# uses the new public api -.PHONY: catalog-papi -catalog-papi: vendor/bundle - @node scripts/catalog_papi.js - -# shorter alias -.PHONY: papi -papi: vendor/bundle - @node scripts/catalog_papi.js +catalog: + @node scripts/catalog/index.js # make the list of beta connections .PHONY: beta @@ -140,7 +119,7 @@ seed: .PHONY: node_modules node_modules: package.json yarn.lock - yarn --frozen-lockfile + yarn --immutable .PHONY: vendor/bundle vendor/bundle: @@ -184,7 +163,7 @@ docker-build: .PHONY: private-destination private_destination: - @node scripts/private-destination.js + @node scripts/catalog/addPrivateDestination.js #.PHONY: docs #docs: node_modules # $(BIN)/webpack --mode=production diff --git a/README.md b/README.md index 19e1de530e..5cd2f409a3 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,25 @@ This repository contains the documentation website code and source files for htt In this article, find information about: +- Prerequisites - Contributing - A list of READMEs - Code of conduct - License agreement +## Prerequisites +The following are a list of prerequisites you may want to consider downloading and installing to successfully contribute to the Segment docs repo: + +1. Download and install a source code editor like [Visual Studio Code](https://code.visualstudio.com/download). +1. Download and install a package manager such as [Homebrew](https://brew.sh/) to install new software. +1. [Create an account on GitHub](https://docs.github.com/en/get-started/quickstart/creating-an-account-on-github) if you don't have one already, or sign in with your existing GitHub account. +1. Add the GitHub extension to your editor (in VSC: https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github). +1. [Clone](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) the Segment docs repo. +1. Download and install the latest version of [node.js](https://nodejs.org/en/download). Consider using a version manager such as [ASDF](https://github.com/asdf-vm/asdf) or [nvm-windows](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows). +1. Install dependencies + `npm i` +1. Install [vale](https://docs.errata.ai/vale/install). An [ASDF plugin](https://github.com/osg/asdf-vale) is also available. + ## Contributing The Segment docs team accepts contributions in the form of issues and pull requests. diff --git a/branches.txt b/branches.txt new file mode 100644 index 0000000000..c3dc64249f --- /dev/null +++ b/branches.txt @@ -0,0 +1,577 @@ + 0721-catalog 8ed8d95af [origin/0721-catalog: gone] Catalog update for July 21 + 0726-catalog 26a3faf04 [origin/0726-catalog: gone] Catalog update + 0728-catalog 8a883a46f [origin/0728-catalog: gone] catalog update + 10-13-catalog ff669a327 [origin/10-13-catalog: gone] catalog update + 10-18-catalog 5815d5a8f [origin/10-18-catalog: gone] Update the catalog + 10-20-catalog 9c497dcae [origin/10-20-catalog: gone] Catalog update 10-20 + 11-10-catalog d3d55840f [origin/11-10-catalog: gone] Catalog update + 11-11-fixes 738fe9cf8 [origin/11-11-fixes: gone] Re-adding these + 11-15-catalog 4f4545412 [origin/11-15-catalog: gone] Catalog update + 11-17-catalog 66bb3b069 [origin/11-17-catalog: gone] Fix conflicts + 11-29_catalog cc670f9c8 [origin/11-29_catalog: gone] Catalog update + 12-1-catalog 0e1012eb7 [origin/12-1-catalog: gone] Catalog update + 12-6-catalog a4a6208e9 [origin/12-6-catalog: gone] Catalog update + 12-8_catalog 112e87586 Catalog updates + 1860-link-fixes defca251a fix links + 20221213-catalog f279bea1b [origin/20221213-catalog] Segment destination to public beta + 20221215_catalog 7f3f3460b [origin/20221215_catalog] fix Salesforce Marketing Cloud Actions slug + 20230103-catalog 61a0a6728 [origin/20230103-catalog] Private destinations update + 20230105_catalog f09f61d26 [origin/20230105_catalog] Catalog Update + 20230110_catalog e46536137 [origin/20230110_catalog] catalog update + 20230112_catalog 5e631bf12 [origin/20230112_catalog] Catalog update + 20230113-vale-updates 73ef336ab [origin/20230113-vale-updates] Update vale rules + 202301170-catalog 080986d69 [origin/202301170-catalog] catalog update + 20230119-catalog 942744204 [origin/20230119-catalog] Catalog update for Jan 19 + 20230124-catalog 2b05240d6 [origin/20230124-catalog: ahead 4] Merge branch 'develop' of github.com:segmentio/segment-docs into 20230124-catalog + 20230126 07b65af74 [origin/20230126] Catalog update Jan 26 + 20230131_catalog 5e3f00a01 [origin/20230131_catalog] Catalog update 01-31-2023 + 20230202-catalog 069d9798b [origin/20230202-catalog] catalog update + 20230209-catalog df44c33ab [origin/20230209-catalog] catalog + 20230214_catalog 7e9d25b10 [origin/20230214_catalog] catalog update + 20230216-catalog 9cd9a548b [origin/20230216-catalog] catalog update + 20230221-catalog e0946fe9f [origin/20230221-catalog] catalog + 20230223-catalog 012ada305 [origin/20230223-catalog: ahead 2] conflicts + 20230228-catalog 7572d8c6e [origin/20230228-catalog] catalog update + 20230302-catalog af1305315 [origin/20230302-catalog] Catalog update + 20230307-catalog dc02b6a19 [origin/20230307-catalog] catalog update + 20230314-catalog a86b3b739 [origin/20230314-catalog] Catalog update + 20230316-catalog 4c337cb6d [origin/20230316-catalog] Catalog update + 20230323-catalog dbd848077 [origin/20230323-catalog] Catalog update + 20230327-catalog 7f99b1797 [origin/20230327-catalog: ahead 24] Merge branch 'develop' of github.com:segmentio/segment-docs into 20230327-catalog + 20230328-fixes 2de568124 [origin/20230328-fixes] fix redirect + 20230404-catalog da1ebbcd1 [origin/20230404-catalog] Update catalog + 20230406-catalog 6f840028d [origin/20230406-catalog] catalog update + 20230411-catalog 25e9988fc [origin/20230411-catalog] catalog update + 20230413-catalog a33d99e90 [origin/20230413-catalog] catalog update + 20230418-catalog 9692a98f0 [origin/20230418-catalog] Catalog update + 20230420-catalog 9e0f0c2e4 [origin/20230420-catalog] merge conflict resolutions + 20230425-catalog a5952683f [origin/20230425-catalog] catalog update + 20230427-catalog a3ea91960 [origin/20230427-catalog] catalog update + 20230509-catalog f63e002a8 [origin/20230509-catalog] catalog update + 20230621-one-off 7c87f77fa [origin/20230621-one-off] re-add iterable actions private metadata + 20231321-catalog 2d655615d [origin/20231321-catalog] catalog update + 2279-fix bb3572583 [origin/2279-fix: gone] fixes 2279 + 2303-clevertap-override 81c1930b1 [origin/2303-clevertap-override: gone] Update CleverTap connection modes + 2658-gtm-update cfbc28f98 [origin/2658-gtm-update: gone] Clarify to remove GTM snippet + 2659-google-analytics ae0f9feea [origin/2659-google-analytics: gone] Update partial refund requirements + 2765_mixpanel-update 48beb3c8f [origin/2765_mixpanel-update: gone] Added requested section to Mixpanel Identify + 2839-tracking-plan-template c1f3e48a4 [origin/2839-tracking-plan-template: gone] Updated Tracking Plan link + 2865-streams-updates 50c3e5752 [origin/2865-streams-updates: gone] Fixed sentence and format errors + 2906-ga-snippet 954ee093a [origin/2906-ga-snippet: gone] Updated example page call to include category + 2922-intercom 85797ca22 [origin/2922-intercom: gone] Fix Intercom connection modes + 2951_helpscout-custom-properties b74a6883b [origin/2951_helpscout-custom-properties: gone] Noted that Help Scout cannot receive custom properties + 2961_ga4-update 7cccc74e8 [origin/2961_ga4-update: gone] Add information about GA4 custom event naming + 2979_update-python-package cbda14543 [origin/2979_update-python-package: gone] Updated Python package name + 3-18-hotfix da583d72a [origin/3-18-hotfix: gone] Merge branch 'develop' into 3-18-hotfix + 3018_event-filters 74ed21039 [origin/3018_event-filters: gone] Updated content to reflect impact of Tracking Plans + 3215-moengage f931a0bea [origin/3215-moengage: gone] Add note about MoEngage anonymous id support + 3236-pendo 600e9c1fe [origin/3236-pendo: gone] Add clarity to the use of webhooks for Cloud-mode + 3261-factorsai 5507e80c4 [origin/3261-factorsai: gone] Did it the right way this time + 3294-python-regional-host a9ab1199e [origin/3294-python-regional-host: gone] So. Many. Vale edits. + 3328-amp-settings 96e1d5684 [origin/3328-amp-settings: gone] Re-add dropped word + 3435-warehouse-integrations-object 534346292 [origin/3435-warehouse-integrations-object: gone] Mention integrations object in Warehouse FAQ + 3492-intercom-update c26f69166 [origin/3492-intercom-update: gone] Update Intercom destination docs + 3499-fix-anchor cccdec2f1 [origin/3499-fix-anchor: gone] Fix an anchor link + 3570-missing-comma 42cdf2b30 [origin/3570-missing-comma: gone] Add missing comma to code example + 3571-regional-endpoint ef5050e3c [origin/3571-regional-endpoint: gone] Update the EU endpoint for server-side sources + 3575-remove-SLA-from-title c99308d29 [origin/3575-remove-SLA-from-title: gone] Remove 'SLA' from title and nav to remove confusion + 3614-broken-gh-link 7dc631a1b [origin/3614-broken-gh-link: gone] Remove link to closed repository + 3617-amazon-s3-source aa8c5c2c9 [origin/3617-amazon-s3-source: gone] Update Lambda command to resolve error + 3641-mutiny 0b22857ce [origin/3641-mutiny: gone] Add information about events Mutiny sends to Segment + 3646-eloqua 488c02ce1 [origin/3646-eloqua: gone] Specify display name and not DB name + 3669-python-fix b6ba54b32 [origin/3669-python-fix: gone] Update Analytics import statement to avoid error + 3727-actions-template bdae2d4b0 [origin/3727-actions-template: gone] Updated Actions template for actions that don't have a defaeult trigger + 3744-add-image 11cc59afd [origin/3744-add-image: gone] Added image to better illustrate the configuration of a Person Account + 3769-amazon-s3-update 4826e0454 [origin/3769-amazon-s3-update: gone] Update nodejs version and remove out-of-date images + 3789-source-types 834144263 [origin/3789-source-types: gone] Update src/connections/sources/index.md + 3791_typewriter-update 38b0b5568 Add link to blog post [netlify-build] + 3805-move-workspace 7106f208c [origin/3805-move-workspace: gone] Add note that Tracking Plans do not transfer to a new workspace + 3833-update-spec 7226beaef [origin/3833-update-spec: gone] Add required event field in example Track payload + 3848-snowflake-destination-images b0469f68f [origin/3848-snowflake-destination-images: gone] Remove images from doc, vale edits + 3861-remove-private-repo-link 42c2d1869 [origin/3861-remove-private-repo-link: gone] Remove link to private repository + 3999_floodlight 96648a089 [origin/3999_floodlight] Add clarification about where dc_rdid is used + 4-7_catalog 1fd6db868 [origin/4-7_catalog: gone] Catalog update + 4018-reword 543fe9c10 [origin/4018-reword] Update language + 4138-glossary-update 90ad11202 [origin/4138-glossary-update] Fix incomplete definition in the Glossary + 4336-google-ads-classic 7b28c5125 [origin/4336-google-ads-classic] Update verbiage, address vale concerns + 4448-regional-plan-grid 4d73067d5 [origin/4448-regional-plan-grid] Add BT only note to regional + 4481-ajs-single-page cde618ec0 [origin/4481-ajs-single-page] edits + 4586-talon-one 229af5ee0 [origin/4586-talon-one] Add note about Talon.One rate limit + 4595-marketo 7ca8f9336 [origin/4595-marketo] Add note about Marketo's Lead Activity Type IDs field + 4724-helpscout 736326514 [origin/4724-helpscout] Add note that Help Scout OAuth supports one destination per user + 5-16_link_fixes fbe1bec9d [origin/5-16_link_fixes: gone] broken link fixes + 5-17_catalog a5ad0bcf1 [origin/5-17_catalog: gone] made catalog + 5-2_link-fixes 79e18e2b0 [origin/5-2_link-fixes: gone] Fixed some broken URLs + 6-23-catalog-update 1df113d80 [origin/6-23-catalog-update: gone] Catalog updates for June 23 + 6-28-catalog 338e14e9f [origin/6-28-catalog: gone] Catalog update + 7-14-catalog 668face97 [origin/7-14-catalog: gone] Merge branch 'develop' into 7-14-catalog + 7-6_typo 4edc56719 [origin/7-6_typo: gone] Fix typo + 8-25-catalog 713065c7d [origin/8-25-catalog: gone] Catalog update + 8-30_catalog 03517cb9d [origin/8-30_catalog: gone] catalog update + 8-9-catalog cc000de78 [origin/8-9-catalog: gone] Refresh + 9-21-catalog abe02e5d3 [origin/9-21-catalog: gone] Catalog update + 9-22-catalog 4217779af [origin/9-22-catalog: gone] Hide the number of actions + 9-8_catalog 6b6118596 [origin/9-8_catalog: gone] catalog update + Braze-dest-links 5ea904b41 [origin/Braze-dest-links: gone] fix braze maintenance links + CSV-and-subscription-updates abaed7822 [origin/CSV-and-subscription-updates] update image + CleverTap/develop 2962e5358 Edits and connected metadata + ClientSuccess_updates a3484c447 [origin/ClientSuccess_updates: gone] updates requested from partner + DOC-131_Algolia 226ab5075 init + DOC-136_ajs-next a9fa1934d [origin/DOC-136_ajs-next: gone] DOC-136 copy edit and go live + DOC-140_release-note 8d5a23c61 ajs changelog template + DOC-158_remove-drift-dest 53802f36b Merge pull request #1516 from segmentio/link_fixes + DOC-161_int-collection 00765fb80 doc-161 test + DOC-167-journeys 182207f08 [origin/DOC-167-journeys] DOC-167 fix code + DOC-170_danger ea316240a [origin/DOC-170_danger: gone] [netlify-ignore] + DOC-190_QI-feedback 8c48dfb27 [origin/DOC-190_QI-feedback: gone] Merge branch 'master' into DOC-190_QI-feedback + DOC-200_Update-Journeys 8efe99695 DOC-200 update use cases + DOC-206_part-2 78e455026 [origin/DOC-206_part-2: gone] ignore this file + DOC-223_ext-link 2c7af6c00 Merge pull request #1682 from segmentio/crisp-docs + DOC-230_CSP-update 86506978b Merge pull request #1718 from segmentio/DOC-227 + DOC-259_timestamp-update 595c2cf33 [origin/DOC-259_timestamp-update: gone] Updated description of the way Segment calculates timestamps + DOC-279_xcode-update 032eb6a88 Merge pull request #1765 from segmentio/personas_typo + DOC-284_update-actions-doc 54dbf65fd Merge pull request #1781 from segmentio/aug-4_bulk_fixes + DOC-288 ac4860608 update catalog [netlify-ignore] + DOC-29_CODEOWNER-cleanup a8dff51d8 start paring + DOC-302_criteo-conn-modes a5dec67ed [origin/DOC-302_criteo-conn-modes: gone] Add note about Criteo connection modes with Analytics.js + DOC-309_hubspot-api-request 960a41827 [origin/DOC-309_hubspot-api-request: gone] Add clarity to HubSpot API limit + DOC-31_release-notes d92a04406 [origin/DOC-31_release-notes: gone] DOC-31 init + DOC-31_release-notes-proto e5821887a [origin/DOC-31_release-notes-proto: gone] Merge branch 'master' into DOC-31_release-notes-proto + DOC-324_souce-type 89976e907 [origin/DOC-324_souce-type: gone] Add cloud source type to metadata + DOC-342 cbfb8f8e9 [origin/DOC-342: gone] Conn mode override and cleanup + DOC-342_clevertap-con-modes 14d5f8a59 Merge pull request #2024 from segmentio/repo-sync + DOC-348_page-screen 7904aa760 DOC-348 split page and screen + DOC-358_amp-actions-update df95facb0 Merge pull request #2103 from segmentio/juliaparksegment-patch-1 + DOC-3_release-notes-gh e5a13035a Merge pull request #1183 from segmentio/DOC-4_netlify-improvements + DOC-400_adjust-mappings 676118aeb [origin/DOC-400_adjust-mappings: gone] Added mappings for Adjust Cloud-mode + DOC-404_facebook-capi-actions 9bbd831f2 [origin/DOC-404_facebook-capi-actions: gone] remove year + DOC-436_expose-fql-doc cea490912 [origin/DOC-436_expose-fql-doc: gone] Linking to FQL from Destination Filters doc + DOC-440_remove-property 466a2c65e [origin/DOC-440_remove-property: gone] Removed a property that does not exist in the Intercom source + DOC-446_hash-details 33868ef6c [origin/DOC-446_hash-details: gone] Added a note about property hashing + DOC-447_fix-urls 99a626c50 [origin/DOC-447_fix-urls: gone] Fix URLs in Regional Segment support table + DOC-455-facebook-app-events 19ddd2c51 [origin/DOC-455-facebook-app-events: gone] Added clarity to Facebook App Events context.device.type accepted values + DOC-456-tiktok df5491a56 [origin/DOC-456-tiktok: gone] add better description + DOC-462_super-properties 0beb05a0b [origin/DOC-462_super-properties: gone] Add a note about super properties in Mixpanel + DOC-468_hubspot 7e5ea6005 [origin/DOC-468_hubspot: gone] Add 'name' to traits list for Group call + DOC-497_tile-redirects f27cad6de [origin/DOC-497_tile-redirects: gone] Added redirects and related destinations + DOC-499_Salesforce-group d97ba7d98 [origin/DOC-499_Salesforce-group: gone] Remove section about actions + DOC-500_zendesk-update a0dc4ede2 [origin/DOC-500_zendesk-update: gone] Added note about Zendesk API limit + DOC-501_AppsFlyer-update dc34e10d1 [origin/DOC-501_AppsFlyer-update: gone] Remove personas section drom AppsFlyer destination + DOC-505_fix-url 40d130229 [origin/DOC-505_fix-url: gone] Fix broken URl + DOC-507-drip-override 1d402de7d [origin/DOC-507-drip-override: gone] Override the Drip destination connection modes + DOC-510 c2f8866b1 [origin/DOC-510: gone] Added Action Source table + DOC-513-Clevertap_alias 4c3c1243e [origin/DOC-513-Clevertap_alias: gone] Add section for supported Alias call. + DOC-514_moengage 08436ab37 [origin/DOC-514_moengage: gone] Hide Personas partial + DOC-520_clevertap-cmode 6c58d72e1 [origin/DOC-520_clevertap-cmode: gone] Remove Cloud-web from CleverTap's connection modes + DOC-526_actions-map-limits 2264bdec5 [origin/DOC-526_actions-map-limits: gone] Added verbiage to describe the maximum number of mappings + DOC-530_integration-object 4481e6379 [origin/DOC-530_integration-object: gone] Updated the way that the integrations object handles All: false + DOC-531_server-source 2e4c5faf3 [origin/DOC-531_server-source: gone] Add instructions for host param to server-side sources + DOC-540_ibm-watson-source 6c7f4991e updates + DOC-540_watson 2da2bdc9e [origin/DOC-540_watson: gone] merge master and make catalog + DOC-542-ajs-links 84122b291 [origin/DOC-542-ajs-links: gone] vale edits + DOC-544_integration-object fedb60305 [origin/DOC-544_integration-object: gone] Update integration object use depending on connection mode + DOC-549-mixpanel 62b050b26 [origin/DOC-549-mixpanel: gone] Updates and Vale edits + DOC-555-debugger b7a94e5ad Merge pull request #3245 from segmentio/repo-sync + DOC-566-payload-size 7f788695d [origin/DOC-566-payload-size: gone] Specified that A.js messages over 32kb result in a 500 error + DOC-570 8a26bcd4e [origin/DOC-570: gone] update accepted word list + DOC-574_zlib 903c1647c [origin/DOC-574_zlib: gone] Update how zlib must be referenced in functions docs + DOC-577_warehouse-redirect da21fa475 [origin/DOC-577_warehouse-redirect: gone] Add redirect to temp fix broken link from app + DOC-579_TP-library-updates b6ffe1f04 [origin/DOC-579_TP-library-updates: gone] Tracking Plane dupe details + DOC-602_LD-actions c3134757e [origin/DOC-602_LD-actions: gone] Add a note that explains why Segment does not map Identify to LaunchDarkly (Actions) + DOC-607_hipaa c8c24a367 [origin/DOC-607_hipaa: gone] Merge branch 'develop' into DOC-607_hipaa + DOC-608_woopra 054cd46de [origin/DOC-608_woopra: gone] Update Woopra Connection modes + DOC-610-zendesk f9c14feb0 [origin/DOC-610-zendesk: gone] Added a note about using in Zendesk. + DOC-611_facebook 1421eae4b [origin/DOC-611_facebook] Describe Segment -> Facebook user data mapping + DOC-612_tax-updates d71c227ce [origin/DOC-612_tax-updates] Add information about tax ID format validation + DOC-617_computed-trait-limits 5a6869504 [origin/DOC-617_computed-trait-limits: behind 1] Add information about Event Property Limits on Computed Traits + DOC-623_delay-initialization 6664783de [origin/DOC-623_delay-initialization: gone] Add content to explain the a.js delay loadfeature + DOC-630_pub-api-dest-region 525e2f6d4 Don't nuke the whole file if 404 (#3949) + DOC-632_engage-limit-updates 6948fb3d0 [origin/DOC-632_engage-limit-updates: behind 84] Add new product limits for Engage + DOC-635 f1e1043c7 [origin/DOC-635] fixed RETL icon fill + DOC-641_stripe_update 721cae2a7 [origin/DOC-641_stripe_update] Fix tax_rates collection [netlify-build] + DOC-648 864c84bcb [origin/DOC-648] conflict resolve + DOC-65_Algolia-crawl 0d1f0b067 [origin/DOC-65_Algolia-crawl: gone] Merge branch 'master' into DOC-65_Algolia-crawl + DOC-677 224dccf24 [origin/DOC-677] Add note about availability of Public API SDKs + DOC-699_tax-update 78f74c579 [origin/DOC-699_tax-update] Remove content on specific tax areas + DOC-6_Personas-DV360 bc109749f [origin/DOC-6_Personas-DV360: gone] DOC-6 small fix + DOC-70_algolia 8ff6e2211 [origin/DOC-70_algolia: gone] [netlify-ignore] + DOC-711_bing-ads fd4064d57 [origin/DOC-711_bing-ads] Updated doc with link to MS content + ENTCX-668_DOC-613 47fbe3a7f [origin/ENTCX-668_DOC-613] Add detail about audit forwarding + Friendbuy-destination 960566406 [origin/Friendbuy-destination: gone] add snippet to pull API data + GDPR-update f9130f88e [origin/GDPR-update: gone] typo + Gladly-fix f7d4332d6 [origin/Gladly-fix: gone] Fixed broken table + Moengage-engage-update ce152388c [origin/Moengage-engage-update: gone] Typo + PINT-1842 b53d3f9fe [origin/PINT-1842] Remove duplicate info [netlify-build] + RN-redesign d603b6672 [origin/RN-redesign] merge master and clean up [netlify-build] + VitalyStakhov/develop ec88c0aab Update index.md + Wisepops/develop 01f25c055 [origin/Wisepops/develop: gone] Fix private destination yaml + actable-predictive 44ba21a6d [origin/actable-predictive] Add ID and private metadata + action-dest-field-mapping 7daba3f2c [origin/action-dest-field-mapping: gone] Pull actions data by ID, with slug fallback + actions-catalog-stuff 92779582c [origin/actions-catalog-stuff: gone] Add actions destinations to category compare + actions-conditional-ajs2-banner fba9698fd init + actions-default-trigger 0b8374cb7 [origin/actions-default-trigger: gone] capitalize trigger elsewhere + actions-dests-migration 9a19f2177 updated main article and amplitude migration table + actions-livelike-cloud 36f5e0744 merge develop + actions-moengage a60c3c99a [origin/actions-moengage: gone] Add private metadata + add-SegmentRETL-docs d5dba52cd [origin/add-SegmentRETL-docs] Set to private + add-beta-status 3a53df3d8 [origin/add-beta-status: gone] Add beta status to destination info + add-commandbar-docs 02b0bfec7 [origin/add-commandbar-docs: behind 1] Edits and private beta actions info + add-doc-actions-webhooks 60ebcc042 [origin/add-doc-actions-webhooks: gone] Add metadata + add-dossier-to-actions 05820392f [origin/add-dossier-to-actions: gone] Enabled destination metadata block for Actions destinations + add-github-token-scanning 595706ceb [origin/add-github-token-scanning: behind 2] Small edits + add-logrocket-documentation 7c06e1fca [origin/add-logrocket-documentation: gone] fix private metadata + add-required-to-action-fields 2f213eac5 [origin/add-required-to-action-fields: gone] Add required indicator to actions fields + add-schema-to-nav 61f2641d0 [origin/add-schema-to-nav: gone] Add Schema Controls to main nav + add-space-to-meta-title e5e577bb7 [origin/add-space-to-meta-title: gone] Reformat og:title + airship-doc-sync ae2d7eda9 edits for grammar and style + ajs-cookie e1f26998b init + ajs-npm a789526c7 [origin/ajs-npm: gone] Add the NPM option to A.js quickstart + algolia c49846beb update config + algolia-docsearch 63ac48d7c meh + algolia-insights-update-docs a7ca0d43f [origin/algolia-insights-update-docs] Edits + algolia-upgrade 6728f73a0 search works again + algolia_query_sugs 03bd39c76 Merge pull request #1462 from segmentio/make-catalog-lantern-beta + amberflo 6b33f853b [origin/amberflo: gone] edits + analytics-swift-updates 078e8a6fd update slug overrides + azure-doc-changes cf32ba1c4 [origin/azure-doc-changes: gone] Apply suggestions from code review + beta-list 34901360c [origin/beta-list: gone] Built tooling to spit out a CSV of beta sources and destinations + blend-ai/actions-destination 6bcecf229 Add metadata + blueshift-dest-docs 47c738ac9 [origin/blueshift-dest-docs] Stub out article + bobbyatsegment-patch-1 6b64e7275 [origin/bobbyatsegment-patch-1: ahead 2, behind 1742] Move data into a table to improve readability + bobbyatsegment-patch-2 98abba610 [origin/bobbyatsegment-patch-2: ahead 2, behind 1399] Add plan grid to Public API page + braze-maintenance 179220045 [origin/braze-maintenance: gone] Added line break + braze-related-dests 629d59aa6 [origin/braze-related-dests: gone] Add additional version to Braze Cloud (Actions) + broken-link-fixes f1d8fe055 fix some links + broken-links-10-5 2339ece61 Fix some URLs + build-performance-improvement 828ba425b [origin/build-performance-improvement] Removed mobile menu + build-time-improvements 991b5241f [origin/build-time-improvements] Update redirects file + canny/canny-functions 93f82418a [origin/canny/canny-functions: ahead 65] Merge branch 'develop' into canny/canny-functions + catalog aee339f9f catalog update + catalog-8-18 6ba8aca73 [origin/catalog-8-18: gone] catalog update + catalog-fix 312df295e Merge pull request #1517 from segmentio/kdaswani-patch-2 + catalog-set-visible ffd81ab64 Init + catalog-slug-overrides da0b5a2b1 [origin/catalog-slug-overrides: gone] Added yaml file for integration slug overrides + catalog-update-3-2 9162cf342 [origin/catalog-update-3-2: gone] updated the catalog + catalog_4-12 16ec05bf7 [origin/catalog_4-12: gone] catalog update + catalog_9-6 e31750100 [origin/catalog_9-6: gone] catalog update + changeZendeskDocs 5888b3dd7 [origin/changeZendeskDocs] Clarify setup instructions + cleanup-aisle-6 22bef5220 [origin/cleanup-aisle-6] don't publish unneeded utils + cleanup-old-integration-data 872cfb62f [origin/cleanup-old-integration-data] remove old capi integrations metadata + cliff-docs bd4352e15 [origin/cliff-docs: gone] Cliff Destination Documentation + cloud-object-regional ccb28fd03 [origin/cloud-object-regional: gone] Cloud Object sources are available in the EU + codeowners-update ce42eeab7 [origin/codeowners-update: gone] Merge branch 'develop' into codeowners-update + common-spec-updates 74dbf5e82 [origin/common-spec-updates: gone] Common Spec cleanup + config-api-redirect 7775917c8 [origin/config-api-redirect: gone] Add redirect to Config API + connection-mode-calc-fix 7001ae8bf [origin/connection-mode-calc-fix] Use supported platforms instead of components to calculate + connection-modes-verify db815c732 [origin/connection-modes-verify: gone] Update index.md + consent-manager-url-fix 1f4bb1320 [origin/consent-manager-url-fix: gone] Fix Consent Manager URL + criteo-audiences-fix 0b1ba3553 [origin/criteo-audiences-fix: gone] Publish Criteo Audiences destination docs + criteo-forks/develop d474a42cf update word accept list + crossingminds 85722c780 [origin/crossingminds: gone] Add frontmatter + csv-upload-plan-change e18e1fb30 [origin/csv-upload-plan-change: gone] Engage CSV Upload is available on Engage Premier plans + customer-io_edits 3b9cd6b04 edits from customer.io + data-lakes-azure-regional d729b1c3d [origin/data-lakes-azure-regional: gone] Add Data Lakes (Azure) to the regional table + data-res-fix-batch-1 6462cb2f8 fix code block indents + datarangers-destination 3daabccb8 [origin/datarangers-destination: gone] Apply suggestions from code review + daveo237-patch-1 78332860d [origin/daveo237-patch-1: gone] Edits, remove image + dc-floodlight-updates 19d38d3b0 [origin/dc-floodlight-updates: gone] Small edits + deepl-api b09471bd8 Updates about title translation + dependabot-february d955453c1 update algolia + dependabot-security 32c2e3ccb Merge pull request #2667 from segmentio/repo-sync + dependabot-updates 4d0b748b7 Merge pull request #2360 from segmentio/journeys_backfill_fixes + dependabot/bundler/nokogiri-1.13.10 2c7b8f3c8 [origin/dependabot/bundler/nokogiri-1.13.10] Bump nokogiri from 1.13.9 to 1.13.10 + dependabot/bundler/nokogiri-1.13.9 d45d6b396 [origin/dependabot/bundler/nokogiri-1.13.9: gone] Bump nokogiri from 1.13.6 to 1.13.9 + dependabot/npm_and_yarn/json5-1.0.2 5773d77f3 [origin/dependabot/npm_and_yarn/json5-1.0.2] Bump json5 from 1.0.1 to 1.0.2 + dependabot/npm_and_yarn/json5-and-babel-loader-2.2.3 ddbd0d102 [origin/dependabot/npm_and_yarn/json5-and-babel-loader-2.2.3] Bump json5 and babel-loader + dependabot/npm_and_yarn/loader-utils-1.4.1 0ac6af160 [origin/dependabot/npm_and_yarn/loader-utils-1.4.1: gone] Bump loader-utils from 1.4.0 to 1.4.1 + dependabot/npm_and_yarn/minimatch-3.1.2 67499c5c5 [origin/dependabot/npm_and_yarn/minimatch-3.1.2: gone] Merge branch 'develop' into dependabot/npm_and_yarn/minimatch-3.1.2 + dependabot/npm_and_yarn/minimist-1.2.7 479ffe924 [origin/dependabot/npm_and_yarn/minimist-1.2.7: gone] Bump minimist from 1.2.5 to 1.2.7 + dependabot/npm_and_yarn/qs-and-browser-sync-6.11.0 815c4f2ee [origin/dependabot/npm_and_yarn/qs-and-browser-sync-6.11.0] Bump qs and browser-sync + deploy-fix 990e3e841 Merge pull request #3546 from segmentio/repo-sync + deploy-metronome-actions e0d7be888 [origin/deploy-metronome-actions: gone] Deploy Metronome (Actions) + deprecation-flag 40ff640d4 [origin/deprecation-flag] add support for a deprecated: true flag + dest-actions-stage 0ded12f44 [origin/dest-actions-stage: gone] catalog update + dest-ownership 3665c1d4e [origin/dest-ownership] display ownership of destinations + destination-function-code-fix 649bfe2a3 [origin/destination-function-code-fix: gone] Fixed Destination Function code sample + destination-slug-updates a6ccb1131 [origin/destination-slug-updates: gone] j + destination/RegalVoice 101a2e560 [origin/destination/RegalVoice: gone] light grammar and active voice pas [DOC-7] + destination/courier f7dff8b9c [origin/destination/courier: gone] last message edit + destination/kevel 08b99f736 [origin/destination/kevel: gone] Kevel Destination Docs + dev-696-create-submit-docs d6a8961d1 [origin/dev-696-create-submit-docs] remove mistake new file + dev-768-add-cloud-mode-docs 7534f4b71 [origin/dev-768-add-cloud-mode-docs] Add ID and private metadata + dev-center-2 b2d40e5a6 [origin/dev-center-2] No longer in Dev preview + develop 8a237a092 [origin/develop] Merge pull request #5026 from segmentio/thomas/airship + dl_ga_updates ed9e76e0d [origin/dl_ga_updates: gone] Merge branch 'master' into dl_ga_updates + doc-86-functions-batching 2dda50943 [origin/doc-86-functions-batching: gone] DOC-86 cleanup and Chris O comments + doc-template-updates 094e9ff0d Merge branch 'master' into develop + doc_search 71a4d6b95 [origin/doc_search: gone] Merge branch 'doc_search' of github.com:segmentio/segment-docs into doc_search + docs/toplyne 79a52c1a4 modify docs as per review comments + dossier-feedback 87bef83f9 Vespucci docs (#1590) + doubleclick-floodlight-connection-modes 2769af71a [origin/doubleclick-floodlight-connection-modes: gone] Update connection mode overrides + dummy-form-test 443db0258 [origin/dummy-form-test: behind 42] Update styling for all + emarsys_v_1_2 7bfbfb5a7 set private + empty-alt-tag-vale d1ac37d3d [origin/empty-alt-tag-vale: gone] Add vale rule to check for empty image alt tags + engage-destination-list 790396f96 [origin/engage-destination-list] Recalc connection modes and build list + engage-regional-updates 7d902d32a [origin/engage-regional-updates] Add verbiage about regional availablitly for Engage + engage-search-update 998e954cb don't show engage results in main search + event-limit-update d6e80958a Merge pull request #4245 from segmentio/20230216-catalog + event-limits 8a16dfa18 [origin/event-limits] updates + external-link-test fa37cc31e Regal Voice Destination docs (#1137) + external-linkcheck-ignore-file 0e26209a1 [origin/external-linkcheck-ignore-file: gone] fixes + fb-capi-actions-updates 9dada4a67 [origin/fb-capi-actions-updates: gone] add to strat + fb-custom-audiences-cleanup 093eb129c [origin/fb-custom-audiences-cleanup: gone] Update requested from CSullivan + fb/june-docs 922bf187d [origin/fb/june-docs] merge develop + feature/SC-2668 209846a7d [origin/feature/SC-2668] Edits and metadata + fix-catalog-script 7e23b779a [origin/fix-catalog-script: gone] fix catalog script + fix-destination-overrides e20b5e384 [origin/fix-destination-overrides: gone] Destination overrides should work on id + fix-headings aa3dc0423 [origin/fix-headings: gone] Restore category headings to destinations catalog + fix-papi-nav fc68db1d7 [origin/fix-papi-nav] Fix Public API IA + fix-profiles-breadcrumb 11a87868c [origin/fix-profiles-breadcrumb: gone] Fix Profiles Overview breadcrumb + fix-regional-table 2549577cc [origin/fix-regional-table: gone] regen list of destinations + fix-sidenav 409391d88 [origin/fix-sidenav] Remove duplicate side nav item + fix-strat-title 672eae775 [origin/fix-strat-title: gone] Fix link as well + focus-visible-test c83741486 [origin/focus-visible-test: behind 41] Updated `focus-visible` text color to match hover state + friendbuy-browser-destination e380bfed4 testing external link + friendbuy-cloud-destination b2d6a2772 Merge branch 'develop' into friendbuy-cloud-destination + friendbuy-deploy 4648a18df [origin/friendbuy-deploy: gone] update catalog + friendbuy-required-fields a802be3d5 Add required fields indicator to include + ga4-dest-doc-updates b16e89a95 [origin/ga4-dest-doc-updates: gone] add mappings from api + ga4-mobile e05ecd4be [origin/ga4-mobile] Grammar and style updates + ga4-rec-events c4056f2b1 [origin/ga4-rec-events: gone] remove 'we' + ga_metadata 15db941b0 [origin/ga_metadata: gone] Added Google Analytics destination metadata + gdpr-updates f2b252e1c first pass + gec-troubleshooting 56323caa1 [origin/gec-troubleshooting: gone] style edits + gec-updates d3b33acc5 [origin/gec-updates: gone] fix typo + google-ads-classic-warning c424c4475 [origin/google-ads-classic-warning] final edits + graphjson 79aa032b2 [origin/graphjson: gone] updates + gtag-destination bca862ef8 Merge pull request #1140 from segmentio/broken-nav-link-fix + heap-intengration-docs 70d68a0c9 [origin/heap-intengration-docs: gone] Re-add version link + hide-actions faf30fc94 [origin/hide-actions: gone] Add ability to hide individual actions + hide-ga4-plans 7700321d5 [origin/hide-ga4-plans: gone] unpublish this + hide-hidden-sources b509489e1 [origin/hide-hidden-sources: gone] Sources marked as 'hidden' should not appear in nav + hide-mixpanel-cohorts 0808aafc9 [origin/hide-mixpanel-cohorts: gone] Hide a source + hide-new-gec-actions 47718aea3 [origin/hide-new-gec-actions: gone] Hide new actions for Google Enhanced Conversions + hide-test-sources-regional 9715f390f [origin/hide-test-sources-regional] merge develop + hide-twilio-event-stream f39f7945e [origin/hide-twilio-event-stream: gone] Hidden sources should be hidden + http-batch-size-limit 0993f9047 [origin/http-batch-size-limit: gone] Add information about HTTP API batch request size limits + hubspot-private-app-auth d4f0e6224 [origin/hubspot-private-app-auth: gone] Formatting and edits + hubspot-regional 3fd21e0f3 [origin/hubspot-regional: gone] Document support for Hubspot destination with EU endpoints + improve-cmodes-tables b519d732a [origin/improve-cmodes-tables: gone] heading edit + inflection/source 5fb30ef46 catalog update + insertcoin/gwen ab7f15bc2 [origin/insertcoin/gwen: behind 1] Edits + insider/cloud-mode-actions 94209fdb9 [origin/insider/cloud-mode-actions] merge develop resolve conflicts + intercom-update 80eb5b19a [origin/intercom-update] update intercom collection fields + internal-link-fixes d14b99838 [origin/internal-link-fixes: gone] Fix some links + internal-search-improve 595432706 [origin/internal-search-improve: gone] add highlight + isabella-dummy-form-test 825a66ba4 [origin/isabella-dummy-form-test] Use prism.js + isabella-dux-days-glossary 605879ed8 [origin/isabella-dux-days-glossary: behind 3] alphabetize + issue-fixes-4-13 2c3ebc36e [origin/issue-fixes-4-13: gone] hide PerimeterX destination + iterate-actions-documentation 84e24b582 Set id and added private metadata + jake/iterable-actions-docs e7f4361e3 Merge branch 'jake/iterable-actions-docs' of ssh://github.com/KakeJopulsky/segment-docs into jake/iterable-actions-docs + jbwyme/develop a1d330aa1 small style updates + jekyll-cache 5a18fff2c [origin/jekyll-cache: gone] test + jenskene-patch-1 fee3e9bbb [origin/jenskene-patch-1: ahead 2, behind 166] Quick edit + jfoskin-patch-2 b36caba2a [origin/jfoskin-patch-2] IPv6 not supported + jfoskin-patch-4 2372169f8 [origin/jfoskin-patch-4: ahead 2, behind 347] Update to add note + kdaswani-patch-1 872d0f829 [origin/kdaswani-patch-1: gone] Remove from strat for cleanliness + kdaswani-patch-2 80647a626 [origin/kdaswani-patch-2: gone] copy edits + kiara/add-google-sheets-docs d3da599bf [origin/kiara/add-google-sheets-docs: gone] Wording update + kiara/hubspot-docs 0d245516c [origin/kiara/hubspot-docs: gone] Add private metadata + kiara/snap-conversions-api-docs a447404f0 [origin/kiara/snap-conversions-api-docs: gone] Vale updates and edits + kiara/strat-section-cleanup 92230c929 [origin/kiara/strat-section-cleanup: gone] Fix yaml formatting + kkilfoyle/develop 1e9f5882a Added metadata + launchnotes-embed 841d2b41f add embed + ld-actions 3ba1b6d22 [origin/ld-actions: gone] catalog update + liggysmalls-patch-1 bb07e639c [origin/liggysmalls-patch-1: gone] Formatting + lightbox 71347247e [origin/lightbox] init + link-fixes-3-28 70bae5935 [origin/link-fixes-3-28: gone] Fix broken external links + link-fixes-6-7 f1fbd4e35 [origin/link-fixes-6-7: gone] Fixed broken links + link-fixes-9-16 5a3f880ea [origin/link-fixes-9-16: gone] tack on a typo fix + link-fixes_7-5 4e6dfc14f [origin/link-fixes_7-5: gone] Fixed broken URLs + linkcheck-update 8839c4080 Kevel destinations.yml update (#1509) + littledata-docs-update 926523aa1 Vale edits + littlefoot a26db5fe9 Merge pull request #1712 from segmentio/hide-integrations-object + livelike-screen-method aa8bfd3dd [origin/livelike-screen-method] Push screen method into supportedMethods + local-link-check b9d60dc26 [origin/local-link-check: gone] fix file output, enable cron + logo-updates c2e851bbd [origin/logo-updates: gone] Revert color changes + lucky-orange-update a69169532 [origin/lucky-orange-update: gone] Add note about Lucky Orange supported versions + lumen_docs 10594e0b6 [origin/lumen_docs] Merge branch 'develop' into lumen_docs + main_fix_fql_references a5841306c [origin/main_fix_fql_references: gone] Fix redirect + maintainence-mode-dest 5d5f68651 [origin/maintainence-mode-dest] Add maintenance notes, unhide public beta dests, update strat nav + maintenance-mode-url-fix f0fc8e5eb [origin/maintenance-mode-url-fix] Add override for actions slug + marketo-strat f36a7d8b4 [origin/marketo-strat: gone] Merge branch 'master' into marketo-strat + maryam/add-tiktok-docs fd000e459 [origin/maryam/add-tiktok-docs] Add private metadata + master 74d9da11a [origin/master: behind 1] new logo + may-12-catalog c044d53dc [origin/may-12-catalog: gone] Catalog update + mcoughlin-metronome b3efc1257 vale pass + metronome-deploy 6a1b7034b [origin/metronome-deploy: ahead 1] PB docs + mixpanel-actions-deploy 06f4f26b7 [origin/mixpanel-actions-deploy: gone] Mixpanel (Actions) to public Beta + mixpanel-actions-update 20197b9f5 Fix action includes + mixpanel-cohorts-redirect c4bde1b2e [origin/mixpanel-cohorts-redirect: gone] Add this redirect due to partner portal weirdness + mixpanel-updates b2fc4b034 [origin/mixpanel-updates: gone] Cross link FullStory destinations + mobile-migration 815fe318b [origin/mobile-migration] Merge branch 'master' into mobile-migration + moengage_destination_documentation_update e84956fbd [origin/moengage_destination_documentation_update: gone] Merge branch 'master' into moengage_destination_documentation_update + nate/fullstory-destination-actions-doc-updates a5956de0b [origin/nate/fullstory-destination-actions-doc-updates: gone] Quick edits + natero_docs_update 74356e7ec [origin/natero_docs_update: gone] catalog update + nav-update a204cb721 [origin/nav-update: gone] Add Profiles Space Setup page to nav + netlify-redirects 34c5691e6 [origin/netlify-redirects] Comment out for now + new-actions b27f03cf6 [origin/new-actions: gone] Talon.One and Close destinations are live + new-dest-ga-prep 11b55011d [origin/new-dest-ga-prep] note formatting for readability in GEC + niall/customer-io-slug 6164a2292 [origin/niall/customer-io-slug] add correct actions slug + niall/deprecate_dc1 f65436ae3 [origin/niall/deprecate_dc1: gone] Vale updates and single-source note + niall/mixpanel_cohorts_source cf3875863 [origin/niall/mixpanel_cohorts_source: gone] rewrite and change file location + nielst-amplitude-log-purchases b36a9911b [origin/nielst-amplitude-log-purchases: gone] Update heading + obj-cloud-source-regional 1ea887c15 [origin/obj-cloud-source-regional] private destination metadata update + object-cloud-regional 478030bc6 [origin/object-cloud-regional: gone] Remove region not supported box + outfunnel/develop 2ea0f0235 [origin/outfunnel/develop] Add metadata + papi-availability-update 971184278 [origin/papi-availability-update] Update PAPI availability to Team and BT only + papi-ga ca967ad0b [origin/papi-ga: gone] typo + papi-migration-doc 7194dc49b [origin/papi-migration-doc] First draft + pardot-beta c325b6cb6 [origin/pardot-beta: gone] fix destination dossier for private destinations + pardot-setup 394b8d3b8 [origin/pardot-setup: gone] Fix actions rendering + partner-dest-notice 14d5f8a59 Merge pull request #2024 from segmentio/repo-sync + partner-stream-updates 0e068bbb9 [origin/partner-stream-updates: gone] Vale edits of partner streams doc + partner-templates 033de3604 [origin/partner-templates] Add partner docs templates to non-build folder + patch-1 a2225e9fb style updates + pipedrive/develop f967858ac [origin/pipedrive/develop: gone] Remove hardcoded action details [netlify-build] + plan-grid 351a63e31 [origin/plan-grid: gone] hoverhelp -> popover + playerzero-web 50b060eb4 [origin/playerzero-web: behind 1] Insert actions block + playerzero-web-metadata b4133919e [origin/playerzero-web-metadata] Playerzero Web Metadata + postgres-rds-update 88695ee88 [origin/postgres-rds-update: gone] Editing pass [DOC-504] + pr/2258 32d67b56e test adding an external link + pr/3539 21ca80091 [origin/pr/3539: gone] remove escape character + pr/3925 137a6dec6 [github-desktop-a13m/patch-1] Replace appspot.com references in Pendo setup + pricing-image 36ae3b398 [origin/pricing-image: gone] Add description + private-beta-docs-support a98b5c5b1 [origin/private-beta-docs-support: gone] snap conversions API + private-dest-improvements f5cc495fc in progress + private-dest-script-updates 39527cf81 [origin/private-dest-script-updates] Don't nuke the whole file if 404 + private-destination-cleanup b6f5b2e8e [origin/private-destination-cleanup: gone] Enable update existing without add + private-metadata-fix 1a99d568f [origin/private-metadata-fix] Automate making Private -> Public destinations visible on site + programmatic-betas d70574e52 [origin/programmatic-betas: gone] hide dossier from personas dests + purge_test_sources 73ecf5e5e [origin/purge_test_sources] remove and filter demo sources + qualtrics-destination-docs afa17b061 Set id and added private metadata + quick-info-update f18839016 quick info and catalog + rajul/update-GA4Docs 2dcafaa03 [origin/rajul/update-GA4Docs] Update strat nav + regional-api cef383473 [origin/regional-api] Regional destination data comes from the Public API + regional-api-2 66d73a394 Update destination regions from API + regional-clarification 080e8e361 [origin/regional-clarification: gone] Added clarity around what each icon means + regional-config-snippet 47b857f76 [origin/regional-config-snippet: gone] Make regional config URLs a snippet + regional-segment-utils-page 6b7be82f4 [origin/regional-segment-utils-page: gone] Add additional details to public regional availability + regional-updates 1d81265b9 [origin/regional-updates: gone] Airship and Moengage (Actions) support EU endpoints + release-notes-live 7c57cc728 [origin/release-notes-live: gone] clean up + remove-old-adwords-link 725433da5 [origin/remove-old-adwords-link: gone] Remove an old link to Google's documentation + remove-seg 6b4ac2b47 [origin/remove-seg: gone] ran make catalog + repo-sync 7e111dc35 [origin/repo-sync: behind 3] Merge pull request #695 from segmentio/repo-sync + retentive ef1cce20c [origin/retentive: gone] hide and add frontmatter + revert-11-8 46caafaa3 [origin/revert-11-8: gone] undo bad merge from earlier + revert-logrocket 8d5716378 Revert "add logrocket documentation (#3778)" + rip-subscription 9a07d48f1 [origin/rip-subscription: gone] Subscriptions -> Mappings + role-description-update ca4a6b98e [origin/role-description-update: gone] Update Profiles and Engage Read-only description + rspective/develop e1fba1316 [origin/rspective/develop: behind 1] format + sabil-io/develop 13f0339fb Add ID + salesforce-classic-eol 6f51f228b [origin/salesforce-classic-eol] edits + salesforce-deprecation-update 17d2a1695 [origin/salesforce-deprecation-update] update Salesforce deprecation date + saleswings-destination-actions-docs 15febffc9 [origin/saleswings-destination-actions-docs] Metadata and clean up + sanitize-integration-metadata 41e76b9e7 [origin/sanitize-integration-metadata: ahead 2] conflict + sarahrudy-patch-2 d9d645f35 [origin/sarahrudy-patch-2: ahead 2, behind 492] Vale updates + sarahrudy-patch-5 c2faa4f41 [origin/sarahrudy-patch-5] Update index.md + sarahrudy-patch-6 440a1abfd [origin/sarahrudy-patch-6: ahead 4, behind 1216] Update src/connections/sources/index.md +* sass-migration 33e0ed2ae [origin/sass-migration] Ran sass migrator to replace slashes + scaffold-sfmc-actions 17e05c4b2 [origin/scaffold-sfmc-actions: gone] Updated private metadata script for cleanliness in output + scraping fa2c7e5ed Merge branch 'master' into develop + script_cleanup 9686423df document scripts + search-experience-improvement 7eff89883 Rename pageview -> page in private destination script + search-redesign 6b24dd686 Merge pull request #4350 from segmentio/sarahrudy-patch-6 + segmentJason-minor-improvements-1 f9251f7ad [origin/segmentJason-minor-improvements-1: gone] update allow lists to not flag 'Marketo' and 'csv' + sendgrid-marketing-dest c01316f34 Merge pull request #3655 from segmentio/repo-sync + sf-selective-sync a92dc1d1d [origin/sf-selective-sync: gone] Update src/connections/sources/catalog/cloud-apps/salesforce/index.md + sfmc-crosslink c4c0f2cd6 [origin/sfmc-crosslink] Add link to SFMC Actions + show-action-tables 464498755 [origin/show-action-tables: gone] Show action fields tables by default + snap-capi-unhide 299a1dadf [origin/snap-capi-unhide: gone] merge conflicts + sneha-groundswell fea761c73 [origin/sneha-groundswell: gone] catalog and edits + sneha-mailmodo 394923ca5 [origin/sneha-mailmodo: gone] copyedits + sprig-actions 789a325c3 [origin/sprig-actions: gone] apply new template, hide until released + sprig-web 02c6cf385 [origin/sprig-web: gone] Make Sprig Web (Actions) documentation visbile + sprig_redirect 86d49d251 [origin/sprig_redirect: gone] redirect sprig actions + sso-domain-clarification 8c642d749 [origin/sso-domain-clarification: gone] Make more clear + startDeliverDocs b18b5a7ce [origin/startDeliverDocs: gone] style updates [netlify-ignore] + stitch-jose/develop 935e5b930 [origin/stitch-jose/develop] fix conflicts + supported-region-sources d6a36a387 [origin/supported-region-sources: gone] copy edits + swift-redesign 8b9998168 [origin/swift-redesign] Merge branch 'swift-redesign' of github.com:segmentio/segment-docs into swift-redesign + table-scrolling 610b2671d Merge branch 'master' into develop + tax-pdf-update e68358159 [origin/tax-pdf-update] Update VAT/GST FAQ + test-identify 1bb0748b1 Merge pull request #1530 from segmentio/rename-quick-info + thomas/1flow 921ffd309 [origin/thomas/1flow: gone] Add docs for new 1Flow Analytics destination + thomas/1flow-name-change b095fbc42 [origin/thomas/1flow-name-change: gone] Add redirect + thomas/aampe c934b386d [origin/thomas/aampe: gone] Add 'Aampe' to accept list + thomas/airship-source 55eb1029b [origin/thomas/airship-source: gone] merge master + thomas/akita 838f6bfde [origin/thomas/akita: gone] Rewrite note for clarity + thomas/atatus 1ca644b88 [origin/thomas/atatus: gone] Fix spacing + thomas/attentive-mobile e746a356f [origin/thomas/attentive-mobile: gone] Edits and cleanup + thomas/bento 68732796a [origin/thomas/bento: gone] Edits + thomas/blitzllama 85b5f9511 [origin/thomas/blitzllama: gone] Add Blitzllama to accept list + thomas/bluedot 6949c6827 [origin/thomas/bluedot: gone] Remove instance of our + thomas/braze-source adf6c950d [origin/thomas/braze-source: ahead 4, behind 1806] Remove extra spaces + thomas/breyta-crm 539737ee8 [origin/thomas/breyta-crm: gone] Updated catalog, added id + thomas/bucket-updates 492158cf5 [origin/thomas/bucket-updates: gone] Update catalog and fix script + thomas/commandbar 830e85895 [origin/thomas/commandbar: gone] Markdown tables + thomas/correlated 6f4872d8a [origin/thomas/correlated: gone] Edits and cleanup + thomas/foursquare-source eae15cf35 [origin/thomas/foursquare-source] Add redirect and clean up tables + thomas/freshsales-suite 56db738de [origin/thomas/freshsales-suite: gone] Update src/connections/destinations/catalog/freshsales-suite-crm/index.md + thomas/gladly 2624b9562 [origin/thomas/gladly: gone] Markdown tables + thomas/insider-source a512e7aff [origin/thomas/insider-source: gone] edits + thomas/iterable-source-update 7608ab2f5 [origin/thomas/iterable-source-update: gone] markdown table and more edits. + thomas/jebbit 4489a566b [origin/thomas/jebbit: gone] merge conflict + thomas/jivox-documentation b5763fd30 [origin/thomas/jivox-documentation: gone] catalog and cleanup + thomas/kable e6a478560 [origin/thomas/kable: gone] Add Kable to vocab + thomas/kana 74365426c [origin/thomas/kana: gone] edits + thomas/liveintent-destination cc35a44b8 [origin/thomas/liveintent-destination: gone] hide cmodes in the dest footer + thomas/matcha b9b81935e [origin/thomas/matcha: gone] edits + thomas/ninetailed 664fe662c [origin/thomas/ninetailed: gone] Vale edits + thomas/regal 606530193 [origin/thomas/regal: gone] Update URL for regalio source + thomas/rokt b7c8eeaa5 [origin/thomas/rokt: gone] Add Rokt to accept.txt + thomas/selligent-destination 1c8835418 [origin/thomas/selligent-destination: gone] Vale updates + thomas/skalin aa2446b42 [origin/thomas/skalin: gone] Update index.md + thomas/spideo e54456497 [origin/thomas/spideo: gone] Vale edits + thomas/statsig-source a7646d450 [origin/thomas/statsig-source: gone] delete image source files + thomas/tv-squared c6dd741e9 [origin/thomas/tv-squared] cleanup + thomas/update_datarangers 6302459b5 [origin/thomas/update_datarangers: gone] local links should be relative + thomas/wisepops 1fb7621b8 [origin/thomas/wisepops] Make Wisepops public + thomas/workramp-source 688b201df [origin/thomas/workramp-source: gone] Vale updates and markdown tables + tiktok/actions-tiktok-offline-conversions d33568a19 metadata + update-FullStory-casing 066eb36d0 waiting for PP update + update-castle-docs-include-mobile-destinations 1979176f7 Update formatting and syntax + update-catalog-3-24 aea146287 [origin/update-catalog-3-24: gone] Catalog updates for new integrations + update-code-highlihg-color 082036c4a [origin/update-code-highlihg-color] make selection hilighting for code more accessible + update-eu-endpoints ebf4f82af Merge branch 'develop' of github.com:segmentio/segment-docs into develop + update-footer-engage 7ae398813 [origin/update-footer-engage: gone] Update footer to inlcude Engage link + update-fullstory-cloud-mode-destination-docs 290dec0c9 small update, add info box + update-heading-link 0673b30f4 add content about contacting support + update-personas-list 2fb7fc32c [origin/update-personas-list: gone] Vale edits + update-python-endpoint 95a6ffc3e [origin/update-python-endpoint: gone] Python source supports EU endpioints + update-readmes 8d0a9f54b [origin/update-readmes: gone] add bit about external linking + update-ripe-docs c02001aea Remove alias documentation + update-source-schema-export-page 87f3f6531 [origin/update-source-schema-export-page: gone] Updates + update_dossier_component_links d780eb011 [origin/update_dossier_component_links: gone] Display links for partner owned components + update_frontmatter_id bfa9212b7 [origin/update_frontmatter_id: gone] doc fix + url-fixes d7d0054ef [origin/url-fixes: gone] pulled from updated catalog + usermaven/develop fcc5325e9 [origin/usermaven/develop] Add id and metadata + vale-action f3566ec53 [origin/vale-action: gone] only annotate modified lines + vale-fixes 84244b1e5 [origin/vale-fixes] Update Application Crashed event information + vale-headings-update a32096c3f [origin/vale-headings-update: gone] merge conflict resolve + vale-javascript 7432c6335 [origin/vale-javascript: gone] Merge branch 'master' into vale-javascript + vale-updates d28da0982 [origin/vale-updates: gone] some Vale rule updates + vale-updates-june f3b24b2be [origin/vale-updates-june: gone] Update Vale rules + vanand17-patch-10 df07f3300 [origin/vanand17-patch-10: ahead 4, behind 1027] Edits and image update + vanand17-patch-3 3c4acaf9b [origin/vanand17-patch-3: ahead 2, behind 83] Formatting + version-data 48e6f97c0 init libraries + vespucci-docs 6a7929b17 [origin/vespucci-docs: gone] restore catalog from master + voyage-action-destination-docs 83e576a69 merge develop and hide doc + vwo-cloud 48486c485 Add ID and metadata + vwo-cloud-update 9da576268 formatting fix for code sample + vwo-web 0fad1c4a4 metadata cleanup + warehouse-doc-updates 44635f74e [origin/warehouse-doc-updates: gone] Merge branch 'develop' into warehouse-doc-updates + warehouse-updates 277aed2e7 [origin/warehouse-updates: behind 2] Created note include and added to warehouses / faq + wenxi/update-kotlin-migration-guide c98334d3c [origin/wenxi/update-kotlin-migration-guide: gone] Merge branch 'wenxi/update-kotlin-migration-guide' of github.com:segmentio/segment-docs into wenxi/update-kotlin-migration-guide + whatsapp-ga 34d9fa6c0 Merge pull request #4822 from segmentio/bcaudillo-patch-4 + zendesk-docs dea8bda31 [origin/zendesk-docs: gone] verbiage [netlify-ignore] diff --git a/ignore-links.txt b/ignore-links.txt index db5064d70d..773d0b7ef0 100644 --- a/ignore-links.txt +++ b/ignore-links.txt @@ -71,3 +71,10 @@ https://segment.com/docs/connections/sources/catalog/cloud-apps/snowflake/ https://segment.com/docs/connections/destinations/catalog/adobe-target-cloud-mode/ https://segment.com/docs/connections/destinations/catalog/adobe-target-web/ https://segment.com/docs/connections/destinations/catalog/google-ads-remarketing-lists/ +https://compose.aampe.com/configure/integrations +https://everboarding.trybento.co/data +https://app.getcorrelated.com/integrations +https://app.launchdarkly.com/default/production/debugger/goals +https://www.app.metricstory.ai/account/apikeys +https://app.unstack.com/login +https://github.com/fubotv/segment-analytics-android/pull/1 \ No newline at end of file diff --git a/netlify.toml b/netlify.toml index 9ad74e5868..76d7ade33b 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,38 +1,39 @@ [build] + # This line defines the command that is run during production builds + # It first updated the Algolia index through the Algolia plugin for Jekyll + # then runs the standard build command. See package.json for more details + # about the available build targets (develop, develop-inc, build) command = "jekyll algolia && yarn build" - # Ignore builds unless [netlify-build] is present in commit message - # ignore = "git log -1 --pretty=%B | ( ! grep -q '\[netlify\-build\]' )" - # Ignore if [netlify-ignore] is present - - # Don't build if there are no changes to src/ - ## ignore = "git diff --quiet HEAD^ HEAD src/" [context.deploy-preview] + # For deploy previews, use the testing Jekyll environment, the develop build target calls command = "yarn develop" + # Check this file to see if the site should build. ignore.sh checks for the presence of + # [netlify-build] in the commit message ignore = "./scripts/ignore.sh" [context.branch-deploy] command = "yarn build" -# ignore = "./scripts/ignore.sh" + # ignore = "./scripts/ignore.sh" [context.develop] command = "yarn develop" [[redirects]] + # Don't touch these settings. They are required for the redirect to work, since the docs site + # is located at /docs and not the root of the site. from = "/docs/*" to = "/:splat" status = 200 [[redirects]] + # Sam thing as above, but specifically for the js bundle from = "/docs/assets/docs.bundle.js" to = "/assets/docs.bundle.js" status = 200 -[[plugins]] - package = "netlify-plugin-jekyll-cache" - - [plugins.inputs] - jekyllSource = "/src" +# [[plugins]] +# if we want to include plugins, this is where to ensure they run [[headers]] diff --git a/package-lock.json b/package-lock.json index 4ac52e87d8..d7a8c0ef77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2392,20 +2392,21 @@ } }, "browser-sync": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.11.tgz", - "integrity": "sha512-U5f9u97OYJH66T0MGWWzG9rOQTW6ZmDMj97vsmtqwNS03JAwdLVES8eel2lD3rvAqQCNAFqaJ74NMacBI57vJg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.1.tgz", + "integrity": "sha512-WXy9HMJVQaNUTPjmai330E2fnDA6W84l/vBILGkYu9yHXIpWw1gJYjdQWDfEhLFljYUHNTN9jM3GCej2T55m+g==", "requires": { - "browser-sync-client": "^2.27.11", - "browser-sync-ui": "^2.27.11", + "browser-sync-client": "^2.29.1", + "browser-sync-ui": "^2.29.1", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", + "chalk": "4.1.2", "chokidar": "^3.5.1", "connect": "3.6.6", "connect-history-api-fallback": "^1", "dev-ip": "^1.0.1", "easy-extender": "^2.3.4", - "eazy-logger": "3.1.0", + "eazy-logger": "^4.0.1", "etag": "^1.8.1", "fresh": "^0.5.2", "fs-extra": "3.0.1", @@ -2424,7 +2425,7 @@ "serve-static": "1.13.2", "server-destroy": "1.0.1", "socket.io": "^4.4.1", - "ua-parser-js": "1.0.2", + "ua-parser-js": "^1.0.33", "yargs": "^17.3.1" }, "dependencies": { @@ -2449,9 +2450,9 @@ } }, "yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -2470,30 +2471,22 @@ } }, "browser-sync-client": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.11.tgz", - "integrity": "sha512-okMNfD2NasL/XD1/BclP3onXjhahisk3e/kTQ5HPDT/lLqdBqNDd6QFcjI5I1ak7na2hxKQSLjryql+7fp5gKQ==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.1.tgz", + "integrity": "sha512-aESnjt3rU7CZpzjyqzhIC2UJ3MVhzRis7cPKkGbyYWDf/wnbxyRa3fFenF3Qx9061/guY3HHhD67uiTVV26DVg==", "requires": { "etag": "1.8.1", "fresh": "0.5.2", - "mitt": "^1.1.3", - "rxjs": "^5.5.6", - "typescript": "^4.6.2" - }, - "dependencies": { - "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" - } + "mitt": "^1.1.3" } }, "browser-sync-ui": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.11.tgz", - "integrity": "sha512-1T/Y8Pp1R68aUL7zVSFq0nxtr258xWd/nTasCAHX2M6EsGaswVOFtXsw3bKqsr35z+J+LfVfOdz1HFLYKxdgrA==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.1.tgz", + "integrity": "sha512-MB7SAiUgVUrhipO2xyO1sheC9H0+LKXPQ3L1tQWcZ3AgizBnUNKAqDZPSwe4grNSa8o8ImSAwJp7lMS6XYy1Dw==", "requires": { "async-each-series": "0.1.1", + "chalk": "4.1.2", "connect-history-api-fallback": "^1", "immutable": "^3", "server-destroy": "1.0.1", @@ -2914,9 +2907,9 @@ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true }, "core-js-compat": { @@ -3077,11 +3070,6 @@ "path-type": "^4.0.0" } }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, "dom-serializer": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", @@ -3167,11 +3155,11 @@ } }, "eazy-logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", - "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", "requires": { - "tfunk": "^4.0.0" + "chalk": "4.1.2" } }, "ee-first": { @@ -3210,9 +3198,9 @@ } }, "engine.io": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", - "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -3223,25 +3211,25 @@ "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "ws": "~8.11.0" } }, "engine.io-client": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz", - "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.4.0.tgz", + "integrity": "sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3", + "ws": "~8.11.0", "xmlhttprequest-ssl": "~2.0.0" } }, "engine.io-parser": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.5.tgz", - "integrity": "sha512-mjEyaa4zhuuRhaSLOdjEb57X0XPP9JEsnXI4E+ivhwT0GgzUogARx4MqoY1jQyB+4Bkz3BUOmzL7t9RMKmlG3g==" + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", + "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==" }, "enhanced-resolve": { "version": "5.12.0", @@ -3816,21 +3804,6 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - } - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3853,9 +3826,9 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-equiv-refresh": { "version": "1.0.0", @@ -5157,9 +5130,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "mitt": { "version": "1.2.0", @@ -5594,9 +5567,9 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", "requires": { "side-channel": "^1.0.4" } @@ -5621,9 +5594,9 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -6699,14 +6672,6 @@ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==" }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "requires": { - "symbol-observable": "1.0.1" - } - }, "sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", @@ -6981,38 +6946,41 @@ } }, "socket.io": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz", - "integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", + "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io": "~6.2.1", - "socket.io-adapter": "~2.4.0", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.1" } }, "socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "requires": { + "ws": "~8.11.0" + } }, "socket.io-client": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz", - "integrity": "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.1.tgz", + "integrity": "sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.2.3", + "engine.io-client": "~6.4.0", "socket.io-parser": "~4.2.1" } }, "socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -7245,11 +7213,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==" - }, "tap-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz", @@ -7383,52 +7346,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "tfunk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", - "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", - "requires": { - "chalk": "^1.1.3", - "dlv": "^1.1.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" - } - } - }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -7623,9 +7540,9 @@ } }, "ua-parser-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", - "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==" + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==" }, "uglify-js": { "version": "3.14.5", @@ -8170,9 +8087,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==" }, "xmlhttprequest-ssl": { "version": "2.0.0", diff --git a/package.json b/package.json index 0fc7804d98..394ca7c3b9 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "ajv": "^6.10.2", "algoliasearch": "^4.10.5", "ansi-regex": "^6.0.1", - "browser-sync": "^2.27.11", + "browser-sync": "^2.29.1", "check-links": "^1.1.8", "clipboard": "^2.0.8", "diff": "^5.0.0", diff --git a/scripts/add_id.js b/scripts/add_id.js deleted file mode 100644 index 4ced8f7e3c..0000000000 --- a/scripts/add_id.js +++ /dev/null @@ -1,177 +0,0 @@ -// Purpose: Add id values to integrations that don't have them -// Why it's important: We look up integration metadata by ID, rather than slug -// Instructions: run `make add-id`, select the integration type, enter the slug -// The script: -// 1. Get's the list of public integrations from the API -// 2. Checks the slug you entered for an id -// 3. If there is no ID, it adds the ID retrieved from the API to the file. - - - -const axios = require('axios'); -const path = require('path'); -const fs = require('fs'); -const fm = require('front-matter'); -const yaml = require('js-yaml'); -const { - Select -} = require('enquirer'); -const { - AutoComplete -} = require('enquirer'); - -const { - type -} = require('os'); - - -require('dotenv').config(); - -// Here, global variables are set -const PAPI_URL = "https://api.segmentapis.com" -const slugOverrides = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/catalog/slugs.yml`))) - -const slugify = (displayName) => { - let slug = displayName - .toLowerCase() - .replace(/\s+/g, '-') - .replace('-&-', '-') - .replace('/', '-') - .replace(/[\(\)]/g, '') - .replace('.', '-') - - for (key in slugOverrides) { - let original = slugOverrides[key].original - let override = slugOverrides[key].override - - if (slug == original) { - slug = override - } - } - - return slug -} - -const getCatalog = async (url, page_token = "MA==") => { - try { - const res = await axios.get(url, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${process.env.PAPI_TOKEN}` - }, - data: { - "pagination": { - "count": 200, - "cursor": page_token - } - } - }); - - return res.data - } catch (error) { - console.log(error) - } -} - - -const updateId = async () => { - const type_select = new Select({ - name: 'int_type', - message: 'What type of integration?', - choices: ['sources', 'destinations'] - }) - - let int_type = await type_select.run() - - - - let nextPageToken = "MA==" - let integrations = [] - let paredIntegrations = [] - - while (nextPageToken !== undefined) { - const res = await getCatalog(`${PAPI_URL}/catalog/${int_type}/`, nextPageToken) - if (int_type == "sources") { - integrations = integrations.concat(res.data.sourcesCatalog) - } else { - integrations = integrations.concat(res.data.destinationsCatalog) - } - nextPageToken = res.data.pagination.next - } - - - - integrations.forEach(integration => { - - const urlParse = (slug, type) => { - let url = "" - if (type == "destinations") { - url = `connections/destinations/catalog/${slug}` - } else { - const libraryCategories = [ - 'server', - 'mobile', - 'ott', - 'roku', - 'website' - ] - - let mainCategory = integration.categories[0] ? integration.categories[0].toLowerCase() : '' - - if (libraryCategories.includes(mainCategory)) { - url = `connections/sources/catalog/libraries/${mainCategory}/${slug}` - } else { - url = `connections/sources/catalog/cloud-apps/${slug}` - mainCategory = 'cloud-app' - } - } - - return url - } - let slug = slugify(integration.name) - let url = urlParse(slug, int_type) - - let updatedIntegration = { - id: integration.id, - slug, - url - } - paredIntegrations.push(updatedIntegration) - }) - - let integrationSlugs = paredIntegrations.map(a => a.slug) - - const slug_select = new AutoComplete({ - name: "slug", - message: "Enter the integration slug", - limit: 10, - initial: 2, - choices: integrationSlugs - - }) - - let slug_value = await slug_select.run() - - let final = paredIntegrations.find(x => x.slug == slug_value) - let itemURL = final.url - - const catalogPath = path.resolve('src/', itemURL, 'index.md') - if (fs.existsSync(catalogPath)) { - const f = fm(fs.readFileSync(catalogPath, 'utf8')); - const fmatter = f.frontmatter - const re_id = new RegExp("(id: )\S*") - if (!re_id.test(fmatter)) { - const attr = `---\n${f.frontmatter}\nid: ${final.id}\n---\n` - const body = f.body - const content = attr + body - fs.writeFileSync(catalogPath, content) - console.log(`${final.slug} updated`) - } else { - console.log("integration already has an ID") - } - } else { - console.log("can't find that integration") - } -} - -updateId() diff --git a/scripts/atom.sh b/scripts/atom.sh deleted file mode 100644 index 86761f17e5..0000000000 --- a/scripts/atom.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# script to set up atom on mac heavily relying on brew - -which -s brew -if [[ $? != 0 ]] ; then - # Install Homebrew - ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" -else - echo " ✔ Brew already installed" - echo " Updating Brew" - brew update -fi - -which -s atom -if [[ $? != 0 ]] ; then - brew cask install atom - open -a Atom - which -s atom - if [[ $? != 0 ]] ; then - echo " Atom installed, but command shell not installed. Please click Atom > Install Shell Commands from in the Atom application." - else - # install atom packages which make markdown easy - echo "Installing useful Atom packages" - apm install language-markdown markdown-preview-plus minimap sort-selected-elements wordcount markdown-table-editor markdown-toc - fi -else - echo " ✔ Atom already installed" - # install atom packages which make markdown easy - echo "Installing useful Atom packages" - apm install language-markdown markdown-preview-plus minimap sort-selected-elements wordcount markdown-table-editor markdown-toc -fi diff --git a/scripts/beta.js b/scripts/beta.js deleted file mode 100644 index 00fcaf1bcf..0000000000 --- a/scripts/beta.js +++ /dev/null @@ -1,226 +0,0 @@ -const axios = require('axios'); -const path = require('path'); -const fs = require('fs'); -const fm = require('front-matter'); -const yaml = require('js-yaml'); -const fastcsv = require('fast-csv') -const { - type -} = require('os'); - -require('dotenv').config(); - -PAPI_URL = "https://api.segmentapis.com" - -const getCatalog = async (url, page_token = "MA==") => { - try { - const res = await axios.get(url, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${process.env.PAPI_TOKEN}` - }, - data: { - "pagination": { - "count": 200, - "cursor": page_token - } - } - }); - - return res.data - } catch (error) { - console.log(error) - } -} - -const slugify = (displayName) => { - let slug = displayName - .toLowerCase() - .replace(/\s+/g, '-') - .replace('-&-', '-') - .replace('/', '-') - .replace(/[\(\)]/g, '') - .replace('.', '-') - - if (slug === '-net') slug = 'net' - if (slug === 'talon-one') slug = 'talonone' - if (slug === 'roku-alpha') slug = 'roku' - if (slug === 'shopify-by-littledata') slug = 'shopify-littledata' - if (slug === 'talon-one') slug = 'talonone' - if (slug == 'google-adwords-remarketing-lists-customer-match') slug = 'adwords-remarketing-lists' - if (slug == 'canny-classic') slug = 'canny' - return slug -} - - -const isCatalogItemBeta = (itemURL) => { - try { - const catalogPath = path.resolve('src', itemURL, 'index.md') - if (fs.existsSync(catalogPath)) { - const f = fm(fs.readFileSync(catalogPath, 'utf8')); - if (f.attributes.beta) return true - } - return false - } catch (e) { - console.log(error) - return false - } -} - -const getUpdateTime = (itemURL) => { - try { - const catalogPath = path.resolve('src', itemURL, 'index.md') - if (fs.existsSync(catalogPath)) { - - const stats = fs.statSync(catalogPath) - const date = stats.mtime - return date.toISOString().split('T')[0] - } - - } catch (e){ - console.log(error) - } -} - -const getSources = async () => { - let sources = [] - let sourcesUpdated = [] - //let regionalSourcesUpdated = [] - let nextPageToken = "MA==" - //let categories = new Set() - //let sourceCategories = [] - - while (nextPageToken !== null) { - const res = await getCatalog(`${PAPI_URL}/catalog/sources/`, nextPageToken) - sources = sources.concat(res.data.sourcesCatalog) - nextPageToken = res.data.pagination.next - } - - sources.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - - const libraryCategories = [ - 'server', - 'mobile', - 'ott', - 'roku', - 'website' - ] - - sources.forEach(source => { - let slug = slugify(source.name) - let mainCategory = source.categories[0] ? source.categories[0].toLowerCase() : '' - - // determine the doc url based on the source's main category - if (libraryCategories.includes(mainCategory)) { - url = `connections/sources/catalog/libraries/${mainCategory}/${slug}` - } else { - url = `connections/sources/catalog/cloud-apps/${slug}` - mainCategory = 'cloud-app' - } - - let updateTime = getUpdateTime(url) - - let updatedSource = { - id: source.id, - display_name: source.name, - slug, - url: "https://segment.com/docs/" + url, - updateTime - } - - if (isCatalogItemBeta(url)) { - sourcesUpdated.push(updatedSource) - } - }) - const ws = fs.createWriteStream("beta-sources.csv"); - fastcsv - .write(sourcesUpdated, { - headers: true - }) - .on("finish", function () { - console.log("Write to CSV successfully!"); - }) - .pipe(ws); - -} - -const getDestinations = async () => { - let destinations = [] - let destinationsUpdated = [] - let regionalDestinationsUpdated = [] - let destinationCategories = [] - let categories = new Set() - let nextPageToken = "MA==" - - while (nextPageToken !== null) { - const res = await getCatalog(`${PAPI_URL}/catalog/destinations/`, nextPageToken) - destinations = destinations.concat(res.data.destinationsCatalog) - nextPageToken = res.data.pagination.next - } - - destinations.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - - destinations.forEach(destination => { - // We need to be able to keep the system slug in some cases. - const slugOverrides = ['actions-google-enhanced-conversions', 'actions-google-analytics-4', 'actions-facebook-conversions-api', 'actions-friendbuy-cloud', 'sprig-web'] - let slug = slugify(destination.name) - if (slugOverrides.includes(destination.slug)) { - slug = destination.slug - } - // Flip the slug of Actions destinations - const actionsDests = [ - 'amplitude-actions', - 'slack-actions', - 'fullstory-actions', - 'friendbuy-actions' - ] - - if (actionsDests.includes(slug)) { - const newSlug = slug.split('-') - slug = newSlug[1] + '-' + newSlug[0] - } - let url = `connections/destinations/catalog/${slug}` - let updateTime = getUpdateTime(url) - - let updatedDestination = { - destination_id: destination.id, - display_name: destination.name, - slug, - url: "https://segment.com/docs/" + url, - updateTime - } - if (destination.status == 'PUBLIC_BETA') { - destinationsUpdated.push(updatedDestination) - //console.log(destination.name) - } - }) - const ws = fs.createWriteStream("beta-destinations.csv"); - fastcsv - .write(destinationsUpdated, { - headers: true - }) - .on("finish", function () { - console.log("Write destinations to CSV successfully!"); - }) - .pipe(ws); -} - - -getSources() -getDestinations() diff --git a/scripts/catalog/addPrivateDestination.js b/scripts/catalog/addPrivateDestination.js new file mode 100644 index 0000000000..71843f875f --- /dev/null +++ b/scripts/catalog/addPrivateDestination.js @@ -0,0 +1,35 @@ +const path = require('path'); +const fs = require('fs'); +const { prompt } = require('enquirer'); +const { + getDestinationData, + checkExistingStatus + } = require('./utilities_private_destinations.js'); + +const addPrivateDestination = async () => { + let ids = await checkExistingStatus(); + ids.sort(); + + const DEST_ID = await prompt({ + type: 'input', + name: 'id', + message: 'Enter the destination ID' + }); + + + if (ids.includes(DEST_ID.id)) { + console.log("This destination is already captured."); + return; + } else { + ids.push(DEST_ID.id); + fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/destinations_private.yml`), ''); + } + ids.sort(); + + for (const element in ids) { + let currentId = ids[element]; + await getDestinationData(currentId); + } +}; + +addPrivateDestination(); \ No newline at end of file diff --git a/scripts/catalog/catalog_papi.js b/scripts/catalog/catalog_papi.js new file mode 100644 index 0000000000..81417d0967 --- /dev/null +++ b/scripts/catalog/catalog_papi.js @@ -0,0 +1,95 @@ +const path = require('path'); +const fs = require('fs'); +const yaml = require('js-yaml'); +const { + slugify, + getCatalog, + getConnectionModes, + isCatalogItemHidden, + sanitize, + doesCatalogItemExist +} = require('./utilities.js'); + +require('dotenv').config(); + +const PAPI_URL = "https://api.segmentapis.com"; + +const regionalSupport = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/regional-support.yml`))); + +// This file keeps a list of known test sources that show up in the system. +// Because we don't have a status value for sources, they end up showing in our catalog. +// We use this below to prevent them from being written to yaml. +const testSources = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/catalog/test_sources.yml`))); + + + +const updateWarehouses = async () => { + let warehouses = []; + let nextPageToken = "MA=="; + let warehousesUpdated = []; + + while (nextPageToken !== undefined) { + const res = await getCatalog(`${PAPI_URL}/catalog/warehouses/`, nextPageToken); + warehouses = warehouses.concat(res.data.warehousesCatalog); + nextPageToken = res.data.pagination.next; + } + + warehouses.sort((a, b) => { + if (a.name.toLowerCase() < b.name.toLowerCase()) { + return -1; + } + if (a.name.toLowerCase() > b.name.toLowerCase()) { + return 1; + } + return 0; + }); + + const regionalWarehouseEndpoints = regionalSupport.warehouses.endpoint; + const regionalWarehouseRegions = regionalSupport.warehouses.region; + + warehouses.forEach(warehouse => { + let slug = slugify(warehouse.slug); + let endpoints = ['us']; + let regions = ['us']; + let url = `connections/storage/catalog/${slug}`; + + if (regionalWarehouseEndpoints.includes(slug)) { + endpoints.push('eu'); + } + + if (regionalWarehouseRegions.includes(slug)) { + regions.push('eu'); + } + + let updatedWarehouse = { + id: warehouse.id, + display_name: warehouse.name, + url, + slug, + endpoints, + regions + }; + + warehousesUpdated.push(updatedWarehouse); + }); + + const options = { + noArrayIndent: true + }; + const todayDate = new Date().toISOString().slice(0, 10); + + // Create regional support YAML file + let output = "# AUTOGENERATED LIST OF CONNECTIONS THAT SUPPORT REGIONAL\n"; + output += "# Last updated " + todayDate + " \n"; + output += yaml.dump({ + warehouses: warehousesUpdated + }, options); + fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/regional-supported.yml`), output); + + console.log("warehouses done"); +}; + +// Execute the update functions +updateWarehouses(); +updateSources(); +updateDestinations(); diff --git a/scripts/catalog/index.js b/scripts/catalog/index.js new file mode 100644 index 0000000000..d1849d2a57 --- /dev/null +++ b/scripts/catalog/index.js @@ -0,0 +1,17 @@ +const {updateSources} = require('./updateSources.js'); +const {updateDestinations} = require('./updateDestinations.js'); +const {updateWarehouses} = require('./updateWarehouses.js'); +const {updatePrivateDestinations} = require('./updatePrivateDestinations.js'); + +updateSources(); +updateWarehouses(); + +// Wait for the main catalog to update before updating the private destinations +async function destinations() { + await updateDestinations() + updatePrivateDestinations(); +} + + + +destinations(); \ No newline at end of file diff --git a/scripts/catalog/updateDestinations.js b/scripts/catalog/updateDestinations.js new file mode 100644 index 0000000000..3b88e2cebb --- /dev/null +++ b/scripts/catalog/updateDestinations.js @@ -0,0 +1,197 @@ +const path = require('path'); +const fs = require('fs'); +const yaml = require('js-yaml'); +const { + slugify, + getCatalog, + getConnectionModes, + isCatalogItemHidden, + sanitize, + doesCatalogItemExist +} = require('./utilities.js'); + +require('dotenv').config(); + +const PAPI_URL = "https://api.segmentapis.com"; + + +const updateDestinations = async () => { + let destinations = []; + let destinationsUpdated = []; + let destinationCategories = []; + let categories = new Set(); + let nextPageToken = "MA=="; + + // Get all destinations from the Public API + while (nextPageToken !== undefined) { + const res = await getCatalog(`${PAPI_URL}/catalog/destinations/`, nextPageToken); + destinations = destinations.concat(res.data.destinationsCatalog); + nextPageToken = res.data.pagination.next; + } + + // Sort the destinations alphabetically + destinations.sort((a, b) => { + if (a.name.toLowerCase() < b.name.toLowerCase()) { + return -1; + } + if (a.name.toLowerCase() > b.name.toLowerCase()) { + return 1; + } + return 0; + }); + + // Loop through all destinations and create a new object with the data we want + destinations.forEach(destination => { + let endpoints = []; + let regions = []; + + let slug = slugify(destination.name, "destinations"); + + if (typeof destination.supportedRegions != "undefined") { + regions = destination.supportedRegions; + } else { + regions.push('us-west-2', 'eu-west-1'); + } + + if (typeof destination.regionEndpoints != "undefined") { + endpoints = destination.regionEndpoints; + } else { + endpoints.push('US'); + } + + let url = `connections/destinations/catalog/${slug}`; + + let tempCategories = [destination.categories]; + tempCategories = tempCategories.filter(category => category != ''); + tempCategories = tempCategories.flat(); + + let connection_modes = getConnectionModes({ + components: destination.components, + platforms: destination.supportedPlatforms, + browserUnbundling: destination.supportedFeatures.browserUnbundling, + browserUnbundlingPublic: destination.supportedFeatures.browserUnbundlingPublic, + methods: destination.supportedMethods + }); + + let settings = destination.options; + + settings.sort((a, b) => { + if (a.name.toLowerCase() < b.name.toLowerCase()) { + return -1; + } + if (a.name.toLowerCase() > b.name.toLowerCase()) { + return 1; + } + return 0; + }); + + settings.forEach(setting => { + setting.description = sanitize(setting.description); + }); + + let actions = destination.actions; + let presets = destination.presets; + + const clone = (obj) => Object.assign({}, obj); + const renameKey = (object, key, newKey) => { + const clonedObj = clone(object); + const targetKey = clonedObj[key]; + delete clonedObj[key]; + + clonedObj[newKey] = targetKey; + return clonedObj; + }; + + // The screen method is not returned as a method from the public API, so if a destination wants to + // show screen as a supported method in `destination-dossier.html` then add the destination id here + const destinationsThatSupportScreen = ['63e42b47479274407b671071', '65ccc6147108efc0cf5c6fe1'] + destination.supportedMethods.screen = false; + if (destinationsThatSupportScreen.includes(destination.id)) { + destination.supportedMethods.screen = true; + } + + // Pageview is renamed to Page + destination.supportedMethods = renameKey(destination.supportedMethods, 'pageview', 'page'); + + // All updated destination information gets added to this object + let updatedDestination = { + id: destination.id, + display_name: destination.name, + name: destination.name, + slug, + hidden: isCatalogItemHidden(url), + endpoints, + regions, + url, + previous_names: destination.previousNames, + website: destination.website, + status: destination.status, + categories: tempCategories, + logo: { + url: destination.logos.default + }, + mark: { + url: destination.logos.mark + }, + methods: destination.supportedMethods, + platforms: destination.supportedPlatforms, + components: destination.components, + browserUnbundlingSupported: destination.supportedFeatures.browserUnbundling, + browserUnbundlingPublic: destination.supportedFeatures.browserUnbundlingPublic, + replay: destination.supportedFeatures.replay, + connection_modes, + settings, + actions, + presets, + partnerOwned: destination.partnerOwned + }; + + // Add the updated destination to the destinationsUpdated array + destinationsUpdated.push(updatedDestination); + doesCatalogItemExist(updatedDestination); + tempCategories.reduce((s, e) => s.add(e), categories); + }); + + const destinationArray = Array.from(categories); + destinationArray.forEach(category => { + destinationCategories.push({ + display_name: category, + slug: slugify(category) + }); + destinationCategories.sort((a, b) => { + if (a.display_name.toLowerCase() < b.display_name.toLowerCase()) { + return -1; + } + if (a.display_name.toLowerCase() > b.display_name.toLowerCase()) { + return 1; + } + return 0; + }); + }); + + const options = { + noArrayIndent: true + }; + const todayDate = new Date().toISOString().slice(0, 10); + + // Create destination catalog YAML file + let output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n"; + output += "# destination data last updated " + todayDate + " \n"; + output += yaml.dump({ + items: destinationsUpdated + }, options); + fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/destinations.yml`), output); + + // Create destination-category mapping YAML file + output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n"; + output += "# destination categories last updated " + todayDate + " \n"; + output += yaml.dump({ + items: destinationCategories + }, options); + fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/destination_categories.yml`), output); + + console.log("destinations done"); + }; + + + exports.updateDestinations = updateDestinations; \ No newline at end of file diff --git a/scripts/catalog/updatePrivateDestinations.js b/scripts/catalog/updatePrivateDestinations.js new file mode 100644 index 0000000000..e54544d868 --- /dev/null +++ b/scripts/catalog/updatePrivateDestinations.js @@ -0,0 +1,17 @@ +const { + getDestinationData, + checkExistingStatus +} = require('./utilities_private_destinations.js'); + +const updatePrivateDestinations = async () => { + let ids = await checkExistingStatus(); + ids.sort(); + + for (const element in ids) { + let currentId = ids[element]; + await getDestinationData(currentId); + } + console.log("private destinations done"); +}; + +exports.updatePrivateDestinations = updatePrivateDestinations; \ No newline at end of file diff --git a/scripts/catalog/updateSources.js b/scripts/catalog/updateSources.js new file mode 100644 index 0000000000..6f72f202a7 --- /dev/null +++ b/scripts/catalog/updateSources.js @@ -0,0 +1,199 @@ +const path = require('path'); +const fs = require('fs'); +const yaml = require('js-yaml'); +const { + slugify, + getCatalog, + isCatalogItemHidden, + doesCatalogItemExist +} = require('./utilities.js'); + +require('dotenv').config(); + +const PAPI_URL = "https://api.segmentapis.com"; + +const regionalSupport = yaml.load(fs.readFileSync(path.resolve(__dirname, `../../src/_data/regional-support.yml`))); + +// This file keeps a list of known test sources that show up in the system. +// Because we don't have a status value for sources, they end up showing in our catalog. +// We use this below to prevent them from being written to yaml. +const testSources = yaml.load(fs.readFileSync(path.resolve(__dirname, `../../src/_data/catalog/test_sources.yml`))); + + +const updateSources = async () => { + let sources = []; // Initialize an empty array to hold all sources + let sourcesUpdated = []; // Initialize an empty array to hold all sources that have been updated + let regionalSourcesUpdated = []; // Initialize an empty array to hold updated source regional information + let nextPageToken = "MA=="; // Set the initial page token to the first page + let categories = new Set(); // Initialize an empty set to hold all categories + let sourceCategories = []; // Initialize an empty array to hold all source categories + + + // Get all sources from the catalog + while (nextPageToken !== undefined) { + const res = await getCatalog(`${PAPI_URL}/catalog/sources/`, nextPageToken); + sources = sources.concat(res.data.sourcesCatalog); + nextPageToken = res.data.pagination.next; + } + + // Sort the sources alphabetically + sources.sort((a, b) => { + if (a.name.toLowerCase() < b.name.toLowerCase()) { + return -1; + } + if (a.name.toLowerCase() > b.name.toLowerCase()) { + return 1; + } + return 0; + }); + + // Set the list of categories for libraries + const libraryCategories = [ + 'server', + 'mobile', + 'ott', + 'roku', + 'website' + ]; + + // Here, define some sources that are real, but that we want to hide. + const hiddenSources = [ + 'amp', + 'factual-engine', + 'twilio-event-streams-beta', + 'ibm-watson-assistant' + ]; + + // More regional stuff + const regionalSourceEndpoint = regionalSupport.sources.endpoint; + const regionalSourceRegion = regionalSupport.sources.region; + + + // Loop through all sources and create a new object with the data we want + sources.forEach(source => { + let slug = slugify(source.name, "sources"); + let settings = source.options; + let hidden = false; + let regions = ['us']; + let endpoints = ['us']; + let mainCategory = source.categories[0] ? source.categories[0].toLowerCase() : ''; + + if (libraryCategories.includes(mainCategory)) { + url = `connections/sources/catalog/libraries/${mainCategory}/${slug}`; + } else { + url = `connections/sources/catalog/cloud-apps/${slug}`; + mainCategory = 'cloud-app'; + } + + // Sort the settings alphabetically + settings.sort((a, b) => { + if (a.name.toLowerCase() < b.name.toLowerCase()) { + return -1; + } + if (a.name.toLowerCase() > b.name.toLowerCase()) { + return 1; + } + return 0; + }); + + if (hiddenSources.includes(slug)) { + hidden = true; + } + + if (regionalSourceEndpoint.includes(slug)) { + endpoints.push('eu'); + } + + if (regionalSourceRegion.includes(slug)) { + regions.push('eu'); + } + + // If the source ID is in the list of test sources, skip it. + // If it's not, add it to the list of sources to be written to yaml. + if (testSources.includes(source.id)) { + // console.log(`skipped ${source.name}`); + } else { + let updatedSource = { + id: source.id, + display_name: source.name, + isCloudEventSource: source.isCloudEventSource, + slug, + url, + hidden: isCatalogItemHidden(url), + regions, + endpoints, + source_type: mainCategory, + description: source.description, + logo: { + url: source.logos.default + }, + categories: source.categories, + }; + sourcesUpdated.push(updatedSource); + doesCatalogItemExist(updatedSource); + } + + source.categories.reduce((s, e) => s.add(e), categories); + + // Sources don't yet have regional information in the Public API, so we write that info here. + let updatedRegional = { + id: source.id, + display_name: source.name, + hidden: isCatalogItemHidden(url), + slug, + url, + regions, + endpoints + }; + regionalSourcesUpdated.push(updatedRegional); + }); + + const sourceArray = Array.from(categories); + sourceArray.forEach(category => { + sourceCategories.push({ + display_name: category, + slug: slugify(category) + }); + sourceCategories.sort((a, b) => { + if (a.display_name.toLowerCase() < b.display_name.toLowerCase()) { + return -1; + } + if (a.display_name.toLowerCase() > b.display_name.toLowerCase()) { + return 1; + } + return 0; + }); + }); + + const options = { + noArrayIndent: false + }; + const todayDate = new Date().toISOString().slice(0, 10); + + // Create source catalog YAML file + let output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n"; + output += "# sources last updated " + todayDate + " \n"; + output += yaml.dump({ + items: sourcesUpdated + }, options); + fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/sources.yml`), output); + + // Create source-category mapping YAML file + output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n"; + output += "# source categories last updated " + todayDate + " \n"; + output += yaml.dump({ + items: sourceCategories + }, options); + fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/source_categories.yml`), output); + + // Create regional support YAML file + output = yaml.dump({ + sources: regionalSourcesUpdated + }, options); + fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/regional-supported.yml`), output); + + console.log("sources done"); + }; + + + exports.updateSources = updateSources; \ No newline at end of file diff --git a/scripts/catalog/updateWarehouses.js b/scripts/catalog/updateWarehouses.js new file mode 100644 index 0000000000..1fb21717bb --- /dev/null +++ b/scripts/catalog/updateWarehouses.js @@ -0,0 +1,82 @@ +const path = require('path'); +const fs = require('fs'); +const yaml = require('js-yaml'); +const { + slugify, + getCatalog, +} = require('./utilities.js'); + +require('dotenv').config(); + +const PAPI_URL = "https://api.segmentapis.com"; + +const regionalSupport = yaml.load(fs.readFileSync(path.resolve(__dirname, `../../src/_data/regional-support.yml`))); + + +const updateWarehouses = async () => { + let warehouses = []; + let nextPageToken = "MA=="; + let warehousesUpdated = []; + + while (nextPageToken !== undefined) { + const res = await getCatalog(`${PAPI_URL}/catalog/warehouses/`, nextPageToken); + warehouses = warehouses.concat(res.data.warehousesCatalog); + nextPageToken = res.data.pagination.next; + } + + warehouses.sort((a, b) => { + if (a.name.toLowerCase() < b.name.toLowerCase()) { + return -1; + } + if (a.name.toLowerCase() > b.name.toLowerCase()) { + return 1; + } + return 0; + }); + + const regionalWarehouseEndpoints = regionalSupport.warehouses.endpoint; + const regionalWarehouseRegions = regionalSupport.warehouses.region; + + warehouses.forEach(warehouse => { + let slug = slugify(warehouse.slug); + let endpoints = ['us']; + let regions = ['us']; + let url = `connections/storage/catalog/${slug}`; + + if (regionalWarehouseEndpoints.includes(slug)) { + endpoints.push('eu'); + } + + if (regionalWarehouseRegions.includes(slug)) { + regions.push('eu'); + } + + let updatedWarehouse = { + id: warehouse.id, + display_name: warehouse.name, + url, + slug, + endpoints, + regions + }; + + warehousesUpdated.push(updatedWarehouse); + }); + + const options = { + noArrayIndent: true + }; + const todayDate = new Date().toISOString().slice(0, 10); + + // Create regional support YAML file + let output = "# AUTOGENERATED LIST OF CONNECTIONS THAT SUPPORT REGIONAL\n"; + output += "# Last updated " + todayDate + " \n"; + output += yaml.dump({ + warehouses: warehousesUpdated + }, options); + fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/regional-supported.yml`), output); + + console.log("warehouses done"); + }; + + exports.updateWarehouses = updateWarehouses; \ No newline at end of file diff --git a/scripts/catalog/utilities.js b/scripts/catalog/utilities.js new file mode 100644 index 0000000000..7de088ec91 --- /dev/null +++ b/scripts/catalog/utilities.js @@ -0,0 +1,175 @@ +const path = require('path'); +const fs = require('fs'); +const yaml = require('js-yaml'); +const axios = require('axios'); +const fm = require('front-matter'); + + + + +const slugOverrides = yaml.load(fs.readFileSync(path.resolve(__dirname, `../../src/_data/catalog/slugs.yml`))); + +const slugify = (displayName, type) => { + let slug = displayName + .toLowerCase() + .replace(/\s+/g, '-') + .replace('-&-', '-') + .replace('/', '-') + .replace(/[\(\)]/g, '') + .replace('.', '-') + .replace(/'/g, ''); + + let overrides = ""; + if (type == "sources") { + overrides = slugOverrides.sources; + } + + if (type == "destinations") { + overrides = slugOverrides.destinations; + } + + for (key in overrides) { + let original = overrides[key].original; + let override = overrides[key].override; + + if (slug == original) { + // console.log(original + " -> " + override); + slug = override; + } + } + return slug; +}; + +const getCatalog = async (url, page_token = "MA==") => { + try { + const res = await axios.get(url, { + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${process.env.PAPI_TOKEN}` + }, + data: { + "pagination": { + "count": 200, + "cursor": page_token + } + } + }); + + return res.data; + } catch (error) { + console.log("Something went wrong with the request to the Public API.\nIf you're updating a private destination, ensure the ID is correct."); + } +}; + +const getConnectionModes = (destination) => { + let connectionModes = { + device: { + web: false, + mobile: false, + server: false + }, + cloud: { + web: false, + mobile: false, + server: false + } + }; + + if (destination.components.length) { + destination.components.forEach(component => { + switch (component.type) { + case 'IOS': + connectionModes.device.mobile = true; + break; + case 'ANDROID': + connectionModes.device.mobile = true; + break; + case 'BROWSER': + if (destination.browserUnbundling) { + connectionModes.cloud.web = true; + } + connectionModes.device.web = true; + break; + case 'SERVER': + connectionModes.cloud.mobile = true; + if (destination.platforms.server) { + connectionModes.cloud.server = true; + } + if (destination.platforms.browser) { + connectionModes.cloud.web = true; + } + break; + case 'CLOUD': + connectionModes.cloud.mobile = true; + if (destination.platforms.server) { + connectionModes.cloud.server = true; + } + if (destination.platforms.browser) { + connectionModes.cloud.web = true; + } + break; + } + }); + } else { + if (destination.platforms.browser) { + connectionModes.cloud.web = true; + } + if (destination.platforms.mobile) { + connectionModes.cloud.mobile = true; + } + if (destination.platforms.server) { + connectionModes.cloud.server = true; + } + } + + return connectionModes; +}; + +const doesCatalogItemExist = (item) => { + const docsPath = `src/${item.url}`; + + if (!fs.existsSync(docsPath)) { + console.log(`${item.slug} (id: ${item.id}) does not exist: ${docsPath}`); + let content = `---\ntitle: '${item.display_name} Source'\nhidden: true\n---`; + + if (!docsPath.includes('/sources/')) { + let betaFlag = ''; + if (item.status === 'PUBLIC_BETA') { + betaFlag = 'beta: true\n'; + } + content = `---\ntitle: '${item.display_name} Destination'\nhidden: true\nid: ${item.id}\npublished: false\n${betaFlag}---\n`; + } + + fs.mkdirSync(docsPath); + fs.writeFileSync(`${docsPath}/index.md`, content); + } +}; + +const isCatalogItemHidden = (itemURL) => { + try { + const catalogPath = path.resolve('src', itemURL, 'index.md'); + if (fs.existsSync(catalogPath)) { + const f = fm(fs.readFileSync(catalogPath, 'utf8')); + if (f.attributes.hidden) return true; + } + return false; + } catch (e) { + console.log(error); + return false; + } +}; + +const sanitize = (text) => { + const regex = /(<[^\/a].*?>)/ig; + result = text.replace(regex, "`$1`"); + return result; +}; + + + +exports.slugify = slugify; +exports.getCatalog = getCatalog; +exports.getConnectionModes = getConnectionModes; +exports.isCatalogItemHidden = isCatalogItemHidden; +exports.sanitize = sanitize; +exports.doesCatalogItemExist = doesCatalogItemExist; \ No newline at end of file diff --git a/scripts/catalog/utilities_private_destinations.js b/scripts/catalog/utilities_private_destinations.js new file mode 100644 index 0000000000..a928092d6c --- /dev/null +++ b/scripts/catalog/utilities_private_destinations.js @@ -0,0 +1,176 @@ +const path = require('path'); +const fs = require('fs'); +const fm = require('front-matter'); +const yaml = require('js-yaml'); +const { + prompt +} = require('enquirer'); +const { + slugify, + getCatalog +} = require('./utilities.js'); + + +require('dotenv').config(); + +// Global variables +const PAPI_URL = "https://api.segmentapis.com"; +const PRIVATE_DESTINATIONS = yaml.load(fs.readFileSync(path.resolve(__dirname, `../../src/_data/catalog/destinations_private.yml`))); +const privateDests = PRIVATE_DESTINATIONS.items; +let private = []; + +// Checks the status of a destination +const checkDestinationStatus = async (id) => { + try { + const res = await getCatalog(`${PAPI_URL}/catalog/destinations/${id}`); + let destination = res.data.destinationMetadata; + return destination; + } catch (error) { + console.log(error); + } +}; + +// Updates the frontmatter to make a destination public +// if it is currently private and the status has changed +const makeDestinationPublic = async (itemURL) => { + const catalogPath = path.resolve('src/', itemURL, 'index.md'); + const f = fm(fs.readFileSync(catalogPath, 'utf8')); + const fmatter = f.attributes; + fmatter.private = false; + fmatter.hidden = false; + let new_fm = ""; + for (const property in fmatter) { + if (property == "versions") { + console.log(`Need to fix versions on this one`); + } + new_fm += `${property}: ${fmatter[property]}\n`; + } + const attr = `---\n${new_fm}\n---\n`; + const body = f.body; + const content = attr + body; + fs.writeFileSync(catalogPath, content); +}; + +// Retrieves destination data and updates the private destinations +const getDestinationData = async (id) => { + const res = await getCatalog(`${PAPI_URL}/catalog/destinations/${id}`); + if (res == null) { + return; + } + let destination = res.data.destinationMetadata; + let settings = destination.options; + settings.sort((a, b) => { + if (a.name.toLowerCase() < b.name.toLowerCase()) { + return -1; + } + if (a.name.toLowerCase() > b.name.toLowerCase()) { + return 1; + } + return 0; + }); + let actions = destination.actions; + let presets = destination.presets; + let slug = slugify(destination.name, "destinations"); + let url = `connections/destinations/catalog/${slug}`; + + // Force screen method into supportedMethods object + destination.supportedMethods.screen = false; + // Set it true for LiveLike, per request + if (destination.id == '63e42b47479274407b671071') { + destination.supportedMethods.screen = true; + } + + const clone = (obj) => Object.assign({}, obj); + const renameKey = (object, key, newKey) => { + const clonedObj = clone(object); + const targetKey = clonedObj[key]; + delete clonedObj[key]; + + clonedObj[newKey] = targetKey; + return clonedObj; + }; + + destination.supportedMethods = renameKey(destination.supportedMethods, 'pageview', 'page'); + + let updatePrivateDest = { + id: destination.id, + display_name: destination.name, + name: destination.name, + slug: slugify(destination.name, "destinations"), + previous_names: destination.previousNames, + url, + website: destination.website, + status: destination.status, + logo: { + url: destination.logos.default + }, + mark: { + url: destination.logos.mark + }, + methods: destination.supportedMethods, + platforms: destination.supportedPlatforms, + components: destination.components, + browserUnbundlingSupported: destination.supportedFeatures.browserUnbundling, + browserUnbundlingPublic: destination.supportedFeatures.browserUnbundlingPublic, + replay: destination.supportedFeatures.replay, + settings, + actions, + presets + }; + + if (destination.status === "PRIVATE_BETA" || destination.status === "PRIVATE_BUILDING") { + private.push(updatePrivateDest); + } else { + console.log(`${destination.name} is public and will be removed`); + makeDestinationPublic(url); + } + + const options = { + noArrayIndent: false + }; + + output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n"; + var todayDate = new Date().toISOString().slice(0, 10); + output += "# destination data last updated " + todayDate + " \n"; + output += yaml.dump({ + items: private + }, options); + fs.writeFileSync(path.resolve(__dirname, `../../src/_data/catalog/destinations_private.yml`), output); +}; + +// Checks the status of existing private destinations and handles public destinations +const checkExistingStatus = async () => { + let existingIds = []; + let newIds = []; + for (let [key] of Object.entries(privateDests)) { + existingIds.push(privateDests[key].id); + } + + existingIds.sort(); + + for (i in existingIds) { + let id = existingIds[i]; + let destination = await checkDestinationStatus(id); + let status = destination.status; + let slug = slugify(destination.name, "destinations"); + let url = `connections/destinations/catalog/${slug}`; + + if (status === "PRIVATE_BETA") { + newIds.push(id); + } else { + console.log(`src/connections/${destination.name} is public`); + makeDestinationPublic(url); + } + } + return newIds; +}; + +// Adds a new private destination or updates existing ones + + + + +exports.checkDestinationStatus = checkDestinationStatus; +exports.makeDestinationPublic = makeDestinationPublic; +exports.getDestinationData = getDestinationData; +exports.checkExistingStatus = checkExistingStatus; diff --git a/scripts/catalog_capi.js b/scripts/catalog_capi.js deleted file mode 100644 index 409af863e3..0000000000 --- a/scripts/catalog_capi.js +++ /dev/null @@ -1,428 +0,0 @@ -const axios = require('axios'); -const path = require('path'); -const fs = require('fs'); -const fm = require('front-matter'); -const yaml = require('js-yaml'); - -require('dotenv').config(); - -PLATFORM_API_URL = "https://platform.segmentapis.com" - -const slugify = (displayName) => { - let slug = displayName - .toLowerCase() - .replace(/\s+/g, '-') - .replace('-&-', '-') - .replace('/', '-') - .replace(/[\(\)]/g, '') - .replace('.','-') - - if (slug === '-net') slug = 'net' - if (slug === 'talon-one') slug = 'talonone' - if (slug === 'roku-alpha') slug = 'roku' - if (slug === 'shopify-by-littledata') slug = 'shopify-littledata' - if (slug === 'talon-one') slug = 'talonone' - if (slug == 'google-adwords-remarketing-lists-customer-match') slug = 'adwords-remarketing-lists' - if (slug == 'canny-classic') slug = 'canny' - return slug -} - -const getCatalog = async (url, page_token = "") => { - try { - const res = await axios.get(url, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${process.env.PLATFORM_API_TOKEN}` - }, - params: { - page_token, - page_size: 100 - } - }); - return res.data - } catch (error) { - console.log(error) - } -} - -const getConnectionModes = (destination) => { - let connectionModes = { - device: { - web: false, - mobile: false, - server: false - }, - cloud: { - web: false, - mobile: false, - server: false - }, - summary: "testing", - cmode_type: "" - } - destination.components.forEach(component => { - switch (component.type) { - case 'IOS': - connectionModes.device.mobile = true - break - case 'ANDROID': - connectionModes.device.mobile = true - break - case 'WEB': - if (destination.browserUnbundlingSupported) { - connectionModes.cloud.web = true - } - connectionModes.device.web = true - break - case 'SERVER': - connectionModes.cloud.mobile = true - if (destination.platforms.server) { - connectionModes.cloud.server = true - } - if (destination.platforms.browser) { - connectionModes.cloud.web = true - } - break - case 'CLOUD': - connectionModes.cloud.mobile = true - if (destination.platforms.server) { - connectionModes.cloud.server = true - } - if (destination.platforms.browser) { - connectionModes.cloud.web = true - } - break - } - }) - - // summarize connection modes in plain english. - // start with no-cloud - if (connectionModes.cloud.web == false && connectionModes.cloud.mobile == false && connectionModes.cloud.server == false){ - // first check if no info at all available - these need backfill - if (connectionModes.device.web == false && connectionModes.device.mobile == false) { - connectionModes.summary = "No connection mode information available." - connectionModes.case = "0" - connectionModes.cmode_type = "none" - } - // handle has-device-modes: three cases - else if (connectionModes.device.web == true || connectionModes.device.mobile == true){ - connectionModes.cmode_type = "device-only" - if (connectionModes.device.web == true && connectionModes.device.mobile == true) { - connectionModes.summary = "accepts device-mode data from both Analytics.js and mobile sources. It does not accept data in cloud-mode." - connectionModes.case = "1" - } - if (connectionModes.device.web == true && connectionModes.device.mobile == false) { - connectionModes.summary = "accepts device-mode data only from Analytics.js." - connectionModes.case = "2" - } - if (connectionModes.device.web == false && connectionModes.device.mobile == true) { - connectionModes.summary = "accepts device-mode data only from a mobile source." - connectionModes.case = "3" - } - } - - } - //next check if all are true. - else if (connectionModes.cloud.web == true && connectionModes.cloud.mobile == true && connectionModes.cloud.server == true && connectionModes.device.web == true && connectionModes.device.mobile == true) { - connectionModes.cmode_type = "all" - connectionModes.summary = "accepts cloud-mode data from all Segment source types. It can accept device-mode data from both web and mobile sources." - connectionModes.case = "4" - } - - //next handle all cloud-only (no-device-mode) cases - else if ((connectionModes.device.web == false && connectionModes.device.mobile == false) && (connectionModes.cloud.web == true || connectionModes.cloud.mobile == true || connectionModes.cloud.server == true)) { - connectionModes.cmode_type = "cloud-only" - // accepts all cloud-mode - if (connectionModes.cloud.web == true && connectionModes.cloud.mobile == true && connectionModes.cloud.server == true){ - connectionModes.summary = "accepts cloud-mode data from all Segment source types. It does not offer device-mode connections." - connectionModes.case = "5" - } - //edge-case-y: only mobile and server cloud - else if (connectionModes.cloud.web == false && connectionModes.cloud.mobile == true && connectionModes.cloud.server == true){ - connectionModes.summary = "accepts data from any Segment mobile or server source in cloud mode. It does not accept data from a web source, and does not offer device-mode connections." - connectionModes.case = "6" - } - //edge-case-y: web and mobile cloud, no server. - else if (connectionModes.cloud.web == true && connectionModes.cloud.mobile == true && connectionModes.cloud.server == false){ - connectionModes.summary = "accepts only cloud-mode data from web and mobile sources." - connectionModes.case = "7" - } - //edge-case-y: mobile cloud only. - else if (connectionModes.cloud.web == false && connectionModes.cloud.mobile == true && connectionModes.cloud.server == false){ - connectionModes.summary = "accepts only cloud-mode data from mobile sources." - connectionModes.case = "8" - } - } - - //handle mixed-case - in the dossier, use the case, or type: "mixed" to invoke a check for what type of device mode - else if ((connectionModes.cloud.web == true || connectionModes.cloud.mobile == true || connectionModes.cloud.server == true) && (connectionModes.device.mobile == true || connectionModes.device.web == true)){ -// remove "both" as that would be covered under ALL - if (!(connectionModes.device.mobile == true && connectionModes.device.web == true)){ - connectionModes.cmode_type = "mixed" - // all cloud-mode plus one device - if ((connectionModes.cloud.web == true && connectionModes.cloud.mobile == true && connectionModes.cloud.server == true) && (connectionModes.device.mobile == true || connectionModes.device.web == true)){ - if (connectionModes.device.mobile == true || connectionModes.device.web == false){ - connectionModes.summary = "accepts data in cloud-mode from all source types, and can accept data in device-mode from mobile sources." - } - else if (connectionModes.device.mobile == false || connectionModes.device.web == true){ - connectionModes.summary = "accepts data in cloud-mode from all source types, and can accept data in device-mode from Analytics.js sources." - } - connectionModes.case = "9" - } - // edge-case-y: cloud web and mobile, no server, one device - else if ((connectionModes.cloud.web == true && connectionModes.cloud.mobile == true && connectionModes.cloud.server == false) && (connectionModes.device.mobile == true || connectionModes.device.web == true)){ - if (connectionModes.device.mobile == true || connectionModes.device.web == false){ - connectionModes.summary = "accepts data in cloud-mode from web and mobile sources, and can accept data in device-mode from mobile sources." - } - else if (connectionModes.device.mobile == false || connectionModes.device.web == true){ - connectionModes.summary = "accepts data in cloud-mode from web and mobile sources, and can accept data in device-mode from Analytics.js sources." - } - connectionModes.case = "10" - } - // edge-case-y: cloud mobile and server, device mobile, no web - else if (connectionModes.cloud.web == false && connectionModes.cloud.mobile == true && connectionModes.cloud.server == true && connectionModes.device.mobile == true && connectionModes.device.web == false){ - connectionModes.summary = "accepts data in cloud-mode from mobile and server sources, and can accept data in device-mode from mobile sources." - connectionModes.case = "11" - } - } - } - - return connectionModes -} - -/** - * If catalog item does not exist, create folder and index.md file for it, and record it as incomplete for later fill in - */ -const doesCatalogItemExist = (item) => { - const docsPath = `src/${item.url}` - - if (!fs.existsSync(docsPath)) { - console.log(`${item.slug} does not exist: ${docsPath}`) - let content =`---\ntitle: '${item.display_name} Source'\nhidden: true\n---` - if (!docsPath.includes('/sources/')) { - let betaFlag = '' - if (item.status === 'PUBLIC_BETA') { - betaFlag = 'beta: true\n' - } - content =`---\ntitle: '${item.display_name} Destination'\nhidden: true\n${betaFlag}--- %}` - } - fs.mkdirSync(docsPath) - fs.writeFileSync(`${docsPath}/index.md`, content) - fs.appendFileSync('src/_data/catalog/incompleteDocs.txt', `${docsPath}\n`) - } -} - -const isCatalogItemHidden = (itemURL) => { - try { - const catalogPath = path.resolve('src', itemURL, 'index.md') - if (fs.existsSync(catalogPath)) { - const f = fm(fs.readFileSync(catalogPath, 'utf8')); - if (f.attributes.hidden) return true - } - return false - } catch (e) { - console.log(error) - return false - } -} - -const updateSources = async () => { - let sources = [] - let sourcesUpdated = [] - let categories = new Set(); - let sourceCategories = [] - let nextPageToken = null - - while (nextPageToken !== "") { - const res = await getCatalog(`${PLATFORM_API_URL}/v1beta/catalog/sources`, nextPageToken) - sources = sources.concat(res.sources) - nextPageToken = res.next_page_token - } - - sources.sort((a, b) => { - if(a.display_name.toLowerCase() < b.display_name.toLowerCase()) { return -1; } - if(a.display_name.toLowerCase() > b.display_name.toLowerCase()) { return 1; } - return 0; - }) - - const libraryCategories = [ - 'server', - 'mobile', - 'ott', - 'roku', - 'website' - ] - - sources.forEach(source => { - let slug = slugify(source.display_name) - let url = '' - let mainCategory = source.categories[0] ? source.categories[0].toLowerCase() : '' - - if (libraryCategories.includes(mainCategory)) { - url = `connections/sources/catalog/libraries/${mainCategory}/${slug}` - } else { - url = `connections/sources/catalog/cloud-apps/${slug}` - } - - let updatedSource = { - display_name: source.display_name, - slug, - name: source.name, - description: source.description, - url, - logo: { - url: source.logos.logo - }, - mark: { - url: source.logos.mark - }, - categories: source.categories, - type: source.type - } - sourcesUpdated.push(updatedSource) - doesCatalogItemExist(updatedSource) - // add unique source categories to set - source.categories.reduce((s, e) => s.add(e), categories); - }) - - const sourceArray = Array.from(categories) - sourceArray.forEach(category => { - sourceCategories.push({ - display_name: category, - slug: slugify(category) - }) - sourceCategories.sort((a, b) => { - if(a.display_name.toLowerCase() < b.display_name.toLowerCase()) { return -1; } - if(a.display_name.toLowerCase() > b.display_name.toLowerCase()) { return 1; } - return 0; - }) - }) - - // Create source catalog yaml file - const options = { noArrayIndent: false }; - var todayDate = new Date().toISOString().slice(0,10); - output = "# AUTOGENERATED FROM PLATFORM API. DO NOT EDIT\n" - output += "# sources last updated " + todayDate + " \n"; - output += yaml.dump({ items: sourcesUpdated }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/sources_capi.yml`), output); - - // Create source-category mapping yaml file - var todayDate = new Date().toISOString().slice(0,10); - output = "# AUTOGENERATED FROM PLATFORM API. DO NOT EDIT\n" - output += "# source cateogries last updated " + todayDate + " \n"; - output += yaml.dump({ items: sourceCategories }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/source_categories_capi.yml`), output); -} - -const updateDestinations = async () => { - let destinations = [] - let destinationsUpdated = [] - let destinationCategories = [] - let categories = new Set() - let nextPageToken = null - - while (nextPageToken !== "") { - const res = await getCatalog(`${PLATFORM_API_URL}/v1beta/catalog/destinations`, nextPageToken) - destinations = destinations.concat(res.destinations) - nextPageToken = res.next_page_token - } - destinations.sort((a, b) => { - if(a.display_name.toLowerCase() < b.display_name.toLowerCase()) { return -1; } - if(a.display_name.toLowerCase() > b.display_name.toLowerCase()) { return 1; } - return 0; - }) - destinations.forEach(destination => { - let slug = slugify(destination.display_name) - - let tempCategories = [destination.categories.primary, destination.categories.secondary, ...destination.categories.additional] - tempCategories = tempCategories.filter(category => category != '') - - let connection_modes = getConnectionModes({ - components: destination.components, - platforms: destination.platforms, - browserUnbundlingSupported: destination.browserUnbundlingSupported, - browserUnbundlingPublic: destination.browserUnbundlingPublic, - methods: destination.methods - }) - - let url = `connections/destinations/catalog/${slug}` - - let settings = destination.settings - settings.sort((a, b) => { - if(a.display_name.toLowerCase() < b.display_name.toLowerCase()) { return -1; } - if(a.display_name.toLowerCase() > b.display_name.toLowerCase()) { return 1; } - return 0; - }) - settings.forEach(setting => { - if (setting.settings.length > 0) { - setting.settings.sort((a, b) => { - if(a.display_name.toLowerCase() < b.display_name.toLowerCase()) { return -1; } - if(a.display_name.toLowerCase() > b.display_name.toLowerCase()) { return 1; } - return 0; - }) - } - }) - - let updatedDestination = { - display_name: destination.display_name, - slug, - name: destination.name, - url, - description: destination.description, - hidden: isCatalogItemHidden(url), - status: destination.status, - previous_names: destination.previous_names, - logo: { - url: destination.logos.logo - }, - mark: { - url: destination.logos.mark - }, - categories: tempCategories, - methods: destination.methods, - components: destination.components, - platforms: destination.platforms, - browserUnbundlingSupported: destination.browserUnbundlingSupported, - browserUnbundlingPublic: destination.browserUnbundlingPublic, - connection_modes, - settings - } - - destinationsUpdated.push(updatedDestination) - doesCatalogItemExist(updatedDestination) - - // add unique destination categories to set - tempCategories.reduce((s, e) => s.add(e), categories); - }) - - const destinationArray = Array.from(categories) - destinationArray.forEach(category => { - destinationCategories.push({ - display_name: category, - slug: slugify(category) - }) - destinationCategories.sort((a, b) => { - if(a.display_name.toLowerCase() < b.display_name.toLowerCase()) { return -1; } - if(a.display_name.toLowerCase() > b.display_name.toLowerCase()) { return 1; } - return 0; - }) - }) - - // Create destination catalog yaml file - const options = { noArrayIndent: true }; - output = "# AUTOGENERATED FROM PLATFORM API. DO NOT EDIT\n" - var todayDate = new Date().toISOString().slice(0,10); - output += "# destination data last updated " + todayDate + " \n"; - output += yaml.dump({ items: destinationsUpdated }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/destinations_capi.yml`), output); - - // Create destination-category mapping yaml file - output = "# AUTOGENERATED FROM PLATFORM API. DO NOT EDIT\n" - var todayDate = new Date().toISOString().slice(0,10); - output += "# destination categories last updated " + todayDate + " \n"; - output += yaml.dump({ items: destinationCategories }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/destination_categories_capi.yml`), output); -} - -updateSources() -updateDestinations() diff --git a/scripts/catalog_papi.js b/scripts/catalog_papi.js deleted file mode 100644 index 5d0c76fc45..0000000000 --- a/scripts/catalog_papi.js +++ /dev/null @@ -1,595 +0,0 @@ -const axios = require('axios'); -const path = require('path'); -const fs = require('fs'); -const fm = require('front-matter'); -const yaml = require('js-yaml'); -const { - type -} = require('os'); - -require('dotenv').config(); - -PAPI_URL = "https://api.segmentapis.com" - -const regionalSupport = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/regional-support.yml`))) -const slugOverrides = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/catalog/slugs.yml`))) - - -const slugify = (displayName) => { - let slug = displayName - .toLowerCase() - .replace(/\s+/g, '-') - .replace('-&-', '-') - .replace('/', '-') - .replace(/[\(\)]/g, '') - .replace('.', '-') - - for (key in slugOverrides) { - let original = slugOverrides[key].original - let override = slugOverrides[key].override - - if (slug == original) { - console.log(original + " -> " + override) - slug = override - } - } - - return slug -} - -const getCatalog = async (url, page_token = "MA==") => { - try { - const res = await axios.get(url, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${process.env.PAPI_TOKEN}` - }, - data: { - "pagination": { - "count": 200, - "cursor": page_token - } - } - }); - - return res.data - } catch (error) { - console.log(error) - } -} - -const getConnectionModes = (destination) => { - let connectionModes = { - device: { - web: false, - mobile: false, - server: false - }, - cloud: { - web: false, - mobile: false, - server: false - }, - } - - // if destination has device specific components - if (destination.components.length) { - destination.components.forEach(component => { - switch (component.type) { - case 'IOS': - connectionModes.device.mobile = true - break - case 'ANDROID': - connectionModes.device.mobile = true - break - case 'BROWSER': - if (destination.browserUnbundling) { - connectionModes.cloud.web = true - } - connectionModes.device.web = true - break - case 'SERVER': - connectionModes.cloud.mobile = true - if (destination.platforms.server) { - connectionModes.cloud.server = true - } - if (destination.platforms.browser) { - connectionModes.cloud.web = true - } - break - case 'CLOUD': - connectionModes.cloud.mobile = true - if (destination.platforms.server) { - connectionModes.cloud.server = true - } - if (destination.platforms.browser) { - connectionModes.cloud.web = true - } - break - } - }) - // if destination has no device specific components, check for supported platforms - } else { - if (destination.platforms.browser) { - connectionModes.cloud.web = true - } - if (destination.platforms.mobile) { - connectionModes.cloud.mobile = true - } - if (destination.platforms.server) { - connectionModes.cloud.server = true - } - } - - return connectionModes -} - -/** - * If catalog item does not exist, create folder and index.md file for it, and record it as incomplete for later fill in - */ -const doesCatalogItemExist = (item) => { - const docsPath = `src/${item.url}` - - if (!fs.existsSync(docsPath)) { - console.log(`${item.slug} does not exist: ${docsPath}`) - let content = `---\ntitle: '${item.display_name} Source'\nhidden: true\n---` - if (!docsPath.includes('/sources/')) { - let betaFlag = '' - if (item.status === 'PUBLIC_BETA') { - betaFlag = 'beta: true\n' - } - content = `---\ntitle: '${item.display_name} Destination'\nhidden: true\nid: ${item.id}\npublished: false\n${betaFlag}---\n` - } - fs.mkdirSync(docsPath) - fs.writeFileSync(`${docsPath}/index.md`, content) - } -} - -const isCatalogItemHidden = (itemURL) => { - try { - const catalogPath = path.resolve('src', itemURL, 'index.md') - if (fs.existsSync(catalogPath)) { - const f = fm(fs.readFileSync(catalogPath, 'utf8')); - if (f.attributes.hidden) return true - } - return false - } catch (e) { - console.log(error) - return false - } -} - -const sanitize = (text) => { - const regex = /(<[^\/a].*?>)/ig; - result = text.replace(regex, "`$1`") - return result -} - -const updateSources = async () => { - let sources = [] - let sourcesUpdated = [] - let regionalSourcesUpdated = [] - let nextPageToken = "MA==" - let categories = new Set() - let sourceCategories = [] - - while (nextPageToken !== undefined) { - const res = await getCatalog(`${PAPI_URL}/catalog/sources/`, nextPageToken) - sources = sources.concat(res.data.sourcesCatalog) - nextPageToken = res.data.pagination.next - } - - sources.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - - const libraryCategories = [ - 'server', - 'mobile', - 'ott', - 'roku', - 'website' - ] - - const hiddenSources = [ - 'amp', - 'factual-engine', - 'twilio-event-streams-beta', - 'ibm-watson-assistant' - ] - - const regionalSourceEndpoint = regionalSupport.sources.endpoint - const regionalSourceRegion = regionalSupport.sources.region - - sources.forEach(source => { - let slug = slugify(source.name) - let settings = source.options - let hidden = false - let regions = ['us'] - let endpoints = ['us'] - let mainCategory = source.categories[0] ? source.categories[0].toLowerCase() : '' - - // determine the doc url based on the source's main category - if (libraryCategories.includes(mainCategory)) { - url = `connections/sources/catalog/libraries/${mainCategory}/${slug}` - } else { - url = `connections/sources/catalog/cloud-apps/${slug}` - mainCategory = 'cloud-app' - } - - // sort the sources alphabetically. JS's default sort is case sensistve which is why we compare lowercase on the fly - settings.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - - // check if the source should be hidden - if (hiddenSources.includes(slug)) { - hidden = true - } - - if (regionalSourceEndpoint.includes(slug)) { - endpoints.push('eu') - } - - if (regionalSourceRegion.includes(slug)) { - regions.push('eu') - } - - // create the catalog metadata - let updatedSource = { - id: source.id, - display_name: source.name, - isCloudEventSource: source.isCloudEventSource, - slug, - url, - hidden: isCatalogItemHidden(url), - regions, - endpoints, - source_type: mainCategory, - description: source.description, - logo: { - url: source.logos.default - }, - // mark: { - // url: source.logos.mark - // }, - categories: source.categories, - } - sourcesUpdated.push(updatedSource) - doesCatalogItemExist(updatedSource) - source.categories.reduce((s, e) => s.add(e), categories); - - let updatedRegional = { - id: source.id, - display_name: source.name, - slug, - url, - regions, - endpoints - } - regionalSourcesUpdated.push(updatedRegional) - - - }) - - const sourceArray = Array.from(categories) - sourceArray.forEach(category => { - sourceCategories.push({ - display_name: category, - slug: slugify(category) - }) - sourceCategories.sort((a, b) => { - if (a.display_name.toLowerCase() < b.display_name.toLowerCase()) { - return -1; - } - if (a.display_name.toLowerCase() > b.display_name.toLowerCase()) { - return 1; - } - return 0; - }) - }) - - - // Create source catalog yaml file - const options = { - noArrayIndent: false - }; - var todayDate = new Date().toISOString().slice(0, 10); - output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n" - output += "# sources last updated " + todayDate + " \n"; - output += yaml.dump({ - items: sourcesUpdated - }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/sources.yml`), output); - - // Create source-category mapping yaml file - var todayDate = new Date().toISOString().slice(0, 10); - output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n" - output += "# source cateogries last updated " + todayDate + " \n"; - output += yaml.dump({ - items: sourceCategories - }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/source_categories.yml`), output); - - - // output = "# AUTOGENERATED LIST OF CONNECTIONS THAT SUPPORT REGIONAL\n" - // output += "# Last updated " + todayDate + " \n"; - output = yaml.dump({ - sources: regionalSourcesUpdated - }, options) - fs.appendFileSync(path.resolve(__dirname, `../src/_data/catalog/regional-supported.yml`), output); - console.log("sources done") -} - -const updateDestinations = async () => { - let destinations = [] - let destinationsUpdated = [] - let destinationCategories = [] - let categories = new Set() - let nextPageToken = "MA==" - - while (nextPageToken !== undefined) { - const res = await getCatalog(`${PAPI_URL}/catalog/destinations/`, nextPageToken) - destinations = destinations.concat(res.data.destinationsCatalog) - nextPageToken = res.data.pagination.next - } - - destinations.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - - - destinations.forEach(destination => { - let endpoints = [] - let regions = [] - - let slug = slugify(destination.name) - - if (typeof destination.supportedRegions != "undefined") { - regions = destination.supportedRegions - } else { - regions.push('us-west-2','eu-west-1') - } - if (typeof destination.regionEndpoints != "undefined"){ - endpoints = destination.regionEndpoints - } else { - endpoints.push('US') - } - let url = `connections/destinations/catalog/${slug}` - - let tempCategories = [destination.categories] - tempCategories = tempCategories.filter(category => category != '') - tempCategories = tempCategories.flat() - - let connection_modes = getConnectionModes({ - components: destination.components, - platforms: destination.supportedPlatforms, - browserUnbundling: destination.supportedFeatures.browserUnbundling, - browserUnbundlingPublic: destination.supportedFeatures.browserUnbundlingPublic, - methods: destination.supportedMethods - }) - - let settings = destination.options - - settings.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - - settings.forEach(setting => { - setting.description = sanitize(setting.description) - }); - - - let actions = destination.actions - let presets = destination.presets - - const clone = (obj) => Object.assign({}, obj) - const renameKey = (object, key, newKey) => { - const clonedObj = clone(object); - const targetKey = clonedObj[key]; - delete clonedObj[key]; - - clonedObj[newKey] = targetKey; - return clonedObj; - }; - - - // Force screen method into supportedMethods object - destination.supportedMethods.screen = false - // Set it true for LiveLike, per request - if (destination.id == '63e42b47479274407b671071') { - destination.supportedMethods.screen = true - } - destination.supportedMethods = renameKey(destination.supportedMethods, 'pageview', 'page') - - let updatedDestination = { - id: destination.id, - display_name: destination.name, - name: destination.name, - slug, - hidden: isCatalogItemHidden(url), - endpoints, - regions, - url, - previous_names: destination.previousNames, - website: destination.website, - status: destination.status, - categories: tempCategories, - logo: { - url: destination.logos.default - }, - mark: { - url: destination.logos.mark - }, - methods: destination.supportedMethods, - platforms: destination.supportedPlatforms, - components: destination.components, - browserUnbundlingSupported: destination.supportedFeatures.browserUnbundling, - browserUnbundlingPublic: destination.supportedFeatures.browserUnbundlingPublic, - replay: destination.supportedFeatures.replay, - connection_modes, - settings, - actions, - presets - } - destinationsUpdated.push(updatedDestination) - doesCatalogItemExist(updatedDestination) - tempCategories.reduce((s, e) => s.add(e), categories) - - }) - - - const destinationArray = Array.from(categories) - destinationArray.forEach(category => { - destinationCategories.push({ - display_name: category, - slug: slugify(category) - }) - destinationCategories.sort((a, b) => { - if (a.display_name.toLowerCase() < b.display_name.toLowerCase()) { - return -1; - } - if (a.display_name.toLowerCase() > b.display_name.toLowerCase()) { - return 1; - } - return 0; - }) - }) - - - const options = { - noArrayIndent: true - }; - output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n" - var todayDate = new Date().toISOString().slice(0, 10); - output += "# destination data last updated " + todayDate + " \n"; - output += yaml.dump({ - items: destinationsUpdated - }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/destinations.yml`), output); - - // Create destination-category mapping yaml file - output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n" - var todayDate = new Date().toISOString().slice(0, 10); - output += "# destination categories last updated " + todayDate + " \n"; - output += yaml.dump({ - items: destinationCategories - }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/destination_categories.yml`), output); - - console.log("destinations done") -} - -const updateWarehouses = async () => { - let warehouses = [] - let nextPageToken = "MA==" - let warehousesUpdated = [] - - - while (nextPageToken !== undefined) { - const res = await getCatalog(`${PAPI_URL}/catalog/warehouses/`, nextPageToken) - warehouses = warehouses.concat(res.data.warehousesCatalog) - nextPageToken = res.data.pagination.next - } - - warehouses.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - - const regionalWarehouseEndpoints = regionalSupport.warehouses.endpoint - const regionalWarehouseRegions = regionalSupport.warehouses.region - - - warehouses.forEach(warehouse => { - let slug = slugify(warehouse.slug) - let endpoints = ['us'] - let regions = ['us'] - let url = `connections/storage/catalog/${slug}` - - if (regionalWarehouseEndpoints.includes(slug)) { - endpoints.push('eu') - } - - if (regionalWarehouseRegions.includes(slug)) { - regions.push('eu') - } - - let settings = warehouse.options - settings.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - - let updatedWarehouse = { - id: warehouse.id, - display_name: warehouse.name, - url, - slug, - endpoints, - regions - - } - warehousesUpdated.push(updatedWarehouse) - - - }) - const options = { - noArrayIndent: true - }; - // output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n" - const todayDate = new Date().toISOString().slice(0, 10); - // output += "# warehouse data last updated " + todayDate + " \n"; - // output += yaml.dump({ - // items: warehousesUpdated - // }, options); - // fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/warehouse_papi.yml`), output); - - // Create regional support map - output = "# AUTOGENERATED LIST OF CONNECTIONS THAT SUPPORT REGIONAL\n" - output += "# Last updated " + todayDate + " \n"; - output += yaml.dump({ - warehouses: warehousesUpdated - }, { - noArrayIndent: false - }) - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/regional-supported.yml`), output); - console.log("warehouses done") -} -updateWarehouses() -updateSources() -updateDestinations() diff --git a/scripts/engage-compare.js b/scripts/engage-compare.js deleted file mode 100644 index 9e00ba32b9..0000000000 --- a/scripts/engage-compare.js +++ /dev/null @@ -1,48 +0,0 @@ -const path = require('path'); -const fs = require('fs'); -const fm = require('front-matter'); -const yaml = require('js-yaml'); -const Diff = require('diff') -const ora = require('ora') -const { - type -} = require('os'); -const pages = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/engage-compare.yml`))) - - -const compare = async () => { - let title = "" - let engage_path = "" - let personas_path = "" - - - for (const key in pages) { - title = pages[key].title - engage_path = pages[key].engage - personas_path = pages[key].personas - const throbber = ora(`${title}`).start() - - const engage_article = path.resolve(engage_path) - const personas_article = path.resolve(personas_path) - - try { - const e = fm(fs.readFileSync(engage_article, 'utf8')).body; - const p = fm(fs.readFileSync(personas_article, 'utf8')).body; - const diff = Diff.diffChars(p, e) - - if (diff.length > 1) { - throbber.fail(`${title} has diffs!`) - } else { - throbber.succeed() - } - - - } catch (e) { - console.log(e) - return false - } - - } -} - -compare() diff --git a/scripts/nav.js b/scripts/nav.js deleted file mode 100644 index 2ccec1416c..0000000000 --- a/scripts/nav.js +++ /dev/null @@ -1,81 +0,0 @@ -const glob = require('glob'); -const path = require('path'); -const fs = require('fs'); -const fm = require('front-matter'); -const yaml = require('js-yaml'); - -const ignore = [ 'catalog/**', '_*/**', '*.md' ]; - -const capitalize = (str) => str.charAt(0).toLocaleUpperCase() + str.slice(1); -const getTitle = (str) => str.split('-').map(capitalize).join(' '); - -const getSection = (accum, paths) => { - const slug = paths.join('/'); - if (accum[slug]) return accum[slug]; - - const section_title = getTitle(paths[paths.length - 1]); - const section = []; - - const subsection = paths.length > 1 - ? { section_title, slug, section } - : { section_title, section }; - - accum[slug] = subsection; - if (paths.length > 1) getSection(accum, paths.slice(0, -1)).section.push(subsection); - - return subsection; -}; - -const files = glob.sync('**/*.md', { ignore, cwd: path.resolve(__dirname, '../src') }); - -const sections = files.reduce((accum, file) => { - const paths = file.split('/'); - - // Not a valid path or some deep-nested directory structure we don't support - if (paths.length < 2 || paths.length > 3) { - console.log(`skipping ${file}`); - return accum; - } - - // read in the .md file, parse the frontmatter attributes - const f = fm(fs.readFileSync(path.resolve(__dirname, '../src', file), 'utf8')); - - // if file has hidden attribute don't add to nav - if (!f.attributes.hidden) { - const title = f.attributes.title || getTitle(paths[paths.length - 1].slice(0, -3)); - const s = getSection(accum, paths.slice(0, -1)); - - if (paths[paths.length - 1] === 'index.md') { - s.section.unshift({ path: `/${paths.slice(0, -1).join('/')}`, title }); - } else { - s.section.push({ path: `/${paths.join('/').slice(0, -3)}`, title }); - } - } - return accum; -}, {}); - -const mainSections = {}; -const legalSections = {}; -const apiSections = {}; -const partnerSections = {}; - -Object.keys(sections).filter(key => !key.includes('/')).forEach((key) => { - const value = sections[key]; - - switch (key) { - case 'legal': legalSections[key] = value; break; - case 'config-api': apiSections[key] = value; break; - case 'partners': partnerSections[key] = value; break; - default: mainSections[key] = value; break; - } -}); - -[ ['main', mainSections], - ['legal', legalSections], - ['config-api', apiSections], - ['partners', partnerSections] -].forEach(([ name, sections ]) => { - const options = { noArrayIndent: true }; - const output = yaml.safeDump({ sections: Object.values(sections) }, options); - fs.writeFileSync(path.resolve(__dirname, `../src/_data/sidenav/_auto/${name}.yml`), output); -}); diff --git a/scripts/private-destination.js b/scripts/private-destination.js deleted file mode 100644 index 29b9a50e8b..0000000000 --- a/scripts/private-destination.js +++ /dev/null @@ -1,249 +0,0 @@ -const axios = require('axios'); -const path = require('path'); -const fs = require('fs'); -const fm = require('front-matter'); -const yaml = require('js-yaml'); -const { - prompt -} = require('enquirer'); -const { - type -} = require('os'); - -require('dotenv').config(); - - -// Here, global variables are set -const PAPI_URL = "https://api.segmentapis.com" - -const PRIVATE_DESTINATIONS = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/catalog/destinations_private.yml`))) -const slugOverrides = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/catalog/slugs.yml`))) - -const privateDests = PRIVATE_DESTINATIONS.items -let private = [] -const getCatalog = async (url, page_token = "MA==") => { - let res = null - try { - res = await axios.get(url, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${process.env.PAPI_TOKEN}` - }, - data: { - "pagination": { - "count": 200, - "cursor": page_token - } - } - }); - return res.data - } catch (err) { - console.error("Error response:"); - console.error(err.response.data); // *** - console.error(err.response.status); // *** - console.error(err.response.headers); // *** - } finally { - - } -} - -const slugify = (displayName) => { - let slug = displayName - .toLowerCase() - .replace(/\s+/g, '-') - .replace('-&-', '-') - .replace('/', '-') - .replace(/[\(\)]/g, '') - .replace('.', '-') - - for (key in slugOverrides) { - let original = slugOverrides[key].original - let override = slugOverrides[key].override - - if (slug == original) { - slug = override - } - } - - return slug -} - -const checkDestinationStatus = async (id) => { - const res = await getCatalog(`${PAPI_URL}/catalog/destinations/${id}`) - let destination = res.data.destinationMetadata - return destination -} - -const makeDestinationPublic = async (itemURL) => { - const catalogPath = path.resolve('src/', itemURL, 'index.md') - const f = fm(fs.readFileSync(catalogPath, 'utf8')); - const fmatter = f.attributes - fmatter.private = false - fmatter.hidden = false - let new_fm = "" - for (const property in fmatter) { - if (property == "versions") { - console.log(`Need to fix versions on this one`) - } - //console.log(`${property}: ${fmatter[property]}`); - new_fm += `${property}: ${fmatter[property]}\n` - } - const attr = `---\n${new_fm}\n---\n` - const body = f.body - const content = attr + body - fs.writeFileSync(catalogPath, content) -} -const getDestinationData = async (id) => { - const res = await getCatalog(`${PAPI_URL}/catalog/destinations/${id}`) - if (res == null) { - return - } - let destination = res.data.destinationMetadata - let settings = destination.options - settings.sort((a, b) => { - if (a.name.toLowerCase() < b.name.toLowerCase()) { - return -1; - } - if (a.name.toLowerCase() > b.name.toLowerCase()) { - return 1; - } - return 0; - }) - let actions = destination.actions - let presets = destination.presets - let slug = slugify(destination.name) - let url = `connections/destinations/catalog/${slug}` - - // Force screen method into supportedMethods object - destination.supportedMethods.screen = false - // Set it true for LiveLike, per request - if (destination.id == '63e42b47479274407b671071') { - destination.supportedMethods.screen = true - } - - const clone = (obj) => Object.assign({}, obj) - const renameKey = (object, key, newKey) => { - const clonedObj = clone(object); - const targetKey = clonedObj[key]; - delete clonedObj[key]; - - clonedObj[newKey] = targetKey; - return clonedObj; - }; - - destination.supportedMethods = renameKey(destination.supportedMethods, 'pageview', 'page') - - let updatePrivateDest = { - id: destination.id, - display_name: destination.name, - name: destination.name, - slug: slugify(destination.name), - previous_names: destination.previousNames, - url, - website: destination.website, - status: destination.status, - logo: { - url: destination.logos.default - }, - mark: { - url: destination.logos.mark - }, - methods: destination.supportedMethods, - platforms: destination.supportedPlatforms, - components: destination.components, - browserUnbundlingSupported: destination.supportedFeatures.browserUnbundling, - browserUnbundlingPublic: destination.supportedFeatures.browserUnbundlingPublic, - replay: destination.supportedFeatures.replay, - settings, - actions, - presets - } - - - if (destination.status === "PRIVATE_BETA" || destination.status === "PRIVATE_BUILDING") { - private.push(updatePrivateDest) - } else { - console.log(`${destination.name} is public and will be removed`) - makeDestinationPublic(url) - } - - const options = { - noArrayIndent: false - } - - output = "# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT\n" - var todayDate = new Date().toISOString().slice(0, 10); - output += "# destination data last updated " + todayDate + " \n"; - output += yaml.dump({ - items: private - }, options) - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/destinations_private.yml`), output); -} - - -const checkExistingStatus = async () => { - let existingIds = [] - let newIds = [] - for (let [key] of Object.entries(privateDests)) { - existingIds.push(privateDests[key].id) - } - - existingIds.sort() - - for (i in existingIds) { - let id = existingIds[i] - let destination = await checkDestinationStatus(id) - let status = destination.status - let slug = slugify(destination.name) - let url = `connections/destinations/catalog/${slug}` - - - - - if (status === "PRIVATE_BETA") { - // console.log(`${destination.name} is private`) - newIds.push(id) - } else { - console.log(`src/connections/${destination.name}is public`) - makeDestinationPublic(url) - } - } - return newIds -} -const addPrivateDestination = async () => { - let ids = await checkExistingStatus() - ids.sort(); - const DEST_ID = await prompt({ - type: 'input', - name: 'id', - message: 'Enter the destination ID' - }) - - if (DEST_ID.id == '0') { - for (const element in ids) { - let currentId = ids[element] - await getDestinationData(currentId) - } - console.log("Updating exsting Private Beta destinations.") - } else { - if (ids.includes(DEST_ID.id)) { - console.log("This destination is already captured.") - return - } else { - ids.push(DEST_ID.id) - fs.writeFileSync(path.resolve(__dirname, `../src/_data/catalog/destinations_private.yml`), ''); - - } - ids.sort(); - - - for (const element in ids) { - let currentId = ids[element] - await getDestinationData(currentId) - } - } - -} - - -addPrivateDestination() diff --git a/scripts/test.js b/scripts/test.js deleted file mode 100644 index 33056fa238..0000000000 --- a/scripts/test.js +++ /dev/null @@ -1,10 +0,0 @@ -const checkLinks = require('check-links') - -const check = async () => { - const url = process.argv[2] - const results = await checkLinks([url]) - console.log(results) - -} - -check() \ No newline at end of file diff --git a/scripts/update.js b/scripts/update.js deleted file mode 100644 index ffc997422e..0000000000 --- a/scripts/update.js +++ /dev/null @@ -1,164 +0,0 @@ -// These lines are the required packages we need. These let us do things like make network requests to the Public API -// and interact with the frontmatter -const axios = require('axios'); -const path = require('path'); -const fs = require('fs'); -const fm = require('front-matter'); -const yaml = require('js-yaml'); -const { - type -} = require('os'); - -require('dotenv').config(); - -// Here, global variables are set -const PAPI_URL = "https://api.segmentapis.com" -const slugOverrides = yaml.load(fs.readFileSync(path.resolve(__dirname, `../src/_data/catalog/slugs.yml`))) - -// This function connects with the Public API. It looks for the endpoint URL and a page token value. -// The function is called in the updateSources and update Destination functions. -// Functions let us reuse code easily. Instead of needing to write this out multiple times, I can define it once -// and pass in the necessary details when I call it. -const getCatalog = async (url, page_token = "MA==") => { - try { - const res = await axios.get(url, { - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${process.env.PAPI_TOKEN}` - }, - data: { - "pagination": { - "count": 200, - "cursor": page_token - } - } - }); - - return res.data - } catch (error) { - console.log(error) - } -} - -// This function, again called by the two update functions, is what generates the slug values for each integration. -// It takes the integration's Display Name and converts it to a slug. -const slugify = (displayName) => { - let slug = displayName - .toLowerCase() - .replace(/\s+/g, '-') - .replace('-&-', '-') - .replace('/', '-') - .replace(/[\(\)]/g, '') - .replace('.', '-') - - // This is how we handle manual slug overrides right now. - // If a slug appears in the slugOverrides file, we want to use the 'override' value instead. - for (key in slugOverrides) { - let original = slugOverrides[key].original - let override = slugOverrides[key].override - - if (slug == original) { - // console.log(original + " -> " + override) - slug = override - } - } - - return slug -} - -// This function does the actual work of adding the id value to the source and destination -// Notice that the write to file step is commented out. This is to verify that the updated frontmatter -// is correct before we write a whole bunch of files. -// Uncomment that line and remove the line above it to run it for real. -const addIdToExisting = (integration) => { - let itemURL = integration.url - try { - const catalogPath = path.resolve('src', itemURL, 'index.md') - if (fs.existsSync(catalogPath)) { - const f = fm(fs.readFileSync(catalogPath, 'utf8')); - - const fmatter = f.frontmatter - const re_id = new RegExp("(id: )\S*") - if (!re_id.test(fmatter)) { - const attr = `---\n${f.frontmatter}\nid: ${integration.id}\n---\n` - const body = f.body - const content = attr + body - console.log(attr) - fs.writeFileSync(catalogPath, content) - } - - } - } catch (e) { - console.log(error) - return false - } -} - - -// This is just a stripped down version of the updateSources() script from the catalog script. -// We're retrieving less information overall, because all we care about here is the id. -const updateSources = async () => { - - let sources = [] - let nextPageToken = "MA==" - - while (nextPageToken !== undefined) { - const res = await getCatalog(`${PAPI_URL}/catalog/sources/`, nextPageToken) - sources = sources.concat(res.data.sourcesCatalog) - nextPageToken = res.data.pagination.next - } - - const libraryCategories = [ - 'server', - 'mobile', - 'ott', - 'roku', - 'website' - ] - sources.forEach(source => { - let slug = slugify(source.name) - let mainCategory = source.categories[0] ? source.categories[0].toLowerCase() : '' - - if (libraryCategories.includes(mainCategory)) { - url = `connections/sources/catalog/libraries/${mainCategory}/${slug}` - } else { - url = `connections/sources/catalog/cloud-apps/${slug}` - mainCategory = 'cloud-app' - } - // So, we retrieve and store only the id and the URL, which is defined in the if statement on line 116. - let updatedSource = { - id: source.id, - url, - } - addIdToExisting(updatedSource) - }) -} - -// Similar to the sources script, only for destinations. -const updateDestinations = async () => { - let destinations = [] - let nextPageToken = "MA==" - - while (nextPageToken !== undefined) { - const res = await getCatalog(`${PAPI_URL}/catalog/destinations/`, nextPageToken) - destinations = destinations.concat(res.data.destinationsCatalog) - nextPageToken = res.data.pagination.next - } - - - destinations.forEach(destination => { - let slug = slugify(destination.name) - - let url = `connections/destinations/catalog/${slug}` - - let updatedDestination = { - id: destination.id, - url - } - addIdToExisting(updatedDestination) - - }) - -} -updateDestinations() -updateSources() diff --git a/scripts/upload-docs b/scripts/upload-docs deleted file mode 100755 index 12323080ff..0000000000 --- a/scripts/upload-docs +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -source "${SEGMENT_LIB_PATH}/aws.bash" - -BRANCH="${BUILDKITE_BRANCH}" -echo "--- Branch ${BRANCH}" - -# Use appropriate role to sync to S# -# Assign S3 Bucket and use the appropriate role to authenticate to S3 -S3_BUCKET_NAME="segment-docs-stage" -role_arn="arn:aws:iam::355207333203:role/buildkite-agent" - -if [ ${BRANCH} = 'master' ] -then - S3_BUCKET_NAME="segment-docs-prod" - role_arn="arn:aws:iam::752180062774:role/buildkite-agent" -fi - -s3-sync() { - echo "--- Uploading to s3://${S3_BUCKET_NAME}/docs" - ls -a - aws s3 sync _site s3://${S3_BUCKET_NAME}/docs/ --delete -} - -# Only Sync to S3 on Build step and for prod/staging environments -if [[ ${BRANCH} = 'master' || ${BRANCH} = 'staging' ]]; -then - run-with-role "${role_arn}" s3-sync -fi - -echo "--- Build Complete" -# vim: ft=sh diff --git a/src/_data/actions/braze-cloud.yml b/src/_data/actions/braze-cloud.yml index 45f2200a74..327a0cc707 100644 --- a/src/_data/actions/braze-cloud.yml +++ b/src/_data/actions/braze-cloud.yml @@ -173,7 +173,7 @@ actions: description: Set to true to use the Braze API in "Update Only" mode. default: false - action: Track Purchase - blurb: Track Purchase sends Braze a Track Purchase call when the destination recieves any event that matches the specified name. + blurb: Track Purchase sends Braze a Track Purchase call when the destination receives any event that matches the specified name. fields: - name: Time description: The timestamp of when the event occured. diff --git a/src/_data/actions/braze-web.yml b/src/_data/actions/braze-web.yml index 1e25a0b6d7..c23b763020 100644 --- a/src/_data/actions/braze-web.yml +++ b/src/_data/actions/braze-web.yml @@ -221,7 +221,7 @@ actions: description: Set to true to use the Braze API in "Update Only" mode. default: false - action: Track Purchase - blurb: Track Purchase sends Braze a Track Purchase call when the destination recieves any event named `Order Completed`. + blurb: Track Purchase sends Braze a Track Purchase call when the destination receives any event named `Order Completed`. fields: - name: Time description: The timestamp of when the event occured. diff --git a/src/_data/catalog/beta_sources.yml b/src/_data/catalog/beta_sources.yml new file mode 100644 index 0000000000..3da5cc4704 --- /dev/null +++ b/src/_data/catalog/beta_sources.yml @@ -0,0 +1,26 @@ +# This file is manually generated. +# Add the ids of beta sources to give them a beta flag on the catalog page. +# (/docs/connections/sources/catalog) + +- 8aF29Uq46F +- QhEUZnE5uF +- Zd5BXedXsa +- glwy6LwOVo +- 3x07B5Dn5h +- DY0B0Q2Gce +- n8YgCndi75 +- 9TYqEh3nMe +- xqegKCQA0W +- L9XPA9n2Mc +- kpDbTUR9oD +- wFC7PGNwGR +- vMEJCURfHh +- EjYD7n6dOa +- VETiUX9u66 +- NC2jsEkA8Y +- o9OyD6xsVJ +- ODf0vA6dcH +- YWOGVbyMVz +- CwGEZ7eCcA +- xeZMgSrtAQ +- VShGHAfvlr \ No newline at end of file diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml index 37d0db644e..cd1ef9f7a0 100644 --- a/src/_data/catalog/destination_categories.yml +++ b/src/_data/catalog/destination_categories.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination categories last updated 2023-04-13 +# destination categories last updated 2024-07-09 items: - display_name: A/B Testing slug: a-b-testing diff --git a/src/_data/catalog/destinations.yml b/src/_data/catalog/destinations.yml index f956f7d692..6f37850445 100644 --- a/src/_data/catalog/destinations.yml +++ b/src/_data/catalog/destinations.yml @@ -1,5 +1,5 @@ # AUTOGENERATED FROM PUBLIC API. DO NOT EDIT -# destination data last updated 2023-04-13 +# destination data last updated 2024-07-09 items: - id: 637e8d185e2dec264895ea89 display_name: 1Flow @@ -14,13 +14,11 @@ items: url: connections/destinations/catalog/1flow previous_names: - 1Flow - website: https://1flow.app?ref=segment + website: https://1flow.ai/?ref=segment status: PUBLIC categories: - - Analytics - - Customer Success - - Marketing Automation - Surveys + - Analytics logo: url: https://cdn-devcenter.segment.com/85468e64-4f93-45a0-a30e-20886b933529.svg mark: @@ -37,6 +35,7 @@ items: mobile: true server: true warehouse: false + cloudAppObject: false components: [] browserUnbundlingSupported: false browserUnbundlingPublic: false @@ -61,6 +60,251 @@ items: label: API Key actions: [] presets: [] + partnerOwned: true +- id: 64dd07c1fed86b6866cd93f5 + display_name: 1Flow Mobile Plugin + name: 1Flow Mobile Plugin + slug: 1flow-mobile-plugin + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/1flow-mobile-plugin + previous_names: + - 1Flow Mobile Plugin + website: https://1flow.ai/?ref=segment + status: PUBLIC_BETA + categories: + - Surveys + - Analytics + - CRM + - Customer Success + - Marketing Automation + - Performance Monitoring + - Personalization + - Video + logo: + url: https://cdn-devcenter.segment.com/85468e64-4f93-45a0-a30e-20886b933529.svg + mark: + url: https://cdn-devcenter.segment.com/a026bddd-e174-4f41-9e56-4eac99d5e825.svg + methods: + track: true + identify: true + group: false + alias: true + screen: false + page: true + platforms: + browser: false + mobile: true + server: false + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: false + mobile: true + server: false + settings: + - name: apiKey + type: string + defaultValue: '' + description: '' + required: false + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 656773f0bd79a3676ab2733d + display_name: 1Flow Web (Actions) + name: 1Flow Web (Actions) + slug: 1flow-web-actions + hidden: true + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/1flow-web-actions + previous_names: + - 1Flow Web (Actions) + website: https://1flow.ai + status: PUBLIC_BETA + categories: + - Surveys + - Analytics + logo: + url: https://cdn-devcenter.segment.com/70dfe980-3a8e-42be-b55b-bff13205071a.svg + mark: + url: https://cdn-devcenter.segment.com/9cccaa9e-b7eb-4f2e-9c82-cfb8e6ed1ccd.svg + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: false + settings: + - name: projectApiKey + type: string + defaultValue: '' + description: >- + This is the unique app_id for your 1Flow application, serving as the + identifier for data storage and retrieval. This field is mandatory. + required: true + label: Project API Key + actions: + - id: 2BeFszmdVBhVuGJ8BvshEB + name: Identify User + slug: identifyUser + description: Create or update a user in 1Flow. + platform: WEB + hidden: false + defaultTrigger: type = "identify" + fields: + - id: 3YLuK2GeB7CEvoBqVaRpnz + sortOrder: 0 + fieldKey: userId + label: User ID + type: STRING + description: A unique identifier for the user. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sdHHGFqgZ9d2e2Kdh2u3J5 + sortOrder: 1 + fieldKey: traits + label: Custom Attributes + type: OBJECT + description: The user's custom attributes. + placeholder: '' + defaultValue: + '@path': $.traits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: biEZJXMqE6pajyebWnWoaE + name: Track Event + slug: trackEvent + description: Submit an event to 1Flow. + platform: WEB + hidden: false + defaultTrigger: type = "track" + fields: + - id: jGu7HFUFF1ngp6d98EqC13 + sortOrder: 0 + fieldKey: event_name + label: Event Name + type: STRING + description: The name of the event. + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iBHAVpvmP1C7t1ttUCrBd9 + sortOrder: 1 + fieldKey: userId + label: User ID + type: STRING + description: A unique identifier for the user. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: H2xB9RrzGFy7BTxkW6nie + sortOrder: 2 + fieldKey: anonymousId + label: Anonymous ID + type: STRING + description: An anonymous identifier for the user. + placeholder: '' + defaultValue: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wrDrf7FmqCysx1D8GLjfeH + sortOrder: 3 + fieldKey: properties + label: Event Properties + type: OBJECT + description: Information associated with the event + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: biEZJXMqE6pajyebWnWoaE + name: Track Event + fields: + event_name: + '@path': $.event + userId: + '@path': $.userId + anonymousId: + '@path': $.anonymousId + properties: + '@path': $.properties + trigger: type = "track" + - actionId: 2BeFszmdVBhVuGJ8BvshEB + name: Identify User + fields: + userId: + '@path': $.userId + traits: + '@path': $.traits + trigger: type = "identify" + partnerOwned: true - id: 60b5d0a01f3726b85dc05aab display_name: 2mee name: 2mee @@ -97,6 +341,7 @@ items: mobile: true server: true warehouse: false + cloudAppObject: false components: [] browserUnbundlingSupported: false browserUnbundlingPublic: false @@ -125,6 +370,7 @@ items: label: Application Id actions: [] presets: [] + partnerOwned: true - id: 6188d844be5cf0e3b59189d2 display_name: Aampe name: Aampe @@ -161,6 +407,7 @@ items: mobile: true server: true warehouse: false + cloudAppObject: false components: [] browserUnbundlingSupported: false browserUnbundlingPublic: false @@ -190,7 +437,7 @@ items: If your users all belong to the same timezone, enter a fixed value here. If we are unable to find a value in "context.timezone", this value will be used. Defaults to UTC - required: true + required: false label: Default Timezone - name: timezoneField type: string @@ -198,10 +445,11 @@ items: description: >- Path to the field that contains the timezone string for the user to which the event belongs. By default we will use "context.timezone". - required: true + required: false label: Timezone field actions: [] presets: [] + partnerOwned: true - id: 605dd9d7e5ff0b3873e250a4 display_name: AB Smartly name: AB Smartly @@ -224,7 +472,7 @@ items: logo: url: https://cdn-devcenter.segment.com/904f1a94-9720-4b58-9b93-5b03f1ae4e9b.svg mark: - url: https://cdn-devcenter.segment.com/3ddac4d4-066c-43c0-b48a-7e48e68140ea.svg + url: https://cdn-devcenter.segment.com/7a5cf5b3-96ac-4dd6-a75f-17e5f33b513b.svg methods: track: true identify: false @@ -237,6 +485,7 @@ items: mobile: true server: true warehouse: false + cloudAppObject: false components: [] browserUnbundlingSupported: false browserUnbundlingPublic: false @@ -276,13 +525,13 @@ items: spaces or special characters are replaced with underscores. For example, a view of the "Home" screen will trigger the home_screenview goal. If the goal does not exist in the A/B Smartly web console, it is ignored. - required: true + required: false label: Enable App Screen View Tracking - name: enableExposureTracking type: boolean defaultValue: false description: Send Group event payloads directly to the A/B Smartly collector. - required: true + required: false label: Enable Exposure Tracking - name: enablePageViewTracking type: boolean @@ -293,7 +542,7 @@ items: special characters are replaced with underscores. For example, a view of the "Home" page will trigger the home_pageview goal. If the goal does not exist in the A/B Smartly web console, it is ignored. - required: true + required: false label: Enable Page View Tracking - name: environment type: string @@ -309,7 +558,7 @@ items: description: >- Optional mapping of Segment event to A/B Smartly goal. Find and create goals in the settings page of the A/B Smartly web console. - required: true + required: false label: Goal Mapping - name: unitMapping type: text-map @@ -321,6 +570,7 @@ items: label: Unit Mapping actions: [] presets: [] + partnerOwned: true - id: 6214f1347a49cda426260372 display_name: AB Tasty client side name: AB Tasty client side @@ -354,6 +604,7 @@ items: mobile: true server: true warehouse: false + cloudAppObject: false components: [] browserUnbundlingSupported: false browserUnbundlingPublic: false @@ -376,28 +627,29 @@ items: label: API Key actions: [] presets: [] -- id: 6388fddea33fcc69c0f8d9ce - display_name: Actable Predictive - name: Actable Predictive - slug: actable-predictive + partnerOwned: true +- id: 64f703d1f6e9aa0a283ae3e2 + display_name: ABsmartly (Actions) + name: ABsmartly (Actions) + slug: actions-absmartly hidden: false endpoints: - US regions: - us-west-2 - eu-west-1 - url: connections/destinations/catalog/actable-predictive + url: connections/destinations/catalog/actions-absmartly previous_names: - - Actable Predictive - website: https://actable.com/predictive-suite - status: PUBLIC_BETA + - ABsmartly (Actions) + website: https://absmartly.com/ + status: PUBLIC categories: - - Analytics - - Enrichment + - A/B Testing + - Feature Flagging logo: - url: https://cdn.filepicker.io/api/file/wrWiKeiMT6mX2aLnShYf + url: https://cdn-devcenter.segment.com/cd3998d8-8136-4da6-863b-fd5f6fa46026.svg mark: - url: https://cdn.filepicker.io/api/file/r1J9vFibTsQbt63i1OMh + url: https://cdn-devcenter.segment.com/6a3f6443-5fbe-4084-9713-e5e044df2883.svg methods: track: true identify: true @@ -410,6 +662,7 @@ items: mobile: false server: true warehouse: false + cloudAppObject: false components: [] browserUnbundlingSupported: false browserUnbundlingPublic: false @@ -424,65 +677,141 @@ items: mobile: false server: true settings: - - name: client_id + - name: apiKey type: string defaultValue: '' - description: Your Actable-supplied Client ID. + description: >- + ABsmartly SDK API Key. Create SDK Api Keys in the Settings > API Keys + section of the ABsmartly Web Console required: true - label: Client ID - - name: client_secret + label: API Key + - name: collectorEndpoint type: string defaultValue: '' - description: Your Actable-supplied Client Secret. + description: >- + ABsmartly Collector endpoint, for example: + https://you-subdomain.absmartly.io/v1 - Contact ABsmartly Support if you + don't know your Collector Endpoint. required: true - label: Client Secret - actions: - - id: 4PDPN6YwLQzgUJSnvnXXj2 - name: Send Custom Event - slug: sendCustomEvent + label: Collector Endpoint + - name: environment + type: string + defaultValue: '' description: >- - Send a custom event to Actable for prediction. Use this to supply events - that are not in Actable 's customer view. + Environment name. Environment name needs to match what's in the Web + Console. Create Environments in the Settings > Environments section of the + ABsmartly Web Console + required: true + label: Environment + actions: + - id: 6hpAyUwiR9WGzXFguy2yqe + name: Track Exposure + slug: trackExposure + description: Send an experiment exposure event to ABsmartly platform: CLOUD hidden: false - defaultTrigger: null + defaultTrigger: type = "track" and event = "Experiment Viewed" fields: - - id: esjLvxEeQKwrFCMRgiYbx1 + - id: 5F923G22vwLvRXsL5hTi54 sortOrder: 0 - fieldKey: customer_id - label: Customer ID + fieldKey: exposure + label: ABsmartly Exposure Payload + type: OBJECT + description: >- + The ABsmartly exposure payload without any goals. Generated by the + ABsmartly SDK and should not be modified. + placeholder: '' + defaultValue: + '@path': $.properties.exposure + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fpzzR4GKFy5F7AiddeiWAw + sortOrder: 1 + fieldKey: agent + label: Agent type: STRING - description: The unique user identifier. + description: >- + Optional agent identifier that originated the event. Used to identify + which SDK generated the event. placeholder: '' defaultValue: - '@path': $.userId + '@if': + exists: + '@path': $.context.library.name + then: + '@path': $.context.library.name + else: segment + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qApjUwd7mvP7PCqLPMXA51 + sortOrder: 2 + fieldKey: application + label: Application + type: STRING + description: >- + Optional application name that originated this event. Must exist if not + empty. Create Applications in the Settings > Applications section of the + ABsmartly Web Console + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eUi1o2cBZMnmddLHMn5avu + name: Track Goal + slug: trackGoal + description: Send a goal event to ABsmartly + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event != "Experiment Viewed" + fields: + - id: omJ25faAVqbUy3y7GEcxzE + sortOrder: 0 + fieldKey: units + label: Units + type: OBJECT + description: >- + The units of the goal to track. Mapping of unit name to source property + in the event payload. Create Units in the Settings > Units section of + the ABsmartly Web Console + placeholder: '' + defaultValue: + anonymousId: + '@path': $.anonymousId + userId: + '@path': $.userId required: true multiple: false choices: null dynamic: false allowNull: false - - id: uAcsercayzGCguw6TkZ9jj + - id: kVMWoeoFNbVzGmBC5wYQ24 sortOrder: 1 - fieldKey: timestamp - label: Timestamp of Event - type: DATETIME - description: Timestamp of when the custom event occured. + fieldKey: name + label: Goal Name + type: STRING + description: The name of the goal to track placeholder: '' defaultValue: - '@path': $.timestamp + '@path': $.event required: true multiple: false choices: null dynamic: false allowNull: false - - id: 7qyqGA9qt3wKkptb2fhdGW + - id: q7CQEunmTPn34w5BmHirZ5 sortOrder: 2 fieldKey: properties - label: Custom Properties + label: Goal Properties type: OBJECT - description: >- - Send an object of custom properties to Actable Predictive for custom - data modeling. + description: Custom properties of the goal placeholder: '' defaultValue: '@path': $.properties @@ -491,119 +820,605 @@ items: choices: null dynamic: false allowNull: false - - id: 9GktiL1gyjTqum5UwA4hNB + - id: g74qWfaMSYDhDLqj9P3G4i sortOrder: 3 - fieldKey: stream_key - label: Stream Key + fieldKey: agent + label: Agent type: STRING - description: Dataset label, should be left as default unless specified otherwise. + description: >- + Optional agent identifier that originated the event. Used to identify + which SDK generated the event. placeholder: '' - defaultValue: custom - required: true + defaultValue: + '@if': + exists: + '@path': $.context.library.name + then: + '@path': $.context.library.name + else: segment + required: false multiple: false choices: null dynamic: false allowNull: false - - id: rMsUowNSR79mA7wjUw4TWY + - id: 24XJca3XL72iKHzMAb92wg sortOrder: 4 - fieldKey: enable_batching - label: Enable Batching? - type: BOOLEAN - description: When enabled, Segment will send events in batches. - defaultValue: false + fieldKey: application + label: Application + type: STRING + description: >- + Optional application name that originated this event. Must exist if not + empty. Create Applications in the Settings > Applications section of the + ABsmartly Web Console + placeholder: '' required: false multiple: false choices: null dynamic: false allowNull: false - - id: 9oJaAw2QaNt64Hr9x9F4jH - name: Send Transaction Event - slug: sendTransactionEvent + presets: + - actionId: eUi1o2cBZMnmddLHMn5avu + name: Page Calls + fields: + units: + anonymousId: + '@path': $.anonymousId + userId: + '@path': $.userId + name: + '@template': 'Page: {{ name }}' + properties: + '@path': $.properties + agent: + '@if': + exists: + '@path': $.context.library.name + then: + '@path': $.context.library.name + else: segment + trigger: type = "page" + - actionId: 6hpAyUwiR9WGzXFguy2yqe + name: Exposures (Verbatim) + fields: + exposure: + '@path': $.properties.exposure + agent: + '@if': + exists: + '@path': $.context.library.name + then: + '@path': $.context.library.name + else: segment + trigger: type = "track" and event = "Experiment Viewed" + - actionId: eUi1o2cBZMnmddLHMn5avu + name: Screen Calls + fields: + units: + anonymousId: + '@path': $.anonymousId + userId: + '@path': $.userId + name: + '@template': 'Screen: {{ name }}' + properties: + '@path': $.properties + agent: + '@if': + exists: + '@path': $.context.library.name + then: + '@path': $.context.library.name + else: segment + trigger: type = "screen" + - actionId: eUi1o2cBZMnmddLHMn5avu + name: Track Calls + fields: + units: + anonymousId: + '@path': $.anonymousId + userId: + '@path': $.userId + name: + '@path': $.event + properties: + '@path': $.properties + agent: + '@if': + exists: + '@path': $.context.library.name + then: + '@path': $.context.library.name + else: segment + trigger: type = "track" and event != "Experiment Viewed" + partnerOwned: true +- id: 64edec5a4f881f992e432b81 + display_name: Acoustic (Actions) + name: Acoustic (Actions) + slug: acoustic-actions + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/acoustic-actions + previous_names: + - Acoustic (Actions) + website: https://www.acoustic.com + status: PUBLIC_BETA + categories: + - Marketing Automation + - Email Marketing + logo: + url: https://cdn.filepicker.io/api/file/Z5ScQfCTMCJaPjvdYxQd + mark: + url: https://cdn.filepicker.io/api/file/irlGbmCNSaqfxM7oom6e + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: fileNamePrefix + type: string + defaultValue: customer_org_ description: >- - Send a purchase event to Actable for prediction. Purchase events should be - in v2 Commerce Spec. + Use your Acoustic Org name but replace any spaces with an underscore, eg., + AcmeCustomer_Prod + required: true + label: Customer Prefix + - name: s3_access_key + type: string + defaultValue: '' + description: S3 Access Key for the S3 bucket. + required: true + label: S3 Access Key + - name: s3_bucket_accesspoint_alias + type: string + defaultValue: '' + description: The Alias of the Access Point created for your access to the S3 Bucket. + required: true + label: S3 Bucket Access Point Alias + - name: s3_region + type: string + defaultValue: us-east-1 + description: 'Should always be us-east-1 unless directed by Acoustic otherwise. ' + required: true + label: S3 Region + - name: s3_secret + type: password + defaultValue: '' + description: S3 Secret credential for the S3 bucket. + required: true + label: S3 Secret + - name: version + type: string + defaultValue: Version 2.3 + description: |+ + + + Last-Modified: 02.01.2024 10.30.43 + + required: false + label: 'Version:' + actions: + - id: 9RosE3TJubbeuBLHewZUzU + name: Send Events + slug: receiveEvents + description: >- + Send Segment identify() and track() events to Acoustic Connect. At least + one of the following optional fields should be populated: Key-Value pairs, + Arrays, Context, Properties, Traits. platform: CLOUD hidden: false defaultTrigger: null fields: - - id: evH2gz5ZcTrfd9YjDq5sYm + - id: 6gSQxqtvgNEYMwAQcdkvFw sortOrder: 0 - fieldKey: customer_id - label: Customer ID - type: STRING - description: The unique user identifier. + fieldKey: key_value_pairs + label: Key-Value pairs + type: OBJECT + description: 'Map simple Key-Value pairs (optional) ' placeholder: '' - defaultValue: - '@path': $.userId - required: true + required: false multiple: false choices: null dynamic: false allowNull: false - - id: jRDTBpoWCqSVR37qUFKi7E + - id: b8xUXRhi7koyvQVGkSEehr sortOrder: 1 - fieldKey: discount_code - label: Discount Code - type: STRING + fieldKey: array_data + label: Arrays + type: OBJECT description: >- - Discount code, if any, used on purchase. Will be used in addition to - per-product coupons in Segment v2commerce events spec. + If the data needed is in an array, use this section to Map Array data + into useable attributes (optional) placeholder: '' required: false - multiple: false + multiple: true choices: null dynamic: false allowNull: false - - id: iQduNs9ZZoH8jAFTkSs6zp + - id: qJ8B1hGPXkKAXwdMemxwqf sortOrder: 2 - fieldKey: transaction_id - label: Transaction ID - type: STRING - description: Optional Identifier for transaction. + fieldKey: context + label: Context + type: OBJECT + description: >- + If the data is present in a Context section, use this to map the + attributes of a Context Section (optional) placeholder: '' - defaultValue: - '@path': $.properties.order_id required: false multiple: false choices: null dynamic: false allowNull: false - - id: atfUEQNdFG3YEdxRhCy6tU + - id: bsf4RGBoGpnWdHf3bxDa67 sortOrder: 3 - fieldKey: spend - label: Amount - type: NUMBER - description: Total order amount. + fieldKey: properties + label: Properties + type: OBJECT + description: >- + If the data is present in a Properties section, use this to map the + attributes of a Properties Section (optional) placeholder: '' - defaultValue: - '@path': $.properties.total required: false multiple: false choices: null dynamic: false allowNull: false - - id: pYMFC3MXTcuTwS9r5TMSJ6 + - id: b3utahc7tksi99ekuouGHK sortOrder: 4 - fieldKey: products - label: Products Purchased + fieldKey: traits + label: Traits type: OBJECT description: >- - product(s) purchased in transaction. This value should be an array of - objects which at the minimum contains a Product ID or SKU per-product. + If the data is present in a Traits section, use this to map the + attributes of a Traits Section (optional) placeholder: '' - defaultValue: - '@path': $.properties.products - required: true - multiple: true + required: false + multiple: false choices: null dynamic: false allowNull: false - - id: nGd7S1KyHDXH35EgwRNGCi + - id: 7PyXbremMWCLudWd1vDySG sortOrder: 5 - fieldKey: purchase_datetime - label: Timestamp - type: DATETIME - description: timestamp of when transaction event occurred. + fieldKey: uniqueRecipientId + label: UniqueRecipientId + type: STRING + description: >- + The field to be used to uniquely identify the Recipient in Acoustic. + This field is required with Email preferred but not required. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.properties.email + then: + '@path': $.properties.email + else: + '@path': $.traits.email + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pz1djsK7HwvMq1AhT4jG9 + sortOrder: 6 + fieldKey: type + label: Type + type: STRING + description: >- + Do Not Modify - The type of event. e.g. track or identify, this field is + required + placeholder: '' + defaultValue: + '@path': $.type + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tvmBHuYExwZBuk8BorxHbV + sortOrder: 7 + fieldKey: timestamp + label: Timestamp + type: DATETIME + description: >- + Do Not Modify - The timestamp for when the event took place. This field + is required + placeholder: '' + defaultValue: + '@path': $.timestamp + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: 9RosE3TJubbeuBLHewZUzU + name: Track Calls + fields: + uniqueRecipientId: + '@if': + exists: + '@path': $.properties.email + then: + '@path': $.properties.email + else: + '@path': $.context.traits.email + type: + '@path': $.type + timestamp: + '@path': $.timestamp + trigger: type = "track" + - actionId: 9RosE3TJubbeuBLHewZUzU + name: Identify Calls + fields: + uniqueRecipientId: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.context.traits.email + type: + '@path': $.type + timestamp: + '@path': $.timestamp + trigger: type = "identify" + partnerOwned: true +- id: 6388fddea33fcc69c0f8d9ce + display_name: Actable Predictive + name: Actable Predictive + slug: actable-predictive + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actable-predictive + previous_names: + - Actable Predictive + website: https://getpredictable.io + status: PUBLIC_BETA + categories: + - Analytics + - Enrichment + logo: + url: https://cdn.filepicker.io/api/file/1tjv4hxVRMOefqfmAuuZ + mark: + url: https://cdn.filepicker.io/api/file/r1J9vFibTsQbt63i1OMh + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: client_id + type: string + defaultValue: '' + description: Your Actable-supplied Client ID. + required: true + label: Client ID + - name: client_secret + type: string + defaultValue: '' + description: Your Actable-supplied Client Secret. + required: true + label: Client Secret + actions: + - id: 4PDPN6YwLQzgUJSnvnXXj2 + name: Send Custom Event + slug: sendCustomEvent + description: >- + Send a custom event to Actable for prediction. Use this to supply events + that are not in Actable 's customer view. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: esjLvxEeQKwrFCMRgiYbx1 + sortOrder: 0 + fieldKey: customer_id + label: Customer ID + type: STRING + description: The unique user identifier. + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uAcsercayzGCguw6TkZ9jj + sortOrder: 1 + fieldKey: timestamp + label: Timestamp of Event + type: DATETIME + description: Timestamp of when the custom event occured. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7qyqGA9qt3wKkptb2fhdGW + sortOrder: 2 + fieldKey: properties + label: Custom Properties + type: OBJECT + description: >- + Send an object of custom properties to Actable Predictive for custom + data modeling. + placeholder: '' + defaultValue: + '@path': $.properties + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9GktiL1gyjTqum5UwA4hNB + sortOrder: 3 + fieldKey: stream_key + label: Stream Key + type: STRING + description: Dataset label, should be left as default unless specified otherwise. + placeholder: '' + defaultValue: custom + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rMsUowNSR79mA7wjUw4TWY + sortOrder: 4 + fieldKey: enable_batching + label: Enable Batching? + type: BOOLEAN + description: When enabled, Segment will send events in batches. + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9oJaAw2QaNt64Hr9x9F4jH + name: Send Transaction Event + slug: sendTransactionEvent + description: >- + Send a purchase event to Actable for prediction. Purchase events should be + in v2 Commerce Spec. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: evH2gz5ZcTrfd9YjDq5sYm + sortOrder: 0 + fieldKey: customer_id + label: Customer ID + type: STRING + description: The unique user identifier. + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jRDTBpoWCqSVR37qUFKi7E + sortOrder: 1 + fieldKey: discount_code + label: Discount Code + type: STRING + description: >- + Discount code, if any, used on purchase. Will be used in addition to + per-product coupons in Segment v2commerce events spec. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iQduNs9ZZoH8jAFTkSs6zp + sortOrder: 2 + fieldKey: transaction_id + label: Transaction ID + type: STRING + description: Optional Identifier for transaction. + placeholder: '' + defaultValue: + '@path': $.properties.order_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: atfUEQNdFG3YEdxRhCy6tU + sortOrder: 3 + fieldKey: spend + label: Amount + type: NUMBER + description: Total order amount. + placeholder: '' + defaultValue: + '@path': $.properties.total + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pYMFC3MXTcuTwS9r5TMSJ6 + sortOrder: 4 + fieldKey: products + label: Products Purchased + type: OBJECT + description: >- + product(s) purchased in transaction. This value should be an array of + objects which at the minimum contains a Product ID or SKU per-product. + placeholder: '' + defaultValue: + '@path': $.properties.products + required: true + multiple: true + choices: null + dynamic: false + allowNull: false + - id: nGd7S1KyHDXH35EgwRNGCi + sortOrder: 5 + fieldKey: purchase_datetime + label: Timestamp + type: DATETIME + description: timestamp of when transaction event occurred. placeholder: '' defaultValue: '@path': $.timestamp @@ -870,42 +1685,45 @@ items: dynamic: false allowNull: false presets: [] -- id: 55d66bb5ebe537b09c977fa3 - display_name: ActiveCampaign - name: ActiveCampaign - slug: activecampaign + partnerOwned: true +- id: 5f7dd8191ad74f868ab1fc48 + display_name: Actions Pipedrive + name: Actions Pipedrive + slug: actions-pipedrive hidden: false endpoints: - US regions: - us-west-2 - eu-west-1 - url: connections/destinations/catalog/activecampaign + url: connections/destinations/catalog/actions-pipedrive previous_names: - - ActiveCampaign - website: http://www.activecampaign.com/ - status: PUBLIC + - Actions Pipedrive + website: https://www.pipedrive.com/ + status: PUBLIC_BETA categories: - - Email Marketing + - CRM + - Marketing Automation logo: - url: https://cdn.filepicker.io/api/file/crxyMacQHwBl5JeGhwX7 + url: https://cdn.filepicker.io/api/file/OQigqoPHT56xZCcwgcyT mark: - url: https://cdn.filepicker.io/api/file/AihHusTMaZdUXL7OlFDw + url: https://cdn.filepicker.io/api/file/8iu5T30JTWrKKBhZRFw6 methods: track: true identify: true - group: false - alias: false + group: true + alias: true screen: false page: true platforms: browser: true - mobile: true + mobile: false server: true - warehouse: false + warehouse: true + cloudAppObject: false components: [] browserUnbundlingSupported: false - browserUnbundlingPublic: true + browserUnbundlingPublic: false replay: false connection_modes: device: @@ -914,1026 +1732,16348 @@ items: server: false cloud: web: true - mobile: true + mobile: false server: true settings: - - name: apiKey + - name: apiToken type: string defaultValue: '' description: >- - Your API key can be found by navigating to your Active Campaign account - and clicking on My Settings > API. It should look something like - `5292218aadbe410acf66c44164c4be2de4bbf184c509ef699d85a0e8da1d9fabeda175df` + Pipedrive API token. This is found in Pipedrive in Settings > Personal + preferences > API > Your personal API token. required: true - label: API Key - - name: apiSecret + label: API Token + - name: dealField type: string - defaultValue: '' + defaultValue: id description: >- - Your API url can be found by navigating to your Active Campaign account - and clicking on My Settings > API. It should look something like - `https://.api-us1.com` - required: true - label: API url - actions: [] - presets: [] -- id: 5c75564f1d2f34000116ef78 - display_name: Adikteev - name: Adikteev - slug: adikteev - hidden: false - endpoints: - - US - regions: - - us-west-2 - - eu-west-1 - url: connections/destinations/catalog/adikteev - previous_names: - - Adikteev - website: https://www.adikteev.com/ - status: PUBLIC - categories: - - Advertising - logo: - url: https://cdn-devcenter.segment.com/731ca708-febb-4bc4-8ce2-e6f9229d0cd5.svg - mark: - url: https://cdn-devcenter.segment.com/d159a61b-530e-43bd-90c1-f090dad90c78.svg - methods: - track: true - identify: true - group: true - alias: true - screen: false - page: true - platforms: - browser: false - mobile: true - server: false - warehouse: false - components: [] - browserUnbundlingSupported: false - browserUnbundlingPublic: true - replay: false - connection_modes: - device: - web: false - mobile: false - server: false - cloud: - web: false - mobile: true - server: false - settings: - - name: apiKey - type: string - defaultValue: '' - description: Ask your account manager for the API key. - required: true - label: API Key - actions: [] - presets: [] -- id: 56f6ce7280412f644ff12fb2 - display_name: Adjust - name: Adjust - slug: adjust - hidden: false - endpoints: - - US - regions: - - us-west-2 - - eu-west-1 - url: connections/destinations/catalog/adjust - previous_names: - - Adjust - website: https://adjust.com/ - status: PUBLIC - categories: - - Attribution - - Deep Linking - logo: - url: https://cdn.filepicker.io/api/file/IefXQy6fRR27ZG1NvZgW - mark: - url: https://cdn.filepicker.io/api/file/lqTYxhVyT5WFDFdLS598 - methods: - track: true - identify: false - group: false - alias: false - screen: false - page: false - platforms: - browser: false - mobile: true - server: true - warehouse: false - components: - - code: https://github.com/segment-integrations/analytics-ios-integration-adjust - type: IOS - - code: >- - https://github.com/segment-integrations/analytics-android-integration-adjust - type: ANDROID - - code: https://github.com/segmentio/integrations/tree/master/integrations/adjust - type: SERVER - browserUnbundlingSupported: false - browserUnbundlingPublic: true - replay: false - connection_modes: - device: - web: false - mobile: true - server: false - cloud: - web: false - mobile: true - server: true - settings: - - name: appToken + This is a key by which a Deal in Pipedrive will be searched. It can be + either Deal id or has of a custom field containing external id. Default + value is `deal_id`. + required: false + label: External ID field for a Deal in Pipedrive + - name: domain type: string defaultValue: '' description: >- - Your Adjust app token can be retrieved from your [Adjust - account](https://next.adjust.com/#/) in the app's Settings. - required: true - label: App Token - - name: customEvents - type: text-map - defaultValue: {} - description: >- - Enter your event on the left, and the Adjust custom event token to map - into on the right. Adjust allows you to create custom events under - `Settings > Events`, which have custom tokens. Adjust's API only accepts - those tokens, not arbitrary event names. Any unmapped events will not be - sent to Adjust, since they require a mapped token. + Pipedrive domain. This is found in Pipedrive in Settings > Company + settings > Company domain. required: true - label: Map Your Events to Custom Adjust Event Tokens - - name: delayTime - type: number - defaultValue: 0 + label: Domain + - name: organizationField + type: string + defaultValue: id description: >- - *You must enable setDelay first!* - - - Set the initial delay time in seconds with the setting `setDelay` - enabled. The maximum delay start time of the adjust SDK is 10 seconds. + This is a key by which an Organization in Pipedrive will be searched. It + can be either Organization id or has of a custom field containing external + id. Default value is `org_id`. required: false - label: delayTime - - name: sendEventCreationTime - type: boolean - defaultValue: false - description: >2- - *Warning: enabling this setting will cause more events to be rejected by Adjust.* - - When enabled, this will send the time the event was created to Adjust - using unix timestamp formatting. Increased rejections are caused by - [Adjust's requirement][1] that events are received in chronological order - (Segment does not guarantee chronological order). - - When disabled, the created_at time will be the time an event is received - by Adjust. - - [1]: - http://help.adjust.com/tracking/app-events/basic-event-setup/track-s2s-events#recommended-additional-parameters - required: true - label: Send Event Creation Time - - name: setDelay - type: boolean - defaultValue: false + label: External ID field for an Organization in Pipedrive + - name: personField + type: string + defaultValue: id description: >- - Configure a delay to ensure all session parameters have been loaded - properly. The max [delay - start](https://github.com/adjust/ios_sdk#delay-start) time is 10 seconds. + This is a key by which a Person in Pipedrive will be searched. It can be + either Person id or has of a custom field containing external id. Default + value is `person_id`. required: false - label: setDelay - - name: setEnvironmentProduction - type: boolean - defaultValue: false - description: >- - This will send all your data to your production environment on Adjust. If - unchecked, data will flow to your sandbox environment on Adjust. - required: true - label: Send to Production Environment on Adjust - - name: setEventBufferingEnabled - type: boolean - defaultValue: false + label: External ID field for a Person in Pipedrive + actions: + - id: 66wGU3cfJrrdBk8CqekrJc + name: Create or Update Person + slug: createUpdatePerson + description: Update a person in Pipedrive or create them if they don't exist yet. + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" + fields: + - id: k7eVGAPAvMYrnG5c5g8F31 + sortOrder: 0 + fieldKey: match_field + label: Match field + type: STRING + description: >- + If present, used instead of field in settings to find existing person in + Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: eoTBRAjrihDc2eBhA6sVpY + sortOrder: 1 + fieldKey: match_value + label: Match value + type: STRING + description: Value to find existing person by + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: k2NM5AiHTyeojRTLKEK5Aw + sortOrder: 2 + fieldKey: name + label: Person Name + type: STRING + description: Name of the person + placeholder: '' + defaultValue: + '@path': $.traits.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: u3u5VocECFe7f8DunLYt6r + sortOrder: 3 + fieldKey: email + label: Email Address + type: STRING + description: Email addresses for this person. + placeholder: '' + defaultValue: + '@path': $.traits.email + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: ppe6rynyoG4WAPA1XxgMz2 + sortOrder: 4 + fieldKey: phone + label: Phone Number + type: STRING + description: Phone numbers for the person. + placeholder: '' + defaultValue: + '@path': $.traits.phone + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: 7597tfYCG6amGsDdnWTyvk + sortOrder: 5 + fieldKey: visible_to + label: Visible To + type: STRING + description: >- + Visibility of the Person. If omitted, visibility will be set to the + default visibility setting of this item type for the authorized user. + 'Owner's visibility group and sub-groups' and 'Entire company' options + only available with Professional or Enterprise plans + placeholder: '' + required: false + multiple: false + choices: + - label: Owner & followers (private) + value: '1' + - label: Entire company (shared) + value: '3' + - label: Owner's visibility group and sub-groups + value: '5' + - label: Entire company + value: '7' + dynamic: false + allowNull: false + - id: 81BrT6FpCe8o7DzdBgj2cx + sortOrder: 6 + fieldKey: add_time + label: Created At + type: DATETIME + description: >- + If the person is created, use this timestamp as the creation timestamp. + Format: YYY-MM-DD HH:MM:SS + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: j4VQaLRaaYCQxr8Kr4U7tC + sortOrder: 7 + fieldKey: custom_fields + label: Custom fields + type: OBJECT + description: New values for custom fields. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uVzPR9SSpfLqF3zoPok99Q + name: Create or Update Organization + slug: createUpdateOrganization + description: Update an organization in Pipedrive or create it if it doesn't exist yet. + platform: CLOUD + hidden: false + defaultTrigger: type = "group" + fields: + - id: nznNWZoW5kvUSGCnBDLYBS + sortOrder: 0 + fieldKey: match_field + label: Match field + type: STRING + description: >- + If present, used instead of field in settings to find existing + organization in Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: 4c5Cx3sWr8dVVS3EhwU1tP + sortOrder: 1 + fieldKey: match_value + label: Match value + type: STRING + description: Value to find existing organization by + placeholder: '' + defaultValue: + '@path': $.groupId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iSrMkR6BhxVK4VdAtaQHBX + sortOrder: 2 + fieldKey: name + label: Organization Name + type: STRING + description: Name of the organization + placeholder: '' + defaultValue: + '@path': $.traits.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: scPNjZXULsdZbuEqzDT2FU + sortOrder: 3 + fieldKey: visible_to + label: Visible To + type: STRING + description: >- + Visibility of the Organization. If omitted, visibility will be set to + the default visibility setting of this item type for the authorized + user. 'Owner's visibility group and sub-groups' and 'Entire company' + options only available with Professional or Enterprise plans + placeholder: '' + required: false + multiple: false + choices: + - label: Owner & followers (private) + value: '1' + - label: Entire company (shared) + value: '3' + - label: Owner's visibility group and sub-groups + value: '5' + - label: Entire company + value: '7' + dynamic: false + allowNull: false + - id: fNVTV988tHJWVp7PvgNenj + sortOrder: 4 + fieldKey: add_time + label: Created At + type: DATETIME + description: >- + If the organization is created, use this timestamp as the creation + timestamp. Format: YYY-MM-DD HH:MM:SS + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aZBoKiJV7JAhgUPYKKXe36 + sortOrder: 5 + fieldKey: custom_fields + label: Custom fields + type: OBJECT + description: New values for custom fields. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: dGDsZPqKXXCQNrgDcr1oKb + name: Create or update an Activity + slug: createUpdateActivity + description: Update an Activity in Pipedrive or create one if it doesn't exist. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Activity Upserted" + fields: + - id: fHXmaypyfD9CBTdcAFux9s + sortOrder: 0 + fieldKey: activity_id + label: Activity ID + type: INTEGER + description: >- + ID of Activity in Pipedrive to Update. If left empty, a new one will be + created + placeholder: '' + defaultValue: + '@path': $.properties.activity_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ftKCWC8cQ5FRAXY6ErQs37 + sortOrder: 1 + fieldKey: person_match_field + label: Person match field + type: STRING + description: >- + If present, used instead of field in settings to find existing person in + Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: bNppaDgfjjne4XrhpzGLvA + sortOrder: 2 + fieldKey: person_match_value + label: Person match value + type: STRING + description: Value to find existing person by + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hkhRFnevGJ4fexARDDrxyF + sortOrder: 3 + fieldKey: organization_match_field + label: Organization match field + type: STRING + description: >- + If present, used instead of field in settings to find existing + organization in Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: tpJ13z5ZK2eHtvWgd4DJtT + sortOrder: 4 + fieldKey: organization_match_value + label: Organization match value + type: STRING + description: Value to find existing organization by + placeholder: '' + defaultValue: + '@path': $.context.groupId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: o1xKTSd7qDGtM7HnSDA5Vb + sortOrder: 5 + fieldKey: deal_match_field + label: Deal match field + type: STRING + description: >- + If present, used instead of field in settings to find existing deal in + Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: iHD7XdzQWKdMpeQAcF4XF4 + sortOrder: 6 + fieldKey: deal_match_value + label: Deal match value + type: STRING + description: Value to find existing deal by + placeholder: '' + defaultValue: + '@path': $.properties.deal_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: poBVTj7Lii5fL2JhHbB4zB + sortOrder: 7 + fieldKey: subject + label: Activity Subject + type: STRING + description: >- + Subject of the Activity. When value for subject is not set, it will be + given a default value `Call`. + placeholder: '' + defaultValue: + '@path': $.properties.subject + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pdZZS4jmZdPgCUmLmmSUVq + sortOrder: 8 + fieldKey: type + label: Type + type: STRING + description: >- + Type of the Activity. This is in correlation with the key_string + parameter of ActivityTypes. When value for type is not set, it will be + given a default value `Call` + placeholder: '' + defaultValue: + '@path': $.properties.type + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 97syYY2GCmnCFbiYVgV9xX + sortOrder: 9 + fieldKey: description + label: Description + type: STRING + description: >- + Additional details about the Activity that is synced to your external + calendar. Unlike the note added to the Activity, the description is + publicly visible to any guests added to the Activity. + placeholder: '' + defaultValue: + '@path': $.properties.description + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2gf7rg1zVZN1kFXCVStp2g + sortOrder: 10 + fieldKey: note + label: Note + type: STRING + description: Note of the Activity (Accepts plain text and HTML) + placeholder: '' + defaultValue: + '@path': $.properties.note + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kkEefrcVU9WJJzfyPTMPVV + sortOrder: 11 + fieldKey: due_date + label: Due Date + type: STRING + description: 'Due date of the Activity. Format: YYYY-MM-DD' + placeholder: '' + defaultValue: + '@path': $.properties.due_date + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gZprYQHgYELxNscRaZTsDU + sortOrder: 12 + fieldKey: due_time + label: Due Time + type: STRING + description: 'Due time of the Activity. Format: HH:MM' + placeholder: '' + defaultValue: + '@path': $.properties.due_time + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vu2tfYWFq8DCDmTLYC5TFM + sortOrder: 13 + fieldKey: duration + label: Duration + type: STRING + description: 'Duration of the Activity. Format: HH:MM' + placeholder: '' + defaultValue: + '@path': $.properties.duration + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kUJdMGHUMF8PtuasgZS8dh + sortOrder: 14 + fieldKey: done + label: Done + type: BOOLEAN + description: Whether the Activity is done or not. + placeholder: '' + defaultValue: + '@path': $.properties.done + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hd2J84Sw2PcfzEkAm47YaK + name: Create or update Lead + slug: createUpdateLead + description: Update a Lead in Pipedrive or create it if it doesn't exist yet. + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" + fields: + - id: 7Eeeyg4y2358EkHuFFwNcC + sortOrder: 0 + fieldKey: lead_id + label: Lead ID + type: STRING + description: >- + ID of Lead in Pipedrive to Update. If left empty, a new one will be + created + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.lead_id + then: + '@path': $.traits.lead_id + else: + '@path': $.properties.lead_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pQRc5GVGdJoy1iy9SbBqaT + sortOrder: 1 + fieldKey: person_match_field + label: Person match field + type: STRING + description: >- + If present, used instead of field in settings to find existing person in + Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: bGRbutwAL3mn8uDiHdV9n + sortOrder: 2 + fieldKey: person_match_value + label: Person match value + type: STRING + description: >- + Value to find existing person by. Required unless + organization_match_value present + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kL29WNHWm3gH5R7d1myhNa + sortOrder: 3 + fieldKey: organization_match_field + label: Organization match field + type: STRING + description: >- + If present, used instead of field in settings to find existing + organization in Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: jA12fBffBidWz38FjV5NJC + sortOrder: 4 + fieldKey: organization_match_value + label: Organization match value + type: STRING + description: >- + Value to find existing organization by. Required unless + person_match_value present + placeholder: '' + defaultValue: + '@path': $.context.groupId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: thaRDYZ5nuJAvGexX98gPZ + sortOrder: 5 + fieldKey: title + label: Title + type: STRING + description: The name of the Lead + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.title + then: + '@path': $.traits.title + else: + '@path': $.properties.title + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: haubrM3YQFxCKrCDpXsdtr + sortOrder: 6 + fieldKey: amount + label: Amount + type: NUMBER + description: Potential value of the lead + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.amount + then: + '@path': $.traits.amount + else: + '@path': $.properties.amount + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4NqDBvuEcpaFCmFTSygQzj + sortOrder: 7 + fieldKey: currency + label: Currency + type: STRING + description: Three-letter code of the currency, e.g. USD + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.currency + then: + '@path': $.traits.currency + else: + '@path': $.properties.currency + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9vohookXb4B2EALAbdjQ8M + sortOrder: 8 + fieldKey: expected_close_date + label: Expected Close Date + type: STRING + description: >- + The date of when the Deal which will be created from the Lead is + expected to be closed. In ISO 8601 format: YYYY-MM-DD. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.expected_close_date + then: + '@path': $.traits.expected_close_date + else: + '@path': $.properties.expected_close_date + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: anWCW69LL97xjLoAaapWy7 + sortOrder: 9 + fieldKey: visible_to + label: Visible To + type: STRING + description: >- + Visibility of the Lead. If omitted, visibility will be set to the + default visibility setting of this item type for the authorized user. + 'Owner's visibility group and sub-groups' and 'Entire company' options + only available with Professional or Enterprise plans + placeholder: '' + required: false + multiple: false + choices: + - label: Owner & followers (private) + value: '1' + - label: Entire company (shared) + value: '3' + - label: Owner's visibility group and sub-groups + value: '5' + - label: Entire company + value: '7' + dynamic: false + allowNull: false + - id: qGniQ3jn3aUkXmCmzkM2RN + name: Create or update a Note + slug: createUpdateNote + description: Update a Note in Pipedrive or create it if it doesn't exist yet. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Note Upserted" + fields: + - id: 8PcceCMstEZeCWXCXiEze4 + sortOrder: 0 + fieldKey: note_id + label: Note ID + type: INTEGER + description: >- + ID of Note in Pipedrive to Update. If left empty, a new one will be + created + placeholder: '' + defaultValue: + '@path': $.properties.note_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uCARWx9NxBHSpMzHk7RJKt + sortOrder: 1 + fieldKey: lead_id + label: Lead ID + type: STRING + description: >- + ID of Lead in Pipedrive to link to. One of Lead, Person, Organization or + Deal must be linked! + placeholder: '' + defaultValue: + '@path': $.properties.lead_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mDZKa6bK7TdUViVUmN5dTE + sortOrder: 2 + fieldKey: person_match_field + label: Person match field + type: STRING + description: >- + If present, used instead of field in settings to find existing person in + Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: bBTB7LzbdKAVYHEvkhPXff + sortOrder: 3 + fieldKey: person_match_value + label: Person match value + type: STRING + description: >- + Value to find existing person by. One of Lead, Person, Organization or + Deal must be linked! + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6uc5wqnSeVBxFfSPpG7fwc + sortOrder: 4 + fieldKey: organization_match_field + label: Organization match field + type: STRING + description: >- + If present, used instead of field in settings to find existing + organization in Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: h8TRY9gAowHL55gqQ8LfRT + sortOrder: 5 + fieldKey: organization_match_value + label: Organization match value + type: STRING + description: >- + Value to find existing organization by. One of Lead, Person, + Organization or Deal must be linked! + placeholder: '' + defaultValue: + '@path': $.context.groupId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rZG7YuetTKnD2TMSKYLCY + sortOrder: 6 + fieldKey: deal_match_field + label: Deal match field + type: STRING + description: >- + If present, used instead of field in settings to find existing deal in + Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: nLwp6BMLet7qfSVWDxXRYi + sortOrder: 7 + fieldKey: deal_match_value + label: Deal match value + type: STRING + description: >- + Value to find existing deal by. One of Lead, Person, Organization or + Deal must be linked! + placeholder: '' + defaultValue: + '@path': $.properties.deal_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5W2pgq3u8dD2kKqLH7B4T8 + sortOrder: 8 + fieldKey: content + label: Note Content + type: STRING + description: >- + Content of the note in text or HTML format. Subject to sanitization on + the back-end. + placeholder: '' + defaultValue: + '@path': $.properties.content + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sHeYJxo1R6dwzgH9koDgZy + name: Create or update a Deal + slug: createUpdateDeal + description: Update a Deal in Pipedrive or create it if it doesn't exist yet. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Deal Upserted" + fields: + - id: 7Rc6srFhAHUDGfeiqVJCk9 + sortOrder: 0 + fieldKey: deal_match_field + label: Deal match field + type: STRING + description: >- + If present, used instead of field in settings to find existing deal in + Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: 3hVM9QWqCcJYSTBnpFLQwD + sortOrder: 1 + fieldKey: deal_match_value + label: Deal match value + type: STRING + description: Value to find existing deal by + placeholder: '' + defaultValue: + '@path': $.properties.deal_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bhmeGQqKTmipWipJFRfKcr + sortOrder: 2 + fieldKey: person_match_field + label: Person match field + type: STRING + description: >- + If present, used instead of field in settings to find existing person in + Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: 7qdaJ67SaQxKRwz83M8Wn3 + sortOrder: 3 + fieldKey: person_match_value + label: Person match value + type: STRING + description: >- + Value to find existing person by. Required unless + organization_match_value present + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oHoVHVTyvRp2GJjie4eLn5 + sortOrder: 4 + fieldKey: organization_match_field + label: Organization match field + type: STRING + description: >- + If present, used instead of field in settings to find existing + organization in Pipedrive. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: true + allowNull: false + - id: uoH9KsRn84UZyBpk8eD7xn + sortOrder: 5 + fieldKey: organization_match_value + label: Organization match value + type: STRING + description: >- + Value to find existing organization by. Required unless + person_match_value present + placeholder: '' + defaultValue: + '@path': $.context.groupId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oEn3o2YLqBLZpzHpE3gqiJ + sortOrder: 6 + fieldKey: title + label: Title + type: STRING + description: Deal title (required for new Leads) + placeholder: '' + defaultValue: + '@path': $.properties.title + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tDhy2uNBRWDT2Xk56FdfXF + sortOrder: 7 + fieldKey: value + label: Value + type: STRING + description: Value of the deal. If omitted, value will be set to 0. + placeholder: '' + defaultValue: + '@path': $.properties.value + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: n4UcjpCoRtqPcPNYpg9j1N + sortOrder: 8 + fieldKey: currency + label: Currency + type: STRING + description: >- + Currency of the deal. Accepts a 3-character currency code. If omitted, + currency will be set to the default currency of the authorized user. + placeholder: '' + defaultValue: + '@path': $.properties.currency + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: o7mfU6CuMZKeruoNRYAm4a + sortOrder: 9 + fieldKey: stage_id + label: Stage ID + type: NUMBER + description: >- + The ID of a stage this Deal will be placed in a pipeline (note that you + can't supply the ID of the pipeline as this will be assigned + automatically based on stage_id). If omitted, the deal will be placed in + the first stage of the default pipeline. + placeholder: '' + defaultValue: + '@path': $.properties.stage_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eMPaioAfPfy9wd985A7PDm + sortOrder: 10 + fieldKey: status + label: Status + type: STRING + description: >- + Deal status - open, won, lost or deleted. If omitted, status will be set + to open. + placeholder: '' + required: false + multiple: false + choices: + - label: Open + value: open + - label: Won + value: won + - label: Lost + value: lost + - label: Deleted + value: deleted + dynamic: false + allowNull: false + - id: bghUAogNd9n81cnPJKxowJ + sortOrder: 11 + fieldKey: expected_close_date + label: Expected Close Date + type: STRING + description: 'The expected close date of the Deal. In ISO 8601 format: YYYY-MM-DD.' + placeholder: '' + defaultValue: + '@path': $.properties.expected_close_date + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cPcACLtr43z4BrJH7wK7m2 + sortOrder: 12 + fieldKey: probability + label: Success Probability + type: NUMBER + description: >- + Deal success probability percentage. Used/shown only when + deal_probability for the pipeline of the deal is enabled. + placeholder: '' + defaultValue: + '@path': $.properties.success_probability + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ghZE5DCTc1djrAAy5obHgY + sortOrder: 13 + fieldKey: lost_reason + label: Lost Reason + type: STRING + description: >- + Optional message about why the deal was lost (to be used when + status=lost) + placeholder: '' + defaultValue: + '@path': $.properties.lost_reason + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pENhbio4Jb3KW3wgjsa5T2 + sortOrder: 14 + fieldKey: visible_to + label: Visible To + type: STRING + description: >- + Visibility of the deal. If omitted, visibility will be set to the + default visibility setting of this item type for the authorized user. + 'Owner's visibility group and sub-groups' and 'Entire company' options + only available with Professional or Enterprise plans + placeholder: '' + required: false + multiple: false + choices: + - label: Owner & followers (private) + value: '1' + - label: Entire company (shared) + value: '3' + - label: Owner's visibility group and sub-groups + value: '5' + - label: Entire company + value: '7' + dynamic: false + allowNull: false + - id: 3M9R8SYqRW2cfBaUjtrwvD + sortOrder: 15 + fieldKey: add_time + label: Created At + type: DATETIME + description: >- + If the deal is created, use this timestamp as the creation timestamp. + Format: YYY-MM-DD HH:MM:SS + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6LKez8gqdsX1xgbbR23Cmq + sortOrder: 16 + fieldKey: custom_fields + label: Custom fields + type: OBJECT + description: New values for custom fields. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: dGDsZPqKXXCQNrgDcr1oKb + name: Create or Update an Activity + fields: + activity_id: + '@path': $.properties.activity_id + person_match_value: + '@path': $.userId + organization_match_value: + '@path': $.context.groupId + deal_match_value: + '@path': $.properties.deal_id + subject: + '@path': $.properties.subject + type: + '@path': $.properties.type + description: + '@path': $.properties.description + note: + '@path': $.properties.note + due_date: + '@path': $.properties.due_date + due_time: + '@path': $.properties.due_time + duration: + '@path': $.properties.duration + done: + '@path': $.properties.done + trigger: type = "track" and event = "Activity Upserted" + - actionId: uVzPR9SSpfLqF3zoPok99Q + name: Create or Update an Organization + fields: + match_value: + '@path': $.groupId + name: + '@path': $.traits.name + trigger: type = "group" + - actionId: 66wGU3cfJrrdBk8CqekrJc + name: Create or Update a Person + fields: + match_value: + '@path': $.userId + name: + '@path': $.traits.name + email: + '@path': $.traits.email + phone: + '@path': $.traits.phone + trigger: type = "identify" + partnerOwned: true +- id: 55d66bb5ebe537b09c977fa3 + display_name: ActiveCampaign + name: ActiveCampaign + slug: activecampaign + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/activecampaign + previous_names: + - ActiveCampaign + website: http://www.activecampaign.com/ + status: PUBLIC + categories: + - Email Marketing + logo: + url: https://cdn.filepicker.io/api/file/crxyMacQHwBl5JeGhwX7 + mark: + url: https://cdn.filepicker.io/api/file/AihHusTMaZdUXL7OlFDw + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + Your API key can be found by navigating to your Active Campaign account + and clicking on My Settings > API. It should look something like + `5292218aadbe410acf66c44164c4be2de4bbf184c509ef699d85a0e8da1d9fabeda175df` + required: true + label: API Key + - name: apiSecret + type: string + defaultValue: '' + description: >- + Your API url can be found by navigating to your Active Campaign account + and clicking on My Settings > API. It should look something like + `https://.api-us1.com` + required: true + label: API url + actions: [] + presets: [] + partnerOwned: false +- id: 5c75564f1d2f34000116ef78 + display_name: Adikteev + name: Adikteev + slug: adikteev + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/adikteev + previous_names: + - Adikteev + website: https://www.adikteev.com/ + status: PUBLIC + categories: + - Advertising + logo: + url: https://cdn-devcenter.segment.com/731ca708-febb-4bc4-8ce2-e6f9229d0cd5.svg + mark: + url: https://cdn-devcenter.segment.com/d159a61b-530e-43bd-90c1-f090dad90c78.svg + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: false + mobile: true + server: false + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: false + mobile: true + server: false + settings: + - name: apiKey + type: string + defaultValue: '' + description: Ask your account manager for the API key. + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 56f6ce7280412f644ff12fb2 + display_name: Adjust + name: Adjust + slug: adjust + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/adjust + previous_names: + - Adjust + website: https://adjust.com/ + status: PUBLIC + categories: + - Attribution + - Deep Linking + logo: + url: https://cdn.filepicker.io/api/file/IefXQy6fRR27ZG1NvZgW + mark: + url: https://cdn.filepicker.io/api/file/lqTYxhVyT5WFDFdLS598 + methods: + track: true + identify: false + group: false + alias: false + screen: false + page: false + platforms: + browser: false + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics-ios-integration-adjust + type: IOS + - code: >- + https://github.com/segment-integrations/analytics-android-integration-adjust + type: ANDROID + - code: https://github.com/segmentio/integrations/tree/master/integrations/adjust + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: true + server: false + cloud: + web: false + mobile: true + server: true + settings: + - name: appToken + type: string + defaultValue: '' + description: >- + Your Adjust app token can be retrieved from your [Adjust + account](https://next.adjust.com/#/) in the app's Settings. + required: true + label: App Token + - name: customEvents + type: text-map + defaultValue: {} + description: >- + Enter your event on the left, and the Adjust custom event token to map + into on the right. Adjust allows you to create custom events under + `Settings > Events`, which have custom tokens. Adjust's API only accepts + those tokens, not arbitrary event names. Any unmapped events will not be + sent to Adjust, since they require a mapped token. + required: false + label: Map Your Events to Custom Adjust Event Tokens + - name: delayTime + type: number + defaultValue: 0 + description: >- + *You must enable setDelay first!* + + + Set the initial delay time in seconds with the setting `setDelay` + enabled. The maximum delay start time of the adjust SDK is 10 seconds. + required: false + label: delayTime + - name: sendEventCreationTime + type: boolean + defaultValue: false + description: >2- + *Warning: enabling this setting will cause more events to be rejected by Adjust.* + + When enabled, this will send the time the event was created to Adjust + using unix timestamp formatting. Increased rejections are caused by + [Adjust's requirement][1] that events are received in chronological order + (Segment does not guarantee chronological order). + + When disabled, the created_at time will be the time an event is received + by Adjust. + + [1]: + http://help.adjust.com/tracking/app-events/basic-event-setup/track-s2s-events#recommended-additional-parameters + required: false + label: Send Event Creation Time + - name: setDelay + type: boolean + defaultValue: false + description: >- + Configure a delay to ensure all session parameters have been loaded + properly. The max [delay + start](https://github.com/adjust/ios_sdk#delay-start) time is 10 seconds. + required: false + label: setDelay + - name: setEnvironmentProduction + type: boolean + defaultValue: false + description: >- + This will send all your data to your production environment on Adjust. If + unchecked, data will flow to your sandbox environment on Adjust. + required: false + label: Send to Production Environment on Adjust + - name: setEventBufferingEnabled + type: boolean + defaultValue: false + description: >- + **Device Mode Only**: This will save battery life by buffering and + batching events sent to Adjust. But during development it's nicer to see + events come through immediately. + required: false + label: Buffer and batch events sent to Adjust + - name: trackAttributionData + type: boolean + defaultValue: false + description: Send Adjust Attribution data to Segment and other tools as a `track` call. + required: false + label: Track Attribution Data + actions: [] + presets: [] + partnerOwned: false +- id: 54521fd525e721e32a72ee93 + display_name: AdLearn Open Platform + name: AdLearn Open Platform + slug: adlearn-open-platform + hidden: true + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/adlearn-open-platform + previous_names: + - AdLearn Open Platform + website: http://www.adlearnop.com/ + status: PUBLIC + categories: + - Advertising + - Analytics + - Enrichment + - A/B Testing + logo: + url: >- + https://d3hotuclm6if1r.cloudfront.net/logos/adlearn-open-platform-default.svg + mark: + url: https://cdn.filepicker.io/api/file/VsmrYeBoSXy03e6HGXiC + methods: + track: true + identify: false + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segment-integrations/analytics.js-integration-adlearn-open-platform + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: events + type: text-map + defaultValue: {} + description: >- + AdLearn Open Platform recognizes pixel ids, not custom event names. When + you `analytics.track(event, properties)` an event that represents an + AdLearn Open Platform conversion, you'll need to map the event name on the + left to it's corresponding AdLearn Open Platform pixel id on the right. + These pixel ids show up as the `type` parameters in the pixel. + required: false + label: Events + - name: retargetingPixelId + type: string + defaultValue: '' + description: >- + Your Retargeting Pixel ID, for the pixel that loads on every page. It + shows up in the pixel as the `betr` parameter. + required: false + label: Retargeting Pixel ID + actions: [] + presets: [] + partnerOwned: false +- id: 5783cec280412f644ff14226 + display_name: Adobe Analytics + name: Adobe Analytics + slug: adobe-analytics + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/adobe-analytics + previous_names: + - Adobe Analytics + website: http://www.adobe.com/marketing-cloud/web-analytics.html + status: PUBLIC + categories: + - Analytics + - Video + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/omniture-default.svg + mark: + url: https://cdn.filepicker.io/api/file/E42OZ7ThRpuXrvIlMnul + methods: + track: true + identify: false + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segment-integrations/analytics.js-integration-adobe-analytics + owner: SEGMENT + type: BROWSER + - code: >- + https://github.com/segment-integrations/analytics-ios-integration-adobe-analytics + owner: SEGMENT + type: IOS + - code: >- + https://github.com/segment-integrations/analytics-android-integration-adobe-analytics + owner: SEGMENT + type: ANDROID + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/adobe-analytics + owner: SEGMENT + type: SERVER + browserUnbundlingSupported: true + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: true + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: addBuildToAppId + type: boolean + defaultValue: false + description: >- + If this setting is enabled, we will add `context.app.build`, if present, + to Adobe's AppID, as ``` `` (``)`. + required: false + label: Add application build to Adobe's App ID + - name: collectHighEntropyUserAgentHints + type: boolean + defaultValue: false + description: >- + If you enable this option, Adobe's library will request high-entropy + hints. High-entropy hints contain more detailed information about a user's + device. See [Adobe + documentation](https://experienceleague.adobe.com/docs/analytics/technotes/client-hints.html?lang=en) + for more information. Note: This setting is for web device-mode only. + required: false + label: Collect High-Entropy Client Hints + - name: contextValues + type: text-map + defaultValue: {} + description: >- + Map values you pass into the context object to [Context Data + Variables](https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/contextdata.html) + in Adobe Analytics. Then you can use processing rules to map you Context + Data Variables in Adobe to other variables with Adobe Analytics Processing + Rules. In the box on the left, put your Segment context key. The box on + the right is what Context Data Variable you'd like it to be mapper to in + Adobe. + + + If you have a nested object, separate the name with a `.` For example if + you wanted to map the page referrer, you would put: page.referrer. + + + **NOTE**: By default Segment send alls your `properties` as Context Data + Variables so you do not need to map them again here. + required: false + label: Context Data Variables + - name: customDataPrefix + type: string + defaultValue: '' + description: >- + If you would like to prefix your Segment properties before sending them as + contextData, enter a prefix here. + required: false + label: Context Data Property Prefix + - name: customDelimiter + type: map + defaultValue: {} + description: >- + Add a custom delimiter to concatenate Adobe Analytics lVars or props sent + as an array. Note, if you do not specify a custom delimiter, arrays will + be concatenated with a comma. Please add the Adobe Analytics lVar or prop + on the left and select a custom delimiter on the right. lVars must be in + format 'list1', 'list2', etc. and props in format 'prop1', 'prop2', etc. + Must be all lowercase with no whitespace. + required: false + label: 'List Variable and Prop Custom Delimiter: Server-Side Only ' + - name: disableVisitorId + type: boolean + defaultValue: false + description: This will disable Visitor ID from being passed to Adobe. + required: false + label: Drop Visitor ID + - name: enableTrackPageName + type: boolean + defaultValue: true + description: >- + If you do not want to attach `pageName` for your `.track()` calls, you can + disable this option. + required: false + label: Enable pageName for Track Events + - name: eVars + type: map + defaultValue: {} + description: >- + Map your Adobe Analytics eVar names to the property names you’re using in + your Segment events. Enter a Segment property name on the left and an + Adobe Analytics eVar number on the right. You can view your Segment events + and properties in your Schema. + required: false + label: eVars + - name: events + type: mixed + defaultValue: [] + description: Map your Segment events to custom Adobe events. + required: false + label: Events + - name: eventsV2 + type: text-map + defaultValue: {} + description: >- + **Note**: If you are bundling our Adobe Analytics SDK on your mobile + device, you should map your events here. If you are sending via server + side you should use the `Events` option instead. Map your Adobe Analytics + property names on the left to Adobe event names on the right. Your events + MUST be set up in Adobe and mapped here in order to to be forwarded to the + destination. This setting only applies to Mobile integrations with Adobe. + required: false + label: Events V2 (Bundled Mobile Only) + - name: heartbeatTrackingServerUrl + type: string + defaultValue: '' + description: >- + This is the URL of your Adobe Heartbeat server. Please contact Adobe to + obtain this URL. + required: false + label: Heartbeat Tracking Server URL + - name: hVars + type: map + defaultValue: {} + description: >- + Map your Adobe Analytics hVars to the property names you’re using in your + Segment page calls. Enter a Segment property name on the left and an Adobe + Analytics hVar number on the right. You can view your Segment page calls + and properties in your Schema. + required: false + label: Hierarchy Variables + - name: lVars + type: map + defaultValue: {} + description: >- + Map your Adobe Analytics list variables names to the property names you’re + using in your Segment events. Enter a Segment property name on the left + and an Adobe Analytics list variable number on the right. You can view + your Segment events and properties in your Schema. + required: false + label: List Variables + - name: marketingCloudOrgId + type: string + defaultValue: '' + description: >- + If you would like to use the Marketing Cloud Id Service and use + visitorAPI.js, please enter your Marketing Cloud Organization ID. If you + do not know your organization ID, you can find it on the Marketing Cloud + administration page. It should look something like '1234567ABC@AdobeOrg'. + required: false + label: Marketing Cloud Organization Id + - name: merchEvents + type: mixed + defaultValue: [] + description: |- + Configure merchandising event, such as purchase or currency events. + + This is currently in Beta Testing and not generally available. + required: false + label: 'Merchandising Events ' + - name: oAuthClientId + type: string + defaultValue: '' + description: Client ID for your OAuth Server-to-Server Credential + required: false + label: OAuth Client ID + - name: oAuthClientSecret + type: password + defaultValue: '' + description: Client Secret for your OAuth Server-to-Server Credential + required: false + label: OAuth Client Secret + - name: pageNameFallbackToScreen + type: boolean + defaultValue: false + description: >- + If "Enable pageName for Track Events" is enabled but page name is not + populated by default mapping, then page name will be populated by `screen` + property if this is enabled. + required: false + label: Page Name Fallback to Screen + - name: preferVisitorId + type: boolean + defaultValue: false + description: >- + If you enable this option and you also have a *Timestamp Optional* + reporting suite, you can opt to send your visitorID instead of the + timestamp since Adobe does not allow you to send both. If you care more + about your user attribution, you should enable this if you're using a + hybrid timestamp reporting suite. + required: false + label: Prefer VisitorID for Hybrid Timestamp Reporting + - name: productIdentifier + type: select + defaultValue: name + description: >- + Adobe Analytics only accepts a single [product + identifier](https://marketing.adobe.com/resources/help/en_US/sc/implement/products.html). + Use this option to choose whether we send product `name`, `id`, or `sku`. + required: false + label: Product Identifier + - name: props + type: map + defaultValue: {} + description: >- + Map your Adobe Analytics property names to the property names you’re using + in your Segment events. Enter a Segment property name on the left and an + Adobe Analytics property number on the right. You can view your Segment + events and properties in your Schema. + required: false + label: Props + - name: removeFallbackVisitorId + type: boolean + defaultValue: false + description: >- + Note: This setting is for Server-Side only, and only applies when the Drop + Visitor ID setting is disabled and you send a marketingCloudId in the + Adobe Analytics integration object. + + ​​ + + ​​Segment’s default behavior is to set the Adobe Analytics visitorID based + on the destination specific setting for visitorId​, falling back to + userId​ then anonymousId​. This setting removes the fallbacks. + required: false + label: 'No Fallbacks for Visitor ID: Server-Side Only ' + - name: reportSuiteId + type: string + defaultValue: '' + description: >- + You can find your Report Suite ID in your Adobe Analytics Settings page. + Multiple report suite ids can be separated by commas: + `suite1,suite2,suite3`. + required: true + label: Report Suite ID(s) + - name: sendBothTimestampVisitorId + type: boolean + defaultValue: false + description: >- + If you have a *Timestamp Optional* Reporting Suite, you can opt to send + _both_ the timestamp and the visitorID in your XML when sending events + server side. However, note that this is *NOT* recommended by + [Adobe](https://marketing.adobe.com/resources/help/en_US/sc/implement/timestamps-overview.html) + as it may lead to out of order data. This setting will only work for + reporting suites that have optional timestamp setting enabled. + required: false + label: Send Both Timestamp and VisitorID for Timestamp Optional Reporting Suites + - name: sendFalseValues + type: boolean + defaultValue: false + description: >- + By default, we don't send properties with a `false` as value on cloud + mode. Enabling this setting will send any boolean property where value is + `false`. + required: false + label: Send False values + - name: ssl + type: boolean + defaultValue: false + description: >- + Check this box if you would like your Adobe Heartbeat calls to be made + over HTTPS. + required: false + label: SSL + - name: timestampOption + type: select + defaultValue: enabled + description: >- + Adobe Analytics can have Report Suites that will accept timestamped, + non-timestamped or hybrid data. Note that we can only play historical + data for timestamped or hybrid Report Suites. + required: false + label: Timestamp Option + - name: trackingServerSecureUrl + type: string + defaultValue: '' + description: >- + This is the secure URL of your Adobe Analytics server. Please input your + URL without `https://` prepended. + required: false + label: Tracking Server Secure URL + - name: trackingServerUrl + type: string + defaultValue: '' + description: >- + This is the URL of your Adobe Analytics server. Please input your URL + without `http://` prepended. + required: false + label: Tracking Server URL + - name: useLegacyLinkName + type: boolean + defaultValue: false + description: >- + Before sending LinkName to Adobe Analytics, prepend the URL with `Link + Name - `. + + + This setting enables a legacy behavior for backwards compatibility. You + probably want to keep this setting turned off. + required: false + label: Use Legacy LinkName + - name: useSecureServerUrl + type: boolean + defaultValue: false + description: >- + Enable this option if you want to use the 'Tracking Server Secure URL' + endpoint instead of the normal URL for server-side and Cloud Mode calls. + required: false + label: Use Secure URL for Server-side + - name: utf8Charset + type: boolean + defaultValue: true + description: >- + Only applicable on server-side or cloud-mode. If this setting is enabled, + we will send the payload to Adobe Analytics with UTF-8 charset. Useful + when your events contains accents or other special characters. + required: false + label: Use UTF-8 Charset + actions: [] + presets: [] + partnerOwned: false +- id: 61aa712b857e8c85c3b5a849 + display_name: Adobe Target Cloud Mode + name: Adobe Target Cloud Mode + slug: actions-adobe-target-cloud + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-adobe-target-cloud + previous_names: + - Adobe Target Cloud Mode + website: https://business.adobe.com/products/target/adobe-target.html + status: PUBLIC + categories: + - A/B Testing + logo: + url: https://cdn.filepicker.io/api/file/tgnCrg0yRvaUMRAIaqHu + mark: + url: https://cdn.filepicker.io/api/file/aGyR1eyBT2OA0g3wuJ6F + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: bearer_token + type: string + defaultValue: '' + description: >- + If you choose to require authentication for Adobe Target's Profile API, + you will need to generate an authentication token. Tokens can be generated + in your Adobe Target account under the Implementation Settings tab or via + the [Adobe.IO Authentication Token + API](https://developers.adobetarget.com/api/#authentication-tokens). Input + the authentication token here. Note: Authentication tokens expire so a new + token will need to be generated and updated here prior to expiration. + required: false + label: Authentication Token + - name: client_code + type: string + defaultValue: '' + description: >- + Your Adobe Target client code. To find your client code in Adobe Target, + navigate to **Administration > Implementation**. The client code is shown + at the top under Account Details. + required: true + label: Client Code + actions: + - id: 3FUdT3XKFUi3WcdJDZkzd8 + name: Update Profile + slug: updateProfile + description: Update an existing user profile in Adobe Target. + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" + fields: + - id: 7cBSc28D7YnuUYPNU4881h + sortOrder: 0 + fieldKey: user_id + label: Mbox 3rd Party ID + type: STRING + description: >- + A user's unique visitor ID. This field is used to fetch a matching + profile in Adobe Target to make an update on. For more information, + please see our Adobe Target Destination documentation. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nW8xjVA9mupe4XzovX93b1 + sortOrder: 1 + fieldKey: traits + label: Profile Attributes + type: OBJECT + description: >- + Profile parameters specific to a user. Please note, Adobe recommends + that PII is hashed prior to sending to Adobe. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + presets: [] + partnerOwned: false +- id: 61fc2ffcc76fb3e73d85c89d + display_name: Adobe Target Web + name: Adobe Target Web + slug: actions-adobe-target-web + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-adobe-target-web + previous_names: + - Adobe Target Web + website: https://business.adobe.com/products/target/adobe-target.html + status: PUBLIC + categories: + - A/B Testing + logo: + url: https://cdn.filepicker.io/api/file/I2MgTcT7GCeX4aKz0VeQ + mark: + url: https://cdn.filepicker.io/api/file/U1aDA7f1QdauRcb7lFnL + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: false + settings: + - name: admin_number + type: string + defaultValue: '' + description: >- + Your Adobe Target admin number. To find your admin number, please follow + the instructions in [Adobe + Docs](https://experienceleague.adobe.com/docs/target/using/implement-target/client-side/at-js-implementation/deploy-at-js/implementing-target-without-a-tag-manager.html). + required: true + label: Admin number + - name: client_code + type: string + defaultValue: '' + description: >- + Your Adobe Target client code. To find your client code in Adobe Target, + navigate to **Administration > Implementation**. The client code is shown + at the top under Account Details. + required: true + label: Client Code + - name: cookie_domain + type: string + defaultValue: '' + description: >- + The domain from which you serve the mbox. Adobe Target recommends setting + this value to your company's top-level domain. + required: true + label: Cookie Domain + - name: mbox_name + type: string + defaultValue: target-global-mbox + description: >- + The name of the Adobe Target mbox to use. Defaults to + `target-global-mbox`. + required: true + label: Mbox Name + - name: version + type: select + defaultValue: 2.8.0 + description: The version of ATJS to use. Defaults to 2.8.0. + required: true + label: ATJS Version + actions: + - id: 6Koj6XjcBpQUfjQ25sAdG3 + name: Upsert Profile + slug: upsertProfile + description: Create or update a user profile in Adobe Target. + platform: WEB + hidden: false + defaultTrigger: type = "identify" + fields: + - id: bsaRhitU5gUEGT2Kf12Pza + sortOrder: 0 + fieldKey: userId + label: Mbox 3rd Party ID + type: STRING + description: >- + A user’s unique visitor ID. Setting an Mbox 3rd Party ID allows for + updates via the Adobe Target Cloud Mode Destination. For more + information, please see our Adobe Target Destination documentation. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4hB6g7A9wMWUGfYw1QTG3L + sortOrder: 1 + fieldKey: traits + label: Profile Attributes + type: OBJECT + description: >- + Profile parameters specific to a user. Please note, Adobe recommends + that PII is hashed prior to sending to Adobe. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 243uULZreXS5yYFvMBm4NW + name: Trigger View + slug: triggerView + description: Send page-level data to Adobe Target. + platform: WEB + hidden: false + defaultTrigger: type = "page" + fields: + - id: 2RpiJTMb1TNDJhq7evLyXS + sortOrder: 0 + fieldKey: viewName + label: View Name + type: STRING + description: Name of the view or page. + placeholder: '' + defaultValue: + '@path': $.name + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fDC4U3RD1VHQsW2nauiQrA + sortOrder: 1 + fieldKey: pageParameters + label: Page Parameters + type: OBJECT + description: Parameters specific to the view or page. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tDmLN2mguNCvHdcyu6VPCk + sortOrder: 2 + fieldKey: sendNotification + label: Send Notifications to Adobe Target. + type: BOOLEAN + description: >- + By default, notifications are sent to the Adobe Target backend for + incrementing impression count. If false, notifications are not sent for + incrementing impression count. + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cEhLsbMFjmvjJp9KbKnaHC + sortOrder: 3 + fieldKey: userId + label: Mbox 3rd Party ID + type: STRING + description: >- + A user’s unique visitor ID. Setting an Mbox 3rd Party ID allows for + updates via the Adobe Target Cloud Mode Destination. For more + information, please see our Adobe Target Destination documentation. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iRgHnBnvnsa7vFSvCeyvmY + name: Track Event + slug: trackEvent + description: Send user actions, such as clicks and conversions, to Adobe Target. + platform: WEB + hidden: false + defaultTrigger: type = "track" + fields: + - id: 4Z4jhCFtfyENb1N693YvEJ + sortOrder: 0 + fieldKey: type + label: Event Type + type: STRING + description: >- + The event type. Please ensure the type entered here is registered and + available. + placeholder: '' + defaultValue: display + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vz3jRrucFweQEdZ5uMot4N + sortOrder: 1 + fieldKey: eventName + label: Event Name + type: STRING + description: >- + This will be sent to Adobe Target as an event parameter called + "event_name". + placeholder: '' + defaultValue: + '@path': $.event + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 29Njs2GjknwGWD7GrLXM3J + sortOrder: 2 + fieldKey: properties + label: Event Parameters + type: OBJECT + description: Parameters specific to the event. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fPhYagzJAeRbytRTcXhqr4 + sortOrder: 3 + fieldKey: userId + label: Mbox 3rd Party ID + type: STRING + description: >- + A user’s unique visitor ID. Setting an Mbox 3rd Party ID allows for + updates via the Adobe Target Cloud Mode Destination. For more + information, please see our Adobe Target Destination documentation. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: [] + partnerOwned: false +- id: 5d3638cd54d6be00014e6bf1 + display_name: AdQuick + name: AdQuick + slug: adquick + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/adquick + previous_names: + - AdQuick + website: https://adquick.com + status: PUBLIC + categories: + - Advertising + - Analytics + - Customer Success + - Performance Monitoring + logo: + url: https://cdn-devcenter.segment.com/cf0cc43e-618a-460d-a75c-5b49506a43ce.svg + mark: + url: https://cdn-devcenter.segment.com/59a9fad6-3663-4683-85dd-eb1e1b030318.svg + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: You can find your API key on your campaign page, under the Analytics tab + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 54521fd525e721e32a72ee8e + display_name: AdRoll + name: AdRoll + slug: adroll + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/adroll + previous_names: + - AdRoll + website: http://adroll.com + status: PUBLIC + categories: + - Advertising + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/adroll-default.svg + mark: + url: https://cdn.filepicker.io/api/file/IKo2fU59RROBsNtj4lHs + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-adroll + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: _version + type: number + defaultValue: 2 + description: '' + required: false + label: _version + - name: advId + type: string + defaultValue: '' + description: >- + You can find your Advertiser ID in your AdRoll dashboard by clicking the + **green or red dot** in the lower-left corner. In the Javascript snippet, + the Advertiser ID appears as `adroll_avd_id = 'XXXXXXX'` on line 2. It + should be 22 characters long and look something like this: + `WYJD6WNIAJC2XG6PT7UK4B`. + required: true + label: Advertiser ID + - name: events + type: text-map + defaultValue: {} + description: >- + AdRoll allows you to create a Segment Name and ID for conversions events. + Use this mapping to trigger the *AdRoll Segment ID* (on the right) when + the Event Name (on the left) is passed in a Track method. + required: false + label: Events + - name: pixId + type: string + defaultValue: '' + description: >- + You can find your Pixel ID in your AdRoll dashboard by clicking the + **green or red dot** in the lower-left corner. In the Javascript snippet, + the Pixel ID appears as `adroll_pix_id = 'XXXXXXX'` on line 3. It should + be 22 characters long, and look something like this: + `6UUA5LKILFESVE44XH6SVX`. + required: true + label: Pixel ID + actions: [] + presets: [] + partnerOwned: false +- id: 5c7550de16b530000157a2d5 + display_name: Adtriba + name: Adtriba + slug: adtriba + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/adtriba + previous_names: + - Adtriba + website: https://www.adtriba.com + status: PUBLIC + categories: + - Attribution + - Advertising + - Analytics + logo: + url: https://cdn-devcenter.segment.com/6b13904e-e065-48e3-8360-d68dff89baaf.svg + mark: + url: https://cdn-devcenter.segment.com/7b465fc4-ceae-42bf-9627-d1678531a1be.svg + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: You can find your API key on the project settings page in the setup area. + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 659eb601f8f615dac18db564 + display_name: Aggregations.io (Actions) + name: Aggregations.io (Actions) + slug: actions-aggregations-io + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-aggregations-io + previous_names: + - Aggregations.io (Actions) + website: https://aggregations.io + status: PUBLIC_BETA + categories: + - Raw Data + - Analytics + logo: + url: https://cdn-devcenter.segment.com/8012932e-eaa6-4224-b4ab-e48a5a815f93.svg + mark: + url: https://cdn-devcenter.segment.com/b106e36f-d5e8-4307-8174-ac3c5ad432f5.svg + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: api_key + type: password + defaultValue: '' + description: Your Aggregations.io API Key. This key requires Write permissions. + required: true + label: API Key + - name: ingest_id + type: string + defaultValue: '' + description: >- + The ID of the ingest you want to send data to. This ingest should be set + up as "Array of JSON Objects". Find your ID on the Aggregations.io + Organization page. + required: true + label: Ingest Id + actions: + - id: ibzRWPV7jdx3UvSqhDCWob + name: Send Events + slug: send + description: Send events to Aggregations.io. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: pKS6wAoVMhgMKcGRtRyKPb + sortOrder: 0 + fieldKey: data + label: Data + type: OBJECT + description: Payload to deliver (JSON-encoded). + placeholder: '' + defaultValue: + '@path': $. + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bQA4z2u97zSZVXX16WtZvR + sortOrder: 1 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enabling sending batches of events to Aggregations.io. + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rF7Z7KScxWx34TEDnRmpHa + sortOrder: 2 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch sizes + may be lower. If you know your events are large, you may want to tune + your batch size down to meet API requirements. + placeholder: '' + defaultValue: 300 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: [] + partnerOwned: true +- id: 5d0ac1fbc12d700001651e34 + display_name: Airship + name: Airship + slug: airship + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/airship + previous_names: + - airship + - Airship + website: https://www.airship.com/ + status: PUBLIC + categories: + - Marketing Automation + - SMS & Push Notifications + logo: + url: https://cdn-devcenter.segment.com/ba6dde79-7795-4244-866f-bad97143ad19.svg + mark: + url: https://cdn-devcenter.segment.com/d2db5588-db19-4296-bd6e-087d33218657.svg + methods: + track: true + identify: true + group: true + alias: false + screen: false + page: false + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: airshipEuDataCenter + type: boolean + defaultValue: false + description: >- + Toggle this switch ON if you are implemented in Airship’s European Data + Center. If you are unsure which data center you are on please reach out to + support@airship.com. + required: false + label: Airship EU Data Center + - name: apiKey + type: string + defaultValue: '' + description: Airship generated string identifying the Bearer token. + required: true + label: API Key + - name: appKey + type: string + defaultValue: '' + description: >- + Airship generated string identifying the app setup. Used in the + application bundle. + required: true + label: App Key + actions: [] + presets: [] + partnerOwned: true +- id: 6475c5c14f7db4914bcd512f + display_name: Airship (Actions) + name: Airship (Actions) + slug: actions-airship + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-airship + previous_names: + - Airship (Actions) + website: https://www.airship.com + status: PUBLIC + categories: + - SMS & Push Notifications + - Marketing Automation + logo: + url: https://cdn.filepicker.io/api/file/2nBnpISbQ9y5HVdRbNzx + mark: + url: https://cdn.filepicker.io/api/file/oWfR4FwGRzWqONbYNZ3z + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: access_token + type: password + defaultValue: '' + description: >- + Create in the Airship Go dashboard in Settings->Partner + Integrations->Segment + required: true + label: Access Token + - name: app_key + type: string + defaultValue: '' + description: The App Key identifies the Airship Project to which API requests are made. + required: true + label: App Key + - name: endpoint + type: select + defaultValue: US + description: US or EU + required: true + label: Data Center + actions: + - id: eNkhQGgqJHnQg5vuAHXmQY + name: Custom Events + slug: customEvents + description: Set Custom Events on Users + platform: CLOUD + hidden: false + defaultTrigger: type = "track" + fields: + - id: 5gnYbvvTds36KgCaBsZWsk + sortOrder: 0 + fieldKey: named_user_id + label: Airship Named User ID + type: STRING + description: The identifier assigned in Airship as the Named User + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: r78QY37aR9qR8pk2k5k9qu + sortOrder: 1 + fieldKey: name + label: Name + type: STRING + description: Event Name + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fPEw1eHbWKjgX7nVfkeJKt + sortOrder: 2 + fieldKey: occurred + label: Occurred + type: DATETIME + description: When the event occurred. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2xP7EJoyvx1aZxXCUunUeg + sortOrder: 3 + fieldKey: properties + label: Event Properties + type: OBJECT + description: Properties of the event + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: f62di5DM2wHofaGrpoHLVc + sortOrder: 4 + fieldKey: enable_batching + label: Batch Data to Airship + type: BOOLEAN + description: >- + If true, Segment will batch events before sending to Airship. Limit 100 + events per request. + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fSfKToSfpjn2DLiHAzyTbv + name: Manage Tags + slug: manageTags + description: Associate tags with users in your audience for segmentation and automation + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: xpBNBVHiWithvtcnm3qMt + sortOrder: 0 + fieldKey: named_user_id + label: Airship Named User ID + type: STRING + description: The identifier assigned in Airship as the Named User + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: a1nJNAedgraKFzW9Xzkybq + sortOrder: 1 + fieldKey: tags + label: Tag Name + type: OBJECT + description: >- + Tag name to add or remove. Values for each tag should be boolean only. A + true value creates a tag, a false value removes a tag. Non-boolean + values will be ignored. + placeholder: '' + defaultValue: + '@path': $.traits.airship_tags + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 68JPYi4PkaCqGqYRMp8tyH + sortOrder: 2 + fieldKey: tag_group + label: Tag Group + type: STRING + description: >- + The Tag Group to sync your tags to. This defaults + to`segment-integration` but can be overridden with this field. Note: the + Tag Group used must be valid and exist in Airship. + placeholder: '' + defaultValue: segment-integration + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tx1U1iQjRFNAXgmfLWwEpi + name: Set Attributes + slug: setAttributes + description: >- + Set user attributes in Airship with data from Segment. Some common user + attributes are predefined in the attributes field, however note that all + must be created in Airship before use. More information here: + https://docs.airship.com/guides/messaging/user-guide/audience/segmentation/attributes/project/#adding-attributes + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" + fields: + - id: diid9CFKzZbQRmd7Tod5DE + sortOrder: 0 + fieldKey: named_user_id + label: Airship Named User ID + type: STRING + description: The identifier assigned in Airship as the Named User + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: te5V7Y5SRNLJFQzuL4eXfA + sortOrder: 1 + fieldKey: occurred + label: Occurred + type: DATETIME + description: When the Trait was set + placeholder: '' + defaultValue: + '@path': $.timestamp + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sPbn8P2hyM1cQUSHb5uF1q + sortOrder: 2 + fieldKey: attributes + label: Attributes + type: OBJECT + description: >- + User Attributes. Attributes should exist in Airship in order to be set, + including the predifined ones defaulted here. + placeholder: '' + defaultValue: + title: + '@path': $.traits.title + first_name: + '@path': $.traits.first_name + last_name: + '@path': $.traits.last_name + full_name: + '@path': $.traits.full_name + gender: + '@path': $.traits.gender + zipcode: + '@path': $.traits.address.postalCode + city: + '@path': $.traits.address.city + region: + '@path': $.traits.address.region + country: + '@path': $.traits.address.country + birthdate: + '@path': $.traits.birthday + age: + '@path': $.traits.age + mobile_phone: + '@path': $.traits.phone + home_phone: + '@path': $.traits.home_phone + work_phone: + '@path': $.traits.work_phone + loyalty_tier: + '@path': $.traits.loyalty_tier + company: + '@path': $.traits.company_name + username: + '@path': $.traits.username + account_creation: + '@path': $.traits.account_creation + email: + '@path': $.traits.email + altitude: + '@path': $.traits.altitude + latitude: + '@path': $.traits.latitude + longitude: + '@path': $.traits.longitude + advertising_id: + '@path': $.context.device.advertisingId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pSRMTY1CEMfvuNeRVVqatk + name: Register And Associate + slug: registerAndAssociate + description: >- + Register an Email address or SMS number and associate it with a Named User + ID. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event="Address Registered" + fields: + - id: 5azeauhonyQVRG9zVn3o4L + sortOrder: 0 + fieldKey: channel_type + label: Channel Type + type: STRING + description: Email (default) or SMS + placeholder: '' + defaultValue: email + required: false + multiple: false + choices: + - label: Email + value: email + - label: SMS + value: sms + dynamic: false + allowNull: false + - id: 7xN5QnxB9mKQzxGzudrQA5 + sortOrder: 1 + fieldKey: sms_sender + label: SMS Sender + type: STRING + description: >- + A long or short code the app is configured to send from (if using for + SMS). + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7zFwmZqX8CEHQ1jbqfAicB + sortOrder: 2 + fieldKey: named_user_id + label: Airship Named User ID + type: STRING + description: The identifier assigned in Airship as the Named User + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aGjEQFzRdrs54uxnMCzfVH + sortOrder: 3 + fieldKey: locale + label: Locale + type: STRING + description: Locale includes country and language + placeholder: '' + defaultValue: + '@path': $.context.locale + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7gkCPQqF3pRPZvuMPV6QVy + sortOrder: 4 + fieldKey: timezone + label: Timezone + type: STRING + description: Timezone + placeholder: '' + defaultValue: + '@path': $.context.timezone + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pJX7wM8j5BPR9FiQQbrjBG + sortOrder: 5 + fieldKey: opt_in_choices + label: Registration Type + type: STRING + description: Classic or Double + placeholder: '' + defaultValue: classic + required: false + multiple: false + choices: + - label: Classic + value: classic + - label: Double + value: double + dynamic: false + allowNull: false + - id: dRPDyXRei6bracVYYfvkqZ + sortOrder: 6 + fieldKey: channel_object + label: Channel + type: OBJECT + description: Information about the email registration. + placeholder: '' + defaultValue: + address: + '@path': $.properties.address + new_address: + '@path': $.properties.new_email + commercial_opted_in: + '@path': $.properties.commercial_opted_in + commercial_opted_out: + '@path': $.properties.commercial_opted_out + click_tracking_opted_in: + '@path': $.properties.click_tracking_opted_in + click_tracking_opted_out: + '@path': $.properties.click_tracking_opted_out + open_tracking_opted_in: + '@path': $.properties.open_tracking_opted_in + open_tracking_opted_out: + '@path': $.properties.open_tracking_opted_out + transactional_opted_in: + '@path': $.properties.transactional_opted_in + transactional_opted_out: + '@path': $.properties.transactional_opted_out + suppression_state: + '@path': $.context.suppression_state + sms_opted_in: + '@path': $.properties.sms_opted_in + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: eNkhQGgqJHnQg5vuAHXmQY + name: Custom Events + fields: + named_user_id: + '@path': $.userId + name: + '@path': $.event + occurred: + '@path': $.timestamp + properties: + '@path': $.properties + enable_batching: false + trigger: type = "track" + - actionId: tx1U1iQjRFNAXgmfLWwEpi + name: Set Attributes + fields: + named_user_id: + '@path': $.userId + occurred: + '@path': $.timestamp + attributes: + title: + '@path': $.traits.title + first_name: + '@path': $.traits.first_name + last_name: + '@path': $.traits.last_name + full_name: + '@path': $.traits.full_name + gender: + '@path': $.traits.gender + zipcode: + '@path': $.traits.address.postalCode + city: + '@path': $.traits.address.city + region: + '@path': $.traits.address.region + country: + '@path': $.traits.address.country + birthdate: + '@path': $.traits.birthday + age: + '@path': $.traits.age + mobile_phone: + '@path': $.traits.phone + home_phone: + '@path': $.traits.home_phone + work_phone: + '@path': $.traits.work_phone + loyalty_tier: + '@path': $.traits.loyalty_tier + company: + '@path': $.traits.company_name + username: + '@path': $.traits.username + account_creation: + '@path': $.traits.account_creation + email: + '@path': $.traits.email + altitude: + '@path': $.traits.altitude + latitude: + '@path': $.traits.latitude + longitude: + '@path': $.traits.longitude + advertising_id: + '@path': $.context.device.advertisingId + trigger: type = "identify" + partnerOwned: true +- id: 5fc76defdde39f67d4fa85de + display_name: Akita Customer Success + name: Akita Customer Success + slug: akita-user-tracking + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/akita-user-tracking + previous_names: + - Akita User Tracking + - Akita Customer Success + website: https://www.akitaapp.com + status: PUBLIC + categories: + - Customer Success + - Analytics + - CRM + logo: + url: https://cdn-devcenter.segment.com/c8b7a0f4-2bee-4b9c-b5bf-2f720bb1de82.svg + mark: + url: https://cdn-devcenter.segment.com/767dcab5-df80-4ac1-9aac-e31a54a26364.svg + methods: + track: true + identify: true + group: true + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + You can find your Segment.com API Key in Akita under Settings > + Segment.com. + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 54521fd525e721e32a72ee90 + display_name: Alexa + name: Alexa + slug: alexa + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/alexa + previous_names: + - Alexa + website: https://www.alexa.com + status: PUBLIC + categories: + - Analytics + logo: + url: https://cdn.filepicker.io/api/file/taHbRV4TsGP64UN7upNv + mark: + url: https://cdn.filepicker.io/api/file/jplK0HFyT5CKTc6FHkfP + methods: + track: false + identify: false + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-alexa + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: account + type: string + defaultValue: '' + description: >- + You can find your Account ID in the Javascript snippet, it appears as + `atrk_acct: 'XXXXXXX'`. + required: true + label: Account ID + - name: domain + type: string + defaultValue: '' + description: >- + You can find your Domain in the Javascript snippet, it appears as `domain: + 'example.com'` + required: true + label: Domain + actions: [] + presets: [] + partnerOwned: false +- id: 63e52bea7747fbc311d5b872 + display_name: Algolia Insights (Actions) + name: Algolia Insights (Actions) + slug: actions-algolia-insights + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-algolia-insights + previous_names: + - Algolia Insights (Actions) + website: https://www.algolia.com/ + status: PUBLIC + categories: + - Analytics + - Raw Data + logo: + url: https://cdn.filepicker.io/api/file/8XqmrEFSSnqEiXMGefJm + mark: + url: https://cdn.filepicker.io/api/file/0sVuW4wvTR2b9pPKP8rn + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: An API key which has write permissions to the Algolia Insights API + required: true + label: apiKey + - name: appId + type: string + defaultValue: '' + description: Your Algolia Application ID. + required: true + label: appId + - name: queryIdQueryStringName + type: string + defaultValue: queryID + description: >- + QueryString name you use for when storing the Algolia QueryID in a page + URL. + required: false + label: QueryID QueryString Name + actions: + - id: 2KEUSgKKYG2W82DdaBGsF4 + name: Conversion Events + slug: conversionEvents + description: >- + In ecommerce, conversions are purchase events often but not always + involving multiple products. Outside of a conversion can be any positive + signal associated with an index record. Query ID is optional and indicates + that the view events is the result of a search query. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Order Completed" + fields: + - id: jyYQsHrUC3z5aTkmmrpJsP + sortOrder: 0 + fieldKey: eventSubtype + label: Event Subtype + type: STRING + description: Sub-type of the event, "purchase" or "addToCart". + placeholder: '' + defaultValue: purchase + required: false + multiple: false + choices: + - label: Purchase + value: purchase + - label: Add To Cart + value: addToCart + dynamic: false + allowNull: false + - id: r1ajnZpoosrfWMKPEt11Aj + sortOrder: 1 + fieldKey: products + label: Product Details + type: OBJECT + description: >- + Populates the ObjectIDs field in the Algolia Insights API. An array of + objects representing the purchased items. Each object must contain a + product_id field. + placeholder: '' + defaultValue: + '@arrayPath': + - $.properties.products + - product_id: + '@path': $.product_id + price: + '@path': $.price + quantity: + '@path': $.quantity + discount: + '@path': $.discount + queryID: + '@path': $.queryID + required: true + multiple: true + choices: null + dynamic: false + allowNull: false + - id: bk1j5r61xNWoQwwywLrnor + sortOrder: 2 + fieldKey: index + label: Index + type: STRING + description: Name of the targeted search index. + placeholder: '' + defaultValue: + '@path': $.properties.search_index + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: akcPLa9TcmmKuwPbwUXZsq + sortOrder: 3 + fieldKey: queryID + label: Query ID + type: STRING + description: Query ID of the list on which the item was purchased. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: xzLoCGn2gHpSUyxeBfLenv + sortOrder: 4 + fieldKey: userToken + label: User Token + type: STRING + description: The ID associated with the user. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oYhL6BB1Kp8bS1zEtK25vD + sortOrder: 5 + fieldKey: timestamp + label: Timestamp + type: STRING + description: The timestamp of the event. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bWn4BApB8KTnwC862E1rKQ + sortOrder: 6 + fieldKey: value + label: Value + type: NUMBER + description: The value of the cart that is being converted. + placeholder: '' + defaultValue: + '@path': $.properties.value + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7Z1JEcXeSZZBrrvCSkmft8 + sortOrder: 7 + fieldKey: currency + label: Currency + type: STRING + description: >- + Currency of the objects associated with the event in 3-letter ISO 4217 + format. Required when `value` or `price` is set. + placeholder: '' + defaultValue: + '@path': $.properties.currency + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5u1aVjjqYbtv7RxfACpwfE + sortOrder: 8 + fieldKey: extraProperties + label: Extra Properties + type: OBJECT + description: >- + Additional fields for this event. This field may be useful for Algolia + Insights fields which are not mapped in Segment. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eHmtysvj6uaFsdLHvqyE2b + sortOrder: 9 + fieldKey: eventName + label: Event Name + type: STRING + description: The name of the event to send to Algolia. Defaults to 'Conversion Event' + placeholder: '' + defaultValue: Conversion Event + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3zPARwpa5CszETXSmqN9kg + sortOrder: 10 + fieldKey: eventType + label: Event Type + type: STRING + description: The type of event to send to Algolia. Defaults to 'conversion' + placeholder: '' + defaultValue: conversion + required: false + multiple: false + choices: + - label: View + value: view + - label: Conversion + value: conversion + - label: Click + value: click + dynamic: false + allowNull: false + - id: 63BBDy2TNprpH9uExRJKop + name: Product Viewed Events + slug: productViewedEvents + description: >- + Product view events act as a positive signal for associated record objects + — the associated Product ID. Query ID is optional and indicates that the + view events is the result of a search query. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Product Viewed" + fields: + - id: e56vXfr6pKJjDFgGCF6iCx + sortOrder: 0 + fieldKey: objectID + label: Product ID + type: STRING + description: Product ID of the clicked item. + placeholder: '' + defaultValue: + '@path': $.properties.product_id + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hYjGsna7UPmqX4BN1BJ5zo + sortOrder: 1 + fieldKey: index + label: Index + type: STRING + description: Name of the targeted search index. + placeholder: '' + defaultValue: + '@path': $.properties.search_index + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: dDtYnmTYZFDFQN7N947wvp + sortOrder: 2 + fieldKey: queryID + label: Query ID + type: STRING + description: Query ID of the list on which the item was viewed. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: adBN78A1KLgWJkHSi5maah + sortOrder: 3 + fieldKey: userToken + label: User Token + type: STRING + description: The ID associated with the user. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2MWUJEnJqfMF8n5x9CYtJg + sortOrder: 4 + fieldKey: timestamp + label: Timestamp + type: STRING + description: The timestamp of the event. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pGAFCyYUafTs9YxYDK2oz9 + sortOrder: 5 + fieldKey: extraProperties + label: Extra Properties + type: OBJECT + description: >- + Additional fields for this event. This field may be useful for Algolia + Insights fields which are not mapped in Segment. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cjsUEHEhiy42Yt4xy39rNM + sortOrder: 6 + fieldKey: eventName + label: Event Name + type: STRING + description: >- + The name of the event to be send to Algolia. Defaults to 'Product + Viewed' + placeholder: '' + defaultValue: Product Viewed + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3VXCJqtaYt49YGTUi9WNVK + sortOrder: 7 + fieldKey: eventType + label: Event Type + type: STRING + description: The type of event to send to Algolia. Defaults to 'view' + placeholder: '' + defaultValue: view + required: false + multiple: false + choices: + - label: view + value: view + - label: conversion + value: conversion + - label: click + value: click + dynamic: false + allowNull: false + - id: etbKXm8QsQyQAo83znMszn + name: Product Clicked Events + slug: productClickedEvents + description: >- + When a product is clicked within an Algolia Search, Recommend or Predict + result + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Product Clicked" + fields: + - id: 8LGqUWkJAkWrxrBGyUyBwQ + sortOrder: 0 + fieldKey: objectID + label: Product ID + type: STRING + description: >- + Populates the ObjectIds field in the Algolia Insights API. Product ID of + the clicked item. + placeholder: '' + defaultValue: + '@path': $.properties.product_id + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: b1V93CR2pWXssrVURST4Fq + sortOrder: 1 + fieldKey: index + label: Index + type: STRING + description: Name of the targeted search index. + placeholder: '' + defaultValue: + '@path': $.properties.search_index + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7iWzC63jRmjA6UaiecahtP + sortOrder: 2 + fieldKey: queryID + label: Query ID + type: STRING + description: Query ID of the list on which the item was clicked. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kmntVxdG5pSrQwAuABxa6P + sortOrder: 3 + fieldKey: position + label: Position + type: INTEGER + description: Position of the click in the list of Algolia search results. + placeholder: '' + defaultValue: + '@path': $.properties.position + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: feFBuZR1LriwvkDuQjzSsL + sortOrder: 4 + fieldKey: userToken + label: User Token + type: STRING + description: The ID associated with the user. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: b1pjQGZZyVse4MtLM9MU75 + sortOrder: 5 + fieldKey: timestamp + label: Timestamp + type: STRING + description: The timestamp of the event. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oRQ968LvhBcuifgcvMc1mG + sortOrder: 6 + fieldKey: extraProperties + label: Extra Properties + type: OBJECT + description: >- + Additional fields for this event. This field may be useful for Algolia + Insights fields which are not mapped in Segment. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 25b7CSZJB1z6BEDFReCiKt + sortOrder: 7 + fieldKey: eventName + label: Event Name + type: STRING + description: >- + The name of the event to be send to Algolia. Defaults to 'Product + Clicked' + placeholder: '' + defaultValue: Product Clicked + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jRBNsFkRhke4ZmyZdf9pej + sortOrder: 8 + fieldKey: eventType + label: Event Type + type: STRING + description: The type of event to send to Algolia. Defaults to 'click' + placeholder: '' + defaultValue: click + required: false + multiple: false + choices: + - label: view + value: view + - label: conversion + value: conversion + - label: click + value: click + dynamic: false + allowNull: false + - id: amxZNcsLHjUhJTRP5YHwaE + name: Product List Filtered Events + slug: productListFilteredEvents + description: When a product list is filtered within an Algolia Search + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Product List Filtered" + fields: + - id: rL2dr9rjCayRKrj4REtuGB + sortOrder: 0 + fieldKey: filters + label: Filters + type: OBJECT + description: >- + Populates the filters field in the Algolia Insights API, a list of up to + 10 facet filters. Field should be an array of strings with format + ${attribute}:${value}. + placeholder: '' + defaultValue: + '@arrayPath': + - $.properties.filters + - attribute: + '@path': $.attribute + value: + '@path': $.value + required: true + multiple: true + choices: null + dynamic: false + allowNull: false + - id: byjxTdgpbCLjGuPdKvhA2A + sortOrder: 1 + fieldKey: index + label: Index + type: STRING + description: Name of the targeted search index. + placeholder: '' + defaultValue: + '@path': $.properties.search_index + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5mRcubZda23iwBzDJGAePJ + sortOrder: 2 + fieldKey: queryID + label: Query ID + type: STRING + description: Query ID of the list on which the item was clicked. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9sE5aPsZYb7c2NB5ALs784 + sortOrder: 3 + fieldKey: userToken + label: User Token + type: STRING + description: The ID associated with the user. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: dT811KKgopaU1rYjgC69E4 + sortOrder: 4 + fieldKey: timestamp + label: Timestamp + type: STRING + description: The timestamp of the event. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uEEcggxFZwTRe4Nh1Xttny + sortOrder: 5 + fieldKey: extraProperties + label: Extra Properties + type: OBJECT + description: >- + Additional fields for this event. This field may be useful for Algolia + Insights fields which are not mapped in Segment. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vxtGErF73oypm77JmD22bG + sortOrder: 6 + fieldKey: eventName + label: Event Name + type: STRING + description: >- + The name of the event to be send to Algolia. Defaults to 'Product List + Filtered' + placeholder: '' + defaultValue: Product List Filtered + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: khMVMfBDSkQHqWHUuK8BLP + sortOrder: 7 + fieldKey: eventType + label: Event Type + type: STRING + description: The type of event to send to Algolia. Defaults to 'click' + placeholder: '' + defaultValue: click + required: false + multiple: false + choices: + - label: view + value: view + - label: conversion + value: conversion + - label: click + value: click + dynamic: false + allowNull: false + - id: jBtAWFiwa9ovR5HvbNDMbf + name: Product Added Events + slug: productAddedEvents + description: >- + Product added events for ecommerce use cases for a customer adding an item + to their cart. Query ID is optional and indicates that the event was the + result of a search query. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Product Added" + fields: + - id: kM4ksMhSVgjF4KsyMXw3Sx + sortOrder: 0 + fieldKey: product + label: Product ID + type: STRING + description: >- + Populates the ObjectIds field in the Algolia Insights API with a single + ObjectId (productId) of the product added. + placeholder: '' + defaultValue: + '@path': $.properties.product_id + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ivdLsdCEXHGVRbEci3DLqA + sortOrder: 1 + fieldKey: index + label: Index + type: STRING + description: Name of the targeted search index. + placeholder: '' + defaultValue: + '@path': $.properties.search_index + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rVjDxhbfTdV369Mz8SJUx1 + sortOrder: 2 + fieldKey: queryID + label: Query ID + type: STRING + description: Query ID of the list on which the item was purchased. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3BJosBmTeXvEnBq2doC7o3 + sortOrder: 3 + fieldKey: userToken + label: User Token + type: STRING + description: The ID associated with the user. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gsWk1KjvZpH1EZQ19iMANd + sortOrder: 4 + fieldKey: timestamp + label: Timestamp + type: STRING + description: The timestamp of the event. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9kxdRNtGagtRS2Ux6vjc3R + sortOrder: 5 + fieldKey: extraProperties + label: Extra Properties + type: OBJECT + description: >- + Additional fields for this event. This field may be useful for Algolia + Insights fields which are not mapped in Segment. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nAtWL5z6umVFLiM5rMUYNs + sortOrder: 6 + fieldKey: eventName + label: Event Name + type: STRING + description: The name of the event to be send to Algolia. Defaults to 'Add to cart' + placeholder: '' + defaultValue: Add to cart + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ipYUnxWpDrfQxK4ciJ18KA + sortOrder: 7 + fieldKey: eventType + label: Event Type + type: STRING + description: The type of event to send to Algolia. Defaults to 'conversion' + placeholder: '' + defaultValue: conversion + required: false + multiple: false + choices: + - label: view + value: view + - label: conversion + value: conversion + - label: click + value: click + dynamic: false + allowNull: false + - id: pMj2PGgP2c3hHzLMae4iBb + name: Algolia Browser Plugin + slug: algoliaPlugin + description: Enriches all Segment payloads with the Algolia query_id value + platform: WEB + hidden: false + defaultTrigger: >- + type = "track" or type = "identify" or type = "page" or type = "group" or + type = "alias" + fields: [] + presets: + - actionId: 63BBDy2TNprpH9uExRJKop + name: Send product viewed events to Algolia + fields: + objectID: + '@path': $.properties.product_id + index: + '@path': $.properties.search_index + queryID: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + userToken: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + timestamp: + '@path': $.timestamp + extraProperties: + '@path': $.properties + eventName: Product Viewed + eventType: view + trigger: type = "track" and event = "Product Viewed" + - actionId: jBtAWFiwa9ovR5HvbNDMbf + name: Send product added events to Algolia + fields: + product: + '@path': $.properties.product_id + index: + '@path': $.properties.search_index + queryID: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + userToken: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + timestamp: + '@path': $.timestamp + extraProperties: + '@path': $.properties + eventName: Add to cart + eventType: conversion + trigger: type = "track" and event = "Product Added" + - actionId: pMj2PGgP2c3hHzLMae4iBb + name: Algolia Plugin + fields: {} + trigger: >- + type = "track" or type = "identify" or type = "group" or type = "page" or + type = "alias" + - actionId: etbKXm8QsQyQAo83znMszn + name: Send product clicked events to Algolia + fields: + objectID: + '@path': $.properties.product_id + index: + '@path': $.properties.search_index + queryID: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + position: + '@path': $.properties.position + userToken: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + timestamp: + '@path': $.timestamp + extraProperties: + '@path': $.properties + eventName: Product Clicked + eventType: click + trigger: type = "track" and event = "Product Clicked" + - actionId: amxZNcsLHjUhJTRP5YHwaE + name: Send product list filtered events to Algolia + fields: + filters: + '@arrayPath': + - $.properties.filters + - attribute: + '@path': $.attribute + value: + '@path': $.value + index: + '@path': $.properties.search_index + queryID: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + userToken: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + timestamp: + '@path': $.timestamp + extraProperties: + '@path': $.properties + eventName: Product List Filtered + eventType: click + trigger: type = "track" and event = "Product List Filtered" + - actionId: 2KEUSgKKYG2W82DdaBGsF4 + name: Send conversion events to Algolia + fields: + eventSubtype: purchase + products: + '@arrayPath': + - $.properties.products + - product_id: + '@path': $.product_id + price: + '@path': $.price + quantity: + '@path': $.quantity + discount: + '@path': $.discount + queryID: + '@path': $.queryID + index: + '@path': $.properties.search_index + queryID: + '@if': + exists: + '@path': $.properties.query_id + then: + '@path': $.properties.query_id + else: + '@path': $.integrations.Algolia Insights (Actions).query_id + userToken: + '@if': + exists: + '@path': $.userId + then: + '@path': $.userId + else: + '@path': $.anonymousId + timestamp: + '@path': $.timestamp + value: + '@path': $.properties.value + currency: + '@path': $.properties.currency + extraProperties: + '@path': $.properties + eventName: Conversion Event + eventType: conversion + trigger: type = "track" and event = "Order Completed" + partnerOwned: true +- id: 66543798b2fb3cb3e9ff992c + display_name: Amazon Ads DSP and AMC + name: Amazon Ads DSP and AMC + slug: amazon-ads-dsp-and-amc + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/amazon-ads-dsp-and-amc + previous_names: + - Amazon AMC (Actions) + - Amazon Ads DSP and AMC + website: http://www.segment.com + status: PUBLIC_BETA + categories: + - Advertising + logo: + url: https://cdn-devcenter.segment.com/279057de-f63a-49f3-80fd-de3a903af581.svg + mark: + url: https://cdn-devcenter.segment.com/564e1c7d-6786-4577-bc8a-19e8743ea875.svg + methods: + track: true + identify: false + group: false + alias: false + screen: false + page: false + platforms: + browser: false + mobile: false + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: false + mobile: false + server: true + settings: + - name: region + type: select + defaultValue: https://advertising-api.amazon.com + description: Region for API Endpoint, either NA, EU, FE. + required: true + label: Region + actions: + - id: 9FGKxx1284zUFJjNKw7sSW + name: Sync Audiences to DSP + slug: syncAudiencesToDSP + description: Sync audiences from Segment to Amazon Ads Audience. + platform: CLOUD + hidden: false + defaultTrigger: event = "Audience Entered" or event = "Audience Exited" + fields: + - id: kawQMtoPDTZx27SZYF1Z46 + sortOrder: 0 + fieldKey: event_name + label: Event Name + type: STRING + description: The name of the current Segment event. + placeholder: '' + defaultValue: + '@path': $.event + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aeVKbDYUFe7xMbQMA7EivT + sortOrder: 1 + fieldKey: externalUserId + label: External User ID + type: STRING + description: This is an external user identifier defined by data providers. + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hgisg8hPxg75JWQhmhFDoE + sortOrder: 2 + fieldKey: email + label: Email + type: STRING + description: User email address. Vaule will be hashed before sending to Amazon. + placeholder: '' + defaultValue: + '@path': $.properties.email + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ugagQe5ys9G2j9ngTdvnt4 + sortOrder: 3 + fieldKey: firstName + label: First name + type: STRING + description: User first name. Value will be hashed before sending to Amazon. + placeholder: '' + defaultValue: + '@path': $.properties.first_name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mhXc8nj8ZaspkaCrqDsSgN + sortOrder: 4 + fieldKey: lastName + label: Last name + type: STRING + description: User Last name. Value will be hashed before sending to Amazon. + placeholder: '' + defaultValue: + '@path': $.properties.last_name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eQjGhLuFurvpN8vWvMsaSB + sortOrder: 5 + fieldKey: phone + label: Phone + type: STRING + description: Phone Number. Value will be hashed before sending to Amazon. + placeholder: '' + defaultValue: + '@path': $.properties.phone + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jfzHHWK5wzxQMid6DBmDVi + sortOrder: 6 + fieldKey: postal + label: Postal + type: STRING + description: POstal Code. Value will be hashed before sending to Amazon. + placeholder: '' + defaultValue: + '@path': $.properties.postal + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: koD2foUTGjh4WitLYSjxAx + sortOrder: 7 + fieldKey: state + label: State + type: STRING + description: State Code. Value will be hashed before sending to Amazon. + placeholder: '' + defaultValue: + '@path': $.properties.state + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fT8bfgNCdyuukHZj9NkX8Y + sortOrder: 8 + fieldKey: city + label: City + type: STRING + description: City name. Value will be hashed before sending to Amazon. + placeholder: '' + defaultValue: + '@path': $.properties.city + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: p8S6eVvsmKfyL2QAPxuyi + sortOrder: 9 + fieldKey: address + label: Address + type: STRING + description: Address Code. Value will be hashed before sending to Amazon. + placeholder: '' + defaultValue: + '@path': $.properties.address + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ddHfoMAN3rmY9gEQbKf2Tb + sortOrder: 10 + fieldKey: audienceId + label: Audience ID + type: STRING + description: >- + A number value representing the Amazon audience identifier. This is the + identifier that is returned during audience creation. + placeholder: '' + defaultValue: + '@path': $.context.personas.external_audience_id + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: c6uHgx4cr5m4vtPRQbSXeo + sortOrder: 11 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: When enabled,segment will send data in batching + placeholder: '' + defaultValue: true + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cstGUi63MzkEdLUfZZzATk + sortOrder: 12 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: >- + Maximum number of events to include in each batch. Actual batch sizes + may be lower. + placeholder: '' + defaultValue: 10000 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: [] + partnerOwned: false +- id: 5d1994fb320116000112aa12 + display_name: Amazon EventBridge + name: Amazon EventBridge + slug: amazon-eventbridge + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/amazon-eventbridge + previous_names: + - Amazon EventBridge + website: https://aws.amazon.com/eventbridge + status: PUBLIC + categories: + - Raw Data + logo: + url: https://cdn.filepicker.io/api/file/dP7fEclnT0Gq6Rq2FIZC + mark: + url: https://cdn.filepicker.io/api/file/aOyvwBpXRUOoeEPETStK + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/amazon-eventbridge + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: accountId + type: string + defaultValue: '' + description: The ID of the AWS Account you'd like us to send data to. + required: true + label: AWS Account ID + - name: region + type: string + defaultValue: us-west-2 + description: The EventBridge Firehose AWS region key. + required: true + label: Region + actions: [] + presets: [] + partnerOwned: false +- id: 57da359580412f644ff33fb9 + display_name: Amazon Kinesis + name: Amazon Kinesis + slug: amazon-kinesis + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/amazon-kinesis + previous_names: + - Amazon Kinesis + website: https://aws.amazon.com/kinesis/streams/ + status: PUBLIC + categories: + - Analytics + - Raw Data + logo: + url: https://cdn.filepicker.io/api/file/qr7D6jkLQvd1KAJlY8Zp + mark: + url: https://cdn.filepicker.io/api/file/zLZbfcBeSZTfX4CsgBvA + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/amazon-kinesis + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: true + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: region + type: string + defaultValue: us-west-2 + description: The Kinesis Stream's AWS region key + required: true + label: AWS Kinesis Stream Region + - name: roleAddress + type: string + defaultValue: '' + description: >- + The address of the AWS role that will be writing to Kinesis (ex: + arn:aws:iam::874699288871:role/example-role) + required: false + label: Role Address + - name: secretId + type: string + defaultValue: '#SEGMENT_WORKSPACE_ID' + description: >- + The External ID to your IAM role. This value is read-only. Reach out to + support if you wish to change it. This value is also a secret and should + be treated as a password. + required: true + label: Secret ID (Read-Only) + - name: stream + type: string + defaultValue: '' + description: The Kinesis Stream Name + required: true + label: AWS Kinesis Stream Name + - name: useMessageId + type: boolean + defaultValue: false + description: >- + You can enable this option if you want to use the Segment generated + `messageId` for the **Partition Key**. If you have issues with too many + `provisionedthroughputexceededexceptions` errors, this means that your + Segment events are not being evenly distributed across your buckets as you + do not have even user event distribution (*default partition key is + `userId` or `anonymousId`*). This option should provide much more stable + and even distribution. + required: false + label: Use Segment Message ID + actions: [] + presets: [] + partnerOwned: false +- id: 59022a2270a3e552b955caa9 + display_name: Amazon Kinesis Firehose + name: Amazon Kinesis Firehose + slug: amazon-kinesis-firehose + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/amazon-kinesis-firehose + previous_names: + - Amazon Kinesis Firehose + website: https://aws.amazon.com/kinesis/firehose/ + status: PUBLIC + categories: + - Analytics + - Raw Data + logo: + url: https://cdn.filepicker.io/api/file/dwrqx5y3SkWpwizgNrsA + mark: + url: https://cdn.filepicker.io/api/file/nIQL5EGWQqe7MIMWO0kX + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/amazon-kinesis-firehose + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: true + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: mappedStreams + type: mixed + defaultValue: [] + description: >- + Please input the Segment **event names** or **event types** on the left + and the desired Firehose delivery stream destinations on the right. This + mapping is required for all events you would like in Firehose + required: false + label: Map Segment Events to Firehose Delivery Streams + - name: region + type: string + defaultValue: us-west-2 + description: The Kinesis Firehose AWS region key + required: true + label: AWS Kinesis Firehose Region + - name: roleAddress + type: string + defaultValue: '' + description: >- + The address of the AWS role that will be writing to Kinesis Firehose (ex: + arn:aws:iam::874699288871:role/example-role) + required: true + label: Role Address + - name: secretId + type: string + defaultValue: '#SEGMENT_WORKSPACE_ID' + description: >- + The External ID to your IAM role. This value is read-only. Reach out to + support if you wish to change it. This value is also a secret and should + be treated as a password. + required: true + label: Secret ID (Read-Only) + actions: [] + presets: [] + partnerOwned: false +- id: 5c86f0512f5eb100013d570b + display_name: Amazon Lambda + name: Amazon Lambda + slug: amazon-lambda + hidden: false + endpoints: + - US + regions: + - eu-west-1 + - us-west-2 + url: connections/destinations/catalog/amazon-lambda + previous_names: + - Amazon Lambda + website: https://aws.amazon.com/lambda/ + status: PUBLIC + categories: + - Raw Data + logo: + url: https://cdn.filepicker.io/api/file/4R854M1aSqS8Ulpmzs6v + mark: + url: https://cdn.filepicker.io/api/file/gRmECESRRZiqkIxjbjeq + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/amazon-lambda + owner: SEGMENT + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: clientContext + type: map + defaultValue: {} + description: >- + An optional map to pass to the Lambda function. See [AWS Lambda + documentation](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax) + for more information. + required: false + label: Client Context + - name: externalId + type: string + defaultValue: '#SEGMENT_WORKSPACE_ID' + description: >- + This is an optional string Segment will use to assume the role provided to + invoke the Lambda function. If this setting is not defined, we'll use the + Source ID. This value is read-only. Reach out to support if you wish to + change it. For more information about external IDs while assuming AWS + roles, check + [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html). + required: false + label: External ID (Read-Only) + - name: function + type: string + defaultValue: '' + description: >- + The name of the Lambda function to invoke. These are the supported name + formats: + + + * Function name (`my-function`) or with alias (`my-function:v1`). + + * Function ARN + (`arn:aws:lambda:us-west-2:123456789012:function:my-function`). + + * Partial ARN (`123456789012:function:my-function`). + + + You can append a version number or alias to any of the formats. + required: true + label: Lambda + - name: logType + type: select + defaultValue: '' + description: >- + Lambda [log + type](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax). + By default `None`. + + + Select `Tail` if you would like to see detailed logs in Cloud Watch. + required: false + label: Log Type + - name: region + type: string + defaultValue: '' + description: AWS Region where the lambda lives. E.G. `us-west-2`, `eu-west-3` + required: true + label: Region + - name: roleAddress + type: string + defaultValue: '' + description: >- + The address of the AWS role that will be invoking Lambda (ex: + `arn:aws:iam::874699288871:role/example-role`). + required: true + label: Role Address + actions: [] + presets: [] + partnerOwned: false +- id: 5c7f0c9879726100019cc56b + display_name: Amazon Personalize + name: Amazon Personalize + slug: amazon-personalize + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/amazon-personalize + previous_names: + - Amazon Personalize + website: https://aws.amazon.com/personalize/ + status: PUBLIC + categories: + - Personalization + logo: + url: https://cdn.filepicker.io/api/file/qlQiTGC9QVOAdSGSgvES + mark: + url: https://cdn.filepicker.io/api/file/xq0IiYdQL6fTigF2XkSC + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/amazon-personalize + owner: SEGMENT + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: clientContext + type: map + defaultValue: {} + description: >- + An optional map to pass to the Lambda function. See [AWS Lambda + documentation](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax) + for more information. + required: false + label: Client Context + - name: externalId + type: string + defaultValue: '#SEGMENT_WORKSPACE_ID' + description: >- + This is an optional string Segment will use to assume the role provided to + invoke the Lambda function. If this setting is not defined, we'll use the + Source ID. This value is read-only. Reach out to support if you wish to + change it. For more information about external IDs while assuming AWS + roles, check + [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html). + required: false + label: External ID (Read-Only) + - name: function + type: string + defaultValue: '' + description: >- + The name of the Lambda function to invoke. These are the supported name + formats: + + + * Function name (`my-function`) or with alias (`my-function:v1`). + + * Function ARN + (`arn:aws:lambda:us-west-2:123456789012:function:my-function`). + + * Partial ARN (`123456789012:function:my-function`). + + + You can append a version number or alias to any of the formats. + required: true + label: Lambda + - name: logType + type: select + defaultValue: '' + description: >- + Lambda [log + type](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax). + By default `None`. + + + Select `Tail` if you would like to see detailed logs in Cloud Watch. + required: false + label: Log Type + - name: region + type: string + defaultValue: '' + description: >- + AWS Region where the lambda lives. If it is not defined, we'll use + `us-west-2` by default. + required: false + label: Region + - name: roleAddress + type: string + defaultValue: '' + description: >- + The address of the AWS role that will be invoking Lambda (ex: + `arn:aws:iam::874699288871:role/example-role`). + required: true + label: Role Address + actions: [] + presets: [] + partnerOwned: false +- id: 573a3dfb80412f644ff13679 + display_name: Ambassador + name: Ambassador + slug: ambassador + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/ambassador + previous_names: + - Ambassador + website: https://www.getambassador.com/ + status: PUBLIC + categories: + - Referrals + logo: + url: https://cdn.filepicker.io/api/file/8lwqIeFzRE6lC6EalOZZ + mark: + url: https://cdn.filepicker.io/api/file/jQNYYdyGQGqLZ6sLPs41 + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/GetAmbassador/segment/blob/master/lib/index.js + owner: PARTNER + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: campaigns + type: text-map + defaultValue: {} + description: >- + Each campaign runs at a specific url like /share or /invite. Map that url + on the left to the Ambassador campaign for that page on the right. + required: false + label: Campaigns + - name: events + type: text-map + defaultValue: {} + description: >- + A mapping of custom events you'd like to pass through to Ambassador to the + corresponding Ambassador event type. For example, if you want to track an + Ambassador conversion, add your event name on the left and "conversion" on + the right. + required: false + label: Events + - name: uid + type: string + defaultValue: '' + description: >- + You can find your Client ID in your Ambassador dashboard by clicking on + Editor in the navigation pane along the left-hand side of the page. On the + following page, click the 'Here you go' link next to 'Need the code + snippet or credentials?' and copy the value shown under ID. It should be + 32 characters long, and look something like this: + 012345ab-c0d1-110e-1f0g-h1234ij5kl6m. + required: true + label: Client ID + actions: [] + presets: [] + partnerOwned: true +- id: 62274854b16140600b51d1cd + display_name: Amberflo + name: Amberflo + slug: amberflo + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/amberflo + previous_names: + - Amberflo + website: https://amberflo.io + status: PUBLIC + categories: + - Analytics + - CRM + - Deep Linking + logo: + url: https://cdn.filepicker.io/api/file/lRH58DiAQRyZkN2Fkhnc + mark: + url: https://cdn.filepicker.io/api/file/AgEt8EQiQXKrgcaTjSPE + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: Enter your Amberflo.io API Key + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 54521fd525e721e32a72ee91 + display_name: Amplitude + name: Amplitude + slug: amplitude + hidden: false + endpoints: + - US + - EU + regions: + - eu-west-1 + - us-west-2 + url: connections/destinations/catalog/amplitude + previous_names: + - Amplitude + website: http://amplitude.com + status: PUBLIC + categories: + - Analytics + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/amplitude-default.svg + mark: + url: https://cdn.filepicker.io/api/file/Nmj7LgOQR62rdAmlbnLO + methods: + track: true + identify: true + group: true + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/amplitude + owner: SEGMENT + type: BROWSER + - code: >- + https://github.com/segment-integrations/analytics-ios-integration-amplitude + owner: SEGMENT + type: IOS + - code: >- + https://github.com/segment-integrations/analytics-android-integration-amplitude + owner: SEGMENT + type: ANDROID + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/amplitude + owner: SEGMENT + type: SERVER + browserUnbundlingSupported: true + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: true + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + You can find your API Key on your Amplitude [Settings + page](https://amplitude.com/settings). + required: true + label: API Key + - name: appendFieldsToEventProps + type: text-map + defaultValue: {} + description: >- + Web Device-mode only. Configure event fields to be appended to + `event_props` for all track calls. For example, entering + `context.page.title` on the left and `pageTitle` on the right will set the + value of `context.page.title` at `event_properties.pageTitle`. + required: false + label: Append Fields To Event Properties + - name: batchEvents + type: boolean + defaultValue: false + description: >- + If true, events are batched together and uploaded only when the number of + unsent events is greater than or equal to `eventUploadThreshold` or after + `eventUploadPeriodMillis` milliseconds have passed since the first unsent + event was logged. + required: false + label: Batch Events + - name: deviceIdFromUrlParam + type: boolean + defaultValue: false + description: >- + If true, the SDK will parse device ID values from url parameter + `amp_device_id` if available. + required: false + label: Set Device ID From URL Parameter amp_device_id + - name: enableLocationListening + type: boolean + defaultValue: true + description: >- + Mobile Only. If a user has granted your app location permissions, enable + this setting so that the SDK will also grab the location of the user. + Amplitude will never prompt the user for location permission, so this must + be done by your app. + required: false + label: Enable Location Listening + - name: endpoint + type: select + defaultValue: '' + description: >- + Cloud-mode Only (will not work in device-mode). Choose the endpoint + corresponding to your region. + required: false + label: Endpoint + - name: eventUploadPeriodMillis + type: number + defaultValue: 30000 + description: >- + Amount of time in milliseconds that the SDK waits before uploading events + if `batchEvents` is `true`. + required: false + label: Event Upload Period Millis (for batching events) + - name: eventUploadThreshold + type: number + defaultValue: 30 + description: >- + Minimum number of events to batch together per request if `batchEvents` is + `true`. + required: false + label: Event Upload Threshold (for batching events) + - name: forceHttps + type: boolean + defaultValue: false + description: >- + If true, the events will always be uploaded to HTTPS endpoint. Otherwise + the SDK will use the embedding site's protocol. + required: false + label: Force Https + - name: groupTypeTrait + type: string + defaultValue: '' + description: >- + What trait Segment should use as your Amplitude "group type" in group + calls. If, for example, you set this to be `industry`, then + `traits["industry"]` will be sent as `groupType` to Amplitude. + required: false + label: Group Type Trait + - name: groupValueTrait + type: string + defaultValue: '' + description: >- + What trait Segment should use as your Amplitude "group value" in group + calls. If, for example, you set this to be `plan`, then `traits["plan"]` + will be sent as `groupValue` to Amplitude. + required: false + label: Group Value Trait + - name: mapQueryParams + type: map + defaultValue: {} + description: >- + When sending data via server side or Cloud Mode, you can send the custom + query params that are automatically collected by `analytics.js` (or + whatever you manually send under `context.page.search`), by entering a + custom property name you would like to map that under on the left hand + side. On the right hand side, please choose whether you want the query + params to be set on the user profile or event metadata level. Whatever you + put on the left hand side we will map the entire query parameters string + from the `context.page.search`. + required: false + label: Map Query Params to Custom Property + - name: preferAnonymousIdForDeviceId + type: boolean + defaultValue: false + description: >- + By default, Segment will use `context.device.id` as the Amplitude + `device_id`, using `anonymousId` if `context.device.id` isn't present. + + + Enable this setting to flip this behavior; `anonymousId` will be used as + the `device_id`, falling back to `context.device.id` if it isn't present. + + + In browsers, enabling this setting means the user's anonymous ID, which + you can set using `analytics.user().anonymousId('ID_GOES_HERE')`, will be + set as the Amplitude device ID. Otherwise, Amplitude's default logic for + determining device IDs will be used. + required: false + label: Prefer Anonymous ID for Device ID + - name: saveParamsReferrerOncePerSession + type: boolean + defaultValue: true + description: >- + If true then includeGclid, includeReferrer, and includeUtm will only track + their respective properties once per session. New values that come in + during the middle of the user's session will be ignored. Set to false to + always capture new values. + required: false + label: Save Referrer, URL Params, GCLID Once Per Session + - name: secretKey + type: string + defaultValue: '' + description: Your Amplitude Secret Key (Only needed for user deletion) + required: false + label: Secret Key + - name: sendAlias + type: boolean + defaultValue: false + description: >- + Server-Side Only. Enabling this setting allows your Amplitude destination + instance to send `alias` events to Amplitude's `usermap` endpoint. By + default, Segment's Amplitude integration does not support `alias`, so when + this setting is disabled, your Segment Amplitude destination will reject + `alias` events as unsupported. + required: false + label: Enable Alias + - name: sendToBatchEndpoint + type: boolean + defaultValue: false + description: >- + Server-Side Only. If true, events are sent to Amplitude's `batch` endpoint + rather than to their `httpapi` endpoint. Because Amplitude's `batch` + endpoint throttles traffic less restrictively than the Amplitude `httpapi` + endpoint, enabling this setting may help to reduce 429s - or throttling + errors - from Amplitude. Amplitude's `batch` endpoint throttles data only + when the rate of events sharing the same `user_id` or `device_id` exceeds + an average of 1,000/second over a 30-second period. More information about + Amplitude's throttling is available here in their docs: + https://developers.amplitude.com/#429s-in-depth. + required: false + label: Send To Batch Endpoint + - name: trackAllPages + type: boolean + defaultValue: false + description: >- + This will track **Loaded a Page** events to Amplitude for all [`page` + method](https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#page) + calls. We keep this disabled by default, since Amplitude isn't generally + used for pageview tracking. + required: false + label: Track All Pages to Amplitude + - name: trackAllPagesV2 + type: boolean + defaultValue: false + description: >- + Mobile only. Sends a "Loaded Screen" event and the screen name as a + property to Amplitude. Moving forward, this is the preferred method of + tracking screen events in Amplitude. + required: false + label: Track All Screens + - name: trackCategorizedPages + type: boolean + defaultValue: true + description: >- + This will track events to Amplitude for [`page` + method](https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#page) + calls that have a `category` associated with them. For example + `page('Docs', 'Index')` would translate to **Viewed Docs Page**. + required: false + label: Track Categorized Pages to Amplitude + - name: trackGclid + type: boolean + defaultValue: false + description: >- + If true, captures the gclid url parameter as well as the user's + initial_gclid via a set once operation. + required: false + label: Track GCLID + - name: trackNamedPages + type: boolean + defaultValue: true + description: >- + This will track events to Amplitude for [`page` + method](https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#page) + calls that have a `name` associated with them. For example + `page('Signup')` would translate to **Viewed Signup Page**. Remember that + `name` includes `category`, so `page('Conversion', 'Signup')` would + translate to a **Viewed Conversion Signup Page** event in Amplitude. + required: false + label: Track Named Pages to Amplitude + - name: trackProductsOnce + type: boolean + defaultValue: false + description: >- + *Beta feature* Amplitude recently added support to submit an array of + products on "Order Completed" events. If this setting is set to true, we + will send all the products in one single event to Amplitude. + required: false + label: Track products once + - name: trackReferrer + type: boolean + defaultValue: true + description: >- + Client Side Only - Enabling this will send referrer information as a user + property to Amplitude when you call Segment's `page` method. + required: false + label: Track Referrer to Amplitude + - name: trackRevenuePerProduct + type: boolean + defaultValue: false + description: >- + Client and server only. This setting allows you to specify whether you + would like to track an Amplitude Revenue event per individual product in a + user transaction or a single Revenue event for the combined revenue of all + products. This setting is only relevant if you are using our eCommerce + spec and passing us an Order Completed event with a list of products. + required: false + label: Track Revenue Per Product + - name: trackSessionEvents + type: boolean + defaultValue: false + description: >- + (Optional) This enables the sending of start and end session events for + mobile products. Amplitude's libraries track sessions automatically and + this option is not necessary for session tracking. + required: false + label: Track Session Events to Amplitude + - name: trackUtmProperties + type: boolean + defaultValue: true + description: >- + If Amplitude is connected in device-mode this will send the UTM properties + found in the querystring. If Amplitude is connected in cloud-mode this + will send the UTM properties found in the `context.campaign` object. + (Note: The Analytics.js library [automatically + collects](https://segment.com/docs/connections/spec/common/#context-fields-automatically-collected) + the `context.campaign` object) + required: false + label: Track UTM Properties to Amplitude. + - name: traitsToAppend + type: array + defaultValue: [] + description: >- + Server-Side and Mobile Only. Configure values to be appended to the user + property array via identify.traits. + required: false + label: Traits to Append + - name: traitsToIncrement + type: array + defaultValue: [] + description: >- + Configure `trait` to increment on identify. If the trait is present, it + will increment the trait given the numerical value passed in when you call + `identify` with the trait. + required: false + label: Traits To Increment + - name: traitsToPrepend + type: array + defaultValue: [] + description: >- + Server-Side and Mobile Only. Configure values to be prepended to the user + property array via identify.traits. + required: false + label: Traits to Prepend + - name: traitsToSetOnce + type: array + defaultValue: [] + description: >- + Server-Side and Mobile Only. Configure values to be set only once via + identify.traits. + required: false + label: Traits to Set Once + - name: unsetParamsReferrerOnNewSession + type: boolean + defaultValue: false + description: >- + If false, the existing referrer and `utm_parameter` values will be carried + through each new session. If set to true, the referrer and `utm_parameter` + user properties, which include `referrer`, `utm_source`, `utm_medium`, + `utm_campaign`, `utm_term`, and `utm_content`, will be set to null upon + instantiating a new session. **Note**: This only works if Track Referrer + or Track UTM Properties to Amplitude are set to true. + required: false + label: Unset Params Referrer On New Session + - name: useAdvertisingIdForDeviceId + type: boolean + defaultValue: false + description: >- + Mobile Only (will *not* work in cloud-mode). Allows users to use + advertisingIdentifier instead of identifierForVendor as the Device ID. + required: false + label: Use AdvertisingId for DeviceId + - name: useAmplitudeReferral + type: boolean + defaultValue: false + description: >- + Let Amplitude handle referral tracking behavior. If the "Save Referrer, + URL Params, GLCID Once Per Session" setting isn't giving the desired + behavior, this setting will fix it. Note: This setting may cause Amplitude + to not fully respect the "Prefer Anonymous ID for Device ID" setting + (Amplitude may set the device ID upon initialization before it gets set to + the proper Anonymous ID) if using Analytics.js 1.0. Consider [updating to + Analytics.js 2.0] + (https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/upgrade-to-ajs2/) + required: false + label: Use Amplitude Referral + - name: useCustomAmplitudeProperties + type: boolean + defaultValue: false + description: >- + Enable this option if you want to send additional 'language' and 'country' + parameters inside of event_properties. This is separate from the language + and country collected from your user's context. (For example, you want to + send the language that a video is played in). You can send these in your + properties, for example: `analytics.track('Video Played', {language: + 'Japanese'});` + required: false + label: Send Custom Language and Country Properties + - name: useLogRevenueV2 + type: boolean + defaultValue: true + description: >- + Use Amplitude's logRevenueV2 API, which allows for the tracking of event + properties with the revenue event. Track an event with "price" and + "quantity" properties, and it will log total revenue = price * quantity. + You may also set a revenueType property to designate the type of revenue + (ex: purchase, refund, etc). Negative prices can be used to indicate + revenue lost. + required: false + label: Use Log Revenue V2 API + - name: versionName + type: string + defaultValue: '' + description: >- + Optional. You can assign a version name for your page, and we'll send it + to Amplitude for more detailed events. + required: false + label: Version Name + actions: [] + presets: [] + partnerOwned: false +- id: 5f7dd6d21ad74f3842b1fc47 + display_name: Amplitude (Actions) + name: Amplitude (Actions) + slug: actions-amplitude + hidden: false + endpoints: + - US + - EU + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-amplitude + previous_names: + - Actions Amplitude + - Amplitude (Actions) + website: https://amplitude.com + status: PUBLIC + categories: + - Analytics + logo: + url: https://cdn.filepicker.io/api/file/8UzztuUuSF6SRsmBpeKD + mark: + url: https://cdn.filepicker.io/api/file/KXuj6fcQA68tuErTvke5 + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + Amplitude project API key. You can find this key in the "General" tab of + your Amplitude project. + required: true + label: API Key + - name: endpoint + type: select + defaultValue: north_america + description: The region to send your data. + required: false + label: Endpoint Region + - name: secretKey + type: string + defaultValue: '' + description: >- + Amplitude project secret key. You can find this key in the "General" tab + of your Amplitude project. + required: true + label: Secret Key + actions: + - id: 73fYepkVc7sR2y9e3rPToi + name: Map User + slug: mapUser + description: >- + Merge two users together that would otherwise have different User IDs + tracked in Amplitude. + platform: CLOUD + hidden: false + defaultTrigger: type = "alias" + fields: + - id: 78UuK5oNmjEV2UcT1uVEfK + sortOrder: 0 + fieldKey: user_id + label: User ID + type: STRING + description: The User ID to be associated. + placeholder: '' + defaultValue: + '@path': $.previousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fyfUzMS8iFsPPjZhwoTfeP + sortOrder: 1 + fieldKey: global_user_id + label: Global User ID + type: STRING + description: The Global User ID to associate with the User ID. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3Tcmy2qajRDigXJvQwP2wu + sortOrder: 2 + fieldKey: min_id_length + label: Minimum ID Length + type: INTEGER + description: >- + Amplitude has a default minimum id length (`min_id_length`) of 5 + characters for user_id and device_id fields. This field allows the + minimum to be overridden to allow shorter id lengths. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: 9STyJcVfDee2NowS4DGdmW + name: Identify User + slug: identifyUser + description: >- + Set the user ID for a particular device ID or update user properties + without sending an event to Amplitude. + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" + fields: + - id: unsHRAM8mCMCw1KQQr3ey9 + sortOrder: 0 + fieldKey: user_id + label: User ID + type: STRING + description: >- + A UUID (unique user ID) specified by you. **Note:** If you send a + request with a user ID that is not in the Amplitude system yet, then the + user tied to that ID will not be marked new until their first event. + Required unless device ID is present. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: bcqiZWsCXZTM3aFTYJwf7b + sortOrder: 1 + fieldKey: device_id + label: Device ID + type: STRING + description: >- + A device specific identifier, such as the Identifier for Vendor (IDFV) + on iOS. Required unless user ID is present. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: n9k6PkbSZ9W9Prfkv69ZfP + sortOrder: 2 + fieldKey: user_properties + label: User Properties + type: OBJECT + description: >- + Additional data tied to the user in Amplitude. Each distinct value will + show up as a user segment on the Amplitude dashboard. Object depth may + not exceed 40 layers. **Note:** You can store property values in an + array and date values are transformed into string values. + placeholder: '' + defaultValue: + '@path': $.traits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jZdBkTLGLYaLenFR996Ein + sortOrder: 3 + fieldKey: groups + label: Groups + type: OBJECT + description: >- + Groups of users for Amplitude's account-level reporting feature. Note: + You can only track up to 5 groups. Any groups past that threshold will + not be tracked. **Note:** This feature is only available to Amplitude + Enterprise customers who have purchased the Amplitude Accounts add-on. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: xqQCfSmnmnZrBRn3ZLkkxi + sortOrder: 4 + fieldKey: app_version + label: App Version + type: STRING + description: Version of the app the user is on. + placeholder: '' + defaultValue: + '@path': $.context.app.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: smG9pGTTde2x8xXGxBZhPf + sortOrder: 5 + fieldKey: platform + label: Platform + type: STRING + description: The platform of the user's device. + placeholder: '' + defaultValue: + '@path': $.context.device.type + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cn1wMeCtVusE5yGPaLTStM + sortOrder: 6 + fieldKey: os_name + label: OS Name + type: STRING + description: The mobile operating system or browser of the user's device. + placeholder: '' + defaultValue: + '@path': $.context.os.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gAtCGfn9PxcJ1XxCmQxoMi + sortOrder: 7 + fieldKey: os_version + label: OS Version + type: STRING + description: >- + The version of the mobile operating system or browser of the user's + device. + placeholder: '' + defaultValue: + '@path': $.context.os.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vPw4WG1xNUwc99TAjtvPKW + sortOrder: 8 + fieldKey: device_brand + label: Device Brand + type: STRING + description: The brand of user's the device. + placeholder: '' + defaultValue: + '@path': $.context.device.brand + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qMuX3i3D3DjEYiXxiKkCNi + sortOrder: 9 + fieldKey: device_manufacturer + label: Device Manufacturer + type: STRING + description: The manufacturer of the user's device. + placeholder: '' + defaultValue: + '@path': $.context.device.manufacturer + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: k4NswHREFhGHgtbNE8LWu2 + sortOrder: 10 + fieldKey: device_model + label: Device Model + type: STRING + description: The model of the user's device. + placeholder: '' + defaultValue: + '@path': $.context.device.model + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vRJDDro32LUhkv9HQJ5sYm + sortOrder: 11 + fieldKey: carrier + label: Carrier + type: STRING + description: The user's mobile carrier. + placeholder: '' + defaultValue: + '@path': $.context.network.carrier + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oPrzg4hhtc3YjYH4wrbZBc + sortOrder: 12 + fieldKey: country + label: Country + type: STRING + description: The country in which the user is located. + placeholder: '' + defaultValue: + '@path': $.context.location.country + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: s9mV4X6saFFGtj3tRQCm8R + sortOrder: 13 + fieldKey: region + label: Region + type: STRING + description: The geographical region in which the user is located. + placeholder: '' + defaultValue: + '@path': $.context.location.region + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nddgscZ9sn6R8dzze5p3Qx + sortOrder: 14 + fieldKey: city + label: City + type: STRING + description: The city in which the user is located. + placeholder: '' + defaultValue: + '@path': $.context.location.city + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mVF9s2nJoRvzj1J1Vh8QMU + sortOrder: 15 + fieldKey: dma + label: Designated Market Area + type: STRING + description: The Designated Market Area in which the user is located. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2LWzezW2LsUBwid1jVzAZY + sortOrder: 16 + fieldKey: language + label: Language + type: STRING + description: Language the user has set on their device or browser. + placeholder: '' + defaultValue: + '@path': $.context.locale + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oWcrBMiGgEUnsVfhjf6Q8v + sortOrder: 17 + fieldKey: paying + label: Is Paying + type: BOOLEAN + description: Whether the user is paying or not. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tmEAe5g9C6yRj2STUft45F + sortOrder: 18 + fieldKey: start_version + label: Initial Version + type: STRING + description: The version of the app the user was first on. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tZrNdnE6LGXFKnPMM7yAyE + sortOrder: 19 + fieldKey: insert_id + label: Insert ID + type: STRING + description: >- + Amplitude will deduplicate subsequent events sent with this ID we have + already seen before within the past 7 days. Amplitude recommends + generating a UUID or using some combination of device ID, user ID, event + type, event ID, and time. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wew3AmqGiRGXCViiPYZRXL + sortOrder: 20 + fieldKey: userAgent + label: User Agent + type: STRING + description: The user agent of the device sending the event. + placeholder: '' + defaultValue: + '@path': $.context.userAgent + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: r4e6wDsjmZheXwoHDsCgxL + sortOrder: 21 + fieldKey: userAgentParsing + label: User Agent Parsing + type: BOOLEAN + description: >- + Enabling this setting will set the Device manufacturer, Device Model and + OS Name properties based on the user agent string provided in the + userAgent field + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: BP9zd8yKy7dSmmnWPw22b + sortOrder: 22 + fieldKey: utm_properties + label: UTM Properties + type: OBJECT + description: UTM Tracking Properties + placeholder: '' + defaultValue: + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8sacaxvFCvqckoH4DrJr8S + sortOrder: 23 + fieldKey: referrer + label: Referrer + type: STRING + description: >- + The referrer of the web request. Sent to Amplitude as both last touch + “referrer” and first touch “initial_referrer” + placeholder: '' + defaultValue: + '@path': $.context.page.referrer + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6VghAi83hSGK5hh5XHckSv + sortOrder: 24 + fieldKey: min_id_length + label: Minimum ID Length + type: INTEGER + description: >- + Amplitude has a default minimum id length of 5 characters for user_id + and device_id fields. This field allows the minimum to be overridden to + allow shorter id lengths. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: dp8p3BGtFMPeM5zmyBsrTZ + sortOrder: 25 + fieldKey: library + label: Library + type: STRING + description: The name of the library that generated the event. + placeholder: '' + defaultValue: + '@path': $.context.library.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: d8gFkEY4JAp1QEtBj4mVLt + sortOrder: 26 + fieldKey: userAgentData + label: User Agent Data + type: OBJECT + description: The user agent data of device sending the event + placeholder: '' + defaultValue: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gA673j6ij2yCB8n9Fztpj9 + name: Log Event + slug: logEvent + description: Send an event to Amplitude. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" + fields: + - id: 5VoTSe9iRNKHop3icgNxFF + sortOrder: 0 + fieldKey: user_id + label: User ID + type: STRING + description: >- + A readable ID specified by you. Must have a minimum length of 5 + characters. Required unless device ID is present. **Note:** If you send + a request with a user ID that is not in the Amplitude system yet, then + the user tied to that ID will not be marked new until their first event. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: iofepHRVnWb16oUDyjyF2G + sortOrder: 1 + fieldKey: device_id + label: Device ID + type: STRING + description: >- + A device-specific identifier, such as the Identifier for Vendor on iOS. + Required unless user ID is present. If a device ID is not sent with the + event, it will be set to a hashed version of the user ID. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: t6owMUHyrNLtjosYdAVajy + sortOrder: 2 + fieldKey: event_type + label: Event Type + type: STRING + description: A unique identifier for your event. + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: k9Ks5DFRR9boc2vMzTTDhx + sortOrder: 3 + fieldKey: session_id + label: Session ID + type: DATETIME + description: >- + The start time of the session, necessary if you want to associate events + with a particular system. To use automatic Amplitude session tracking in + browsers, enable Analytics 2.0 on your connected source. + placeholder: '' + defaultValue: + '@path': $.integrations.Actions Amplitude.session_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mrN4o5mphVYXykkypR2xKp + sortOrder: 4 + fieldKey: time + label: Timestamp + type: DATETIME + description: >- + The timestamp of the event. If time is not sent with the event, it will + be set to the request upload time. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ufW4FmA1JY6MVVSvpMQcsd + sortOrder: 5 + fieldKey: event_properties + label: Event Properties + type: OBJECT + description: >- + An object of key-value pairs that represent additional data to be sent + along with the event. You can store property values in an array, but + note that Amplitude only supports one-dimensional arrays. Date values + are transformed into string values. Object depth may not exceed 40 + layers. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ue5HUusK4tR5KQDTmeqks6 + sortOrder: 6 + fieldKey: user_properties + label: User Properties + type: OBJECT + description: >- + An object of key-value pairs that represent additional data tied to the + user. You can store property values in an array, but note that Amplitude + only supports one-dimensional arrays. Date values are transformed into + string values. Object depth may not exceed 40 layers. + placeholder: '' + defaultValue: + '@path': $.traits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 32g9TxgB6PgztYGVrYBUhN + sortOrder: 7 + fieldKey: groups + label: Groups + type: OBJECT + description: >- + Groups of users for the event as an event-level group. You can only + track up to 5 groups. **Note:** This Amplitude feature is only available + to Enterprise customers who have purchased the Accounts add-on. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8zXeYPGJLSdTAwsJevsKuf + sortOrder: 8 + fieldKey: app_version + label: App Version + type: STRING + description: The current version of your application. + placeholder: '' + defaultValue: + '@path': $.context.app.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vx5UzmJJzUQGFJ1dFFExvg + sortOrder: 9 + fieldKey: platform + label: Platform + type: STRING + description: Platform of the device. + placeholder: '' + defaultValue: + '@path': $.context.device.type + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pU51am7SwxcGgUieyUHfQb + sortOrder: 10 + fieldKey: os_name + label: OS Name + type: STRING + description: >- + The name of the mobile operating system or browser that the user is + using. + placeholder: '' + defaultValue: + '@path': $.context.os.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jhxUqn5dV42itN5tdS7s1F + sortOrder: 11 + fieldKey: os_version + label: OS Version + type: STRING + description: The version of the mobile operating system or browser the user is using. + placeholder: '' + defaultValue: + '@path': $.context.os.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pU7hSztqVXZkZgpeZ3k1rf + sortOrder: 12 + fieldKey: device_brand + label: Device Brand + type: STRING + description: The device brand that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.brand + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gvVGQJdW68Ki34GG5tYLqJ + sortOrder: 13 + fieldKey: device_manufacturer + label: Device Manufacturer + type: STRING + description: The device manufacturer that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.manufacturer + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4gRUHPy9DeNgdHPAT4BjNF + sortOrder: 14 + fieldKey: device_model + label: Device Model + type: STRING + description: The device model that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.model + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4ifjhV9xh5nvF3H1KTDTrU + sortOrder: 15 + fieldKey: carrier + label: Carrier + type: STRING + description: The carrier that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.network.carrier + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4tPfSgexVJMhpvucbp3UTS + sortOrder: 16 + fieldKey: country + label: Country + type: STRING + description: The current country of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.country + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: dX6ezqzrw9EDAqYNtw2ca6 + sortOrder: 17 + fieldKey: region + label: Region + type: STRING + description: The current region of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.region + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: j6D6ktjyrSDYmGrJYXufop + sortOrder: 18 + fieldKey: city + label: City + type: STRING + description: The current city of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.city + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9XqY5tZ7NCXmqHT5xx5muV + sortOrder: 19 + fieldKey: dma + label: Designated Market Area + type: STRING + description: The current Designated Market Area of the user. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oHLfxWiAUxDu13sX6P61Sd + sortOrder: 20 + fieldKey: language + label: Language + type: STRING + description: The language set by the user. + placeholder: '' + defaultValue: + '@path': $.context.locale + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: u9c62eyKrqyES1tG8bGaGb + sortOrder: 21 + fieldKey: price + label: Price + type: NUMBER + description: >- + The price of the item purchased. Required for revenue data if the + revenue field is not sent. You can use negative values to indicate + refunds. + placeholder: '' + defaultValue: + '@path': $.properties.price + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kpX8Cddkb2JPDxJuCcckPr + sortOrder: 22 + fieldKey: quantity + label: Quantity + type: INTEGER + description: The quantity of the item purchased. Defaults to 1 if not specified. + placeholder: '' + defaultValue: + '@path': $.properties.quantity + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7PQb5MojKXWcshVidYYnct + sortOrder: 23 + fieldKey: revenue + label: Revenue + type: NUMBER + description: >- + Revenue = price * quantity. If you send all 3 fields of price, quantity, + and revenue, then (price * quantity) will be used as the revenue value. + You can use negative values to indicate refunds. **Note:** You will need + to explicitly set this if you are using the Amplitude in cloud-mode. + placeholder: '' + defaultValue: + '@path': $.properties.revenue + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: c8nZM9zjzbmousY2KNcMbV + sortOrder: 24 + fieldKey: productId + label: Product ID + type: STRING + description: >- + An identifier for the item purchased. You must send a price and quantity + or revenue with this field. + placeholder: '' + defaultValue: + '@path': $.properties.productId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vmWYNsEStvT6mHswBc3xKb + sortOrder: 25 + fieldKey: revenueType + label: Revenue Type + type: STRING + description: >- + The type of revenue for the item purchased. You must send a price and + quantity or revenue with this field. + placeholder: '' + defaultValue: + '@path': $.properties.revenueType + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sLn9rxUxLt3XVGRyVS3yRs + sortOrder: 26 + fieldKey: location_lat + label: Latitude + type: NUMBER + description: The current Latitude of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.latitude + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tZzPiFiuD3SvbxvXdjQThC + sortOrder: 27 + fieldKey: location_lng + label: Longtitude + type: NUMBER + description: The current Longitude of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.longitude + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 49ozMK7EH4pRZiPcK3jmWN + sortOrder: 28 + fieldKey: ip + label: IP Address + type: STRING + description: >- + The IP address of the user. Use "$remote" to use the IP address on the + upload request. Amplitude will use the IP address to reverse lookup a + user's location (city, country, region, and DMA). Amplitude has the + ability to drop the location and IP address from events once it reaches + our servers. You can submit a request to Amplitude's platform specialist + team here to configure this for you. + placeholder: '' + defaultValue: + '@path': $.context.ip + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9aQoi7Hkvc8Zkd7FkCiQFV + sortOrder: 29 + fieldKey: idfa + label: Identifier For Advertiser (IDFA) + type: STRING + description: Identifier for Advertiser. _(iOS)_ + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: a7HYB2yqpDXUedrCbjc6D + sortOrder: 30 + fieldKey: idfv + label: Identifier For Vendor (IDFV) + type: STRING + description: Identifier for Vendor. _(iOS)_ + placeholder: '' + defaultValue: + '@path': $.context.device.id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: e3y1TXpNZH1N86ZENGyeYa + sortOrder: 31 + fieldKey: adid + label: Google Play Services Advertising ID + type: STRING + description: Google Play Services advertising ID. _(Android)_ + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hebZDVKmnuX6xcGiwNph6p + sortOrder: 32 + fieldKey: android_id + label: Android ID + type: STRING + description: Android ID (not the advertising ID). _(Android)_ + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vRiJ8SjaQjcgqrA4tUeZwb + sortOrder: 33 + fieldKey: event_id + label: Event ID + type: INTEGER + description: >- + An incrementing counter to distinguish events with the same user ID and + timestamp from each other. Amplitude recommends you send an event ID, + increasing over time, especially if you expect events to occur + simultanenously. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: dhatzVAHCQhKYyRVFcioia + sortOrder: 34 + fieldKey: insert_id + label: Insert ID + type: STRING + description: >- + Amplitude will deduplicate subsequent events sent with this ID we have + already seen before within the past 7 days. Amplitude recommends + generating a UUID or using some combination of device ID, user ID, event + type, event ID, and time. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4pwR47WRerqp8ZTbc65TbB + sortOrder: 35 + fieldKey: library + label: Library + type: STRING + description: The name of the library that generated the event. + placeholder: '' + defaultValue: + '@path': $.context.library.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aCGvggeAfve1HngFrxxrK + sortOrder: 36 + fieldKey: products + label: Products + type: OBJECT + description: The list of products purchased. + placeholder: '' + defaultValue: + '@arrayPath': + - $.properties.products + - price: + '@path': price + revenue: + '@path': revenue + quantity: + '@path': quantity + productId: + '@path': productId + revenueType: + '@path': revenueType + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: 9wj3NPVmFy2poYEJ239JLi + sortOrder: 37 + fieldKey: use_batch_endpoint + label: Use Batch Endpoint + type: BOOLEAN + description: >- + If true, events are sent to Amplitude's `batch` endpoint rather than + their `httpapi` events endpoint. Enabling this setting may help reduce + 429s – or throttling errors – from Amplitude. More information about + Amplitude's throttling is available in [their + docs](https://developers.amplitude.com/docs/batch-event-upload-api#429s-in-depth). + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5dnsPHtyP4pLd1s7jYHRgi + sortOrder: 38 + fieldKey: userAgent + label: User Agent + type: STRING + description: The user agent of the device sending the event. + placeholder: '' + defaultValue: + '@path': $.context.userAgent + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iTDyug1LMFQjJKML3Dekf4 + sortOrder: 39 + fieldKey: userAgentParsing + label: User Agent Parsing + type: BOOLEAN + description: >- + Enabling this setting will set the Device manufacturer, Device Model and + OS Name properties based on the user agent string provided in the + userAgent field + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hskQUTKFwafJuf5u4aCKu2 + sortOrder: 40 + fieldKey: utm_properties + label: UTM Properties + type: OBJECT + description: UTM Tracking Properties + placeholder: '' + defaultValue: + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8WtrtZFJPAWJt1wy8ch1vu + sortOrder: 41 + fieldKey: referrer + label: Referrer + type: STRING + description: >- + The referrer of the web request. Sent to Amplitude as both last touch + “referrer” and first touch “initial_referrer” + placeholder: '' + defaultValue: + '@path': $.context.page.referrer + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aJhjtACGhYfE7Neoe18tty + sortOrder: 42 + fieldKey: min_id_length + label: Minimum ID Length + type: INTEGER + description: >- + Amplitude has a default minimum id lenght of 5 characters for user_id + and device_id fields. This field allows the minimum to be overridden to + allow shorter id lengths. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: 7SgBRVuexwZmK7npHv2jnK + sortOrder: 43 + fieldKey: userAgentData + label: User Agent Data + type: OBJECT + description: The user agent data of device sending the event + placeholder: '' + defaultValue: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hMC2cGnxZanH97kGbGUNQM + name: Group Identify User + slug: groupIdentifyUser + description: >- + Set or update properties of particular groups. Note that these updates + will only affect events going forward. + platform: CLOUD + hidden: false + defaultTrigger: type = "group" + fields: + - id: kjrKDMeGhunbQB9VUUFoaQ + sortOrder: 0 + fieldKey: user_id + label: User ID + type: STRING + description: >- + A UUID (unique user ID) specified by you. **Note:** If you send a + request with a user ID that is not in the Amplitude system yet, then the + user tied to that ID will not be marked new until their first event. + Required unless device ID is present. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: oEhNtHQRG7YBweP6tkFaqG + sortOrder: 1 + fieldKey: device_id + label: Device ID + type: STRING + description: >- + A device specific identifier, such as the Identifier for Vendor (IDFV) + on iOS. Required unless user ID is present. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pcy7M64Yzq7h4XtkL9AQUG + sortOrder: 2 + fieldKey: insert_id + label: Insert ID + type: STRING + description: >- + Amplitude will deduplicate subsequent events sent with this ID we have + already seen before within the past 7 days. Amplitude recommends + generating a UUID or using some combination of device ID, user ID, event + type, event ID, and time. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9nf9hGgS2cgPDd9wbvbmiW + sortOrder: 3 + fieldKey: time + label: Timestamp + type: STRING + description: >- + The timestamp of the event. If time is not sent with the event, it will + be set to the request upload time. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wFZtooBLmqU3j5UzxwyHaq + sortOrder: 4 + fieldKey: group_properties + label: Group Properties + type: OBJECT + description: Additional data tied to the group in Amplitude. + placeholder: '' + defaultValue: + '@path': $.traits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pQSR4meqYr5yvxADHyiCoF + sortOrder: 5 + fieldKey: group_type + label: Group Type + type: STRING + description: The type of the group + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uW6nYvHj5GMgF8Q7vMc1gP + sortOrder: 6 + fieldKey: group_value + label: Group Value + type: STRING + description: The value of the group + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: xjPDQ5E8z5yQkN8FgBSGeV + sortOrder: 7 + fieldKey: min_id_length + label: Minimum ID Length + type: INTEGER + description: >- + Amplitude has a default minimum id lenght of 5 characters for user_id + and device_id fields. This field allows the minimum to be overridden to + allow shorter id lengths. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: nhJa95SA9MXa3hi2Vm2acC + name: Session Plugin + slug: sessionId + description: >- + Generates a Session ID and attaches it to every Amplitude browser based + event. + platform: WEB + hidden: true + defaultTrigger: >- + type = "track" or type = "identify" or type = "group" or type = "page" or + type = "alias" + fields: + - id: vbYR85uVyxxe1sefX11LSv + sortOrder: 0 + fieldKey: sessionLength + label: Session Length + type: NUMBER + description: Time in milliseconds to be used before considering a session stale. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cRSyn3B292uKfxrpKwHRDY + name: Log Purchase + slug: logPurchase + description: Send an event to Amplitude. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" + fields: + - id: iSq3oV2y3cHLjEjdpEMXqV + sortOrder: 0 + fieldKey: trackRevenuePerProduct + label: Track Revenue Per Product + type: BOOLEAN + description: >- + When enabled, track revenue with each product within the event. When + disabled, track total revenue once for the event. + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cd2jTdZvrmQhX42msW9Wem + sortOrder: 1 + fieldKey: user_id + label: User ID + type: STRING + description: >- + A readable ID specified by you. Must have a minimum length of 5 + characters. Required unless device ID is present. **Note:** If you send + a request with a user ID that is not in the Amplitude system yet, then + the user tied to that ID will not be marked new until their first event. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: qfATkzgr4yFbW9cdAAbFws + sortOrder: 2 + fieldKey: device_id + label: Device ID + type: STRING + description: >- + A device-specific identifier, such as the Identifier for Vendor on iOS. + Required unless user ID is present. If a device ID is not sent with the + event, it will be set to a hashed version of the user ID. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vEh7YD46PfjGzrxnAjgy3u + sortOrder: 3 + fieldKey: event_type + label: Event Type + type: STRING + description: A unique identifier for your event. + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iotwLYi3nx1QdkSL17n3e + sortOrder: 4 + fieldKey: session_id + label: Session ID + type: DATETIME + description: >- + The start time of the session, necessary if you want to associate events + with a particular system. To use automatic Amplitude session tracking in + browsers, enable Analytics 2.0 on your connected source. + placeholder: '' + defaultValue: + '@path': $.integrations.Actions Amplitude.session_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vmNBhqFz1aTyoHmYwJr42W + sortOrder: 5 + fieldKey: time + label: Timestamp + type: DATETIME + description: >- + The timestamp of the event. If time is not sent with the event, it will + be set to the request upload time. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4fCwofaJVoCF7zrBw7i1ee + sortOrder: 6 + fieldKey: event_properties + label: Event Properties + type: OBJECT + description: >- + An object of key-value pairs that represent additional data to be sent + along with the event. You can store property values in an array, but + note that Amplitude only supports one-dimensional arrays. Date values + are transformed into string values. Object depth may not exceed 40 + layers. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: e3czS22sdVqScT6pksj9LW + sortOrder: 7 + fieldKey: user_properties + label: User Properties + type: OBJECT + description: >- + An object of key-value pairs that represent additional data tied to the + user. You can store property values in an array, but note that Amplitude + only supports one-dimensional arrays. Date values are transformed into + string values. Object depth may not exceed 40 layers. + placeholder: '' + defaultValue: + '@path': $.traits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hEL995KdjvsLpRUEmMpHb7 + sortOrder: 8 + fieldKey: groups + label: Groups + type: OBJECT + description: >- + Groups of users for the event as an event-level group. You can only + track up to 5 groups. **Note:** This Amplitude feature is only available + to Enterprise customers who have purchased the Accounts add-on. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nM3tJHi8oDLyi124DAmnUA + sortOrder: 9 + fieldKey: app_version + label: App Version + type: STRING + description: The current version of your application. + placeholder: '' + defaultValue: + '@path': $.context.app.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nWaCR8DFdGgZa3UGiSA7ms + sortOrder: 10 + fieldKey: platform + label: Platform + type: STRING + description: Platform of the device. + placeholder: '' + defaultValue: + '@path': $.context.device.type + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rs7jJKnTmabZGFeDRZuxP3 + sortOrder: 11 + fieldKey: os_name + label: OS Name + type: STRING + description: >- + The name of the mobile operating system or browser that the user is + using. + placeholder: '' + defaultValue: + '@path': $.context.os.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8vzAsEmaXuuXkGEKzLX4yH + sortOrder: 12 + fieldKey: os_version + label: OS Version + type: STRING + description: The version of the mobile operating system or browser the user is using. + placeholder: '' + defaultValue: + '@path': $.context.os.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qMHaBuTjjZtyEQ91fDEkf3 + sortOrder: 13 + fieldKey: device_brand + label: Device Brand + type: STRING + description: The device brand that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.brand + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 78TsLHbGKXaQfojFaFjwug + sortOrder: 14 + fieldKey: device_manufacturer + label: Device Manufacturer + type: STRING + description: The device manufacturer that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.manufacturer + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nxsSW2vZgnhxk4Yzd5122o + sortOrder: 15 + fieldKey: device_model + label: Device Model + type: STRING + description: The device model that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.model + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4kNovCHzKb87iteyoMqs4Q + sortOrder: 16 + fieldKey: carrier + label: Carrier + type: STRING + description: The carrier that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.network.carrier + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gntaAvC8qHb4VZAYftXcGa + sortOrder: 17 + fieldKey: country + label: Country + type: STRING + description: The current country of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.country + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qXmwXMn9geu2uwwk95eVa7 + sortOrder: 18 + fieldKey: region + label: Region + type: STRING + description: The current region of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.region + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hbAAKqqEg9Yow48gfXMzG1 + sortOrder: 19 + fieldKey: city + label: City + type: STRING + description: The current city of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.city + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: u72WbCeTwhsGmevYbsFKqo + sortOrder: 20 + fieldKey: dma + label: Designated Market Area + type: STRING + description: The current Designated Market Area of the user. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 97U9ZDHX2JgKVKM4rVZCBE + sortOrder: 21 + fieldKey: language + label: Language + type: STRING + description: The language set by the user. + placeholder: '' + defaultValue: + '@path': $.context.locale + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gnCDmqqyY2nEkzbM4g32P2 + sortOrder: 22 + fieldKey: price + label: Price + type: NUMBER + description: >- + The price of the item purchased. Required for revenue data if the + revenue field is not sent. You can use negative values to indicate + refunds. + placeholder: '' + defaultValue: + '@path': $.properties.price + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6TFZUabKyXzvCb6bb8Urhp + sortOrder: 23 + fieldKey: quantity + label: Quantity + type: INTEGER + description: The quantity of the item purchased. Defaults to 1 if not specified. + placeholder: '' + defaultValue: + '@path': $.properties.quantity + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kk7pMfHMy23ZKPpgX9jPXH + sortOrder: 24 + fieldKey: revenue + label: Revenue + type: NUMBER + description: >- + Revenue = price * quantity. If you send all 3 fields of price, quantity, + and revenue, then (price * quantity) will be used as the revenue value. + You can use negative values to indicate refunds. **Note:** You will need + to explicitly set this if you are using the Amplitude in cloud-mode. + placeholder: '' + defaultValue: + '@path': $.properties.revenue + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tGMeBJbTJ9C654wAcEodMZ + sortOrder: 25 + fieldKey: productId + label: Product ID + type: STRING + description: >- + An identifier for the item purchased. You must send a price and quantity + or revenue with this field. + placeholder: '' + defaultValue: + '@path': $.properties.productId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uodB72o5ZZng6NF1ea5zNx + sortOrder: 26 + fieldKey: revenueType + label: Revenue Type + type: STRING + description: >- + The type of revenue for the item purchased. You must send a price and + quantity or revenue with this field. + placeholder: '' + defaultValue: + '@path': $.properties.revenueType + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: acG7sYCHmy9S3A3FZHmYxd + sortOrder: 27 + fieldKey: location_lat + label: Latitude + type: NUMBER + description: The current Latitude of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.latitude + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: e92xGqgLMgwZQ6bvgotcrM + sortOrder: 28 + fieldKey: location_lng + label: Longtitude + type: NUMBER + description: The current Longitude of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.longitude + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mgvYRspznJ3uyhCqCJfmq8 + sortOrder: 29 + fieldKey: ip + label: IP Address + type: STRING + description: >- + The IP address of the user. Use "$remote" to use the IP address on the + upload request. Amplitude will use the IP address to reverse lookup a + user's location (city, country, region, and DMA). Amplitude has the + ability to drop the location and IP address from events once it reaches + our servers. You can submit a request to Amplitude's platform specialist + team here to configure this for you. + placeholder: '' + defaultValue: + '@path': $.context.ip + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: dBHL8zhYjiagXaFm8sg3F7 + sortOrder: 30 + fieldKey: idfa + label: Identifier For Advertiser (IDFA) + type: STRING + description: Identifier for Advertiser. _(iOS)_ + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sFucMdzFu16H2jChTJxsDd + sortOrder: 31 + fieldKey: idfv + label: Identifier For Vendor (IDFV) + type: STRING + description: Identifier for Vendor. _(iOS)_ + placeholder: '' + defaultValue: + '@path': $.context.device.id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gp1UbG7J7mzoCcuFZCicfr + sortOrder: 32 + fieldKey: adid + label: Google Play Services Advertising ID + type: STRING + description: Google Play Services advertising ID. _(Android)_ + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mBH61LQT9LBpx9BDtYKDTj + sortOrder: 33 + fieldKey: android_id + label: Android ID + type: STRING + description: Android ID (not the advertising ID). _(Android)_ + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2R6fLRpM7tuXBF92Te2SYe + sortOrder: 34 + fieldKey: event_id + label: Event ID + type: INTEGER + description: >- + An incrementing counter to distinguish events with the same user ID and + timestamp from each other. Amplitude recommends you send an event ID, + increasing over time, especially if you expect events to occur + simultanenously. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kJ4WyieCtBhADgvNznnVF3 + sortOrder: 35 + fieldKey: insert_id + label: Insert ID + type: STRING + description: >- + Amplitude will deduplicate subsequent events sent with this ID we have + already seen before within the past 7 days. Amplitude recommends + generating a UUID or using some combination of device ID, user ID, event + type, event ID, and time. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mudBeihDPxmEzvVxMskHrn + sortOrder: 36 + fieldKey: library + label: Library + type: STRING + description: The name of the library that generated the event. + placeholder: '' + defaultValue: + '@path': $.context.library.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5ZnrBU6GEyyNWsfoxuCRk7 + sortOrder: 37 + fieldKey: products + label: Products + type: OBJECT + description: The list of products purchased. + placeholder: '' + defaultValue: + '@arrayPath': + - $.properties.products + - price: + '@path': price + revenue: + '@path': revenue + quantity: + '@path': quantity + productId: + '@path': productId + revenueType: + '@path': revenueType + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: 8TwJzEGUS1CjTVicU7SeCh + sortOrder: 38 + fieldKey: use_batch_endpoint + label: Use Batch Endpoint + type: BOOLEAN + description: >- + If true, events are sent to Amplitude's `batch` endpoint rather than + their `httpapi` events endpoint. Enabling this setting may help reduce + 429s – or throttling errors – from Amplitude. More information about + Amplitude's throttling is available in [their + docs](https://developers.amplitude.com/docs/batch-event-upload-api#429s-in-depth). + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nb7bnbnhHg1P9dhHrRBzip + sortOrder: 39 + fieldKey: userAgent + label: User Agent + type: STRING + description: The user agent of the device sending the event. + placeholder: '' + defaultValue: + '@path': $.context.userAgent + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: n4kYFpQ9DgEcmcMYcc1Kv5 + sortOrder: 40 + fieldKey: userAgentParsing + label: User Agent Parsing + type: BOOLEAN + description: >- + Enabling this setting will set the Device manufacturer, Device Model and + OS Name properties based on the user agent string provided in the + userAgent field + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ezDSWC61bkTUMPJP1M7T6V + sortOrder: 41 + fieldKey: utm_properties + label: UTM Properties + type: OBJECT + description: UTM Tracking Properties + placeholder: '' + defaultValue: + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: i4UwWWzKFYpJDGLrHWkNjw + sortOrder: 42 + fieldKey: referrer + label: Referrer + type: STRING + description: >- + The referrer of the web request. Sent to Amplitude as both last touch + “referrer” and first touch “initial_referrer” + placeholder: '' + defaultValue: + '@path': $.context.page.referrer + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iNKcX6JvNm8d6ET199eY1S + sortOrder: 43 + fieldKey: min_id_length + label: Minimum ID Length + type: INTEGER + description: >- + Amplitude has a default minimum id lenght of 5 characters for user_id + and device_id fields. This field allows the minimum to be overridden to + allow shorter id lengths. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: eSyta9kGHHHpX1K4PFNb8b + sortOrder: 44 + fieldKey: userAgentData + label: User Agent Data + type: OBJECT + description: The user agent data of device sending the event + placeholder: '' + defaultValue: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uhprCN3Pc9fjb89v4xDrfP + name: Log Event V2 + slug: logEventV2 + description: Send an event to Amplitude + platform: CLOUD + hidden: false + defaultTrigger: type = "track" + fields: + - id: iPxFFXHfUCRbFPB9LCasUt + sortOrder: 0 + fieldKey: user_id + label: User ID + type: STRING + description: >- + A readable ID specified by you. Must have a minimum length of 5 + characters. Required unless device ID is present. **Note:** If you send + a request with a user ID that is not in the Amplitude system yet, then + the user tied to that ID will not be marked new until their first event. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: i9LxGbgmn7ii5dKorVjMd4 + sortOrder: 1 + fieldKey: device_id + label: Device ID + type: STRING + description: >- + A device-specific identifier, such as the Identifier for Vendor on iOS. + Required unless user ID is present. If a device ID is not sent with the + event, it will be set to a hashed version of the user ID. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nMQgPVSCLoJNZqhX9PBQLr + sortOrder: 2 + fieldKey: event_type + label: Event Type + type: STRING + description: A unique identifier for your event. + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: g9W28GELjsacZ6NXLX8Sof + sortOrder: 3 + fieldKey: session_id + label: Session ID + type: DATETIME + description: >- + The start time of the session, necessary if you want to associate events + with a particular system. To use automatic Amplitude session tracking in + browsers, enable Analytics 2.0 on your connected source. + placeholder: '' + defaultValue: + '@path': $.integrations.Actions Amplitude.session_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uf9CJD4pPbsmrdWEF7g38M + sortOrder: 4 + fieldKey: time + label: Timestamp + type: DATETIME + description: >- + The timestamp of the event. If time is not sent with the event, it will + be set to the request upload time. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fLNma8iiPyp1mFtAAMcmoC + sortOrder: 5 + fieldKey: event_properties + label: Event Properties + type: OBJECT + description: >- + An object of key-value pairs that represent additional data to be sent + along with the event. You can store property values in an array, but + note that Amplitude only supports one-dimensional arrays. Date values + are transformed into string values. Object depth may not exceed 40 + layers. + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9QuEwL44CTj7YtUPQWT6UH + sortOrder: 6 + fieldKey: user_properties + label: User Properties + type: OBJECT + description: >- + An object of key-value pairs that represent additional data tied to the + user. You can store property values in an array, but note that Amplitude + only supports one-dimensional arrays. Date values are transformed into + string values. Object depth may not exceed 40 layers. + placeholder: '' + defaultValue: + '@path': $.traits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: grpJt5s4t5DaKVzN4HjtEU + sortOrder: 7 + fieldKey: groups + label: Groups + type: OBJECT + description: >- + Groups of users for the event as an event-level group. You can only + track up to 5 groups. **Note:** This Amplitude feature is only available + to Enterprise customers who have purchased the Accounts add-on. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oBPojhpgLeudT6JYQRAh6r + sortOrder: 8 + fieldKey: app_version + label: App Version + type: STRING + description: The current version of your application. + placeholder: '' + defaultValue: + '@path': $.context.app.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4r4HhodjoRps5WtnqYj5R7 + sortOrder: 9 + fieldKey: platform + label: Platform + type: STRING + description: Platform of the device. + placeholder: '' + defaultValue: + '@path': $.context.device.type + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qo2LV9V6MSjUsnvBJfqz6z + sortOrder: 10 + fieldKey: os_name + label: OS Name + type: STRING + description: >- + The name of the mobile operating system or browser that the user is + using. + placeholder: '' + defaultValue: + '@path': $.context.os.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wHK9wUdEqBrvWUuU6P5J1N + sortOrder: 11 + fieldKey: os_version + label: OS Version + type: STRING + description: The version of the mobile operating system or browser the user is using. + placeholder: '' + defaultValue: + '@path': $.context.os.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tWfM3gAbQj935MjcaesVrA + sortOrder: 12 + fieldKey: device_brand + label: Device Brand + type: STRING + description: The device brand that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.brand + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: u1zzDfSuA9uHjwbwt9Zfb8 + sortOrder: 13 + fieldKey: device_manufacturer + label: Device Manufacturer + type: STRING + description: The device manufacturer that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.manufacturer + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nKbd2DNPSD9cLUozZtDeJY + sortOrder: 14 + fieldKey: device_model + label: Device Model + type: STRING + description: The device model that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.device.model + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2aeMH2ZyLSsjnpwQ3TYWxo + sortOrder: 15 + fieldKey: carrier + label: Carrier + type: STRING + description: The carrier that the user is using. + placeholder: '' + defaultValue: + '@path': $.context.network.carrier + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iKMfFuS4q8McfHUCudWDk3 + sortOrder: 16 + fieldKey: country + label: Country + type: STRING + description: The current country of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.country + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5gpZroDSc3MwsJoQZzjyxv + sortOrder: 17 + fieldKey: region + label: Region + type: STRING + description: The current region of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.region + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sskasb8jN2ijuRGz6UVSTS + sortOrder: 18 + fieldKey: city + label: City + type: STRING + description: The current city of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.city + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: r2w1fENjuMLZADPGNQs82z + sortOrder: 19 + fieldKey: dma + label: Designated Market Area + type: STRING + description: The current Designated Market Area of the user. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: xftHca9KocsdtqgPM8unC9 + sortOrder: 20 + fieldKey: language + label: Language + type: STRING + description: The language set by the user. + placeholder: '' + defaultValue: + '@path': $.context.locale + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7mBJKMywSZnZpByBFZHiE5 + sortOrder: 21 + fieldKey: price + label: Price + type: NUMBER + description: >- + The price of the item purchased. Required for revenue data if the + revenue field is not sent. You can use negative values to indicate + refunds. + placeholder: '' + defaultValue: + '@path': $.properties.price + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7SC8JjfaFNGPeadgiwLTnt + sortOrder: 22 + fieldKey: quantity + label: Quantity + type: INTEGER + description: The quantity of the item purchased. Defaults to 1 if not specified. + placeholder: '' + defaultValue: + '@path': $.properties.quantity + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iy5qd3oqgoqDnRQMGb66LG + sortOrder: 23 + fieldKey: revenue + label: Revenue + type: NUMBER + description: >- + Revenue = price * quantity. If you send all 3 fields of price, quantity, + and revenue, then (price * quantity) will be used as the revenue value. + You can use negative values to indicate refunds. **Note:** You will need + to explicitly set this if you are using the Amplitude in cloud-mode. + placeholder: '' + defaultValue: + '@path': $.properties.revenue + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iQQRGaZGK4LC1BWSziJuCZ + sortOrder: 24 + fieldKey: productId + label: Product ID + type: STRING + description: >- + An identifier for the item purchased. You must send a price and quantity + or revenue with this field. + placeholder: '' + defaultValue: + '@path': $.properties.productId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3vxQNUbQa1XsBM3vBfWP5E + sortOrder: 25 + fieldKey: revenueType + label: Revenue Type + type: STRING + description: >- + The type of revenue for the item purchased. You must send a price and + quantity or revenue with this field. + placeholder: '' + defaultValue: + '@path': $.properties.revenueType + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qYaDgqivRmcP7TP1DTRPpq + sortOrder: 26 + fieldKey: location_lat + label: Latitude + type: NUMBER + description: The current Latitude of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.latitude + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eeBqWrbG7RMa8rcfv4h2Fg + sortOrder: 27 + fieldKey: location_lng + label: Longtitude + type: NUMBER + description: The current Longitude of the user. + placeholder: '' + defaultValue: + '@path': $.context.location.longitude + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mRs6AuvVMeiLcLc35k9sKS + sortOrder: 28 + fieldKey: ip + label: IP Address + type: STRING + description: >- + The IP address of the user. Use "$remote" to use the IP address on the + upload request. Amplitude will use the IP address to reverse lookup a + user's location (city, country, region, and DMA). Amplitude has the + ability to drop the location and IP address from events once it reaches + our servers. You can submit a request to Amplitude's platform specialist + team here to configure this for you. + placeholder: '' + defaultValue: + '@path': $.context.ip + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qzBPrZry5RndFCBZqhgvCp + sortOrder: 29 + fieldKey: idfa + label: Identifier For Advertiser (IDFA) + type: STRING + description: Identifier for Advertiser. _(iOS)_ + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cDBno1EtjifJqzM9mA7m1a + sortOrder: 30 + fieldKey: idfv + label: Identifier For Vendor (IDFV) + type: STRING + description: Identifier for Vendor. _(iOS)_ + placeholder: '' + defaultValue: + '@path': $.context.device.id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wLkBX21xh4acrVKe5t3cqd + sortOrder: 31 + fieldKey: adid + label: Google Play Services Advertising ID + type: STRING + description: Google Play Services advertising ID. _(Android)_ + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tcRG711xc2ZYd6zP9aS9fZ + sortOrder: 32 + fieldKey: android_id + label: Android ID + type: STRING + description: Android ID (not the advertising ID). _(Android)_ + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oyRSrJL2HR9BHxeDDNnGE1 + sortOrder: 33 + fieldKey: event_id + label: Event ID + type: INTEGER + description: >- + An incrementing counter to distinguish events with the same user ID and + timestamp from each other. Amplitude recommends you send an event ID, + increasing over time, especially if you expect events to occur + simultanenously. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wmnFfjyvHdwTnZcsMomYmc + sortOrder: 34 + fieldKey: insert_id + label: Insert ID + type: STRING + description: >- + Amplitude will deduplicate subsequent events sent with this ID we have + already seen before within the past 7 days. Amplitude recommends + generating a UUID or using some combination of device ID, user ID, event + type, event ID, and time. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nmAfbbhBGMCRM7PKxRg5T3 + sortOrder: 35 + fieldKey: library + label: Library + type: STRING + description: The name of the library that generated the event. + placeholder: '' + defaultValue: + '@path': $.context.library.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bvwzUvmezJxQ5Xm2xYc8rJ + sortOrder: 36 + fieldKey: products + label: Products + type: OBJECT + description: The list of products purchased. + placeholder: '' + defaultValue: + '@arrayPath': + - $.properties.products + - price: + '@path': price + revenue: + '@path': revenue + quantity: + '@path': quantity + productId: + '@path': productId + revenueType: + '@path': revenueType + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: pQ16QD4AbBksWzzmJWtrn6 + sortOrder: 37 + fieldKey: setOnce + label: Set Once + type: OBJECT + description: >- + The following fields will be set only once per session when using AJS2 + as the source. + placeholder: '' + defaultValue: + initial_referrer: + '@path': $.context.page.referrer + initial_utm_source: + '@path': $.context.campaign.source + initial_utm_medium: + '@path': $.context.campaign.medium + initial_utm_campaign: + '@path': $.context.campaign.name + initial_utm_term: + '@path': $.context.campaign.term + initial_utm_content: + '@path': $.context.campaign.content + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 38tSANsS5xu4zyxKANNH18 + sortOrder: 38 + fieldKey: setAlways + label: Set Always + type: OBJECT + description: >- + The following fields will be set every session when using AJS2 as the + source. + placeholder: '' + defaultValue: + referrer: + '@path': $.context.page.referrer + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eJxa6MwZxJxcFghWN8drMx + sortOrder: 39 + fieldKey: add + label: Add + type: OBJECT + description: >- + Increment a user property by a number with add. If the user property + doesn't have a value set yet, it's initialized to 0. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qFL69GEmHv7pGqs7WpBXwz + sortOrder: 40 + fieldKey: use_batch_endpoint + label: Use Batch Endpoint + type: BOOLEAN + description: >- + If true, events are sent to Amplitude's `batch` endpoint rather than + their `httpapi` events endpoint. Enabling this setting may help reduce + 429s – or throttling errors – from Amplitude. More information about + Amplitude's throttling is available in [their + docs](https://developers.amplitude.com/docs/batch-event-upload-api#429s-in-depth). + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: Y2nam543awLxHUkQEsYa2 + sortOrder: 41 + fieldKey: userAgent + label: User Agent + type: STRING + description: The user agent of the device sending the event. + placeholder: '' + defaultValue: + '@path': $.context.userAgent + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sM5M6e9NzoyGEEWGofhmPL + sortOrder: 42 + fieldKey: userAgentParsing + label: User Agent Parsing + type: BOOLEAN + description: >- + Enabling this setting will set the Device manufacturer, Device Model and + OS Name properties based on the user agent string provided in the + userAgent field. + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cPhnCi9ujP6mw196RJQZ77 + sortOrder: 43 + fieldKey: min_id_length + label: Minimum ID Length + type: INTEGER + description: >- + Amplitude has a default minimum id length of 5 characters for user_id + and device_id fields. This field allows the minimum to be overridden to + allow shorter id lengths. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: EbNxZgip2EGwYiegu95dx + sortOrder: 44 + fieldKey: userAgentData + label: User Agent Data + type: OBJECT + description: The user agent data of device sending the event + placeholder: '' + defaultValue: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: nhJa95SA9MXa3hi2Vm2acC + name: Browser Session Tracking + fields: {} + trigger: >- + type = "track" or type = "identify" or type = "group" or type = "page" or + type = "alias" + - actionId: uhprCN3Pc9fjb89v4xDrfP + name: Page Calls + fields: + user_id: + '@path': $.userId + device_id: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + event_type: + '@template': Viewed {{name}} + session_id: + '@path': $.integrations.Actions Amplitude.session_id + time: + '@path': $.timestamp + event_properties: + '@path': $.properties + user_properties: + '@path': $.traits + app_version: + '@path': $.context.app.version + platform: + '@path': $.context.device.type + os_name: + '@path': $.context.os.name + os_version: + '@path': $.context.os.version + device_brand: + '@path': $.context.device.brand + device_manufacturer: + '@path': $.context.device.manufacturer + device_model: + '@path': $.context.device.model + carrier: + '@path': $.context.network.carrier + country: + '@path': $.context.location.country + region: + '@path': $.context.location.region + city: + '@path': $.context.location.city + language: + '@path': $.context.locale + price: + '@path': $.properties.price + quantity: + '@path': $.properties.quantity + revenue: + '@path': $.properties.revenue + productId: + '@path': $.properties.productId + revenueType: + '@path': $.properties.revenueType + location_lat: + '@path': $.context.location.latitude + location_lng: + '@path': $.context.location.longitude + ip: + '@path': $.context.ip + idfa: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + idfv: + '@path': $.context.device.id + adid: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + library: + '@path': $.context.library.name + products: + '@arrayPath': + - $.properties.products + - price: + '@path': price + revenue: + '@path': revenue + quantity: + '@path': quantity + productId: + '@path': productId + revenueType: + '@path': revenueType + setOnce: + initial_referrer: + '@path': $.context.page.referrer + initial_utm_source: + '@path': $.context.campaign.source + initial_utm_medium: + '@path': $.context.campaign.medium + initial_utm_campaign: + '@path': $.context.campaign.name + initial_utm_term: + '@path': $.context.campaign.term + initial_utm_content: + '@path': $.context.campaign.content + setAlways: + referrer: + '@path': $.context.page.referrer + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + use_batch_endpoint: false + userAgent: + '@path': $.context.userAgent + userAgentParsing: true + userAgentData: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + trigger: type = "page" + - actionId: uhprCN3Pc9fjb89v4xDrfP + name: Track Calls + fields: + user_id: + '@path': $.userId + device_id: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + event_type: + '@path': $.event + session_id: + '@path': $.integrations.Actions Amplitude.session_id + time: + '@path': $.timestamp + event_properties: + '@path': $.properties + user_properties: + '@path': $.traits + app_version: + '@path': $.context.app.version + platform: + '@path': $.context.device.type + os_name: + '@path': $.context.os.name + os_version: + '@path': $.context.os.version + device_brand: + '@path': $.context.device.brand + device_manufacturer: + '@path': $.context.device.manufacturer + device_model: + '@path': $.context.device.model + carrier: + '@path': $.context.network.carrier + country: + '@path': $.context.location.country + region: + '@path': $.context.location.region + city: + '@path': $.context.location.city + language: + '@path': $.context.locale + price: + '@path': $.properties.price + quantity: + '@path': $.properties.quantity + revenue: + '@path': $.properties.revenue + productId: + '@path': $.properties.productId + revenueType: + '@path': $.properties.revenueType + location_lat: + '@path': $.context.location.latitude + location_lng: + '@path': $.context.location.longitude + ip: + '@path': $.context.ip + idfa: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + idfv: + '@path': $.context.device.id + adid: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + library: + '@path': $.context.library.name + products: + '@arrayPath': + - $.properties.products + - price: + '@path': price + revenue: + '@path': revenue + quantity: + '@path': quantity + productId: + '@path': productId + revenueType: + '@path': revenueType + setOnce: + initial_referrer: + '@path': $.context.page.referrer + initial_utm_source: + '@path': $.context.campaign.source + initial_utm_medium: + '@path': $.context.campaign.medium + initial_utm_campaign: + '@path': $.context.campaign.name + initial_utm_term: + '@path': $.context.campaign.term + initial_utm_content: + '@path': $.context.campaign.content + setAlways: + referrer: + '@path': $.context.page.referrer + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + use_batch_endpoint: false + userAgent: + '@path': $.context.userAgent + userAgentParsing: true + userAgentData: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + trigger: type = "track" and event != "Order Completed" + - actionId: cRSyn3B292uKfxrpKwHRDY + name: Order Completed Calls + fields: + trackRevenuePerProduct: false + user_id: + '@path': $.userId + device_id: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + event_type: + '@path': $.event + session_id: + '@path': $.integrations.Actions Amplitude.session_id + time: + '@path': $.timestamp + event_properties: + '@path': $.properties + user_properties: + '@path': $.traits + app_version: + '@path': $.context.app.version + platform: + '@path': $.context.device.type + os_name: + '@path': $.context.os.name + os_version: + '@path': $.context.os.version + device_brand: + '@path': $.context.device.brand + device_manufacturer: + '@path': $.context.device.manufacturer + device_model: + '@path': $.context.device.model + carrier: + '@path': $.context.network.carrier + country: + '@path': $.context.location.country + region: + '@path': $.context.location.region + city: + '@path': $.context.location.city + language: + '@path': $.context.locale + price: + '@path': $.properties.price + quantity: + '@path': $.properties.quantity + revenue: + '@path': $.properties.revenue + productId: + '@path': $.properties.productId + revenueType: + '@path': $.properties.revenueType + location_lat: + '@path': $.context.location.latitude + location_lng: + '@path': $.context.location.longitude + ip: + '@path': $.context.ip + idfa: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + idfv: + '@path': $.context.device.id + adid: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + library: + '@path': $.context.library.name + products: + '@arrayPath': + - $.properties.products + - price: + '@path': price + revenue: + '@path': revenue + quantity: + '@path': quantity + productId: + '@path': productId + revenueType: + '@path': revenueType + use_batch_endpoint: false + userAgent: + '@path': $.context.userAgent + userAgentParsing: true + utm_properties: + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + referrer: + '@path': $.context.page.referrer + userAgentData: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + trigger: type = "track" and event = "Order Completed" + - actionId: uhprCN3Pc9fjb89v4xDrfP + name: Screen Calls + fields: + user_id: + '@path': $.userId + device_id: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + event_type: + '@template': Viewed {{name}} + session_id: + '@path': $.integrations.Actions Amplitude.session_id + time: + '@path': $.timestamp + event_properties: + '@path': $.properties + user_properties: + '@path': $.traits + app_version: + '@path': $.context.app.version + platform: + '@path': $.context.device.type + os_name: + '@path': $.context.os.name + os_version: + '@path': $.context.os.version + device_brand: + '@path': $.context.device.brand + device_manufacturer: + '@path': $.context.device.manufacturer + device_model: + '@path': $.context.device.model + carrier: + '@path': $.context.network.carrier + country: + '@path': $.context.location.country + region: + '@path': $.context.location.region + city: + '@path': $.context.location.city + language: + '@path': $.context.locale + price: + '@path': $.properties.price + quantity: + '@path': $.properties.quantity + revenue: + '@path': $.properties.revenue + productId: + '@path': $.properties.productId + revenueType: + '@path': $.properties.revenueType + location_lat: + '@path': $.context.location.latitude + location_lng: + '@path': $.context.location.longitude + ip: + '@path': $.context.ip + idfa: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + idfv: + '@path': $.context.device.id + adid: + '@if': + exists: + '@path': $.context.device.advertisingId + then: + '@path': $.context.device.advertisingId + else: + '@path': $.context.device.idfa + library: + '@path': $.context.library.name + products: + '@arrayPath': + - $.properties.products + - price: + '@path': price + revenue: + '@path': revenue + quantity: + '@path': quantity + productId: + '@path': productId + revenueType: + '@path': revenueType + setOnce: + initial_referrer: + '@path': $.context.page.referrer + initial_utm_source: + '@path': $.context.campaign.source + initial_utm_medium: + '@path': $.context.campaign.medium + initial_utm_campaign: + '@path': $.context.campaign.name + initial_utm_term: + '@path': $.context.campaign.term + initial_utm_content: + '@path': $.context.campaign.content + setAlways: + referrer: + '@path': $.context.page.referrer + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + use_batch_endpoint: false + userAgent: + '@path': $.context.userAgent + userAgentParsing: true + userAgentData: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + trigger: type = "screen" + - actionId: 9STyJcVfDee2NowS4DGdmW + name: Identify Calls + fields: + user_id: + '@path': $.userId + device_id: + '@if': + exists: + '@path': $.context.device.id + then: + '@path': $.context.device.id + else: + '@path': $.anonymousId + user_properties: + '@path': $.traits + app_version: + '@path': $.context.app.version + platform: + '@path': $.context.device.type + os_name: + '@path': $.context.os.name + os_version: + '@path': $.context.os.version + device_brand: + '@path': $.context.device.brand + device_manufacturer: + '@path': $.context.device.manufacturer + device_model: + '@path': $.context.device.model + carrier: + '@path': $.context.network.carrier + country: + '@path': $.context.location.country + region: + '@path': $.context.location.region + city: + '@path': $.context.location.city + language: + '@path': $.context.locale + userAgent: + '@path': $.context.userAgent + userAgentParsing: true + utm_properties: + utm_source: + '@path': $.context.campaign.source + utm_medium: + '@path': $.context.campaign.medium + utm_campaign: + '@path': $.context.campaign.name + utm_term: + '@path': $.context.campaign.term + utm_content: + '@path': $.context.campaign.content + referrer: + '@path': $.context.page.referrer + library: + '@path': $.context.library.name + userAgentData: + model: + '@path': $.context.userAgentData.model + platformVersion: + '@path': $.context.userAgentData.platformVersion + trigger: type = "identify" + partnerOwned: false +- id: 5feb4422ecbab07ade913573 + display_name: Anodot + name: Anodot + slug: anodot + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/anodot + previous_names: + - Anodot + website: https://www.anodot.com + status: PUBLIC + categories: + - Analytics + - Raw Data + logo: + url: https://cdn-devcenter.segment.com/4e49c00b-9972-44b6-8df6-00ad7d55fc1b.svg + mark: + url: https://cdn-devcenter.segment.com/7721f3ae-5122-45fd-86e8-ef5c0fc1f9da.svg + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + You will get the relevant API key from Anodot after creating a new Segment + source in the Data Management page. + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 554926390a20f4e22f0fb38a + display_name: Appcues + name: Appcues + slug: appcues + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/appcues + previous_names: + - Appcues + website: http://www.appcues.com/ + status: PUBLIC + categories: + - Personalization + logo: + url: https://cdn.filepicker.io/api/file/RO2CSvXiRZyZWIoUuh6A + mark: + url: https://cdn.filepicker.io/api/file/d5US10rDRAm3rBJDHqDh + methods: + track: true + identify: true + group: true + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-appcues + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + **Required for server-side integration functionality**. You can find your + API Key in your [Appcues account page](https://my.appcues.com/account). + required: true + label: API Key + - name: appcuesId + type: string + defaultValue: '' + description: >- + **Required for client-side integration functionality**. You can find your + Appcues ID in your [Appcues account page](https://my.appcues.com/account). + required: true + label: Appcues Id + actions: [] + presets: [] + partnerOwned: false +- id: 620ff0b76a6f5d2317a7a353 + display_name: Appcues Mobile + name: Appcues Mobile + slug: appcues-mobile + hidden: true + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/appcues-mobile + previous_names: + - AppCues Mobile + - Appcues Mobile + website: http://www.appcues.com/ + status: PUBLIC + categories: + - Personalization + - Analytics + logo: + url: https://cdn.filepicker.io/api/file/IBwccHUASduVLs7bXegV + mark: + url: https://cdn.filepicker.io/api/file/ocZ7wHLeQBOd77n6zcoQ + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: false + mobile: true + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/appcues/segment-appcues-ios + owner: PARTNER + type: IOS + - code: https://github.com/appcues/segment-appcues-android + owner: PARTNER + type: ANDROID + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: true + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: accountId + type: string + defaultValue: '' + description: >- + You can find your Account ID on the Studio Settings page of your AppCues + Account. It should be a series of numbers, like `997086`. + required: true + label: Account ID + - name: applicationId + type: string + defaultValue: '' + description: >- + You can find your Application ID once you have registered a mobile App + with Appcues. It should look something like this: + `dfdbfe6f-e7bf-4938-8e82-7d1938e48ab8` + required: true + label: Application ID + actions: [] + presets: [] + partnerOwned: false +- id: 64b67be0d0dd66094c162ca7 + display_name: AppFit + name: AppFit + slug: actions-app-fit + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-app-fit + previous_names: + - App Fit + - AppFit + website: http://www.appfit.io + status: PUBLIC_BETA + categories: + - Analytics + logo: + url: https://cdn.filepicker.io/api/file/jMpQHeuYQuSgZrxX9GOu + mark: + url: https://cdn.filepicker.io/api/file/lCJiJdGBRySF5XZ4ek6F + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: 'AppFit project API key. ' + required: true + label: API Key + actions: + - id: r4x82GrE6VqBWRMdRbj87L + name: Track + slug: track + description: Send an event to AppFit. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: cRVcx6PQa2fVo4M441hNQT + sortOrder: 0 + fieldKey: userId + label: External User ID + type: STRING + description: The unique user identifier + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9g9GmeXf4oGsdE7f6CGXGE + sortOrder: 1 + fieldKey: occurredAt + label: Time + type: DATETIME + description: When the event occurred. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rkVnj664YjT6QYp1PNmaGD + sortOrder: 2 + fieldKey: name + label: Event Name + type: STRING + description: The event name + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aqnQ2WDwTYsguh9SphRfBT + sortOrder: 3 + fieldKey: anonymousId + label: Anonymous ID + type: STRING + description: The anonymous ID of the user + placeholder: '' + defaultValue: + '@path': $.anonymousId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uyjo3MZRebwj8A2p1YSm4Q + sortOrder: 4 + fieldKey: properties + label: Event Properties + type: OBJECT + description: Properties of the event + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9BqqXpSmWYzbJhFdRQAAg6 + sortOrder: 5 + fieldKey: appVersion + label: App Version + type: STRING + description: The app version + placeholder: '' + defaultValue: + '@path': $.context.app.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iFhwCUyiLDFd5GGpmee3KM + sortOrder: 6 + fieldKey: deviceId + label: Device ID + type: STRING + description: The device ID of the user + placeholder: '' + defaultValue: + '@path': $.context.device.id + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cbVMoXJ3BnaZsPeDtpUrLi + sortOrder: 7 + fieldKey: deviceType + label: Device Type + type: STRING + description: The device type + placeholder: '' + defaultValue: + '@path': $.context.device.type + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3yKmq3KwMFBC8mbP2oaq9a + sortOrder: 8 + fieldKey: deviceManufacturer + label: Device Manufacturer + type: STRING + description: The device manufacturer + placeholder: '' + defaultValue: + '@path': $.context.device.manufacturer + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tZpnfmMLiZuFNEgn29Admb + sortOrder: 9 + fieldKey: deviceModel + label: Device Model + type: STRING + description: The device model + placeholder: '' + defaultValue: + '@path': $.context.device.model + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hotciFLeE93sD8Hv5VV1hF + sortOrder: 10 + fieldKey: deviceAdvertisingId + label: Device Advertising ID + type: STRING + description: The device advertising ID + placeholder: '' + defaultValue: + '@path': $.context.device.advertisingId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jkWr53z7nvK2y7YxApdFbG + sortOrder: 11 + fieldKey: ipAddress + label: IP Address + type: STRING + description: The IP address of the client + placeholder: '' + defaultValue: + '@path': $.context.ip + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vqicdAGmLzKv2ypCVc4cSG + sortOrder: 12 + fieldKey: osName + label: OS Name + type: STRING + description: The name of the operating system + placeholder: '' + defaultValue: + '@path': $.context.os.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: f9PXbrP3Z4kP7TwnrZB6ii + sortOrder: 13 + fieldKey: osVersion + label: OS Version + type: STRING + description: The version of the operating system + placeholder: '' + defaultValue: + '@path': $.context.os.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2M9wmmnU4shXXApHNSQaa8 + sortOrder: 14 + fieldKey: eventId + label: Event ID + type: STRING + description: The event ID + placeholder: '' + defaultValue: + '@path': $.messageId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + presets: [] + partnerOwned: true +- id: 54521fd525e721e32a72ee95 + display_name: AppNexus + name: AppNexus + slug: appnexus + hidden: true + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/appnexus + previous_names: + - AppNexus + website: http://www.appnexus.com/ + status: PUBLIC + categories: + - Advertising + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/appnexus-default.svg + mark: + url: https://cdn.filepicker.io/api/file/A3YvNdKgTuaEWDfebPFF + methods: + track: true + identify: false + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-appnexus + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: events + type: mixed + defaultValue: [] + description: Configure a pixel + required: false + label: Events + actions: [] + presets: [] + partnerOwned: false +- id: 54521fd525e721e32a72ee8f + display_name: AppsFlyer + name: AppsFlyer + slug: appsflyer + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/appsflyer + previous_names: + - AppsFlyer + website: http://www.appsflyer.com/ + status: PUBLIC + categories: + - Attribution + - Deep Linking + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/appsflyer-default.svg + mark: + url: https://cdn.filepicker.io/api/file/AnJUEBvxRouLLOvIeQuK + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: false + platforms: + browser: false + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/AppsFlyerSDK/segment-appsflyer-ios + owner: PARTNER + type: IOS + - code: https://github.com/AppsFlyerSDK/AppsFlyer-Segment-Integration + owner: PARTNER + type: ANDROID + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/appsflyer + owner: SEGMENT + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: true + server: false + cloud: + web: false + mobile: true + server: true + settings: + - name: androidAppID + type: string + defaultValue: '' + description: >- + Your Android App's ID. Find this in your AppsFlyer's 'My App' dashboard. + It should look something like 'com.appsflyer.myapp'. This is required for + Android projects if you want to send events using the server side + integration. + required: false + label: Android App ID + - name: appleAppID + type: string + defaultValue: '' + description: >- + Your App's ID, which is accessible from iTunes or in AppsFlyer's 'My App' + dashboard. This is optional for Android projects, and only required for + iOS projects. + required: false + label: Apple App ID (iOS) + - name: appsFlyerDevKey + type: string + defaultValue: '' + description: >- + Your unique developer ID from AppsFlyer, which is accessible from your + AppsFlyer account. + required: true + label: AppsFlyer Dev Key + - name: appsFlyerS2SToken + type: string + defaultValue: '' + description: >- + Your unique S2S token from AppsFlyer, [accessible in your AppsFlyer + account](https://support.appsflyer.com/hc/en-us/articles/360004562377-Managing-API-and-Server-to-server-S2S-tokens). + Required when "Use API V3" is set to "true." + required: false + label: AppsFlyer S2S Token + - name: canOmitAppsFlyerId + type: boolean + defaultValue: false + description: >- + *Only applicable for Appsflyer's Business Tiers customers using + server-side or cloud mode destination.* Please contact your AppsFlyer + representative for more information. This setting allows to use the + advertising ID as appsflyer ID. + required: false + label: Can Omit AppsFlyerId + - name: fallbackToIdfv + type: boolean + defaultValue: false + description: >- + With the update to use analytics-ios v4.x SDK if adTrackingEnabled is set + to false, the advertisingId key will be deleted from the event. If you + have the setting enabled "Can Omit AppsFlyerId", these events will fail + when sent to AppsFlyer API. To prevent these event failures in this + scenario enable this send the IDFV instead. When the "Can Omit + AppsFlyerId" setting is enabled if the IDFA is zeroed out, we will also + send an IDFV when this setting is enabled. + required: false + label: >- + Fallback to send IDFV when advertisingId key not present (Server-Side + Only) + - name: httpFallback + type: boolean + defaultValue: false + description: If selected, HTTPS calls will fallback on HTTP + required: false + label: Enable HTTP fallback (Android) + - name: rokuAppID + type: string + defaultValue: '' + description: >- + **IMPORTANT**: In order to send Roku data, you **must** contact your + AppsFlyer representative as this type of data stream requires a full + server to server integration which is available but is gated as a + AppsFlyer Enterprise Customer feature. Without AppsFlyer's consent we are + unable to forward your Roku data. Your Roku App's ID. Find this in your + AppsFlyer's 'My App' dashboard. This is required for Roku projects if you + want to send events using the server side integration. + required: false + label: Roku App ID + - name: trackAttributionData + type: boolean + defaultValue: false + description: >- + Send attribution data to Segment and other tools as a track call (mobile + libraries only). + required: false + label: Track Attribution Data + - name: useApiV3 + type: boolean + defaultValue: false + description: >- + Enable to post in-app events to [AppsFlyer V3 + endpoint](https://dev.appsflyer.com/hc/reference/s2s-events-api3-post). Do + not enable if you have not provided a value for the "AppsFlyer S2S Token" + setting. + required: false + label: Use API v3 + actions: [] + presets: [] + partnerOwned: false +- id: 5537d3e80a20f4e22f0fb385 + display_name: Apptimize + name: Apptimize + slug: apptimize + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/apptimize + previous_names: + - Apptimize + website: https://apptimize.com/ + status: PUBLIC + categories: + - A/B Testing + - Feature Flagging + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/apptimize-default.svg + mark: + url: https://cdn.filepicker.io/api/file/HNGcnPQ4QsCttRhPdvcR + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: false + mobile: true + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/Apptimize/analytics-ios-integration-apptimize + owner: PARTNER + type: IOS + - code: https://github.com/Apptimize/analytics-android-integration-apptimize + owner: PARTNER + type: ANDROID + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: true + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: appkey + type: string + defaultValue: '' + description: >- + You can find your App Key on the Apptimize [settings + page](https://apptimize.com/admin/settings/apps) + required: true + label: App Key + - name: applicationGroup + type: string + defaultValue: '' + description: 'This option controls if Apptimize should share its data with widgets. ' + required: false + label: Shared application group + - name: apptimizeEuDataCenter + type: boolean + defaultValue: false + description: >- + Toggle this switch ON if you are implemented in Apptimize’s European Data + Center. If you are unsure which data center you are on please reach out to + support@apptimize.com. + required: false + label: Apptimize EU Data Center + - name: delayUntilTestsAreAvailable + type: number + defaultValue: 0 + description: >+ + This option controls how long (in milliseconds) Apptimize will wait for + tests and their associated data to download. + + required: false + label: Delay Apptimize start until tests are available + - name: devicePairingEnabled + type: boolean + defaultValue: true + description: >- + This option controls whether Apptimize will attempt to pair with the + development server. + required: false + label: Enable Device Pairing + - name: forceVariantsShowWinnersAndInstantUpdates + type: boolean + defaultValue: false + description: >- + This option governs whether Apptimize will show winning variants and + instant updates when `forceVariant` is used. + required: false + label: Include Winner and Instant updates to test info + - name: listen + type: boolean + defaultValue: false + description: >- + Sends the experiment and variation information as properties on a track + call. + required: false + label: Send experiment data to other tools (as a track call) + - name: logLevel + type: string + defaultValue: '' + description: >- + Set the log level of the Apptimize library. The available values are: + verbose, debug, info, warn, error, and off. + required: false + label: Apptimize SDK Log Level + - name: thirdPartyEventsExportEnabled + type: boolean + defaultValue: true + description: >- + This option controls whether Apptimize will automatically export events to + third-party analytics frameworks. + required: false + label: Export Apptimize participation to third-party + - name: thirdPartyEventsImportEnabled + type: boolean + defaultValue: true + description: >- + This option controls whether Apptimize will automatically import events + from third-party analytics frameworks. + required: false + label: Import events from third-party SDKs + actions: [] + presets: [] + partnerOwned: true +- id: 5d00754256e478000114784f + display_name: Asayer + name: Asayer + slug: asayer + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/asayer + previous_names: + - asayer + - Asayer + website: https://asayer.io + status: PUBLIC + categories: + - Analytics + - Customer Success + - Performance Monitoring + - Raw Data + logo: + url: https://cdn-devcenter.segment.com/7c802204-fa5f-4b62-b6ba-9810e6fc7d93.svg + mark: + url: https://cdn-devcenter.segment.com/5c31f9f4-db8e-45df-be11-d4b5cc24af84.svg + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/asayerio/analytics.js-integration-asayer + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: siteId + type: string + defaultValue: '' + description: >- + The ID associated with your project. You can find in Preferences -> + Projects in your Asayer app. + required: true + label: Site ID + actions: [] + presets: [] + partnerOwned: true +- id: 64d2643196f4937712e54198 + display_name: Astrolabe + name: Astrolabe + slug: astrolabe + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/astrolabe + previous_names: + - Astrolabe + website: https://astrolabe.so + status: PUBLIC_BETA + categories: + - Raw Data + - CRM + - Customer Success + - Marketing Automation + - Analytics + logo: + url: https://cdn.filepicker.io/api/file/xd0XA56DQPSsMCKs0lTy + mark: + url: https://cdn.filepicker.io/api/file/e8iDf2WmRBG1fjdoUISZ + methods: + track: true + identify: true + group: true + alias: false + screen: false + page: false + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: Your Astrolabe API key + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 54c02204db31d978f14a7f6d + display_name: Atatus + name: Atatus + slug: atatus + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/atatus + previous_names: + - Atatus + website: https://www.atatus.com/ + status: PUBLIC + categories: + - Performance Monitoring + logo: + url: https://cdn.filepicker.io/api/file/phFjNFWZQNC8rGXTgI82 + mark: + url: https://cdn.filepicker.io/api/file/oPZpXBJTzIWCxevWAYYA + methods: + track: false + identify: true + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-atatus + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: allowedDomains + type: array + defaultValue: [] + description: >- + Captures the page views, AJAX and JS Errors from the given domains or URLs + and ignores insights from all other URLs. + required: false + label: Whitelist Urls + - name: apiKey + type: string + defaultValue: '' + description: >- + To find your API Key, create a project in your Atatus dashboard. The key + should look something like this: `16ae323d8b3244733a981215c9d66e67d` + required: true + label: API Key + - name: disableAjaxMonitoring + type: boolean + defaultValue: false + description: >- + If you don't want to track the AJAX(XHR) requests in your app, then select + this option. + required: false + label: Disable AJAX Monitoring + - name: disableErrorTracking + type: boolean + defaultValue: false + description: Set this to true to disable error tracking. + required: false + label: Disable Error Tracking + - name: disableRUM + type: boolean + defaultValue: false + description: You can disable RUM metrics by setting this option to true. + required: false + label: Disable RUM + - name: disableSession + type: boolean + defaultValue: false + description: >- + You can set this option to true if you want to disable reporting of + session traces. + required: false + label: Disable Session + - name: disableSPA + type: boolean + defaultValue: false + description: Set this option to true to disable SPA monitoring. + required: false + label: Disable SPA + - name: disableTransaction + type: boolean + defaultValue: false + description: >- + You can disable the collection of transactions by setting the option to + true. + required: false + label: Disable Transaction + - name: enableOffline + type: boolean + defaultValue: false + description: >- + Enable offline errors and metrics tracking when network connectivity is + not available. + required: false + label: Enable Offline Errors and Metrics + - name: hashRoutes + type: boolean + defaultValue: false + description: >- + Atatus removes the hash from the URL and if you're using hash based routes + you can set this option to true. + required: false + label: Hash Routes + - name: ignoreErrors + type: array + defaultValue: [] + description: >- + It is an array of unwanted error messages to be filtered out before being + sent to Atatus as either array or regular expressions or strings. + required: false + label: Ignore Errors + - name: ignoreUrls + type: array + defaultValue: [] + description: Ignore capturing insights from a given set of domains or URLs. + required: false + label: Ignore Urls + - name: reportUnhandledRejections + type: boolean + defaultValue: true + description: This allows disabling or enabling the unhandled promise rejection errors. + required: false + label: Report Unhandled Rejections + - name: version + type: string + defaultValue: '' + description: Helps you in filtering the errors from the dashboard using the version. + required: false + label: Version + actions: [] + presets: [] + partnerOwned: false +- id: 62bcba2e1db8cc043e95f370 + display_name: Attentive Mobile + name: Attentive Mobile + slug: attentive-mobile + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/attentive-mobile + previous_names: + - Attentive Mobile + website: https://www.segment.com + status: PUBLIC + categories: + - Email Marketing + - Marketing Automation + logo: + url: https://cdn-devcenter.segment.com/4ed4eaf7-acd5-4ffe-aa36-2d405c077ebc.svg + mark: + url: https://cdn-devcenter.segment.com/0fd5ee39-9d66-4337-b876-a85ffca4b187.svg + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + Install the "Segment" integration in the Attentive UI. The API Key will be + displayed after the "Segment" integration is installed. + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 64c031541451bb784943f809 + display_name: Attio (Actions) + name: Attio (Actions) + slug: actions-attio + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/actions-attio + previous_names: + - Attio (Actions) + website: https://attio.com + status: PUBLIC_BETA + categories: + - CRM + - Enrichment + logo: + url: https://cdn-devcenter.segment.com/8bf1ecf1-cbdd-4618-bace-230e7f78aa26.svg + mark: + url: https://cdn-devcenter.segment.com/e980167c-e917-40c3-a77d-927f3156380e.png + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: [] + actions: + - id: 3dJCmgCJYPJc4iKW8596hn + name: Identify User + slug: identifyUser + description: >- + Create or update an Attio User and link it to a Person based on a shared + email address. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: eUUnwn4YCxhCTnZdCd6TnW + sortOrder: 0 + fieldKey: email_address + label: Email address + type: STRING + description: The email address of the person to link the user to + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.email + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eLRKWx8YSQo41yJ4QyoZrv + sortOrder: 1 + fieldKey: user_id + label: ID + type: STRING + description: The ID of the User + placeholder: '' + defaultValue: + '@path': $.userId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ww9bHiACZ9bsT5eK3zXy3i + sortOrder: 2 + fieldKey: user_attributes + label: Additional User attributes + type: OBJECT + description: >- + Additional attributes to either set or update on the Attio User Record. + The values on the left should be Segment attributes or custom text, and + the values on the right are Attio Attribute IDs or Slugs. For example: + traits.name → name + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: e94urNw73DVDotXVQtfc6C + sortOrder: 3 + fieldKey: person_attributes + label: Additional Person attributes + type: OBJECT + description: >- + Additional attributes to either set or update on the Attio Person + Record. The values on the left should be Segment attributes or custom + text, and the values on the right are Attio Attribute IDs or Slugs. For + example: traits.name → name + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mW1sgf9M7H9wucCT5D2nuP + sortOrder: 4 + fieldKey: enable_batching + label: Batch events + type: BOOLEAN + description: >- + Events will be sent Attio in batches. When batching is enabled any + invalid events will be silently dropped. + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qHozwLtqmUN5ChfxQog85h + sortOrder: 5 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: Max batch size to send to Attio (limit is 10,000) + placeholder: '' + defaultValue: 1000 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sAENeUpCa3Cs6dzgMELJB1 + sortOrder: 6 + fieldKey: received_at + label: Received at + type: DATETIME + description: When the event was received. + placeholder: '' + defaultValue: + '@path': $.receivedAt + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5EdPdCppuZahUE3ZoWYHuz + name: Assert Record + slug: assertRecord + description: Create or update a Record in Attio. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: mpgn1nXomDsgZXUYceNed6 + sortOrder: 0 + fieldKey: object + label: Attio Object + type: STRING + description: The type of Attio Object you'd like to create or update ('assert') + placeholder: '' + defaultValue: person + required: true + multiple: false + choices: null + dynamic: true + allowNull: false + - id: 52NbEqRZXxJRBJLYxci1oZ + sortOrder: 1 + fieldKey: matching_attribute + label: Matching Attribute + type: STRING + description: >- + The Attribute (ID or slug) on the Attio Object above, that uniquely + identifies a Record (and is marked as unique in Attio). Events + containing the same value for this attribute will update the original + Record, rather than creating a new one. For example, to create or update + a Person you might use the Attio attribute `email_addresses` here. + placeholder: '' + defaultValue: email_addresses + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hcmH3Rm3kar1BJFxRMJdfM + sortOrder: 2 + fieldKey: attributes + label: Attributes + type: OBJECT + description: >- + Attributes to either set or update on the Attio Record. The values on + the left should be Segment attributes or custom text, and the values on + the right are Attio Attribute IDs or Slugs, for example: traits.name → + name. The Matching Attribute must be included for assertion to work. + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oHit6AYzdfuyxiTsFpxxYY + sortOrder: 3 + fieldKey: enable_batching + label: Batch events + type: BOOLEAN + description: >- + Events will be sent Attio in batches. When batching is enabled any + invalid events will be silently dropped. + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: p27SLf4cTa3m7ewVjivyJW + sortOrder: 4 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: Max batch size to send to Attio (limit is 10,000) + placeholder: '' + defaultValue: 1000 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: be7Bmgypt4ipiSaxQR4t31 + sortOrder: 5 + fieldKey: received_at + label: Received at + type: DATETIME + description: When the event was received. + placeholder: '' + defaultValue: + '@path': $.receivedAt + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jMLaXgxMo261JaxMetVUby + name: Group Workspace + slug: groupWorkspace + description: >- + Create or update an Attio Workspace and link it to a Company based on a + domain attribute. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: 4wGBdFCe1LbuECfpcxisp8 + sortOrder: 0 + fieldKey: domain + label: Domain + type: STRING + description: The domain of the Company (used to link the Workspace) + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.website + then: + '@path': $.traits.website + else: + '@path': $.website + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6zxuyRfyGi6cof5AHKKBjL + sortOrder: 1 + fieldKey: workspace_id + label: ID + type: STRING + description: The ID of the Workspace + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.groupId + then: + '@path': $.groupId + else: + '@path': $.context.group_id + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 441YJdccMyymZuaWuh9J95 + sortOrder: 2 + fieldKey: user_id + label: ID + type: STRING + description: >- + The ID of the User, if you'd like to link them to this Workspace (leave + blank to skip). This assumes you will have already called the Attio + identifyUser action: unrecognised Users will fail this action otherwise. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nptmkh9uN6aAhPqUKoxKKk + sortOrder: 3 + fieldKey: company_attributes + label: Additional Company attributes + type: OBJECT + description: >- + Additional attributes to either set or update on the Attio Company + Record. The values on the left should be Segment attributes or custom + text, and the values on the right are Attio Attribute IDs or Slugs. For + example: traits.name → name + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bC7qYekZfD1sFZ7zZ6KY3G + sortOrder: 4 + fieldKey: workspace_attributes + label: Additional Workspace attributes + type: OBJECT + description: >- + Additional attributes to either set or update on the Attio Workspace + Record. The values on the left should be Segment attributes or custom + text, and the values on the right are Attio Attribute IDs or Slugs. For + example: traits.name → name + placeholder: '' + defaultValue: {} + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9UrGtqJUfg1dR9bcrT9rAz + sortOrder: 5 + fieldKey: enable_batching + label: Batch events + type: BOOLEAN + description: >- + Events will be sent Attio in batches. When batching is enabled any + invalid events will be silently dropped. + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kPsxWrN5qBUyHGg5nTP6MC + sortOrder: 6 + fieldKey: batch_size + label: Batch Size + type: NUMBER + description: Max batch size to send to Attio (limit is 10,000) + placeholder: '' + defaultValue: 1000 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tctCY5oXoQPwayaLDZwQtF + sortOrder: 7 + fieldKey: received_at + label: Received at + type: DATETIME + description: When the event was received. + placeholder: '' + defaultValue: + '@path': $.receivedAt + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: jMLaXgxMo261JaxMetVUby + name: Group Workspace + fields: + domain: + '@if': + exists: + '@path': $.traits.website + then: + '@path': $.traits.website + else: + '@path': $.website + workspace_id: + '@if': + exists: + '@path': $.groupId + then: + '@path': $.groupId + else: + '@path': $.context.group_id + user_id: + '@path': $.userId + company_attributes: {} + workspace_attributes: {} + enable_batching: false + batch_size: 1000 + received_at: + '@path': $.receivedAt + trigger: type = "group" + - actionId: 3dJCmgCJYPJc4iKW8596hn + name: Identify User + fields: + email_address: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.email + user_id: + '@path': $.userId + user_attributes: {} + person_attributes: {} + enable_batching: false + batch_size: 1000 + received_at: + '@path': $.receivedAt + trigger: type = "identify" + partnerOwned: true +- id: 54521fd525e721e32a72ee96 + display_name: Attribution + name: Attribution + slug: attribution + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/attribution + previous_names: + - Attribution + website: http://attributionapp.com/ + status: PUBLIC + categories: + - Referrals + - Attribution + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/attribution-default.svg + mark: + url: https://cdn.filepicker.io/api/file/sybdw0htTTKBmrgD1jJI + methods: + track: true + identify: true + group: false + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/attribution + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: projectId + type: string + defaultValue: '' + description: >- + Your unique project ID from Attribution, which is accessible from your + Attribution account. + required: true + label: Attribution Project Id + actions: [] + presets: [] + partnerOwned: false +- id: 5cae592103251a0001c2820a + display_name: Auryc + name: Auryc + slug: auryc + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/auryc + previous_names: + - Auryc + website: https://www.auryc.com/ + status: PUBLIC + categories: + - Analytics + - Heatmaps & Recordings + - Surveys + logo: + url: https://cdn.filepicker.io/api/file/AbQFDKdStegWI8eGmZAg + mark: + url: https://cdn.filepicker.io/api/file/rzwwg1OeRXOOxkyijkta + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/auryc-inc/analytics.js-integration-auryc + owner: PARTNER + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: siteid + type: string + defaultValue: '' + description: You can find your Site ID in your Auryc account. + required: true + label: Site ID + actions: [] + presets: [] + partnerOwned: false +- id: 5515e05c0a20f4e22f0fb36f + display_name: AutopilotHQ + name: AutopilotHQ + slug: autopilothq + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/autopilothq + previous_names: + - AutopilotHQ + website: https://autopilothq.com/ + status: PUBLIC + categories: + - Email Marketing + logo: + url: https://cdn.filepicker.io/api/file/7oQp8BXS5akzQm9XINIQ + mark: + url: https://cdn.filepicker.io/api/file/2wLIOq1URP6JDqk5dioG + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + Get your API key from + [here](https://login.autopilothq.com/login#settings/app-connections/segment-sync) + or go to Autopilot: Settings -> App Connections -> Segment and copy/paste + the API key which is listed there. + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: false +- id: 65c2465d0d7d550aa8e7e5c6 + display_name: Avo + name: Avo + slug: avo + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/avo + previous_names: + - Avo + website: https://avo.app + status: PUBLIC + categories: + - Analytics + logo: + url: https://cdn-devcenter.segment.com/7c289f9e-7d4d-4533-a601-71fea229721d.svg + mark: + url: https://cdn-devcenter.segment.com/69b83189-4afd-4ef0-ba8c-a777bb5af7a9.svg + methods: + track: true + identify: false + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + Avo Inspector API Key can be found in the Inspector setup page on your + source in Avo. + required: true + label: Avo Inspector API Key + - name: appVersionPropertyName + type: string + defaultValue: '' + description: >- + If you send a custom event property on all events that contains the app + version, please enter the name of that property here (e.g. “app_version”). + If you do not have a custom event property for the app version, please + leave this field empty. + required: false + label: App Version Property + - name: env + type: select + defaultValue: prod + description: Avo Inspector Environment + required: true + label: Environment + actions: + - id: 7n22BoWfoHtpYHm2zKS7cq + name: Track Schema From Event + slug: sendSchemaToInspector + description: Sends event schema to the Avo Inspector API + platform: CLOUD + hidden: false + defaultTrigger: type = "track" + fields: + - id: wq8ZmqL88frGhfzEWNhttL + sortOrder: 0 + fieldKey: event + label: Event Name + type: STRING + description: Name of the event being sent + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4iiRGj4pxVDpX6HxcVuUDR + sortOrder: 1 + fieldKey: properties + label: Properties + type: OBJECT + description: Properties of the event being sent + placeholder: '' + defaultValue: + '@path': $.properties + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bgp6EJQD35PDKMVFvjAzvP + sortOrder: 2 + fieldKey: messageId + label: Message ID + type: STRING + description: Message ID of the event being sent + placeholder: '' + defaultValue: + '@path': $.messageId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7RpDBAY6sdp3pZqzJC2kvN + sortOrder: 3 + fieldKey: createdAt + label: Created At + type: STRING + description: Timestamp of when the event was sent + placeholder: '' + defaultValue: + '@path': $.timestamp + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ghiPnkyJRu77mtYyB1B19u + sortOrder: 4 + fieldKey: appVersion + label: App Version + type: STRING + description: Version of the app that sent the event + placeholder: '' + defaultValue: + '@path': $.context.app.version + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7a2nYNgu2PbGLEXFLtfaHD + sortOrder: 5 + fieldKey: appName + label: App Name + type: STRING + description: Name of the app that sent the event + placeholder: '' + defaultValue: + '@path': $.context.app.name + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iytHYSo7ZaeECEVkTDwnE5 + sortOrder: 6 + fieldKey: pageUrl + label: Page URL + type: STRING + description: URL of the page that sent the event + placeholder: '' + defaultValue: + '@path': $.context.page.url + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4a3R3xkDTTLqyiJUCfyW8F + sortOrder: 7 + fieldKey: enable_batching + label: Enable Batching? + type: BOOLEAN + description: When enabled, Segment will send events in batches. + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: 7n22BoWfoHtpYHm2zKS7cq + name: Track Schema From Event + fields: + event: + '@path': $.event + properties: + '@path': $.properties + messageId: + '@path': $.messageId + createdAt: + '@path': $.timestamp + appVersion: + '@path': $.context.app.version + appName: + '@path': $.context.app.name + pageUrl: + '@path': $.context.page.url + trigger: type = "track" + partnerOwned: true +- id: 60be92c8dabdd561bf6c9130 + display_name: AWS S3 + name: AWS S3 + slug: aws-s3 + hidden: false + endpoints: + - EU + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/aws-s3 + previous_names: + - AWS S3 + website: http://aws.amazon.com/s3 + status: PUBLIC + categories: + - Analytics + - Raw Data + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/amazon-s3-default.svg + mark: + url: https://cdn.filepicker.io/api/file/R1EKddJ1SnGECiHtdUlY + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: awsRegion + type: string + defaultValue: '' + description: The AWS Region where your S3 Bucket resides. + required: true + label: AWS Region + - name: bucket + type: string + defaultValue: '' + description: Your S3 bucket name. + required: true + label: Bucket Name + - name: iamRoleArn + type: string + defaultValue: '' + description: >- + The ARN of the IAM role that Segment will assume to connect to your S3 + Bucket. + required: true + label: IAM Role ARN + actions: [] + presets: [] + partnerOwned: false +- id: 5cbf95e258453600011d6d8f + display_name: Azure Function + name: Azure Function + slug: azure-function + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/azure-function + previous_names: + - Azure Function + website: https://azure.microsoft.com/en-us/services/functions + status: PUBLIC_BETA + categories: + - Raw Data + logo: + url: https://cdn.filepicker.io/api/file/YTpUj9JHQlWB3IZTshij + mark: + url: https://cdn.filepicker.io/api/file/R2lShT3T7e5Gru53ZxIg + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segmentio/integrations-go/tree/master/azure-function + owner: SEGMENT + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: httpTrigger + type: string + defaultValue: '' + description: >- + The URL to call the Function. It must follow the ` https://{function app + name}.azurewebsites.net/api/{function name}?code={function key}` pattern. + required: true + label: HTTP Trigger + actions: [] + presets: [] + partnerOwned: false +- id: 596d11f870a3e552b957e6d9 + display_name: Batch + name: Batch + slug: batch + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/batch + previous_names: + - Batch + website: http://www.batch.com + status: PUBLIC + categories: + - SMS & Push Notifications + logo: + url: https://cdn.filepicker.io/api/file/8G2ACsPKQAKXd7PimVmt + mark: + url: https://cdn.filepicker.io/api/file/dIf53pwHTBWYHmzaPHPY + methods: + track: true + identify: true + group: true + alias: false + screen: false + page: false + platforms: + browser: false + mobile: true + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/BatchLabs/ios-segment-integration + owner: PARTNER + type: IOS + - code: https://github.com/BatchLabs/android-segment-integration + owner: PARTNER + type: ANDROID + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: true + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + You can find your API Key in your app's settings, in the [Batch.com + dashboard](https://dashboard.batch.com) + required: false + label: API Key + - name: canUseAdvancedDeviceInformation + type: boolean + defaultValue: true + description: >- + Toggles whether Batch can use all of the device information it supports. + All of this info is anonymous, but some might want to disable it under + strict privacy rules. If disabled, some targeting options in your + Batch.com dashboard will stop working correctly. + required: false + label: Allow collection of advanced device information. + - name: canUseAdvertisingID + type: boolean + defaultValue: true + description: Toggles whether Batch is allowed to collect advertising IDs + required: false + label: Allow advertising ID collection. + - name: gcmSenderID + type: string + defaultValue: '' + description: >- + Android only. You can find out how to get your GCM sender ID + [here](https://batch.com/doc/android/prerequisites.html#_getting-your-sender-id-and-server-api-key). + Note that you shouldn't change this value once you've set it: doing so + will end up in push delivery issues. + required: false + label: GCM Sender ID + actions: [] + presets: [] + partnerOwned: false +- id: 5d2d8f56f159f30001b3c3a9 + display_name: Beamer + name: Beamer + slug: beamer + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/beamer + previous_names: + - Beamer + website: https://www.getbeamer.com + status: PUBLIC + categories: + - Analytics + - Customer Success + - SMS & Push Notifications + - Surveys + logo: + url: https://cdn-devcenter.segment.com/ec9a5a38-bc3d-45c2-9265-3a73ec23a409.svg + mark: + url: https://cdn-devcenter.segment.com/232c225d-a1a4-4c85-a400-3dd1dc1bf043.svg + methods: + track: false + identify: true + group: false + alias: false + screen: false + page: false + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + You can find your API key in Settings > API. + https://app.getbeamer.com/settings#api + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 54521fd525e721e32a72ee97 + display_name: Bing Ads + name: Bing Ads + slug: bing-ads + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/bing-ads + previous_names: + - Bing Ads + website: https://advertise.bingads.microsoft.com/en-us/home + status: PUBLIC + categories: + - Advertising + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/bing-ads-default.svg + mark: + url: https://cdn.filepicker.io/api/file/Do3bOQnYSGmiixtUuxIY + methods: + track: true + identify: false + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: false + server: false + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-bing-ads + type: BROWSER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: tagId + type: string + defaultValue: '' + description: Your Bing Universal Event Tracking Tag ID + required: true + label: Tag ID + actions: [] + presets: [] + partnerOwned: false +- id: 63e42d44b0a59908dc4cacc6 + display_name: Blackbaud Raiser's Edge NXT + name: Blackbaud Raiser's Edge NXT + slug: blackbaud-raisers-edge-nxt + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/blackbaud-raisers-edge-nxt + previous_names: + - Blackbaud Raiser's Edge NXT + website: https://www.blackbaud.com/products/blackbaud-raisers-edge-nxt + status: PUBLIC_BETA + categories: + - CRM + logo: + url: https://cdn.filepicker.io/api/file/4kqI9LFwTVmYDA4i5etn + mark: + url: https://cdn.filepicker.io/api/file/nwD0thRtQSKUjwrNOiv7 + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: bbApiSubscriptionKey + type: string + defaultValue: '' + description: The access key found on your Blackbaud "My subscriptions" page. + required: true + label: Blackbaud API Subscription Key + actions: + - id: frvqRyY6zVF4JaTDyABuya + name: Create or Update Individual Constituent + slug: createOrUpdateIndividualConstituent + description: Create or update an Individual Constituent record in Raiser's Edge NXT. + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" + fields: + - id: gVNeRkWs5HCcFi2dNm6R5j + sortOrder: 0 + fieldKey: address + label: Address + type: OBJECT + description: The constituent's address. + placeholder: '' + defaultValue: + address_lines: + '@if': + exists: + '@path': $.traits.address.street + then: + '@path': $.traits.address.street + else: + '@path': $.properties.address.street + city: + '@if': + exists: + '@path': $.traits.address.city + then: + '@path': $.traits.address.city + else: + '@path': $.properties.address.city + country: + '@if': + exists: + '@path': $.traits.address.country + then: + '@path': $.traits.address.country + else: + '@path': $.properties.address.country + do_not_mail: '' + postal_code: + '@if': + exists: + '@path': $.traits.address.postalCode + then: + '@path': $.traits.address.postalCode + else: + '@path': $.properties.address.postalCode + primary: '' + state: + '@if': + exists: + '@path': $.traits.address.state + then: + '@path': $.traits.address.state + else: + '@path': $.properties.address.state + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pz3P2XJU1a4VRV5cSUvTbk + sortOrder: 1 + fieldKey: birthdate + label: Birthdate + type: DATETIME + description: The constituent's birthdate. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.birthday + then: + '@path': $.traits.birthday + else: + '@path': $.properties.birthday + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vautCbrrJVWyrABDxNwugv + sortOrder: 2 + fieldKey: birthplace + label: Birthplace + type: STRING + description: The birthplace of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.birthplace + then: + '@path': $.traits.birthplace + else: + '@path': $.properties.birthplace + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cPczTMufr2g4g2FwjXBkJF + sortOrder: 3 + fieldKey: constituent_id + label: Constituent ID + type: STRING + description: The ID of the constituent. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6AB9JFYXji9VQfK1qwonLE + sortOrder: 4 + fieldKey: email + label: Email + type: OBJECT + description: The constituent's email address. + placeholder: '' + defaultValue: + address: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.properties.email + do_not_email: '' + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mioda6mzCvPZ3PicibSzRQ + sortOrder: 5 + fieldKey: ethnicity + label: Ethnicity + type: STRING + description: The ethnicity of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.ethnicity + then: + '@path': $.traits.ethnicity + else: + '@path': $.properties.ethnicity + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jPmo2ShxjBf7w6D6P9Huma + sortOrder: 6 + fieldKey: first + label: First Name + type: STRING + description: The constituent's first name up to 50 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.firstName + then: + '@path': $.traits.firstName + else: + '@path': $.properties.firstName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nEaZiKnDdxrTPirTHvrCpF + sortOrder: 7 + fieldKey: former_name + label: Former Name + type: STRING + description: The constituent's former name up to 100 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.formerName + then: + '@path': $.traits.formerName + else: + '@path': $.properties.formerName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ww1zqpFvWeyE5P5teBfKL3 + sortOrder: 8 + fieldKey: gender + label: Gender + type: STRING + description: The constituent's gender. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.gender + then: + '@path': $.traits.gender + else: + '@path': $.properties.gender + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fdRTh9G4uW7s5qm6h8kcsV + sortOrder: 9 + fieldKey: gives_anonymously + label: Gives Anonymously + type: BOOLEAN + description: Indicates whether the constituent gives anonymously. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.givesAnonymously + then: + '@path': $.traits.givesAnonymously + else: + '@path': $.properties.givesAnonymously + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wZZzenaMkLkc2Nq6oKCyDR + sortOrder: 10 + fieldKey: income + label: Income + type: STRING + description: The constituent's income. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.income + then: + '@path': $.traits.income + else: + '@path': $.properties.income + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3GV3K9b8Y4SyHWmiEujzwd + sortOrder: 11 + fieldKey: industry + label: Industry + type: STRING + description: The constituent's industry. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.industry + then: + '@path': $.traits.industry + else: + '@path': $.properties.industry + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qxPqcuVHkxRpCCCSGARNkK + sortOrder: 12 + fieldKey: last + label: Last Name + type: STRING + description: >- + The constituent's last name up to 100 characters. This is required to + create a constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.lastName + then: + '@path': $.traits.lastName + else: + '@path': $.properties.lastName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mmtDRgc3jk2W3z2UXUqbug + sortOrder: 13 + fieldKey: lookup_id + label: Lookup ID + type: STRING + description: The organization-defined identifier for the constituent. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cGK2SfisDbBzMK8yb6faCi + sortOrder: 14 + fieldKey: marital_status + label: Marital Status + type: STRING + description: >- + The constituent's marital status. Available values are the entries in + the Marital Status table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.maritalStatus + then: + '@path': $.traits.maritalStatus + else: + '@path': $.properties.maritalStatus + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uDSNUhQNYzyPTe1rhYY1FM + sortOrder: 15 + fieldKey: online_presence + label: Online Presence + type: OBJECT + description: The constituent's online presence. + placeholder: '' + defaultValue: + address: + '@if': + exists: + '@path': $.traits.website + then: + '@path': $.traits.website + else: + '@path': $.properties.website + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gXHFV8s4VytTUixABzhBVn + sortOrder: 16 + fieldKey: phone + label: Phone + type: OBJECT + description: The constituent's phone number. + placeholder: '' + defaultValue: + do_not_call: '' + number: + '@if': + exists: + '@path': $.traits.phone + then: + '@path': $.traits.phone + else: + '@path': $.properties.phone + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9thXQxTCvdxGasW6zpXY8L + sortOrder: 17 + fieldKey: preferred_name + label: Preferred Name + type: STRING + description: The constituent's preferred name up to 50 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.preferredName + then: + '@path': $.traits.preferredName + else: + '@path': $.properties.preferredName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pxA8mK7cSCUJb8YQT3cCrx + sortOrder: 18 + fieldKey: religion + label: Religion + type: STRING + description: The religion of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.religion + then: + '@path': $.traits.religion + else: + '@path': $.properties.religion + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: o4qfvb8DKrNzZUvJZUsMGu + sortOrder: 19 + fieldKey: suffix + label: Suffix + type: STRING + description: >- + The constituent's primary suffix. Available values are the entries in + the Suffixes table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.suffix + then: + '@path': $.traits.suffix + else: + '@path': $.properties.suffix + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nLXcjGRVSpTnbgtxK2Uju3 + sortOrder: 20 + fieldKey: suffix_2 + label: Secondary Suffix + type: STRING + description: >- + The constituent's secondary suffix. Available values are the entries in + the Suffixes table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.suffix2 + then: + '@path': $.traits.suffix2 + else: + '@path': $.properties.suffix2 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uefnfJyh1UA8n8asERfiF2 + sortOrder: 21 + fieldKey: title + label: Title + type: STRING + description: >- + The constituent's primary title. Available values are the entries in the + Titles table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.title + then: + '@path': $.traits.title + else: + '@path': $.properties.title + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rvXDLXMEMxEWhQtRAhuosc + sortOrder: 22 + fieldKey: title_2 + label: Secondary Title + type: STRING + description: >- + The constituent's secondary title. Available values are the entries in + the Titles table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.title2 + then: + '@path': $.traits.title2 + else: + '@path': $.properties.title2 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9A8CWrEJjNoW413cnwPUK + name: Create Gift + slug: createGift + description: Create a Gift record in Raiser's Edge NXT. + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event = "Donation Completed" + fields: + - id: 7BvpcJ5TXoMDBo2Y72wYdc + sortOrder: 0 + fieldKey: acknowledgement + label: Acknowledgement + type: OBJECT + description: The gift acknowledgement. + placeholder: '' + defaultValue: + date: + '@path': $.properties.acknowledgement.date + status: + '@path': $.properties.acknowledgement.status + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: e55S1i7MCfdDpBstkSBE99 + sortOrder: 1 + fieldKey: amount + label: Gift Amount + type: NUMBER + description: The monetary amount of the gift in number format, e.g. 12.34 + placeholder: '' + defaultValue: + '@path': $.properties.revenue + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 95rvZ9m5rFLr9U9gd5DxFg + sortOrder: 2 + fieldKey: batch_number + label: Batch Number + type: STRING + description: >- + The batch number of the gift up to 50 characters (including the batch + prefix). + placeholder: '' + defaultValue: + '@path': $.properties.batchNumber + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5V3sMq9Z1qC6KVwHTBAdUS + sortOrder: 3 + fieldKey: batch_prefix + label: Batch Prefix + type: STRING + description: >- + The batch prefix of the gift. If provided, must include at least one + letter. Required when Batch Number has a value, and defaults to "API" if + no value is provided. + placeholder: '' + defaultValue: + '@path': $.properties.batchPrefix + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fHj9YFR5CZsn83JPCnLfAw + sortOrder: 4 + fieldKey: check_date + label: Check Date + type: DATETIME + description: The check date in ISO-8601 format. + placeholder: '' + defaultValue: + '@path': $.properties.checkDate + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3iguM2ZshdgqCCrxK53Mbj + sortOrder: 5 + fieldKey: check_number + label: Check Number + type: STRING + description: The check number in string format, e.g. "12345" + placeholder: '' + defaultValue: + '@path': $.properties.checkNumber + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7s2UYXCC7Qh3dgBnMiLa33 + sortOrder: 6 + fieldKey: constituency + label: Constituency + type: STRING + description: >- + The constituency value of the gift. If no value is provided, the default + constituency of the donor will be used. + placeholder: '' + defaultValue: + '@path': $.properties.constituency + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: njP8iauneo2pqnSQMsRFbG + sortOrder: 7 + fieldKey: date + label: Gift Date + type: DATETIME + description: The gift date in ISO-8601 format. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: iaDt3xLfMvs4oeyv9T9Rg6 + sortOrder: 8 + fieldKey: default_fundraiser_credits + label: Default Fundraiser Credits + type: BOOLEAN + description: Indicates whether to use default fundraiser credits. + placeholder: '' + defaultValue: + '@path': $.properties.defaultFundraiserCredits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kZ4GZxXqCpDihs3vqUZhqk + sortOrder: 9 + fieldKey: default_soft_credits + label: Default Soft Credits + type: BOOLEAN + description: Indicates whether to use default soft credits. + placeholder: '' + defaultValue: + '@path': $.properties.defaultSoftCredits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: itexK5J54hH1rWP6LbME68 + sortOrder: 10 + fieldKey: fund_id + label: Fund ID + type: STRING + description: The ID of the fund associated with the gift. + placeholder: '' + defaultValue: + '@path': $.properties.fundId + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: s3yzwh2FuH4bwTTFvQByWz + sortOrder: 11 + fieldKey: gift_code + label: Gift Code + type: STRING + description: The gift code. Available values are the entries in the Gift Code table. + placeholder: '' + defaultValue: + '@path': $.properties.giftCode + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kbsSPXibHHsMSjnv49vszn + sortOrder: 12 + fieldKey: gift_status + label: Gift Status + type: STRING + description: >- + The status of the gift. Available values are "Active", "Held", + "Terminated", "Completed", and "Cancelled". + placeholder: '' + defaultValue: + '@path': $.properties.giftStatus + required: false + multiple: false + choices: + - label: Active + value: Active + - label: Held + value: Held + - label: Terminated + value: Terminated + - label: Completed + value: Completed + - label: Cancelled + value: Cancelled + dynamic: false + allowNull: false + - id: uVHN1k5aCekzmMzqK9gT49 + sortOrder: 13 + fieldKey: is_anonymous + label: Is Anonymous + type: BOOLEAN + description: Indicates whether the gift is anonymous. + placeholder: '' + defaultValue: + '@path': $.properties.isAnonymous + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bKbqEJtbPVWWjoGvPZK6X + sortOrder: 14 + fieldKey: linked_gifts + label: Linked Gifts + type: STRING + description: >- + The recurring gift associated with the payment being added. When adding + a recurring gift payment, a linked_gifts field must be included as an + array of strings with the ID of the recurring gift to which the payment + is linked. + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: hTZEbvTo1YFdEe6Q5Qu2T1 + sortOrder: 15 + fieldKey: lookup_id + label: Lookup ID + type: STRING + description: The organization-defined identifier for the gift. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cHubaN94dqBzw9KZu6yp77 + sortOrder: 16 + fieldKey: payment_method + label: Payment Method + type: STRING + description: >- + The payment method. Available values are "Cash", "CreditCard", + "PersonalCheck", "DirectDebit", "Other", "PayPal", or "Venmo". + placeholder: '' + defaultValue: + '@path': $.properties.paymentMethod + required: true + multiple: false + choices: + - label: Cash + value: Cash + - label: Credit Card + value: CreditCard + - label: Personal Check + value: PersonalCheck + - label: Direct Debit + value: DirectDebit + - label: Other + value: Other + - label: PayPal + value: PayPal + - label: Venmo + value: Venmo + dynamic: false + allowNull: false + - id: q95poB5LJbEZRRB78CiAxw + sortOrder: 17 + fieldKey: post_date + label: Post Date + type: DATETIME + description: The date that the gift was posted to general ledger in ISO-8601 format. + placeholder: '' + defaultValue: + '@path': $.properties.postDate + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: s2mRBCvPHkQgdKkvrxvsiG + sortOrder: 18 + fieldKey: post_status + label: Post Status + type: STRING + description: >- + The general ledger post status of the gift. Available values are + "Posted", "NotPosted", and "DoNotPost". + placeholder: '' + defaultValue: NotPosted + required: false + multiple: false + choices: + - label: Posted + value: Posted + - label: Not Posted + value: NotPosted + - label: Do Not Post + value: DoNotPost + dynamic: false + allowNull: false + - id: 2oxbgJjRHWKQgjPRm8dj5k + sortOrder: 19 + fieldKey: receipt + label: Receipt + type: OBJECT + description: The gift receipt. + placeholder: '' + defaultValue: + date: + '@path': $.properties.receipt.date + status: + '@path': $.properties.receipt.status + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rHoh4HaEZx1Xu8bNakRSWr + sortOrder: 20 + fieldKey: recurring_gift_schedule + label: Recurring Gift Schedule + type: OBJECT + description: >- + The recurring gift schedule. When adding a recurring gift, a schedule is + required. + placeholder: '' + defaultValue: + end_date: + '@path': $.properties.recurring_gift_schedule.end_date + frequency: + '@path': $.properties.recurring_gift_schedule.frequency + start_date: + '@path': $.properties.recurring_gift_schedule.start_date + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cm54jNEq3K5HSaB1Lo3XWK + sortOrder: 21 + fieldKey: reference + label: Reference + type: STRING + description: >- + Notes to track special details about a gift such as the motivation + behind it or a detailed description of a gift-in-kind. Limited to 255 + characters. + placeholder: '' + defaultValue: + '@path': $.properties.reference + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nm1Hab7SjL9eiHnC5YDzQ1 + sortOrder: 22 + fieldKey: subtype + label: Subtype + type: STRING + description: The subtype of the gift. + placeholder: '' + defaultValue: + '@path': $.properties.subtype + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pzGgzgzQT2ji5xvyifrpA6 + sortOrder: 23 + fieldKey: type + label: Type + type: STRING + description: >- + The gift type. Available values are "Donation", "Other", "GiftInKind", + "RecurringGift", and "RecurringGiftPayment". + placeholder: '' + defaultValue: Donation + required: false + multiple: false + choices: + - label: Donation + value: Donation + - label: Other + value: Other + - label: GiftInKind + value: GiftInKind + - label: RecurringGift + value: RecurringGift + - label: RecurringGiftPayment + value: RecurringGiftPayment + dynamic: false + allowNull: false + - id: 8tnSx7imCtuNE3siXSZt5v + sortOrder: 24 + fieldKey: constituent_address + label: Constituent Address + type: OBJECT + description: The constituent's address. + placeholder: '' + defaultValue: + address_lines: + '@if': + exists: + '@path': $.traits.address.street + then: + '@path': $.traits.address.street + else: + '@path': $.properties.address.street + city: + '@if': + exists: + '@path': $.traits.address.city + then: + '@path': $.traits.address.city + else: + '@path': $.properties.address.city + country: + '@if': + exists: + '@path': $.traits.address.country + then: + '@path': $.traits.address.country + else: + '@path': $.properties.address.country + do_not_mail: '' + postal_code: + '@if': + exists: + '@path': $.traits.address.postalCode + then: + '@path': $.traits.address.postalCode + else: + '@path': $.properties.address.postalCode + primary: '' + state: + '@if': + exists: + '@path': $.traits.address.state + then: + '@path': $.traits.address.state + else: + '@path': $.properties.address.state + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7AqrMHMSnpRsCEUxmtcEna + sortOrder: 25 + fieldKey: constituent_birthdate + label: Constituent Birthdate + type: DATETIME + description: The constituent's birthdate. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.birthday + then: + '@path': $.traits.birthday + else: + '@path': $.properties.birthday + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pEqefZTxZteDCPTD6T8AVv + sortOrder: 26 + fieldKey: constituent_birthplace + label: Constituent Birthplace + type: STRING + description: The birthplace of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.birthplace + then: + '@path': $.traits.birthplace + else: + '@path': $.properties.birthplace + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qP2JPSxpnEQMWtnZoADwRr + sortOrder: 27 + fieldKey: constituent_id + label: Constituent ID + type: STRING + description: The ID of the constituent. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cwfP3fKSHfdxbkWWJ1x7Ry + sortOrder: 28 + fieldKey: constituent_email + label: Constituent Email + type: OBJECT + description: The constituent's email address. + placeholder: '' + defaultValue: + address: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.properties.email + do_not_email: '' + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ouMURgJfVZQJuT7YXWLhfG + sortOrder: 29 + fieldKey: constituent_ethnicity + label: Constituent Ethnicity + type: STRING + description: The ethnicity of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.ethnicity + then: + '@path': $.traits.ethnicity + else: + '@path': $.properties.ethnicity + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8ACXyHGaPG927jRVStMMQ9 + sortOrder: 30 + fieldKey: constituent_first + label: Constituent First Name + type: STRING + description: The constituent's first name up to 50 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.firstName + then: + '@path': $.traits.firstName + else: + '@path': $.properties.firstName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4YQDQFwLprgFZbGQAb3n1i + sortOrder: 31 + fieldKey: constituent_former_name + label: Constituent Former Name + type: STRING + description: The constituent's former name up to 100 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.formerName + then: + '@path': $.traits.formerName + else: + '@path': $.properties.formerName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: szxnX6XW3qwPSiL1rLYnRc + sortOrder: 32 + fieldKey: constituent_gender + label: Constituent Gender + type: STRING + description: The constituent's gender. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.gender + then: + '@path': $.traits.gender + else: + '@path': $.properties.gender + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 76D7qi6DHrpvGNqUZsy2qN + sortOrder: 33 + fieldKey: constituent_gives_anonymously + label: Constituent Gives Anonymously + type: BOOLEAN + description: Indicates whether the constituent gives anonymously. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.givesAnonymously + then: + '@path': $.traits.givesAnonymously + else: + '@path': $.properties.givesAnonymously + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: juBaqcrm1c8FwGcxfRRDdM + sortOrder: 34 + fieldKey: constituent_income + label: Constituent Income + type: STRING + description: The constituent's income. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.income + then: + '@path': $.traits.income + else: + '@path': $.properties.income + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: xihSBHf9UZzvQpNxihGtXW + sortOrder: 35 + fieldKey: constituent_industry + label: Constituent Industry + type: STRING + description: The constituent's industry. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.industry + then: + '@path': $.traits.industry + else: + '@path': $.properties.industry + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uFkaodnXDYsx5LNcXDiwh8 + sortOrder: 36 + fieldKey: constituent_last + label: Constituent Last Name + type: STRING + description: >- + The constituent's last name up to 100 characters. This is required to + create a constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.lastName + then: + '@path': $.traits.lastName + else: + '@path': $.properties.lastName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eYYwazts8qM5qRwzrRwaZd + sortOrder: 37 + fieldKey: constituent_lookup_id + label: Constituent Lookup ID + type: STRING + description: The organization-defined identifier for the constituent. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: xda2uQdyKqN4ZReVXhdmd7 + sortOrder: 38 + fieldKey: constituent_marital_status + label: Constituent Marital Status + type: STRING + description: >- + The constituent's marital status. Available values are the entries in + the Marital Status table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.maritalStatus + then: + '@path': $.traits.maritalStatus + else: + '@path': $.properties.maritalStatus + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2sEWBSEoLNoXmu7cedneRv + sortOrder: 39 + fieldKey: constituent_online_presence + label: Constituent Online Presence + type: OBJECT + description: The constituent's online presence. + placeholder: '' + defaultValue: + address: + '@if': + exists: + '@path': $.traits.website + then: + '@path': $.traits.website + else: + '@path': $.properties.website + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rBRuqgDjwrdsL6QBmjH2ow + sortOrder: 40 + fieldKey: constituent_phone + label: Constituent Phone + type: OBJECT + description: The constituent's phone number. + placeholder: '' + defaultValue: + do_not_call: '' + number: + '@if': + exists: + '@path': $.traits.phone + then: + '@path': $.traits.phone + else: + '@path': $.properties.phone + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: nUKEFpfT2aakYfoL9UjzBC + sortOrder: 41 + fieldKey: constituent_preferred_name + label: Constituent Preferred Name + type: STRING + description: The constituent's preferred name up to 50 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.preferredName + then: + '@path': $.traits.preferredName + else: + '@path': $.properties.preferredName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: gmNCNA6tuTfPb2r54oMv9v + sortOrder: 42 + fieldKey: constituent_religion + label: Constituent Religion + type: STRING + description: The religion of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.religion + then: + '@path': $.traits.religion + else: + '@path': $.properties.religion + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uUoDrTfxx9rEGY59uaUXLS + sortOrder: 43 + fieldKey: constituent_suffix + label: Constituent Suffix + type: STRING + description: >- + The constituent's primary suffix. Available values are the entries in + the Suffixes table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.suffix + then: + '@path': $.traits.suffix + else: + '@path': $.properties.suffix + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8Q7ujwEvqcjvnWJvrwzT8H + sortOrder: 44 + fieldKey: constituent_suffix_2 + label: Constituent Secondary Suffix + type: STRING + description: >- + The constituent's secondary suffix. Available values are the entries in + the Suffixes table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.suffix2 + then: + '@path': $.traits.suffix2 + else: + '@path': $.properties.suffix2 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oF6RGhXcBg3JPbvbZjTHfm + sortOrder: 45 + fieldKey: constituent_title + label: Constituent Title + type: STRING + description: >- + The constituent's primary title. Available values are the entries in the + Titles table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.title + then: + '@path': $.traits.title + else: + '@path': $.properties.title + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6q7CGUxtB67VMJRpztPgTF + sortOrder: 46 + fieldKey: constituent_title_2 + label: Constituent Secondary Title + type: STRING + description: >- + The constituent's secondary title. Available values are the entries in + the Titles table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.title2 + then: + '@path': $.traits.title2 + else: + '@path': $.properties.title2 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9iguHKv3LwEMyDoCndcfF8 + name: Create Constituent Action + slug: createConstituentAction + description: Create a Constituent Action record in Raiser's Edge NXT. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: 5c65HoTQYdwtjTWnNFBm3L + sortOrder: 0 + fieldKey: date + label: Date + type: DATETIME + description: The action date in ISO-8601 format. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pPQ6vqRGyxEqcoZD7mMEsv + sortOrder: 1 + fieldKey: category + label: Category + type: STRING + description: >- + The channel or intent of the constituent interaction. Available values + are Phone Call, Meeting, Mailing, Email, and Task/Other. + placeholder: '' + defaultValue: + '@path': $.properties.category + required: true + multiple: false + choices: + - label: Phone Call + value: Phone Call + - label: Meeting + value: Meeting + - label: Mailing + value: Mailing + - label: Email + value: Email + - label: Task/Other + value: Task/Other + dynamic: false + allowNull: false + - id: feDWFNx875f6EEPGRLLU8h + sortOrder: 2 + fieldKey: completed + label: Completed + type: BOOLEAN + description: Indicates whether the action is complete. + placeholder: '' + defaultValue: + '@path': $.properties.completed + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: aHUmN3WoTraYem2AsJvfsr + sortOrder: 3 + fieldKey: completed_date + label: Completed Date + type: DATETIME + description: The date when the action was completed in ISO-8601 format. + placeholder: '' + defaultValue: + '@path': $.properties.completedDate + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uDHW3ScX7pijNNwnABgDhv + sortOrder: 4 + fieldKey: description + label: Description + type: STRING + description: The detailed explanation that elaborates on the action summary. + placeholder: '' + defaultValue: + '@path': $.properties.description + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ibrU2XVqHDEz9yMh62DTgE + sortOrder: 5 + fieldKey: direction + label: Direction + type: STRING + description: >- + The direction of the action. Available values are "Inbound" and + "Outbound". + placeholder: '' + defaultValue: Inbound + required: false + multiple: false + choices: + - label: Inbound + value: Inbound + - label: Outbound + value: Outbound + dynamic: false + allowNull: false + - id: 5rj3FFsp3XjLH39bwErBAx + sortOrder: 6 + fieldKey: end_time + label: End Time + type: STRING + description: >- + The end time of the action. Uses 24-hour time in the HH:mm format. For + example, 17:30 represents 5:30 p.m. + placeholder: '' + defaultValue: + '@path': $.properties.endTime + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: jEEHZkAyS13pmqk5DKSPjk + sortOrder: 7 + fieldKey: fundraisers + label: Fundraisers + type: STRING + description: >- + The set of immutable constituent system record IDs for the fundraisers + associated with the action. + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: q5QkVX2wN24K45AqFo5tub + sortOrder: 8 + fieldKey: location + label: Location + type: STRING + description: >- + The location of the action. Available values are the entries in the + Action Locations table. + placeholder: '' + defaultValue: + '@path': $.properties.location + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: uF5Nr6orb3jQunizRun2Ky + sortOrder: 9 + fieldKey: opportunity_id + label: Opportunity ID + type: STRING + description: >- + The immutable system record ID of the opportunity associated with the + action. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: LREauZrrSo5ddg2vLKuPr + sortOrder: 10 + fieldKey: outcome + label: Outcome + type: STRING + description: >- + The outcome of the action. Available values are Successful and + Unsuccessful. + placeholder: '' + defaultValue: + '@path': $.properties.outcome + required: false + multiple: false + choices: + - label: Successful + value: Successful + - label: Unsuccessful + value: Unsuccessful + dynamic: false + allowNull: false + - id: 8hrqeJNkGyd3LAQwkTaBbr + sortOrder: 11 + fieldKey: priority + label: Priority + type: STRING + description: The priority of the action. Available values are Normal, High, and Low. + placeholder: '' + defaultValue: Normal + required: false + multiple: false + choices: + - label: High + value: High + - label: Low + value: Low + - label: Normal + value: Normal + dynamic: false + allowNull: false + - id: myPmFTWaYkXWkBY4rKRQnN + sortOrder: 12 + fieldKey: start_time + label: Start Time + type: STRING + description: >- + The start time of the action. Uses 24-hour time in the HH:mm format. For + example, 17:30 represents 5:30 p.m. + placeholder: '' + defaultValue: + '@path': $.properties.startTime + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vHBJui9n7SSV7tmwDjrAmS + sortOrder: 13 + fieldKey: status + label: Status + type: STRING + description: >- + The action status. If the system is configured to use custom action + statuses, available values are the entries in the Action Status table. + placeholder: '' + defaultValue: + '@path': $.properties.status + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: eSwbNJJD7vFLtUG1AHkMGU + sortOrder: 14 + fieldKey: summary + label: Summary + type: STRING + description: >- + The short description of the action that appears at the top of the + record. Limited to 255 characters. + placeholder: '' + defaultValue: + '@path': $.properties.summary + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kEgYCd3KxPwSJBcFtoYr9R + sortOrder: 15 + fieldKey: type + label: Type + type: STRING + description: >- + Additional description of the action to complement the category. + Available values are the entries in the Actions table. + placeholder: '' + defaultValue: + '@path': $.properties.type + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7pRZNNwMZWHQP6aXg6orLj + sortOrder: 16 + fieldKey: author + label: Author + type: STRING + description: >- + The author of the action's summary and description. If not supplied, + will have a default set based on the user's account. Limited to 50 + characters. + placeholder: '' + defaultValue: + '@path': $.properties.author + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hU9CNhJY4wioUduvBV7XiY + sortOrder: 17 + fieldKey: constituent_address + label: Constituent Address + type: OBJECT + description: The constituent's address. + placeholder: '' + defaultValue: + address_lines: + '@if': + exists: + '@path': $.traits.address.street + then: + '@path': $.traits.address.street + else: + '@path': $.properties.address.street + city: + '@if': + exists: + '@path': $.traits.address.city + then: + '@path': $.traits.address.city + else: + '@path': $.properties.address.city + country: + '@if': + exists: + '@path': $.traits.address.country + then: + '@path': $.traits.address.country + else: + '@path': $.properties.address.country + do_not_mail: '' + postal_code: + '@if': + exists: + '@path': $.traits.address.postalCode + then: + '@path': $.traits.address.postalCode + else: + '@path': $.properties.address.postalCode + primary: '' + state: + '@if': + exists: + '@path': $.traits.address.state + then: + '@path': $.traits.address.state + else: + '@path': $.properties.address.state + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2QW1FTSktzCkoX9hcGsd8F + sortOrder: 18 + fieldKey: constituent_birthdate + label: Constituent Birthdate + type: DATETIME + description: The constituent's birthdate. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.birthday + then: + '@path': $.traits.birthday + else: + '@path': $.properties.birthday + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rpWew7DdEgJ5AACdnEbbVR + sortOrder: 19 + fieldKey: constituent_birthplace + label: Constituent Birthplace + type: STRING + description: The birthplace of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.birthplace + then: + '@path': $.traits.birthplace + else: + '@path': $.properties.birthplace + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: j8NT5tw5rbnTAMRMzvb6A2 + sortOrder: 20 + fieldKey: constituent_id + label: Constituent ID + type: STRING + description: The ID of the constituent. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 9qYmUCx6dT53joNVuYDRJP + sortOrder: 21 + fieldKey: constituent_email + label: Constituent Email + type: OBJECT + description: The constituent's email address. + placeholder: '' + defaultValue: + address: + '@if': + exists: + '@path': $.traits.email + then: + '@path': $.traits.email + else: + '@path': $.properties.email + do_not_email: '' + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: kVnZZMw3g4boZvGAJrpLEk + sortOrder: 22 + fieldKey: constituent_ethnicity + label: Constituent Ethnicity + type: STRING + description: The ethnicity of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.ethnicity + then: + '@path': $.traits.ethnicity + else: + '@path': $.properties.ethnicity + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: moixxefvPKiKAWzmeHb6RT + sortOrder: 23 + fieldKey: constituent_first + label: Constituent First Name + type: STRING + description: The constituent's first name up to 50 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.firstName + then: + '@path': $.traits.firstName + else: + '@path': $.properties.firstName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: auzWLCiZnrC6ohMJXntkWe + sortOrder: 24 + fieldKey: constituent_former_name + label: Constituent Former Name + type: STRING + description: The constituent's former name up to 100 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.formerName + then: + '@path': $.traits.formerName + else: + '@path': $.properties.formerName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7K6REALbcJJaw2nWma4DfJ + sortOrder: 25 + fieldKey: constituent_gender + label: Constituent Gender + type: STRING + description: The constituent's gender. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.gender + then: + '@path': $.traits.gender + else: + '@path': $.properties.gender + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rTEiZVYUDikUTuyAMbFqpi + sortOrder: 26 + fieldKey: constituent_gives_anonymously + label: Constituent Gives Anonymously + type: BOOLEAN + description: Indicates whether the constituent gives anonymously. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.givesAnonymously + then: + '@path': $.traits.givesAnonymously + else: + '@path': $.properties.givesAnonymously + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: e3ux9iCsEVPiVzABbRApjL + sortOrder: 27 + fieldKey: constituent_income + label: Constituent Income + type: STRING + description: The constituent's income. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.income + then: + '@path': $.traits.income + else: + '@path': $.properties.income + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cwK1LaeHWWhUkBZJ5GcLgq + sortOrder: 28 + fieldKey: constituent_industry + label: Constituent Industry + type: STRING + description: The constituent's industry. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.industry + then: + '@path': $.traits.industry + else: + '@path': $.properties.industry + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mRZRnEM6AuWTe71F44d7np + sortOrder: 29 + fieldKey: constituent_last + label: Constituent Last Name + type: STRING + description: >- + The constituent's last name up to 100 characters. This is required to + create a constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.lastName + then: + '@path': $.traits.lastName + else: + '@path': $.properties.lastName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4UzYomUfo5mSuVsnE8i6Zj + sortOrder: 30 + fieldKey: constituent_lookup_id + label: Constituent Lookup ID + type: STRING + description: The organization-defined identifier for the constituent. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mHHdJYxxc9YMRhDWCVi6yE + sortOrder: 31 + fieldKey: constituent_marital_status + label: Constituent Marital Status + type: STRING + description: >- + The constituent's marital status. Available values are the entries in + the Marital Status table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.maritalStatus + then: + '@path': $.traits.maritalStatus + else: + '@path': $.properties.maritalStatus + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tE7pw2zThMt6Szo94apv15 + sortOrder: 32 + fieldKey: constituent_online_presence + label: Constituent Online Presence + type: OBJECT + description: The constituent's online presence. + placeholder: '' + defaultValue: + address: + '@if': + exists: + '@path': $.traits.website + then: + '@path': $.traits.website + else: + '@path': $.properties.website + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mY3r2xWe8XCSvYwPkvYq9N + sortOrder: 33 + fieldKey: constituent_phone + label: Constituent Phone + type: OBJECT + description: The constituent's phone number. + placeholder: '' + defaultValue: + do_not_call: '' + number: + '@if': + exists: + '@path': $.traits.phone + then: + '@path': $.traits.phone + else: + '@path': $.properties.phone + primary: '' + type: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 41C31xvqdkuwTANdkTsFfM + sortOrder: 34 + fieldKey: constituent_preferred_name + label: Constituent Preferred Name + type: STRING + description: The constituent's preferred name up to 50 characters. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.preferredName + then: + '@path': $.traits.preferredName + else: + '@path': $.properties.preferredName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: dtHchXDxfLhX4bZVabBs2e + sortOrder: 35 + fieldKey: constituent_religion + label: Constituent Religion + type: STRING + description: The religion of the constituent. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.religion + then: + '@path': $.traits.religion + else: + '@path': $.properties.religion + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: c6D9ZuLdV4rdxNNNsRcjrD + sortOrder: 36 + fieldKey: constituent_suffix + label: Constituent Suffix + type: STRING + description: >- + The constituent's primary suffix. Available values are the entries in + the Suffixes table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.suffix + then: + '@path': $.traits.suffix + else: + '@path': $.properties.suffix + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4wcSvTrMWSGR21YXNUArVQ + sortOrder: 37 + fieldKey: constituent_suffix_2 + label: Constituent Secondary Suffix + type: STRING + description: >- + The constituent's secondary suffix. Available values are the entries in + the Suffixes table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.suffix2 + then: + '@path': $.traits.suffix2 + else: + '@path': $.properties.suffix2 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: r1BFZYK53f2Tcq2XBnpQrP + sortOrder: 38 + fieldKey: constituent_title + label: Constituent Title + type: STRING + description: >- + The constituent's primary title. Available values are the entries in the + Titles table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.title + then: + '@path': $.traits.title + else: + '@path': $.properties.title + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hu2R4iSjhWxN2q3Xu2Ko73 + sortOrder: 39 + fieldKey: constituent_title_2 + label: Constituent Secondary Title + type: STRING + description: >- + The constituent's secondary title. Available values are the entries in + the Titles table. + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.traits.title2 + then: + '@path': $.traits.title2 + else: + '@path': $.properties.title2 + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + presets: [] + partnerOwned: true +- id: 64244158b33d1380a79dc85c + display_name: Blend Ai + name: Blend Ai + slug: blend-ai + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/blend-ai + previous_names: + - Blend Ai + website: https://blnd.ai + status: PUBLIC_BETA + categories: + - Analytics + logo: + url: https://cdn.filepicker.io/api/file/XDZGjbflTneR2iomOUN3 + mark: + url: https://cdn.filepicker.io/api/file/dKyjFcsRTSB687TTgsKa + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: false + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: Blend API key - found on integration page. + required: true + label: API Key + actions: + - id: d9eBdkuVNmyRNAfgjdL6XS + name: Send Data + slug: sendData + description: Send data to Blend AI for product usage insights + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" or type = "page" or type = "screen" or type = "track" + fields: [] + presets: + - actionId: d9eBdkuVNmyRNAfgjdL6XS + name: Send Data to Blend + fields: {} + trigger: type = "identify" or type = "page" or type = "screen" or type = "track" + partnerOwned: true +- id: 5c6db002edda600001b2af8b + display_name: Blendo + name: Blendo + slug: blendo + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/blendo + previous_names: + - Blendo + website: https://www.blendo.co + status: PUBLIC + categories: + - Raw Data + - Analytics + logo: + url: https://cdn-devcenter.segment.com/2da68145-d850-425c-98b6-b622dc193c1b.svg + mark: + url: https://cdn-devcenter.segment.com/9259828c-c40c-44e7-acd7-d8474a919782.svg + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: Select your Segment pipeline and preview its settings for the API Key. + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 616d3b0494950977f91f81a4 + display_name: Blitzllama + name: Blitzllama + slug: blitzllama + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/blitzllama + previous_names: + - Blitzllama + website: https://blitzllama.com/ + status: PUBLIC + categories: + - Analytics + - Customer Success + - Surveys + - Performance Monitoring + logo: + url: https://cdn-devcenter.segment.com/bdd5fe96-dca4-4fec-9dd9-9ee281723443.svg + mark: + url: https://cdn-devcenter.segment.com/e437ea01-b22c-4457-bb3d-745709b1afcd.svg + methods: + track: false + identify: true + group: true + alias: false + screen: false + page: false + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: >- + Search for Segment within the Connections tab, and open the Segment modal + to get the Segment API key. + required: true + label: API Key + actions: [] + presets: [] + partnerOwned: true +- id: 5d4d88bbd02041672e51e3ca + display_name: Bloomreach Engagement + name: Bloomreach Engagement + slug: bloomreach-engagement + hidden: false + endpoints: + - US + regions: + - eu-west-1 + - us-west-2 + url: connections/destinations/catalog/bloomreach-engagement + previous_names: + - Exponea + - Bloomreach Engagement + website: https://exponea.com + status: PUBLIC + categories: + - Analytics + - Email Marketing + - Personalization + - A/B Testing + logo: + url: https://cdn.filepicker.io/api/file/DyHx37pzR0CtGmm5Ngoa + mark: + url: https://cdn.filepicker.io/api/file/ZeviLS0Rh6wBmCrJXkwd + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiBaseUrl + type: string + defaultValue: '' + description: Exponea endpoint URL (default https://api.exponea.com/) + required: true + label: API Base URL + - name: apiKey + type: string + defaultValue: '' + description: >- + Public key (find more here + https://docs.exponea.com/reference#section-setting-up-public-key-in-exponea-app) + required: true + label: API Key + - name: exponeaHardId + type: string + defaultValue: '' + description: >- + Specify hard id which will be used in Exponea, typical name is + 'registered'. The id must be already created in Exponea project. + required: true + label: Exponea hard ID + - name: exponeaSoftId + type: string + defaultValue: '' + description: >- + Specify soft id which will be used in Exponea, typical name is 'cookie'. + The id must be already created in Exponea project. + required: true + label: Exponea soft ID + - name: flattenNestedObjects + type: boolean + defaultValue: false + description: >- + Turn this setting on if you want to apply object flattening on customer + traits and event properties. + required: false + label: Flatten nested objects + - name: projectToken + type: string + defaultValue: '' + description: Exponea project token + required: true + label: Project token + - name: trackSessionPing + type: boolean + defaultValue: false + description: >- + Track an additional `session_ping` event with each 'page' and 'screen' + events. This will enable automatic `session_start` and `session_end` + tracking in Exponea. The Exponea soft ID must be set to 'cookie' for + session events to work. + required: false + label: Track session ping + actions: [] + presets: [] + partnerOwned: true +- id: 547610a5db31d978f14a5c4e + display_name: Blueshift + name: Blueshift + slug: blueshift + hidden: true + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/blueshift + previous_names: + - Blueshift + website: http://getblueshift.com/ + status: PUBLIC + categories: + - SMS & Push Notifications + - Advertising + - Email Marketing + logo: + url: https://d3hotuclm6if1r.cloudfront.net/logos/Blueshift-default.svg + mark: + url: https://cdn.filepicker.io/api/file/Fqsz0q3QPujUyMACLPLr + methods: + track: true + identify: true + group: false + alias: true + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-blueshift + type: BROWSER + - code: >- + https://github.com/segmentio/integrations/tree/master/integrations/blueshift + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: apiKey + type: string + defaultValue: '' + description: Your API key can be found in Account Profile > API Keys + required: true + label: API Key + - name: retarget + type: boolean + defaultValue: false + description: This will retarget page calls on the client-side + required: false + label: Retarget + actions: [] + presets: [] + partnerOwned: false +- id: 5642909ae954a874ca44c582 + display_name: Branch Metrics + name: Branch Metrics + slug: branch-metrics + hidden: false + endpoints: + - US + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/branch-metrics + previous_names: + - Branch Metrics + website: https://branch.io/ + status: PUBLIC + categories: + - Deep Linking + - Attribution + logo: + url: https://cdn.filepicker.io/api/file/Svc4UAgORe668HOiiyjd + mark: + url: https://cdn.filepicker.io/api/file/MfCJKP6VRoaLMG7sMY5m + methods: + track: true + identify: true + group: false + alias: false + screen: false + page: true + platforms: + browser: false + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/BranchMetrics/Segment-Branch-iOS + owner: PARTNER + type: IOS + - code: https://github.com/BranchMetrics/Segment-Branch-Android + owner: PARTNER + type: ANDROID + browserUnbundlingSupported: false + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: false + mobile: true + server: false + cloud: + web: false + mobile: false + server: false + settings: + - name: apiSecret + type: string + defaultValue: '' + description: >- + Required for server-side calls. Your Branch secret can be retrieved on the + settings page of the [Branch + dashboard](https://dashboard.branch.io/#/settings). + required: false + label: Branch Secret + - name: branch_key + type: string + defaultValue: '' + description: >- + Your Branch app key can be retrieved on the settings page of the [Branch + dashboard](https://dashboard.branch.io/#/settings). + required: true + label: Branch Key + actions: [] + presets: [] + partnerOwned: false +- id: 54efbf12db31d978f14aa8b5 + display_name: Braze + name: Braze + slug: braze + hidden: false + endpoints: + - US + - EU + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/braze + previous_names: + - Appboy + - Braze + website: https://www.braze.com/ + status: PUBLIC + categories: + - SMS & Push Notifications + - CRM + - Email Marketing + - A/B Testing + logo: + url: https://cdn.filepicker.io/api/file/9kBQvmLRR22d365ZqKRK + mark: + url: https://cdn.filepicker.io/api/file/HrjOOkkLR8WrUc1gEeeG + methods: + track: true + identify: true + group: true + alias: false + screen: false + page: true + platforms: + browser: true + mobile: true + server: true + warehouse: false + cloudAppObject: false + components: + - code: https://github.com/segment-integrations/analytics.js-integration-appboy + owner: SEGMENT + type: BROWSER + - code: https://github.com/Appboy/appboy-segment-ios + owner: PARTNER + type: IOS + - code: https://github.com/Appboy/appboy-segment-android + owner: PARTNER + type: ANDROID + - code: https://github.com/segmentio/integrations/tree/master/integrations/appboy + owner: SEGMENT + type: SERVER + browserUnbundlingSupported: true + browserUnbundlingPublic: true + replay: false + connection_modes: + device: + web: true + mobile: true + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: allowCrawlerActivity + type: boolean + defaultValue: false + description: >- + **Web Only:** By default, the Braze Web SDK ignores activity from known + spiders or web crawlers, such as Google, based on the user agent string. + This saves datapoints, makes analytics more accurate, and may improve page + rank. However, if you want Braze to log activity from these crawlers + instead, you may set this option to true. + required: false + label: Allow Crawler Activity + - name: apiKey + type: string + defaultValue: '' + description: >- + The API key found in your Braze dashboard, used to identify your + application as the app identifier. (Formerly 'API Key') + required: false + label: App Identifier + - name: appGroupId + type: string + defaultValue: '' + description: >- + This can be found in your Braze dashboard under **Settings > API Keys**. + (Formerly 'App Group Identifier') + required: true + label: REST API Key + - name: automatic_in_app_message_registration_enabled + type: boolean + defaultValue: true + description: >- + **Mobile Only:** Every activity in your app must be registered with Braze + to allow it to add in-app message views to the view hierarchy. By default, + Braze's Segment integration automatically registers every activity. + However, if you would like to manually register activities, you may do so + by disabling this setting. For more information, see the Braze + [documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/android/in-app_messaging/integration/#step-1-braze-in-app-message-manager-registration). + required: false + label: Enable Automatic In-App Message Registration + - name: automaticallyDisplayMessages + type: boolean + defaultValue: true + description: >- + **Web Only**: When this is enabled, all In-App Messages that a user is + eligible for are automatically delivered to the user. If you'd like to + register your own display subscribers or send soft push notifications to + your users, make sure to disable this option. + required: false + label: Automatically Send In-App Messages + - name: customEndpoint + type: string + defaultValue: '' + description: >- + If you've been assigned an API endpoint by the Braze team specifically for + use with their Mobile or Javascript SDKs, please input that here. It + should look something like: sdk.api.appboy.eu. Otherwise, leave this + blank. + required: false + label: Custom API Endpoint + - name: datacenter + type: select + defaultValue: '' + description: >- + Select where you want Braze to receive, process, and store data from this + destination. + + Choose your Appboy Gateway (ie. US 01, US 02, EU 01, etc.). + required: true + label: Endpoint Region + - name: doNotLoadFontAwesome + type: boolean + defaultValue: false + description: >- + **Web Only:** Braze uses [FontAwesome](https://fontawesome.com/) for + in-app message icons. By default, Braze will automatically load + FontAwesome from + https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css. + To disable this behavior (e.g. because your site uses a customized version + of FontAwesome), set this option to true. Note that if you do this, you + are responsible for ensuring that FontAwesome is loaded on your site - + otherwise in-app messages may not render correctly. **This setting is only + applicable if you are using version 2 of the Braze Web SDK.** + required: false + label: Do Not Load Font Awesome + - name: enableHtmlInAppMessages + type: boolean + defaultValue: false + description: >- + **Web only**: Enabling this option will allow Braze dashboard users to + write HTML In-App messages. Check out [Braze + Documentation](https://js.appboycdn.com/web-sdk/latest/doc/module-appboy.html#.initialize) + for more information on this setting. **This setting is only applicable if + you are using version 2 of the Braze Web SDK.** + required: false + label: Enable HTML In-App Messages + - name: enableLogging + type: boolean + defaultValue: false + description: >- + **Web Only:** Set to true to enable logging by default. Note that this + will cause Braze to log to the javascript console, which is visible to all + users! You should probably remove this or provide an alternate logger with + [appboy.setLogger()](https://js.appboycdn.com/web-sdk/2.0/doc/module-appboy.html#.setLogger) + before you release your page to production. **This setting is only + applicable if you are using version 2 of the Braze Web SDK.** + required: false + label: Enable Logging + - name: logPurchaseWhenRevenuePresent + type: boolean + defaultValue: false + description: >- + **Web Only:** When this option is enabled, all Track calls with a property + called `revenue` will trigger Braze's LogRevenue event. + required: false + label: Log Purchase when Revenue is present + - name: minimumIntervalBetweenTriggerActionsInSeconds + type: number + defaultValue: 30 + description: >- + **Web Only:** By default, a trigger action will only fire if at least 30 + seconds have elapsed since the last trigger action. Provide a value for + this configuration option to override that default with a value of your + own. We do not recommend making this value any smaller than 10 to avoid + spamming the user with notifications. **This setting is only applicable if + you are using version 2 of the Braze Web SDK.** + required: false + label: Minimum Interval Between Trigger Actions In Seconds + - name: onlyTrackKnownUsersOnWeb + type: boolean + defaultValue: false + description: >- + *Web Only* If enabled, this new setting delays calling of + `window.appboy.initialize` until there is an identify call that includes a + valid `userId`. When enabled, events for anonymous users will no longer be + sent to Braze. + required: false + label: Only Track Known Users + - name: openInAppMessagesInNewTab + type: boolean + defaultValue: false + description: >- + By default, links from in-app message clicks load in the current tab or a + new tab as specified in the dashboard on a message-by-message basis. Set + this option to true to force all links from in-app message clicks open in + a new tab or window. **This setting is only applicable if you are using + version 2 of the Braze Web SDK.** + required: false + label: Open In-App Messages In New Tab + - name: openNewsFeedCardsInNewTab + type: boolean + defaultValue: false + description: >- + By default, links from news feed cards load in the current tab or window. + Set this option to true to make links from news feed cards open in a new + tab or window. **This setting is only applicable if you are using version + 2 of the Braze Web SDK.** + required: false + label: Open News Feed Cards In New Tab + - name: restCustomEndpoint + type: string + defaultValue: '' + description: >- + If you've been assigned an API endpoint by the Braze team specifically for + use with their REST API, please input that here. It should look something + like "https://foo.bar.braze.com". Otherwise, leave this blank. + required: false + label: Custom REST API Endpoint + - name: safariWebsitePushId + type: string + defaultValue: '' + description: >- + **Web Only**: To send push notifications on Safari, Braze needs your + Website Push Id. To get your Website Push ID, check out the first two + bullet points + [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup/). + required: false + label: Safari Website Push ID + - name: serviceWorkerLocation + type: string + defaultValue: '' + description: >- + Specify your `serviceWorkerLocation` as defined in the Braze Web SDK + documentation: + https://js.appboycdn.com/web-sdk/latest/doc/module-appboy.html + required: false + label: Service Worker Location + - name: sessionTimeoutInSeconds + type: number + defaultValue: 30 + description: >- + **Web Only:** By default, sessions time out after 30 seconds of + inactivity. Input a value for this configuration option to override that + default with a value of your own. For example, to override the setting + from 30 seconds to 30 minutes, input the value 1800. **This setting is + only applicable if you are using version 2 of the Braze Web SDK.** + required: false + label: Session Timeout In Seconds + - name: trackAllPages + type: boolean + defaultValue: false + description: >- + This will send all [`page` calls](https://segment.com/docs/spec/page/) to + Braze as a Loaded/Viewed a Page event. This option is disabled by default + since Braze isn't generally used for page view tracking. + required: false + label: Track All Pages + - name: trackNamedPages + type: boolean + defaultValue: false + description: >- + This will send only [`page` calls](https://segment.com/docs/spec/page/) to + Braze that have a `name` associated with them. For example, + `page('Signup')` would translate to **Viewed Signup Page** in Braze. + required: false + label: Track Only Named Pages + - name: updateExistingOnly + type: boolean + defaultValue: false + description: >- + **Server Side only**: A flag to determine whether to update existing users + only, defaults to false + required: false + label: Update Existing Users Only + - name: version + type: select + defaultValue: '' + description: >- + **Web Only:** The [major](https://semver.org/) version of the Braze web + SDK you would like to use. Please reference their + [changelog](https://github.com/Appboy/appboy-web-sdk/blob/master/CHANGELOG.md) + for more info. **Please ensure you read + [this](https://segment.com/docs/connections/destinations/catalog/braze/#migrating-to-v2-of-the-braze-web-sdk) + section of our documentation carefully before changing this setting.** + required: false + label: Braze Web SDK Version + actions: [] + presets: [] + partnerOwned: false +- id: 60f9d0d048950c356be2e4da + display_name: Braze Cloud Mode (Actions) + name: Braze Cloud Mode (Actions) + slug: braze-cloud-mode-actions + hidden: false + endpoints: + - US + - EU + regions: + - us-west-2 + - eu-west-1 + url: connections/destinations/catalog/braze-cloud-mode-actions + previous_names: + - Braze Cloud Mode (Actions) + website: https://www.braze.com/ + status: PUBLIC + categories: + - Email Marketing + - CRM + - SMS & Push Notifications + logo: + url: https://cdn.filepicker.io/api/file/L0QKeLi4RtuRdDAjfZ7i + mark: + url: https://cdn.filepicker.io/api/file/cy3LENlKQEWSt5C4hoa5 + methods: + track: true + identify: true + group: true + alias: true + screen: false + page: true + platforms: + browser: true + mobile: false + server: true + warehouse: true + cloudAppObject: false + components: + - code: >- + https://github.com/segmentio/action-destinations/tree/main/packages/destination-actions/src/destinations/braze + owner: SEGMENT + type: SERVER + browserUnbundlingSupported: false + browserUnbundlingPublic: false + replay: false + connection_modes: + device: + web: false + mobile: false + server: false + cloud: + web: true + mobile: true + server: true + settings: + - name: api_key + type: password + defaultValue: '' + description: Created under Developer Console in the Braze Dashboard. + required: true + label: API Key + - name: app_id + type: string + defaultValue: '' + description: >- + The app identifier used to reference specific Apps in requests made to the + Braze API. Created under Developer Console in the Braze Dashboard. + required: false + label: App ID + - name: endpoint + type: select + defaultValue: https://rest.iad-01.braze.com + description: >- + Your Braze REST endpoint. [See more + details](https://www.braze.com/docs/api/basics/#endpoints) + required: true + label: REST Endpoint + actions: + - id: 2P24zUSAL8BUpyGYNGmD7M + name: Update User Profile + slug: updateUserProfile + description: Update a user's profile attributes in Braze + platform: CLOUD + hidden: false + defaultTrigger: type = "identify" + fields: + - id: rRqYDjduqBzuFRsQwtGfsK + sortOrder: 0 + fieldKey: external_id + label: External User ID + type: STRING + description: The unique user identifier + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 4usSnQDexcG2GYvdkdGnaM + sortOrder: 1 + fieldKey: user_alias + label: User Alias Object + type: OBJECT + description: >- + A user alias object. See [the + docs](https://www.braze.com/docs/api/objects_filters/user_alias_object/). + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bdCvmPLShapL8rD2meAbWw + sortOrder: 2 + fieldKey: braze_id + label: Braze User Identifier + type: STRING + description: The unique user identifier + placeholder: '' + defaultValue: + '@path': $.properties.braze_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: kLj1HpmaY7bVbywczJcyXK + sortOrder: 3 + fieldKey: country + label: Country + type: STRING + description: The country code of the user + placeholder: '' + defaultValue: + '@path': $.context.location.country + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: 7UZz4wqFZcNj1BB3PNhQxi + sortOrder: 4 + fieldKey: current_location + label: Current Location + type: OBJECT + description: The user's current longitude/latitude. + placeholder: '' + defaultValue: + latitude: + '@path': $.context.location.latitude + longitude: + '@path': $.context.location.longitude + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: nWiQsy194WXWtod5xgTYQC + sortOrder: 5 + fieldKey: date_of_first_session + label: Date of First Session + type: DATETIME + description: The date the user first used the app + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: wJXhojws4JQVCEyMHJ33HZ + sortOrder: 6 + fieldKey: date_of_last_session + label: Date of Last Session + type: DATETIME + description: The date the user last used the app + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: eTDRVZZyZ6ZJfzBqccb32P + sortOrder: 7 + fieldKey: dob + label: Date of Birth + type: DATETIME + description: The user's date of birth + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: 7PvqBc7fDSJ67bCv6yjqfu + sortOrder: 8 + fieldKey: email + label: Email + type: STRING + description: The user's email + placeholder: '' + defaultValue: + '@path': $.traits.email + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: g7k7ooMe3mwSuQx86Lbdf3 + sortOrder: 9 + fieldKey: email_subscribe + label: Email Subscribe + type: STRING + description: >- + The user's email subscription preference: “opted_in” (explicitly + registered to receive email messages), “unsubscribed” (explicitly opted + out of email messages), and “subscribed” (neither opted in nor out). + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wiwE6hKWo7j86FwYMtke99 + sortOrder: 10 + fieldKey: email_open_tracking_disabled + label: Email Open Tracking Disabled + type: BOOLEAN + description: >- + Set to true to disable the open tracking pixel from being added to all + future emails sent to this user. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: devCEjvYD52xtsyMLkDn5G + sortOrder: 11 + fieldKey: email_click_tracking_disabled + label: Email Click Tracking Disabled + type: BOOLEAN + description: >- + Set to true to disable the click tracking for all links within a future + email, sent to this user. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ojcBSpPbvnBQauMsgq9aZe + sortOrder: 12 + fieldKey: facebook + label: Facebook Attribution Data + type: OBJECT + description: >- + Hash of Facebook attribution containing any of `id` (string), `likes` + (array of strings), `num_friends` (integer). + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 5XCQAw3qkRedQMQTpp82Jj + sortOrder: 13 + fieldKey: first_name + label: First Name + type: STRING + description: The user's first name + placeholder: '' + defaultValue: + '@path': $.traits.firstName + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: oYhNtYQFriMiQdUuqcqSnE + sortOrder: 14 + fieldKey: gender + label: Gender + type: STRING + description: >- + The user's gender: “M”, “F”, “O” (other), “N” (not applicable), “P” + (prefer not to say) or nil (unknown). + placeholder: '' + defaultValue: + '@path': $.traits.gender + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: pMnjwKAVi1HA8SsBwE9fHm + sortOrder: 15 + fieldKey: home_city + label: Home City + type: STRING + description: The user's home city. + placeholder: '' + defaultValue: + '@path': $.traits.address.city + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: boCScwXd4zT11LsmBrQBMM + sortOrder: 16 + fieldKey: image_url + label: Image URL + type: STRING + description: URL of image to be associated with user profile. + placeholder: '' + defaultValue: + '@path': $.traits.avatar + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: tGMKXFVggkrHNic4kKFor4 + sortOrder: 17 + fieldKey: language + label: Language + type: STRING + description: The user's preferred language. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: ij7H2MsiahGcwU3Vp2dsN7 + sortOrder: 18 + fieldKey: last_name + label: Last Name + type: STRING + description: The user's last name + placeholder: '' + defaultValue: + '@path': $.traits.lastName + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rDPSFGnL1qq2VVQpEWUTq + sortOrder: 19 + fieldKey: marked_email_as_spam_at + label: Marked Email as Spam At + type: DATETIME + description: The date the user marked their email as spam. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: 6FyFek2fx1CmJfSdNKF7EP + sortOrder: 20 + fieldKey: phone + label: Phone Number + type: STRING + description: The user's phone number + placeholder: '' + defaultValue: + '@path': $.traits.phone + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: mVaqUoX6aC9zCKKGD9Ho1e + sortOrder: 21 + fieldKey: push_subscribe + label: Push Subscribe + type: STRING + description: >- + The user's push subscription preference: “opted_in” (explicitly + registered to receive push messages), “unsubscribed” (explicitly opted + out of push messages), and “subscribed” (neither opted in nor out). + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: fYjqoTeG2MgKrewJvSrNtZ + sortOrder: 22 + fieldKey: push_tokens + label: Push Tokens + type: OBJECT + description: >- + Array of objects with app_id and token string. You may optionally + provide a device_id for the device this token is associated with, e.g., + [{"app_id": App Identifier, "token": "abcd", "device_id": + "optional_field_value"}]. If a device_id is not provided, one will be + randomly generated. + placeholder: '' + required: false + multiple: true + choices: null + dynamic: false + allowNull: false + - id: qMyARHMVeRxkLoZQstzy6G + sortOrder: 23 + fieldKey: time_zone + label: Time zone + type: STRING + description: >- + The user’s time zone name from IANA Time Zone Database (e.g., + “America/New_York” or “Eastern Time (US & Canada)”). Only valid time + zone values will be set. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 6nKmYtwuwXwh49HHEpSCwd + sortOrder: 24 + fieldKey: twitter + label: Twitter Attribution Data + type: OBJECT + description: >- + Hash containing any of id (integer), screen_name (string, Twitter + handle), followers_count (integer), friends_count (integer), + statuses_count (integer). + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: sURGGekV6NMnvScTv3naov + sortOrder: 25 + fieldKey: custom_attributes + label: Custom Attributes + type: OBJECT + description: Hash of custom attributes to send to Braze + placeholder: '' + defaultValue: + '@path': $.traits + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: xiN8n57hqzgSwUXGLcLRcN + sortOrder: 26 + fieldKey: _update_existing_only + label: Update Existing Only + type: BOOLEAN + description: >- + Setting this flag to true will put the API in "Update Only" mode. When + using a "user_alias", "Update Only" mode is always true. + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: e2JNRq4Ya3NCfAVe17nPFF + sortOrder: 27 + fieldKey: enable_batching + label: Batch Data to Braze + type: BOOLEAN + description: >- + If true, Segment will batch events before sending to Braze’s user track + endpoint. Braze accepts batches of up to 75 events. + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3pnc4QJvUjWGi2bp6EnDt + name: Track Event + slug: trackEvent + description: Record custom events in Braze + platform: CLOUD + hidden: false + defaultTrigger: type = "track" and event != "Order Completed" + fields: + - id: 6PaXNXHJ4GYEumQZ8XPrwa + sortOrder: 0 + fieldKey: external_id + label: External User ID + type: STRING + description: The unique user identifier + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: wP6pdJkSEJsKoyy9r5Cuua + sortOrder: 1 + fieldKey: user_alias + label: User Alias Object + type: OBJECT + description: >- + A user alias object. See [the + docs](https://www.braze.com/docs/api/objects_filters/user_alias_object/). + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 3tjkyt1Uxomc28W5AVuSaU + sortOrder: 2 + fieldKey: email + label: Email + type: STRING + description: The user email + placeholder: '' + defaultValue: + '@path': $.traits.email + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rbi6rXbwZh1a4wUknPuJWW + sortOrder: 3 + fieldKey: braze_id + label: Braze User Identifier + type: STRING + description: The unique user identifier + placeholder: '' + defaultValue: + '@path': $.properties.braze_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: fdJGZu978yjoXDSNAy9ytw + sortOrder: 4 + fieldKey: name + label: Event Name + type: STRING + description: The event name + placeholder: '' + defaultValue: + '@path': $.event + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qAumTiBnY79xipPEXEz5v1 + sortOrder: 5 + fieldKey: time + label: Time + type: DATETIME + description: When the event occurred. + placeholder: '' + defaultValue: + '@path': $.receivedAt + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: cmUS2rZsGAnM35F2wKgxBz + sortOrder: 6 + fieldKey: properties + label: Event Properties + type: OBJECT + description: Properties of the event + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: q86kaWgx5QJX43SW7Wp97U + sortOrder: 7 + fieldKey: _update_existing_only + label: Update Existing Only + type: BOOLEAN + description: >- + Setting this flag to true will put the API in "Update Only" mode. When + using a "user_alias", "Update Only" mode is always true. + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: q3LYB6nm9B5euNnpRmey1r + sortOrder: 8 + fieldKey: enable_batching + label: Batch Data to Braze + type: BOOLEAN + description: >- + If true, Segment will batch events before sending to Braze’s user track + endpoint. Braze accepts batches of up to 75 events. + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vE7Gf9yobj2gTuMBhwmg7g + name: Track Purchase + slug: trackPurchase + description: Record purchases in Braze + platform: CLOUD + hidden: false + defaultTrigger: event = "Order Completed" + fields: + - id: 6XCCY43QFd1dnXDNvfg9QU + sortOrder: 0 + fieldKey: external_id + label: External User ID + type: STRING + description: The unique user identifier + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vfV5FFjkZ3GCF2ZUAJm8gF + sortOrder: 1 + fieldKey: user_alias + label: User Alias Object + type: OBJECT + description: >- + A user alias object. See [the + docs](https://www.braze.com/docs/api/objects_filters/user_alias_object/). + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ev7nYxX1G7BwiJYaXczu7 + sortOrder: 2 + fieldKey: email + label: Email + type: STRING + description: The user email + placeholder: '' + defaultValue: + '@path': $.traits.email + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: optXMtCKoKzMPePrTMTErD + sortOrder: 3 + fieldKey: braze_id + label: Braze User Identifier + type: STRING + description: The unique user identifier + placeholder: '' + defaultValue: + '@path': $.properties.braze_id + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: 3u3MP9EdF2fVN6fszNNc2P + sortOrder: 4 + fieldKey: time + label: Time + type: DATETIME + description: When the event occurred. + placeholder: '' + defaultValue: + '@path': $.receivedAt + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: dutvCnev2CBk3scgNpQUXy + sortOrder: 5 + fieldKey: products + label: Products + type: OBJECT + description: Products purchased + placeholder: '' + defaultValue: + '@path': $.properties.products + required: true + multiple: true + choices: null + dynamic: false + allowNull: false + - id: WQwcZT4oZLSZkjq7V7xDu + sortOrder: 6 + fieldKey: properties + label: Event Properties + type: OBJECT + description: Properties of the event + placeholder: '' + defaultValue: + '@path': $.properties + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: tYzinmWsFpL4fnyi7FNogq + sortOrder: 7 + fieldKey: _update_existing_only + label: Update Existing Only + type: BOOLEAN + description: >- + Setting this flag to true will put the API in "Update Only" mode. When + using a "user_alias", "Update Only" mode is always true. + placeholder: '' + defaultValue: false + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: rkURiNwJHoLExnva9FhMb3 + sortOrder: 8 + fieldKey: enable_batching + label: Batch Data to Braze + type: BOOLEAN + description: >- + If true, Segment will batch events before sending to Braze’s user track + endpoint. Braze accepts batches of up to 75 events. + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 7dNvUgwYkBjJjCrHHdo7jX + name: Debounce Middleware + slug: debouncePlugin description: >- - **Device Mode Only**: This will save battery life by buffering and - batching events sent to Adjust. But during development it's nicer to see - events come through immediately. - required: true - label: Buffer and batch events sent to Adjust - - name: trackAttributionData - type: boolean - defaultValue: false - description: Send Adjust Attribution data to Segment and other tools as a `track` call. - required: true - label: Track Attribution Data - actions: [] - presets: [] -- id: 54521fd525e721e32a72ee93 - display_name: AdLearn Open Platform - name: AdLearn Open Platform - slug: adlearn-open-platform - hidden: true + When enabled, it ensures that only events where at least one changed trait + value are sent to Braze, and events with duplicate traits are not sent. + Debounce functionality requires a frontend client to work. Therefore, it + cannot be used with server-side libraries or with Engage. + platform: WEB + hidden: false + defaultTrigger: type = "identify" or type = "group" + fields: [] + - id: sRxUEeJSMLSTBFD2cgYBms + name: Identify User + slug: identifyUser + description: >- + Identifies an unidentified (alias-only) user. Use alongside the Create + Alias action, or with user aliases you have already defined. + platform: CLOUD + hidden: false + defaultTrigger: null + fields: + - id: bAMQUZ2CRsa9Uz8kEC2Z32 + sortOrder: 0 + fieldKey: external_id + label: External ID + type: STRING + description: The external ID of the user to identify. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 2V5S6ArhTS3ts69pGVbwd2 + sortOrder: 1 + fieldKey: user_alias + label: User Alias Object + type: OBJECT + description: >- + A user alias object. See [the + docs](https://www.braze.com/docs/api/objects_filters/user_alias_object/). + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: oK2k4eS3dnDkQqqek1s6jk + sortOrder: 2 + fieldKey: merge_behavior + label: Merge Behavior + type: STRING + description: >- + Sets the endpoint to merge some fields found exclusively on the + anonymous user to the identified user. See [the + docs](https://www.braze.com/docs/api/endpoints/user_data/post_user_identify/#request-parameters). + placeholder: '' + required: false + multiple: false + choices: + - label: None + value: none + - label: Merge + value: merge + dynamic: false + allowNull: false + - id: vp138DdA9188zfyXfhJe6x + name: Create Alias + slug: createAlias + description: >- + Create new user aliases for existing identified users, or to create new + unidentified users. + platform: CLOUD + hidden: false + defaultTrigger: event = "Create Alias" + fields: + - id: 5k1c2PnQJRqv1dLxdT4boD + sortOrder: 0 + fieldKey: external_id + label: External ID + type: STRING + description: The external ID of the user to create an alias for. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: true + - id: 8yYxvrVvZVKvzUPZK1i33i + sortOrder: 1 + fieldKey: alias_name + label: Alias Name + type: STRING + description: The alias identifier + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: hxXcBFuXgFdUVMYjtimheK + sortOrder: 2 + fieldKey: alias_label + label: Alias Label + type: STRING + description: A label indicating the type of alias + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + presets: + - actionId: vE7Gf9yobj2gTuMBhwmg7g + name: Order Completed Calls + fields: + external_id: + '@path': $.userId + email: + '@path': $.traits.email + braze_id: + '@path': $.properties.braze_id + time: + '@path': $.receivedAt + products: + '@path': $.properties.products + properties: + '@path': $.properties + _update_existing_only: false + enable_batching: true + trigger: event = "Order Completed" + - actionId: 3pnc4QJvUjWGi2bp6EnDt + name: Track Calls + fields: + external_id: + '@path': $.userId + email: + '@path': $.traits.email + braze_id: + '@path': $.properties.braze_id + name: + '@path': $.event + time: + '@path': $.receivedAt + properties: + '@path': $.properties + _update_existing_only: false + enable_batching: true + trigger: type = "track" and event != "Order Completed" + - actionId: 2P24zUSAL8BUpyGYNGmD7M + name: Identify Calls + fields: + external_id: + '@path': $.userId + braze_id: + '@path': $.properties.braze_id + country: + '@path': $.context.location.country + current_location: + latitude: + '@path': $.context.location.latitude + longitude: + '@path': $.context.location.longitude + email: + '@path': $.traits.email + first_name: + '@path': $.traits.firstName + gender: + '@path': $.traits.gender + home_city: + '@path': $.traits.address.city + image_url: + '@path': $.traits.avatar + last_name: + '@path': $.traits.lastName + phone: + '@path': $.traits.phone + custom_attributes: + '@path': $.traits + _update_existing_only: false + enable_batching: true + trigger: type = "identify" + partnerOwned: false +- id: 63872c01c0c112b9b4d75412 + display_name: Braze Cohorts + name: Braze Cohorts + slug: actions-braze-cohorts + hidden: false endpoints: + - EU - US regions: - us-west-2 - eu-west-1 - url: connections/destinations/catalog/adlearn-open-platform + url: connections/destinations/catalog/actions-braze-cohorts previous_names: - - AdLearn Open Platform - website: http://www.adlearnop.com/ + - Braze Cohorts + website: https://www.braze.com status: PUBLIC categories: - - Advertising - - Analytics - - Enrichment - - A/B Testing + - Email Marketing + - CRM + - SMS & Push Notifications + - Marketing Automation logo: - url: >- - https://d3hotuclm6if1r.cloudfront.net/logos/adlearn-open-platform-default.svg + url: https://cdn.filepicker.io/api/file/j4LMO8DvTv6UDYHPJ6gU mark: - url: https://cdn.filepicker.io/api/file/VsmrYeBoSXy03e6HGXiC + url: https://cdn.filepicker.io/api/file/tlvYn6EfTMOsiZxj2PiN methods: track: true - identify: false - group: false - alias: false + identify: true + group: true + alias: true screen: false page: true platforms: browser: true mobile: false - server: false - warehouse: false - components: - - code: >- - https://github.com/segment-integrations/analytics.js-integration-adlearn-open-platform - type: BROWSER + server: true + warehouse: true + cloudAppObject: false + components: [] browserUnbundlingSupported: false - browserUnbundlingPublic: true + browserUnbundlingPublic: false replay: false connection_modes: device: - web: true + web: false mobile: false server: false cloud: - web: false + web: true mobile: false - server: false + server: true settings: - - name: events - type: text-map - defaultValue: {} + - name: client_secret + type: password + defaultValue: '' description: >- - AdLearn Open Platform recognizes pixel ids, not custom event names. When - you `analytics.track(event, properties)` an event that represents an - AdLearn Open Platform conversion, you'll need to map the event name on the - left to it's corresponding AdLearn Open Platform pixel id on the right. - These pixel ids show up as the `type` parameters in the pixel. + Data Import Key for the client whose cohort this belongs to. Also known as + customer key. required: true - label: Events - - name: retargetingPixelId - type: string - defaultValue: '' + label: Client Secret key + - name: endpoint + type: select + defaultValue: https://rest.iad-01.braze.com description: >- - Your Retargeting Pixel ID, for the pixel that loads on every page. It - shows up in the pixel as the `betr` parameter. + Your Braze REST endpoint. [See more + details](https://www.braze.com/docs/api/basics/#endpoints) required: true - label: Retargeting Pixel ID - actions: [] + label: REST Endpoint + actions: + - id: sW4CKfq2r8LXZhXDfmbQW6 + name: Sync Audience + slug: syncAudiences + description: Record custom events in Braze + platform: CLOUD + hidden: false + defaultTrigger: event = "Audience Entered" or event = "Audience Exited" + fields: + - id: qzAtLwfr29s2YL8UJjGSaE + sortOrder: 0 + fieldKey: external_id + label: External User ID + type: STRING + description: >- + The external_id serves as a unique user identifier for whom you are + submitting data. This identifier should be the same as the one you set + in the Braze SDK in order to avoid creating multiple profiles for the + same user. + placeholder: '' + defaultValue: + '@path': $.userId + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: 8YZ1Yk8KjsuUhdVy82vrQq + sortOrder: 1 + fieldKey: user_alias + label: User Alias Object + type: OBJECT + description: >- + Alternate unique user identifier, this is required if External User ID + or Device ID is not set. Refer [Braze + Documentation](https://www.braze.com/docs/api/objects_filters/user_alias_object) + for more details. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: n7zAJp8KUWfyLMhmRpTWNS + sortOrder: 2 + fieldKey: device_id + label: Device ID + type: STRING + description: >- + Device IDs can be used to add and remove only anonymous users to/from a + cohort. However, users with an assigned User ID cannot use Device ID to + sync to a cohort. + placeholder: '' + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: vWmcf8EseeHXktFLGwc37 + sortOrder: 3 + fieldKey: cohort_id + label: Cohort ID + type: STRING + description: The Cohort Identifier + placeholder: '' + defaultValue: + '@path': $.context.personas.computation_id + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: mWyVqjhq4cNqRdjZXHXH43 + sortOrder: 4 + fieldKey: cohort_name + label: Cohort Name + type: STRING + description: The name of Cohort + placeholder: '' + defaultValue: + '@path': $.context.personas.computation_key + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: bMxipUHK2CmT9PGAZQJi3K + sortOrder: 5 + fieldKey: enable_batching + label: Enable Batching + type: BOOLEAN + description: Enable batching of requests to the Braze cohorts. + placeholder: '' + defaultValue: true + required: false + multiple: false + choices: null + dynamic: false + allowNull: false + - id: pcdE86xXnb2eZTJ4DfDUkQ + sortOrder: 6 + fieldKey: personas_audience_key + label: Segment Engage Audience Key + type: STRING + description: >- + The `audience_key` of the Engage audience you want to sync to Braze + Cohorts. This value must be a hard-coded string variable, e.g. + `personas_test_audience`, in order for batching to work properly. + placeholder: '' + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: ufUpnP5yZ3Lpi4vXazme65 + sortOrder: 7 + fieldKey: event_properties + label: Event Properties + type: OBJECT + description: >- + Displays properties of the event to add/remove users to a cohort and the + traits of the specific user + placeholder: '' + defaultValue: + '@if': + exists: + '@path': $.properties + then: + '@path': $.properties + else: + '@path': $.traits + required: true + multiple: false + choices: null + dynamic: false + allowNull: false + - id: qKanoY8iaBFFyHR9utXF6N + sortOrder: 8 + fieldKey: time + label: Time + type: STRING + description: When the event occurred. + placeholder: '' + defaultValue: + '@path': $.timestamp + required: true + multiple: false + choices: null + dynamic: false + allowNull: false presets: [] -- id: 5783cec280412f644ff14226 - display_name: Adobe Analytics - name: Adobe Analytics - slug: adobe-analytics + partnerOwned: false +- id: 60fb01aec459242d3b6f20c1 + display_name: Braze Web Device Mode (Actions) + name: Braze Web Device Mode (Actions) + slug: braze-web-device-mode-actions hidden: false endpoints: - US + - EU regions: - us-west-2 - eu-west-1 - url: connections/destinations/catalog/adobe-analytics + url: connections/destinations/catalog/braze-web-device-mode-actions previous_names: - - Adobe Analytics - website: http://www.adobe.com/marketing-cloud/web-analytics.html + - Braze Web Mode (Actions) + - Braze Web Device Mode (Actions) + website: https://www.braze.com/ status: PUBLIC categories: - - Analytics - - Video + - Email Marketing + - CRM + - SMS & Push Notifications logo: - url: https://d3hotuclm6if1r.cloudfront.net/logos/omniture-default.svg + url: https://cdn.filepicker.io/api/file/2JSUpp9LRkuKdSjOk5uy mark: - url: https://cdn.filepicker.io/api/file/E42OZ7ThRpuXrvIlMnul + url: https://cdn.filepicker.io/api/file/MldlScSMQZaoG03d2XDC methods: track: true - identify: false - group: false + identify: true + group: true alias: false screen: false page: true platforms: browser: true - mobile: true - server: true + mobile: false + server: false warehouse: false - components: - - code: >- - https://github.com/segment-integrations/analytics.js-integration-adobe-analytics - owner: SEGMENT - type: BROWSER - - code: >- - https://github.com/segment-integrations/analytics-ios-integration-adobe-analytics - owner: SEGMENT - type: IOS - - code: >- - https://github.com/segment-integrations/analytics-android-integration-adobe-analytics - owner: SEGMENT - type: ANDROID - - code: >- - https://github.com/segmentio/integrations/tree/master/integrations/adobe-analytics - owner: SEGMENT - type: SERVER - browserUnbundlingSupported: true - browserUnbundlingPublic: true + cloudAppObject: false + components: [] + browserUnbundlingSupported: false + browserUnbundlingPublic: false replay: false connection_modes: device: - web: true - mobile: true + web: false + mobile: false server: false cloud: web: true - mobile: true - server: true + mobile: false + server: false settings: - - name: addBuildToAppId + - name: allowCrawlerActivity type: boolean defaultValue: false description: >- - If this setting is enabled, we will add `context.app.build`, if present, - to Adobe's AppID, as ``` `` (``)`. - required: true - label: Add application build to Adobe's App ID - - name: collectHighEntropyUserAgentHints + Allow Braze to log activity from crawlers. [See more + details](https://js.appboycdn.com/web-sdk/latest/doc/modules/appboy.html#initializationoptions) + required: false + label: Allow Crawler Activity + - name: allowUserSuppliedJavascript type: boolean defaultValue: false description: >- - If you enable this option, Adobe's library will request high-entropy - hints. High-entropy hints contain more detailed information about a user's - device. See [Adobe - documentation](https://experienceleague.adobe.com/docs/analytics/technotes/client-hints.html?lang=en) - for more information. Note: This setting is for web device-mode only. - required: true - label: Collect High-Entropy Client Hints - - name: contextValues - type: text-map - defaultValue: {} - description: >- - Map values you pass into the context object to [Context Data - Variables](https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/contextdata.html) - in Adobe Analytics. Then you can use processing rules to map you Context - Data Variables in Adobe to other variables with Adobe Analytics Processing - Rules. In the box on the left, put your Segment context key. The box on - the right is what Context Data Variable you'd like it to be mapper to in - Adobe. - - - If you have a nested object, separate the name with a `.` For example if - you wanted to map the page referrer, you would put: page.referrer. - - - **NOTE**: By default Segment send alls your `properties` as Context Data - Variables so you do not need to map them again here. + To indicate that you trust the Braze dashboard users to write + non-malicious Javascript click actions, set this property to true. If + enableHtmlInAppMessages is true, this option will also be set to true. + [See more + details](https://js.appboycdn.com/web-sdk/latest/doc/modules/appboy.html#initializationoptions) required: false - label: Context Data Variables - - name: customDataPrefix + label: Allow User Supplied Javascript + - name: api_key + type: string + defaultValue: '' + description: Found in the Braze Dashboard under Manage Settings → Apps → Web + required: true + label: API Key + - name: appVersion type: string defaultValue: '' description: >- - If you would like to prefix your Segment properties before sending them as - contextData, enter a prefix here. - required: false - label: Context Data Property Prefix - - name: customDelimiter - type: map - defaultValue: {} - description: >- - Add a custom delimiter to concatenate Adobe Analytics lVars or props sent - as an array. Note, if you do not specify a custom delimiter, arrays will - be concatenated with a comma. Please add the Adobe Analytics lVar or prop - on the left and select a custom delimiter on the right. lVars must be in - format 'list1', 'list2', etc. and props in format 'prop1', 'prop2', etc. - Must be all lowercase with no whitespace. - required: false - label: 'List Variable and Prop Custom Delimiter: Server-Side Only ' - - name: disableVisitorId - type: boolean - defaultValue: false - description: This will disable Visitor ID from being passed to Adobe. + Version to which user events sent to Braze will be associated with. [See + more + details](https://js.appboycdn.com/web-sdk/latest/doc/modules/appboy.html#initializationoptions) required: false - label: Drop Visitor ID - - name: enableTrackPageName + label: App Version + - name: automaticallyDisplayMessages type: boolean defaultValue: true description: >- - If you do not want to attach `pageName` for your `.track()` calls, you can - disable this option. - required: false - label: Enable pageName for Track Events - - name: eVars - type: map - defaultValue: {} - description: >- - Map your Adobe Analytics eVar names to the property names you’re using in - your Segment events. Enter a Segment property name on the left and an - Adobe Analytics eVar number on the right. You can view your Segment events - and properties in your Schema. + When this is enabled, all In-App Messages that a user is eligible for are + automatically delivered to the user. If you'd like to register your own + display subscribers or send soft push notifications to your users, make + sure to disable this option. required: false - label: eVars - - name: events - type: mixed - defaultValue: [] - description: Map your Segment events to custom Adobe events. - required: true - label: Events - - name: eventsV2 - type: text-map - defaultValue: {} - description: >- - **Note**: If you are bundling our Adobe Analytics SDK on your mobile - device, you should map your events here. If you are sending via server - side you should use the `Events` option instead. Map your Adobe Analytics - property names on the left to Adobe event names on the right. Your events - MUST be set up in Adobe and mapped here in order to to be forwarded to the - destination. This setting only applies to Mobile integrations with Adobe. - required: true - label: Events V2 (Bundled Mobile Only) - - name: heartbeatTrackingServerUrl + label: Automatically Send In-App Messages + - name: contentSecurityNonce type: string defaultValue: '' description: >- - This is the URL of your Adobe Heartbeat server. Please contact Adobe to - obtain this URL. - required: true - label: Heartbeat Tracking Server URL - - name: hVars - type: map - defaultValue: {} - description: >- - Map your Adobe Analytics hVars to the property names you’re using in your - Segment page calls. Enter a Segment property name on the left and an Adobe - Analytics hVar number on the right. You can view your Segment page calls - and properties in your Schema. + Allows Braze to add the nonce to any ` - + + + \ No newline at end of file diff --git a/src/_includes/content/destination-dossier.html b/src/_includes/content/destination-dossier.html index ff8f4a1c81..dd7987a226 100644 --- a/src/_includes/content/destination-dossier.html +++ b/src/_includes/content/destination-dossier.html @@ -54,7 +54,13 @@
Destination Info
{% if connectionModes.cloud.web == true or connectionModes.cloud.mobile == true or connectionModes.cloud.server == true %}
  • In Cloud-mode, refer to it as {{previous_names | join: ', or ' }} in the Integrations object
  • {%endif%} {% if connectionModes.device.web == true or connectionModes.device.mobile == true or connectionModes.device.server == true %}
  • In Device-mode, refer to it as {{previous_names | first}} in the Integrations object
  • {%endif%} {% endif %} + {% if connectionModes.cloud.web == true %} + {% unless connectionModes.cloud.mobile == true or connectionModes.cloud.server == true or connectionModes.device.web == true or connectionModes.device.mobile == true or connectionModes.device.server == true %} +
  • This destination is not compatible with Destination Insert Functions.
  • + {% endunless %} + {% endif %} {% if destinationInfo.status == "PUBLIC_BETA" %}
  • This destination is in Beta
  • {% endif %} + {% if page.engage == true %}
  • This destination is only compatible with Twilio Engage.
  • {% endif %} {% if components.size > 0%} {% unless page.hide-components %} @@ -70,7 +76,7 @@
    Components
    {% endunless %} -{% unless page.hide-cmodes %} +{% unless page.hide-cmodes or page.engage %}
    Connection Modes
    @@ -98,5 +104,13 @@
    Connection Modes {% endunless %} {% endif %} +{% if destinationInfo.partnerOwned == true %} +
    +
    Partner Owned
    +
      +
    • This integration is partner owned. Please reach out to the partner's support for any issues.
    • +
    +
    +{% endif %} {% endif %} \ No newline at end of file diff --git a/src/_includes/content/engage-folders.md b/src/_includes/content/engage-folders.md new file mode 100644 index 0000000000..b119dcbf07 --- /dev/null +++ b/src/_includes/content/engage-folders.md @@ -0,0 +1,29 @@ +## Organize with folders + +Use folders to organize your Email, SMS/MMS, Push, and Whatsapp content templates. Group related content together to better help you manage and find your marketing resources. + +From the Templates overview page you can create, update, view, and delete template folders. + + +

    You must have both read and write workspace permissions to create or make changes to folders.

    + +To create a folder: + +1. Navigate to **Engage > Content**. +2. Select the tab for the template type (Email, SMS, WhatsApp, or Push) you'd like to create the folder for. +3. Click **Create**, then select **Folder**. +4. Add a folder name, then click **Create**. + +You can also rename, add templates, or disband your folder from the Templates overview page. Disbanding a folder returns all templates from the folder to the main template list, without deleting any of the templates. + +

    You can only organize templates in your folders according to template type. For example, you can't group email and SMS templates in the same folder.

    + +### Move templates to your folders + +From the Templates overview page, you can select individual template(s) to move to your folders. + +After you select the templates you'd like to move: +1. Click **Actions**, and select **Move Templates**. +2. Select the destination folder, then click **Move templates to folder**. + +Use the **Actions** button in your folder to remove templates or move them to a different location. When you remove a template, Engage returns the template to the Templates overview page, without deleting it. \ No newline at end of file diff --git a/src/_includes/content/eu-cloud-event-sources.html b/src/_includes/content/eu-cloud-event-sources.html new file mode 100644 index 0000000000..97b8a1857c --- /dev/null +++ b/src/_includes/content/eu-cloud-event-sources.html @@ -0,0 +1,12 @@ +The following cloud sources are supported in EU workspaces: + +{% assign cloud-sources = site.data.catalog.sources.items | where: "isCloudEventSource", "true" %} +{% assign eu-cloud-sources = cloud-sources | where: "endpoints", "eu" %} +{% for integration in eu-cloud-sources %} +
    +{% endfor %} + + + \ No newline at end of file diff --git a/src/_includes/content/functions-copilot-nutrition-facts.html b/src/_includes/content/functions-copilot-nutrition-facts.html new file mode 100644 index 0000000000..f4a109fb4d --- /dev/null +++ b/src/_includes/content/functions-copilot-nutrition-facts.html @@ -0,0 +1,151 @@ + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    AI Nutrition Facts +
    +
    + Customer AI Functions Copilot

    +
    +

    Description +
    +
    + Functions Copilot is an AI-powered coding assistant designed to streamline the development of custom integrations, and enrich and transform Segment Functions.

    +

    Privacy Ladder Level + 1

    +

    + Feature is Optional + Yes

    +

    Model Type + Generative

    +

    Base Model + OpenAI - GPT-4

    +

    Trust Ingredients

    +
    +

    Base Model Trained with Customer Data + No +
    +
    +

    +

    Customer Data Shared with Model Vendor + No +
    +
    +

    +

    Training Data Anonymized   + N/A

    +

    Data Deletion + Yes

    +

    Human in the Loop + Yes

    +

    Data Retention + N/A

    +
    Compliance    
    + Logging & Auditing + N/A
    + Guardrails + N/A +

    Input/Output Consistency + Yes

    +

    Other Resources +
    +
    + Learn more at: https://twilio.com/en-us/customer-ai

    +
    \ No newline at end of file diff --git a/src/_includes/content/functions/caching.md b/src/_includes/content/functions/caching.md new file mode 100644 index 0000000000..57066c6281 --- /dev/null +++ b/src/_includes/content/functions/caching.md @@ -0,0 +1,21 @@ +Functions execute only in response to incoming data, but the environments that functions run in are generally long-running. Because of this, you can use global variables to cache small amounts of information between invocations. For example, you can reduce the number of access tokens you generate by caching a token, and regenerating it only after it expires. Segment cannot make any guarantees about the longevity of environments, but by using this strategy, you can improve the performance and reliability of your Functions by reducing the need for redundant API requests. + +This example code fetches an access token from an external API and refreshes it every hour: + +```js +const TOKEN_EXPIRE_MS = 60 * 60 * 1000 // 1 hour +let token = null +async function getAccessToken () { + const now = new Date().getTime() + if (!token || now - token.ts > TOKEN_EXPIRE_MS) { + const resp = await fetch('https://example.com/tokens', { + method: 'POST' + }).then(resp => resp.json()) + token = { + ts: now, + value: resp.token + } + } + return token.value +} +``` \ No newline at end of file diff --git a/src/_includes/content/functions/errors-and-error-handling.md b/src/_includes/content/functions/errors-and-error-handling.md new file mode 100644 index 0000000000..3ec02f99e1 --- /dev/null +++ b/src/_includes/content/functions/errors-and-error-handling.md @@ -0,0 +1,53 @@ + + +Segment considers a function's execution successful if it finishes without error. You can also `throw` an error to create a failure on purpose. Use these errors to validate event data before processing it, to ensure the function works as expected. + +You can `throw` the following pre-defined error types to indicate that the function ran as expected, but that data was not deliverable: + +- `EventNotSupported` +- `InvalidEventPayload` +- `ValidationError` +- `RetryError` + +The examples show basic uses of these error types. + +```js +async function onGroup(event) { + if (!event.traits.company) { + throw new InvalidEventPayload('Company name is required') + } +} + +async function onPage(event) { + if (!event.properties.pageName) { + throw new ValidationError('Page name is required') + } +} + +async function onAlias(event) { + throw new EventNotSupported('Alias event is not supported') +} + +async function onTrack(event) { + let res + try { + res = await fetch('http://example-service.com/api', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ event }) + }) + } catch (err) { + // Retry on connection error + throw new RetryError(err.message) + } + if (res.status >= 500 || res.status === 429) { + // Retry on 5xx and 429s (ratelimits) + throw new RetryError(`HTTP Status ${res.status}`) + } +} + +``` +If you don't supply a function for an event type, Segment throws an `EventNotSupported` error by default. + diff --git a/src/_includes/content/functions/logs.md b/src/_includes/content/functions/logs.md new file mode 100644 index 0000000000..9ba89f35df --- /dev/null +++ b/src/_includes/content/functions/logs.md @@ -0,0 +1,20 @@ +If your function throws an error, execution halts immediately. Segment captures the event, any outgoing requests/responses, any logs the function might have printed, as well as the error itself. + +Segment then displays the captured error information in the [Event Delivery](/docs/connections/event-delivery/) page for your destination. You can use this information to find and fix unexpected errors. + +You can throw [an error or a custom error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error){:target="_blank"} and you can also add helpful context in logs using the [`console` API](https://developer.mozilla.org/en-US/docs/Web/API/console){:target="_blank"}. For example: + +```js +async function onTrack(event, settings) { + const userId = event.userId + + console.log('User ID is', userId) + + if (typeof userId !== 'string' || userId.length < 8) { + throw new ValidationError('User ID is invalid') + } + + console.log('User ID is valid') +} +``` + diff --git a/src/_includes/content/functions/runtime.md b/src/_includes/content/functions/runtime.md index 079914e429..1eec66aa95 100644 --- a/src/_includes/content/functions/runtime.md +++ b/src/_includes/content/functions/runtime.md @@ -1,4 +1,21 @@ -Functions use Node.js 14.x. +On March 26, 2024, Segment is upgrading the Functions runtime environment to Node.js v18, which is the current long-term support (LTS) release. + +This upgrade keeps your runtime current with industry standards. Based on the [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html){:target="_blank"} and [Node.js](https://nodejs.org/en/about/previous-releases){:target="_blank"} support schedule, Node.js v16 is no longer in *Maintenance LTS*. Production applications should only use releases of Node.js that are in *Active LTS* or *Maintenance LTS*. + +All new functions will use Node.js v18 starting March 26, 2024. + +For existing functions, this change automatically occurs as you update and deploy an existing function. Segment recommends that you check your function post-deployment to ensure everything's working. Your function may face issues due to the change in sytax between different Node.js versions and dependency compatibility. + +

    Limited time opt-out option

    +If you need more time to prepare, you can opt out of the update before March 19, 2024.

    Note that if you opt out:
    +- The existing functions will continue working on Node.js v16.
    +- You won't be able to create new functions after July 15, 2024.
    +- You won't be able to update existing functions after August 15, 2024.
    +- You won't receive future bug fixes, enhancements, and dependency updates to the functions runtime.

    +[Contact Segment](https://segment.com/help/contact/){:target="_blank"} to opt-out or with any questions.

    + + +

    Node.js 18

    Segment strongly recommends updating to Node.js v18 to benefit from future runtime updates, the latest security, and performance improvements.

    Functions do not currently support importing dependencies, but you can [contact Segment Support](https://segment.com/help/contact/){:target="_blank"} to request that one be added. @@ -7,6 +24,7 @@ The following dependencies are installed in the function environment by default. - [`atob v2.1.2`](https://www.npmjs.com/package/atob){:target="_blank"} exposed as `atob` - [`aws-sdk v2.488.0`](https://www.npmjs.com/package/aws-sdk){:target="_blank"} exposed as `AWS` - [`btoa v1.2.1`](https://www.npmjs.com/package/btoa){:target="_blank"} exposed as `btoa` +- [`fetch-retry`](https://www.npmjs.com/package/fetch-retry){:target="_blank"} exposed as `fetchretrylib.fetchretry` - [`form-data v2.4.0`](https://www.npmjs.com/package/form-data){:target="_blank"} exposed as `FormData` - [`@google-cloud/automl v2.2.0`](https://www.npmjs.com/package/@google-cloud/automl){:target="_blank"} exposed as `google.cloud.automl` - [`@google-cloud/bigquery v5.3.0`](https://www.npmjs.com/package/@google-cloud/bigquery){:target="_blank"} exposed as `google.cloud.bigquery` @@ -21,6 +39,7 @@ The following dependencies are installed in the function environment by default. - [`jsonwebtoken v8.5.1`](https://www.npmjs.com/package/jsonwebtoken){:target="_blank"} exposed as `jsonwebtoken` - [`libphonenumber-js`](https://www.npmjs.com/package/libphonenumber-js){:target="_blank"} exposed as `libphonenumberjslib.libphonenumberjs` - [`lodash v4.17.19`](https://www.npmjs.com/package/lodash){:target="_blank"} exposed as `_` +- [`mailchimp marketing`](https://www.npmjs.com/package/@mailchimp/mailchimp_marketing){:target="_blank"} exposed as `mailchimplib.mailchimp` - [`mailjet`](https://www.npmjs.com/package/node-mailjet){:target="_blank"} exposed as `const mailJet = nodemailjet.nodemailjet;` - [`moment-timezone v0.5.31`](https://www.npmjs.com/package/moment-timezone/v/0.5.31){:target="_blank"} exposed as `moment` - [`node-fetch v2.6.0`](https://www.npmjs.com/package/node-fetch){:target="_blank"} exposed as `fetch` diff --git a/src/_includes/content/generative-audiences-nutrition-facts.html b/src/_includes/content/generative-audiences-nutrition-facts.html new file mode 100644 index 0000000000..b03e49c051 --- /dev/null +++ b/src/_includes/content/generative-audiences-nutrition-facts.html @@ -0,0 +1,143 @@ + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    AI Nutrition Facts +
    +
    + Generative Audiences

    +
    +

    Description +
    +
    + Generate user audiences from text instructions

    +

    Privacy Ladder Level + 1

    +

    + Feature is Optional + Yes

    +

    Model Type + Generative

    +

    Base Model + OpenAI - GPT-4

    +

    Trust Ingredients

    +
    +

    Base Model Trained with Customer Data + No

    +

    Customer Data is Shared with Model Vendor + No

    +

    Training Data Anonymized   + N/A

    +

    Data Deletion + Yes

    +

    Human in the Loop + Yes

    +

    Data Retention + 30 days

    +
    Compliance    
    + Logging & Auditing + No
    + Guardrails + Yes +

    Input/Output Consistency + No

    +

    Other Resources

    +
    + \ No newline at end of file diff --git a/src/_includes/content/integrations-identify.md b/src/_includes/content/integrations-identify.md deleted file mode 100644 index 1ea624f7dd..0000000000 --- a/src/_includes/content/integrations-identify.md +++ /dev/null @@ -1,3 +0,0 @@ -### More About Identify - -To learn more about how `identify` works, check out our [Identify docs](/docs/connections/spec/identify). For example, `email` and `name` are two of our [special traits](/docs/connections/spec/identify/#traits) that we recognize semantically. \ No newline at end of file diff --git a/src/_includes/content/integrations-track.md b/src/_includes/content/integrations-track.md deleted file mode 100644 index 40ac2316f0..0000000000 --- a/src/_includes/content/integrations-track.md +++ /dev/null @@ -1,3 +0,0 @@ -### More About Track - -To learn more about how `track` works check out our [Track docs](/docs/connections/spec/track). For example, `revenue` is a [special property](/docs/connections/spec/track#special-properties) that lets you semantically describe how much money you're making. \ No newline at end of file diff --git a/src/_includes/content/ip-allowlist.md b/src/_includes/content/ip-allowlist.md new file mode 100644 index 0000000000..7b926e7f38 --- /dev/null +++ b/src/_includes/content/ip-allowlist.md @@ -0,0 +1,5 @@ +When data leaves Segment's servers to go to various destinations (not including warehouses), Segment uses Amazon Web Services (AWS) and utilizes many different machines in order to send requests. + +The IP addresses that are used to send these requests can be found [here](https://ip-ranges.amazonaws.com/ip-ranges.json){:target="_blank"}. If you want to allowlist these specific IP addresses, you need to allowlist all of the IP addresses from your workspace's location range. Below are the ranges: +* For a US workspace: `AWS us-west-2` +* For an EU workspace: `AWS eu-west-1 ` \ No newline at end of file diff --git a/src/_includes/content/papi-ga.html b/src/_includes/content/papi-ga.html index 3ed0a75202..fa6859c5b6 100644 --- a/src/_includes/content/papi-ga.html +++ b/src/_includes/content/papi-ga.html @@ -2,7 +2,7 @@

    The Segment Public API is available

    -

    Segment's [Public API](/docs/api/public-api) is available to use. You can use the Public API and Config APIs in parallel, but moving forward any API updates will come to the Public API exclusively.

    +

    Segment's [Public API](/docs/api/public-api) is available for Team and Business tier customers to use. You can use the Public API and Config APIs in parallel, but moving forward any API updates will come to the Public API exclusively.

    Please contact your account team or [friends@segment.com](mailto:friends@segment.com) with any questions.

    diff --git a/src/_includes/content/personas-cmodes.md b/src/_includes/content/personas-cmodes.md deleted file mode 100644 index dbd8506afa..0000000000 --- a/src/_includes/content/personas-cmodes.md +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - -
    Engage Audiences
    - -The {{page.title}} consumes [Engage Audiences](/docs/engage/audiences/), and does not receive data directly from Segment Sources. Any data that you can build into an audience in Engage can be sent to this destination. diff --git a/src/_includes/content/predictions-nutrition-facts.html b/src/_includes/content/predictions-nutrition-facts.html new file mode 100644 index 0000000000..88d3ad8c97 --- /dev/null +++ b/src/_includes/content/predictions-nutrition-facts.html @@ -0,0 +1,151 @@ + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    AI Nutrition Facts +
    +
    + Customer AI Predictions

    +
    +

    Description +
    +
    + Predictions creates propensity models that predict if a customer will purchase, churn, or perform any other conversion event

    +

    Privacy Ladder Level + 2

    +

    + Feature is Optional + Yes

    +

    Model Type + Predictive

    +

    Base Model + Gradient Boosted Trees

    +

    Trust Ingredients

    +
    +

    Base Model Trained with Customer Data + N/A +
    +
    + Customer Data is used to develop a model created specifically for each customer and is never reused for other customers

    +

    Customer Data Shared with Model Vendor + No +
    +
    + Customer Data is used to build the model, but it is built by Twilio Segment for the customer and not by a third party vendor

    +

    Training Data Anonymized   + No

    +

    Data Deletion + Yes

    +

    Human in the Loop + N/A

    +

    Data Retention + 30 days

    +
    Compliance    
    + Logging & Auditing + Yes
    + Guardrails + N/A +

    Input/Output Consistency + N/A

    +

    Other Resources +
    +
    + Learn more at: https://twilio.com/en-us/customer-ai

    +
    \ No newline at end of file diff --git a/src/_includes/content/react-dest.md b/src/_includes/content/react-dest.md deleted file mode 100644 index 260f9a937c..0000000000 --- a/src/_includes/content/react-dest.md +++ /dev/null @@ -1,31 +0,0 @@ - - -{% assign currentSlug = page.url | split: "/" | last %} -{% assign thisDest = site.data.catalog.destinations.items | where: "slug", currentSlug | first %} -{% assign thisDestName = thisDest.display_name %} -{% assign thisDestRNspecific = include.only %} - - -{% if thisDestRNspecific %} -
    -
    -

    -The {{thisDestName}} device-mode destination SDK is only available for {{thisDestRNspecific}} in React Native. -

    -{%endif%} - -To add the {{thisDestName}} device-mode SDK to a [React Native](/docs/connections/sources/catalog/libraries/mobile/react-native/) project using Segment's `1.5.1≤` release: -1. Navigate to the root folder of your project, and run a `yarn add @segment/analytics-react-native-{{thisDestName | downcase | replace: " ", "-" }}{% if thisDestRNspecific %}-{{thisDestRNspecific}}{%endif%}` command to add the destination SDK to your project. -2. Add an `import` statement to your project, as in the example below. - ```js - import {{thisDestName | replace: " ", "" }} from '@segment/analytics-react-native-{{thisDestName | downcase | replace: " ", "-" }}{% if thisDestRNspecific %}-{{thisDestRNspecific}}{%endif%}' - ``` -3. In the same project file, add the destination to the `using` list in the `await` command. - ```js - await analytics.setup('YOUR_WRITE_KEY', { - // Add any of your Device-mode destinations. This ensures they load before continuing. - using: {{thisDestName | replace: " ", "" }} - // ... - }) - ``` -4. Finally, change to your iOS development folder ( `cd ios` ) and run `pod install`. diff --git a/src/_includes/content/react2-dest.md b/src/_includes/content/react2-dest.md new file mode 100644 index 0000000000..3b48e4b596 --- /dev/null +++ b/src/_includes/content/react2-dest.md @@ -0,0 +1,17 @@ + + +{% assign currentSlug = page.url | split: "/" | last %} +{% assign thisDest = site.data.catalog.destinations.items | where: "slug", currentSlug | first %} +{% assign thisDestName = thisDest.display_name %} +{% assign thisDestRNspecific = include.only %} + + +{% if thisDestRNspecific %} +
    +
    +

    +The {{thisDestName}} device-mode destination SDK is only available for {{thisDestRNspecific}} in React Native. +

    +{%endif%} + +To add the {{thisDestName}} device-mode SDK to a [React Native](/docs/connections/sources/catalog/libraries/mobile/react-native/) project using Segment's new `2.0` release, please reference the [Destination Plugin documentation](/docs/connections/sources/catalog/libraries/mobile/react-native/#supported-destinations). \ No newline at end of file diff --git a/src/_includes/content/regional-integrations-table.md b/src/_includes/content/regional-integrations-table.md index 4bc37dacc7..c0a3806bc0 100644 --- a/src/_includes/content/regional-integrations-table.md +++ b/src/_includes/content/regional-integrations-table.md @@ -1,12 +1,10 @@ -{% assign sources = site.data.catalog.regional-supported.sources %} {% assign destinations = site.data.catalog.destinations.items %} -{% assign warehouses = site.data.catalog.regional-supported.warehouses %} +{% assign warehouses = site.data.catalog.warehouse.items | where: "status", "PUBLIC" %} @@ -21,24 +19,6 @@ - - - Sources - - {% for source in sources %} - - {{source.display_name}} - {% if source.regions contains "us" %}{% else %}{% endif %} - {% if source.regions contains "eu" and source.endpoints contains "us" %}{% else %}{% endif %} - {% if source.regions contains "eu" and source.endpoints contains "eu" %}{% else %}{% endif %} - - {% endfor %} @@ -71,7 +51,7 @@ {% if warehouse.regions contains "eu" and warehouse.endpoints contains "us" %}{% else %}{% endif %} - {% if warehouse.regions contains "eu" and warehouse.endpoints contains "eu" %} {% if warehouse.regions contains "eu" and warehouse.endpoints contains "eu" %}{% else %}{% endif %} @@ -100,4 +80,4 @@ } } - + \ No newline at end of file diff --git a/src/_includes/content/regional-sources-table.md b/src/_includes/content/regional-sources-table.md new file mode 100644 index 0000000000..25b9856c4b --- /dev/null +++ b/src/_includes/content/regional-sources-table.md @@ -0,0 +1,54 @@ +{% assign sources = site.data.catalog.sources.items | where: "hidden", "false" %} + + + + + + + + + + + + + + + + {% for source in sources %} + + + + + + {% endfor %} + +
    IntegrationUS WorkspaceEU workspace
    + Sources
    {{source.display_name}}{% if source.regions contains "us" %}{% else %}{% endif %} {% if source.regions contains "eu" %}{% else %}{% endif %}
    + + \ No newline at end of file diff --git a/src/_includes/content/reset-mobile.md b/src/_includes/content/reset-mobile.md new file mode 100644 index 0000000000..6bba3cd76d --- /dev/null +++ b/src/_includes/content/reset-mobile.md @@ -0,0 +1,6 @@ +
    +
    +
    +

    The reset method doesn't clear the `userId` from connected client-side integrations. If you want to clear the `userId` from connected client-side destination plugins, you'll need to call the equivalent reset method for that library.

    +
    +
    diff --git a/src/_includes/content/retl-discards.md b/src/_includes/content/retl-discards.md new file mode 100644 index 0000000000..67df31d966 --- /dev/null +++ b/src/_includes/content/retl-discards.md @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Discard reasonError codeWhat happened?Remedy
    Duplicate record detectedErrRecordDuplicateDuplicate records have been found for the Unique Identifier configuredChange the Unique Identifier column that has unique values per record or construct a query that returns distinct records for the Unique Identifier configured.
    Record with NULL unique ID detectedErrRecordNullUniqueIDWhile extracting the records, the Unique Identifier column was found to have a null value.Make sure to select a Not null column to use as the unique identifier or construct a query that returns not null values for the Unique Identifier configured.
    Value for IdentifierColumn is requiredErrRecordMissingIDTried saving the model without the Unique Identifier column; this is a required fieldSelect a column to use as the unique identifier for each row and input the column name in the UI
    Value for IdentifierColumn must be textErrRecordInvalidIDThe value returned for the Unique Identifier is other than textConstruct a SQL query to cast the Identifier column to values in text and select the casted column as the Unique Identifier column. If possible, select an Identifier column that is of text data type
    Workspace reached the Reverse ETL usage limitErrSegmentNoEntitlementIndicates that the workspace had reached the limit of their workspace billing planTo increase your usage limit, upgrade your workspace plan.
    For more information, see the Reverse ETL Usage Limits documentation
    \ No newline at end of file diff --git a/src/_includes/content/server-side-troubleshooting.md b/src/_includes/content/server-side-troubleshooting.md new file mode 100644 index 0000000000..3e54a79c8a --- /dev/null +++ b/src/_includes/content/server-side-troubleshooting.md @@ -0,0 +1,20 @@ +{% assign currentSlug = page.url | split: "/" | last %} +{% assign currentIntegration = site.data.catalog.sources.items | where: "slug", currentSlug | first %} + +### Other common errors + +If you are experiencing data loss from your {{ currentIntegration.display_name }} source, you may be experiencing one or more of the following common errors: + +- **Payload is too large**: If you attempt to send events larger than 32KB per normal API request or batches of events larger than 500KB per request, Segment’s tracking API responds with `400 Bad Request`. Try sending smaller events (or smaller batches) to correct this error. + +- **Identifier is not present**: Segment's tracking API requires that each payload has a `userId` and/or `anonymousId`. If you send events without either the `userId` or `anonymousId`, Segment's tracking API responds with an `no_user_anon_id` error. Check the event payload and client instrumentation for more details. + +- **Track event is missing name**: All Track events to Segment must have a name in string format. + +- **Event dropped during deduplication**: Segment automatically adds a `messageId` field to all payloads and uses this value to deduplicate events. If you're manually setting a `messageId` value, ensure that each event has a unique value. + +- **Incorrect credentials**: Double check your credentials for your downstream destination(s). + +- **Destination incompatibility**: Make sure that the destination you are troubleshooting can accept server-side API calls. You can see compatibility information on the [Destination comparison by category](/docs/connections/destinations/category-compare/) page and in the documentation for your specific destination. + +- **Destination-specific requirements**: Check out the [destination's documentation](/docs/connections/destinations/) to see if there are other requirements for using the method and destination that you're trying to get working. \ No newline at end of file diff --git a/src/_includes/content/site-docs-partials/previousnames.hbs b/src/_includes/content/site-docs-partials/previousnames.hbs deleted file mode 100644 index 2ffc83864d..0000000000 --- a/src/_includes/content/site-docs-partials/previousnames.hbs +++ /dev/null @@ -1,6 +0,0 @@ -

    Adding {{ integration.name }} to the integrations object

    - -To add {{ integration.name }} to the integrations JSON object (for example, to filter data from a specific source), use one of the {{ integration.previousNames.length }} valid names for this integration: -{{#each integration.previousNames}} -
  • {{this}}
  • - {{/each}} diff --git a/src/_includes/content/snippet-helper.md b/src/_includes/content/snippet-helper.md index 7340bb0d20..db8e0b740a 100644 --- a/src/_includes/content/snippet-helper.md +++ b/src/_includes/content/snippet-helper.md @@ -2,93 +2,133 @@ {% codeexampletab Minified %} ```html ``` {% endcodeexampletab %} {% codeexampletab Non-minified %} -```js +```html + + {{page.title}} | Segment Documentation @@ -59,7 +68,7 @@ - + {%- if jekyll.environment == "production" -%} {%- assign hostname = "https://segment.com" -%} {%- elsif jekyll.environment == "staging" -%} @@ -80,6 +89,11 @@ + + + + {{ content }} @@ -242,8 +256,8 @@ diff --git a/src/_layouts/integration.html b/src/_layouts/integration.html index be15882926..cc14b6261e 100644 --- a/src/_layouts/integration.html +++ b/src/_layouts/integration.html @@ -48,6 +48,7 @@

    {{ page.title }}

    + {% include content/support-grid.md %} {%- endif -%} {%- if page.excerpt -%} @@ -116,7 +117,6 @@

    {% include sidebar/related-content.html items=page.related %} {% endif %} - {% include sidebar/related-categories.html %} {% unless page.hide-feedback %} {% include_cached sidebar/feedback.html %} diff --git a/src/_layouts/page.html b/src/_layouts/page.html index daee7dfb00..384280ac9a 100644 --- a/src/_layouts/page.html +++ b/src/_layouts/page.html @@ -33,10 +33,6 @@

    {% include content/plan-grid.md %} {%- endif -%} - {%- if page.beta -%} - {% include content/beta.md %} - {%- endif -%} - {%- unless page.hide_toc -%} {% include sidebar/mobile-menu-side.html %} {%- endunless -%} diff --git a/src/_redirects b/src/_redirects index 2b01989242..e7f06745e7 100644 --- a/src/_redirects +++ b/src/_redirects @@ -9,3 +9,7 @@ /docs/reverse-etl/bigquery-setup/ /docs/connections/reverse-etl/reverse-etl-source-setup-guides/bigquery-setup/ /docs/reverse-etl/redshift-setup/ /docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/ /docs/reverse-etl/snowflake-setup/ /docs/connections/reverse-etl/reverse-etl-source-setup-guides/snowflake-setup/ + + +# Swift -> Apple +/docs/connections/sources/catalog/libraries/mobile/swift/* /docs/connections/sources/catalog/libraries/mobile/apple/:splat \ No newline at end of file diff --git a/src/_sass/components/_badge.scss b/src/_sass/components/_badge.scss index d2297a8f7e..db144da826 100644 --- a/src/_sass/components/_badge.scss +++ b/src/_sass/components/_badge.scss @@ -23,6 +23,10 @@ background-color: lighten(color(error), 10%); color: white; } + &--warning { + background-color: lighten(color(warning), 40%); + color: color(warning-dark); + } &--none { background-color: white; diff --git a/src/_sass/components/_breadcrumbs.scss b/src/_sass/components/_breadcrumbs.scss index 3a64ca55f1..f36c4fb034 100644 --- a/src/_sass/components/_breadcrumbs.scss +++ b/src/_sass/components/_breadcrumbs.scss @@ -40,6 +40,7 @@ &__link { color: color(gray-800); + text-transform: capitalize; &:hover { color: color(primary); diff --git a/src/_sass/components/_markdown.scss b/src/_sass/components/_markdown.scss index 77cad1cbcf..9163332f61 100644 --- a/src/_sass/components/_markdown.scss +++ b/src/_sass/components/_markdown.scss @@ -1,11 +1,12 @@ .markdown { + counter-reset: list; + &>h1, &>h2, &>h3, &>h4, - &>h5, - &>h6 { + &>h5{ position: relative; cursor: pointer; padding-left: 30px; @@ -71,14 +72,6 @@ } } - &>h6 { - margin-top: 8px; - - @include breakpoint(medium up) { - margin-top: 16px; - } - } - &>p { margin-top: 8px; overflow-wrap: break-word; @@ -253,6 +246,12 @@ } } + table.horizontal-scroll { + display: block; + overflow-x: auto; + white-space: nowrap; + } + table.settings { width: 100%; table-layout: fixed; @@ -322,6 +321,18 @@ } } + h2.head-list::before { + counter-increment: list; + content: counter(list)". "; + position: initial; + top: 50%; + left: initial; + opacity: initial; + transform: translateY(-50%); + pointer-events: none; + transition: none; + cursor: pointer; + } } diff --git a/src/_sass/components/_reference-button.scss b/src/_sass/components/_reference-button.scss index 409aa276b8..e931db413e 100644 --- a/src/_sass/components/_reference-button.scss +++ b/src/_sass/components/_reference-button.scss @@ -58,6 +58,20 @@ } } + &__logo { + display: flex; + justify-content: center; + align-items: center; + width: 40px; + height: 40px; + grid-area: icon; + margin-right: 25px; + + svg { + max-height: 100%; + } + } + &__subtitle { margin-bottom: 5px; font-size: 12px; diff --git a/src/_sass/components/_sample-form.scss b/src/_sass/components/_sample-form.scss index 0188833e51..482e1d8fc8 100644 --- a/src/_sass/components/_sample-form.scss +++ b/src/_sass/components/_sample-form.scss @@ -38,13 +38,30 @@ input { grid-column: 2 / 3; + color: #696f8c; } + select, input { font-size: 14px; } input[type=submit]{ grid-column: 1 / 3; + color: #474d66; } } +.error-message { + color: red; + font-size: 12px; + grid-column: 2 / 3; + margin-top: 0px; + gap: 2px; + display: none; + +} + +.invalid-field { + outline: 2px red; +} + diff --git a/src/_sass/components/_sidebar.scss b/src/_sass/components/_sidebar.scss index e7b946cc3c..d3544ed8d0 100644 --- a/src/_sass/components/_sidebar.scss +++ b/src/_sass/components/_sidebar.scss @@ -53,6 +53,7 @@ & > * + * { margin-top: 20px; padding-top: 20px; + padding-bottom: 20px; position: relative; &::before { diff --git a/src/_sass/elements/_code.scss b/src/_sass/elements/_code.scss index b665e61124..6d63e8557a 100644 --- a/src/_sass/elements/_code.scss +++ b/src/_sass/elements/_code.scss @@ -40,13 +40,13 @@ pre[class*="language-"] { pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { text-shadow: none; - background: color(gray-100); + background: rgb(179,215,264); } pre[class*="language-"]::selection, pre[class*="language-"] ::selection, code[class*="language-"]::selection, code[class*="language-"] ::selection { text-shadow: none; - background: color(gray-100); + background: rgb(179,215,264); } @media print { diff --git a/src/_sass/objects/_flex.scss b/src/_sass/objects/_flex.scss index 1a3621848e..58198c0fc1 100644 --- a/src/_sass/objects/_flex.scss +++ b/src/_sass/objects/_flex.scss @@ -1,3 +1,5 @@ +@use "sass:math"; + .flex { $this: &; @@ -29,8 +31,8 @@ @for $i from 1 through $flex-columns { &--#{$i} { - flex-basis: percentage($i / $flex-columns); - max-width: percentage($i / $flex-columns); + flex-basis: percentage(math.div($i, $flex-columns)); + max-width: percentage(math.div($i, $flex-columns)); } } @@ -42,8 +44,8 @@ @include breakpoint($breakpoint up) { @for $i from 1 through $flex-columns { &--#{$i}\@#{$breakpoint} { - flex-basis: percentage($i / $flex-columns); - max-width: percentage($i / $flex-columns); + flex-basis: percentage(math.div($i, $flex-columns)); + max-width: percentage(math.div($i, $flex-columns)); } } } diff --git a/src/_sass/objects/_gutter.scss b/src/_sass/objects/_gutter.scss index b0fce6feb9..0368d4cb45 100644 --- a/src/_sass/objects/_gutter.scss +++ b/src/_sass/objects/_gutter.scss @@ -3,23 +3,23 @@ $size: map-get($gutter-sizes, $gutter-size); - margin-right: -#{$size / 2}; - margin-left: -#{$size / 2}; + margin-right: -#{$size * 0.5}; + margin-left: -#{$size * 0.5}; & > * { - padding-right: $size / 2; - padding-left: $size / 2; + padding-right: $size * 0.5; + padding-left: $size * 0.5; } @each $name, $size in $gutter-sizes { @if $name != $gutter-size { &--#{$name} { - margin-right: -#{$size / 2}; - margin-left: -#{$size / 2}; + margin-right: -#{$size * 0.5}; + margin-left: -#{$size * 0.5}; & > * { - padding-right: $size / 2; - padding-left: $size / 2; + padding-right: $size * 0.5; + padding-left: $size * 0.5; } } } @@ -29,12 +29,12 @@ @include breakpoint($breakpoint up) { @each $name, $size in $gutter-sizes { &--#{$name}\@#{$breakpoint} { - margin-right: -#{$size / 2}; - margin-left: -#{$size / 2}; + margin-right: -#{$size * 0.5}; + margin-left: -#{$size * 0.5}; & > * { - padding-right: $size / 2; - padding-left: $size / 2; + padding-right: $size * 0.5; + padding-left: $size * 0.5; } } } diff --git a/src/_sass/objects/_waffle.scss b/src/_sass/objects/_waffle.scss index 21f9246361..04bb116060 100644 --- a/src/_sass/objects/_waffle.scss +++ b/src/_sass/objects/_waffle.scss @@ -3,19 +3,19 @@ $size: map-get($waffle-sizes, $waffle-size); - margin: -#{$size / 2}; + margin: -#{$size * 0.5}; & > * { - padding: $size / 2; + padding: $size * 0.5; } @each $name, $size in $waffle-sizes { @if $name != $waffle-size { &--#{$name} { - margin: -#{$size / 2}; + margin: -#{$size * 0.5}; & > * { - padding: $size / 2; + padding: $size * 0.5; } } } @@ -25,10 +25,10 @@ @include breakpoint($breakpoint up) { @each $name, $size in $waffle-sizes { &--#{$name}\@#{$breakpoint} { - margin: -#{$size / 2}; + margin: -#{$size * 0.5}; & > * { - padding: $size / 2; + padding: $size * 0.5; } } } diff --git a/src/api/config-api/index.md b/src/api/config-api/index.md index 984edb8c39..42623261e2 100644 --- a/src/api/config-api/index.md +++ b/src/api/config-api/index.md @@ -68,6 +68,9 @@ When you create an access token, you'll give it a description, a workspace, and > warning "Secret Token" > You can not retrieve the plain-text `token` later, so you should save it in a secret manager. If you lose the `token` you can generate a new one. +> info +> As of February 1, 2024, new Config API tokens cannot be created in the app as Segment moves toward exclusive support for the [Public API](/docs/api/public-api/). [Migrate your implementation to the Public API](https://docs.segmentapis.com/tag/Migration){:target="_blank”} to access the latest features and available endpoints. To create a new Config API token, reach out to friends@segment.com for support. + ### API Requests Now that you have an access token, you can use this token to access the rest of the Config API by setting it in the `Authorization` header of your requests, for example: diff --git a/src/api/public-api/index.md b/src/api/public-api/index.md index 68f256927a..4e6fc4af27 100644 --- a/src/api/public-api/index.md +++ b/src/api/public-api/index.md @@ -13,6 +13,9 @@ All CRUD endpoints in the API follow REST conventions and use standard HTTP meth description="Research and test the Public API's available endpoints." %} +> success "Getting started with the Public API" +> If your application is built in Javascript / Typescript, Go, Java, or Swift, check out [Segment's Public API SDKs](https://docs.segmentapis.com/tag/Getting-Started#section/Install-and-use-an-SDK){:target="_blank"}. + ## Config API vs Public API The Public API includes the following benefits over the Config API: @@ -24,9 +27,23 @@ The Public API includes the following benefits over the Config API: | Higher rate limits | The Public API can offer higher rate limits when needed or different rate limits per endpoint or token. | | Improved architecture | The Public API is built with improved security, checks for authentication, authorization, input validation, HTTPS exposed services, auto-scaling, and more in mind. | | Cleaner mapping | The Public API uses unique IDs for reference, in place of slugs in the Config API. Unique IDs are, by design, unique. | -| Available in Europe | The Public API is accessible to both US and EU-based workspaces. | +| Available in Europe | The Public API is accessible to both US and EU-based workspaces. | | | Increased reliability | The Public API features more stable endpoints, and a 99.8% success rate | +## Create a Public API token + +> info "Only Workspace Owners can create a Public API token" +> Only users with the Workspace Owner role can create a Public API token. For more information about roles, see Segment's [Roles](/docs/segment-app/iam/roles/) documentation. + +To create a Public API token in your Segment workspace: +1. Navigate to Settings > Workspace settings > Access Management > Tokens. +2. Click the **+ Create Token** button. +3. Create a description for the token and assign it either Workspace Owner or Workspace Member access. +4. Click **Create**. +5. Copy your workspace token somewhere secure and click **Done**. + +To begin sending requests to the Public API, make sure to include the Public API Token into your HTTP requests with the `Authorization` Header and configured with `Bearer Token` and the value of the newly generated Public API token. + ## API Token Security @@ -36,7 +53,7 @@ Within seconds, GitHub scans each commit in public repositories for Public API t Learn more about [GitHub's secret scanning program](https://docs.github.com/en/developers/overview/secret-scanning-partner-program){:target="_blank"}. -### Frequently Asked Questions +## FAQs #### What should I do if I see a notification that my token was exposed? In most cases, identifying and revoking an exposed token takes seconds. Segment recommends you check the [audit trail](/docs/segment-app/iam/audit-trail/) to ensure no unauthorized actions were taken with the token. @@ -49,3 +66,37 @@ By automatically revoking the exposed token, Segment helps keep your workspace s #### How do I enable this feature? This feature is automatically enabled for all workspaces on Team or Business tier plans. +#### What should I do when I see a CORS error? +If you see a CORS error, this means you're attempting to make a request to the Public API on the front-end. The Public API is used for server-side only. To get rid of the error, move all Public API requests to a server. + +#### What User Role / Workspace permissions are required to generate Public API tokens? +Only [users that have a `Workspace Owner` role](https://segment.com/docs/segment-app/iam/roles/#global-roles) can create Public API Tokens. + +## Troubleshooting +#### The `Update Schema Settings in Source` endpoint returns error for field `forwardingViolationsTo` and `forwardingBlockedEventsTo` +When you don't have a source to forward violations or blocked events to, then exclude the fields `forwardingViolationsTo` or `forwardingBlockedEventsTo` entirely from the request and the setting will be disabled. + +`PATCH` endpoint : `https://api.segmentapis.com/sources/{sourceId}/settings` +``` +{ + "group": { + "allowTraitsOnViolations": false, + "allowUnplannedTraits": false, + "commonEventOnViolations": "ALLOW" + }, + "identify": { + "allowTraitsOnViolations": true, + "allowUnplannedTraits": true, + "commonEventOnViolations": "Block" + }, + "track": { + "allowEventOnViolations": false, + "allowPropertiesOnViolations": false, + "allowUnplannedEventProperties": false, + "allowUnplannedEvents": false, + "commonEventOnViolations": "OMIT_PROPERTIES" + } + } +``` +### What is the difference between a destination's Instance ID and Meta ID? +The destination’s Instance ID is specific to a single destination within your workspace. The destination’s Meta ID, which is returned by the delivery metrics endpoint, identifies which integration you've set up. For example, if you had a `dev` Mixpanel (Actions) destination and a `prod` Mixpanel (Actions) destination, they would have the same Meta ID but two different Instance IDs. diff --git a/src/api/public-api/query-language.md b/src/api/public-api/query-language.md new file mode 100644 index 0000000000..73e93ae2c7 --- /dev/null +++ b/src/api/public-api/query-language.md @@ -0,0 +1,515 @@ +--- +title: Segment Query Language Reference +plan: papi +--- + +Segment's query language lets you define audience segments and computed traits. With clear syntax and practical functionality, the language simplifies the process of defining conditions and computations, helping you extract valuable insights from customer data. + +This reference provides a comprehensive overview of the Segment query language. + +> info "Segment's query language in private beta" +> Segment's query language is in private beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. + +## Overview + +Audience definitions specify the criteria for identifying users or accounts as members of a particular audience, while computed trait definitions outline the logic for aggregating or calculating values stored as traits on user or account level profiles. + +With Segment's query language, you can create these definitions and use them with Segment APIs to generate audiences and computed traits. + +## Available functions and operators + +This section outlines the functions and operators you can use with the query language. + +### Syntax + +Follow these syntax rules when you create definitions: + +- All definitions consist of expressions connected by optional junctions. +- Expressions are composed of chained functions, starting with an extractor and ending with a result. +- `.` serves as the delimiter when chaining functions. +- Audience definitions must return a boolean result (for example, a comparator), while computed trait definitions must return a scalar. +- Functions have well-defined return types that determine the permissible functions in the call chain. +- When you use junctions, `AND` holds precedence over `OR`, but parentheses offer control over expression combination. +- Each definition allows a maximum of 50 primary expressions. + +### Syntactic sugar + +The language supports the following syntactic sugar adjustments: + +- The language automatically wraps a 'literal' extractor function around string or number inputs wherever a scalar expression expects them. +- You can invoke the boolean comparator functions `equals`, `differs`, `greater_than`, `at_least`, `less_than`, and `at_most` by omitting the period and parenthesis and replacing the function name with the equivalent symbols `=`, `!=`, `>`, `>=`, `<`, and `<=`. Regardless of the syntactic sugar, the comparison still dictates the operations allowed in the call-chain. + +### Definition type + +The definition type (`USERS` or `ACCOUNTS`) determines whether the computation operates at the user or account level. For account-level audiences, you can apply additional functions `ANY` (to verify that all underlying users meet the defined conditions) and `ALL` (to check if any of the underlying users meet the defined conditions). + +These functions use the association between accounts and users to determine audience membership. + +## Functions + +The following tables list the query languages's available functions. + +### Extractors + +| `event` | | +| ----------- | ------------------------------------------------------------------------------- | +| Syntax | `event({s: String})`
    `s` - the name of the event to build an extractor for | +| Return Type | `VectorExtractor` | +| Example | `event('Shoes Bought')` | + +| `trait` | | +| ----------- | --------------------------------------------------------------------------------------------------- | +| Syntax | `trait({s: String})`
    `s` - the name of the the trait to reference | +| Return Type | `ScalarExtractor` | +| Description | Similar to the event operator, the trait operator is used to specify profile trait filter criteria. | +| Notes | You can reference other audiences by using the audience key as the trait name. | +| Example | `trait('total_spend')` | + +| `property` | | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `property({s: String})`
    `s` - the name of the property to build an extractor for
    In the context of funnel audiences, you can add a parent prefix to reference the parent event.
    `property(parent: {s: String})` | +| Return Type | `ScalarExtractor` | +| Notes | Only valid within a `where` function or a Reducer. | +| Example | `property('total')` | + +| `context` | | +| ----------- | ----------------------------------------------------------------------------------- | +| Syntax | `context({s: String})`
    `s` - the name of the context to build an extractor for | +| Return Type | `ScalarExtractor` | +| Notes | Only valid within a `where` function or a Reducer. | +| Example | `context('page.url')` | + +| `literal` | | +| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Syntax | `literal({a: Any})`
    `a` - the value to treat as a literal expression | +| Operations allowed in call-chain | None allowed; typically used within another function, like a comparison (with syntactic sugar, this would appear on the right side of the comparison). The outer function or comparison dictates the operations allowed in the call-chain. | +| Example | `literal(100)`
    | + + + +### Filters + +| `where` | | +| ----------- | ------------------------------------------------------------------------------------- | +| Syntax | `where({e: Comparator})`
    `e` - a subexpression terminating in a boolean Comparator | +| Return Type | `StreamFilter` | +| Description | Filters the stream to only items where a property satisfies a particular condition. | +| Notes | The parameter is a sub-expression, something that terminates in a boolean Comparator. | +| Example | `where({property('price_usd') > 100})` | + +| `sources` | | +| ----------- | ------------------------------------------------------------------------------------- | +| Syntax | `sources({exclude: {a: Array}})`
    `a` - an array of source `ids` to exclude | +| Return Type | `StreamFilter` | +| Description | Filters the stream to only items whose source `id` does not match the exclusion list. | +| Example | `sources({exclude: 'QgRHeujRJBM9j18yChyC', '/;hSBZDqGDPvXCKHbikPm'})` | + +| `within` | | +| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `within({d: Integer} {u: TimeUnit})`
    `d` - duration value
    u - hour (s) day (s)
    In the context of funnel audiences, you can add a parent prefix to reference the parent event.
    `within(parent: {d: Integer} {u: TimeUnit})` | +| Return Type | `WindowedFilter` | +| Description | Provides time windowing so that events are only looked at over a specified number of hours or days into the past. You can add a prefix to direct the evaluation to be relative to the timestamp of a different event. | +| Example | `within(7 days)` | + +| `between` | | +| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `between({s: Integer} {su: TimeUnit}, {e: Integer} {eu: TimeUnit})`
    `s` - start value
    su - hour (s) day (s)
    `e` - end value
    eu - hour (s) day (s) | +| Return Type | `WindowedFilter` | +| Description | You can add a prefix to direct the evaluation to be relative to the timestamp of a different event. | +| Example | `between(7 days, 10 days)` | + + +### Reducers + +| `count` | | +| ----------- | ---------------------------------------------------------------- | +| Syntax | `count()` | +| Return Type | `Scalar` | +| Description | Counts the number of entries in a stream and returns the result. | +| Example | `count()` | + +| `sum` | | +| ----------- | ----------------------------------------------------------- | +| Syntax | `sum({s: EventPropertyExtractor})`
    `s` - property to sum | +| Return Type | `Scalar` | +| Example | `sum(property('spend'))` | + +| `avg` | | +| ----------- | --------------------------------------------------------------- | +| Syntax | `avg({s: EventPropertyExtractor})`
    `s` - property to average | +| Return Type | `Scalar` | +| Example | `avg(property('spend'))` | + +| `max` | | +| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `max({s: EventPropertyExtractor})` or `max({s: EventPropertyExtractor} as type)`
    `s` - property to get the maximum value of
    `type` - number, string | +| Return Type | `Scalar` | +| Notes | If no type is passed, Segment assumes `number` as the `type` and selects the greatest value. You can override the behavior to select the max based on lexicographical ordering by specifying `as string`. | +| Example | `max(property('spend'))`
    `max(property('spend') as string)` | + +| `min` | | +| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `min({s: EventPropertyExtractor})` or `min({s: EventPropertyExtractor} as type)`
    `s` - property to get the minimum value of
    `type` - number, string | +| Return Type | `Scalar` + | +| Notes | If no type is passed, Segment assumes `number` as the `type` and selects the smallest value. You can override the behavior to select the max based on lexicographical ordering by specifying `as string`. | +| Example | `min(property('spend'))`
    `min(property('spend') as string)` | + +| `mode` | | +| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `mode({s: EventPropertyExtractor}, {d: Integer})` or `mode({s: EventPropertyExtractor} as type, {d: Integer})`
    `s` - the property to find the most frequent value of
    `d` - minimum frequency expected
    `type` - number, string, array | +| Return Type | `Scalar` | +| Description | Find the most frequent value for a given property name. | +| Notes | If no type is passed, Segment assumes `string` as the `type` and selects the most frequent value assuming all data is a string. `number` will behave the same as `string`. `array` will also behave the same way, except when used in combination with the `$` operator where instead of treating each individual value within the array separately Segment will instead treat the whole array as a string. | +| Example | `mode(property('spend'), 2)`
    `mode(property('spend') as array, 2)` | + +| `first` | | +| ----------- | ------------------------------------------------------------------------------------------------ | +| Syntax | `first({s: EventPropertyExtractor})`
    `s` - the property to find the first value of | +| Return Type | `Scalar` | +| Description | Find the first value for the given property name within the stream of filterable data extracted. | +| Example | `first(property('spend'))` | + +| `last` | | +| ----------- | ----------------------------------------------------------------------------------------------- | +| Syntax | `last({s: EventPropertyExtractor})`
    `s` - the property to find the last value of | +| Return Type | `Scalar` | +| Description | Find the last value for the given property name within the stream of filterable data extracted. | +| Example | `last(property('spend'))` | + +| `unique` | | +| ----------- | ----------------------------------------------------------------------------------- | +| Syntax | `unique({s: EventPropertyExtractor})`
    `s` - property to get the unique values of | +| Return Type | `ListScalar` | +| Description | Generate a unique list of values for the given property name. | +| Example | `unique(property('spend'))` | + + +### Comparisons + +| `equals` | | +| ----------- | ------------------------------------------------------------ | +| Syntax | `equals({v: Scalar})`
    `v` - value to compare for equality | +| Return Type | `Comparator` | +| Example | `equals(500)`
    Syntactic Sugar: `== 500` | + +| `differs` | | +| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `differs({v: Scalar})`
    `v` - value to compare for inequality | +| Return Type | `Comparator` | +| Notes | 'differs' only returns true if the value exists and is not equal. If null values need to be considered then use 'NOT (expression) = (value)' or add a condition to check for nulls '(expression) != (value) OR (expression).absent()'. | +| Example | `differs(500)`
    Syntactic Sugar: `!= 500` | + +| `absent` | | +| ----------- | ----------------------------------------------------------------------------- | +| Syntax | `absent()` | +| Return Type | `Comparator` | +| Description | Returns true when a value is null. Equivalent to `NOT (expression).exists()`. | +| Example | `absent()` | + +| `exists` | | +| ----------- | ----------------------------------------------------------------------------------------------- | +| Syntax | `exists()` | +| Return Type | `Comparator` | +| Description | Returns true when a value is set, meaning not null. Equivalent to `NOT (expression).absent()`. | +| Example | `exists()` | + +| `greater_than` | | +| -------------- | ----------------------------------------------------- | +| Syntax | `greater_than({n: Scalar})`
    `n` - value to compare | +| Return Type | `Comparator` | +| Example | `greater_than(500)`
    Syntactic Sugar: `> 500` | + +| `at_least` | | +| -------------- | ------------------------------------------------- | +| Syntax | `at_least({n: Scalar})`
    `n` - value to compare | +| Return Type | `Comparator` | +| Example | `at_least(500)`
    Syntactic Sugar: `>= 500` | + +| `less_than` | | +| -------------- | ------------------------------------------------ | +| Syntax | `less_than({n: Scalar})`
    n - value to compare | +| Return Type | `Comparator` | +| Example | `less_than(500)`
    Syntactic Sugar: `< 500` | + +| `at_most` | | +| -------------- | ------------------------------------------------ | +| Syntax | `at_most({n: Scalar})`
    `n` - value to compare | +| Return Type | `Comparator` | +| Example | `at_most(500)`
    Syntactic Sugar: `<= 500` | + +| `contains` | | +| -------------- | ------------------------------------------------------------------------------------------ | +| Syntax | `contains({a: Array})`
    `a` - array of possible values | +| Return Type | `Comparator` | +| Description | Matches when the value contains one of the elements of the parameter array as a substring. | +| Example | `contains('shoes','shirts')` | + +| `omits` | | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `omits({s: String})`
    `s` - string to search for if missing in a containing string | +| Return Type | `Comparator` | +| Description | Evaluates to true when a substring isn't present in a containing string, equivalent to `NOT (expression).contains()`. | +| Example | `omits('shoes')` | + +| `starts_with` | | +| ------------- | -------------------------------------------------------------------------------------- | +| Syntax | `starts_with({s: String})`
    `s` - string to search for at start of containing string | +| Return Type | `Comparator` | +| Example | `starts_with('total')` | + +| `ends_with` | | +| ----------- | ---------------------------------------------------------------------------------- | +| Syntax | `ends_with({s: String})`
    `s` - string to search for at end of containing string | +| Return Type | `Comparator` | +| Example | `ends_with('total')` | + +| `one_of` | | +| ----------- | ---------------------------------------------------------------------------------- | +| Syntax | `one_of({a: Array})`
    `a` - array of possible values | +| Return Type | `Comparator` | +| Description | Matches when the value exactly matches one of the values from the parameter array. | +| Example | `one_of('shoes','shirts')` | + +| `before_date` | | +| ------------- | --------------------------------------------------------- | +| Syntax | `before_date({t: Timestamp})`
    `t` - ISO 8601 timestamp | +| Return Type | `Comparator` | +| Example | `before_date('2023-12-07T18:50:00Z')` | + +| `after_date` | | +| ------------ | -------------------------------------------------------- | +| Syntax | `after_date({t: Timestamp})`
    `t` - ISO 8601 timestamp | +| Return Type | `Comparator` | +| Example | `after_date('2023-12-07T18:50:00Z')` | + +| `within_last` | | +| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `within_last({d: Integer} {u: TimeUnit})`
    `d` - duration value
    u - hour(s), day(s) | +| Return Type | `Comparator` | +| Description | Represents the date range between today and the past `d` days - inclusive where today represents the current date at the time Segment determines audience membership or calculates the trait. | +| Example | `within_last(7 days)` | + +| `within_next` | | +| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `within_next({d: Integer} {u: TimeUnit})`
    `d` - duration value
    `u` - hour(s), day(s) | +| Return Type | `Comparator` | +| Description | Represents the date range between today and the next `d` days - inclusive where today represents the current date at the time Segment determines audience membership or calculates the trait. | +| Example | `within_next(7 days)` | + +| `before_last` | | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Syntax | `before_last({d: Integer} {u: TimeUnit})`
    `d` - duration value
    u - hour(s), day(s) | +| Return Type | `Comparator` | +| Description | Represents the date range between today - `d` days and any past date prior to that - inclusive where today represents the current date at the time Segment determines audience membership or calculates the trait. | +| Example | `before_last(7 days)` | + +| `after_next` | | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Syntax | `after_next({d: Integer} {u: TimeUnit})`
    `d` - duration value
    u - hour(s), day(s) | +| Return Type | `Comparator` | +| Description | Represents the date range between today + `d` days and any future date - inclusive where today represents the current date at the time Segment determines audience membership or calculates the trait. | +| Example | `after_next(7 days)` | + + +### Junctions + +| `AND` | | +| ----------- | ---------------------------------------------------- | +| Syntax | `{Comparator} AND {Comparator}` | +| Base Type | `Junction` | +| Return Type | `Comparator` | +| Description | True only if both subexpressions evaluate to `true`. | + +| `OR` | | +| ----------- | ------------------------------------------------- | +| Syntax | `{Comparator} OR {Comparator}` | +| Base Type | `Junction` | +| Return Type | `Comparator` | +| Description | True if either subexpression evaluates to `true`. | + +| `NOT` | | +| ----------- | ---------------------------------------------------- | +| Syntax | `NOT ({Comparator})` | +| Base Type | `Junction` | +| Return Type | `Comparator` | +| Description | True only if the subexpression evaluates to `false`. | + +| `ANY` | | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Syntax | `ANY ({Comparator})` | +| Base Type | `Junction` | +| Return Type | `Comparator` | +| Description | Used to evaluate an aggregatable boolean expression to determine if any expression is true. Used to specify account-level audience queries that aggregate across user-level queries. | + +| `ALL` | | +| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Syntax | `ALL ({Comparator})` | +| Base Type | `Junction` | +| Return Type | `Comparator` | +| Notes | Used to evaluate an aggregatable boolean expression to determine if every expression is true. Used to specify account-level audience queries that aggregate across user-level queries. | + + +## Return Type + +| `Extractor` | | +|-------------|------------------------| +| Operations | None included | + +| `VectorExtractor` (extends `Extractor`, `StreamFilter`) | | +| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Base Type | `Extractor`, `StreamFilter` | +| Operations allowed in call-chain | `where`, `sources`, `within`, `between`, `count`, `sum`, `avg`, `max`, `min`, `mode`, `first`, `last`, `unique` (inherited from `StreamFilter`) | +| Notes | A `VectorExtractor` represents extractions of data sets that need to be filtered and reduced to a scalar. Adds `isVector` property to entire expression. | + + +| `ScalarExtractor` (extends `Extractor`, `Scalar`) | | +| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Base Type | `Extractor`, `Scalar` | +| Operations allowed in call-chain | `equals`, `differs`, `absent`, `exists`, `greater_than`, `at_least`, `less_than`, `at_most`, `contains`, `omits`, `starts_with`, `ends_with`, `one_of`, `before_date`, `after_date`, `within_last`, `before_last`, `after_next` (inherited from `Scalar`) | +| Notes | A `ScalarExtractor` represents extractions of a single data element, like a field value or a trait value. | + +| `EventPropertyExtractor` (extends `Extractor`) | | +| ---------------------------------------------- | ---------------------------------------------------- | +| Base Type | `Extractor`, `Scalar` | +| Operations allowed in call-chain | None | +| Notes | Used to refer to properties for comparison purposes. | + +| `Filter` | | +| -------------------------------- | ------------- | +| Operations allowed in call-chain | None included | + +| `StreamFilter` (extends `Filter`) | | +| --------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| Base Type | `Filter` | +| Operations allowed in call-chain | `where`, `sources`, `within`, `between`, `count`, `sum`, `avg`, `max`, `min`, `mode`, `first`, `last`, `unique` | + +| `WindowedFilter` (extends `StreamFilter`) | | +| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| Base Type | `StreamFilter` | +| Operations allowed in call-chain | `where`, `sources`, `within`, `between`, `count`, `sum`, `avg`, `max`, `min`, `mode`, `first`, `last`, `unique` | + +| `Scalar` | | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Operations allowed in call-chain | `equals`, `differs`, `absent`, `exists`, `greater_than`, `at_least`, `less_than`, `at_most`, `contains`, `omits`, `starts_with`, `ends_with`, `one_of`, `before_date`, `after_date`, `within_last`, `before_last`, `after_next`, `within_next` | + +| `ListScalar` | | +| -------------------------------- | ------- | +| Operations allowed in call-chain | `count` | + +| `Comparator` | | +| -------------------------------- | ---------------------------------------------------------------------------------- | +| Base Type | `Comparator` | +| Operations allowed in call-chain | None allowed; once an expression is terminated with a Comparator, it is completed. | + +| `Junction` | | +| ---------- | --------------------------------------------------- | +| Base Type | `Junction` | +| Notes | Preserves any set properties set by subexpressions. | + +## Examples + +### Audiences + +Suppose you wanted to collect all users who performed the `Shoes Bought` event at least once within the last seven days, where the purchase price was greater than or equal to 100. + +Another way to think of this scenario would be: + +- Collect all users who performed the `Shoes Bought` event. +- Filter down to only consider events with a price greater than or equal to 100. +- Filter for events that occurred within the last seven days. +- Only include users who have one or more of the previous events. + +Here's how you could do that in Segment's query language: + +```sql +event('Shoes Bought').where( property('price') >= 100 ).within(7 days).count() >= 1 +``` + +#### Bought and returned + +This example collects: + +- all users who performed the `Shoes Bought` event at least once within the last 30 days +- where the price was greater than or equal to the average spend +- and the user performed the `Shoes Returned` event at least once, five days after the `Shoes Bought` event + +```sql +event('Shoes Bought').where( +property('price') >= trait('avg_spend') +AND +event('Shoes Returned').within(parent: 5 days).count() >= 1 +).within(30 days).count() >= 1 +``` + +#### Did not perform `Shoes Bought` + +This example collects all users who did not perform the `Shoes Bought` event at least once and don't have a `total_spend` trait with a value greater than `200`: + +```sql +NOT ( event('Shoes Bought').count() >= 1 AND trait('total_spend') > 200 ) +``` + +#### Bought with minimum total spend + +This example collects all accounts where all associated users performed the `Shoes Bought` event at least once and have a `total_spend` trait greater than `200`: + +```sql +ALL ( event('Shoes Bought').count() >= 1 AND trait('total_spend') > 200 ) +``` + +#### No users bought at least once + +This example collects all accounts where no associated users performed the `Shoes Bought` event at least once: + +```sql +ALL NOT event('Shoes Bought').count() >= 1 +``` + +#### Any users bought at least once + +This example collects all accounts where any associated users performed the `Shoes Bought` event at least once: + +```sql +ANY event('Shoes Bought').count() >= 1 +``` + +### Computed Traits + +Suppose you wanted to calculate the average spend based on all `Shoes Bought` events performed within the last 30 days for each user. + +Another way to think of this would be: + +- Find all `Shoes Bought` events. +- Filter down to only consider events that occurred within the last 30 days. +- For these events, calculate the average spend for each user. + +Here's how you could do that in Segment's query language: + +```sql +event('Shoes Bought').within(30 days).avg(property('spend')) +``` + +#### Calculate minimum spend + +This example calculates the minimum spend for each user, based on all `Shoes Bought` events, where the price was greater than `100` and the brand was `My_Brand`: + +```sql +event('Shoes Bought').where( property('price') > 100 AND property('brand') = 'My Brand' ).min(property('spend')) +``` + +#### Calculate first seen spend + +This example calculates the first-seen spend value for each user, based on all `Shoes Bought` events performed within the last 30 days: + +```sql +event('Shoes Bought').within(30 days).first(property('spend')) +``` + +#### Most frequent spend value + +This example calculates the most frequent spend value for each user, based on all `Shoes Bought` events performed within the last 30 days. It only considers spend values that have a minimum frequency of `2`: + +```sql +event('Shoes Bought').within(30 days).mode(property('spend'), 2) +``` diff --git a/src/assets/pdf/faq-segment-dissolution-vat.pdf b/src/assets/pdf/faq-segment-dissolution-vat.pdf index 546d93ea91..907707752d 100644 Binary files a/src/assets/pdf/faq-segment-dissolution-vat.pdf and b/src/assets/pdf/faq-segment-dissolution-vat.pdf differ diff --git a/src/connections/alerting.md b/src/connections/alerting.md new file mode 100644 index 0000000000..c838645131 --- /dev/null +++ b/src/connections/alerting.md @@ -0,0 +1,61 @@ +--- +title: Connections Alerting +beta: true +--- + +Connections Alerting allows Segment users to receive in-app, email, and Slack notifications related to the performance and throughput of an event-streaming connection. + +To access Connections Alerting, select an event-streaming connection (like a web library source or cloud mode destination) and click the **Alerts** tab. + +On the Alerts tab, you can create alerts and view all active alerts for this connection. You can only edit or delete the alerts that you create. + +## Source volume alerts + +You can create an alert that notifies you when the volume of events received by your source in the last 24 hours changes beyond a percentage you set. For example, if you set a change percentage of 4% and your source received 100 events over the first 24 hours, Segment would notify you the following day if your source ingested fewer than 96 or more than 104 events. + +To receive a source volume alert in a Slack channel, you must first create a Slack webhook. For more information about Slack webhooks, see the [Sending messages using incoming webhooks](https://api.slack.com/messaging/webhooks){:target="_blank”} documentation. + +A screenshot of the Source Volume alert creation sidesheet. + +To create a source volume alert: +1. In your workspace, navigate to Connections, select Sources, and select the Event streams tab. +2. Select the [event streams source](/docs/connections/sources/#event-streams-sources) you'd like to configure alerts for. +2. Select the Alerts tab and click **Create alert**. +3. On the Create alert sidesheet, enter a percentage of source volume change that you'd like to be notified for. +4. Select one or more of the following alert channels: + - **Email**: Select this to receive notifications at the provided email address. + - **Slack**: Select this to send alerts to one or more channels in your workspace. + - **In-app**: Select this to receive notifications in the Segment app. To view your notifications, select the bell next to your user icon in the Segment app. +5. Click **Save**. + +To make changes to a source volume alert, select the icon in the Actions column for the alert and click **Edit**. + +To delete a source volume alert, select the icon in the Actions column for the alert and click **Delete**. + +> info "Deleting alerts created by other users requires Workspace Owner permissions" +> All users can delete source volume alerts that they created, but only those with Workspace Owner permissions can delete alerts created by other users. + +## Successful delivery rate alerts + +You can create an alert that notifies you when the volume of events successfully received by your destination in the last 24 hours falls below a percentage you set. For example, if you set a percentage of 99%, Segment notifies you if your destination had a successful delivery rate of 98% or below. + +To receive a successful delivery rate alert in a Slack channel, you must first create a Slack webhook. For more information about Slack webhooks, see the [Sending messages using incoming webhooks](https://api.slack.com/messaging/webhooks){:target="_blank”} documentation. + +To create a successful delivery rate alert: +1. Navigate to the [cloud-mode destinations](/docs/connections/destinations/#:~:text=Cloud%2Dmode%3A%20The%20sources%20send%20data%20directly%20to%20the%20Segment%20servers%2C%20which%20then%20translate%20it%20for%20each%20connected%20downstream%20destination%2C%20and%20send%20it%20on.) you'd like to configure alerts for. +2. Select the Alerts tab and click **Create alert**. +3. On the Create alert sidesheet, enter a percentage. You will receive events if your successful delivery rate falls below this percentage. +4. Select one of the following alert channels: + - **Email**: Select this to receive notifications at either the email address associated with your account or another email address that you enter into this field. + - **Slack**: Select this and enter a Slack webhook URL and channel name to send alerts to a channel in your Slack workspace. + - **In-app**: Select this to receive notifications in the Segment app. To view your notifications, select the bell next to your user icon in the Segment app. +5. Click **Save**. + +To make changes to a successful delivery rate alert, select the icon in the Actions column for the alert and click **Edit**. + +To delete a successful delivery rate alert, select the icon in the Actions column for the alert and click **Delete**. + +> info "Deleting alerts created by other users requires Workspace Owner permissions" +> All users can delete successful delivery alerts that they created, but only those with Workspace Owner permissions can delete alerts created by other users. + +Segment generates delivery alerts for failed deliveries and successful deliveries, which are the last two stages of the delivery pipeline. As a result, alerts are based on Segment's attempts to send qualified events to your destination, excluding those filtered out by business rules (like protocols, destination filters, or mappings). diff --git a/src/connections/auto-instrumentation/configuration.md b/src/connections/auto-instrumentation/configuration.md new file mode 100644 index 0000000000..b7ed3975c7 --- /dev/null +++ b/src/connections/auto-instrumentation/configuration.md @@ -0,0 +1,313 @@ +--- +title: Generate Events from Signals +hidden: true +--- + +This guide is a reference to configuring, generating, and using signals in the Signals SDK with Auto-Instrumentation. On this page, you'll find details on: + +- Setting up and managing signal types in the Signals SDK +- Creating custom rules to capture and translate signals into actionable analytics events +- Example rules that you can use as a basis for further customization + +This guide assumes that you've already added the Signals SDK to your application. If you haven't yet, see the [Auto-Instrumentation Setup](/docs/connections/auto-instrumentation/setup/) guide for initial setup. + +> info "Auto-Instrumentation Pilot" +> Auto-Instrumentation is currently in pilot and is governed by Segment's [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank"}. Segment doesn't recommend Auto-Instrumentation for use in a production environment, as Segment is actively iterating on and improving the user experience. + +> success "Enable Auto-Instrumentation" +> To enable Auto-Instrumentation in your Segment workspace, reach out to your dedicated account manager. + +## Signals configuration + +Using the Signals Configuration object, you can control the destination, frequency, and types of signals that Segment automatically tracks within your application. The following tables detail the configuration options for both Signals-Swift and Signals-Kotlin. + +### Signals-Swift + +| `Option` | Required | Value | Description | +| ---------------------- | -------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `writeKey` | Yes | String | Source write key | +| `maximumBufferSize` | No | Integer | The number of signals to be kept for JavaScript inspection. This buffer is first-in, first-out. Default is `1000`. | +| `relayCount` | No | Integer | Relays signals to Segment every Xth event. Default is `20`. | +| `relayInterval` | No | TimeInterval | Relays signals to segment every X seconds. Default is `60`. | +| `broadcasters` | No | `SignalBroadcaster` | An array of broadcasters. These objects forward signal data to their destinations, like `WebhookBroadcaster` or `DebugBroadcaster` writing to the developer console. Default is `SegmentBroadcaster`. | +| `useUIKitAutoSignal` | No | Bool | Tracks UIKit component interactions automatically. Default is `false`. | +| `useSwiftUIAutoSignal` | No | Bool | Tracks SwiftUI component interactions automatically. Default is `false`. | +| `useNetworkAutoSignal` | No | Bool | Tracks network events automatically. Default is `false`. | +| `allowedNetworkHosts` | No | Array | An array of allowed network hosts. | +| `blockedNetworkHosts` | No | Array | An array of blocked network hosts. | + + +### Signals-Kotlin + +| `Option` | Required | Value | Description | +| ------------------- | -------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `writeKey` | Yes | String | Source write key | +| `maximumBufferSize` | No | Integer | The number of signals to be kept for JavaScript inspection. This buffer is first-in, first-out. Default is `1000`. | +| `broadcastInterval` | No | Integer | Broadcasts signals to Segment every X event. Default is `60`. | +| `broadcasters` | No | `List` | An array of broadcasters. These objects forward signal data to their destinations, like `WebhookBroadcaster` or `DebugBroadcaster` writing to the developer console. Default is `SegmentBroadcaster`. | + + +## Converting signals to events + +After you set up the Signals SDK to capture the signals you want to target, you can create rules in your Segment workspace to translate the captured signals into traditional Segment analytics events. These rules are deployed in your application the next time a user launches your app. + +### Getting started with rule creation + +1. In your Segment workspace, go to to **Connections > Auto-Instrumentation** and click on a source. +2. Click **Create Rules**. + +### Using the Rules Editor + +The Rules Editor is where you define rules that transform raw signal data into analytics events. In the editor, you write functions that convert signals into events and then call them in the `processSignal()` function. + +The Rules Editor also lets you test your rules with recent signals to verify that they produce the data you need before you deploy. + +The following example tracks all Screen events: + +```javascript +function screenCall(currentSignal) { + if (currentSignal.type == SignalType.Navigation && currentSignal.data.action == NavigationAction.Entering) { + analytics.screen(currentSignal.data.screen, null, null) + } +} + +function processSignal(signal) { + screenCall(signal) +} +``` + +## Signal definitions + +Signals come in various types, each associated with specific data that you can use to create analytics events. This section contains code samples that detail each signal type. Because Segment has standardized these definitions across both the Signals-Swift and Signals-Kotlin libraries, they're useful when you create rules in your Segment workspace. + +### Base signal + +The Base Signal serves as the foundation for all other signal types. It's defined by the `RawSignal` interface, where `T` represents the data type associated with the signal. + +This interface ensures that every signal inherits essential properties: + +```java +interface RawSignal { + var anonymousId: String // + var type: SignalType // Specifies the signal category. + var timestamp: String // The exact time when the signal was generated. + var index: Int // An integer representing the signal's position. + var data: T // The specific data of type `T` associated with the signal. +} +``` + +### Signal Types + +The Signal Type enum defines the different types of signals the SDK can collect: + +```java +enum SignalType { + Interaction, // User interactions like clicks or touches. + Navigation, // Navigation events. + Network, // Network requests and responses. + LocalData, // Data loaded from local or other external sources. + Instrumentation, // Events generated from Segment Track/Screen/... events. + UserDefined // Custom events defined by the user. +} +``` + +### Interaction signals + +The SDK collects Interaction signals when you enable one of the `UIAutoSignal` options, like `useSwiftUIAutoSignal: true`. These signals primarily track user interactions with UI components: + +```java +class InteractionData { + var component: String // The type of UI component interacted with, like "Button" or "Image". + var title: String? // Optional title of the component, if applicable. + var data: Object? // Additional data related to the interaction, if any. +} + +class InteractionSignal extends RawSignal { + type = SignalType.UIInteraction // Sets the signal type to UI Interaction. +} +``` + +### Navigation signals + +The SDK collects Navigation signals when you enable one of the `UIAutoSignal` options, like `useSwiftUIAutoSignal: true`. These signals are generated when a user interacts with navigation components in your application's UI, giving you insight into how users move through and interact with your application: + +```java +enum NavigationAction { + Forward, // Navigation to the next item or page + Backward, // Navigation to the previous item or page + Modal, // Opening a modal window + Entering, // Entering a new screen + Leaving, // Leaving a screen + Page, // Navigation involving a full page + Popup // Interaction with a popup +} + +class NavigationData { + var action: NavigationAction // The type of navigation action performed. + var screen: String // The screen or component name involved in the navigation. +} + +class NavigationSignal extends RawSignal { + type = SignalType.Navigation // Sets the signal type to Navigation. +} +``` + +### Network signals + +The SDK collects Network signals when you enable the `useNetworkAutoSignal` option in your Signals Configuration, like `useNetworkAutoSignal: true`. These signals are generated when your application makes network requests: + +```java +enum NetworkAction { + Request, // A network request is made. + Response // A response is received. +} + +class NetworkData { + var action: NetworkAction // The type of network action, either Request or Response. + var url: String // The URL involved in the network action. + var statusCode: Int? // The HTTP status code of the response, if applicable. + var data: Object? // Additional data associated with the network action. +} + +class NetworkSignal extends RawSignal { + type = SignalType.Network // Sets the signal type to Network. +} +``` + +### Local Data signals + +The SDK collects Local Data Signals when data gets loaded from local soures, like SQLite databases or local caches. These signals help track how your application manages local data: + +```java +enum LocalDataAction { + Loaded, // Data was loaded from a local source. + Updated, // Existing data was updated. + Saved, // New data was saved locally. + Deleted, // Data was deleted from a local source. + Undefined // Any other unspecified local data action. +} + +class LocalData { + var action: LocalDataAction // The type of action performed on the local data. + var identifier: String // A unique identifier for the data, like "Loaded User Info". + var data: Object? // Additional details or data associated with the action. +} + +class LocalDataSignal extends RawSignal { + type = SignalType.LocalData // Sets the signal type to LocalData. +} +``` + +### Instrumentation signals + +The SDK collects Instrumentation Signals when [traditional Segment analytics events](/docs/connections/spec/) are invoked: + +```java +enum EventType { + Track, // + Screen, // + Identify, // + Group, // + Alias, // + Unknown // Any other unspecified event type. +} + +class InstrumentationData { + type: EventType // The type of Segment event. + rawEvent: Object? // Additional details of the event. +} + +class InstrumentationSignal extends RawSignal { + type = SignalType.Instrumentation // Sets the signal type to Instrumentation. +} +``` + +### User-defined signals + +You can also define your own signals. Use the following example as an implementation guideline: + +```java +interface MyCustomData { + var event: String // A custom event description or identifier. +} + +class MyCustomSignal extends RawSignal { + type = SignalType.UserDefined // Sets the signal type to User Defined. +} +``` + +## Example rule implementations + +You can use the Signals data definitions on this page to create tracking rules. + +### Example: Identify users + +Building off of the screen tracking example, you could create a rule that identifies users: + +```javascript +function detectIdentify(currentSignal) { + var loginType; + + // Check if the signal is related to network activity on a login URL + if (currentSignal.type == SignalType.Network && currentSignal.data.url.includes("login")) { + loginType = "login"; + } + + // If a login type was detected, identify the user + if (loginType) { + var traits = new Object(); + traits.loggedIn = true; // Set user status to logged in + let loginData = currentSignal.data.data.content; // Extract login data from the signal + traits.userName = loginData.userName; // Capture the user's name + + if (loginType === "login") { + var userId = loginData.userId; // Get userID from login data + analytics.identify(userId, traits); // Identify the user with the Identify call + } + } +} + +//...other functions + +function processSignal(signal) { + //...other functions + detectIdentify(signal); // Process the Identify call based on incoming signals +} +``` + + +### Example: Track `Add to Cart` events + +This rule shows how you could implement the core ordering events from [the e-commerce Spec](/docs/connections/spec/ecommerce/v2/#core-ordering-overview): + +```javascript +function trackAddToCart(currentSignal) { + // Check if the signal is an interaction with the "Add To Cart" button + if (currentSignal.type == SignalType.Interaction && currentSignal.data.title == "Add To Cart") { + var properties = new Object(); // Initialize an object to store event properties + + // Find the network response signal for additional data + let network = signals.find(currentSignal, SignalType.Network, (signal) => { + return signal.data.action === NetworkAction.Response; + }); + + if (network) { + // Extract and assign product details from the network response + properties.price = network.data.data.content.price; // Product price + properties.currency = network.data.data.content.currency ?? "USD"; // Currency, defaulting to USD if undefined + properties.productId = network.data.data.content.id; // Product ID + properties.productName = network.data.data.content.title; // Product name + } + + // Track the "Add To Cart" event with the defined properties + analytics.track(currentSignal.data.title, properties); + } +} + +//...other functions + +function ProcessSignals(signal) { + //...other functions + trackAddToCart(signal); // Process the "Add To Cart" tracking based on incoming signals +} +``` diff --git a/src/connections/auto-instrumentation/images/autoinstrumentation_signals.png b/src/connections/auto-instrumentation/images/autoinstrumentation_signals.png new file mode 100644 index 0000000000..52d290ec73 Binary files /dev/null and b/src/connections/auto-instrumentation/images/autoinstrumentation_signals.png differ diff --git a/src/connections/auto-instrumentation/index.md b/src/connections/auto-instrumentation/index.md new file mode 100644 index 0000000000..e90e23bb9e --- /dev/null +++ b/src/connections/auto-instrumentation/index.md @@ -0,0 +1,38 @@ +--- +title: Auto-Instrumentation +hidden: true +--- + +Auto-Instrumentation simplifies tracking in your websites and apps by eliminating the need for a traditional Segment instrumentation. + +> info "Auto-Instrumentation Pilot" +> Auto-Instrumentation is currently in pilot and is governed by Segment's [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank"}. Segment doesn't recommend Auto-Instrumentation for use in a production environment, as Segment is actively iterating on and improving the user experience. + +> success "Enable Auto-Instrumentation in your workspace" +> To enable Auto-Instrumentation in your Segment workspace, reach out to your dedicated account manager. + +## Background + +Gathering actionable and timely data is crucial to the success of your business. However, collecting this data in real time has historically proven to be challenging. + +As your business needs change, keeping instrumentation up-to-date across all of your digital properties can be time-consuming, often taking weeks or months. This delay can lead to lost insights, frustration for your marketers and developers, and open-ended support of your Segment instrumentation. + +## Auto-Instrumentation as a solution + +With just a few lines of code, Auto-Instrumentation handles device tracking for you, helping you focus on collecting the data that's essential to your business and letting your marketers and data analysts gather and update data without relying on engineering teams. + +Some Auto-Instrumentation advantages include: + +- **JavaScript-based instrumentation logic**: Configure and refine your instrumentation logic entirely within JavaScript, simplifying the development process and reducing dependencies on other environments. +- **Rapid iteration**: Update your instrumentation logic without the need to constantly release new versions of your mobile app, enabling faster iterations and improvements. +- **Bypass update delays**: Avoid the typical delays associated with app update cycles and app store approvals. Auto-Instrumentation lets you update your tracking setups or fix errors immediately, ensuring your data collection remains accurate and timely. + +## How it works + +After you [integrate the Analytics SDK and Signals SDK into your application](/docs/connections/auto-instrumentation/setup/), Segment begins to passively monitor user activity like button clicks, page navigation, and network data. Segment captures these events as "signals" and sends them to your Auto-Instrumentation source in real time. + +In Segment, the Auto-Instrumentation source lets you view raw signals. You can then [use this data to create detailed analytics events](/docs/connections/auto-instrumentation/configuration/) based on those signals, enriching your insights into user behavior and applicatino performance. + +## Privacy + +Auto-Instrumentation removes personally identifiable information (PII) from breadcrumbs before they get sent to Segment. No user data is visible to Segment. diff --git a/src/connections/auto-instrumentation/setup.md b/src/connections/auto-instrumentation/setup.md new file mode 100644 index 0000000000..841aefc31a --- /dev/null +++ b/src/connections/auto-instrumentation/setup.md @@ -0,0 +1,148 @@ +--- +title: Auto-Instrumentation Setup +hidden: true +--- + +This guide outlines the steps required to set up the Signals SDK in your applications using Swift or Kotlin. + +You'll learn how to add Auto-Instrumentation sources, integrate dependencies, and ensure that your setup captures and processes data as intended. + +> info "Auto-Instrumentation Pilot" +> Auto-Instrumentation is currently in pilot and is governed by Segment's [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank"}. Segment doesn't recommend Auto-Instrumentation for use in a production environment, as Segment is actively iterating on and improving the user experience. + +> success "Enable Auto-Instrumentation" +> To enable Auto-Instrumentation in your Segment workspace, reach out to your dedicated account manager. + +## Step 1: Add a source and get its write key + +You'll first need to add a source and copy its write key: + +1. In your Segment workspace, navigate to **Connections > Auto-Instrumentation** and click **Add source**. +2. Select a source, give the source a name, and click **Save**. +3. Return to **Connections > Sources** to view your sources. +4. In the **My sources** table, find and click the new source you just set up. +5. In the **Initialize the Client** section, look for and copy the `writeKey` displayed in the code block. + +## Step 2: Add dependencies and initialization code + +Next, you'll need to add the Signals SDKs to your Swift and Kotlin development environments. + +### Swift + +Follow these steps to integrate the Signals SDK into your Swift application: + +1. Use Swift Package Manager to add the Signals SDK from the following repository: + + ```zsh + https://github.com/segmentio/Signals-swift.git + ``` + +2. Add the initialization code: + + ```swift + // Configure Analytics with your settings + {... ....} + + // Set up the Signals SDK configuration + let config = Signals.Configuration( + writeKey: "", // Replace with the write key you previously copied + maximumBufferSize: 100, + useSwiftUIAutoSignal: true, + useNetworkAutoSignal: true + ) + + // Locate and set the fallback JavaScript file for edge functions + let fallbackURL = Bundle.main.url(forResource: "MyEdgeFunctions", withExtension: "js") + + // Apply the configuration and add the Signals plugin + Signals.shared.useConfiguration(config) + Analytics.main.add(plugin: LivePlugins(fallbackFileURL: fallbackURL)) + Analytics.main.add(plugin: Signals.shared) + ``` + +Verify that you replaced `` with the actual write key you copied in Step 1. + +#### SwiftUI projects + +If your app is written in SwiftUI, you'll need to add a `TypeAlias.swift` file to your project that captures interaction and navigation Signals, like in this example: + +```swift +import Foundation +import Signals + +typealias Button = SignalButton +typealias NavigationStack = SignalNavigationStack +typealias NavigationLink = SignalNavigationLink +typealias TextField = SignalTextField +typealias SecureField = SignalSecureField +``` + +### Kotlin + +Follow these steps to integrate the Signals SDK into your Kotlin application: + +1. Update your module’s Gradle build file to add the right dependencies: + + ```kotlin + dependencies { + // Add the Analytics Kotlin library + implementation("com.segment.analytics.kotlin:android:1.15.0") + // Add a live plugin for real-time data handling + implementation("com.segment.analytics.kotlin:analytics-kotlin-live:1.0.0") + // Add the core Signals library + implementation("com.segment.analytics.kotlin.signals:core:0.0.1") + // Compose plugin for Jetpack Compose UI tracking + implementation("com.segment.analytics.kotlin.signals:compose:0.0.1") + // OkHttp3 plugin for network activity tracking + implementation("com.segment.analytics.kotlin.signals:okhttp3:0.0.1") + } + ``` + +2. Add the following code to your application to initialize the Signals SDK: + + ```kotlin + // Configure Analytics with your settings + {... ....} + + // Add live plugins for real-time analytics + analytics.add(LivePlugins()) + + // Configure and add the Signals plugin + Signals.configuration = Configuration( + writeKey = "", // Replace with the write key you previously copied + maximumBufferSize = 1000, + broadcasters = listOf(SegmentBroadcaster(analytics)) + ) + + // Add the Compose plugin for UI events and screen tracking + analytics.add(SignalsComposeTrackingPlugin()) + ``` + +3. (Optional:) If you want to track network activity, configure your OkHttpClient to use the Signals OkHttp3 plugin: + + ```kotlin + private val okHttpClient = OkHttpClient.Builder() + .addInterceptor(SignalsOkHttp3TrackingPlugin()) + .build() + ``` + +4. Build and run your app. + +## Step 3: Verify and deploy events + +Next, you'll need to verify signal emission and [create rules](/docs/connections/auto-instrumentation/configuration/#example-rule-implementations) to convert those signals into events: + +1. In your Segment workspace, return to **Connections > Auto-Instrumentation** and click on the new source you created. +2. Verify that signals appear as expected on the dashboard. + + ![Signals successfully appearing in the Segment UI](images/autoinstrumentation_signals.png "Signals successfully appearing in the Segment UI") + +3. Click **Create Rules**. +4. In the Rules Editor, add a rule that converts signal data into an event. +5. Click **Preview**, then click **Save & Deploy**. + +Segment displays `Rule updated successfully` to verify that it saved your rule. + +## Next steps + +This guide walked you through initial Signals SDK/Auto-Instrumentation setup. Next, read the [Auto-Instrumentation Signals Implementation Guide](/docs/connections/auto-instrumentation/configuration/), which dives deeper into Signals and offers examples rules. diff --git a/src/connections/aws-privatelink.md b/src/connections/aws-privatelink.md new file mode 100644 index 0000000000..20f5a27eb6 --- /dev/null +++ b/src/connections/aws-privatelink.md @@ -0,0 +1,67 @@ +--- +title: Amazon Web Services PrivateLink +--- + +[Amazon Web Services' PrivateLink](https://aws.amazon.com/privatelink/){:target="_blank”} is an AWS service that provides private connectivity between VPCs without exposing traffic to the public Internet. Keeping traffic in the Amazon network reduces the data security risk associated with exposing your Warehouse traffic to the Internet. + +> info "" +> Segment's PrivateLink integration is currently in private beta and is governed by Segment’s [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank”}. Only warehouses located in region `us-east-1` are eligible for PrivateLink. You might incur additional networking costs while using AWS PrivateLink. + +During the Private Beta, you can set up AWS PrivateLink for [Databricks](#databricks), [RDS Postgres](#rds-postgres), and [Redshift](#redshift). + +## Databricks + +> info "Segment recommends reviewing the Databricks documentation before attempting AWS PrivateLink setup" +> The setup required to configure the Databricks PrivateLink integration requires front-end and back-end PrivateLink configuration. Review the [Databricks documentation on AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} to ensure you have everything required to set up this configuration before continuing. + +### Prerequisites +Before you can configure AWS PrivateLink for Databricks, complete the following prerequisites in your Databricks workspace: +- Databricks account must be on the [Enterprise pricing tier](https://www.databricks.com/product/pricing/platform-addons){:target="_blank”} and use the [E2 version](https://docs.databricks.com/en/archive/aws/end-of-life-legacy-workspaces.html#e2-architecture){:target="_blank”} of the platform. +- Databricks workspace must use a [Customer-managed VPC](https://docs.databricks.com/en/security/network/classic/customer-managed-vpc.html){:target="_blank”} and [Secure cluster connectivity](https://docs.databricks.com/en/security/network/classic/secure-cluster-connectivity.html){:target="_blank”}. + - Configure your [VPC](https://docs.databricks.com/en/security/network/classic/customer-managed-vpc.html){:target="_blank”} with DNS hostnames and DNS resolution + - Configure a [security group](https://docs.databricks.com/en/security/network/classic/customer-managed-vpc.html#security-groups){:target="_blank”} with bidirectional access to 0.0.0/0 and ports 443, 3306, 6666, 2443, and 8443-8451. + +### Configure PrivateLink for Databricks +To configure PrivateLink for Databricks: +1. Follow the instructions in Databricks' [Enable private connectivity using AWS PrivateLink](https://docs.databricks.com/en/security/network/classic/privatelink.html){:target="_blank”} documentation. You must create a [back-end](https://docs.databricks.com/en/security/network/classic/privatelink.html#private-connectivity-overview){:target="_blank”} connection to integrate with Segment's front-end connection. +2. After you've configured a back-end connection for Databricks, request access to Segment's PrivateLink integration by reaching out to your Customer Success Manager (CSM). +3. Your CSM sets up a call with Segment R&D to continue the onboarding process. + +The following Databricks integrations support PrivateLink: + - [Databricks storage destination](/docs/connections/storage/catalog/databricks/) + - [Databricks Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/databricks-setup/) + +## RDS Postgres + +### Prerequisites +Before you can configure AWS PrivateLink for RDS Postgres, complete the following prerequisites in your Databricks workspace: +- **Set up a Network Load Balancer (NLB) to route traffic to your Postgres database**: Segment recommends creating a NLB that has target group IP address synchronization, using a solution like AWS Lambda. +- **Configure your NLB with one of the following settings**: + - Disable the **Enforce inbound rules on PrivateLink traffic** setting + - Add an inbound rule that allows traffic belonging from Segment's `us-east-1` PrivateLink/Edge CIDR: `10.248.64.0/18` + +### Configure PrivateLink for RDS Postgres +1. Create a Network Load Balancer VPC endpoint service using the instructions in the [Create a service powered by AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html){:target="_blank”} documentation. +2. Reach out to your Customer Success Manager (CSM) for more details about Segment's AWS principal. +3. Add the Segment AWS principal as an “Allowed Principal” to consume the Network Load Balancer VPC endpoint service you created in step 1. +4. Reach out to your CSM and provide them with the Service name for the service that you created above. Segment's engineering team provisions a VPC endpoint for the service in the Segment Edge VPC. +5. After creating the VPC, Segment provides you with private DNS so you can update the **Host** in your Segment app settings or create a new Postgres integration.
    The following RDS Postgres integrations support PrivateLink: + - [RDS Postgres storage destination](/docs/connections/storage/catalog/postgres/) + - [RDS Postgres Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup/) + +## Redshift + +### Prerequisites +- **You're using the RA3 node type**: To access Segment's PrivateLink integration, use an RA3 instance. +- **You've enabled cluster relocation**: Cluster relocation migrates your cluster behind a proxy and keeps the cluster endpoint unchanged, even if your cluster needs to be migrated to a new Availability Zone. A consistent cluster endpoint makes it possible for Segment's Edge account and VPC to remain connected to your cluster. To enable cluster relocation, follow the instructions in the AWS [Relocating your cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html){:target="_blank”} documentation. +- **Your cluster is using a port within the ranges 5431-5455 or 8191-8215**: Clusters with cluster relocation enabled [might encounter an error if updated to include a port outside of this range](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html#:~:text=You%20can%20change%20to%20another%20port%20from%20the%20port%20range%20of%205431%2D5455%20or%208191%2D8215.%20(Don%27t%20change%20to%20a%20port%20outside%20the%20ranges.%20It%20results%20in%20an%20error.)){:target="_blank”}. + +### Configure PrivateLink for Redshift +Implement Segment's PrivateLink integration by taking the following steps: +1. Let your Customer Success Manager (CSM) know that you're interested in PrivateLink. They will share information with you about Segment’s Edge account and VPC. +2. After you receive the Edge account and VPC, [grant cluster access to Segment's Edge account and VPC](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-connect-to-cluster.html){:target="_blank”}. +3. Reach back out to your CSM and provide them with the Cluster identifier for your cluster and your AWS account ID. +4. Segment creates a Redshift managed VPC endpoint within the Segment Redshift subnet on your behalf, which creates a PrivateLink Endpoint URL. Segment then provides you with the internal PrivateLink Endpoint URL. +5. After Segment provides you with the URL, use it to update or create new Redshift integrations. The following integrations support PrivateLink: + - [Redshift storage destination](/docs/connections/storage/catalog/redshift/) + - [Redshift Reverse ETL source](/docs/connections/reverse-etl/reverse-etl-source-setup-guides/redshift-setup/) diff --git a/src/connections/delivery-overview.md b/src/connections/delivery-overview.md new file mode 100644 index 0000000000..2cd1501545 --- /dev/null +++ b/src/connections/delivery-overview.md @@ -0,0 +1,118 @@ +--- +title: Delivery Overview +--- + +Delivery Overview is a visual observability tool designed to help Segment users diagnose event delivery issues for any cloud-streaming destination receiving events from cloud-streaming sources. + +> info "Delivery Overview for RETL destinations, Storage destinations, and Engage Audience Syncs currently in development" +> This means that Segment is actively developing Delivery Overview features for RETL destinations, Storage destinations, and Engage Audience syncs. Some functionality may change before Delivery Overview for these integrations becomes generally available. +> +> Delivery Overview is generally available for streaming connections (cloud-streaming sources and cloud-streaming destinations). +> All users of Delivery Overview have access to the Event Delivery tab, and can configure delivery alerts for their destinations. + +## Key features + +Delivery Overview has three core features: +- [Pipeline view](#pipeline-view): a visual overview of each step your data takes during the delivery process +- [Breakdown table](#breakdown-table): contains more detail about the events that were processed at each pipeline step +- [Discard table](#discard-table): contains details about the events that failed or were filtered out of your process and allows you to inspect samples of them + +You can refine these tables using the time picker and the metric toggle, located under the destination header. With the time picker, you can specify a time period (last 10 minutes, 1 hour, 24 hours, 7 days, 2 weeks, or a custom date range over the last two weeks) for which you'd like to see data. With the metric toggle, you can switch between seeing metrics represented as percentages (for example, *85% of events* or *a 133% increase in events*) or as counts (*13 events* or *an increase of 145 events*.) Delivery Overview shows percentages by default. + +### Pipeline view +The pipeline view provides insights into each step your data is processed by enroute to the destination, with an emphasis on the steps where data can be discarded due to errors or your filter preferences. Each step provides details into counts, change rates, and event details (like the associated Event Type or Event Names), and the discard steps (Failed on ingest, Filtered at source, Filtered at destination, & Failed delivery) provide you with the reasons events were dropped before reaching the destination. Discard steps also include how to control or alter that outcome, when possible. The pipeline view also shows a label between the Filtered at destination and Failed delivery steps indicating how many events are currently pending retry. + +The pipeline view shows the following steps: + +- **Successfully received**: Events that Segment ingested from your source +- **Failed on ingest**: Events that Segment received, but were dropped due to internal data validation rules +- **Filtered at source**: Events that were discarded due to schema settings or [Protocols](/docs/protocols/) Tracking Plans +- **Filtered at destination**: Events that were discarded due to [Destination Filters](/docs/guides/filtering-data/#destination-filters), [filtering in the Integrations object](/docs/guides/filtering-data/#filtering-with-the-integrations-object), [Destination Insert functions](/docs/connections/functions/insert-functions/), or [per source schema integration filters](/docs/guides/filtering-data/#per-source-schema-integrations-filters). [Actions destinations](/docs/connections/destinations/actions/) also have a filtering capability: for example, if your Action is set to only send Identify events, all other event types will be filtered out. Actions destinations with incomplete triggers or disabled mappings are filtered out at this step. [Consent Management](/docs/privacy/consent-management/) users also see events discarded due to consent preferences. +- **Failed delivery**: Events that have been discarded due to errors or unmet destination requirements +- **Successful delivery**: Events that were successfully delivered to the destination + +Actions destinations also include a mapping dropdown, which allows you to select a [mapping](/docs/connections/destinations/actions/#customize-mappings) to filter the events in the Filtered at destination, Failed delivery and Successful delivery pipeline steps. The following image shows an Actions destination filtered to include only Track Page View events in the last three pipeline steps: + +![A screenshot of the Delivery Overview tab for an Actions destination, with the Track Page View mapping selected.](images/delivery-overview-actions-destination.jpeg) + +### Breakdown table +The breakdown table provides you with greater detail about the selected events. + +To open the breakdown table, select either the first step in the pipeline view (Successfully received,) the last step in the pipeline view (Successful delivery,) or select a discard step and then click on a discard reason. + +The breakdown table displays the following details: +- **Event type**: The Segment spec event type (Track call vs. Identify call, for example) +- **Event name**: The event name, provided by you or the source (*not available for inspection at all steps*) +- **App version**: The app/release version, provided by you or the source (*not available for inspection at all steps*) +- **Event count**: How many of each event either successfully made it through this pipeline step (in the case of the first or last steps in the pipeline view) or were filtered out (if you access it from a discard table) +- **% Change**: Insight into how the event counts differ from the last comparable time range as a percentage1 + +1: *Segment calculates the related change percentage by subtracting the percent of events impacted in the previous time period from the percent of impacted events in the current time period. For example, if last week 15% of your events were filtered at a source, but this week, 22% of your events were filtered at a source, you would have a related change percentage of 7%.* + +### Discard table +The discard table provides you with greater detail about the events that failed to deliver or were filtered out of your sources and destinations. + +To open the discard table, click on one of the discard steps. If you click on a row in the discard table, you can see the breakdown table for the discarded events. + +The discard table displays the following details: + +- **Discard reason**: Any relevant error code, message, or description associated with the event's failure. When possible, Delivery Overview links to any troubleshooting information you can use to get your events up and running again. Clicking on a discard reason brings you to the [breakdown table](#breakdown-table,) where you can see more detail about discarded events. For more context about discard reasons, see the [Troubleshooting](#troubleshooting) documentation. +- **Details & Samples**: View up to ten samples over the selected time range. Examine the error message and reason for the error or discard and inspect the payloads involved with the attempted transaction (*not available for inspection at all steps*) +- **Event count**: How many of each event were discarded in this pipeline step +- **% Change**: Insight into how the event counts differ from the last comparable time range as a percentage1 + +1: *Segment calculates the related change percentage by subtracting the percent of events impacted in the previous time period from the percent of impacted events in the current time period. For example, if last week 15% of your events were filtered at a source, but this week, 22% of your events were filtered at a source, you would have a related change percentage of 7%.* + +## When should I use Delivery Overview? +Delivery Overview is useful to diagnose delivery errors in the following scenarios: +- **When setting up a destination, tracking plan, or filter for the first time**: With Delivery Overview, you can verify that the data you're sending to a new destination, a new tracking plan, or a new filter arrives in your destination as expected. +- **When data is missing from your destination**: The pipeline view can help you see where your data is getting "stuck" on the way to your destination, which can help you quickly diagnose and address problems in your data pipeline. +- **When emission or delivery volume fluctuates out of expected norms**: Delivery Overview will highlight where the largest rate change(s) occurred and what events were associated with the change. + +> info "Delivery Overview in Engage Destinations" +> Because Engage uses sources for multiple purposes, you can expect to see `filtered at destination` events with the integrations object in destinations linked to Engage. Engage uses the integrations object to route events to destinations you've added to your audiences, traits, and journey steps. As a result, some events aren't meant to be delivered by the destination, so the integrations object filters them. + +## Where do I find Delivery Overview? +To view the Delivery Overview page: +1. Sign into Segment. +2. From the homepage, navigate to **Connection** > **Destinations** and click on the destination you'd like to investigate. +3. Select the **Delivery Overview** tab from the destination header. + +## How do I use Delivery Overview? +To use Delivery Overview: + +1. Navigate to the destination you'd like to review, and select **Delivery Overview** from the destination header. +2. On the **Delivery Overview** tab, select a time period from the time picker. The time picker reflects data in the user's local time.
    ___Optional___: *Turn the metric toggle off if you'd like to see the quantity of events as counts instead of percentages. Delivery Overview shows percentages by default.* +3. Select a success or discard step to view additional context about the events that passed through that step. + +## How does Delivery Overview differ from other Segment monitoring and observability tools? +With Source Debugger or Event Delivery, you can only verify that events are successfully making it from your source or to your destination. If events fail, you have to troubleshoot to see where in the pipeline your events are getting stuck. With Event Tester, you can verify that your event makes it from your source to your destination, but if the results aren't what you expected, you're stuck troubleshooting your source, filters, tracking plans, and destinations. + +With Delivery Overview, you can verify that your source receives your events, that any filters and tracking plans work as expected, and that events successfully make it to your destination. Any errors or unexpected behavior can be identified using the pipeline view, leading to quicker resolution. + +## How can I configure alerts? + +You can use the Event Delivery alerting features (Delivery Alerts) by selecting the **Alerts** tab in the destination header. Once you enable alerts, if the successful delivery rate of all events is less than the threshold percentage in the last 24 hours, you'll be notified through in-app notification and/or workspace email. + +Note that this is dependent on your [notification settings](/docs/segment-app/#segment-settings). For example, if the threshold is set to 99%, then you'll be notified each time less than 100% of events fail. + +You can also use Connections Alerting, a feature that allows Segment users to receive in-app, email, and Slack notifications related to the performance and throughput of an event-streaming connection. + +Connections Alerting allows you to create two different alerts: +- **Source volume alerts**: These alerts notify you if your source ingests an abnormally small or large amount of data. For example, if you set a change percentage of 4%, you would be notified when your source ingests less than 96% or more than 104% of the typical event volume. +- **Successful delivery rate alerts**: These alerts notify you if your destination's successful delivery rate falls outside of a percentage that you set. For example, if you set a percentage of 99%, you would be notified if you destination had a successful delivery rate of 98% or below. + +## How "fresh" is the data in Delivery Overview? +The data in Delivery Overview has an expected latency of approximately 30 seconds after event ingestion, but this may vary, depending on the features you’ve enabled in your workspace and spikes in volume. Segment delays the data visible in the Delivery Overview UI by 5 minutes to allow for more precise metric correlation. Segment does not impose the 5 minute delay if you access data using the Public API. + +## Why is the Delivery Overview page only available for cloud-mode destinations? +Similar to Segment's [Event Delivery](/docs/connections/event-delivery/) feature, the Delivery Overview page is only available for server-side integrations (also known as cloud-mode destinations). You won't be able to use the Delivery Overview page for client side integrations (also known as device-mode destinations) because device-mode data is sent directly to the destination tool's API. In order to report on deliverability, data must be sent to destinations using a server-side connection. + +## Troubleshooting + +The Delivery Overview pipeline steps Failed on Ingest, Filtered at Source, Filtered at Destination, and Failed Delivery display a [discard table](#discard-table) with information about why your events failed or were discarded. + +This table provides a list of all possible discard reasons available at each pipeline step. + +{% include content/delivery-overview-discards.html %} + \ No newline at end of file diff --git a/src/connections/destinations/actions.md b/src/connections/destinations/actions.md index b77f0a9ef3..6681fb62b6 100644 --- a/src/connections/destinations/actions.md +++ b/src/connections/destinations/actions.md @@ -1,18 +1,14 @@ --- title: Destination Actions +plan: dest-actions --- -{% include content/plan-grid.md name="dest-actions" %} - The Destination Actions framework improves on classic destinations by enabling you to see and control how Segment sends the event data it receives from your sources, to actions-based destinations. Each Action in a destination lists the event data it requires, and the event data that is optional. You can also choose which event types, event names, or event property values trigger an Action. These Triggers and mappings make it possible to send different versions of the Action, depending on the context from which it is triggered. Each Actions-framework Destination you see in the Segment catalog represents a feature or capability of the destination which can consume data from your Segment source. The Action clearly lists which data from the events it requires, and which data is optional. For example, Amplitude requires that you always send a `LogEvent` , or Slack always requires a `PostMessage`. Each Action also includes a default mapping which you can modify. -{% include content/ajs-upgrade.md %} - - ## Benefits of Destination Actions - **Easier setup**: Users see fewer initial settings which can decrease the time spent configuring the destination. @@ -70,9 +66,6 @@ To set up a new Actions-framework destination for the first time: ## Migrate a classic destination to an actions-based destination -{% include content/ajs-upgrade.md %} - - Moving from a classic destination to an actions-based destination is a manual process. Segment recommends that you follow the procedure below: 1. Create the actions-based destination with your development or test source. @@ -82,6 +75,69 @@ Moving from a classic destination to an actions-based destination is a manual pr 5. Verify that data is flowing from the development or test source to the partner tool. 6. Repeat the steps above with your production source. +### Migrate your destination filters from the classic destination to the actions destination + +> warning "" +> You can only migrate your destination filters using the Public API if you're on the business tier plan. This functionality isn't available in the Segment app. + +To migrate your destination filters to your actions destination from the classic destination: +1. Send a request to the Public API endpoint. + - Use [List Filters from Destination](https://docs.segmentapis.com/tag/Destination-Filters#operation/listFiltersFromDestination){:target="_blank"} . The `destinationId` can be found in the URL while viewing the destination in your Segment workspace. +2. Grab the response and parse through the `data.filters` object. Each object returned inside the `data.filters` object is an individual filter associated with the specified destination. +4. Send individual `POST` requests to the Public API endpoint. + - Use [Create Filter for Destination](https://docs.segmentapis.com/tag/Destination-Filters/#operation/createFilterForDestination){:target="_blank"} , for each of the filters from step 2. + - Specify the Actions `destinationId`, found in the URL when viewing that destination. The body of the request is the individual filters from step 2. +6. If the bodies of those requests don't already include the field `"enabled": true`, make sure to enable each of those filters after you create them. + +### Migrate to an actions-based destination using Destination Filters +For a more comprehensive migration from a classic destination to an actions-based destination, follow the steps outlined below. This implementation strategy is only available for customers on a Segment Business Tier plan with access to [Destination Filters](/docs/connections/destinations/destination-filters/). By adding additional line of defense with Destination Filters, you remove the possibility of duplicate events or dropped events and ensure that events sent before/after a specified `received_at` timestamp are sent to each destination. + +This migration strategy involves configuring a destination filter on both the Classic destination and the Actions destination. Configure the classic destination filter to block events by the `received_at` field with a certain value, and the Actions destination to drop events until the `received_at` timestamp field reaches that same value. Destination Filters within the UI have a limitation where they cannot access any top-level fields, but this is not a limitation for [Destination Filters](https://docs.segmentapis.com/tag/Destination-Filters/){:target="_blank”} created by the [Public API](https://segment.com/docs/api/public-api/){:target="_blank”} using [FQL](https://segment.com/docs/api/public-api/fql/){:target="_blank”}. Because the `received_at` is a top-level field in the payload, you'll need to create a destination filter with the Public API and submit the request with that FQL information described below. + +By combining these Filters, Segment sends events through the Classic integration up until a specified time and then blocks events after that time. Then the Actions integration blocks events until that specified time, and only allows events beginning at that specified time. + +The following code samples show you how you can create filters for your destinations using the [Create Filter for Destination](https://docs.segmentapis.com/tag/Destination-Filters#operation/createFilterForDestination){:target="_blank”} Public API operation. + +#### Classic destination +_Endpoint_: `POST` `https://api.segmentapis.com/destination/classic_destination_id_from_url/filters` +``` +// JSON BODY : +{ + "sourceId": "add_source_id_here", + "destinationId": "classic_destination_id_from_url", + "title": "drop event after (timestamp) received_at > value April 4, 2023 19:55pm", + "description": "drop event after (timestamp) received_at > value April 4, 2023 19:55pm", + "if": "(received_at >= '2023-04-21T19:55:00.933Z')", + "actions": [ + { + "type":"DROP" + } + ], + "enabled": true +} +``` + +#### Actions destination +_Endpoint_: `POST` `https://api.segmentapis.com/destination/actions_destination_id_from_url/filters` +``` +// JSON BODY : +{ + "sourceId": "add_source_id_here", + "destinationId": "actions_destination_id_from_url", + "title": "drop event before (timestamp) received_at < value April 4, 2023 19:55pm", + "description": "drop event before (timestamp) received_at < value April 4, 2023 19:55pm", + "if": "(received_at < '2023-04-21T19:55:00.933Z')", + "actions": [ + { + "type":"DROP" + } + ], + "enabled": true +} +``` + +After configuring the Destination Filter on both the Classic and Actions destination, see each destination's Filters tab and enable the filters. After completing the migration, you can disable the Classic destination on the Settings page, and remove each of the filters from both destinations. + ## Edit a destination action You can add or remove, disable and re-enable, and rename individual actions from the Actions tab on the destination's information page in the Segment app. Click an individual action to edit it. @@ -89,6 +145,8 @@ From the edit screen you can change the action's name and mapping, and toggle it ![Screenshot of the Mappings table with several enabled mappings](images/actions-list.png) +When an Action is created, it's disabled by default, to ensure that it's only used after being fully configured. To begin sending data through an Action, enable it on the Actions page by selecting the toggle so that it appears blue. + ## Disable a destination action If you find that you need to stop an action from running, but don't want to delete it completely, you can click the action to select it, then click the toggle next to the action's name to disable it. This takes effect within minutes, and disables the action until you reenable it. @@ -119,11 +177,13 @@ If necessary, click **New Mapping** to create a new, blank action. 1. In the edit panel, define the [conditions](#conditions) under which the action should run. 2. Test those conditions to make sure that they correctly match an expected event. This step looks for events that match the criteria in the [debugger queue](/docs/connections/sources/debugger/), so you might need to Trigger some events with the expected criteria to test your conditions. You can skip the test step if needed, and re-try it at any time. -3. Next, set up the data mapping from the Segment format to the destination tool format. -4. Test the mapping with data from a sample event. - The edit panel shows you the mapping output in the format for the destination tool. You can change your mapping as needed and re-test. -5. When you're satisfied with the mapping, click **Save**. Segment returns you to the Mappings table. -6. In the Mappings table **Status** column, verify that the **Enabled** toggle is on for the mapping you just customized. +3. Select data models to [enrich your events](/docs/unify/linked-profiles/linked-events/) with. +4. Set up the data mapping from the Segment format to the destination tool format. +- You can click the Source field, then select the **Enrichments** tab to view and select Enrichments to use. +5. Test the mapping with data from a sample event. + The edit panel shows you the mapping output in the format for the destination tool. The **Select Object** option sends the entire object from the event, while the **Edit Object** option lets you map each individual property. You can change your mapping as needed and re-test. +6. When you're satisfied with the mapping, click **Save**. Segment returns you to the Mappings table. +7. In the Mappings table **Status** column, verify that the **Enabled** toggle is on for the mapping you just customized. > info "" @@ -133,7 +193,9 @@ If necessary, click **New Mapping** to create a new, blank action. The coalesce function takes a primary value and uses it if it is available. If the value isn't available, the function uses the fallback value instead. +### Replace function +The replace function allows you to replace a string, integer, or boolean with a new value. You have the option to replace up to two values within a single field. ### Conditions @@ -141,7 +203,7 @@ The coalesce function takes a primary value and uses it if it is available. If t > Self-service users can add a maximum of two conditions per Trigger. -The following type filters and operators are available to help you build conditions: +Mapping fields are case-sensitive. The following type filters and operators are available to help you build conditions: - **Event type** (`is`/`is not`). This allows you to filter by the [event types in the Segment Spec](/docs/connections/spec). - **Event name** (`is`, `is not`, `contains`, `does not contain`, `starts with`, `ends with`). Use these filters to find events that match a specific name, regardless of the event type. @@ -150,6 +212,10 @@ The following type filters and operators are available to help you build conditi You can specify nested properties using dot notation, for example `context.app.name`. If the property might appear in more than one format or location, you can use an ANY statement and add conditions for each of those formats. For example, you might filter for both `context.device.type = ios` as well as `context.os.name = "iPhone OS``"` The `does` `not exist` operator matches both a `null` value or a missing property. {% comment %} + +> info "Valid property and trait values" +> Property and trait names must begin with the characters: [a-z], [A-Z] or '_'. Property and trait names don't support special characters in the first character. If you save a property or trait with a special character in the first character, you'll get an Invalid Trigger error. + > info "Event property operators and supported data types" > Operators support matching on values with a **string** data type: > - `is`, `is not`, `contains`, `does not contain`, `starts with`, `ends with` @@ -172,7 +238,10 @@ The available operators depend on the property's data type: You can combine criteria in a single group using **ALL** or **ANY**. Use an ANY to “subscribe” to multiple conditions. Use ALL when you need to filter for very specific conditions. You can only create one group condition per destination action. You cannot created nested conditions. > info "Unsupported Special Characters" -> Mappings do not support the use of double quotes " or a tilde ~ in the trigger fields. +> Mappings do not support the use of double quotes " or a tilde ~ in the trigger fields. In mapping fields, the . character is not supported unless it's being used to access an object key. If a string has a . in it, that is not supported. + +> info "Limitations" +> Mapping fields don't support dot notation. For example, properties.amount.cost or properties_amount.cost aren't supported. > info "Destination Filters" > Destination filters are compatible with Destination Actions. Consider a Destination Filter when: @@ -181,12 +250,33 @@ You can combine criteria in a single group using **ALL** or **ANY**. Use an ANY > > If your use case does not match these criteria, you might benefit from using Mapping-level Triggers to match only certain events. -## FAQ & Troubleshooting +## FAQ and troubleshooting ### Validation error when using the Event Tester When you send an event with an actions destination Event Tester that doesn't match the trigger of any configured and enabled mappings, you'll see an error message that states, *You may not have any subscriptions that match this event.* To resolve the error, create a mapping with a trigger to handle the event being tested, or update the test event's payload to match the trigger of any existing mappings. +### Data not sending downstream + +If no mappings are enabled to trigger on an event that has been received from the connected source, the destination will not send any events. Ensure that at least one mapping has been configured and enabled in the destination mappings for an event that you would like to reach downstream. + +> info "" +> Events without mappings enabled to handle them display as being discarded due to "No matching mapping" in a destination's Delivery Overview. + ### Multiple mappings triggered by the same event When the same event triggers multiple mappings, a request will be generated for each mapping that's configured to trigger on an event. For example, for the *Subscription Updated* event, if two mappings are enabled and both have conditions defined to trigger on the *Subscription Updated* event, the two requests will be generated and sent to the destination for each *Subscription Updated* event. + +### Oauth "access token expired" message shown in Segment UI +Access Tokens that were generated from initial authorization, for example, when you connect a destination via Oauth, are always short-lived. Commonly, the token remains valid for 30 minutes to 1 hour. When Segment receives 401 error responses from the destination after a token has expired, it will automatically make another request to the destination for a new token and will then retry the event. Therefore, 401 responses are sometimes expected and do not indicate an event failure. There are three event flows when events are received and sent to a destination: + +- through source +- through event tester +- through actions tester in mapping screen + +The underlying systems for these flows have their own copy of the token, which can expire at different points in time. +Threfore, if you see a 401 error in a sample response, it is likely that you’ll also see another request was made after it, to ask the downstream destination for a new token. Then one more request was made to actually send the data in your payload to the downstream destination. + +### Is it possible to map a field from one event to another? + +Segment integrations process events through mappings individially. This means that no context is held that would allow you to map a value from one event to the field of a subsequent event. Each event itself must contain all of the data you'd like to send downstream in regards to it. For example, you cannot send `email` in on an Identify call and then access that same `email` field on a Track call that comes in later if that Track call doesn't also have `email` set on it. diff --git a/src/connections/destinations/add-destination.md b/src/connections/destinations/add-destination.md index f38593aaa2..a28a475d20 100644 --- a/src/connections/destinations/add-destination.md +++ b/src/connections/destinations/add-destination.md @@ -2,13 +2,17 @@ title: Sending Segment Data to Destinations --- -You've decided how to format your data, and collected it using [Segment Sources](/docs/connections/sources/). Now what do you do with it? You send the data to Destinations! +You've decided how to format your data, and collected it using [Segment Sources](/docs/connections/sources/). Now what do you do with it? You send the data to Destinations. Destinations are tools or services which can use the data sent from Segment to power analytics, marketing, customer outreach, and more. > info "" -> Each Segment Workspace has its own set of destinations, which are connected to the workspace's sources. When you add or modify a destination, make sure you're working with the correct workspace! +> Each Segment Workspace has its own set of destinations, which are connected to the workspace's sources. When you add or modify a destination, make sure you're working with the correct workspace. +> info "Healthcare and Life Sciences (HLS) customers can encrypt data flowing into their destinations" +> HLS customers with a HIPAA eligible workspace can encrypt data in fields marked as Yellow in the Privacy Portal before they flow into an event stream, cloud-mode destination. +> +> To learn more about data encryption, see the [HIPAA Eligible Segment documentation](/docs/privacy/hipaa-eligible-segment/#data-encryption). ## Adding a destination @@ -31,7 +35,7 @@ There are two ways to add a destination to your deployment: using the Segment we 8. Click the toggle at the top of the Settings page to enable the destination. > success "" -> If you have more than one instance of the same destination, you can click **Copy Settings From Other Destination** to save yourself time entering the settings values. +> If you have more than one instance of the same destination, you can click **Copy Settings From Other Destination** to save yourself time entering the settings values manually. #### Adding a destination to a specific Segment Source @@ -58,7 +62,7 @@ You can use the Segment Public API to add destinations to your workspace using t Adding a destination can have a few different effects, depending on which sources you set up to collect your data, and how you configured them. -#### Analytics.js +### Analytics.js If you are using [Segment's JavaScript library, Analytics.js](/docs/connections/sources/catalog/libraries/website/javascript/), then Segment handles any configuration changes you need for you. If you're using Analytics.js in cloud-mode, the library sends its tracking data to the Segment servers, which route it to your destinations. When you change which destinations you send data to, the Segment servers automatically add that destination to the distribution list. @@ -66,13 +70,13 @@ If you're using Analytics.js in device-mode, then Analytics.js serves as a wrapp You can enable device-mode for some destinations from the destination's Settings page in the Segment web app. You don't need to use the same mode for all destinations in a workspace; some can use device-mode, and some can use cloud-mode. -#### Mobile sources +### Mobile sources By default, Segment's [mobile sources](/docs/connections/sources/catalog/#mobile) send data to Segment in cloud-mode to help minimize the size of your apps. In cloud-mode the mobile source libraries forward the tracking data to the Segment servers, which route the data to the destinations. Since the Segment servers know which destinations you're using, you don't need to take any action to add destinations to mobile apps using cloud-mode. However, if the destination you're adding has features that run on the user's device, you might need to update the app to package that destination's SDK with the library. Some destinations require that you package the SDK, and some only offer it -#### Server sources +### Server sources Segment's [server sources](/docs/connections/sources/catalog/#server) run on your internal app code, and never have access to the user's device. They run in cloud-mode only, and forward their tracking calls to the Segment servers, which forward the data to any destinations you enabled. @@ -98,6 +102,19 @@ For example, you might set up a single Segment source to send data both to separ You can also connect multiple instances of a destination to help you smoothly migrate from one configuration to another. By sending each version the same data, you can check and validate the new configuration without interrupting use of the old one. +However, there are a few considerations: + +Device-mode destinations do not support connecting multiple instances of the destination to the same source. If you try to a connect an additional instance of a device-mode destination to your source, the option to add a second instance does not appear. + +Mobile sources, and the legacy Project source, can connect to multiple instances of destinations that operate only in cloud-mode. Mobile and Project sources cannot connect to multiple instances of destinations that operate in both cloud-mode and device-mode. Non-mobile sources can only connect to _one_ device-mode instance of a destination. + +Multi-instance support is not available for most hybrid Actions destinations or Web mode Actions destinations. + +Segment does not support connecting a single source to multiple instances of a [Data Lakes](/docs/connections/storage/data-lakes/) destination. + +> warning "Non-mobile sources can only connect to _one_ device-mode instance of a destination" +> You cannot connect a source to more than one instance of a destination that operates only in device-mode. For more information about device-mode restrictions, see the [Sending Segment data to Destinations](/docs/connections/destinations/add-destination/#connecting-one-source-to-multiple-instances-of-a-destination:~:text=Multi%2Dinstance%20destinations-,and,-Device%2Dmode) documentation. + > success "" > If your organization is on a Segment Business tier plan, you can use [Replay](/docs/guides/what-is-replay/) to send historical data to new instances of a destination. @@ -114,6 +131,8 @@ Some destinations do not support having multiple instances connected to the same You can create unique destination filters for each destination instance connected to the same source. +> info "" +> Some destinations don't support multiple instances connected to the same source. If this is the case, you won't see the option to add a second instance of that destination. ### Connect multiple sources to one instance of a destination diff --git a/src/connections/destinations/catalog/1flow-analytics/index.md b/src/connections/destinations/catalog/1flow-analytics/index.md index e108e006db..a48bc5ee5e 100644 --- a/src/connections/destinations/catalog/1flow-analytics/index.md +++ b/src/connections/destinations/catalog/1flow-analytics/index.md @@ -5,7 +5,7 @@ hidden: true published: false --- -[1Flow](https://1flow.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a leading in-app user survey and messaging platform for Mobile app and SaaS businesses. +[1Flow](https://1flow.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a leading in-app user survey and messaging platform for Mobile app and SaaS businesses. Using 1Flow, you can reach users _in-the-moment_ while they are interacting with your website or application, to collect highly contextual user insights that help you improve your product offering and customer experience. @@ -17,7 +17,7 @@ This destination is maintained by 1Flow. For any issues with the destination, [c 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **1Flow** in the Destinations Catalog, and select the **1Flow** destination. 3. Choose which Source should send data to the 1Flow destination. -4. Go to the [1Flow dashboard](https://dashboard.1flow.app/){:target="\_blank"} and find the **API Key** in Project Settings. +4. Go to the [1Flow dashboard](https://dashboard.1flow.app/){:target="_blank"} and find the **API Key** in Project Settings. 5. Enter the **API Key** in the 1Flow destination settings in Segment. ## Supported methods diff --git a/src/connections/destinations/catalog/1flow-mobile-plugin/index.md b/src/connections/destinations/catalog/1flow-mobile-plugin/index.md new file mode 100644 index 0000000000..3d5f58188a --- /dev/null +++ b/src/connections/destinations/catalog/1flow-mobile-plugin/index.md @@ -0,0 +1,133 @@ +--- +title: 1Flow Mobile Plugin Destination +id: 64dd07c1fed86b6866cd93f5 +beta: true +--- + +[1Flow](https://1flow.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a leading in-app user survey and messaging platform for Mobile app and SaaS businesses. + +Using 1Flow, you can reach users _in-the-moment_ while they are interacting with your website or application, to collect highly contextual user insights that help you improve your product offering and customer experience + +The 1Flow Mobile Plugin Destination is open-source and available on GitHub. You can view these repositories here: + +- [iOS](https://github.com/1Flow-Inc/segment-1flow-ios.git){:target="_blank"} +- [Android](https://github.com/1Flow-Inc/segment-1flow-android.git){:target="_blank"} + +This destination is maintained by 1Flow. For any issues with the destination, [contact Support team](mailto:support@1flow.app). + +## Getting started + +1. From the Segment web app, click **Catalog**, then search for **1Flow Mobile Plugin**. +2. Click **Add Destination**. +4. Select an existing Source to connect to 1Flow Mobile Plugin. +5. Go to 1flow.ai -> Settings -> Project Settings, copy the 1Flow project key, and paste it into the Destination Settings in Segment. +6. Depending on the mobile source you’ve selected, include 1Flow's library by adding the following lines to your dependency configuration. + +## iOS + +### Step 1: Add Segment1Flow Package using Swift Package Manager + +In the Xcode File menu, click Add Packages. You'll see a dialog where you can search for Swift packages. In the search field, enter the URL to this repo. + +- `https://github.com/1Flow-Inc/segment-1flow-ios` + +You'll then have the option to pin to a version, or specific branch, as well as which project in your workspace to add it to. Once you've made your selections, click the Add Package button. + +### Step 2: Initialize Segment and add 1Fow Destination + +``` +import Segment1Flow +... +let config = Configuration(writeKey: "YOUR_WRITE_KEY_HERE") +let analytics = Analytics(configuration: config) +analytics.add(plugin: OneFlowDestination()) +``` + +## Android + +### Step 1: Install Segment1Flow Package + +- If gradle version is 6.5 or lower, include the below repository in your project's build.gradle file: + +``` +allprojects{ + repositories{ + google() + jcenter() + maven{url 'https://jitpack.io'} + } +} +``` + +- If gradle version is higher than 6.5, add the below code in settings.gradle. + +``` +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven{url 'https://jitpack.io'} + } +} +``` + +- Add dependency in your app's build.gradle file: + +``` +compileSdkVersion 34 +.... +defaultConfig { + .... + minSdkVersion 21 + } +dependencies { + .... + + implementation 'com.segment.analytics.android:analytics:4.11.3' + implementation "com.github.1Flow-Inc:segment-1flow-android:2023.09.26" +} +``` + +### Step 2: Initialize Segment and add 1Flow Destination +``` +Analytics analytics = new Analytics.Builder(context, "YOUR_WRITE_KEY_HERE") + .use(OneFlowIntegration.FACTORY) + ... + .build(); + ... + Analytics.setSingletonInstance(analytics); + +``` + +## Supported methods + +### Identify +If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: + +```swift +analytics.identify(userId: "peter@example.com", traits: [ + "name": "Peter Gibbons", + "email": "peter@example.com", + "mobile": 1234567890 +]) +``` +When you call identify method of segment, it will be equivalent to `logUser` of 1Flow. `userId` will be `userID` and `traits` will be `userDetails`. + +### Track +If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: + +```swift +analytics.track(name: "ButtonClicked") +``` +Any value passed in `name`, will be eventName and if you have passed any event property, then it will be event `parameters`. + +### Screen + +Send [Screen](/docs/connections/spec/screen) calls to record which mobile app screens users have viewed. For example: + +```swift +analytics.screen(title: "Home") +``` + +Segment sends Screen calls to 1Flow as a `screen_[name]` event (or `screen_view` if a screen name isn't provided). diff --git a/src/connections/destinations/catalog/1flow-web-actions/index.md b/src/connections/destinations/catalog/1flow-web-actions/index.md new file mode 100644 index 0000000000..3d8000dd5e --- /dev/null +++ b/src/connections/destinations/catalog/1flow-web-actions/index.md @@ -0,0 +1,7 @@ +--- +title: '1Flow Web (Actions) Destination' +hidden: true +id: 656773f0bd79a3676ab2733d +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/1flow/index.md b/src/connections/destinations/catalog/1flow/index.md index 9c132ec9ad..508e5bfd85 100644 --- a/src/connections/destinations/catalog/1flow/index.md +++ b/src/connections/destinations/catalog/1flow/index.md @@ -5,7 +5,7 @@ redirect_from: - '/connections/destinations/catalog/1flow-analytics' --- -[1Flow](https://1flow.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a leading in-app user survey and messaging platform for Mobile app and SaaS businesses. +[1Flow](https://1flow.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a leading in-app user survey and messaging platform for Mobile app and SaaS businesses. Using 1Flow, you can reach users _in-the-moment_ while they are interacting with your website or application, to collect highly contextual user insights that help you improve your product offering and customer experience. @@ -16,7 +16,7 @@ This destination is maintained by 1Flow. For any issues with the destination, [c 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **1Flow** in the Destinations Catalog, and select the **1Flow** destination. 3. Choose which Source should send data to the 1Flow destination. -4. Go to the [1Flow dashboard](https://dashboard.1flow.app/){:target="\_blank"} and find the **API Key** in Project Settings. +4. Go to the [1Flow dashboard](https://dashboard.1flow.app/){:target="_blank"} and find the **API Key** in Project Settings. 5. Enter the **API Key** in the 1Flow destination settings in Segment. ## Supported methods diff --git a/src/connections/destinations/catalog/2mee/index.md b/src/connections/destinations/catalog/2mee/index.md index dbdb52227e..03706fdde7 100644 --- a/src/connections/destinations/catalog/2mee/index.md +++ b/src/connections/destinations/catalog/2mee/index.md @@ -3,19 +3,19 @@ title: 2mee Destination rewrite: true id: 60b5d0a01f3726b85dc05aab --- -[2mee](https://2mee.com ) is a Human Hologram platform that automatically cuts the person out from the background, removing the visual clutter, and places them in the familiar context of your phone or website so that they dominate the screen. +[2mee](https://2mee.com){:target="_blank”} is a Human Hologram platform that automatically cuts the person out from the background, removing the visual clutter, and places them in the familiar context of your phone or website so that they dominate the screen. This destination is maintained by 2mee. For any issues with the destination, [contact the 2mee Support team](mailto:support@2mee.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **2mee** in the Destinations Catalog and it. 3. Click **Configure 2mee**. 4. Choose which Source should send data to the 2mee destination. -5. Go to 2mee and copy the [API Key and Application ID](https://docs.2mee.com/documentation/segment) from the 2mee Dashboard. +5. Go to 2mee and copy the [API Key and Application ID](https://docs.2mee.com/documentation/segment){:target="_blank”} from the 2mee Dashboard. 6. Go back to Segment and paste the API Key and Application ID you just copied in the 2mee destination settings. Make sure to paste the API Key in this format: `Bearer `. ## Supported methods @@ -41,7 +41,7 @@ Identify calls with a `userId` not mapped to a device fails with a `400` error c Send [Track](/docs/connections/spec/track/) calls to track the actions your users perform. -Configure the HoloCapsule setting in the [2mee](https://go.2mee.com/) app. +Configure the HoloCapsule setting in the [2mee](https://go.2mee.com/){:target="_blank”} app. Segment requires the `userId`. Track calls without a `userId` or with a `userId` not mapped to a device fail with a `400` code. diff --git a/src/connections/destinations/catalog/aampe/index.md b/src/connections/destinations/catalog/aampe/index.md index cb88137ad0..7907db07c3 100644 --- a/src/connections/destinations/catalog/aampe/index.md +++ b/src/connections/destinations/catalog/aampe/index.md @@ -3,18 +3,18 @@ title: Aampe Destination id: 6188d844be5cf0e3b59189d2 --- -[Aampe](https://aampe.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) uses automated, rapid learning to personalize notifications, and continuously learns what messages bring value to your customer. +[Aampe](https://aampe.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} uses automated, rapid learning to personalize notifications, and continuously learns what messages bring value to your customer. This destination is maintained by Aampe. For any issues with the destination, [contact the Aampe Support team](mailto:support@aampe.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Aampe" in the Destinations Catalog, and select the "Aampe" destination. 3. Choose which Source should send data to the "Aampe" destination. -4. Go to the [Data Integrations page](https://compose.aampe.com/configure/integrations) on Aampe Composer, click on "Add Integration", select "Segment" and click "Next". +4. Go to the [Data Integrations page](https://compose.aampe.com/configure/integrations){:target="_blank”} on Aampe Composer, click on "Add Integration", select "Segment" and click "Next". 5. Copy the Segment API Key from the resulting page. 6. Enter this key in "API Key" in the "Aampe" destination settings in Segment. @@ -24,7 +24,7 @@ Aampe supports the following methods, as specified in the [Segment Spec](/docs/c ### Track -Segment sends [Track](/docs/connections/spec/track) calls to Aampe as a `track` event. These are used by Aampe to display engagement activity and reports in the [Aampe Composer](https://compose.aampe.com). You can use these to configure goals that are used for monitoring and creating campaigns. It may take up to 24 hours for events to show up in the Aampe Composer. +Segment sends [Track](/docs/connections/spec/track) calls to Aampe as a `track` event. These are used by Aampe to display engagement activity and reports in the [Aampe Composer](https://compose.aampe.com){:target="_blank”}. You can use these to configure goals that are used for monitoring and creating campaigns. It may take up to 24 hours for events to show up in the Aampe Composer. ```js analytics.track("Login Button Clicked"); diff --git a/src/connections/destinations/catalog/ab-smartly/index.md b/src/connections/destinations/catalog/ab-smartly/index.md index 69ab594c63..fc0bd62b8d 100644 --- a/src/connections/destinations/catalog/ab-smartly/index.md +++ b/src/connections/destinations/catalog/ab-smartly/index.md @@ -19,12 +19,12 @@ Segment provides specific implementation details for A/B Smartly in the sections ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "A/B Smartly" in the Destinations Catalog, and select the "A/B Smartly" destination. 3. Choose which Source should send data to the "A/B Smartly" destination. -4. Go to the A/B Smartly dashboard(https://your-org-name.absmartly.com/apikey/list), find and copy the "API key" that you created for segment. +4. Go to the A/B Smartly dashboard(https://your-org-name.absmartly.com/apikey/list){:target="_blank”}, find and copy the "API key" that you created for segment. 5. Enter the "API Key" in the "A/B Smartly" destination settings in Segment. 6. If the integration requests for an Application name go to your A/B Smartly dashboard (`https://your-org-name.absmartly.com/application/create`) and create an Application named "Segment", or whatever you would like to call it. Use that name in the Application field of the integration settings. 7. Add also your A/B Smartly Collector endpoint. It's the same endpoint that you are using in all your A/B Smartly SDKs. diff --git a/src/connections/destinations/catalog/ab-tasty-client-side/index.md b/src/connections/destinations/catalog/ab-tasty-client-side/index.md index baeef06db8..9e6650338a 100644 --- a/src/connections/destinations/catalog/ab-tasty-client-side/index.md +++ b/src/connections/destinations/catalog/ab-tasty-client-side/index.md @@ -13,7 +13,7 @@ AB Tasty maintains this destination. For any issues with the destination, [conta ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **AB Tasty** in the Destinations Catalog, and select the **AB Tasty** destination. diff --git a/src/connections/destinations/catalog/actable-predictive/index.md b/src/connections/destinations/catalog/actable-predictive/index.md index 1117f93698..9bd0d14706 100644 --- a/src/connections/destinations/catalog/actable-predictive/index.md +++ b/src/connections/destinations/catalog/actable-predictive/index.md @@ -10,8 +10,6 @@ private: true [Actable Predictive](https://actable.com/predictive-suite){:target="_blank"} is a standalone marketing-specific customer prediction tool. It trains models on your customer’s behavioral data, and provides regular automated scoring of new data against those models. The scoring output is tailored to drive higher levels of customer engagement, lower levels of churn, and increased incidence of purchases. -{% include content/ajs-upgrade.md %} - ## Benefits of Actable Predictive (Actions) Actable Predictive (Actions) provides the following benefits: diff --git a/src/connections/destinations/catalog/action-rokt-audiences/index.md b/src/connections/destinations/catalog/action-rokt-audiences/index.md new file mode 100644 index 0000000000..90ca64b9b6 --- /dev/null +++ b/src/connections/destinations/catalog/action-rokt-audiences/index.md @@ -0,0 +1,72 @@ +--- +title: Rokt Audiences (Actions) Destination +hide-personas-partial: true +hide-boilerplate: true +hide-dossier: false +private: true +hidden: true +beta: true +id: 643697130067c2f408ff28ca +redirect_from: + - "/connections/destinations/catalog/actions-rokt-audiences" +--- +{% include content/plan-grid.md name="actions" %} + +Rokt Audiences (Actions) destination enables advertisers to send Segment Persona Audiences to Rokt using Rokt's Audience API. + +By using Segment's Persona Audiences with Rokt, you can increase the efficiency of your ad campaigns through suppression and targeting of existing or new customers. + +## Benefits of Rokt Audiences (Actions) + +Benefits of the Rokt Audiences (Actions) destination include: +- **Improved email matching**: This integration creates a direct connection between Segment and Rokt for a 100% match rate of email identifiers. + +- **Easy setup**: This destination only requires your Advertiser API key. + +- **Batching events and support for large audiences**: This destination supports batching which enables Rokt to receive large audiences without discrepancies. + +- **Near real-time audience updates**: The actions destination helps Rokt receive real-time events and add or remove users from Rokt audiences appropriately. + +## Getting started + +### Prerequisites: + +Before connecting to the Rokt Audiences destination, you must have an account with Rokt and receive your API key. + +### Add the destination: +To add the Rokt Audiences (Actions) destination: + +1. From your Segment workspace, go to **Connections > Catalog** and select the **Destinations** tab of the catalog. + +2. Search for **Rokt Audiences (Actions)** and select the destination. + +3. Click **Add destination**. + +4. Select the space in Engage to use as the Source as this destination only supports sending Engage Audiences to Rokt. + +5. On the **Settings** tab, enter the name of your destination. For example, `Rokt audiences – `. + +6. Enter your Rokt **API key**. + +7. Click **Save Changes**. + +8. In the **Mappings** tab, click **+ New Mapping** and select **Add Users to Audience**. Don't change any defaults. + +9. Under the **Configure actions fields**, set **Enable Batching** to *Yes* and click **Save**. + +7. Repeat steps 8 and 9 for **Remove Users from Audience**. + +8. **Enable** both mappings. + +9. Go to the **Settings** tab and select the toggle to **Enable** the destination. + +10. Select your space, and navigate to **Engage > Audiences**. Select the source audience that you want to send to your Rokt Audiences (Actions) destination. + +11. Click **Add Destinations** and select the Rokt Audience (Actions) destination you created. In the settings that appear on the right-hand side, toggle the **Send Track** option on and **Send Identify**. Click **Save**. + +Your Rokt Audiences (Actions) destination is now ready to receive audiences, and your Persona audiences are now accessible in your Rokt Advertiser dashboard. Keep in mind that it can take 12-24 hours for the first sync when the number of email identifies are in the millions. + +> warning "" +> You can only connect **one** Engage audience to a single instance of the Rokt Audience (Actions) destination. If you have multiple audiences, repeat the above process to create a new Rokt Audience (Actions) destination and connect the audience to a new destination each time. + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-1flow/index.md b/src/connections/destinations/catalog/actions-1flow/index.md new file mode 100644 index 0000000000..d28826117d --- /dev/null +++ b/src/connections/destinations/catalog/actions-1flow/index.md @@ -0,0 +1,50 @@ +--- +title: 1Flow Web (Actions) Destination +id: 656773f0bd79a3676ab2733d +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[1Flow](https://1flow.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a leading in-app user survey and messaging platform for Mobile app and SaaS businesses. + + +1Flow is an easy-to-use, yet powerful in-app survey and messaging software. Using 1Flow, you can reach users in-the-moment while they are interacting with your website or mobile app, to collect highly contextual user insights that help you improve your product offering and customer experience. + +When you use the 1Flow Web (Actions) Destination, Segment loads the [1Flow SDK](https://1flow.ai/docs/install-sdk/javascript){:target="_blank"} for you. The 1Flow library enables you to track and identify user events on your website and interact with the 1Flow messenger window. + + +## Getting started + +1. From Segment, navigate to **Connections > Catalog**, then select **Destinations**. +2. Search for and select **1Flow Web (Actions) Destination**. +3. Select the web source that will send data to 1Flow web (Actions) and follow the steps to name your destination. The web source chosen must use [Analytics.js 2.0](/docs/connections/source/catalog/libraries/website/javascript). +4. On the **Settings** tab, input your 1Flow **PROJECT API KEY** and other destinations settings. +5. Follow the step in the Destinations Actions docs to [customizing mappings](/docs/connections/destinations/action/#customizing-mappings). +6. Enable the destination and configured mappings. + +{% include components/actions-fields.html %} + +## Supported methods + +### Identify + +The 1Flow destination will automatically ingest a User ID and any values sent over your Identify spec as [traits](https://docs.1flow.ai/install-sdk/javascript#de21ec0a453d443b88ca4bc1b12dc6bf){:target="_blank"}, as long as session capture is enabled in 1Flow. + +When you call Segment's Identify method, it will be equivalent to `logUser` of 1Flow. Identify calls that do not have a User ID value are not sent to 1Flow. +- Segment's `userId` is `userID` in 1Flow +- Segment's `traits` is `userDetails` in 1Flow + +### Track + +The 1Flow destination automatically ingests any user actions tracked over your Track spec as [events](https://docs.1flow.ai/install-sdk/javascript#d19201d97efa4ea4b81be6a351709332){:target="_blank"}, as long as session capture is enabled in 1Flow. + + +## Troubleshooting + +### Requests to 1Flow return a 404 response + +If you are seeing 404 responses in your browser's network tab, you've likely encountered one of two issues: + +- You set the wrong App ID on the 1Flow Actions (Web) destination settings page. +- You set the wrong Regional Data Hosting value on the 1Flow Actions (Web) destination settings page. 1Flow gates regional endpoints by plan level, so you may not have access to EU data hosting. \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-absmartly/index.md b/src/connections/destinations/catalog/actions-absmartly/index.md new file mode 100644 index 0000000000..b318e27a96 --- /dev/null +++ b/src/connections/destinations/catalog/actions-absmartly/index.md @@ -0,0 +1,170 @@ +--- +title: ABsmartly (Actions) Destination +id: 64f703d1f6e9aa0a283ae3e2 +--- + +{% include content/plan-grid.md name="actions" %} + +[ABsmartly](https://absmartly.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} provides an on-premise, full-stack experimentation platform for engineering and product teams that do continuous experimentation embedded into their development process. ABsmartly's real-time analytics help engineering and product teams ensure that new features will improve the customer experience without breaking or degrading performance and/or business metrics. + +This destination is maintained by ABsmartly. For any issues with the destination, [contact ABsmartly's Support](mailto:support@absmartly.com). + +## Benefits of ABsmartly (Actions) vs ABsmartly Classic + +- **Easier Setup**: Actions-based destinations are easier to configure with clear default settings, letting you quickly get started. +- **Control and clearer mapping**: Actions-based destinations enable you to define the mapping between the data Segment receives from your source and the data Segment sends to ABsmartly. + +## Getting started + +1. From the Segment web app, click **Catalog**. +2. Search for "ABsmartly" in the Catalog, select **ABsmartly (Actions)**, and choose which of your sources to connect the destination to. +3. Add the following Connection Settings: + - **Collector Endpoint**: Your ABsmartly Collector REST Endpoint. Usually `https://.absmartly.io/v1` + - **API Key**: An existing API Key. Created under Settings > API Keys in the ABsmartly Web Console. + - **Environment**: The environment where the events are originated matching an existing environment in ABsmartly. Created under Settings > Environments in the ABsmartly Web Console. +5. Enable the _Track Calls_ mapping to send events to ABsmartly. + +{% include components/actions-fields.html %} + +> info "" +> If you need support setting things up, you can contact the ABsmartly support team on Slack or [via email](mailto:support@absmartly.com). + +# Sending exposures to Segment + +It can be useful to send experiment exposures to Segment for visibility from +other destinations. The Segment Spec includes the [Experiment Viewed semantic event](/docs/connections/spec/ab-testing/) +for this purpose. + +> info "" +> By default, the _Track Calls_ mapping will filter and not send any events with the name `Experiment Viewed` to ABsmartly. + +You can [install a custom event logger](https://docs.absmartly.com/docs/SDK-Documentation/getting-started#using-a-custom-event-logger){:target="_blank"} in ABsmartly and send exposures directly to Segment. + +```javascript +analytics.ready(function() { + // initialize ABsmartly SDK + const sdk = new absmartly.SDK({ + endpoint: 'https://your-absmartly-endpoint.absmartly.io/v1', + apiKey: '', + environment: 'development', + application: 'YOUR-APP', + eventLogger: (context, eventName, data) => { + if (eventName == "exposure") { + // filter only relevant and interesting exposures + // if the assigned flag is false, this exposure was a treatment call that did not result in an assignment + // this can happen if, for example, the experiment is no longer running, but treatment() calls are still in the application code + if (exposure.assigned) { + analytics.track("Experiment Viewed", { + experiment_id: exposure.id, + experiment_name: exposure.name, + variation_id: exposure.variant, + variation_name: "ABCDEFG"[exposure.variant], + }); + } + } + }, + }); + + const context = sdk.createContext(request); + context.attribute("user_agent", navigator.userAgent); + + context.ready().then((response) => { + console.log("ABSmartly Context ready!"); + console.log(context.treatment("test-exp")); + }).catch((error) => { + console.log(error); + }); +}); +``` + +### Publishing experiment exposures through Segment + +To publish experiment exposures through Segment, you must first configure +and enable the _Exposures (Verbatim)_ mapping in your ABsmartly (Actions) destination. + +By enabling the _Exposures (Verbatim)_ mapping in Segment, you replace the direct flow of exposure events from the ABsmartly SDK to the ABsmartly collector and instead send them to Segment +for processing by the destination function. + +This can be achieved by instantiating the ABsmartly SDK with a custom context publisher. + +The custom publisher will publish an `Experiment Viewed` Segment event with ABsmartly's exposure data in the `properties.exposure` field as well +as the normal semantic data that Segment recommends for this event. + +Here is an example in Javascript. + +```javascript +analytics.ready(function() { + // initialize ABSmartly SDK + const sdk = new absmartly.SDK({ + endpoint: 'https://your-absmartly-endpoint.absmartly.io/v1', + apiKey: '', + environment: 'development', + application: 'YOUR-APP', + }); + + // ABSmartly publisher implementation that publishes ABSmartly exposures to Segment, + // instead of directly to the ABSmartly Collector + // these will then be pushed by the ABSmartly segment integration to the ABSmartly collector + class SegmentContextPublisher extends absmartly.ContextPublisher { + constructor(segment) { + super(); + + this._segment = segment; + } + + publish(request, sdk, context) { + // NOTE: only exposures are expected to come via this route + // other types of events should be tracked through the Segment API + if (request.exposures) { + for (const exposure of request.exposures) { + this._segment.track(`Experiment Viewed`, { + experiment_id: exposure.id, + experiment_name: exposure.name, + variation_id: exposure.variant, + variation_name: "ABCDEFG"[exposure.variant], + exposure: Object.assign({}, + { + exposures: [exposure], + }, + // add anything else in the a/b smartly payload that are not exposures or goals + ...Object.entries(request) + .filter(e => (e[0] !== 'exposures') && (e[0] !== 'goals')) + .map(e => ({[e[0]]: e[1]})) + ) + }); + } + } + + return Promise.resolve(); + } + } + + // set this as the default publisher - all contexts created from now on will use it by default + sdk.setContextPublisher(new SegmentContextPublisher(analytics)); + + const request = { + units: { + userId: analytics.user().id(), + anonymousId: analytics.user().anonymousId(), + }, + }; + + window.context = sdk.createContext(request); + context.attribute("user_agent", navigator.userAgent); + + context.ready().then((response) => { + console.log("ABSmartly Context ready!"); + console.log(context.treatment("test-exp")); + }).catch((error) => { + console.log(error); + }); +}); +``` + + +## Migration from the classic ABsmartly destination + +To migrate from the classic ABsmartly destination to ABsmartly (Actions), disconnect the classic ABsmartly destination before enabling the ABsmartly (Actions) destination to avoid duplicate experimentation events. + +--- + diff --git a/src/connections/destinations/catalog/actions-acoustic/assets/20240422_152537_image.png b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_152537_image.png new file mode 100644 index 0000000000..f5b13c6d39 Binary files /dev/null and b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_152537_image.png differ diff --git a/src/connections/destinations/catalog/actions-acoustic/assets/20240422_152921_image.png b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_152921_image.png new file mode 100644 index 0000000000..c297729e3a Binary files /dev/null and b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_152921_image.png differ diff --git a/src/connections/destinations/catalog/actions-acoustic/assets/20240422_153616_image.png b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_153616_image.png new file mode 100644 index 0000000000..7f7822a489 Binary files /dev/null and b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_153616_image.png differ diff --git a/src/connections/destinations/catalog/actions-acoustic/assets/20240422_155823_image.png b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_155823_image.png new file mode 100644 index 0000000000..c7c7af67cc Binary files /dev/null and b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_155823_image.png differ diff --git a/src/connections/destinations/catalog/actions-acoustic/assets/20240422_155857_image.png b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_155857_image.png new file mode 100644 index 0000000000..3bf84044bb Binary files /dev/null and b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_155857_image.png differ diff --git a/src/connections/destinations/catalog/actions-acoustic/assets/20240422_160007_image.png b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_160007_image.png new file mode 100644 index 0000000000..6dc64a03a6 Binary files /dev/null and b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_160007_image.png differ diff --git a/src/connections/destinations/catalog/actions-acoustic/assets/20240422_161221_image.png b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_161221_image.png new file mode 100644 index 0000000000..60e0508489 Binary files /dev/null and b/src/connections/destinations/catalog/actions-acoustic/assets/20240422_161221_image.png differ diff --git a/src/connections/destinations/catalog/actions-acoustic/index.md b/src/connections/destinations/catalog/actions-acoustic/index.md new file mode 100644 index 0000000000..a774d5d5a4 --- /dev/null +++ b/src/connections/destinations/catalog/actions-acoustic/index.md @@ -0,0 +1,105 @@ +--- +title: Acoustic (Actions) Destination +id: 64edec5a4f881f992e432b81 +beta: true +hidden: true +--- +{% include content/plan-grid.md name="actions" %} + +[Acoustic Connect](https://acoustic.com/?utm_source=segmentio&utm_medium=docs&utm_Connect=partners){:target="_blank”} provides multichannel marketing without all the hassle. Automate campaigns and messages across SMS, mobile push, group messaging, email, and social media based on real-time customer signals and intent across the customer journey. + +Trigger promotional and transactional messages based on customer preferences and behaviors to support onboarding, customer activation, cross-sell, and re-engagement strategies. Scale personalization and treat your customers as individuals with an automated view and understanding of the customer by pulling real-time behavior like intent so marketers don't have to manually segment users and audiences. + +The Acoustic (Actions) Destination is maintained by Acoustic. For support, visit the [Acoustic Help Center](https://help.goacoustic.com/hc/en-us){:target="_blank"}. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item "Acoustic (Actions)" in the left navigation, and click it. +3. Click **Configure Acoustic (Actions)**. +4. Select an existing source to connect to Acoustic (Actions). + +{% include components/actions-fields.html %} + +### Edit basic settings + +For some configuration options, you will need information from your Connect Org. Others will need the help of your Customer Success and/or Services resources. If you do not recognize the options here or need help, reach out to your Acoustic Customer Success or Services resource for help. + +- **Name**: Enter a name to help you identify this destination definition in Segment. + +- **Customer Prefix**: **Important** - Segment recommends that you use your Acoustic Connect Org name and a dataflow tag, like *CustomerAcme_Prod_* or *CustomerAcme_test1_* or *CustomerAcme_MktData3_*. Be sure to replace any spaces with an underscore and **be sure to end the string with an underscore '_'**. + +> info "" +> Work with your Acoustic Customer Success or Services resource to align this string with the Acoustic definition that defines your unique table for this data set. + +- **S3 Bucket Access Point Alias**: The Alias of the Access Point created for your access to the S3 Bucket. Available from your Acoustic Customer Success or Services resource. + +- **S3 Access Key**: S3 Access Key for the S3 bucket. Available from your Acoustic Customer Success or Services resource. + +- **S3 Secret** S3 Secret credential for the S3 bucket. Available from your Acoustic Customer Success or Services resource. + +- **S3 Region**: Should always be `us-east-1` unless directed by Acoustic otherwise. + +- **Version**: No Need to Edit - Provides a metatag to confirm the version currently in effect. The current version is shown as: "Last-Modified: 02.01.2024 10.30.43", "Version 1.7" + +When all config options are defined and confirmed, as well as all Filter and Mapping configurations completed (see below), be sure to "Enable" and "Save Changes" for the Destination. + +When enabled, Segment will send data to Acoustic (Actions) based on configuration in the Mappings tab. + +> info "" +> You can define multiple destinations to send unique data to different Connect Tables, simply create the definition with a unique name and Customer Prefix to align the mapped data to the respective Connect table. + + +### Defining filters + +The Destination dialog includes a Filter tab. If you have a significant volume of Events and data attributes from the source you wish to use, a good first step would be to define Filter(s) to limit the data being sent to the connection from the defined source(s). Mapping is then used to define the specific set of attribute data and columns to be written to Acoustic. + +For example, for a Connection definition of an audience source, a `traits.email` or similar attribute filter would be necessary to assure only Identify Events with a valid value in the traits section (to be mapped to `UniqueRecipientId`) will be sent to the Acoustic Destination. + +![the Segment UI showing event filters applied to a destination](assets/20240422_152921_image.png) + +Keep in mind that the Acoustic (Actions) Destination ignores events without a valid `UniqueRecipientId` attribute, therefore a common filter would be to avoid sending any events to the connection that don't have a valid attribute to be mapped to `UniqueRecipientId`. In many cases, this will be a valid email address but other Unique Id attribute, such as `CustID`, can be used. + + + + +### Defining mapping + +The Destination dialog also contains a Mapping tab. The Acoustic (Action) Destination currently supports Segment Track and Identity Events along with all attributes of those events. In the Mapping dialog, initial Mapping templates are included as an aid. All of the provided mapping fields are optional, but you'll need to use at least one, in addition to the required attributes, to map the data you want to write to Acoustic Connect. + +![the Segment UI showing mapping options](assets/20240422_153616_image.png) + +Mapping provides the means to map Segment event data to Connect Columns. The value you map to a key is the value of the column with the same name as the key in Connect. That is, if you map the value of `trait.firstName` to the Key "firstname", the value mapped will show up in Connect in the column "firstname". + +You'll want to work with the Acoustic Services team to define a Connect Table that will **have all of the columns you intend to map**. The details of this table are also needed in the Destination's Settings dialog. + +Here we can see the mapping for `UniqueRecipientID`. `UniqueRecipientId` is required. The Acoustic (Actions) Destination will not accept any event that does not contain a `UniqueRecipientId` attribute. + +Avoid editing 'type' or 'timestamp' mappings. These are required and pre-mapped. As noted above, even these values will show up in the respective columns as the Key names, that is, there will be a column in your table in Connect of 'type' and 'timestamp', and each will hold the respective mapped values of the event data. + +![the Segment UI showing the Select Mappings window](assets/20240422_152537_image.png) + +Following the required attributes are a series of helpful predefined mapping structures. Each of these are optional, but at least one must be used to provide data beyond the required attributes previously noted. + +The first is a standard Key and Value mapping dialog. You can use this dialog to map each attribute provided by the Track or Identify event data one by one. That is, you can map `traits.firstname` to "firstname", then another Key/Value of `traits.lastname` to "lastname", and so on, until you have mapped all that you want to store in Connect. + +![the Segment UI showing the mapping dialog](assets/20240422_155823_image.png) + +The mapping sections that follow allow you to map whole sections or even the special use-case of an array of data that needs to be flattened in order to be useful, as in this example of flattening the `properties.products` array to individual attributes. + +![Flattening properties.products to individual attributes](assets/20240422_155857_image.png) + +You can also map whole sections, which will provide all of the attributes of the section mapped through to Connect. + +![Section mapping in the Segment UI](assets/20240422_160007_image.png) + +With the Mapping completed, click **Save**. + +With all configuration completed, you'll want to confirm data being written to the defined Table in Connect. + +### Delivery report + +Additionally, if you see `Nesting Depth Exceeded` in your Delivery report, this indicates that an array of data is being sent through that is too deep. In other words, the array has too many levels and cannot be flattened. In this case, you'll need to revisit mapping that data to a flatter structure, that is, the attribute has a simple value versus the complex value structure that is coming through. Complex values, many layered values, are not useable and will not be accepted. + +![the Segment UI showing a Nesting Depth Exceeded delivery issue](assets/20240422_161221_image.png) + diff --git a/src/connections/destinations/catalog/actions-aggregations-io/index.md b/src/connections/destinations/catalog/actions-aggregations-io/index.md new file mode 100644 index 0000000000..320b8797c4 --- /dev/null +++ b/src/connections/destinations/catalog/actions-aggregations-io/index.md @@ -0,0 +1,21 @@ +--- +title: Aggregations.io (Actions) Destination +id: 659eb601f8f615dac18db564 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Aggregations.io](https://aggregations.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} enables you to use your existing analytics events and pipeline for real-time monitoring and alerting. + +This destination is maintained by Aggregations.io. For any issues with the destination, [contact their Support team](mailto:help@aggregations.io). + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure Aggregations.io (Actions)**. +4. Select an existing Source to connect to Aggregations.io (Actions). +5. In the destination settings, enter your Aggregations.io API Key and Ingest ID. Your ingestion on the Aggregations.io dashboard should be set up using `Array of JSON Objects` and the API Key requires `Write` permission. For more information, see the [Aggregation.io docs](https://aggregations.io/docs/ingesting-data/create-an-ingest){:target="_blank"}. + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-airship/index.md b/src/connections/destinations/catalog/actions-airship/index.md new file mode 100644 index 0000000000..11d47fe5a9 --- /dev/null +++ b/src/connections/destinations/catalog/actions-airship/index.md @@ -0,0 +1,42 @@ +--- +title: Airship (Actions) Destination +id: 6475c5c14f7db4914bcd512f +--- + +{% include content/plan-grid.md name="actions" %} + + +[Airship](https://app.segment.com/airship/destinations/catalog/actions-airship){:target="_blank"} provides an end-to-end solution for capturing value across the entire customer app lifecycle — from acquisition and activation to engagement and loyalty. It starts with Airship’s market-leading app store optimization (ASO) solutions promoting app discovery and downloads. Then the unified journey orchestration, content creation and experimentation solutions kick in. App teams can quickly design, deploy and iterate no-code native app experiences and cross-channel campaigns — bridging inside-the-app experiences with outside-the-app messaging. + +Airship maintains this destination. For any issues with the destination, [contact the Airship Support team](mailto:support@airship.com). + +> success "" +> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Airship Segment destination. There's also a page about the [non-Actions Airship destination](/docs/connections/destinations/catalog/airship/). Both of these destinations receive data from Segment. + +## Benefits of Airship (Actions) vs Airship Classic + +Airship (Actions) provides the following benefits over the classic Airship destination: + +- **Flexibility**. Complete flexibility for mapping your data from any Segment event type to one of three Airship endpoints. Make optimal use of data from Segment to trigger Automations, audience segmentation, or to personalize end-users in-app experiences and messages. +- **Additional functionality**. Supports email registration, named user association, as well as delete for GDPR compliance. This is in addition to the previously supported custom events, tag management, and attributes. +- **Reporting**. Better and more meaningful feedback from the Airship API. This integration calls the Airship API directly, so the endpoint response shows precisely how the integration is performing. + + +## Getting started + +1. From the Segment web app, navigate to **Connections > Catalog**, and select the **Destinations** tab in the catalog. +2. Search for *Airship (Actions)* and select it. +3. Click **Configure Airship (Actions)**. +4. Select an existing Source to connect to Airship (Actions). +5. Name the destination and choose between filling in the settings manually or copying from an existing instance. +6. Click **Create Destination**. +7. Enter your Access Token and App Key. You can get your access token and app key by going to your Airship project and navigating to **Settings > Partner Integrations** and selecting Segment. Following the instructions there will create a Tag Group, Attributes, and provide the Access Token and App Key. +8. Select the appropriate data center. + +{% include components/actions-fields.html %} + +## Named User ID +Named User is an Airship concept for identifying users and associating them with devices and delivery addresses. For more information, see [Airship | Named Users](https://docs.airship.com/guides/messaging/user-guide/audience/segmentation/named-users/){:target="_blank"}. This integration does not perform the association of a Named User to a delivery address, configure that in either the mobile/web SDK or through a custom workflow out of band from this integration. + + + diff --git a/src/connections/destinations/catalog/algolia-insights/images/algolia_api_keys.png b/src/connections/destinations/catalog/actions-algolia-insights/images/algolia_api_keys.png similarity index 100% rename from src/connections/destinations/catalog/algolia-insights/images/algolia_api_keys.png rename to src/connections/destinations/catalog/actions-algolia-insights/images/algolia_api_keys.png diff --git a/src/connections/destinations/catalog/algolia-insights/images/algolia_app_id_dropdown.png b/src/connections/destinations/catalog/actions-algolia-insights/images/algolia_app_id_dropdown.png similarity index 100% rename from src/connections/destinations/catalog/algolia-insights/images/algolia_app_id_dropdown.png rename to src/connections/destinations/catalog/actions-algolia-insights/images/algolia_app_id_dropdown.png diff --git a/src/connections/destinations/catalog/algolia-insights/images/algolia_dashboard_settings.png b/src/connections/destinations/catalog/actions-algolia-insights/images/algolia_dashboard_settings.png similarity index 100% rename from src/connections/destinations/catalog/algolia-insights/images/algolia_dashboard_settings.png rename to src/connections/destinations/catalog/actions-algolia-insights/images/algolia_dashboard_settings.png diff --git a/src/connections/destinations/catalog/algolia-insights/images/algolia_settings_menu.png b/src/connections/destinations/catalog/actions-algolia-insights/images/algolia_settings_menu.png similarity index 100% rename from src/connections/destinations/catalog/algolia-insights/images/algolia_settings_menu.png rename to src/connections/destinations/catalog/actions-algolia-insights/images/algolia_settings_menu.png diff --git a/src/connections/destinations/catalog/algolia-insights/images/destination_settings.png b/src/connections/destinations/catalog/actions-algolia-insights/images/destination_settings.png similarity index 100% rename from src/connections/destinations/catalog/algolia-insights/images/destination_settings.png rename to src/connections/destinations/catalog/actions-algolia-insights/images/destination_settings.png diff --git a/src/connections/destinations/catalog/algolia-insights/images/mapping_tab.png b/src/connections/destinations/catalog/actions-algolia-insights/images/mapping_tab.png similarity index 100% rename from src/connections/destinations/catalog/algolia-insights/images/mapping_tab.png rename to src/connections/destinations/catalog/actions-algolia-insights/images/mapping_tab.png diff --git a/src/connections/destinations/catalog/algolia-insights/images/mapping_tab_edit.png b/src/connections/destinations/catalog/actions-algolia-insights/images/mapping_tab_edit.png similarity index 100% rename from src/connections/destinations/catalog/algolia-insights/images/mapping_tab_edit.png rename to src/connections/destinations/catalog/actions-algolia-insights/images/mapping_tab_edit.png diff --git a/src/connections/destinations/catalog/algolia-insights/images/rename_events.png b/src/connections/destinations/catalog/actions-algolia-insights/images/rename_events.png similarity index 100% rename from src/connections/destinations/catalog/algolia-insights/images/rename_events.png rename to src/connections/destinations/catalog/actions-algolia-insights/images/rename_events.png diff --git a/src/connections/destinations/catalog/algolia-insights/index.md b/src/connections/destinations/catalog/actions-algolia-insights/index.md similarity index 87% rename from src/connections/destinations/catalog/algolia-insights/index.md rename to src/connections/destinations/catalog/actions-algolia-insights/index.md index a7fae0ae16..3c4290a156 100644 --- a/src/connections/destinations/catalog/algolia-insights/index.md +++ b/src/connections/destinations/catalog/actions-algolia-insights/index.md @@ -1,12 +1,11 @@ --- -title: Algolia Insights Destination +title: Algolia Insights (Actions) Destination rewrite: true redirect_from: - '/connections/destinations/catalog/algolia/' - - '/connections/destinations/catalog/actions-algolia-insights/' -id: 5d373a350abf930001a6b70f +id: 63e52bea7747fbc311d5b872 --- -This [Algolia Insights](https://www.algolia.com/products/analytics/) destination is a means of facilitating sending [Insights Events](https://www.algolia.com/doc/guides/sending-events/getting-started/). Sending these events is a required step for using several Algolia features: +With the [Algolia Insights (Actions)](https://www.algolia.com/products/analytics/){:target="_blank"} destination, you can send [Insights Events](https://www.algolia.com/doc/guides/sending-events/getting-started/){:target="_blank"}. It's required to send Insight Events to use these Algolia features: - Click and conversion analytics - A/B Testing @@ -14,10 +13,7 @@ This [Algolia Insights](https://www.algolia.com/products/analytics/) destination - Personalization - Algolia Recommend -This destination is maintained by [Algolia](https://www.algolia.com/). For any issues with the destination, [contact the Algolia team](mailto:hey@algolia.com). - -{% include content/beta-note.md %} - +This destination is maintained by [Algolia](https://www.algolia.com/){:target="_blank”}. For any issues with the destination, [contact the Algolia team](mailto:hey@algolia.com). ## Getting Started @@ -48,7 +44,7 @@ index.search('query', { }) ``` -Once this is enabled you will be able to send properties like queryId in your segment events. You can read more about how to send Algolia-related data to Segment from [the documentation at Algolia](https://www.algolia.com/doc/guides/sending-events/implementing/connectors/segment/). +Once this is enabled you will be able to send properties like queryId in your segment events. You can read more about how to send Algolia-related data to Segment from [the documentation at Algolia](https://www.algolia.com/doc/guides/sending-events/implementing/connectors/segment/){:target="_blank”}. ## Mapping Events diff --git a/src/connections/destinations/catalog/actions-ambee/index.md b/src/connections/destinations/catalog/actions-ambee/index.md new file mode 100644 index 0000000000..2a16d7d4bc --- /dev/null +++ b/src/connections/destinations/catalog/actions-ambee/index.md @@ -0,0 +1,123 @@ +--- +title: "Ambee (Actions) Destination" +hidden: true +beta: true +id: 647f2f7ce3b561ab931c2b77 +--- + +{% include content/plan-grid.md name="actions" %} + +Ambee provides self-serve predictive analytics for businesses, +using machine learning to automate audience insights and +recommendations based on climate and environmental datasets. Ambee +offers actionable air quality and pollen data that can reinforce your +climate strategy, simplify personalization and enhance business +outcomes. + +This destination is maintained by Ambee. For any issues with the +destination, contact Ambee's [Support +Team](https://support.getambee.com/portal/en/home){:target="_blank"}. + +## Getting started + + +1. From the **Segment** web app, click **Catalog**, then click +**Destinations**. +2. Find the **Destinations Actions** item in the left navigation, and click +it. +3. Click Configure **Ambee** +4. Select an existing Source to connect to **Ambee** (Actions). + +{% include components/actions-fields.html %} + +## Settings + +### Segment write key + +The write key is a unique identifier for each Source. It lets Segment +know which Source is sending the data and which destinations should +receive that data. + +To find a write key, you first need to create a non-cloud Source such as +a website, server, or mobile source. + +Then, in the Source, navigate to **Settings** > **API Keys**. + + +### API Key + +To start working with Ambee as your destination, you'll need +Ambee's API Key. Sign up for Ambee [here](https://auth.ambeedata.com/users/register?redirectUrl=https://api-dashboard.getambee.com){:target="_blank"}. + +Once you are signed in, you will get your limited-period API key on the +dashboard's homepage. If your use case requires data in bulk, you'll +need to subscribe to Ambee's [enterprise +plan](https://www.getambee.com/pricing){:target="_blank"}. During +subscription, you'll need to specify your choice of API: **air quality** +and/or **pollen**. + +After subscription, you can use Ambee's air quality and/or pollen data +by pasting your API key under **the API Key section** in **Mapping**. + +## Ambee Destination Mapping + +### Ambee Air Quality Subscription + +Ambee's air quality subscription helps you personalize and position your +messaging with emails, SMS, and push notifications to improve user +engagement on your website based on air quality triggers for locations +across the world. You can also retarget messaging based on your user's +geo-location, for example: + +- Promote the sale of your EVs in highly polluted areas + +- Advertise anti-pollution products like masks, skincare, and more, during highly polluted durations + +- Showcase ads for smart air purifiers in highly polluted localities + +The table below shows the AQI risk levels, their associated value, and +what each category means for the public. Ambee uses globally valid data +that follows US EPA standards to provide relevant recommendations. If +you are subscribed to **air quality** you can select the risk levels +for AQI from the drop-down box under **the air quality** section. + + | AQI risk levels | Index Values | What it means | + |---------------------|-----------------|-----------------------------| + | Good | 0-50 | Air quality is good and poses little or no risk. | + | Moderate | 51-100 | Air quality is acceptable; however, there may be some health concerns for a small number of extremely sensitive people. | + | Unhealthy for sensitive groups | 101-150 | When air quality is in this range, people in sensitive groups may experience health effects when engaging in outdoor activities. | + | Unhealthy | 151-200 | When air quality is in this range, everyone who is active outdoors may experience effects. Members of sensitive groups are likely to experience more serious effects. | + | Very unhealthy | 201-300 | When air quality is in this range, it is expected that there will be widespread effects among general population and more serious effects in members of sensitive groups. | + | Hazardous | 301-500 | Air quality in this range triggers health warnings of emergency conditions. The entire population is more likely to be affected by serious health effects. + +### Ambee Pollen Subscription + +Ambee's pollen subscription helps you contextualize and hyper-target +your marketing and advertising campaigns with emails, SMS, and push +notifications to improve user engagement with the help of pollen +triggers for locations across the world. You can also personalize your +ad content based on the user's geolocation, for example: + +- Advertise anti-allergy tissues based on high pollen condition + +- Promote OTC medicines to allergy sufferers + +NAB recommends the risk levels below to understand the risks +users are exposed to, and help them take preventative measures to +reduce exposure to pollen. Ambee uses the NAB-compliant index to +provide accurate insights. If you are subscribed to **pollen**, you can +select the risk levels for pollen from the drop-down box under the +**pollen** section. + +| Risk Level | Tree | Grass | Weed | What it means | +|---------------|---------|-----------|-------------|-----------------| +| Low | 0-95 | 0-29 | 0-20 | Individuals susceptible to pollen may experience mild allergic symtoms. | +| Moderate | 96-207 | 30-60 | 21-77 | Many individuals sensitive to pollen may experience allergic symptoms. | +| High | 208-703 | 61-341 | 78-266 | Most individuals with any sensitivity to pollen will experience allergic symptoms. Extremely sensitive groups could experience serious symptoms. | +| Very High | 704+ | 342+ | 267+ | Almost all individuals with any sensitivity to pollen will experience symptoms. | + +### IP Address + +Ambee will fetch the user's IP address to trigger air quality and/or +pollen notifications for device mode with analytics.js or mobile +(android/iOS). diff --git a/src/connections/destinations/catalog/actions-amplitude/index.md b/src/connections/destinations/catalog/actions-amplitude/index.md index ddc638457a..e543879bf8 100644 --- a/src/connections/destinations/catalog/actions-amplitude/index.md +++ b/src/connections/destinations/catalog/actions-amplitude/index.md @@ -23,11 +23,11 @@ Amplitude (Actions) provides the following benefits over the classic Amplitude d - **Clearer mapping of data**. Actions-based destinations enable you to define the mapping between the data Segment receives from your source, and the data Segment sends to the destination. - **Support for Amplitude's HTTP API v2**. Amplitude (Actions) is built on the latest version of [Amplitude's HTTP API](https://developers.amplitude.com/docs/http-api-v2){:target="_blank"}. - **Revenue is a top-level property**. Amplitude (Actions) elevates `revenue` to a top-level property in requests sent to Amplitude. This enables inclusion of this data in Amplitude features like customer LTV reports. -- **Session tracking in cloud-mode**. Amplitude (Actions) supports sending session details from cloud-mode sources. +- **Tracking in cloud-mode**. Amplitude (Actions) supports sending details from cloud-mode sources. ## Getting started -1. Before you start, go to your [Amplitude workspace](https://analytics.amplitude.com){:target="_blank"}. Click **Settings** in the bottom left, then click **Projects** in the left menu. Select your **Project**. Copy the Amplitude API Key and Secret Key for the project. +1. Before you start, go to your [Amplitude workspace](https://analytics.amplitude.com){:target="_blank"}. Click **Settings** in the top right and then click **Organization Settings** to navigate to your **Projects** in the menu. Select your **Project**. Copy the Amplitude API Key and Secret Key for the project. 2. From the Segment web app, click **Catalog**, then click **Destinations**. 3. Find the Destinations Actions item in the left navigation, and click it. 4. Click the "Amplitude" item to select it and click **Configure**. @@ -51,13 +51,17 @@ To manually add the Log Purchases Action: ### Connection Modes for Amplitude (Actions) destination -The Amplitude (actions) destination does not offer a device-mode connection mode. If you're using one of Segment's new libraries ([Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/), [Swift](https://github.com/segmentio/analytics-swift) or [Kotlin](https://github.com/segmentio/analytics-kotlin)) with the Actions-framework version of the destination, you do not need the device-mode connection. +The Amplitude (Actions) destination does not offer a device-mode connection mode. Previous deployments of the Amplitude Segment destination required the device-mode connection to use the `session_id` tracking feature. However, the Amplitude (Actions) destination now includes session ID tracking by default when you use Segment's ([Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/) library. +### Track sessions -Most previous deployments of the Amplitude Segment destination used the device-mode connection to use the `session_id` tracking feature. The new Actions-framework Amplitude destination, includes session ID tracking by default. When connected to the Analytics.js 2.0 source, Segment automatically loads a plugin on your website for session tracking and enrichment as an alternative to the Amplitude SDK. This means you don't need to bundle any software to run on the user's device, or write any code. It also means that you can use more of the Segment platform features on data going to Amplitude, such as Protocols filtering and transformations, and Profiles Identity Resolution. +Session tracking is available with Segment's new libraries: [Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/), [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/) or [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/). -Session tracking is available with Segment's new libraries: [Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/), [Swift](https://github.com/segmentio/analytics-swift) or [Kotlin](https://github.com/segmentio/analytics-kotlin) +When connected to the Analytics.js 2.0 source, Segment automatically loads a plugin on your website for session tracking and enrichment as an alternative to the Amplitude SDK. This means you don't need to bundle any software or write any code to run on the user's device, and can use more of the Segment platform features for data going to Amplitude, like [Protocols filtering and transformations](/docs/protocols/) and [Unify Identity Resolution](/docs/unify/identity-resolution/). +If you're using one of Segment's [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/), [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/), or [React Native](/docs/connections/sources/catalog/libraries/mobile/react-native/) libraries, you will need to include the Amplitude destination plugin to enable session tracking. + +You can read more about Amplitude's [tracking sessions](https://help.amplitude.com/hc/en-us/articles/115002323627-Track-sessions){:target="_blank”} feature in Amplitude's documentation. ### Device ID Mappings The Amplitude destination requires that each event include either a Device ID or a User ID. If a User ID isn't present, Amplitude uses a Device ID, and vice versa, if a Device ID isn't present, Amplitude uses the User ID. @@ -68,24 +72,23 @@ By default, Segment maps the Segment property `context.device.id` to the Amplitu JavaScript sources automatically enable session tracking. -The session ID Segment passes to Amplitude stores locally in a key-value pair. View the value associated with the `analytics_session_id`key to access the session ID. +The session ID Segment passes to Amplitude stores locally in a key-value pair. View the value associated with the `analytics_session_id`key to access the session ID. The session ID is set to timeout every 30 minutes by default. ### Enable Amplitude session tracking for Swift -To enable session tracking in Amplitude when using the [Segment Swift library](https://github.com/segmentio/analytics-swift): +To enable session tracking in Amplitude when using the [Segment Swift library](https://github.com/segmentio/analytics-swift){:target="_blank”}: 1. Enable `trackApplicationLifecycleEvents` in your configuration. -2. Add the [Amplitude Session plugin](https://github.com/segmentio/analytics-swift/blob/main/Examples/destination_plugins/AmplitudeSession.swift -) to your project. -3. Initialize the plugin ([example](https://github.com/segmentio/analytics-swift/blob/main/Examples/apps/DestinationsExample/DestinationsExample/AppDelegate.swift)) +2. Add the [Amplitude Session plugin](https://github.com/segment-integrations/analytics-swift-amplitude/blob/main/Sources/SegmentAmplitude/AmplitudeSession.swift){:target="_blank”} to your project. +3. Initialize the plugin ([example](https://github.com/segmentio/analytics-swift/blob/main/Examples/apps/DestinationsExample/DestinationsExample/AppDelegate.swift){:target="_blank”}) ```swift analytics?.add(plugin: AmplitudeSession(name: "Amplitude")) ``` ### Enable Amplitude session tracking for Kotlin -To enable session tracking in Amplitude when using the [Segment Kotlin library](https://github.com/segmentio/analytics-kotlin): +To enable session tracking in Amplitude when using the [Segment Kotlin library](https://github.com/segmentio/analytics-kotlin){:target="_blank”}: 1. Enable `trackApplicationLifecycleEvents` in your configuration. -2. Add the [Amplitude Session plugin](https://github.com/segmentio/analytics-kotlin/blob/main/samples/kotlin-android-app-destinations/src/main/java/com/segment/analytics/destinations/plugins/AmplitudeSession.kt) to your project. +2. Add the [Amplitude Session plugin](https://github.com/segment-integrations/analytics-kotlin-amplitude/blob/main/lib/src/main/java/com/segment/analytics/kotlin/destinations/amplitude/AmplitudeSession.kt){:target="_blank”} to your project. 2. Initialize the plugin ```kotlin analytics.add(AmplitudeSession()) @@ -93,8 +96,8 @@ To enable session tracking in Amplitude when using the [Segment Kotlin library]( ### Enable Amplitude session tracking for iOS -To enable session tracking in Amplitude when using the [Segment iOS library](https://github.com/segmentio/analytics-ios): -1. Add the [Amplitude Session middleware](https://github.com/segment-integrations/analytics-ios-integration-amplitude/blob/amplitude-session/Pod/Classes/SEGAmplitudeSession.m) to your project. +To enable session tracking in Amplitude when using the [Segment iOS library](https://github.com/segmentio/analytics-ios){:target="_blank”}: +1. Add the [Amplitude Session middleware](https://github.com/segment-integrations/analytics-ios-integration-amplitude/blob/amplitude-session/Pod/Classes/SEGAmplitudeSession.m){:target="_blank”} to your project. 2. Add the middleware & enable `trackApplicationLifecycleEvents` in your configuration: ```objective-c NSString *const SEGMENT_WRITE_KEY = @" ... "; @@ -106,8 +109,8 @@ To enable session tracking in Amplitude when using the [Segment iOS library](htt ### Enable Amplitude session tracking for Android -To enable session tracking in Amplitude when using the [Segment Android library](https://github.com/segmentio/analytics-android): -1. Add the [Amplitude Session middleware](https://github.com/segment-integrations/analytics-android-integration-amplitude/blob/master/src/main/java/com/segment/analytics/android/integrations/amplitude/AmplitudeSessionId.java) to your project. +To enable session tracking in Amplitude when using the [Segment Android library](https://github.com/segmentio/analytics-android){:target="_blank”}: +1. Add the [Amplitude Session middleware](https://github.com/segment-integrations/analytics-android-integration-amplitude/blob/master/src/main/java/com/segment/analytics/android/integrations/amplitude/AmplitudeSessionId.java){:target="_blank”} to your project. ```gradle implementation 'com.segment.analytics.android.integrations:amplitude:3.1.0' ``` @@ -172,7 +175,7 @@ Property names should be `camelCase` for Android implementations, and `snake_cas If `true`, the destination sends events to Amplitude's `batch` endpoint rather than the `httpapi` endpoint. Because Amplitude's `batch` endpoint throttles traffic less restrictively than the Amplitude `httpapi` endpoint, enabling this setting can help to reduce 429 errors (throttling errors) from Amplitude. -Amplitude's `batch` endpoint throttles data when the rate of events sharing the same `user_id` or `device_id` exceeds an average of 1,000/second over a 30-second period. See the Amplitude documentation for more about [429 errors and throttling in Amplitude](https://developers.amplitude.com/#429s-in-depth). +Amplitude's `batch` endpoint throttles data when the rate of events sharing the same `user_id` or `device_id` exceeds an average of 1,000/second over a 30-second period. See the Amplitude documentation for more about [429 errors and throttling in Amplitude](https://developers.amplitude.com/#429s-in-depth){:target="_blank”}. {% endcapture %} @@ -202,10 +205,11 @@ To use Amplitude's groups with Segment, you must enable the following Action set ## Migration from Amplitude Classic -{% include content/ajs-upgrade.md %} - Keep the following in mind if you plan to move to Amplitude (Actions) from a classic Amplitude destination. +> info "" +> In some cases, Amplitude Classic uses different default mappings than Amplitude (Actions). For example, the `Viewed Home Page` event in Amplitude Classic will be `Viewed Home` in Amplitude Actions, unless you configure it as `Viewed Home Page`. Be sure to follow the steps in the Destination Actions documentation to [customize your mappings](/docs/connections/destinations/actions/#customizing-mappings). Review how events appear in each destination, and configure the Actions' mappings properly to maintain continuity between Classic and Actions destinations. + ### Amplitude (Actions) uses Amplitude's HTTP API v2 > warning "" @@ -214,7 +218,15 @@ Keep the following in mind if you plan to move to Amplitude (Actions) from a cla You configure the Amplitude (Actions) destination through Filters and Actions. Consult the table below for information about configuring your Amplitude (Actions) destination similarly to your classic Amplitude destination. > info "" -> Contact Segment support if you find features missing from the Amplitude (Actions) destination that were available in the classic Amplitude destination. +> Contact Segment support if you find features missing from the Amplitude (Actions) destination that were available in the classic Amplitude destination. + +### Set Once/Set Always fields + +Amplitude restricts the mixing of top-level user properties with `$set`, `$setOnce`, or `$setAlways` operations in a single request, [as outlined in Amplitude’s documentation](https://www.docs.developers.amplitude.com/analytics/apis/identify-api/#user_properties-supported-operations){:target="_blank"}. + +To circumvent this within Segment, users can opt to exclusively map event parameters to either the **User Properties** field or to one of the user property operations (Set Once and/or Set Always) available in mappings. If you use the **Set Once** and/or **Set Always** fields, include all relevant fields in their respective mappings and do not configure mappings for **User Properties** in the same request. + +Conversely, to send top-level user properties, map only to the **User Properties** field and exclude mappings for the **Set Once** and **Set Always** fields. {% include components/actions-map-table.html name="amplitude" %} diff --git a/src/connections/destinations/catalog/actions-app-fit/index.md b/src/connections/destinations/catalog/actions-app-fit/index.md new file mode 100644 index 0000000000..8ee9b0d2e5 --- /dev/null +++ b/src/connections/destinations/catalog/actions-app-fit/index.md @@ -0,0 +1,26 @@ +--- +title: AppFit (Actions) Destination +id: 64b67be0d0dd66094c162ca7 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[AppFit](https://appfit.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} integrates with Segment to help teams stay on top of their key business metrics. Successful teams look at their app metrics on a consistent basis and use that data to make decisions about their business. + +When you connect AppFit to your Segment account, you get a top level dashboard for your mobile phone and weekly reminders to review your metrics. If you see a metric that doesn't look right, AppFit lets you flag it and add comments so everyone can discuss what's going on right from their phone. + +This destination is maintained by AppFit. For any issues with the destination, [contact their Support team](mailto:support@appfit.io). + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure AppFit**. +4. Select an existing Source to connect to AppFit (Actions). + +To find your API key, go to the AppFit app and click on Connectors in the main menu. If you already have a Segment Destination connector created, you can click on it and find your API key there, otherwise you can create a new connector by clicking on "Create New Connector" and selecting "Segment Destination" + +{% include components/actions-fields.html %} + + diff --git a/src/connections/destinations/catalog/actions-attio/index.md b/src/connections/destinations/catalog/actions-attio/index.md new file mode 100644 index 0000000000..7c2e0f94d6 --- /dev/null +++ b/src/connections/destinations/catalog/actions-attio/index.md @@ -0,0 +1,201 @@ +--- +title: Attio (Actions) Destination +hide-boilerplate: true +id: 64c031541451bb784943f809 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +Powerful, flexible and data-driven, [Attio](https://attio.com){:target="_blank”} makes it easy to build the +exact CRM that your business needs. + +This destination allows you to use your existing Segment events to create or update +records in Attio, for example creating Attio User records from Segment Identify events. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for **Attio (Actions)** and select it. +3. Click **Add destination**, then follow the setup instructions. +4. Click **Connect to (destination name)** to select the Attio Workspace you'd like to connect to. + + + +## Identify User + +Create or update a **Person** using the provided email address, then create or update a +related **User** using the same address. By default, this mapping runs for `identify` +events. + +*This mapping is a special form of [Assert Record](#assert-record), because it asserts +both a Person and User and links them together. If you only need to assert either a Person +or User, you should configure [Assert Record](#assert-record) instead.* + +In Attio, a **Person** represents a human. People have names, email addresses, Twitter +profiles, email and calendar interactions, etc. + +Meanwhile, a **User** is a user of your product. Users might have feature flags, +permission levels, etc. A Person can have multiple Users, for example if they exist in +different workspaces or have different sets of permissions, but are ultimately the same +Person. + +> info "" +> To use the User standard object, you'll need to make sure it's activated first. Visit +> your [Workspace Settings > Objects](https://app.attio.com/_/settings/data/objects){:target="_blank”} page +> and click the "Activate" button next to the Users object. + +This mapping makes the assumption that your Segment event includes two properties: + + 1. An `email_address` property, to create or update a Person + 2. A `id` property, to create or update an associated User + + You can specify additional attributes to be mapped on the **Edit Mapping** page. + +For example, you could set some additional properties on the Person using these Mapping +Fields under "Additional Person attributes". The column on the left should contain +properties from your event, or custom text, and the column on the right should reference +attributes on that object type in Attio, represented by their slug. + +> info "" +> Every Attio attribute has both an ID and a slug, and you can use either to reference +> those attributes in this action. To find this value, on the object settings page, select +> the "Attributes" tab, locate your attribute, then click on the **︙** button and select +> "Copy slug". + +Here's an example configuration that sets the `description`, `name` and `company` +attributes on the Person object: + +| Select event variable | Enter key name | Notes | +|-----------------------------------------|----------------|--------------------------------------------------------------------| +| `traits.description` | description | | +| `traits.last_name`, `traits.first_name` | name | Person names must be formatted as `Last name(s), First name(s)` | +| `traits.domain` | company | A Company relationship can be populated using the Company's domain | + +You can also use the same approach to specify additional properties on the User object. +Please note that by default, the User object doesn't specify many attributes; the +expectation is that you'll add your own that make the most sense for your product. All +custom attributes can be specified here, please see [attribute types](#attribute-types) +below for more information. + +## Group Workspace + +Create or update a **Company** using the provided domain, then create or update a +**Workspace** using the provided name. By default, this mapping runs for `group` events. + +*This mapping is a special form of [Assert Record](#assert-record), because it asserts +both a Company and Workspace and links them together. If you only need to assert either a +Company or Workspace, you should configure [Assert Record](#assert-record) instead.* + +In Attio, a **Company** can have names and domains, as well as enriched properties like +ARR or category. + +Meanwhile, a **Workspace** represents a group of Users in your product. Workspaces might +have feature flags, billing configurations, customer support representatives, etc. A +Company can have many Workspaces. + +> info "" +> To use the Workspace standard object, you'll need to make sure it's activated first. Visit +> your [Workspace Settings > Objects](https://app.attio.com/_/settings/data/objects) page +> and click the "Activate" button next to the Workspaces object. + +This mapping makes the assumption that your Segment event includes two properties: + + 1. A `domain` property, to create or update a Company + 2. A `id` property, to create or update an associated Workspace + +You can specify additional attributes to be mapped on the **Edit Mapping** page. + +For example, you could set some additional properties on the Company using these Mapping +Fields under "Additional Company attributes". The column on the left should contain +properties from your event, or custom text, and the column on the right should reference +attributes on that object type in Attio, represented by their slug. For example: + +| Select event variable | Enter key name | +|-----------------------------------------|----------------| +| `traits.twitter_handle` | twitter | + +Similarly, you can also set some additional properties on the Workspace. All +custom attributes can be specified here, please see [attribute types](#attribute-types) +below for more information. + +## Assert Record + +Create or update a single type of Object, given a matching attribute name and value. For +example, you could assert that a Company exists using a given `domain` property. + +This mapping makes the assumption that your data includes the matching property. For the +following example, assume you have domain and twitter properties, like so: + +```json +{ + "type": "identify", + "traits": { + "domain": "app.attio.com", + "twitter_handle": "@attio" + } +} +``` + +First, you'll need to set the "Attio Object" property - it should pre-populate with all of +the activated objects in your Attio instance. Then, you'll need to set the "Matching +Attribute" property. This is the slug for the attribute in Attio, and must also be present +in your "Attributes" mapping in the next form. In this example, you'll select "Company" as +the Attio Object, and "domains" as the Matching Attribute. + +You would then need to ensure the Attributes mapping is populated like so: + +| Select event variable | Enter key name | +|-----------------------------------------|----------------| +| `traits.domain` | domains | +| `traits.twitter_handle` | twitter | + +When this mapping runs, Attio will try to find an existing Company where one of the +domains matches the one you've provided here. If it finds it, it will update the `twitter` +attribute with the value `"@attio"`. If it doesn't find it, a new Company will be created +with both the domain and twitter handles above. + +## Batching support + +This action supports batching. You can toggle batching using the **Edit Mapping > Enable +Batching** property. + +Batching sends groups of events to Attio in a single request, rather than individually, +which can improve stability & correctness if you are sending a lot of events. + +However, there are a couple of caveats to be aware of: + + 1. Attio will process these events asynchronously, which means it might take a few + seconds between Attio acknowledging the request and the record updates appearing in + your Attio workspace. + + 2. Invalid events will be silently dropped. This can happen if your mapping + configuration points to a non-existent Attio attribute, or you're trying to write the + wrong attribute type (for example: writing a number to a domain attribute). We recommend you + continue to use the **Send test event** feature on the mapping page to check + configurations before saving them. + +## Attribute types + +The Attio Action can write all types of attribute to Attio. Below is an example of the +format that each attribute must be; please note that you'll get validation failures if any +of these are incorrect. To unset an attribute, you can also pass `null` as the value. + +| `type` | Format | Example values | +|----------------------|-----------------------------------------------------------------------------------------|-------------------------------------------------------------| +| `actor-reference` | An email address of a workspace member | `"alice@attio.com"` | +| `checkbox` | Boolean | `true`, `false` | +| `currency` | Number with up to 4 decimal places | `99`, `29.9999` | +| `date` | YYYY-MM-DD | `"2023-09-28"` | +| `domain` | `{domain}.{tld}` | `"app.attio.com"`, `"www.example.com"` | +| `email` | A valid email address | `"person@example.com"` | +| `location` | String with all valid address parts (street address, city, state, country, and postal code) combined | "1 Infinite Loop, Cupertino, CA, US" | +| `number` | Number, stored as a 64 bit float | `42.192`, `17` | +| `personal-name` | Last name(s), First name(s) *(note the comma in the middle)* | `"Bloggs, Joe"` | +| `phone-number` | [E.164 format](https://en.wikipedia.org/wiki/E.164), starting with `+...` | `"+15558675309"` | +| `pipeline` | A UUID or title representing the status | `"open"`, `"closed"` | +| `rating` | Integer from 0 to 5 | `0`, `5` | +| `record-reference` | To a person, an email. To a company, a domain. UUID of other entity always supported. | `"person@example.com"`, `"app.attio.com"`, `"0677efa..."` | +| `select` | A UUID or title representing the option | `"open"` | +| `text` | String | `"A piece of text"` | +| `timestamp` | ISO8601, e.g. YYYY-MM-DDTHH:MM:SS | `"2023-09-28 04:39:17.000"` | diff --git a/src/connections/destinations/catalog/actions-blend-ai/index.md b/src/connections/destinations/catalog/actions-blend-ai/index.md index 8116e0b56e..2e1892a274 100644 --- a/src/connections/destinations/catalog/actions-blend-ai/index.md +++ b/src/connections/destinations/catalog/actions-blend-ai/index.md @@ -8,10 +8,7 @@ id: 64244158b33d1380a79dc85c [Blend-AI](https://blnd.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} identifies the most valuable product interaction in your product data and cross references it with new incoming leads. -Blend-AI maintains this destination. For any issues with the destination, [contact their Support -team](mailto:support@blnd.ai). - -{% include content/ajs-upgrade.md %} +Blend-AI maintains this destination. For any issues with the destination, [contact their Support team](mailto:support@blnd.ai). ## Getting started diff --git a/src/connections/destinations/catalog/actions-braze-cloud/index.md b/src/connections/destinations/catalog/actions-braze-cloud/index.md index 819a866821..29ef730c8f 100644 --- a/src/connections/destinations/catalog/actions-braze-cloud/index.md +++ b/src/connections/destinations/catalog/actions-braze-cloud/index.md @@ -6,7 +6,7 @@ hidden: true --- {% include content/plan-grid.md name="actions" %} -[Braze](https://www.braze.com/), formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. +[Braze](https://www.braze.com/){:target="_blank”}, formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. > success "" > **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Braze Segment destination. There's also a page about the [non-Actions Braze destination](/docs/connections/destinations/catalog/braze/). Both of these destinations receives data _from_ Segment. There's also the [Braze source](/docs/connections/sources/catalog/cloud-apps/braze//), which sends data _to_ Segment! @@ -20,20 +20,22 @@ Braze Cloud Mode (Actions) provides the following benefit over Braze Classic: ## Getting Started 1. From the Segment web app, click **Catalog**. -2. Search for "Braze" in the Catalog, select **Braze Cloud Mode (Actions)**, and choose which of your sources to connect the destination to. -3. Add the following Connection Settings: +2. Search for "Braze" in the Catalog, select **Braze**, and choose which of your sources to connect the destination to. +3. Select "Actions" under the Destination framework options. +4. Add the following Connection Settings: - **API Key**: Created under Developer Console in the Braze Dashboard. - **App ID**: The app identifier used to reference specific Apps in requests made to the Braze API. Created under Developer Console in the Braze Dashboard. - **REST Endpoint**: Your Braze REST Endpoint. For more information, see [API Overview](https://www.braze.com/docs/api/basics/){:target="_blank"} in the Braze documentation. +## Batching data to Braze + +You can batch data sent to Braze within Cloud Mode Actions. Batch sizes are capped at 75 events, and these batches will accumulate over a 30-second period before being flushed. Request batching is done per-action mapping. For example, Identify calls (attributes) will be batched in a request, and Track calls (custom events) will be batched in a second request. Braze recommends enabling this feature as it reduces the number of requests being sent from Segment to Braze, reducing the risk of the destination hitting Braze rate limits and retrying requests. {% include components/actions-fields.html %} ## Migration from Braze Classic -{% include content/ajs-upgrade.md %} - Keep the following in mind if you plan to move to Braze (Actions) from the classic Braze destination. {% include components/actions-map-table.html name="braze-cloud" %} diff --git a/src/connections/destinations/catalog/actions-braze-cohorts/index.md b/src/connections/destinations/catalog/actions-braze-cohorts/index.md index 339f77ffcf..21b46b7286 100644 --- a/src/connections/destinations/catalog/actions-braze-cohorts/index.md +++ b/src/connections/destinations/catalog/actions-braze-cohorts/index.md @@ -37,6 +37,7 @@ To connect the Braze Cohorts destination: 10. Under Select mappings, input the Audience Key you copied in Step 2 as the “Segment Engage Audience Key.” Do not change any other defaults. Click **Save** and toggle to enable the mapping. * **Note:** Users can be added or removed from cohorts through `ExternalId`, `DeviceId`, or the `UserAlias` object. The priority is `ExternalId`, then `DeviceId`, and finally `UserAlias` if all are provided. * The Audience Key must be manually entered to ensure users in the Engage Audience are sent to the correct cohort in Braze. For every Engage Audience you want to send to Braze, a separate **Sync Audience** mapping must be created. You can create up to 50 mappings within an instance of the Braze Cohorts destination. + * Create the mapping with trigger conditions: `Event Name` is `Audience Entered/Exited` and `Event Property` `audience_key` is ``. Hardcode the audience key in the "Segment Engage Audience Key" field of the mapping. 11. Navigate back to **Engage > Audiences** and click on the Audience from Step 1. @@ -46,7 +47,24 @@ The setup is complete and the Audience will start syncing to Braze Cohorts. Segm To sync additional Audiences from your Engage space, create a separate mapping in the Braze Cohorts destination. Navigate to **Connections > Destinations**, search and select the Braze Cohorts destination, and follow Steps 9-11 above. +If you are creating multiple mappings in one Braze Cohorts destination, Segment recommends clearing the default subscription for all your mappings from `Event Name is Audience Entered or Event Name is Audience Exited` to `Event Property audience_key is `, replacing `` with the Audience Key copied as per step 2 above. + > info "" > A user can only be added to a cohort if the user already exists in Braze. This means that the Braze Cohorts destination should be used in parallel with the [Braze Cloud Mode (Actions) destination](/docs/connections/destinations/catalog/braze-cloud-mode-actions/) or the [Braze Web Mode (Actions) destination](/docs/connections/destinations/catalog/braze-web-device-mode-actions/), both of which can create users in Braze. {% include components/actions-fields.html settings="true"%} + +### Supplementing audience payloads + +Event payloads sent using Computed Traits and Audiences will only contain the computed trait or audience key in question, in addition to the user identities `userId`, `anonymousId` and `email`. If you need supplemental fields from user profiles to map to Braze, consider using an Insert Function with the Engage Profile API. Using the Profile API, you can pull a user's traits from your Engage space within your insert function code before the event hits the destination. You can then use these traits to enrich the event payload sent to the destination. + +When dealing with event payloads transmitted through Computed Traits and Audiences, keep in mind that these payloads typically include only the specific computed trait or audience key in question in addition to user identities such as `userId` and `anonymousId`, as well as `email` if available. View [event destinations](/docs/engage/using-engage-data/#event-destinations) for more information. + +If you need to include additional fields from user profiles into your mappings, you can achieve this by using an [insert function](/docs/connections/functions/insert-functions/) with the [Engage Profile API](/docs/unify/profile-api/). With the Profile API, you can retrieve the traits associated with a user from your Engage space within your insert function code, all before the event reaches the Braze Cohorts destination. + +### Braze Device ID + +If you would like to use the `Device ID` mapping for the Cohort Destination you will need to ensure you have captured the Braze device_id, which is not the same as the Segment device_id. Braze has some methods (linked below) that customers can use to capture the Braze device_id for use in the above workaround: +- [Swift method](https://braze-inc.github.io/braze-swift-sdk/documentation/brazekit/braze/deviceid/) +- [Android method](https://braze-inc.github.io/braze-android-sdk/kdoc/braze-android-sdk/com.braze/-i-braze/device-id.html) +- [Web method](https://js.appboycdn.com/web-sdk/latest/doc/modules/braze.html#getdeviceid) diff --git a/src/connections/destinations/catalog/actions-braze-web/index.md b/src/connections/destinations/catalog/actions-braze-web/index.md index 1febe6356d..a1e3f46a3f 100644 --- a/src/connections/destinations/catalog/actions-braze-web/index.md +++ b/src/connections/destinations/catalog/actions-braze-web/index.md @@ -8,9 +8,6 @@ hidden: true [Braze](https://www.braze.com/){:target="_blank"}, formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. - - - > success "" > **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Braze Segment destination. There's also a page about the [non-Actions Braze destination](/docs/connections/destinations/catalog/braze/). Both of these destinations receives data _from_ Segment. There's also the [Braze source](/docs/connections/sources/catalog/cloud-apps/braze/), which sends data _to_ Segment. @@ -23,8 +20,10 @@ Braze Web Mode (Actions) provides the following benefits over Braze Classic: ## Getting Started 1. From the Segment web app, click **Catalog**. -2. Search for "Braze" in the Catalog, select **Braze Web Mode (Actions)**, and choose which of your sources to connect the destination to. -3. Configure the Connection Settings. **API Key** and **SDK Endpoint** are required settings. +2. Search for "Braze" in the Catalog, select **Braze**, and choose which of your sources to connect the destination to. + - Note that if you do not select a Javascript source, you will not see the option to select the Device mode version of the destination. +3. Select "Actions" and "Device mode" under the Destination framework and Connection mode options. +4. Configure the Connection Settings. **API Key** and **SDK Endpoint** are required settings. {% include components/actions-fields.html name="braze-web" connection="true" %} @@ -165,8 +164,6 @@ For more details on this snippet, see Braze's documentation [here](https://www.b ## Migration from Braze Classic -{% include content/ajs-upgrade.md %} - Keep the following in mind if you plan to move to Braze (Actions) from the classic Braze destination. {% include components/actions-map-table.html name="braze-web" %} diff --git a/src/connections/destinations/catalog/actions-canny/index.md b/src/connections/destinations/catalog/actions-canny/index.md new file mode 100644 index 0000000000..40a617a386 --- /dev/null +++ b/src/connections/destinations/catalog/actions-canny/index.md @@ -0,0 +1,33 @@ +--- +title: Canny (Actions) Destination +id: 6489bbade6fe3eb57c13bd6a +--- + +{% include content/plan-grid.md name="actions" %} + +[Canny](https://canny.io?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a single place for all customer feedback. It saves you time managing all the feedback while keeping your customers in the loop. Let your customers post and vote on feedback from within your website or mobile app. You'll get an organized list of feedback that you can use to inform your roadmap. + +Canny maintains this destination. For any issues with the destination, [contact the Canny Support team](mailto:segment-help@canny.io). + +> success "" +> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Canny Segment destination. There's also a page about the [non-Actions Canny destination](/docs/connections/destinations/catalog/canny/). Both of these destinations receive data from Segment. + +## Benefits of Canny (Actions) vs Canny Classic + +Canny (Actions) provides the following benefit over the classic Canny destination: +- **Group Events**. Canny (Actions) supports group events and updates or adds properties to companies. + +## Getting started + +1. Go to your [Canny Admin Segment Settings](https://canny.io/redirect?to=%2Fadmin%2Fsettings%2Fsegment){:target="_blank"}. +2. Install the integration to get your API key. +3. From the Segment web app, navigate to **Connections > Catalog**, then select the **Destinations** tab in the catalog. +4. Search for **Canny (Actions)** and select it. +5. Click **Configure Canny (Actions)**. +6. Select an existing Source to connect to Canny (Actions). +7. Enter your configuration settings. +8. Enter the Canny API key in the Canny (Actions) destination settings. +9. Enable the destination and save changes. + +{% include components/actions-fields.html %} + diff --git a/src/connections/destinations/catalog/actions-chartmogul/index.md b/src/connections/destinations/catalog/actions-chartmogul/index.md new file mode 100644 index 0000000000..4359123138 --- /dev/null +++ b/src/connections/destinations/catalog/actions-chartmogul/index.md @@ -0,0 +1,36 @@ +--- +title: ChartMogul (Actions) Destination +id: 65f9888628c310646331738a +beta: true +--- + + +{% include content/plan-grid.md name="actions" %} + +[ChartMogul](https://chartmogul.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a subscription analytics platform and CRM used by thousands of businesses to measure, understand, and grow their recurring revenue businesses. + +This destination is maintained by ChartMogul. For any issues with the destination, [contact their Support team](https://help.chartmogul.com/hc/en-us/requests/new){:target="_blank"}. + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank"} search for "ChartMogul". +2. Select ChartMogul and click **Add Destination**. +3. Select an existing Source to connect to ChartMogul (Actions). +4. [Create a source](https://app.chartmogul.com/#/data-platform/sources/add-source){:target="_blank"} in ChartMogul. +5. Make sure the **Account / Contact / Enrichment data** tab is selected and click **Twilio Segment**. +6. Enter the **Name** for your source. +7. Under **Create a company in ChartMogul when** select: + - **the email or UserID is created** — if you recognize any individual who interacts with your organization as a lead and want to create a [customer record](https://help.chartmogul.com/hc/en-us/articles/214085765){:target="_blank"} for them + - **user is added to a company** — if you recognize an individual who interacts with your organization as a lead only if they're part of an organization +8. Copy the **Webhook URL**. +9. Click **SAVE AND CONTINUE CONFIGURATION IN SEGMENT**. +10. Paste the **Webhook URL** in the ChartMogul destination settings in Segment. + +{% include components/actions-fields.html %} + +## Supported event calls +ChartMogul (Actions) accepts two types of event calls: +- [Track](https://segment.com/docs/connections/spec/track/){:target="_blank"} — used for contact details and custom attributes +- [Group](https://segment.com/docs/connections/spec/group/){:target="_blank"} — used for customer details and custom attributes + +ChartMogul uses attributes from these calls to create new or update existing [custom attributes](https://help.chartmogul.com/hc/en-us/articles/206120219){:target="_blank"} for contacts or customers, or to update customers' select [standard attributes](https://help.chartmogul.com/hc/en-us/articles/5321255006364#standard-attributes){:target="_blank"}. \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-clevertap/index.md b/src/connections/destinations/catalog/actions-clevertap/index.md index e8eb9843e0..04f3deb680 100644 --- a/src/connections/destinations/catalog/actions-clevertap/index.md +++ b/src/connections/destinations/catalog/actions-clevertap/index.md @@ -1,5 +1,5 @@ --- -title: CleverTap (Actions) +title: CleverTap (Actions) Destination hide-boilerplate: true hide-dossier: true id: 61d7456b078e79929de4ee8c @@ -8,11 +8,6 @@ id: 61d7456b078e79929de4ee8c {% include content/plan-grid.md name="actions" %} - - -{% include content/ajs-upgrade.md %} - - [CleverTap](https://clevertap.com/){:target="_blank"} is a retention cloud that empowers digital consumer brands to increase customer retention and lifetime value. CleverTap drives contextual individualization with the help of a unified and deep data layer, AI/ML-powered insights, and automation enabling brands to offer hyper-personalized and delightful experiences to their customers. ## Advantages of CleverTap (Actions) Destination diff --git a/src/connections/destinations/catalog/actions-commandbar/index.md b/src/connections/destinations/catalog/actions-commandbar/index.md index 1e9413aaf1..98b5dd285c 100644 --- a/src/connections/destinations/catalog/actions-commandbar/index.md +++ b/src/connections/destinations/catalog/actions-commandbar/index.md @@ -9,9 +9,6 @@ id: 638f843c4520d424f63c9e51 To configure CommandBar as an Event Source to get data into your warehouse or other downstream tools, see the [CommandBar Source](/docs/connections/sources/catalog/cloud-apps/commandbar/) documentation. -{% include content/ajs-upgrade.md %} - - ## Getting started 1. From the Segment web app, navigate to **Connections > Catalog**, then select the **Destinations** tab at the top of the catalog. diff --git a/src/connections/destinations/catalog/actions-cordial/index.md b/src/connections/destinations/catalog/actions-cordial/index.md index 4172c3201d..c12e2407f5 100644 --- a/src/connections/destinations/catalog/actions-cordial/index.md +++ b/src/connections/destinations/catalog/actions-cordial/index.md @@ -7,7 +7,7 @@ hide-dossier: true {% include content/plan-grid.md name="actions" %} -[Cordial](https://cordial.com/) is an all-in-one marketing platform that enables brands to collect, normalize, and activate real-time data from anywhere in your technology stack to create and deliver tailored messages that flex and adapt to changing customer signals. +[Cordial](https://cordial.com/){:target="_blank”} is an all-in-one marketing platform that enables brands to collect, normalize, and activate real-time data from anywhere in your technology stack to create and deliver tailored messages that flex and adapt to changing customer signals. > info "Good to know" > This page is about the [Actions-framework](/docs/connections/destinations/actions/) Cordial Segment destination. There's also a page about the [non-Actions Cordial destination](/docs/connections/destinations/catalog/cordialio/). Both of these destinations receive data from Segment. diff --git a/src/connections/destinations/catalog/actions-display-video-360/index.md b/src/connections/destinations/catalog/actions-display-video-360/index.md new file mode 100644 index 0000000000..1051eb0650 --- /dev/null +++ b/src/connections/destinations/catalog/actions-display-video-360/index.md @@ -0,0 +1,239 @@ +--- +title: Display and Video 360 (Actions) Destination +strat: google +hide-settings: true +id: 65302a3acb309a8a3d5593f2 +beta: true +engage: true +--- + +> info "" +> Display and Video 360 (Actions) operates using third-party cookies, and its match rates are influenced by the extent to which these cookies are supported by browsers. + +Google's [Display & Video (DV360)](https://marketingplatform.google.com/about/display-video-360/){:target="_blank"} service is an end-to-end campaign management tool that enables enterprise customers to plan, measure, and run display and video advertisements. + +> info "" +> You can connect to a Google Ad Manager account. For more information, see [Create an audience and finish DV360 configuration](#create-an-audience-and-finish-dv360-configuration) below. Set **User-Role Granted** to `Publisher` if you plan to connect to Google Ad Manager. + +Segment's integration with DV360 enables Segment customers to sync audiences created in Engage with DV360 for centralized audience management and improved retargeting. + +> warning "" +> You must meet certain implementation criteria to use the DV360 integration: +> - For web traffic, you must have a client-side `analytics.js` source. +> - For mobile app traffic, you must have a mobile source. + +> info "" +> Since the release of `analytics-ios` version 4, Segment no longer collects IDFA automatically. To collect and pass IDFA to your DV360 integration, follow the steps for Ad Tracking and IDFA in the [Analytics-iOS mobile source](/docs/connections/sources/catalog/libraries/mobile/ios#ad-tracking-and-idfa) documentation. + +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/actions-display-video-360/#consent-mode) and how to set it up. + +## Details + +> info "" +> For users detected to originate from US states with privacy restrictions, using a Google User ID to populate user lists is deprecated, and will be eventually sunset. It's recommended that bidders populate user lists with their hosted match data for these users. + +Keep the following settings and requirements in mind as you set up your DV360 (Actions) Destination. + +- **Audience appears as**: An audience list with the name of your Engage Audience on the **DV360 All Audiences** screen +- **Destination rate limit**: None +- **Lookback window allowed**: 30 days +- **Historical backfill supported**: No +- **Identifiers required (one of the following)**: + - `idfa` (iOS) + - `advertisingId` (Android) + - `anonymousId` (Web) +- **Connection type**: + - Client-side (DoubleClick Floodlight) + - Server-side (DV360) +- **Aliasing supported**: No + +- **Requirements**: + - Business tier Segment customers with Engage + - One of the following sources, depending on type: + - For web: analytics.js + - For mobile app: a mobile source that passes an advertising identifier + - A Google Marketing Platform account + +## Components + +The Segment DV360 integration uses two components, the [DoubleClick Floodlight tag](/docs/connections/destinations/catalog/doubleclick-floodlight/) and Display & Video 360 (Actions) integration. + +### DoubleClick Floodlight tag + +Segment users must add this tag to their web properties. The tag performs several functions, but when enabled for the DV360 integration, it allows Segment to send information about users directly to Google client-side. + +> info "" +> This component is required only if you want to sync audiences based on web traffic. + +### DV360 destination + +The DV360 Destination syncs audience data between Segment and Google Display & Video 360. For more information about enabling the DV360 Destination, [view the setup instructions below](#set-up) below. + +## Set up the DV360 Destination + +Configuring this integration requires action by both you in your Segment workspace, and Google in your Google Marketing Platform account. As a result, the time required to finish configuration and setup can vary. + +### Configure client integration for web traffic + +> info "" +> This step is necessary only if you want to use Google User IDs to build audiences based on website traffic. If you plan to use mobile identifiers only, continue to [Enable and configure the DV360 Destination](enable-and-configure-the-dv360-destination). + +Segment requires the [DoubleClick Floodlight](/docs/connections/destinations/catalog/doubleclick-floodlight/) tag on your website to enable the creation of audiences based on website traffic. This allows Segment to send Google the appropriate identifier (typically `anonymousId`) for users that are in an audience. Google stores these identifiers on its servers and matches them against `google_id`. + +To configure DoubleClick Floodlight: + +> warning "" +> **Prerequisite**: Create a [JavaScript Website](/docs/connections/sources/catalog/libraries/website/javascript/) source in your Segment workspace if one does not exist. Ensure that this source is configured to track visitors to your website. For more information about configuring Javascript sources, see the [Analytics.js Quickstart guide](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/). + +1. In your workspace, visit the **Catalog** and search for the **DoubleClick Floodlight** Destination. +2. Connect your JavaScript website source to the DoubleClick Floodlight destination, and configure the following settings: + 1. **Get DoubleClickID**: `On` + 2. **Google Network Id**: `segment` + 3. Your [Segment write key](/docs/connections/find-writekey/). You can retrieve your write key from the Settings tab in the source. + 4. **DoubleClick Advertiser ID** + - If you use DoubleClick Floodlight for DV360 only, enter `DV360`. + - If you use DoubleClick Floodlight for other use cases in addition to DV360, enter the Advertiser ID from your Doubleclick Floodlight account. +3. Switch the toggle to enable the destination. + +### Enable and configure the DV360 Destination + +1. From your Segment workspace, navigate to **Engage > Engage Settings > Destinations > Add Destination**, then search for **Display and Video 360 (Actions)**. +2. Authenticate using OAuth. Segment asks for permissions to see, edit, create and delete your Audience Partner account data. +3. Switch the toggle to enable the destination. +4. Navigate to the **Mappings** tab, click **Add Mapping** and select **Add to Audience**. +5. Click **Save** and make sure to enable the mapping. +6. On the **Mappings** tab, click **Add Mapping** and select **Remove from Audience**. +7. Click **Save** and make sure you enable the mapping. + +> info "" +> The destination does not have configurable settings until you create an audience, described [here](#create-an-audience-and-finish-dv360-configuration). + +### Create an audience and finish DV360 configuration + +[Create an audience](/docs/personas/audiences) in a new or existing Engage space. After you create the audience, you can select the Display & Video 360 (Actions) Destination you created before. + +> info "" +> These settings are tied to a single audience. Each additional audience you send to DV360 requires you to input these values. + +When you select the destination, you're prompted to enter the destination settings: + +| Setting | Description | +| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Account Type | The type of DV360 account used to sync. Either `Advertiser`, `Partner`, or `Publisher`. **Note:** Select `Publisher` only if you plan to connect to Google Ad Manager. | +| Advertiser ID | The ID of your DV360 Advertiser account. Can be found in your Google Account under **Advertiser Settings > Basic Details > Advertiser ID**. | + +You'll also need to toggle on the Send Track setting. + + +After you complete the set up process, allow up to 24 hours for Google to create the new audience list. Once the list is created, Segment can begin to sync users to that list. Google may require additional time to process the initial audience additions. The entire first sync to DV360 may require 24-48 hours to complete. As a result, the first few audience syncs after you create the audience may fail. + +{% include content/sync-frequency-note.md %} + +## Migrate from Personas Google Display & Video 360 Destination + +Segment will copy all of your existing Personas Display & Video 360 Destination configurations to Display and Video 360 (Actions). Once the migration is completed , you will be notified by email. + + +As of April 2, 2024, Segment no longer requires you to re-authenticate for existing Personas Display & Video 360 destinations. Segment, as an External Data Partner, now uses a set of Segment DMP credentials to authenticate on your behalf. To add Segment as an External Data Partner, open Advertiser Settings, navigate to Linked Accounts, and then enable “Segment DMP”. + +Segment is disabling all existing Personas Display and Video 360 destinations. You can still access your existing configuration, but please refrain from enabling the destination, as it is set to be deprecated. You will no longer be able to create new instances of Personas Display and Video 360. + +image + + +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Segment automatically sends consent as `TRUE` for this destination. Segment uses the [bulk-uploader workflow](https://developers.google.com/authorized-buyers/rtb/bulk-uploader#workflow){:target="_blank"} which requires consented data. Ensure all audiences and journeys are connected to consented audiences. + +{% include components/actions-fields.html %} + +## FAQ +### What is Segment's relationship with Google DV360 and is the data that Segment sends considered to be First or Third party? + +Google considers Segment to be a DMP or Data Onboarder. Audience information pushed from Segment to your DV360 account is considered to be **First-Party** data. + + +### When will my data appear in DV360? + +When you complete the connection between Segment and DV360, it can take from 24 to 48 hours for Google to create the user list. This must complete before Segment can begin to sync users into that list. + + +### What identifiers are needed to enable this integration? + +Google's [documentation](https://developers.google.com/authorized-buyers/rtb/downloads/cookie-bulk-upload-proto){:target="_blank"} provides information about the accepted identifiers for this integration. + + +- To use DV360 with web traffic, you must collect `anonymous_id` through the client-side `analytics.js` source. +- To use DV360 with mobile traffic, you must collect `IDFA`s through Segment's mobile sources. + + +### Why is my audience in DV360 smaller than the audience that I see in Engage? What affects match rates? + +Match rates may differ between Engage and DV360 for the following reasons: + +#### Go-forward data + +When you first preview and create an audience in Engage, the audience may contain many audience members. This is more likely if you select the **Historical Backfill** option. This does not reflect the audience that syncs to DV360 for the following reasons: + + +1. During an audience sync, Segment sends a list of `anon_id` values to Google. Google attempts to match those values in their match table, to find an associated `google_user_id`. +2. To complete this lookup, Google must have both the `anon_id` and have it store along side a matched `google_user_id`. This occurs when a user visits your website with both the Doubleclick Floodlight tag installed, and the DV360 integration completed. + +As a result, you must have Doubleclick Floodlight and the DV360 integration in place before Google can match users and make them available for retargeting. + +To help reduce the difference between Engage and DV360 audience sizes, Segment recommends that you deselect the `Historical Backfill` option when you create the audience that syncs to DV360. + +#### Impact to third-party cookies: browser policies + +The DV360 integration for web traffic relies on Doubleclick Floodlight, which itself relies on a `google_user_id` cookie. While this cookie is “yours”, browsers treat this as a third-party cookie because it is served from Google's servers, and not the same domain as your website. As browsers become more privacy-oriented, they block third-party cookies by default. + +Users who visit your website in Firefox and Safari, and who do not specifically allow third-party cookies, are not identifiable by Doubleclick Floodlight (`google_user_id`). This prevents Google from identifying a match between an `anon_id` sent from Segment, and results in lower match rates. + +#### Impact to third-party cookies: adblockers + +All browser-based adblocking software intentionally blocks most third-party cookies, including the Doubleclick Floodlight cookie necessary for identification. As a result, Google cannot match users who employ adblocking software in their browsers. + +#### IDFA impact: recent Apple announcements + +Apple has announced an updated privacy policy that, while not rolled out yet, impacts the way businesses collect IDFA data. When enacted, this privacy policy will significantly reduce the percentage of users for which IDFA data is collected. This change will result in lower match rates, as both Segment and Google will see a decline in the number of IDFA values sent by Segment, and matched by Google. + +#### Invalid Google IDs + +Sometimes, Google denies IDFA or `google_user_id` values when they consider them to be invalid or inactive. + +#### Modifying list configuration in DV360 + +Any changes to a DV360 list's configuration (for example, modifying the membership expiration from 540 days to a value that matches the time window on the audience) is **very risky** and **will likely** cause mismatches between Engage audiences and the lists in Google. Segment ensures that the integration works successfully only if there are no changes made to the configurations in DV360. DV360 lists are created with parameters that are known to be compatible with Engage. Configurations that differ from Segment's can cause mismatches by removing more users than intended, or by not accepting valid uploads. + + +### Why is the audience size larger in DV360 than in Engage? + +Engage syncs every IDFA or `anonymous_id` value for each user in an audience. When DV360 receives this data, it does not de-duplicate in the event that multiple identifiers map to the same unique user. This may result in a larger audience list in Google compared to Engage. + + +### Why don't I see matches in DV360? + +The most common cause of matches not appearing in DV360 is an error with Doubleclick Floodlight. From the website where tracking is enabled, open the Network inspector, and confirm that outgoing requests to `idsync.segment.com` appear. + + +### How does third-party cookie eradication impact the DV360 Destination? + +Google Chrome has committed to replacing third-party cookies with an alternative, but has not announced a timeframe for that alternative. Segment will not update this integration until these updates from Google are announced. + + +### Can I use Engage audiences to target YouTube ads with this integration? + +No. YouTube (through DV360) does not support the type of lists that Segment provides. + +### Why do I see destination settings after I add my audience, but not when I first enable the destination? + +The DV360 Destination works on a per-audience basis. This enables you to: + +- Send data from different audiences to different DV360 accounts. +- Send data to Google Ad Manager with the same destination. diff --git a/src/connections/destinations/catalog/actions-emarsys/index.md b/src/connections/destinations/catalog/actions-emarsys/index.md index 334b8a11b6..043f4a351e 100644 --- a/src/connections/destinations/catalog/actions-emarsys/index.md +++ b/src/connections/destinations/catalog/actions-emarsys/index.md @@ -2,12 +2,11 @@ title: Emarsys (Actions) Destination hide-boilerplate: true hide-dossier: false -private: true -hidden: true +beta: true id: 63f65c1c42e3bded41f0499c versions: - name: Emarsys (Classic) - link: /docs/connections/destinations/emarsys + link: /docs/connections/destinations/catalog/emarsys/ --- {% include content/plan-grid.md name="actions" %} diff --git a/src/connections/destinations/catalog/actions-equals/index.md b/src/connections/destinations/catalog/actions-equals/index.md new file mode 100644 index 0000000000..4416280fde --- /dev/null +++ b/src/connections/destinations/catalog/actions-equals/index.md @@ -0,0 +1,33 @@ +--- +title: Equals Destination +beta: true +id: 659eb6903c4d201ebd9e2f5c +--- + +{% include content/plan-grid.md name="actions" %} + +[Equals](https://equals.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the only spreadsheet with built-in connections to any database, versioning, and collaboration. Connect your Segment data to Equals and build dashboards or your revenue reports, CAC/LTV analyses, top of funnel conversions, and more based on live data. + +This destination is maintained by Equals. For any issues with the destination, [contact their Support team](mailto:help@equals.com). + +Equals enables anyone, regardless of technical ability, to set up live dashboards and reports that push to Slack, email or Google Slides directly from live Segment event data. + +## Getting started + +Follow the instructions below, or on [Equals' Segment Connection Guide](https://help.equals.com/en/articles/8688872-segment-connection-guide){:target="_blank”} to get started. +Note that Segment is an Enterprise Connection; you will be prompted to schedule a call with an Equals team member after step 2 in the instructions below. + +1. Use your Email Address to sign in to [Equals](https://go.equals.com){:target="_blank”}. +2. Navigate to the [Data Sources page](https://go.equals.com/datasources/new){:target="_blank”}, then select 'Segment'. +3. Click the 'Connect to Segment' button. +4. On the popup screen, copy the URL. It will be used in a later step. +5. Click the Save button on the popup, then click the Save button on the Equals page. +6. From your Segment workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for "Equals". +7. Select Equals and click **Add Destination**. +8. Select an existing Source to connect to Equals. +9. Name your Destination. +10. On the Destination's Settings page, paste in the Equals URL from step 4 then turn on the 'Enable Destination' using the toggle. +11. Click the Save Changes button. +12. Optionally, to configure the data to be sent to Segment, navigate to the Mappings tab and edit the 'Send' Mapping. + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-facebook-conversions-api/images/app_data.png b/src/connections/destinations/catalog/actions-facebook-conversions-api/images/app_data.png new file mode 100644 index 0000000000..50eb6880ae Binary files /dev/null and b/src/connections/destinations/catalog/actions-facebook-conversions-api/images/app_data.png differ diff --git a/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md b/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md index 8d313a9e74..73f6c999ee 100644 --- a/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md +++ b/src/connections/destinations/catalog/actions-facebook-conversions-api/index.md @@ -116,6 +116,26 @@ If you choose this option, each source sends different events, and deduplication Use this approach if you don't want to track users from the browser with Facebook Pixel. By default, Facebook Pixel collects cookie data, as well as browser data such as the IP Address and the User Agent, some of which you might not want to collect. By sending from a Segment server source to Facebook's Conversions API, you can control which identifiers you pass to Facebook. +### Send app events + +App events may be sent through the Conversions API by first setting up a dataset in your Facebook Events Manager. Learn more about passing app events through the Conversions API [here](https://developers.facebook.com/docs/marketing-api/conversions-api/app-events){:target="_blank"}. Learn how to create a dataset [here](https://www.facebook.com/business/help/750785952855662?id=490360542427371){:target="_blank"}. + +#### Configuring app events +Sending app events requires the `action_source` parameter to be set to `app`. + +App events usage is opt-in, and you're required to set the `use_app_data` field to `Yes` before sending app data. + +Additionally, configure the "App Events Fields" object with the required fields: +* `advertiser_tracking_enabled` +* `application_tracking_enabled` +* `version` +* `osVersion` + +> info "" +> The value for the **version** field should be `a2` for Android or `i2` for iOS, as stated in [Facebook's documentation](https://developers.facebook.com/docs/marketing-api/conversions-api/app-events){:target="_blank"}. + +![the app data object](images/app_data.png) + #### Match rate considerations If you use Facebook Conversions API as a stand-alone without certain data fields collected from the browser, the match rate might not be as high as if you included them. You can increase the match rate for events from a server source by including User Data, such as Zip Code, Country and State. @@ -149,6 +169,26 @@ Segment creates a SHA-256 hash of the following fields before sending to Faceboo If you use Facebook Pixel, the Pixel library also hashes the External ID. This means External IDs will match across Facebook Pixel and Facebook Conversions API if they use the External ID for [deduplication](https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events/#fbp-or-external-id){:target="_blank"}. +### Double hashing PII data + +If you hash data before sending it to Segment, and then Segment applies its hashing, this could result in double hashing. Double hashing might make the data unusable for matching purposes on platforms like Facebook, which rely on specific hashing algorithms (like SHA-256) applied to the original PII to match users. If your data involves a lot of PII and PHI, Segment recommendeds that you send this data to Segment in its original, non-hashed format. You can then rely on Segment's privacy tools and destination-specific configurations to ensure that data is hashed appropriately when sent to destinations that require hashed PII. This approach helps maintain the integrity and usability of the data while ensuring privacy and compliance. + +### User data formatting + +Segment applies formatting to User Data Parameters as follows: + +| User Data Field | Formatting applied to field value before hashing | +|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| External ID | All whitespace is removed from string, set to lowercase. | +| Email | All whitespace is removed from string, set to lowercase. | +| First Name, Last Name | All whitespace is removed from string, set to lowercase. | +| Gender | All whitespace is removed from string, set to lowercase. "male" is set to "m", "female" is set to "f". | +| Date of Birth | No formatting is applied. | +| Phone | All whitespace is removed from string. | +| Zip Code | All whitespace is removed from string. | +| State | All whitespace is removed from string and the result is compared against a map object of states and their two-character ANSI abbreviation code. Example: "Texas", "TX", or "tx" in this field will be formatted as "tx". | +| Country | All whitespace is removed from string and the result is compared against a map object of countries and their two-letter ISO 3166-1 alpha-2 country code. Example: "Germany", "germany", or "de" will be formatted as "de". | + ### User Data Parameters Segment automatically maps User Data fields to their corresponding parameters [as expected by the Conversions API](https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters/){:target="_blank"} before sending to Facebook: @@ -169,7 +209,7 @@ Segment automatically maps User Data fields to their corresponding parameters [a ### Server Event Parameter Requirements -Facebook requires the `action_source` server event parameter for all events sent to the Facebook Conversions API. This parameter specifies where the conversions occur. If `action_source` is set to **website**, then the `client_user_agent` and the `event_source_url` parameters are also required. Events sent to the Conversions API that don't meet the requirements may not be available for optimization, targeting, or measurement. +Facebook requires the `action_source` server event parameter for all events sent to the Facebook Conversions API. This parameter specifies where the conversions occur. If `action_source` is set to **website**, then the `client_user_agent` and the `event_source_url` parameters are also required. Events sent to the Conversions API that don't meet the requirements may not be available for optimization, targeting, or measurement. Facebook requires additional fields as well such as, Event Name, Event Type, and User Data. See the full list of required fields [here](https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event/). ### Verify Events in Facebook @@ -179,3 +219,11 @@ After you start sending events, you should start seeing them in twenty minutes. 2. Click on the corresponding pixel. 3. In the Overview tab, look for events where the “Connection Method” is Server. +### Send multiple External IDs + +[Facebook](https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/external-id/){:target="_blank"} allows you to send one External ID per payload as a string, or multiple per payload in an array of External ID strings. Send an array of External IDs through Segment by mapping an array to the `externalId` field when setting up your Actions mappings. + +### Not seeing events in Facebook + +Facebook releases updates to its platform regularly. Those updates can include new requirements for use of the Conversions API. Check Facebook's [Graph API Changelog](https://developers.facebook.com/docs/graph-api/changelog){:target="_blank”} to keep up to date with the current requirements. + diff --git a/src/connections/destinations/catalog/actions-friendbuy-cloud/index.md b/src/connections/destinations/catalog/actions-friendbuy-cloud/index.md index 7d4c588bd9..98adee9a8d 100644 --- a/src/connections/destinations/catalog/actions-friendbuy-cloud/index.md +++ b/src/connections/destinations/catalog/actions-friendbuy-cloud/index.md @@ -17,10 +17,10 @@ If you're using Segment with a Friendbuy referral program you probably want to u The Friendbuy cloud mode destination sends information about your customers and their actions to Friendbuy. It supports the following [Friendbuy MAPI events](https://developers.friendbuy.com/#tracking-events){:target='_blank'}. -- **Track Customer**: Converts Segment [Identify](/docs/connections/spec/identify/) calls to Friendbuy [*track customer* MAPI calls](https://developers.friendbuy.com/#tracking-customer-details). Use this to add your customer ID and other customer data to the information that Friendbuy has about the customer. -- **Track Purchase**: Converts Segment [Order Completed](/docs/connections/spec/ecommerce/v2/#order-completed) calls to Friendbuy [*track purchase* MAPI calls](https://developers.friendbuy.com/#tracking-a-purchase). Use this to send purchase data to Friendbuy and reward advocates based on their friends' purchases. -- **Track Sign-Up**: Converts Segment [Signed Up](/docs/connections/spec/b2b-saas/#signed-up) calls to Friendbuy [*track sign_up* MAPI calls](https://developers.friendbuy.com/#tracking-a-signup). Use this to reward customers for account creation and other sign-up actions. -- **Track Custom Event**: Converts an arbitrary Segment [`analytics.track`](/docs/connections/sources/catalog/libraries/website/javascript/#track) call with an event name and properties of your choosing to a Friendbuy [track custom event MAPI call](https://developers.friendbuy.com/#tracking-a-custom-event). Use this to reward your customers for actions other than purchases or sign-ups. +- **Track Customer**: Converts Segment [Identify](/docs/connections/spec/identify/) calls to Friendbuy [*track customer* MAPI calls](https://developers.friendbuy.com/#tracking-customer-details){:target="_blank”}. Use this to add your customer ID and other customer data to the information that Friendbuy has about the customer. +- **Track Purchase**: Converts Segment [Order Completed](/docs/connections/spec/ecommerce/v2/#order-completed) calls to Friendbuy [*track purchase* MAPI calls](https://developers.friendbuy.com/#tracking-a-purchase){:target="_blank”}. Use this to send purchase data to Friendbuy and reward advocates based on their friends' purchases. +- **Track Sign-Up**: Converts Segment [Signed Up](/docs/connections/spec/b2b-saas/#signed-up) calls to Friendbuy [*track sign_up* MAPI calls](https://developers.friendbuy.com/#tracking-a-signup){:target="_blank”}. Use this to reward customers for account creation and other sign-up actions. +- **Track Custom Event**: Converts an arbitrary Segment [`analytics.track`](/docs/connections/sources/catalog/libraries/website/javascript/#track) call with an event name and properties of your choosing to a Friendbuy [track custom event MAPI call](https://developers.friendbuy.com/#tracking-a-custom-event){:target="_blank”}. Use this to reward your customers for actions other than purchases or sign-ups. ## Benefits of Friendbuy Cloud Mode (Actions) vs Friendbuy Classic diff --git a/src/connections/destinations/catalog/actions-fullstory-cloud/index.md b/src/connections/destinations/catalog/actions-fullstory-cloud/index.md index abf4731767..1375d276aa 100644 --- a/src/connections/destinations/catalog/actions-fullstory-cloud/index.md +++ b/src/connections/destinations/catalog/actions-fullstory-cloud/index.md @@ -21,8 +21,10 @@ FullStory’s cloud mode destination requires that you also use FullStory’s ta The FullStory cloud mode destination sends information about your users and related events to FullStory. It uses [FullStory’s REST APIs](https://developer.fullstory.com){:target="_blank"}. -- **Identify User:** Converts Segment [Identify](/docs/connections/spec/identify/) calls to [FullStory Set User Properties API calls](https://developer.fullstory.com/set-user-properties){:target="_blank"}. Use this to set custom attributes which can be used to search and segment within FullStory. +- **Identify User**: Converts Segment [Identify](/docs/connections/spec/identify/) calls to [FullStory Set User Properties API calls](https://developer.fullstory.com/set-user-properties){:target="_blank"}. Use this to set custom attributes which can be used to search and segment within FullStory. - **Track Custom Event**: Converts Segment [Track](/docs/connections/spec/track/) calls to [FullStory custom event API calls](https://developer.fullstory.com/server-events){:target="_blank"}. Use this to capture more context about your user’s experience on your site or to capture user’s actions in other applications to build a more complete understanding of your user’s overall experience. +- **Identify User V2**: Converts Segment [Identify](/docs/connections/spec/identify/) calls to [FullStory Create User API calls](https://developer.fullstory.com/server/v2/users/create-user/){:target="_blank"}. Use this to upsert a user and their attributes which can be used to search and segment within FullStory. +- **Track Custom Event V2**: Converts Segment [Track](/docs/connections/spec/track/) calls to [FullStory Create Event API calls](https://developer.fullstory.com/server/v2/events/create-events/){:target="_blank"}. Use this to capture more context about your user’s experience on your site or to capture user’s actions in other applications to build a more complete understanding of your user’s overall experience. ### Benefits of FullStory Cloud Mode (Actions) @@ -48,8 +50,15 @@ The FullStory cloud mode destination sends information about your users and rela ### Why am I getting a ‘404 Not Found’ error? -The user for which the API request is being made can not be found in the identified set of users within your FullStory organization. If you expect that user to already exist, you can search for that User ID in FullStory to confirm. Also, double check that you are using an API key from the same organization. +If you are using the original 'Identify User' and 'Track Event' actions and encounter a "404 Not Found" error, the user for which the API request is being made can not be found in the identified set of users within your FullStory organization. If you expect that user to already exist, you can search for that User ID in FullStory to confirm. Also, double check that you are using an API key from the same organization. Data sent server-side for users must match an already existing userId that was sent from a client-side connection. +The new 'Identify User V2' and 'Track Event V2' actions will automatically create users when a user matching the +provided UID is not found. + +### Why can't I propagate GDPR deletions? + +GDPR deletions require an `Admin` or `Architect` API key to propagate. You may also contact FullStory directly for deletions. + {% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-fullstory/index.md b/src/connections/destinations/catalog/actions-fullstory/index.md index 64d5ba3321..301ac7aafb 100644 --- a/src/connections/destinations/catalog/actions-fullstory/index.md +++ b/src/connections/destinations/catalog/actions-fullstory/index.md @@ -15,12 +15,46 @@ versions: [FullStory](https://www.fullstory.com/){:target="_blank"} lets product and support teams easily understand everything about the customer experience. The Segment integration for FullStory helps accurately identify your customers within the FullStory dashboard. +FullStory's device mode Segment integration auto-captures high-fidelity user sessions and allows you to enrich FullStory data by sending user properties, page properties, and custom events from your website so you can apply it to your analysis throughout FullStory. For example, you could build a funnel to analyze drop-off of users who engaged with a certain marketing campaign. + ## Benefits of FullStory Device Mode (Actions) vs FullStory Classic - Greater control over the page properties you send. - Send events specific to individual pages. - Select by name the specific user properties or custom events to send. +### Overview + +The FullStory device mode destination sends information about your users, pages, and related events to FullStory. It uses the [FullStory Browser API](https://developer.fullstory.com/browser/getting-started/){:target="_blank"}. The recommended presets, ending in "V2", use the most up-to-date version of the [FullStory Browser API](https://developer.fullstory.com/browser/getting-started/){:target="_blank"}. The corresponding non-versioned presets use the [legacy FullStory Browser API](https://developer.fullstory.com/browser/v1/getting-started/){:target="_blank"}. + +#### Identify user V2 +If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like the following: + +```javascript +analytics.identify('userId123'); +``` + +When you use an Identify call, Segment calls FullStory's [Set Identity API](https://developer.fullstory.com/browser/identification/identify-users/){:target="_blank"}. Use this to identify a user and set custom attributes which can then be used to search and segment within FullStory. + +If an Identify call contains a `userId`, it will be applied to the identifying `uid` in FullStory. All `traits` will be passed along as custom user properties with the exception of `traits.name` which is mapped to `displayName`. If you set an `anonymousId` in Segment, you can search for it under `segmentAnonymousId` in FullStory. + +#### Track custom event V2 +If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like the following: + +```javascript +analytics.track('Clicked Button'); +``` + +When you use a Track call, Segment calls FullStory's [Track Event API](https://developer.fullstory.com/browser/capture-events/analytics-events/){:target="_blank"}. Use this to capture more context about your user’s experience on your site. + +#### Viewed Page V2 +If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/track/) does. An example call would look like the following: + +```javascript +analytics.page('Retail Page'); +``` + +When you use a Page call, Segment calls FullStory's [Set Page Properties API](https://developer.fullstory.com/browser/set-page-properties/){:target="_blank"}. Use this to set custom page names and properties about pages your users visit. Either `category` or `name` with be mapped to FullStory's `pageName` property. ## Getting started @@ -33,10 +67,7 @@ versions: {% include components/actions-fields.html %} ## Migration from the classic FullStory destination -{% include content/ajs-upgrade.md %} - - Follow the table below to map your existing FullStory destination configuration to FullStory Device Mode (Actions). -{% include components/actions-map-table.html name="fullstory" %} \ No newline at end of file +{% include components/actions-map-table.html name="fullstory" %} diff --git a/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md new file mode 100644 index 0000000000..9fab631ec4 --- /dev/null +++ b/src/connections/destinations/catalog/actions-gainsight-px-cloud/index.md @@ -0,0 +1,32 @@ +--- +title: Gainsight PX Cloud (Actions) Destination +id: 61f83101210c42a28a88d240 +--- + + +{% include content/plan-grid.md name="actions" %} + +[Gainsight PX](https://www.gainsight.com/product-experience/analytics/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. + +This destination is maintained by Gainsight PX. For any issues with the destination, [contact the Gainsight PX Support team](mailto:pxsupport@gainsight.com). + +> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/actions-gainsight-px-cloud) Gainsight PX Cloud Segment destination. There's also a page about the [non-Actions Gainsight PX Cloud destination](/docs/connections/destinations/catalog/gainsight-px-cloud-server). Both of these destinations receive data from Segment. + +## Benefits of Gainsight PX Cloud (Actions) vs Gainsight PX Cloud Classic + +Gainsight PX Cloud (Actions) provides the following benefits over the classic Gainsight PX Cloud destination: + +- **Data Center Support**. The new Actions-based integration allows for the selection of the PX datacenter. This is required for any PX customers based in any data center other than the main US datacenter (accessed via app.aptrinsic.com). + +## Getting started + +1. From the Segment web app, navigate to **Connections > Catalog** and select the **Destinations** tab. +2. Search for *Gainsight PX Cloud (Actions)* and select it. +3. Click **Add destination**. +4. Select an existing Source to connect to Gainsight PX Cloud (Actions). +5. Find your Gainsight PX key. + * Log in to Gainsight PX and navigate to **Settings > Products > Web App**. Enter the URL for your web application and click the **Generate** button. The Tag Key is the value that begins with "AP-" to the right of the URL value. Copy the value to your clipboard. +6. Paste the Gainsight PX Tag Key into the Segment connection settings API Key field. +7. Choose the appropriate data center value in the "Other Settings" Data Center dropdown. If you access the PX instance with app.aptrinsic.com, select 'United States', otherwise, choose the appropriate selection based on the suffix after "app-" in the application's URL. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-gameball/index.md b/src/connections/destinations/catalog/actions-gameball/index.md new file mode 100644 index 0000000000..2d0bdbcfb7 --- /dev/null +++ b/src/connections/destinations/catalog/actions-gameball/index.md @@ -0,0 +1,30 @@ +--- +title: Gameball (Actions) Destination +id: 64d3487dcc68fe039fb6237f +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Gameball](https://www.gameball.co){:target="_blank”} is an all-in-one customer loyalty marketing platform that empowers brands to create personalized retention campaigns, helping them grow and monetize their customer base using cutting-edge gamification strategies. Using Gameball, you can increase customer lifetime value and secure unmatched conversion rates - capturing untapped opportunities. + +This destination is maintained by Gameball. For any issues with the destination, [contact the Gameball Support team.](mailto:support@gameball.co). + +## Benefits of Gameball (Actions) vs Gameball Classic +Gameball (Actions) provides the following benefits over the classic Gameball destination: + +**Fewer settings**: Data mapping for actions-based destinations happens in during configuration, which eliminates the need for most settings. +**Clearer mapping of data**: Actions-based destinations enable you to define the mapping between the data Segment receives from your source, and the data Segment sends to the destination. +**Support for Gameball V3 API**: Gameball (Actions) is built on the latest version of [Gameball APIs](https://developer.gameball.co/api-reference/api-reference){:target="_blank”}. + +## Getting started +1. Go to your [Gameball dashboard](https://app.gameball.co/){:target="_blank”}. Click **Settings** in the bottom left, then click on **Account Integration**. Copy the API Key and Secret Key. +2. From your Segment workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for Gameball. +3. Select Gameball (Actions) and click **Add Destination**. +4. Select an existing Source to connect to Gameball (Actions). +5. Enter the API Key and Secret key in the destination settings in Segment. + +{% include components/actions-fields.html %} + +## Migration from the classic Gameball destination +Keep in mind if you plan to move to Gameball (Actions) from a classic Gameball destination that Gameball (Actions) uses Gameball's HTTP API v3. diff --git a/src/connections/destinations/catalog/actions-google-analytics-4-web/index.md b/src/connections/destinations/catalog/actions-google-analytics-4-web/index.md index 476d03f00e..8e7b228fb4 100644 --- a/src/connections/destinations/catalog/actions-google-analytics-4-web/index.md +++ b/src/connections/destinations/catalog/actions-google-analytics-4-web/index.md @@ -8,63 +8,202 @@ versions: - name: "Google Analytics 4 Cloud" link: '/docs/connections/destinations/catalog/actions-google-analytics-4/' --- - {% include content/plan-grid.md name="actions" %} -[Google Analytics 4](https://support.google.com/analytics/answer/10089681){:target="_blank"} is Google's new Analytics property, which you can use for both websites and applications. Google Analytics 4 has machine learning at its core to help surface insights and give you a more complete understanding of your customers across devices and platforms. +[Google Analytics 4](https://support.google.com/analytics/answer/10089681){:target="_blank"} is Google's Analytics property that you can use for both websites and applications. Google Analytics 4 has machine learning at its core to help surface insights and give you a more complete understanding of your customers across devices and platforms. + +When you have Segment installed, you can use your existing Analytics 2.0 tracking implementation to fulfill your data collection needs with Google Analytics 4. When you enable the Google Analytics 4 Web destination, Segment loads the [gtag.js library](https://support.google.com/analytics/answer/9310895?hl=en#zippy=%2Cin-this-article){:target="_blank"} for you. To avoid duplicate data, remove the native gtag.js script from your page. -When you have Segment installed, you can use your existing tracking implementation to fulfill your data collection needs with Google Analytics 4. When you use the Google Analytics 4 Web destination, Segment loads the [gtag.js library](https://support.google.com/analytics/answer/9310895?hl=en#zippy=%2Cin-this-article){:target="_blank"} for you. +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/actions-google-analytics-4-web/#consent-mode) and how to set it up. ## Getting started -Before you connect Segment to Google Analytics 4, configure a Google Analytics 4 property in your Analytics account. For more information, see Google's article [Set up Analytics for a website and/or app](https://support.google.com/analytics/answer/9304153){:target='_blank'}. +Before you connect Segment to Google Analytics 4, configure a Google Analytics 4 property in your Analytics account and enable any Custom Definitions in your GA4 Admin Panel. For more information, see Google's article [Set up Analytics for a website and/or app](https://support.google.com/analytics/answer/9304153){:target='_blank'}. -To connect the Google Analytics 4 Web destination: +To connect the Google Analytics 4 Web destination: 1. From the Segment web app, click **Catalog**, then click **Destinations**. 2. Search for “Google Analytics 4 Web” in the Destinations Catalog, and select the destination. 3. Click **Configure Google Analytics 4 Web**. -4. Select the web source that will send data to Google Analytics 4 and follow the steps to name your destination. The web source chosen must use [Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/){:target='_blank'}. +4. Select the web source that will send data to Google Analytics 4 and follow the steps to name your destination. The web source chosen must use [Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/). For mobile source tracking, view the [Firebase Destination](/docs/connections/destinations/catalog/firebase/). 5. On the **Settings** tab, under **Basic Settings**, enter in the [Measurement ID](https://support.google.com/analytics/answer/9539598){:target='_blank'} associated with your GA4 web stream. -6. Follow the steps in the Destinations Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customizing-mappings). +6. Set up your event mappings by following the steps in the Destinations Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customizing-mappings). +7. Analytics.js requires an initial Page call to send data to Google Analytics 4 Web. The [Segment snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-add-the-segment-snippet) includes this initial call by default. +8. For GA4 to accept events on page, enable Set Configuration Mapping triggered by the first Segment event called after analytics.load(). Set Configuration Mapping calls the gtag(‘config’) command to enable tracking to your GA4 Measurement ID. -{% include components/actions-fields.html settings="true"%} +After you've set up and enabled the Set Configuration Mapping, enable at least one event in your **Mappings** tab. From there, view your events and parameters using the Google [Realtime](https://support.google.com/analytics/answer/9271392){:target="_blank"} or[DebugView](https://support.google.com/analytics/answer/7201382){:target="_blank"} reports. These two reports show you the events users trigger on your website as they occur. The DebugView report requires additional configuration before you can use it. Additional tools for debugging are to view all your Google enabled tracking via https://tagassistant.google.com(https://tagassistant.google.com){:target=”_blank”} or in your browser’s Dev Tools, view GA4 collect requests by filtering by /collect. + +Google Analytics automatically populates some events and parameters. For example, there are [Automatically Collected](https://support.google.com/analytics/answer/9234069){:target=”_blank”} events collected by triggering the Set Configuration Mapping. Calling gtag(‘config’) and enabling [Enhanced Measurement events](https://support.google.com/analytics/answer/9216061){:target=”_blank”}, which are controlled by toggling “on” in your GA4 Admin panel, use event listeners to send events. All events tracked via GA4 Web populate some commonly used parameters like `page_location` without additional configuration. Review the [Google Analytics event parameters](https://support.google.com/analytics/table/13594742){:target=”_blank” documentation for more information. + +### Recommended events + +Google recommends that you use their [Recommended events](https://support.google.com/analytics/answer/9267735){:target="_blank"} and properties to power certain built-in reports in Google Analytics 4. Segment’s Google Analytics 4 Web destination provides prebuilt mappings to automatically map your Segment spec events to the corresponding Google Analytics 4 events and properties. If your Segment events don’t follow the Segment spec exactly, you can modify the mappings. For example, Segment maps an `Order Completed` event to the Google Analytics 4 `Purchase` event, but if your company uses `Products Purchase` to indicate a purchase, you can map it in the Purchase action’s Event Trigger instead. + +Segment recommends using the prebuilt mappings when possible. However, the Segment spec doesn’t have an equivalent event for every Google Analytics 4 Recommended event. If there are other recommended events you'd like to send, use the [Custom Event action](/docs/connections/destinations/catalog/actions-google-analytics-4-web/#custom-event). For example, to send a `spend_virtual_currency` event, create a mapping for Custom Event, set up your Event Trigger criteria, and input a literal string of `spend_virtual_currency` as the Event Name. You can use the Event Parameters object to add fields that are in the `spend_virtual_currency` event such as `value` and `virtual_currency_name`. Remember to define custom parameters as [custom dimensions and metrics](/docs/connections/destinations/catalog/actions-google-analytics-4-web/#custom-dimensions-and-metrics) within the GA4 Admin panel first. + +### Custom events and event naming + +Before you create a custom event, make sure the event you want to create isn't already collected through an [Automatically Collected event](https://support.google.com/analytics/answer/9234069?sjid=7831609405656395105-NA){:target="_blank"} or recommended as a [Recommended event](https://support.google.com/analytics/answer/9267735?sjid=7831609405656395105-NA){:target="_blank"}. +Google Analytics 4 does not accept custom event names that include spaces. Segment replaces spaces in the Event Name in the Custom Event action with an underscore. As a result, you see custom events as snake_case in Google Analytics 4. + +Event names are case-sensitive in Google Analytics 4. If you would like all event names to be lowercase, use the **Lowercase Event Name** setting when you create a Custom Event mapping and select `Yes` from the dropdown. If this setting is disabled, Google treats event names with different casing as distinct events. + +Custom Events don't appear in some of Google's standard reports; you must set up custom reports for meaningful analysis. + +> info "Custom Events with Item Parameters" +> To pass item parameters, you must use Google Recommended Event names that accept the items array, in other words, Ecommerce Events. Item parameters do not pass to GA4 with a Custom Event name or any other Event name if the items array is not specified as a parameter. + +### Custom dimensions and metrics + +With Google Analytics 4, you must create custom dimensions and metrics, also known as Custom Definitions, within the Google Analytics 4 Admin interface to link event parameters to the corresponding custom dimensions or metrics. When creating the dimension or metric, you can either select a parameter from the list of already collected fields or enter the name of the parameter you plan to collect in the future. For more information, see [Google Analytics 4 Custom dimensions and metrics](https://support.google.com/analytics/answer/10075209?hl=en){:target="_blank"}. + +### Understanding event parameters + +Similar to how properties relate to Segment events, parameters provide additional information about the ways users interact with your website. For example, when someone views a product you sell, you can include parameters that describe the product they viewed, like `product_name`, `category`, and `price`. + +Automatically Collected and Enhanced Measurement events include a defined set of parameters by default. Google also provides a set of required and optional parameters to include with each Recommended event, and you can add more event parameters when you need them. Segment recommends that you review GA4’s list of defined event parameters, as anything beyond that list is a custom event parameter. The [Event collection limits](https://https://support.google.com/analytics/answer/9267744){:target=_blank”} also impact how many Custom Definitions your GA4 instance allows and how many parameters you can send with each event. + +### Conversion events + +Some of Segment's prebuilt [Available Actions](/docs/connections/destinations/catalog/actions-google-analytics-4-web/#available-actions) that map to Google's recommended events are automatically marked as a conversion in your Analytics dashboard. For example, when you add an "Order Completed" event, it will show up in your Analytics dashboard as "purchase" with the **Mark as conversion** toggle toggled on by default. However, for other events, such as "Add to Cart", you must manually toggle the **Mark as conversion** setting on in your Analytics dashboard. If you don't mark the event as a conversion, it will not show up as a conversion in your built-in reports. You can read more [about conversion events](https://support.google.com/analytics/answer/9267568?sjid=1275909514202748631-NA){:target="_blank"} in Google's documentation. + +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Consent mode may involve updates to your sources outside of Segment, such as incorporating a consent management system for consent functionality. + +See [set up consent mode on websites](https://developers.google.com/tag-platform/security/guides/consent?consentmode=advanced#update_consent_state){:target="_blank"} for more information. + +### Set up consent mode + +To enable consent mode for your Google Analytics 4 Web destination: +1. Navigate to **Connections > Destinations** and select your Google Analytics 4 Web** destination. +2. Go to the **Settings** tab of the destination. +3. Click the toggle on for **Enable Consent Mode**, this calls gtag(‘consent’,’default’) with the defined parameters when the gtag library loads. +4. Set the following fields with your organization’s determination of granted or denied: -## FAQ & Troubleshooting + Field | Value + ----- | ------ + Default Ad Storage Consent State | Granted or Denied + Default Analytics Storage Consent State | Granted or Denied + Ad User Data Consent State | Granted or Denied + Ad Personalization Consent State | Granted or Denied -### Custom Event Naming +5. Use your consent management platform to prompt the visitor. Ask the visitor to grant or deny consent for the applicable types. +6. Pass the updated state as properties in the `page()` event after the next page load if you decide to change the consent defaults. For example, -Google Analytics 4 does not accept custom event names that include spaces. Segment replaces spaces in the Event Name in the Custom Event action with an underscore. As a result, you will see custom events snake cased in Google Analytics 4. + ``` + analytics.page('Consent Update', { + 'Ads Storage Consent State': 'false', + 'Analytics Storage Consent State': 'false' + }); + ``` +7. As soon as the page loads and the set configuration fires to the Google Analytics SDK, Segment issues a consent mode update command. Map the properties you defined to collect consent state changes to the Set Configurations Fields mapping. You can choose to do this from 1 of 2 options in steps 4 and 5. + 1. Navigate to **Connections > Destinations** and select your Google Analytics 4 Web destination. + 2. Go to the **mappings** tab of the destination. + 3. Select the mapping you want to edit.' + 4. *(Option 1)* Under the **Select mappings** section, select `Granted` for these fields: + * Ads Storage Consent State + * Analytics Storage Consent State + * Ad User Data Consent State + * Ad Personalization Consent State + You can manually select `Granted` or `Denied` from the dropdown menu for Advanced consent mode settings, and type in `granted` or `denied` for basic consent mode settings. + 5. *(Option 2)* Under the **Select mappings** section, create an event variable to directly grab the value from the payload (for example, `properties.adStorageConsentState`). Ensure it translates to `granted` or `denied`. You can use an insert or [replace function](/docs/connections/destinations/actions/#replace-function) to translate other values to `granted` or `denied`. Do this for these fields: + * Ads Storage Consent State + * Analytics Storage Consent State + * Ad User Data Consent State + * Ad Personalization Consent State -Google Analytics 4 is also case sensitive. If you would like all event names to be lowercase, use the `Lowercase Event Name` setting in the Custom Event action. If this setting is disabled, Google will treat event names with different casing as distinct events. For more information, see [Google Analytics 4 Event name rules](https://support.google.com/analytics/answer/10085872?hl=en&ref_topic=9756175#event-name-rules&zippy=%2Cin-this-article.%2Cin-this-article){:target="_blank"}. +When these properties are available, they send to the `update` command. -### Custom Dimensions & Metrics +If you have any questions setting up consent mode, reach out to [friends@segment.com](mailto:friends@segment.com). -With Google Analytics 4, you must create custom dimensions and metrics within the Google Analytics 4 interface and link event parameters to the corresponding dimension or metric. When creating the dimension or metric, you can either select a parameter from the list of already collected fields or enter the name of the parameter you plan to collect in the future. For more information, see [Google Analytics 4 Custom dimensions and metrics](https://support.google.com/analytics/answer/10075209?hl=en){:target="_blank"}. +{% include components/actions-fields.html settings="true"%} + +## FAQ and troubleshooting -### Debug Mode +### Debug mode -The Google Analytics 4 [debug mode](https://support.google.com/analytics/answer/7201382?hl=en){:target="_blank"} is supported with the Google Analytics 4 Web destination. DebugView displays the events and user properties that Analytics collects from a user in real-time. This can be helpful in troubleshooting your implementation. +The Google Analytics 4 debug mode, [DebugView](https://support.google.com/analytics/answer/7201382?hl=en){:target="_blank"} is supported with the Google Analytics 4 Web destination. DebugView displays the events and user properties that Analytics collects from a user in real-time. This can be helpful when troubleshooting your implementation. ### Send events from both the browser and the server -With Google Analytics 4 Web, events are sent from the browser to GA4. If you use Segment’s [Google Analytics 4 Cloud destination](/docs/connections/destinations/catalog/actions-google-analytics-4/#benefits-of-google-analytics-4-cloud) to send events through the API and tie data between client-side and server-side, you need to pass the same Client ID from the browser and the server. To do this, fetch the Gtag-generated **clientId** on the web client and pass it to Segment as a property. For more information, see [Google Analytics 4 destination: User Identification](/docs/connections/destinations/catalog/actions-google-analytics-4/#user-identification) on the next steps. +With Google Analytics 4 Web, events are sent from the browser to GA4. If you use Segment’s [Google Analytics 4 Cloud destination](/docs/connections/destinations/catalog/actions-google-analytics-4/#benefits-of-google-analytics-4-cloud) to send events through the API and tie data between client-side and server-side, you need to pass the same Client ID from the browser and the server. To do this, fetch the Gtag-generated **clientId** on the web client and pass it to Segment as a property. For more information, see [Google Analytics 4 destination: User Identification](/docs/connections/destinations/catalog/actions-google-analytics-4/#user-identification) on the next steps. Additionally, when using Gtag, Google generates a session_id and session_number when a session begins. The session_id and session_number generated on the client can be passed as Event Parameters to stitch events sent through the API with the same session that was collected client-side, see [Using Gtagjs and Google Analytics 4 Cloud Destination](/docs/connections/destinations/catalog/actions-google-analytics-4/#using-gtagjs-and-google-analytics-4-cloud-destination) for more information and an example. + +The client_id and the session_id are both cookies stored in the user browser. You can use [Google gtag get commands](https://developers.google.com/tag-platform/gtagjs/reference#get){:target=”_blank”} or other cookie methods to parse these values from the _ga cookie and _ga_measurementId cookie: +- If your _ga cookie is GA1.1.1783165678.1701112990 then 1783165678.1701112990 is your client_id +- If your _ga_M12454XDR cookie is GS1.1.1710342977.347.1.1710343074.0.0.0 then 1710342977 is your session_id + +You are not required to send a session number for server-side hits. Session metrics come from the client-side data after GA4 stitches server-side event data to the client-side session. + +> success "" +> Segment recommends that you enable the GA4 Web destination first then incorporate GA4 Cloud destination to augment your client-side tracking, as a hybrid GA4 application is an advanced implementation. Segment also recommends that you have deep knowledge of GA4 session-stitching, troubleshooting, and known caveats of the GA4 Measurement Protocol prior to implementing the Google Analytics 4 destination. ### Additional (unmapped) events are sent to GA4 -Google Analytics 4 collects events triggered by basic interactions with your site. For more information, see [Google Analytics 4 Automatically collected events](https://support.google.com/analytics/answer/9234069?hl=en){:target="_blank"} +Google Analytics 4 collects events triggered by basic interactions with your site. For more information about which interactions are automatically collected, see [Google Analytics 4 Automatically Collected events](https://support.google.com/analytics/answer/9234069?hl=en){:target="_blank"}. ### Data takes a long time to appear in Google's reports -Google may take [24-48 hours](https://support.google.com/analytics/answer/9333790){:target="_blank"} to process data sent to Google Analytics. As a result, the Google Analytics user interface may not reflect the most current data. The Google Analytics [Realtime report](https://support.google.com/analytics/answer/9271392){:target="_blank"} displays activity on your site as it happens. +Google may take [24-48 hours](https://support.google.com/analytics/answer/9333790){:target="_blank"} to process data sent to Google Analytics. As a result, the Google Analytics user interface may not reflect the most current data. The Google Analytics [Realtime report](https://support.google.com/analytics/answer/9271392){:target="_blank"} displays activity on your site as it happens; however, events seen in Realtime reports do not always equate to how the data is processed in the standard reports. This disconnect between events seen in Realtime reports and Standard reports happens when a Custom Definition is not defined in the GA4 Admin panel. ### Data is not sent to Google -Ensure that at least one mapping has been configured and enabled in the destination mappings for an event you want to send to Google Analytics. If no mappings are enabled, the destination does not send events. +For event data to be sent downstream to Google Analytics: + +1. Configure and enable the **Set Configuration Fields** mapping. This mapping is required for data to be sent downstream because it sets configuration to the GA4 Measurement ID indicated in the Settings and establishes data flow using the `config` command. +2. Confirm you call `analytics.page()` on page load. Analytics.js requires an initial Page call to send data to Google Analytics 4 Web. _The Segment snippet includes this initial call by default._ +3. Send data with an event: typically this is a `page_view` as your first event. + + > note "If you toggled Page Views in your Settings to “On”, the page_view event automatically sends when the Set Configuration Mapping is triggered" + > If you need to override this setting for your particular use case, see [Can I override my send_page_view selection that I declared in Settings?](#can-i-override-my-send_page_view-selection-that-i-declared-in-settings) + +If no events are flowing to your GA4 instance, use one of the Debugging Tools to check the sequence of GA4 events. + +### Duplicate `page_view` events in GA4 + +If you are sending multiple `gtag(‘config’)` commands called from Set Configuration mapping on one page before a new DOM has loaded, and you have defined `send_page_view: true` with each ‘Config’ event, you may see duplicate `page_view` events sent to your GA4 measurement id. If this is the case, see Google's documentation on [Ignoring duplicate instances of on-page configuration](https://support.google.com/analytics/answer/9973999?hl=en#:~:text=as%20described%20below.-,Ignore%20duplicate%20instances%20of%20on%2Dpage%20configuration,Click%20Save.,-Give%20feedback%20about){:target="_blank"}. + +If your site is a Single Page Application (SPA), you may want to leave the **Ignore duplicate instances of on-page configuration** toggle disabled in the Google Tag Admin as a new DOM is not called on each new page path. If you have a SPA, disabled the **Ignore duplicate instances of on-page configuration** toggle, and have multiple Set Configuration mappings, use Segment's new **Send Page Views** field mapping to override the `send_page_view` parameter in your Settings. This selection takes precedence over what is defined in the Segment Settings. If you leave the selection for your destination undefined, it will fall back to what you selected in the Segment Settings. + +If you enabled Enhanced Measurement, you might see additional `page_view` events. This happens when you enable the **Page changes based on browser history events** feature in the Advanced settings section of the **pageviews** settings. To avoid double counting page views on history state changes, disable the **Page changes based on browser history events** feature. See Google's [Manual pageviews](https://developers.google.com/analytics/devguides/collection/ga4/views?client_type=gtag#manual_pageviews){:target="_blank"} documentation for more information. + +### Manually send `page_view` events + +If you prefer to keep the **Page Views** setting disabled and manually send `page_view` events, see Google's documentation, [Manually send `page_view` events](https://developers.google.com/analytics/devguides/collection/ga4/views?client_type=gtag#manually_send_page_view_events). + +With Google Analytics 4 Web, you must configure a [Custom Event](/docs/connections/destinations/catalog/actions-google-analytics-4-web/#custom-event) mapping to manually send `page_view` events. When mapping the events, set the Event Name to `page_view`. + +You can now override the send_page_view value defined in the Segment Settings for the GA4 destination. To override the `send_page_view` value, navigate to your Set Configuration Mapping, click “Show More Fields” to expose the field mapping, and select either True or False. This selection takes precedence over what is defined in the Segment Settings. If you leave this selection undefined, Segment uses the selection you made in the Segment Settings. + +#### Tracking UTM Parameters + +Segment automatically tracks UTM parameters when they are present in the URL and sends them to Google. For example, with the following URL, Segment would send `email_variation1&utm_medium=email&utm_source=email_promo&utm_campaign=summer_sale&utm_id=abcd` to Google: +`https://www.example.com/?utm_content=email_variation1&utm_medium=email&utm_source=email_promo&utm_campaign=summer_sale&utm_id=abcd` + +By default, if the UTM values are found in the `page_location` parameter, GA4 automatically maps the campaign parameters to their appropriate value. There is no additional configuration required, unless you want to override what GA4 defines. This is true for both Event mappings and the Set Configuration mapping. If you modify the output of the `page_location` and the UTM parameters are not included, this might result in erroneous acquisition and attribution mapping. + +To observe this feature, trigger a `Page` call with UTM parameters present in the URL and navigate to the **Realtime overview** report in GA4 to see the resulting `page_view` event under the _Event count by Event name_ card. The Acquisition card in the Realtime overview report reflects First User acquisition, but may not reflect the parameters of the event if this was a second session event. + +### Pass Custom Event parameters to all events and Custom Item parameters to all recommended Ecommerce events + +To pass custom event parameters to all events on the page, navigate to your Set Configuration Mapping, click **Show All Fields**, and enter any custom Event Parameters, including page_view. Any event parameters that have the same parameter key as your other event mappings will take precedence over what is set in the Set Configuration Mapping. + +To send custom item parameters, add the custom item parameter name in mappings where there is a Products array. Register your custom item parameter in the GA4 Admin panel if you would like this value processed in the GA4 UI. You can ONLY add custom item parameters in the Products array. If you add custom item parameters as an Event Parameter, they will be registered as an Event Parameter. + +### My Events Send to the wrong Google ID + +In each Event Mapping, there is a “Send To” parameter. Set this to “True” if you would like to include the send_to parameter and only send the event to the measurement_id configured in your settings. If you select “False” or do not enter a selection, GA4 Events will broadcast to all measurement IDs, including Google Ads IDs, on the page. These measurement IDs may be set outside of Segment. For more info on how the send_to parameter works, see Google's documentation on [Group and Route Data](https://developers.google.com/tag-platform/gtagjs/routing){:target="_blank"}. + +### Can I override my send_page_view selection that I declared in the Settings? -### Page Views +Yes. In the Set Configuration Mapping, click Show All Fields and scroll to Send Page Views. Your selection overrides what is set within the Settings. This is helpful if you are updating the user_id or user_properties for all events on the page where you want to call the config command but do not want to send a page_view. -The **Page Views** advanced setting prevents sending the `page_view` included in the gtag.js snippet, not Segment's `analytics.page()` event available in the Analytics.js snippet by default. If you enable this setting, once the page loads, two `page_view` events will still send to the GA4 SDK, one from the Segment snippet and one from the gtag.js snippet. If you see duplicate `page_view` events in your GA4 dashboard, you need to either: +### Differences between the Google Analytics 4 Cloud and Google Analytics 4 Web destinations -1. Disable the **Page Views** advanced setting (set it to *False*) so only Segment's `analytics.page()` sends to the GA4 SDK. Or, -2. Edit or disable the preset **Set Configuration Fields** mapping so only the `page_view` included in the gtag.js snippet sends to the GA4 SDK. +Segment's [Google Analytics 4 Cloud](/docs/connections/destinations/catalog/actions-google-analytics-4/) server-side destination uses Google's Measurement Protocol API to send event data server to server, whereas Segment's [Google Analytics 4 Web](/docs/connections/destinations/catalog/actions-google-analytics-4-web/) device-mode destination loads the gtag.js library client-side and uses Segment's event data to map to gtag.js events directly. Each destination has its own advantages and disadvantages. Your choice between the two depends on your specific use case, technical expertise, and the platforms from which you want to track data. diff --git a/src/connections/destinations/catalog/actions-google-analytics-4/index.md b/src/connections/destinations/catalog/actions-google-analytics-4/index.md index d7d8dbd779..661c681903 100644 --- a/src/connections/destinations/catalog/actions-google-analytics-4/index.md +++ b/src/connections/destinations/catalog/actions-google-analytics-4/index.md @@ -18,6 +18,9 @@ When you have Segment installed, you can use your existing tracking implementati > warning "" > Google Analytics 4 doesn't officially support a pure server-to-server integration. However, Segment monitors the capabilities of the Measurement Protocol API and updates the cloud integration accordingly to achieve a reasonable level of reporting for mutual customers. For full functionality, please see the [Google Analytics 4 Web destination](/docs/connections/destinations/catalog/actions-google-analytics-4-web/). +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/actions-google-analytics-4/#consent-mode) and how to set it up. + ## Benefits of Google Analytics 4 Cloud The Google Analytics 4 Cloud destination provides the following benefits: @@ -40,9 +43,45 @@ To add the Google Analytics 4 Cloud destination: 5. On the **Settings** tab, enter in the [Measurement ID](https://support.google.com/analytics/answer/9539598){:target='_blank'} for web streams or the [Firebase App ID](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference?client_type=firebase#payload_query_parameters){:target='_blank'} for mobile streams. Next, enter in the API Secret associated with your GA4 stream and click **Save**. To create a new API Secret, navigate in the Google Analytics UI to Admin > Data Streams > choose your stream > Measurement Protocol > Create. 6. Follow the steps in the Destinations Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customizing-mappings). + {% include components/actions-fields.html %} -## Universal Analytics & Google Analytics 4 +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Consent mode may involve updates to your sources outside of Segment, such as incorporating a consent management system for consent functionality. + +### Set up consent mode +To enable consent mode for your Google Analytics 4 Cloud destination, you must update the **Ad User Data Consent State** and **Ad Personalization Consent State** for all mappings you want to send with consent. Consent mode supports all actions with Google Analytics 4 Cloud. You can choose from 2 options to enable consent mode for your Google Analytics 4 Cloud destination. + +* **Option 1** + + To enable consent mode for Google Analytics 4 Cloud destination: + 1. Navigate to **Connections > Destinations** and select your Google Analytics 4 Cloud destination. + 2. Go to the **Mappings** tab of the destination. + 3. Select the mapping you want to edit. + 4. Under the **Select mappings** section, find **Ad User Data Consent State**. + 5. Select `GRANTED` in the dropdown that corresponds to **Ad User Data Consent State**. + 6. Select `GRANTED` in the dropdown that corresponds to **Ad Personalization Consent State**. + +* **Option 2** + + Create an event variable to directly grab the value from the payload. To do this: + 1. Navigate to **Connections > Destinations** and select your Google Analytics 4 Cloud destination. + 2. Go to the **Mappings** tab of the destination. + 3. Select the mapping you want to edit. + 4. Under the **Select mappings** section, find **Ad User Data Consent State**. + 5. Select the **Event Variables** tab and create an event variable to directly grab the value from the payload. Ensure it translates to `GRANTED` or `DENIED`. You can use an insert or [replace function](/docs/connections/destinations/actions/#replace-function) to translate other values to `GRANTED`or `DENIED`. + 6. Repeat step 5 for **Ad Personalization Consent State**. + + +If you have any questions setting up consent mode, reach out to [friends@segment.com](mailto:friends@segment.com). + +## Universal Analytics and Google Analytics 4 ### Differences between Universal Analytics and Google Analytics 4 @@ -55,16 +94,16 @@ Google Analytics 4 has different out-of-the-box reports. Google Analytics 4’s ### Migrating from Universal Analytics to Google Analytics 4 > warning "" -> Google announced that all standard Universal Analytics properties will stop processing new hits on July 1, 2023. 360 Universal Analytics properties will stop processing new hits on October 1, 2023. +> Google announced that all standard Universal Analytics properties will stop processing new data on July 1, 2023. 360 Universal Analytics properties with a current order will receive a one-time processing extension ending on July 1, 2024. Learn more about when [Google Analytics 4 will replace Universal Analytics](https://support.google.com/analytics/answer/11583528?sjid=13479291677968058253-NA){:target='_blank'}. Segment’s Google Analytics 4 Cloud integration is a server-side integration with the GA4 Measurement Protocol API. This is similar to Segment’s Google Universal Analytics cloud-mode integration in that all data is sent directly to Google’s servers. Please note that this means client-side functionality, such as [Enhanced Measurement](https://support.google.com/analytics/answer/9216061){:target='_blank'}, may not be available through Segment. In addition, as Google continues to develop the GA4 Measurement Protocol API ahead of general availability of the API, there may be limitations that impact what can be seen in the Google Analytics 4 reports. -#### Recommended Events -Google Analytics 4 requires the use of [recommended events and properties](https://support.google.com/analytics/answer/9267735){:target='_blank'} to power certain built-in reports. Segment’s Google Analytics 4 Cloud destination provides prebuilt mappings to automatically map your [Segment spec](/docs/connections/spec/ecommerce/v2) events to the corresponding Google Analytics 4 events and properties. If your Segment events don't follow the Segment spec exactly, you can modify the mappings. For example, Segment maps "Order Completed" events to the Google Analytics 4 “Purchase” event by default. If your company uses “Products Purchase” to indicate a purchase, this can be mapped in the Purchase action’s Event Trigger instead. +#### Recommended events +Google Analytics 4 requires the use of [recommended events and properties](https://support.google.com/analytics/answer/9267735){:target='_blank'} to power certain built-in reports. Segment’s Google Analytics 4 Cloud destination provides prebuilt mappings to automatically map your [Segment spec](/docs/connections/spec/ecommerce/v2)events to the corresponding Google Analytics 4 events and properties. If your Segment events don't follow the Segment spec exactly, you can modify the mappings. For example, Segment maps "Order Completed" events to the Google Analytics 4 “Purchase” event by default. If your company uses “Products Purchase” to indicate a purchase, this can be mapped in the Purchase action’s Event Trigger instead. Segment recommends using the prebuilt mappings when possible, however the Segment spec doesn't have an equivalent event for every Google Analytics 4 recommended event. If there are other recommended events you would like to send, please use the [Custom Event action](/docs/connections/destinations/catalog/actions-google-analytics-4/#custom-event). For example, to send a `spend_virtual_currency` event, create a mapping for Custom Event, set up your Event Trigger criteria, and input a literal string of "spend_virtual_currency" as the Event Name. You can use the Event Parameters object to add fields that are in the `spend_virtual_currency` event such as `value` and `virtual_currency_name`. -#### Custom Events +#### Custom events In addition to recommended events, you can also send custom events using the [Custom Event action](/docs/connections/destinations/catalog/actions-google-analytics-4/#custom-event). Custom events are events that you name. Custom events don't appear in most standard reports; you need to set up custom reports for meaningful analysis. To create custom events in the Google Analytics 4 web interface, see Google’s [Modify and create events through the user interface](https://support.google.com/analytics/answer/10085872){:target='_blank'}. > info "Event naming limitations" @@ -72,14 +111,14 @@ In addition to recommended events, you can also send custom events using the [Cu In all cases, event names in GA4 are case sensitive and require values in all properties. The Custom Event action includes a **Lowercase Event Name** option, to ensure consistency of all events sent to Google. For more information, see Google's articles [Google Analytics 4 event name rules](https://support.google.com/analytics/answer/10085872?hl=en&ref_topic=9756175#event-name-rules){:target='_blank'} and [Event name limitations](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=firebase){:target="_blank"}. -#### Custom Dimensions and Metrics +#### Custom dimensions and metrics With Google Analytics 4, you must create custom dimensions and metrics within the Google Analytics 4 interface and link parameters to the corresponding dimension or metric. When you create the dimension or metric, you can either select a parameter from the list of already collected fields or enter the name of the parameter you plan to collect in the future. Custom dimensions can be either event-scoped or user-scoped, and custom metrics must be event-scoped. To send parameters to Google Analytics 4, use the Event Parameters or User Properties object available on every action. Only pass flat key-value pairs in the Event Parameters and User Properties objects. Keep in mind that Google silently drops any events that include nested parameters. To achieve parity with Universal Analytics, you should create the same custom dimensions that you defined in Universal Analytics. Additionally, in Google Analytics 4, you should recreate many of the values that you tracked as event dimensions in Universal Analytics, particularly event category and event label. For more information, see [Google Analytics 4 Custom dimensions and metrics](https://support.google.com/analytics/answer/10075209){:target='_blank'}. -#### Tracking Active Users and Sessions +#### Tracking active users and sessions ##### Server-side Implementation using Google Analytics 4 Cloud Destination @@ -94,9 +133,9 @@ Besides Engagement Time in Milliseconds, you can also generate your own `session If you choose to integrate with Google Analytics 4 client-side (either with Segment's Google Analytics 4 Web destination or outside of Segment) _and_ also use Segment's Google Analytics 4 Cloud destination to send events through the API, you will have all the reserved parameters and sessions tracking information available in Google Analytics 4 reports. -When using Gtag, [Google generates a `session_id` and `session_number` when a session begins](https://support.google.com/analytics/answer/9191807?hl=en){:target='_blank'}. The `session_id` and `session_number` generated on the client can be passed as Event Parameters to stitch events sent through the API with the same session that was collected client-side. For events to stitch properly, server-side events must arrive within a 48 hour window of when the client-side events arrive. +When using Gtag, [Google generates a `session_id` and `session_number` when a session begins](https://support.google.com/analytics/answer/9191807?hl=en){:target='_blank'}. The `session_id` and `session_number` generated on the client can be passed as Event Parameters to stitch events sent through the API with the same session that was collected client-side. Additionally, `client_id` must be the same for both client-side and server-side events in order to deduplicate user counts in GA4 (unless User-ID is used as the basis for user identification). For events to stitch properly, server-side events must arrive within a 48 hour window of when the client-side events arrive. -You can check your `session_id` and `session_number` with the [Google Site Tag function](https://developers.google.com/tag-platform/gtagjs/reference){:target='_blank'} or by running this script in your JavaScript console and replacing `G-xxxxxxxxxx` with your Google Analytics 4 Measurement ID: +You can check your `client_id`, `session_id` and `session_number` with the [Google Site Tag function](https://developers.google.com/tag-platform/gtagjs/reference){:target='_blank'} or by running this script in your JavaScript console and replacing `G-xxxxxxxxxx` with your Google Analytics 4 Measurement ID: ```java const sessionIdPromise = new Promise(resolve => { @@ -106,16 +145,21 @@ const sessionNumPromise = new Promise(resolve => { gtag('get', 'G-xxxxxxxxxx', 'session_number', resolve) }); -Promise.all([sessionIdPromise, sessionNumPromise]).then(function(session_data) { +const clientIdPromise = new Promise(resolve => { + gtag('get', 'G-xxxxxxxxxx', 'client_id', resolve) +}); + +Promise.all([sessionIdPromise, sessionNumPromise, clientIdPromise]).then(function(session_data) { console.log("session ID: "+session_data[0]); console.log("session Number: "+session_data[1]); + console.log("client ID: "+session_data[2]); }); ``` -#### User Identification -Segment requires a Client ID or Firebase App Instance ID to send data to Google Analytics 4. The Client ID is the web equivalent of a device identifier and uniquely identifies a given user instance of a web client. By default, Segment sets Client ID to the Segment `userId`, falling back on `anonymousId`. This mapping can be changed within each action if you prefer to map a different field to Client ID. +#### User identification +Segment requires a Client ID or Firebase App Instance ID to send data to Google Analytics 4. The Client ID is the web equivalent of a device identifier and uniquely identifies a given user instance of a web client. By default, Segment sets Client ID to the Segment `userId`, falling back on `anonymousId`. This mapping can be changed within each action if you prefer to map a different field to Client ID. -The Firebase App Instance ID is the mobile equivalent of a device identifier and uniquely identifiers a given Firebase app instance. No default is set for Firebase App Instance ID, as [this value needs to be retrieved through the Firebase SDK](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference?client_type=firebase#payload_post_body){:target='_blank'}. +The Firebase App Instance ID is the mobile equivalent of a device identifier and uniquely identifiers a given Firebase app instance. No default is set for Firebase App Instance ID, as [this value needs to be retrieved through the Firebase SDK](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference?client_type=firebase#payload_post_body){:target='_blank'}. Segment also allows you to send a User-ID with your events. The User-ID feature lets you associate your own identifiers with individual users so you can connect their behavior across different sessions and on various devices and platforms. For more information on User-ID, see Google’s [Measure activity across platforms](https://support.google.com/analytics/answer/9213390){:target='_blank'} and [Reporting: deduplicate user counts](https://support.google.com/analytics/answer/9355949){:target='_blank'}. @@ -123,37 +167,67 @@ There are certain scenarios where sending a User-ID can be helpful. For example, - **Use the Gtag-generated Client ID.** Gtag will set a Client ID automatically. The Client ID is stored in a cookie and can be fetched on the web client. To tie data between client-side and server-side, pass the Gtag-generated Client ID to Segment as a property and use that value as the Client ID in the Google Analytics 4 Cloud destination mappings. - **Use the Segment `userId` for User-ID.** The Segment `userId` should be your company’s canonical user identifier. By setting Google's User-ID to the same value as `userId` on client-side and server-side, you can benefit from cross-platform analytics. In addition, if you use [Firebase to send mobile data to Google Analytics 4](/docs/connections/destinations/catalog/actions-google-analytics-4/#mobile-data), using the same User-ID across web and mobile will ensure users are stitched together across devices. -#### Validating and Comparing Data +#### Validating and comparing data Google recommends a period of dual-collection with both Universal Analytics and Google Analytics 4. This dual-collection approach lets you build a historical record in Google Analytics 4 while continuing to depend on Universal Analytics until you're ready to fully switch over. During this period, you may find it hard to perfectly compare between the two properties because reports and configuration settings vary between Universal Analytics and Google Analytics 4 properties. Google provides guidance on the [conditions that must be met](https://support.google.com/analytics/answer/9964640?hl=en&ref_topic=11192706#comparing){:target="_blank"} in order to compare data in the Realtime reports, as well as [which metrics are comparable versus not](https://support.google.com/analytics/answer/11986666?hl=en&ref_topic=10737980){:target="_blank"}. For a complete map of Universal Analytics functionality to corresponding Google Analytics 4 functionality, please see Google’s [Migration Reference](https://support.google.com/analytics/answer/10607999?hl=en&ref_topic=10737980){:target="_blank"}. -## FAQ & Troubleshooting +## FAQ and Troubleshooting ### Data not sending to Google Ensure that at least one mapping has been configured and enabled in the destination mappings for an event that you would like to reach Google. Without any mappings enabled to trigger on an event that has been ingested by the connected source, the destination will not send events downstream. -### Attribution Reporting +### Attribution reporting Google doesn't currently support passing certain reserved fields to the Google Analytics 4 Measurement Protocol API. This includes attribution data, like UTM parameters. If you rely on attribution reporting, you can either send this data as [custom dimensions](/docs/connections/destinations/catalog/actions-google-analytics-4/#custom-dimensions-and-metrics) or implement a parallel client-side integration to collect this data with gtag.js (web) or Firebase (mobile). -### Debug Mode +### Debug mode The Google Analytics 4 [debug mode](https://support.google.com/analytics/answer/7201382?hl=en){:target="_blank"} only works with a client-side implementation through gtag.js, Google Tag Manager, or Firebase. Because Segment's Google Analytics 4 Cloud integration is server-side and uses the Measurement Protocol API, debug mode is not supported. -### Mobile Data +However, you can use Google's `/debug` endpoint to test your events against Google's Measurement Protocol Validation Server. For more information, see Google's [Validate events](https://developers.google.com/analytics/devguides/collection/protocol/ga4/validating-events?client_type=gtag#:~:text=Protocol%20Validation%20Server-,/debug/mp/collect,-All%20other%20request){:target="_blank”} documentation. + +To validate your events: + +1. Run a test through Segment's [Event Tester](/docs/connections/test-connections/) with the event you're concerned about. +2. Copy the `Request from Segment` value you see. This is the payload that Segment attempts to send to Google. +3. Use an API testing tool, like Postman, to send that payload to Google's `/debug` endpoint. +4. Google's `/debug` endpoint returns a [validation code](https://developers.google.com/analytics/devguides/collection/protocol/ga4/validating-events?client_type=gtag#validation_code){:target="_blank”} and a description of the error. + +### Mobile data To achieve complete reporting, Google recommends use of their Firebase SDKs to send mobile data to Google Analytics 4. To assist in your implementation, Segment has a [Firebase destination](/docs/connections/destinations/catalog/firebase) available for mobile analytics. For more information on linking Google Analytics 4 properties to Firebase, see [Google Analytics 4 Firebase integration](https://support.google.com/analytics/answer/9289234?hl=en){:target="_blank"}. The Segment Google Analytics 4 Cloud destination supports sending mobile app events server-side to supplement your Firebase implementation. To send mobile events server-side, configure the Firebase App ID in the Destination settings. In each mapping, change the Data Stream Type to `Mobile App` and set a Firebase App Instance ID so that data routes to a mobile stream. -### Reserved Names +### Reserved names + +Google reserves certain event names, parameters, and user properties. Google silently drops any events that include [these reserved names](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference?client_type=gtag#reserved_names){:target="_blank"}. Google doesn't accept events in the following conditions: +- event or user property names have spaces in them +- fields with `null` values +- fields or events with reserved names +- fields with a number as the key +- fields or events with a dash (-) character in the name + +### Verifying Event Meet GA4's Measurement Protocol API +**Why are the events returning an error _Param [PARAM] has unsupported value._?** +Google has some requirements/[limitations](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=gtag#limitations){:target="_blank"} imposed by their [Measurement Protocol API](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=gtag){:target="_blank"}. If an event contains `null`/`object`/`array` parameters, GA4 silently drops the event, so Segment does not attempt to send the event but instead returns an error of `Invalid Type` that can be found in the destination's Event Delivery tab. To verify whether an event will return this error, you can send an event to [GA4's debug endpoint](https://developers.google.com/analytics/devguides/collection/protocol/ga4/validating-events?client_type=gtag){:target="_blank"} with an API tool like [Postman](https://www.postman.com/){:target="_blank"}. + +### Data takes a long time to appear in Google's reports + +Google may take [24-48 hours](https://support.google.com/analytics/answer/9333790){:target='_blank'} to process data sent to Google Analytics. As a result, the Google Analytics user interface may not reflect the most current data. The Google Analytics [Realtime report](https://support.google.com/analytics/answer/9271392){:target="_blank"} displays activity on your site as it happens. + +### Events with timestamps older than 72 hours are not showing on Google's end + +Because [Google's Measurement Protocol API](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference?client_type=gtag#payload_post_body){:target='_blank'} only accepts events that are backdated by up to 72 hours, GA4 can't accept events older than 72 hours. + +### Google Optimize Support -Google reserves certain event names, parameters, and user properties. Google silently drops any events that include [these reserved names](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference?client_type=gtag#reserved_names){:target="_blank"}. Google also will not except events where event or user property names have spaces in them. If you notice that your data isn't appearing in Google, please check that you're not using a reserved name. +The Google Analytics 4 Cloud destination does not support Google Optimize. This destination operates in cloud-mode (sending events from Segment servers to Google Analytics using the Measurement Protocol API), which prevents the required [Optimize SDK](https://support.google.com/optimize/answer/11287798?visit_id=637903946258690719-978290187&rd=1){:target="_blank"} snippet from loading on the page. -### Data taking a long time to appear in Google's reports +### Client/server-side event deduplication +Google doesn't offer guidance around how to deduplicate the same event coming in server and client side. As a result, Segment recommends that you not send the same event into Google Analytics 4 from two different locations such that you would expect Google to deduplicate one of the events out of their pipeline. You can [deduplicate user counts](https://support.google.com/analytics/answer/9355949?hl=en){:target="_blank"} using the `User ID` field, but you cannot deduplicate whole events in the Google platform as far as Segment is aware. -Google may take [24-48 hours](https://support.google.com/analytics/answer/9333790) to process data sent to Google Analytics. As a result, the Google Analytics user interface may not reflect the most current data. The Google Analytics [Realtime report](https://support.google.com/analytics/answer/9271392){:target="_blank"} displays activity on your site as it happens. diff --git a/src/connections/destinations/catalog/actions-google-campaign-manager/index.md b/src/connections/destinations/catalog/actions-google-campaign-manager/index.md new file mode 100644 index 0000000000..9e6abaecdf --- /dev/null +++ b/src/connections/destinations/catalog/actions-google-campaign-manager/index.md @@ -0,0 +1,70 @@ +--- +title: Google Tag for Campaign Manager +strat: google +hide-boilerplate: true +hide-dossier: false +id: 64f2434e5066280a0e7f1ab3 +hidden: true +private: true +beta: true +versions: + - name: "Google Tag for Campaign Manager" + link: '/docs/connections/destinations/catalog/actions-google-analytics-4/' +--- + +{% include content/plan-grid.md name="actions" %} + +[Google Tag for Campaign Manager](https://support.google.com/analytics/answer/12325075){:target="_blank"} (formerly known as DoubleClick Floodlight) is Google's tool to measure ad impressions and report on conversions. With this integration, Segment customers can make use of their existing tracking implementation to send data to Campaign Manager 360 without having to manage additional tags or code on their site. + +When you have Segment installed and enable this destination, Segment takes care of loading the Google Tag (gtag.js library) for you, ensuring data is forwarded to your Floodlight configuration in Campaign Manager. + + +## Getting Started +Before you connect Segment to Google Tag for Campaign Manager, ensure you have set up your Floodlight configurations in Campaign Manager. +1. Navigate to the Segment web app, select Connections, then click on Destinations. +2. Search for "Google Tag for Campaign Manager" in the Destinations Catalog and click on the destination. +3. On the destination's overview page, click **Add destination**. +4. Select the appropriate source that will forward data to Campaign Manager and click **Next**. +5. On the Setup page, give your destination a name and click **Create destination**. +6. On the Settings tab: + * Enter the Advertiser ID found under Floodlight > Configuration in Campaign Manager. + * Set **Allow Ad Personalization Signals**, if needed. + * Decide if you want to enable Conversion Linker which helps with first-party cookie tracking. + * Enable the destination by toggling **Enable Destination** on. + +Once you've enabled your destination, Segment will begin forwarding the appropriate events and conversions to your Floodlight configurations. + + +## Sales Activity + +Capture monetary conversion data like revenue, order quantity, and transaction ID. + +### Configuration Fields: + +- **activityGroupTagString**: Identifier for the Floodlight activity group. +- **activityTagString**: Identifier for the Floodlight activity. +- **enableDynamicTags**: Toggle for dynamic tags. +- **countingMethod**: Conversion counting method (`transactions`, or `items_sold`). +- **transactionId**: Unique transaction ID. +- **revenue**: Total revenue of a transaction. +- **quantity**: For `transactions` counting method, this is typically is set to 1, for `items_sold`, the quantity of items sold. +- **uVariables**: Additional custom Floodlight variables. +- **dcCustomParams**: Custom data for event snippets. + + + +## Counter Activity + +Track non-monetary conversion data such as unique users, conversions, and session length. + +### Configuration Fields: + +- **activityGroupTagString**: Identifier for the Floodlight activity group. +- **activityTagString**: Identifier for the Floodlight activity. +- **enableDynamicTags**: Toggle for dynamic tags. +- **countingMethod**: Conversion counting method (`standard`, `unique`, or `per_session`). +- **sessionId**: Unique session ID (relevant for `per_session` counting). +- **uVariables**: Custom Floodlight variables. +- **dcCustomParams**: Custom data for event snippets. + +--- diff --git a/src/connections/destinations/catalog/actions-google-enhanced-conversions/images/google-enhanced-conversions-migration.png b/src/connections/destinations/catalog/actions-google-enhanced-conversions/images/google-enhanced-conversions-migration.png new file mode 100644 index 0000000000..586c538db2 Binary files /dev/null and b/src/connections/destinations/catalog/actions-google-enhanced-conversions/images/google-enhanced-conversions-migration.png differ diff --git a/src/connections/destinations/catalog/actions-google-enhanced-conversions/images/mapping-fields.png b/src/connections/destinations/catalog/actions-google-enhanced-conversions/images/mapping-fields.png new file mode 100644 index 0000000000..efb87cbaac Binary files /dev/null and b/src/connections/destinations/catalog/actions-google-enhanced-conversions/images/mapping-fields.png differ diff --git a/src/connections/destinations/catalog/actions-google-enhanced-conversions/index.md b/src/connections/destinations/catalog/actions-google-enhanced-conversions/index.md index ef618cc4a2..5d1056a01d 100644 --- a/src/connections/destinations/catalog/actions-google-enhanced-conversions/index.md +++ b/src/connections/destinations/catalog/actions-google-enhanced-conversions/index.md @@ -6,7 +6,13 @@ hide-dossier: false id: 60ae8b97dcb6cc52d5d0d5ab --- -The Google Ads Conversions destination enables you to upload offline conversions and conversion adjustments to Google Ads in a privacy safe way. With this server-side destination, you can upload conversions to the [Google Ads API](https://developers.google.com/google-ads/api/docs/conversions/overview){:target="_blank"} and tie them to a user's online click or phone call. In addition, you can improve the accuracy of your conversion measurement by sending conversion enhancements, restatements, and retractions. +The Google Ads Conversions destination enables you to upload offline conversions and conversion adjustments to Google Ads in a privacy safe way. With this server-side destination, you can upload conversions to the [Google Ads API](https://developers.google.com/google-ads/api/docs/conversions/overview){:target="_blank"} and tie them to a user's online click or phone call. In addition, you can improve the accuracy of your conversion measurement by sending conversion enhancements, restatements, and retractions. + +> warning "Upload Enhanced Conversion (Legacy) Actions will be deprecated after June 30th, 2024" +> Segment will begin migrating all enabled Upload Enhanced Conversion (Legacy) mappings to the updated Upload Conversion Adjustment mappings on June 7th, 2024. **After Segment migrates your mappings, you must take action to prevent data loss**. For more information, see the [Automatic migration from Upload Enhanced Conversion (Legacy) Action](#automatic-migration-from-upload-enhanced-conversion-legacy-action) documentation. + +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/actions-google-enhanced-conversions/#consent-mode) and how to set it up. ## Getting started 1. From the Segment web app, click **Catalog**, then click **Destinations**. @@ -17,27 +23,104 @@ The Google Ads Conversions destination enables you to upload offline conversions 6. On the **Settings** tab, authenticate with Google using OAuth. Click **Connect to Google Ads Conversions**. Follow the prompts to authenticate using OAuth, with a Google account that is a member of your Google Ads account. 7. Follow the steps in the Destinations Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customizing-mappings). -> info "" -> When you use the "Upload Enhanced Conversion (Legacy)" action, Segment sends data to the legacy Enhanced Conversions API. To authenticate into the legacy API and send enhancement data, Segment needs your Conversion ID and Conversion Label. -> -> The Conversion ID is a global setting because it's an account-level ID that's the same for all conversion actions in your Google Ads account. -> -> The Conversion Label is unique to each conversion action and is therefore configured per mapping. Find the Conversion ID and Conversion Label in your Google Ads account using the instructions in the article [Google Ads conversions](https://support.google.com/tagmanager/answer/6105160?hl=en){:target="_blank"}. +{% include components/actions-fields.html settings="true"%} -> info "" -> When you use the "Upload Click Conversion", "Upload Call Conversion", and "Upload Conversion Adjustment" actions, Segment sends data to the new Google Ads API. -> -> To authenticate into the Google Ads API, Segment needs your Customer ID and Conversion Action ID. The Customer ID is a global setting because it's an account-level ID that's the same for all conversion actions in your Google Ads account. The Conversion Action ID is unique to each conversion action and is configured per mapping. The Conversion Action ID can only be found in the browser URL of your given conversion action under the `ctId` parameter. For example, if the URL is `https://ads.google.com/aw/conversions/detail?ocid=00000000&ctId=576882000`, your Conversion Action ID is `576882000`. +## Migrate from your legacy Upload Enhanced Conversion Action +To migrate from the legacy Upload Enhanced Conversion Action to the updated Upload Conversion Adjustment Action: -> info "" -> Conversion ID, Conversion Label, Customer ID, and Conversion Action ID should always be different values. +1. Navigate to the Google Ads Conversions destination in your workspace and select the **Settings** tab. +2. On the Settings tab, enter your Conversion ID and Customer ID into the named fields. +2. Update the following fields for the Upload Conversion Adjustment Action mapping: + - Conversion Action ID + - Adjustment Type +3. Replicate as many fields from your original mapping as possible, using the following table for reference. -{% include components/actions-fields.html settings="true"%} +Review the [Upload Conversion Adjustment Action](/docs/connections/destinations/catalog/actions-google-enhanced-conversions/#upload-conversion-adjustment) section for more details about each field. + +| Upload Enhanced Conversion (Legacy)| Upload Conversion Adjustment | Default Mapping | +|------------------------|----------------------------|--------------------------------------| +| conversion_label | N/A | `$.properties.conversion_label` | +| email | email_address | `$.properties.email` or `$.traits.email` or `$.context.traits.email` | +| transaction_id | order_id | `$.properties.orderId` | +| user_agent | user_agent | `$.context.userAgent` | +| conversion_time | conversion_timestamp | `$.timestamp` | +| value | N/A |` $.properties.total` | +| currency_code | N/A | `$.properties.currency` | +| is_app_incrementality | N/A |` false` | +| pcc_game | N/A | `false` | +| phone_number | phone_number | `$.properties.phone` or `$.traits.phone` | +| first_name | first_name | `$.properties.firstName` or `$.traits.firstName` | +| last_name | last_name | `$.properties.lastName` or `$.traits.lastName` | +| street_address | street_address | `$.properties.address.street` or `$.traits.address.street` | +| city | city | `$.properties.address.city` or `​​$.traits.address.city` | +| region | state | `$.properties.address.state` or `$.traits.address.state` | +| post_code | postal_code | `$.properties.address.postalCode` or `$.traits.address.postalCode` | +| country | country | `$.properties.address.country` or `$.traits.address.country` | +| N/A | gclid | Default Not Available | +| N/A | adjustment_timestamp | Default Not Available | +| N/A | restatement_value | Default Not Available | +| N/A | restatement_currency_code | Default Not Available | + + +### Automatic migration from Upload Enhanced Conversion (Legacy) Action +The Upload Enhanced Conversion action relies on the Google Enhanced Conversion Legacy API, which will be deprecated on June 30th, 2024. + +On June 7, 2024, Segment will begin migrating all enabled legacy Upload Enhanced Conversion mappings to the new Upload Conversion Adjustment mapping, preserving as many mapping fields as possible. Migrated mappings will have the same names as your legacy mappings, with `[Migrated]` appended. For example, if your mapping was named "Enhanced Conversions", Segment would name your migrated mapping "Enhanced Conversions [Migrated]". + +![A screenshot of the Google Enhanced Conversions mappings page, with migrated mappings disabled.](images/google-enhanced-conversions-migration.png) + +After this migration occurs, you must take the following steps: +1. Open the your Google Ads Conversions destination and select the **Settings** tab. +2. Enter your Conversion ID and Customer ID into their respective fields. Find information about what these values are in the [destination settings](#destination-settings). +3. Select the **Mappings** tab. +4. Update the Conversion Action and Adjustment Type fields in the Upload Conversion Adjustment mapping to match the fields outlined in the above table. ![A screenshot of a migrated mapping, with the required fields outlined in black.](images/mapping-fields.png) +5. Enable the migrated mapping(s). +6. Disable the legacy Upload Enhanced Conversion mappings. + +To migrate your mapping yourself, use the steps in the [Migrate from your legacy Upload Enhanced Conversion Action](#migrate-from-your-legacy-upload-enhanced-conversion-action) documentation. + +Segment will deprecate all legacy Upload Enhanced Conversion legacy actions after June 30th, 2024. + +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. -## FAQ & Troubleshooting +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. -### Enhanced Conversions +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Consent mode may involve updates to your sources outside of Segment, such as incorporating a consent management system for consent functionality. + +### Set up consent mode + +To enable consent mode for your Google Ads Conversions destination, you must update the **Ad User Data Consent State** and **Ad Personalization Consent State** for all of your Upload Call Conversion and Upload Click Conversion actions. You can do this in 1 of 2 ways: + +* **Option 1:** + 1. Navigate to **Connections > Destinations** and select your Google Ads Conversion destination. + 2. Go to the **Mappings** tab of the destination. + 3. Select the mapping you want to edit. + 4. In the **Select mappings** section, select `GRANTED` from the dropdown menu for **Ad User Data Consent State** and **Ad Personalization Consent State**. + +* **Option 2:** + 1. Navigate to **Connections > Destinations** and select your Google Ads Conversion destination. + 2. Go to the **Mappings** tab of the destination. + 3. Select the mapping you want to edit. + 4. In the **Select mappings** section, for **Ad User Data Consent State** and **Ad Personalization Consent State**, select the **Event Variables** tab and create an event variable to directly grab the value from the payload. Ensure it translates to `GRANTED`, `DENIED`, or `UNSPECIFIED`. You can use an insert or [replace function](/docs/connections/destinations/actions/#replace-function) to translate other values to `GRANTED`, `DENIED`, or `UNSPECIFIED`. + +If you send `DENIED` for any of the two consent states, it results in an error and the data won't send to Google. For more information, see [FAQ about the EU user consent policy for Customer Match upload partners](https://support.google.com/google-ads/answer/14310715?hl=en){:target="_blank"}. + +If you have any questions setting up consent mode, reach out to [friends@segment.com](mailto:friends@segment.com). + + +## FAQ and troubleshooting + +### Conversion ID, Customer ID, and Conversion Action ID should always be different values + +Conversion ID and Customer ID are global settings because it’s an account-level ID that’s the same for all conversion actions in your Google Ads account. + +The Conversion Action ID is unique to each conversion action and is configured per mapping. The Conversion Action ID can only be found in the browser URL of your given conversion action under the `ctId` parameter. For example, if the URL is `https://ads.google.com/aw/conversions/detail?ocid=00000000&ctId=576882000`, your Conversion Action ID is `576882000`. + +### Enhanced conversions [Enhanced conversions](https://support.google.com/google-ads/answer/11062876){:target="_blank"} is a feature that can improve the accuracy of your conversion measurement and unlock more powerful bidding. It supplements your existing conversion tags by sending hashed, first-party conversion data from your website to Google in a privacy safe way. You can use the "Upload Conversion Adjustment" action to send enhancements to the Google Ads API. In order to send enhanced conversions, you must record first conversions using the standard Google Ads Conversion tag (Gtag). Segment offers a [Google Ads (Gtag) destination](/docs/connections/destinations/catalog/google-ads-gtag/) so you can use your existing Segment implementation to activate Gtag. Enhancements can be sent to web conversion actions that have **Turn on enhanced conversions** by API enabled. @@ -46,16 +129,22 @@ Conversions tracked by other means, such as importing goals from Google Analytic > info "" > To send enhancements for conversions that are initially tracked with Gtag, an Order ID (Transaction ID) must be implemented in the Gtag **and** the same Order IDs must be sent with the corresponding enhancement data. This is required for Google to successfully process your enhancement data. -### Enhanced Conversions for Leads +### Enhanced conversions for leads -[Enhanced conversions for leads](https://developers.google.com/google-ads/api/docs/conversions/upload-identifiers){:target="_blank"} allows you to use hashed, first-party user-provided data from your website lead forms for offline lead measurement. When you upload your leads, the provided hashed information is used to attribute back to the Google Ad campaign. In order to send enhanced conversions for leads, you can use the "Upload Click Conversion" action. Instead of sending GCLID, send an email address or phone number of the user for Segment to hash and send to Google Ads. +[Enhanced conversions for leads](https://developers.google.com/google-ads/api/docs/conversions/upload-identifiers){:target="_blank"} allows you to use hashed, first-party user-provided data from your website lead forms for offline lead measurement. When you upload your leads, the provided hashed information is used to attribute back to the Google Ad campaign. In order to send enhanced conversions for leads, you can use the "Upload Click Conversion" action. According to Google, if you do not have GCLID at your source payload, you have to pass user identifiers, at least email or phone number in your mappings, for Google to make the match. A conversion must be addressed to an existing profile. If there's not a match, Google responds with a failure. -### Refreshing Access Tokens +### Refreshing access tokens When you use OAuth to authenticate into the Google Ads Conversions destination, Segment stores an access token and refresh token. Access tokens for Google Ads Conversions expire after one hour. Once expired, Segment receives an error and then uses the refresh token to fetch a new access token. This results in two API requests to Google Ads Conversions, one failure and one success. Because of the duplicate API requests, you may see a warning in Google for unprocessed conversions due to incorrect or missing OAuth credentials. This warning is expected and does not indicate data loss. Google has confirmed that conversions are being processed, and OAuth retry behavior will not cause any issues for your web conversions. Whenever possible, Segment caches access tokens to reduce the total number of requests made to Google Ads Conversions. -### Sending App Conversions for Incrementality Studies (Legacy Enhanced Conversions API only) +### Resolving an invalid_conversion_action_type error + +This error indicates that the conversion action specified in the upload request has not been set up for conversion uploads, as outlined in [Google's Ads documentation](https://developers.google.com/google-ads/api/reference/rpc/v15/ConversionUploadErrorEnum.ConversionUploadError#invalid_conversion_action_type){:target="_blank”}. + +To resolve this, ensure that the ConversionActionType value in Google Ads is correctly configured. + +### `The required field was not present., at conversions[0].gclid` Error -The legacy Enhanced Conversions API does not offer standard reporting for app conversions. As such, Google requires that you set up a new web conversion action specifically for the purposes of app incrementality studies. To send app conversions in your incrementality study, use the "Upload Enhanced Conversion (Legacy)" action. Be sure to input the Conversion Label associated with your incrementality study **and** set the App Conversion for Incrementality Study field to `true`. You should create separate web conversion actions in Google Ads for each app event you want to send data for. +Events going to Google for this integration require a `GCLID` field, an `email`, or a `phone_number`. If one of those identifiers isn't being sent properly, then you may see the `The required field was not present., at conversions[0].gclid` error. To fix this, double check that at least one of those fields is being passed to Google on each payload. diff --git a/src/connections/destinations/catalog/actions-google-sheets/index.md b/src/connections/destinations/catalog/actions-google-sheets/index.md index 096639ddee..e6d9191e4f 100644 --- a/src/connections/destinations/catalog/actions-google-sheets/index.md +++ b/src/connections/destinations/catalog/actions-google-sheets/index.md @@ -38,3 +38,7 @@ The Record Identifier mapping is used to make a distinction between adding a new ### How do I define the columns in my spreadsheet? The Fields mapping controls which fields in your model will be written as columns. Input the desired column name(s) on the left, and select the data variable that will populate the value for that column on the right. Please note, at least one field must be configured to send data to Google Sheets otherwise no columns will be created or synced. + +### How are columns formatted when synced to my spreadsheet? + +When syncing data to Google Sheets, the columns will be arranged alphabetically, based on the names defined in the Fields mapping. diff --git a/src/connections/destinations/catalog/actions-heap/index.md b/src/connections/destinations/catalog/actions-heap/index.md index 2dc93e8ae0..42acf0083c 100644 --- a/src/connections/destinations/catalog/actions-heap/index.md +++ b/src/connections/destinations/catalog/actions-heap/index.md @@ -17,9 +17,6 @@ versions: > success "" > **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Heap destination. There's also a page about the [non-Actions Heap destination](/docs/connections/destinations/catalog/heap/). Both of these destinations receive data from Segment. - -{% include content/ajs-upgrade.md %} - ## Benefits of Heap (Actions) vs Heap Classic Heap (Actions) provides the following benefits over the classic Heap destination: diff --git a/src/connections/destinations/catalog/actions-hubspot-cloud/images/scopeApproval.png b/src/connections/destinations/catalog/actions-hubspot-cloud/images/scopeApproval.png new file mode 100644 index 0000000000..3f64d1824e Binary files /dev/null and b/src/connections/destinations/catalog/actions-hubspot-cloud/images/scopeApproval.png differ diff --git a/src/connections/destinations/catalog/actions-hubspot-cloud/index.md b/src/connections/destinations/catalog/actions-hubspot-cloud/index.md index f1b329b42b..93c253f58b 100644 --- a/src/connections/destinations/catalog/actions-hubspot-cloud/index.md +++ b/src/connections/destinations/catalog/actions-hubspot-cloud/index.md @@ -12,12 +12,17 @@ versions: {% include content/plan-grid.md name="actions" %} -HubSpot is an all-in-one marketing tool that helps attract new leads and converts them into paying customers, with features like landing page creation and email automation. +HubSpot is an all-in-one marketing tool that helps attract new leads and converts them into paying customers, with features like landing page creation and email automation. When you use the HubSpot Cloud Mode (Actions) destination, Segment sends your data to [HubSpot's REST API](https://developers.hubspot.com/docs/api/overview){:target="_blank"}. > warning "" -> The **Upsert Company** action is not compatible with the Segment Event Tester. As a result, Segment recommends using other tools to test and troubleshoot the creation and updates of companies in HubSpot. +> The **Upsert Company** action is not compatible with the Mapping Tester on the mappings page if Associate Contact is set to **Yes**. As a result, Segment recommends using the Event Tester or other tools to test and troubleshoot creating and updating companies in HubSpot. +> +> Note that for the company to contact association to work, you are required to trigger an Upsert Contact action before triggering an Upsert Company action. Contacts created with batch endpoint can not be associated to a Company from the Upsert Company Action. + +> warning "" +> **Behavioral Events (Legacy)** are only supported with [Hubspot Classic Destination](/docs/connections/destinations/catalog/hubspot/). ## Benefits of HubSpot Cloud Mode (Actions) vs HubSpot Classic @@ -31,6 +36,8 @@ HubSpot Cloud Mode (Actions) provides the following benefits over the classic Hu - **Support for custom behavioral events**. Send [custom behavioral events](https://developers.hubspot.com/docs/api/analytics/events){:target="_blank"} and event properties to HubSpot. - **Create records in custom objects**. Use your Segment events to create records in any standard or custom object in your HubSpot account. +> note "" +> A HubSpot Enterprise Marketing Hub account is required to send Custom Behavioral Events. ## Getting started @@ -38,7 +45,8 @@ HubSpot Cloud Mode (Actions) provides the following benefits over the classic Hu 2. Search for **HubSpot Cloud Mode (Actions)** in the Destinations Catalog, and select the destination. 3. Click **Configure HubSpot Cloud Mode (Actions)**. 4. Select the source that will send data to HubSpot Cloud Mode (Actions) and follow the steps to name your destination. -5. On the **Settings** tab, authenticate with HubSpot using OAuth. Your user must be a [super admin](https://knowledge.hubspot.com/settings/hubspot-user-permissions-guide#super-admin){:target="_blank"} in the HubSpot account to authenticate the connection. +5. On the **Settings** tab, authenticate with HubSpot using OAuth. Your user must be a [super admin](https://knowledge.hubspot.com/settings/hubspot-user-permissions-guide#super-admin){:target="_blank"} in the HubSpot account to authenticate the connection. Click **Connect app**. +![Hubspot Scope Approval Screen](images/scopeApproval.png) 6. Follow the steps in the Destinations Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customize-mappings). 7. Enable the destination and configured mappings. @@ -47,19 +55,52 @@ HubSpot Cloud Mode (Actions) provides the following benefits over the classic Hu {% include components/actions-fields.html %} -## FAQ & Troubleshooting + +## Support for association between two custom object records in upsert custom object records +To associate two records, it's mandatory to have these three fields: **Search Fields to associate** , **ObjectType to associate**, and **Association Label**. If any of these three fields aren't configured, the association skips. + +Field | Details +----- | -------- +Search Fields to associate | This finds a unique record of custom object based on key-value search properties so that records can be associated together.
    * An association record fails if there is more than one record returned from the search association object.
    * An association skips if no record is found with the data provided in key:value format. +ObjectType to associate | To associate the newly created and updated custom object record with another object type, select the object type you want it to be associated with. +Association Label | Select an association label between both the object types. From the HubSpot Dashboard, you can create associations between any type of object. To create an association label:
    1. Log in to the [HubSpot Dashboard](https://app.hubspot.com/){:target="_blank"}.
    2. Go to **Data Management > Objects > Custom Objects**.
    3. Go to the **Associations** tab and click **Create association label**. + +## FAQ and troubleshooting ### How do I send other standard objects to HubSpot? Segment provides prebuilt mappings for contacts and companies. If there are other standard objects you would like to create records in, please use the **Create Custom Object Record** action. For example, to create a deal in HubSpot, add a mapping for Create Custom Object Record, set up your Event Trigger criteria, and input a literal string of "deals" as the Object Type. You can use the Properties object to add fields that are in the [deals object](https://developers.hubspot.com/docs/api/crm/deals){:target="_blank"}, such as `dealname` and `dealstage`. The same can be done with other object types (for example, tickets, quotes, etc). Ending fields that are to go to HubSpot outside of the properties object isn't supported. This includes sending [associations](https://developers.hubspot.com/docs/api/crm/associations){:target="_blank"}. Please note, Segment only supports creating new records in these cases; updates to existing records are only supported for contacts and companies. - +### How do I send `Page` events to HubSpot? +The [Track Page View action](/docs/connections/destinations/catalog/actions-hubspot-web/#track-page-view) is only available in [HubSpot Web (Actions) destination](/docs/connections/destinations/catalog/actions-hubspot-web/). As a workaround, with HubSpot Cloud Mode (Actions) destination, you can use the [Custom Behavioral Event](/docs/connections/destinations/catalog/actions-hubspot-cloud/#send-custom-behavioral-event) to send Page events to Hubspot. You'll need to [follow Hubspot's instructions](https://knowledge.hubspot.com/analytics-tools/create-custom-behavioral-events-with-the-code-wizard){:target="_blank"} to create a custom behavioral event for `Page Viewed` in HubSpot. ### Why aren't my custom behavioral events appearing in HubSpot? HubSpot has several limits for custom behavioral events, including a limit on the number of event properties per event. Each event can contain data for up to 50 properties. If this limit is exceeded, the request will fail. See [HubSpot documentation](https://knowledge.hubspot.com/analytics-tools/create-custom-behavioral-events#define-the-api-call){:target="_blank"} for other limits. -> note "" -> A HubSpot Enterprise Marketing Hub account is required to send Custom Behavioral Events. +### How do I resolve a `403` error for custom behavioral events? +`403` errors indicate that Segment is unable to send your event to HubSpot because the account connected doesn't have sufficient permissions. If you're observing `403` errors for Custom Behavioral Events, ensure that your HubSpot account is a `HubSpot Enterprise Marketing Hub` account. After upgrading your account to `Enterprise Marketing Hub`, **Reauthorize** from the **Settings** page of your destination to resolve the `403` errors. + +### Why can't I set an entire object for the Other properties field? + +This destination doesn't allow selecting an entire object for the Other properties field. HubSpot rejects API calls if a property name doesn't match with HubSpot's internal name. When working with a large object of key/value pairs, map each key/value pair to prevent rejection. This ensures that every key matches the pre-created property names in HubSpot. ### Does the HubSpot Cloud Mode (Actions) destination support EU data residency? Yes. HubSpot will automatically redirect API requests directly to an EU data center if your HubSpot instance is on an EU data center. See more in HubSpot's [Routing API Traffic](https://product.hubspot.com/blog/routing-api-traffic){:target="_blank"} article. +### How do I attribute a custom behavioral event with a user token instead of Email? +Event payloads should contain an email with either a valid format, empty string, or a `null` value. As a result, the user token takes precedence and is validated in a `Send custom behavioral event` mapping. Segment can't deliver the event to your destination if the email is invalid. + +### How can I disable or delete a destination from Segment? +Follow the instructions in the docs to [disable](/docs/connections/destinations/actions/#disable-a-destination-action) or [delete](/docs/connections/destinations/actions/#delete-a-destination-action) a destination action from Segment. + +### How can I uninstall an app from my HubSpot account? +Follow the steps mentioned [here](https://knowledge.hubspot.com/integrations/connect-apps-to-hubspot#uninstall-an-app){:target="_blank"} to uninstall or disconnect an app from your HubSpot account. + +### How does disconnecting and uninstalling affect a user's data and HubSpot account? +Segment immediately stops sending data to HubSpot after you disconnect and uninstall a HubSpot account. + +### Understanding HubSpot's `date` and dateTime` custom property types +If you plan on sending a _date_ value that includes time data to your mapped HubSpot custom properties, select HubSpot's `dateTime` property type in HubSpot. If you plan to send a _date_ value that does not contain time data, select the `date` property value in HubSpot. For more information about custom property types, see HubSpot's [Custom objects](https://developers.hubspot.com/docs/api/crm/crm-custom-objects#properties){:target="_blank”} documentation. + +If you send a _date_ value that contains time data to a custom property in HubSpot with a `date` property type, the event might fail due to an "**Invalid Date Error**." + +Both of HubSpot's _date_ property types each accept ISO 8601 formatted values, but only the `dateTime` property type accepts values that include time data. diff --git a/src/connections/destinations/catalog/actions-hyperengage/index.md b/src/connections/destinations/catalog/actions-hyperengage/index.md new file mode 100644 index 0000000000..6f48d9d027 --- /dev/null +++ b/src/connections/destinations/catalog/actions-hyperengage/index.md @@ -0,0 +1,34 @@ +--- +title: Hyperengage (Actions) Destination +hide-boilerplate: true +hide-dossier: true +beta: true +private: true +id: 651c1db19de92d8e595ff55d +--- + +{% include content/plan-grid.md name="actions" %} + +[Hyperengage](https://hyperengage.io/){:target="_blank"} tracks thousands of data points to trigger smart alerts on hidden opportunities when the accounts are ready for upsell, or likely to churn. By integrating product data into your GTM strategy, Hyperengage's platform empowers CSM’s and AE’s to achieve up to 5x higher lead conversion and better retention and adoption. + +## Benefits of Hyperengage (Actions) + +Hyperengage (Actions) offers several advantages: + +- **Seamless Data Mapping**: Hyperengage streamlines the process of syncing your user and account data. When you link your data with Segment, Hyperengage automatically processes Segment's Identify, Track, and Group calls, eliminating the need for manual API integrations. +- **Pre-configured Mappings**: The Hyperengage (Actions) Destination has prebuilt mappings tailored for Hyperengage with all the necessary parameters, reducing the need for manual customization. +- **Direct Data Transfer**: Data moves straight from Segment to Hyperengage, eliminating the need for third-party intermediaries. +- **Event Tracking and User Identification**: With Segment's Actions-based destination, you can keep track of events and identify users and organizations in Hyperengage. + +## Getting started + +1. From the Segment web app, navigate to **Connections > Catalog**, then select **Destinations**. +2. In the Destinations Catalog, search for "Hyperengage" and select the Hyperengage (Actions) destination. +3. Click **Add destination**. +4. Choose an existing source to connect to Hyperengage (Actions) and click **Next**. +5. Enter a name for your destination and click **Create destination**. +6. Open the [Hyperengage App](https://hyperengage.io/){:target="_blank"}, proceed to **Integration Settings**, and copy the API Key and Workspace Identifier. +7. Open the Segment app, navigate to your Hyperengage (Actions) destination, and paste the API Key and Workspace Identifier into the destination's settings page. + + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-insider-audiences/index.md b/src/connections/destinations/catalog/actions-insider-audiences/index.md new file mode 100644 index 0000000000..81c6b27f0f --- /dev/null +++ b/src/connections/destinations/catalog/actions-insider-audiences/index.md @@ -0,0 +1,50 @@ +--- +title: Insider Audiences (Actions) +id: 643698ffee21b544f6aa756a +hide-boilerplate: true +hide-dossier: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Insider](https://useinsider.com/integration/segment/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} Growth Management Platform (GMP) helps digital marketers drive growth across the funnel. Insider GMP helps marketers deliver personalized journeys across the web, mobile web, mobile apps, messaging, email, and ad channels using the unified data. + +This destination is maintained by Insider. For any issues with the destination, contact the [Insider Support team.](mailto:insiderhelp@useinsider.com){:target="_blank"} + +## Getting started + +> info "Prerequisites" +> Before connecting to the [Insider Audiences (Actions) destination](/docs/connections/destinations/catalog/actions-insider-audiences/), you must have an Insider Account, Account Name, and a [Unified Customer Database API Key](https://academy.useinsider.com/docs/api-authentication-tokens){:target="_blank"}. + +To add the Insider Audiences Destination: + +1. From your Segment workspace, navigate to **Connections > Catalog** and select the **Destinations** tab. + +2. Search for **Insider Audiences** and select the destination. + +3. Click **Add destination**. + +4. Select the space in Engage to use as the Source as this destination only supports sending Engage Audiences to Insider. + +5. Name your destination on the settings tab. + +6. Add the following settings to your Insider Destinations: + + - **Account Name**: Your Insider Account (Partner) Name. + - **API Key**: Your Unified Customer Database API Key. See how you can generate the API key in the [Insider Academy API Authentication Tokens](https://academy.useinsider.com/docs/api-authentication-tokens#generate-api-key){:target="_blank”} documentation. + +7. Click **Save** Changes. + +8. In the Mappings tab, click **New Mapping** and select **Sync Engage Audience to Insider**. + +9. Go to the Settings tab and enable the destination. + +Your Insider destination is now ready to receive audiences, and your segment will start to populate over at Insider Audiences. To use the segment, select Segment Audience Name from your segmentation over at the Insider InOne panel. If you enable track option, Insider also receives the events defined on Segment Panel with the same name. + +Be aware that, populating all user information might take a while to process. + +{% include components/actions-fields.html %} + +## Migration from the classic Insider destination + +If you’re already using the Insider (Classic) Destination, you’re not expected to have breaking changes when upgrading to the Insider (Actions) destination. You can configure the new Actions mode destination and connect it to the same source(s) as the Classic destination and manually verify it before fully switching over. diff --git a/src/connections/destinations/catalog/actions-insider-cloud/index.md b/src/connections/destinations/catalog/actions-insider-cloud/index.md new file mode 100644 index 0000000000..a05cf98b3c --- /dev/null +++ b/src/connections/destinations/catalog/actions-insider-cloud/index.md @@ -0,0 +1,45 @@ +--- +title: Insider Cloud Mode (Actions) +id: 643697f531f98a978f414453 +versions: + - name: Insider Destination + link: /docs/connections/destinations/catalog/insider/ +--- + +{% include content/plan-grid.md name="actions" %} + +[Insider](https://useinsider.com/integration/segment/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} Growth Management Platform (GMP) helps digital marketers drive growth across the funnel. Insider GMP helps marketers deliver personalized journeys across the web, mobile web, mobile apps, messaging, email, and ad channels using unified data. + +This destination is maintained by Insider. For any issues with the destination, contact the [Insider Support team.](mailto:insiderhelp@useinsider.com){:target="_blank”} + +## Benefits of Insider (Actions) vs Insider Classic + +Insider (Actions) provides the following benefits over the classic Insider destination: + +- **Adjustable Mappings**: By using Insider (Actions), you can map your events and attributes to Insider events and attributes, and easily adjust as needed. +- **Data Consistency**: Pre-Built Mappings can help you to integrate Insider faster and ensure data consistency between Insider and Segment. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. + +2. Find the Destinations Actions item in the left navigation, and click it. + +3. Click Configure Insider. + +4. Select an existing Source to connect to Insider Cloud Mode (Actions) and click **Next**. + +5. Give your destination a name and click **Create destination**. + +6. On the settings page for your destination, add the following settings: + + - **Account Name**: Your Insider Account (Partner) Name. + - **API Key**: Your Unified Customer Database API Key, see how you can generate API key in the [Insider Academy API Authentication Tokens](https://academy.useinsider.com/docs/api-authentication-tokens#generate-api-key){:target="_blank”} documentation. + +7. Enable your destination and click **Save**. + +{% include components/actions-fields.html %} + +## Migration from the classic Insider destination + +If you’re already using Insider (Classic) Destination, you’re not expected to have breaking changes when upgrading to the Insider (Actions) destination. You can configure the new Actions mode destination and connect it to the same source(s) as the Classic destination and manually verify it before fully switching over. diff --git a/src/connections/destinations/catalog/actions-intercom-cloud/index.md b/src/connections/destinations/catalog/actions-intercom-cloud/index.md index 02cc17ed7b..b62ec0b0d3 100644 --- a/src/connections/destinations/catalog/actions-intercom-cloud/index.md +++ b/src/connections/destinations/catalog/actions-intercom-cloud/index.md @@ -24,6 +24,9 @@ Intercom Cloud Mode (Actions) provides the following benefits over the classic I - **Granular control over data sent.** You can customize the conditions under which the events are sent to Intercom. - **Support for lead creation.** You can create contacts with a role of `lead`, associate them with a company, send events for them, and convert them to a `user`. +## Limitations of Intercom Cloud Mode (Actions) + +The Intercom Cloud Mode (Actions) destination doesn't have access to Intercom’s chat widget. Implement the [Intercom Web Actions](/docs/connections/destinations/catalog/actions-intercom-web/) destination if you need access to Intercom's chat widget. ## Getting started @@ -40,7 +43,7 @@ Intercom Cloud Mode (Actions) provides the following benefits over the classic I ## FAQ & Troubleshooting ### Why is a company I created missing from my Intercom dashboard? -If a company is created without an attached user, the company does not appear on Intercom's dashboard. This is expected. Once a user is attached to the company, it should appear in the list of companies. +If a company is created without an attached user, the company does not appear on Intercom's dashboard. This is expected. Once a user is attached to the company, it should appear in the list of companies. You can associate a company with a user by providing your Identify Contact mapping with a user's `External ID`, `Email Address`, or `Contact ID`. ### Why isn’t a user getting attached to a company? When you use the Identify Company action, Segment creates or updates a company's information. In the same action, Segment also attaches the user in your group call to that company. If the user doesn't exist in Intercom when the action runs, Segment creates or updates the company but can't attach the user. Ensure the user is created in Intercom first. diff --git a/src/connections/destinations/catalog/actions-intercom-web/index.md b/src/connections/destinations/catalog/actions-intercom-web/index.md index 42d77ffb60..bcbd869c67 100644 --- a/src/connections/destinations/catalog/actions-intercom-web/index.md +++ b/src/connections/destinations/catalog/actions-intercom-web/index.md @@ -28,8 +28,23 @@ Intercom Web (Actions) provides the following benefits over the classic Intercom - **Clearer mapping of data.** Actions-based destinations enable you to define the mapping between the data Segment receives from your source, and the data Segment sends to the destination. - **Granular control over data sent.** You can customize the conditions under which the events are sent to Intercom. - **Selectively shows the Intercom chat widget.** + +### Intercom's chat widget -## Getting Started +The [Intercom Cloud Mode (Actions)](/docs/connections/destinations/catalog/actions-intercom-cloud/) destination doesn't have access to Intercom’s chat widget. Only the [Intercom Web (Actions)](/docs/connections/destinations/catalog/actions-intercom-web/) destination has access to this. + +If you're using the [Analytics.js source](/docs/connections/sources/catalog/libraries/website/javascript/), use the Intercom Web Mode (Actions) destination which sends data directly to Intercom from the client-side by loading the Intercom SDK directly onto your website. + +However, [Intercom Cloud Mode (Actions)](/docs/connections/destinations/catalog/actions-intercom-cloud/) sends data to Segment, after which Segment forwards the data to Intercom. This allows Segment users to send data to Intercom from sources that are incompatible with their SDK. + +When you configure the Segment Intercom destination in device-mode, you'll have access to Intercom's chat widget without loading Intercom separately outside of Segment. + +To access the Intercom Messaging Box, you'll need to configure and connect the Intercom Web (Actions) destination to your Analytics.js source. + +> success "" +> Visit the [Destination Overview docs](/docs/connections/destinations/#connection-modes) to learn the difference between cloud and device modes. + +## Getting started 1. From the Segment web app, navigate to **Connections > Catalog**. 2. Search for **Intercom Web (Actions)** in the Destinations Catalog, and select the destination. @@ -39,4 +54,21 @@ Intercom Web (Actions) provides the following benefits over the classic Intercom 6. Follow the steps in the Destinations Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customizing-mappings). 7. Enable the destination and configured mappings. +> info "Regional Data Hosting in the EU and Australia" +> For Regional Data Hosting in the EU and Australia, you'll need an Intercom plan that [supports regional data hosting](https://www.intercom.com/help/en/articles/5778275-additional-details-on-intercom-regional-data-hosting){:target="_blank"}. + +> info "" +> Segment doesn't support the creation of **Leads** for Intercom Web. Segment recommends using [Intercom Cloud Mode](/docs/connections/destinations/catalog/actions-intercom-cloud/) to support leads creation. + {% include components/actions-fields.html settings="true"%} + +## Troubleshooting + +### Requests to Intercom return a 404 response +If you are seeing 404 responses in your browser's network tab, you've likely encountered one of two issues: + +- You set the wrong App ID on the Intercom Actions (Web) destination settings page. +- You set the wrong Regional Data Hosting value on the Intercom Actions (Web) destination settings page. Intercom gates regional endpoints by plan level, so you may not have access to EU data hosting. + +### Intercom does not support rETL event batching +The Intercom (Web) Actions destination does not support the bulk contacts endpoint, and therefore is unable to support batching events in rETL. diff --git a/src/connections/destinations/catalog/actions-ironclad/index.md b/src/connections/destinations/catalog/actions-ironclad/index.md index acd84add46..612f48d14e 100644 --- a/src/connections/destinations/catalog/actions-ironclad/index.md +++ b/src/connections/destinations/catalog/actions-ironclad/index.md @@ -14,9 +14,6 @@ id: 63c874d328bd6bd1aa1f90a0 Ironclad maintains this destination. Contact [support@ironcladhq.com](mailto:support@ironcladhq.com) with any questions. - -{% include content/ajs-upgrade.md %} - ## Benefits of Ironclad Clickwrap (Actions) Ironclad (Actions) provides the following benefits: diff --git a/src/connections/destinations/catalog/actions-iterable/index.md b/src/connections/destinations/catalog/actions-iterable/index.md new file mode 100644 index 0000000000..cafad4bb25 --- /dev/null +++ b/src/connections/destinations/catalog/actions-iterable/index.md @@ -0,0 +1,83 @@ +--- +title: Iterable (Actions) Destination +hide-boilerplate: true +id: 645babd9362d97b777391325 +hide-dossier: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Iterable](https://www.iterable.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a cross-channel marketing platform that powers unified customer experiences and empowers you to create, optimize and measure every interaction across the entire customer journey. + +This destination is maintained by Iterable. For any issues with the destination, [contact the Iterable Support team](mailto:support@iterable.com). + +> success "" +> This page is about the [Actions-framework](/docs/connections/destinations/actions/) Iterable Segment destination. There's also a page about the [non-Actions Iterable destination](/docs/connections/destinations/catalog/iterable/). Both of these destinations receive data from Segment. + +## Benefits of Iterable (Actions) vs Iterable Classic + +Iterable (Actions) provides the following benefit over Iterable Classic: + +- **Transparent data mapping**. The Classic Iterable destination receives data from Segment and converts Segment events to Iterable's format using hard coded mappings that are unable to be adjusted. The Iterable (Actions) destination allows clients to fully define their own mappings of Segment events, ensuring they receive data structured specifically for their needs. + +## Getting Started + +Follow these steps to connect the Iterable (Actions) destination to your Segment sources: + +1. Access the Segment web app and click on **Catalog**. +2. In the Catalog, use the search function to find "Iterable". Select the **Iterable (Actions)** destination from the results, and choose which of your sources to connect the destination to. + + +1. From the Segment web app, navigate to **Connections > Catalog > Destinations**. +2. Click the **Destination Actions** category item in the left navigation. +3. Search for **Iterable (Actions)** and select it. +4. Click **Configure Iterable (Actions)**. +5. Select an existing Source to connect to Iterable (Actions). +6. Complete the Destination Settings as listed below. + +{% include components/actions-fields.html %} + +## Important differences from the classic Iterable destination + +Since the release of Iterable's Classic Segment destination, Iterable has expanded its support for multiple project types. To determine the appropriate identifier for your project type, please refer to the list of available project types and their respective identifiers found at the following link: [Project Types and Unique Identifiers](https://support.iterable.com/hc/en-us/articles/9216719179796-Project-Types-and-Unique-Identifiers){:target="_blank”}. + +### Creating or Updating Users + +The method by which you identify users depends on the project type you use: + +#### Email-based Projects +In email-based projects, it is necessary to include the email to successfully create a user in Iterable. Once both the email and `userId` have been set in Iterable, the `userId` can be utilized for any future user updates. + +#### UserID-based Projects +For userID-based projects, a unique `userId` is required for creating a user in Iterable. While it is optional to add an email to a userID-based user profile, all subsequent user updates must be performed using the `userId`. + +#### Hybrid Projects** +In hybrid projects, you have the flexibility to choose between using a unique email or a `userId` to create a user in Iterable. + +In Iterable's previous classic destination, when making Identify calls, certain context fields were automatically mapped to user profiles. However, this behavior has been changed. Please note that the following context fields are no longer automatically mapped to Iterable user profiles during Identify calls: + +- app +- device +- ip +- locale +- page +- timezone + +To include these fields in user profiles, pass them as traits with Identify calls. This change offers more control and customization options for managing user data within Iterable. + +Additionally, the integration has been updated to support explicit mappings for updating the `phoneNumber` user profile field, as well as support of the `mergeNestedObject` boolean field in user update calls. + +### Custom Events + +In UserID and Hybrid projects, when a passed ``userId`` doesn't match an existing user, Iterable creates a new user automatically. In email-based projects, tracking a custom event for an unidentified user will not create a user profile. + +To ensure proper user profile creation in email-based projects: + +- Call the Identify method with both a ``userId`` and an `email` to create a user profile. +- After you create the user profile, proceed with tracking the custom event for that user. + +If you follow this approach, you can guarantee the creation of user profiles and accurately track custom events within Iterable for email-based projects. + +### Commerce Events + +In the classic destination of Iterable, cart updates were associated with Segment's `Product Added` and `Product Removed` events. However, in the Action destination, there have been updates to the default mappings. Now, custom events titled `Cart Updated` are routed to Iterable's Update Cart API. diff --git a/src/connections/destinations/catalog/actions-iterate/index.md b/src/connections/destinations/catalog/actions-iterate/index.md index cdbb4e0f5c..65b6f409b3 100644 --- a/src/connections/destinations/catalog/actions-iterate/index.md +++ b/src/connections/destinations/catalog/actions-iterate/index.md @@ -2,24 +2,18 @@ title: Iterate (Actions) Destination hide-boilerplate: true hide-dossier: true -hidden: true -private: true +beta: true id: 62fec615a42fa3dbfd208ce7 --- - {% include content/plan-grid.md name="actions" %} - + [Iterate](https://iteratehq.com){:target="_blank"} helps you harness customer insights across your whole business with the world’s leading Customer Insights Manager. Put customer insights at the center of your business with user-friendly research tools that look and feel like your brand. With mobile, website and email surveys that are highly targeted, user-friendly, and on-brand, you can learn directly from your visitors, customers, and users. Iterate maintains this destination. See [Iterate's documentation](http://help.iteratehq.com/en/articles/6515486-segment-integration){:target="_blank"} or contact [support@iteratehq.com](mailto:support@iteratehq.com) with any questions. - - -{% include content/ajs-upgrade.md %} - ## Benefits of Iterate (Actions) @@ -29,7 +23,7 @@ Iterate (Actions) provides the following benefits: - **More control** - Actions-based destinations enable you to define the mapping between the data Segment receives from your sources, and the data Segment sends to Iterate. - **Default property mappings** - Default mappings from the Segment like userId, userTraits, and more, allow data to be mapped correctly without any setup required. - + ## Getting started @@ -40,16 +34,9 @@ Iterate (Actions) provides the following benefits: 5. Select an existing Source to connect to Iterate (Actions). 6. Set your Embed API Key. See [Getting your Embed API Key](#getting-your-embed-api-key) for details. - {% include components/actions-fields.html %} - - ## Get your Embed API Key To get your Embed API Key: diff --git a/src/connections/destinations/catalog/actions-jimo/index.md b/src/connections/destinations/catalog/actions-jimo/index.md new file mode 100644 index 0000000000..0fc4c1e8bb --- /dev/null +++ b/src/connections/destinations/catalog/actions-jimo/index.md @@ -0,0 +1,20 @@ +--- +title: Jimo (Actions) Destination +id: 652d4cf5e00c0147e6eaf5e7 +beta: true +--- +{% include content/plan-grid.md name="actions" %} + +[Jimo](https://usejimo.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps you to publish personalized product experiences to elevate adoption and user engagement without code as a layer on top of your app. + +This destination is maintained by Jimo. For any issues with the destination, [contact their Support team](mailto:support@usejimo.com). + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for "Jimo (Actions)". +2. Select Jimo (Actions) and click **Add Destination**. +3. Select an existing Source to connect to Jimo (Actions). +4. Open your [Jimo dashboard](https://i.usejimo.com/settings/general){:target="_blank"}, find and copy your **project id**. +5. Return to Segment and open the destination settings for the Jimo (Actions) destination that you just created. Enter your Jimo **project id**. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-kafka/index.md b/src/connections/destinations/catalog/actions-kafka/index.md new file mode 100644 index 0000000000..c114335dca --- /dev/null +++ b/src/connections/destinations/catalog/actions-kafka/index.md @@ -0,0 +1,101 @@ +--- +title: Kafka Destination +beta: true +id: 65dde5755698cb0dab09b489 +--- + +{% include content/plan-grid.md name="actions" %} + +[Kafka](https://kafka.apache.org/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides a highly scalable and fault-tolerant messaging system that enables real-time data processing and stream processing at scale. When integrated with Segment, Kafka serves as a powerful backbone for managing and processing event data collected by Segment, allowing businesses to efficiently ingest, route, and analyze data across various applications and systems in real time. + +## Getting started + +### Create the Kafka Destination + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for "Kafka". +2. Select the "Kafka" tile and click **Add Destination**. +3. Select an existing Source to connect to Kafka. +4. Enter a name for your Kafka destination. + +### Configure the Kafka Destination + +The way you've configured your Kafka Cluster informs the authentication and encryption settings you'll need to apply to the Segment Kafka Destination. You may need the assistance of someone technical to provide values for the following Settings: + +
      +
    1. + On the Settings tab, enter values into the **Client ID**, **Brokers** and **Authentication Mechanism** setting fields. +
    2. +
    3. + Populate fields based on the value you selected from the Authentication Mechanism field: +
        +
      • + Plain or SCRAM-SHA-256 / 512 authentication: provide values for Username and Password fields. +
      • +
      • + AWS authentication: provide values for AWS Access Key ID and AWS Secret Key fields, and optionally for the AWS Authorization Identity field. +
      • +
      • + Client Certificate authentication: provide values for the SSL Client Key and SSL Client Certificate fields. +
      • +
      +
    4. +
    5. + Populate the **SSL Certificate Authority** field, if necessary. +
    6. +
    7. + Save your changes and proceed to [Configure the Send Action](#configure-the-send-action). +
    8. +
    + +### Configure the "Send" Action + +
      +
    1. + Select the Mappings tab and add a new **Send** mapping. +
    2. +
    3. + Select a Topic to send data to. This field should auto-populate based on the credentials you provided in the Settings tab. +
    4. +
    5. + Map your payload using the **Payload** field.
      _(Optional)_: Specify partitioning preferences, Headers and Message Key values. +
    6. +
    7. + Save and enable the Action, then navigate back to the Kafka destination's Settings tab to enable and save the Destination. +
    8. +
    + +{% include components/actions-fields.html %} + +## FAQ + +### Which Kafka Platforms are supported? + +The Kafka Destination can send data to Topics on self-hosted Kafka Clusters, or to Clusters hosted on Managed Service platforms like **Confluent Cloud** and **Aiven**. + +### Which data formats are supported? + +Segment sends data to Kafka in JSON format only. Segment does not yet support other formats, like Avro or Protobuf. + +### Which authentication mechanisms are supported? + +The Authentication Mechanism is controlled with the **Authentication Mechanism** Setting field. + +Segment supports the following SASL-based authentication methods: +- Plain +- SCRAM-SHA-256 +- SCRAM-SHA-512 +- AWS + +Segment also supports **Client Certificate** authentication. + +### How is partitioning controlled? + +The **Send** Action provides multiple ways to specify which Partition an event should be sent to. + +- **Partition**: Use this field to specify the name of the Partition Segment should send events to. +- **Default Partition**: Use this field to specify a default Partition. Segment uses this when you don't provide a value in the **Partition** field. +- **Message Key**: Segment uses a hash of this field's value to determine which Partition should receive an event. If you don't provide a Message Key, Segment uses a round robin algorithm to select the partition to send the event to. + +### What is the "SSL - Reject Unauthorized Certificate Authority" field for? + +This field specifies if Segment should reject server connections when a certificate is not signed by a trusted Certificate Authority (CA). This can be useful for testing purposes or when using a self-signed certificate. \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-kameleoon/index.md b/src/connections/destinations/catalog/actions-kameleoon/index.md new file mode 100644 index 0000000000..3b07f639d2 --- /dev/null +++ b/src/connections/destinations/catalog/actions-kameleoon/index.md @@ -0,0 +1,49 @@ +--- +title: Kameleoon (Actions) Destination +beta: true +id: 652ea51a327a62b351aa12c0 +--- + +{% include content/plan-grid.md name="actions" %} + +[Kameleoon](https://www.kameleoon.com/en?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a versatile optimization, experimentation, and personalization platform. It is used to enhance website and mobile app experiences while enabling experimentation. + +This destination is maintained by Kameleoon. For any issues with the destination, [contact the Kameleoon Support team](mailto:support@kameleoon.com). + +## Benefits of Kameleoon (Actions) vs Kameleoon Classic + +Kameleoon (Actions) provides the following benefits over the classic Kameleoon destination: + +- **Event Flexibility**. Tailor your events precisely by leveraging Segment's event filters, allowing for more granular control over the data you receive in Kameleoon. +- **Attribute Mapping**. Seamlessly map attributes before forwarding events, ensuring a smooth integration process and accurate representation of your data in Kameleoon. +- **Monitoring Capabilities**. Take advantage of Segment's monitoring tools to keep a vigilant eye on your operations, providing valuable insights and ensuring a seamless data flow into Kameleoon. + +## Getting started + +1. Navigate to **Connections > Catalog** in the Segment web app. +2. Search for *Kameleoon (Actions)* and select the destination. +3. Click **Add destination**. +4. Select the Source you want to connect to Kameleoon (Actions) and click **Confirm Source**. +5. On the **Basic Settings** side panel, complete the required fields: + - **Name**: Enter a name to help you identify this destination in Segment + - **API Key**: Paste your Kameleoon API key. To generate an API Key, see [Kameleoon's documentation on generating an API key](https://help.kameleoon.com/setting-up-segment-destination-actions/#Kameleoon_setup){:target="_blank”}. + - **Sitecode**: Paste your Kameleoon project sitecode. You can find it in the [project dashboard](https://help.kameleoon.com/question/how-do-i-find-my-site-id/){:target="_blank”}. +6. Enable the destination by clicking the **Enable Destination** toggle switch. +7. Click **Save Changes**. + + +{% include components/actions-fields.html %} + + +The integration requires that you use the same system of identifiers for both tools. While Segment uses the userId, Kameleoon uses the kameleoonVisitorCode. In order to identify which visitor triggered the forwarded Segment events, you must include the kameleoonVisitorCode inside your Segment events. To know more, see [Kameleoon's documentation on matching a Segment user with a Kameleoon visitor](https://help.kameleoon.com/setting-up-segment-destination-actions/#Matching_an_Segmentio_user_with_a_Kameleoon_visitor){:target="_blank”}. + + +## Migration from the classic Kameleoon destination + +To migrate from the classic Kameleoon destination: +1. Include the `kameleoonVisitorCode` in your Segment events for accurate visitor tracking. To know more, see [Kameleoon's documentation on matching a Segment user with a Kameleoon visitor](https://help.kameleoon.com/setting-up-segment-destination-actions/#Matching_an_Segmentio_user_with_a_Kameleoon_visitor){:target="_blank”}. +2. Define mapping and filters on the destination configuration page. +3. Test events to ensure accurate goal creation and conversion tracking. +4. Activate the Kameleoon (Actions) destination when everything is ready and tested. +5. Deactivate the classic Kameleoon destination. + diff --git a/src/connections/destinations/catalog/actions-klaviyo/index.md b/src/connections/destinations/catalog/actions-klaviyo/index.md new file mode 100644 index 0000000000..41864c005a --- /dev/null +++ b/src/connections/destinations/catalog/actions-klaviyo/index.md @@ -0,0 +1,100 @@ +--- +title: Klaviyo (Actions) Destination +id: 650bdf1a62fb34ef0a8058e1 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Klaviyo](https://www.klaviyo.com){:target="_blank"} is a powerful email platform focused on ecommerce that helps companies make more money. It supports segmentation based on category and event triggers like product bought, page viewed, email engagement, or amount spent. + +It measures opens, clicks, revenue generated, breakdown of generated revenue based on custom attributes (like campaign type or amount gained per recipient), and provides trend reports, cohort analysis, and subscriber growth. + +Klaviyo lets you send personalized newsletters, automates triggered emails, product recommendations, welcome campaigns, order announcements, push notifications, and syncs your data to Facebook custom audiences. + +## Benefits of Klaviyo (Actions) + +Klaviyo (Actions) provides the following benefits: + +- **Simple setup** - Klaviyo (Actions) has a streamlined default setup process making it easier to get started in a way that "just works". +- **More control** - Actions-based destinations enable you to define the mapping between the data Segment receives from your sources, and the data Segment sends to Klaviyo. +- **Default property mappings** - Default mappings from the Segment like event, timestamp, and more, allow data to be mapped correctly without any setup required. + +> info "" +> Segment automatically migrated all classic Klaviyo destinations configured in Cloud mode to the Klaviyo (Actions) destination in June 2024. +> +> If you are a Klaviyo classic user, view information about steps you might need to take in the [Migrate to the Klaviyo (Actions) destination](/docs/connections/destinations/catalog/klaviyo#migrate-to-the-klaviyo-actions-destination) documentation. + +## Getting started + +1. From the Segment web app, click **Catalog**. +2. Search for **Klaviyo (Actions)** in the Catalog, select it, and choose which of your sources to connect the destination to. +3. Navigate to [Account > Settings > API Keys](https://www.klaviyo.com/account#api-keys-tab){:target="_blank"} in Klaviyo's UI and copy your API Key into the Segment Settings UI. + +> info "Generate a Private API Key with full access to Klaviyo's Accounts, Campaigns, Events, List, Profiles, Segments, and Subscriptions APIs" +> Create a key by going to Klaviyo's UI and clicking [Account > Settings > API Keys > Create API Key](https://www.klaviyo.com/account#api-keys-tab){:target="_blank"} to generate a Private API Key. After you've created a key, copy it into the Segment Settings UI. + +{% include components/actions-fields.html %} + +## Using Klaviyo with RETL + +Klaviyo (Actions) Destination can accept [RETL](/docs/connections/reverse-etl/) data. You can send the models you created in your data warehouse source. Follow [the steps](/docs/connections/reverse-etl/#step-1-add-a-source) to create your data warehouse source and set up models. + +| Action | Added | Updated | Deleted | +| ------------------- | ------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------- | +| Order Completed | | | | +| Track Event | | | | +| Upsert Profile | | | | +| Remove Profile | | | | +| Subscribe Profile | | | **\*** | +| Unsubscribe Profile | | | | + +> info "" +> **\*** Though technically possible, it may not be the most intuitive approach to using RETL. +> +> **e.g.,** Triggering a **Subscribe Profile** action when a user is **deleted** from a Model that queries unsubscribed users. + +In order to add users to a list, use the **Upsert Profile** Action and fill out the **List** field with the Klaviyo list to add the profile to. + +Follow these steps to create a list in Klaviyo: + +1. Navigate to **Audience > Lists & Segments**. +2. Click **Create List/Segment**. +3. Choose **List**. +4. Give your list a name and add any applicable tags. +5. Click **Create List**. + +## Using Klaviyo with Engage + +Klaviyo (Actions) Destination can accept your [Engage](/docs/engage/) data. If you wish to add a profile to a list associated with the Engage audienceId, you **don't** need to create a list in Klaviyo. During the first sync with the **Add Profile To List (Engage)** Mapping, Segment creates a list with the same ID as your audience. + +To add and remove profiles in Klaviyo with Engage Audience data: + +1. Create and configure your Engage Audience. +2. Navigate to **Engage > Engage Settings > Destinations** and click **Add Destination**. +3. Select **Klaviyo (Actions)**. +4. Select your Audience Space as the source, and name your destination. +5. On the **Mappings** tab, click **Add Mapping** and select **Add Profile To List (Engage)**. +6. Click **Save** and make sure to enable the mapping. +7. On the **Mappings** tab, click **Add Mapping** and select **Remove Profile from List (Engage)**. +8. Click **Save** and make sure you enable the mapping. +9. Enable the destination. +10. On the **Engage > Audiences > (your audience)** page, click **Add Destination** and select the destination created. +11. In the settings that appear in the side panel, toggle the **Send Track** option on, and don't change the **Audience Entered/Audience Exited** event names. +12. Click **Save Settings**. + +## FAQ + +### Dealing with 429 Responses from Klaviyo's API + +If you're encountering rate limiting issues, consider enabling batching for the Action receiving these errors. Ensure that within the mapping configuration, "Batch data to Klaviyo" is set to "Yes". This adjustment can help alleviate the rate limiting problem. + +### Can I send Engage Audiences to a pre-created Klaviyo List? + +No. Engage audiences are designed to initiate the creation of new lists in Klaviyo when you use the "Add Profile to List - Engage" mapping. You cannot link Engage lists to existing Klaviyo lists and cannot edit the List ID for Engage audiences. + +### How can I unsuppress a profile when adding it to a list? + +When adding a user to a list, our action make use of the [Bulk Profile Import](https://developers.klaviyo.com/en/reference/spawn_bulk_profile_import_job){target="_blank"} endpoint (when batching is enabled), and the [Add Profile To List](https://developers.klaviyo.com/en/reference/create_list_relationships){target="_blank"} endpoint for non-batched requests. Both of which will not update a users suppression status if they were previously suppressed. + +To ensure a suppressed profile gets unsuppressed, you can use the "Subscribe Profile" action. When a profile is subscribed in Klaviyo, it automatically unsuppresses any previously suppressed user. You can combine this action with other actions to achieve your goal. If this solution does not fully address your use case, please contact us at friends@segment.com so we can consider your specific requirements. \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-koala/index.md b/src/connections/destinations/catalog/actions-koala/index.md new file mode 100644 index 0000000000..b91b239676 --- /dev/null +++ b/src/connections/destinations/catalog/actions-koala/index.md @@ -0,0 +1,22 @@ +--- +title: Koala Destination +id: 6230c835c0d6535357ee950d +--- + +{% include content/plan-grid.md name="actions" %} + +Koala enables you to identify website visitors with ease so you can turn traffic into actionable leads. See which companies are researching your docs, checking out your pricing page, and showing intent to buy. + +Segment is the easiest way to install Koala. If you've already got Segment running on your website, Koala recommends this approach. With Segment, you can instrument Koala without code. + +Koala maintains this destination. For any issues with the destination, [contact the Koala Support team](mailto:support@getkoala.com). + +## Getting Started + +1. From the Segment web app, navigate to **Connections > Catalog > Destinations**. +2. Search for *Koala* and select **Add Destination**. +4. Select the web source that will send data to Koala and follow the steps to name your destination. The web source chosen must use [Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/). +5. On the **Settings** tab, input your **Public API Key** which can be found in your Koala workspace settings under **Settings > Install**. +6. Once connected, you can configure how you want to send data to Koala. By default, Segment forwards track events and identify events to Koala. Koala recommends sticking with the defaults. + +{% include components/actions-fields.html settings="true"%} diff --git a/src/connections/destinations/catalog/actions-launchdarkly-audiences/index.md b/src/connections/destinations/catalog/actions-launchdarkly-audiences/index.md new file mode 100644 index 0000000000..ba6d721e76 --- /dev/null +++ b/src/connections/destinations/catalog/actions-launchdarkly-audiences/index.md @@ -0,0 +1,29 @@ +--- +title: LaunchDarkly Audiences Destination +id: 64e72a310da9ebedf99c8937 +--- + +{% include content/plan-grid.md name="actions" %} + +[LaunchDarkly](https://launchdarkly.com){:target="_blank"} is a feature management platform that empowers development teams to safely deliver, control, and measure their software through feature flags. + +With LaunchDarkly, you can release features that target specific groups, such as beta users, and premium accounts, using segments. This destination allows you to sync Engage Audiences to LaunchDarkly segments, letting you concentrate more on deploying features and less on managing end users between platforms. + +LaunchDarkly maintains this destination. For any issues with the destination, [contact the LaunchDarkly Support team](mailto:support@launchdarkly.com). + +## Getting started + +1. In LaunchDarkly, navigate to [Account settings](https://app.launchdarkly.com/settings/projects){:target="_blank"} and copy the client-side ID for the project and environment where you would like to create an Engage Audience synced segment. +2. In LaunchDarkly, create a service token with either a Writer role or a custom role. If your service token has a custom role, it must have the actions `createSegment` and `updateIncluded` to sync a segment from an Engage Audience. To learn how to create a service token, read [Creating API access tokens](https://docs.launchdarkly.com/home/account-security/api-access-tokens#creating-api-access-tokens){:target="_blank"}. +3. From the Segment web app, navigate to **Engage > Audiences**. Ensure you are in the Engage space you plan to use with the LaunchDarkly Audiences destination. Either choose an existing Engage audience or create a new one. This is the audience you plan to sync with LaunchDarkly. +4. Navigate to **Engage > Engage Settings** and click **Destinations**. Ensure you are still in the correct Engage space. +5. Search for `LaunchDarkly Audiences` and select the destination. Click **Add destination**. +6. On the **Select Source** screen, your Engage space should already be selected as the source. Click **Confirm Source**. +7. On the Destination **Settings** tab, name your destination and provide your LaunchDarkly client-side ID and service token. +8. Toggle **Enable Destination** on and click **Save Changes**. +9. Navigate to the **Mappings** tab, click **New Mapping**, and select the **Sync Engage Audience to LaunchDarkly** pre-built mapping. +10. Under **Select mappings**, modify the default mappings as needed. In most cases, you shouldn't need to make any changes. +11. Click **Save**. +12. Ensure the **Status** toggle on the **Mappings** tab is enabled. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-launchdarkly/index.md b/src/connections/destinations/catalog/actions-launchdarkly/index.md index bbacc1335f..cfaaa98b35 100644 --- a/src/connections/destinations/catalog/actions-launchdarkly/index.md +++ b/src/connections/destinations/catalog/actions-launchdarkly/index.md @@ -6,16 +6,14 @@ id: 624dddd054ced46facfdb9c0 {% include content/plan-grid.md name="actions" %} -[LaunchDarkly](https://launchdarkly.com) is a feature management platform that empowers development teams to safely deliver, control, and measure their software through feature flags. +[LaunchDarkly](https://launchdarkly.com){:target="_blank”} is a feature management platform that empowers development teams to safely deliver, control, and measure their software through feature flags. With LaunchDarkly, you can run experiments on any feature flag. This destination allows you to connect existing Segment events to LaunchDarkly custom metrics for use in LaunchDarkly experiments. > success "" > **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) LaunchDarkly Segment destination. There's also a page about the [non-Actions LaunchDarkly destination](/docs/connections/destinations/catalog/launchdarkly-events/). Both of these destinations receives data from Segment. - -{% include content/ajs-upgrade.md %} @@ -31,7 +29,7 @@ LaunchDarkly (Actions) provides the following benefits over the classic LaunchDa ## Getting started To get started with LaunchDarkly (Actions): -1. In LaunchDarkly, navigate to [Account settings](https://app.launchdarkly.com/settings/projects) and copy the client-side ID for the project and environment that you would like to connect to Segment. +1. In LaunchDarkly, navigate to [Account settings](https://app.launchdarkly.com/settings/projects){:target="_blank”} and copy the client-side ID for the project and environment that you would like to connect to Segment. 2. From the Segment web app, click **Catalog**, then click **Destinations**. 3. Search for **LaunchDarkly (Actions)** and select it. 4. Click **Configure LaunchDarkly**. diff --git a/src/connections/destinations/catalog/actions-launchpad/index.md b/src/connections/destinations/catalog/actions-launchpad/index.md index 4192a2d095..cf0a06327a 100644 --- a/src/connections/destinations/catalog/actions-launchpad/index.md +++ b/src/connections/destinations/catalog/actions-launchpad/index.md @@ -14,9 +14,6 @@ id: 63e42aa0ed203bc54eaabbee Launchpad maintains this destination. For any issues with the destination, [contact the Launchpad Support team](mailto:support@launchpad.pm). -{% include content/ajs-upgrade.md %} - - ## Getting started 1. From the Segment web app, navigate to **Connections > Catalog** and click **Destinations**. diff --git a/src/connections/destinations/catalog/actions-linkedin-audiences/index.md b/src/connections/destinations/catalog/actions-linkedin-audiences/index.md index 1228e43967..9aeaf52035 100644 --- a/src/connections/destinations/catalog/actions-linkedin-audiences/index.md +++ b/src/connections/destinations/catalog/actions-linkedin-audiences/index.md @@ -4,6 +4,7 @@ hide-personas-partial: true hide-boilerplate: true hide-dossier: false id: 62f435d1d311567bd5bf0e8d +engage: true --- diff --git a/src/connections/destinations/catalog/actions-linkedin-conversions/index.md b/src/connections/destinations/catalog/actions-linkedin-conversions/index.md new file mode 100644 index 0000000000..9c15b0e465 --- /dev/null +++ b/src/connections/destinations/catalog/actions-linkedin-conversions/index.md @@ -0,0 +1,49 @@ +--- +title: LinkedIn Conversions API Destination +id: 652e765dbea0a2319209d193 +beta: true +--- + +The LinkedIn Conversions API (CAPI) is a conversion tracking tool that creates a direct connection between marketing data from an advertiser’s server and LinkedIn. This integration enables advertisers to measure the performance of their LinkedIn marketing campaigns no matter where the conversion happens and use this data to power campaign optimization. The Conversions API can help strengthen performance and decrease cost per action with more complete attribution, improved reliability, and optimized delivery. + +This destination is maintained by Segment. For any issues with the destination, [contact the Segment Support team](mailto:friends@segment.com). + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for “LinkedIn Conversions API” in the Destinations Catalog, and select the destination. +3. On the LinkedIn Conversions API overview page, click **Add destination**. +4. Select the source that you want to connect to the LinkedIn Conversions API and click **Next**. +5. Enter a name for your destination and click **Create destination**. +6. On the Settings tab, click Connect to `[destination-name]` and follow the prompts to authenticate with LinkedIn using OAuth. +7. Enable the destination and click **Save Changes**. + +### Set up a mapping to Stream Conversion Events + +Follow the steps in the Destination Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customize-mappings). You must create 1 mapping for every conversion rule. After you create a conversion rule, you cannot update the connected LinkedIn Ad account. + +1. On the Mappings tab, click on **+ New Mapping** and Select **Stream Conversion Event**. +2. Select the events you'd like to map and send to your LinkedIn Conversions API destination. +3. Create a conversion rule or enter the link to an existing rule. _If you chose to create a new conversion rule, Segment creates the conversion rule as soon as you click **Save**._ +4. Configure the mappings to map event fields and user attributes from your source to the Conversion API. +5. Click **Save**. + +After you've created a Stream Conversion Event mapping, Segment displays the connected rule for each mapping on the Mappings tab. To update the conversion rule you created, select the menu icon for the mapping you'd like to update and click **Edit Mapping**. Scroll to section 3, Create a Conversion Rule, and select **Edit your configuration**. After making changes to your conversion rule, click **Save** to save your changes. You can make changes to all fields except for the Ad account field. After you save your changes, Segment updates the conversion rule in LinkedIn. + +{% include components/actions-fields.html %} + +## FAQ and troubleshooting + +### Why are my inputs failing? + +Your inputs must meet the following criteria: +- Contains a valid URN with the following format:
    `urn:lla:llaPartnerConversion:id` +- The authenticated user must have write access to the ad account used to create conversion rules +- Contains a userInfo combination that requires firstName and lastName **OR** a userId mapped to at least one of the following idTypes: + - `SHA256_EMAIL` + - `LINKEDIN_FIRST_PARTY_ADS_TRACKING_UUID` + - `ACXIOM_ID` + - `ORACLE_MOAT_ID` +- `conversionHappenedAt` must be a valid timestamp (milliseconds since epoch) and must have happened in the past 90 days + +Any deviations from this specification might lead to failed inputs. diff --git a/src/connections/destinations/catalog/actions-listrak/index.md b/src/connections/destinations/catalog/actions-listrak/index.md new file mode 100644 index 0000000000..40ef2f72b0 --- /dev/null +++ b/src/connections/destinations/catalog/actions-listrak/index.md @@ -0,0 +1,57 @@ +--- +title: Listrak (Actions) Destination +id: 64b6a221baf168a989be641a +--- + +{% include content/plan-grid.md name="actions" %} + +[Listrak](https://www.listrak.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the retail industry’s leading customer engagement platform. Listrak delivers results for more than 1,000 retailers by providing best-in-class email, text message marketing, identity resolution marketing and push notifications through seamless cross-channel orchestration. Listrak’s data-first approach delivers 1:1 personalization at scale so you can send messages at precisely the right time across the right combination of channels and devices to maximize customer engagement, revenue, and lifetime value. + +Listrak maintains this destination. For any issues with the destination, [contact the Listrak Support team](mailto:support@listrak.com). + +## Getting started + +To add the Listrak Actions destination: + +1. Set up the [Listrak Source](/docs/connections/sources/catalog/cloud-apps/listrak/) first before connecting to the Listrak Actions Destination. Note the API client ID and client secret after creating the integration in Listrak. +2. From your Segment workspace, go to **Connections > Catalog** and select the **Destinations** tab. +3. Search for **Listrak (Actions)** in the Catalog and select the destination. +4. Click **Add destination**. +5. On the **Select data source** step, select your desired source. The source should not be a Listrak source. If you want to sync an Engage Audience, select the Engage space as the source. Click **Confirm Source**. +6. On the **Settings** tab, name your destination. For example, `Listrak`. +7. In the same section of the **Settings** tab, enter your Listrak API client ID and client secret. +8. Click **Save Changes**. +9. Follow the steps in the Destinations Actions documentation to [customize mappings](/docs/connections/destinations/actions/#customize-mappings) or follow the steps below to Sync an Engage Audience. +10. Enable the destination and click **Save Changes**. + +### Sync an Engage Audience + +To sync an Engage audience with your Listrak (Actions) destination: + +1. Each Engage audience to be synced to Listrak must only include email addresses subscribed to the list. To do this, add a condition to the Engage audience that ensures the custom trait for the list exists (eg. have a Custom Trait listrak_list_12345 exists, where 12345 is the list ID). +2. In Listrak, go to **Contacts > Profile Fields** and click **Create Field Group**. +3. Enter a name for the Profile Field Group (eg. `Engage Audiences`) and Click **Save**. +4. Enter a name for the audience for the **Field Name**. +5. Select **Check Box** for the **Data Type**. +6. Click the **Update** button. +7. Go to **Help & Support > API ID Information** and note the list ID and profile field ID. +8. In Segment, open the previously created Listrak destination. +9. In the **Mappings** tab, click **New Mapping** and select **Update Email Contact Profile Fields**. +10. Under **Select events to map and send**, select **Track** for the **Event Type**. +11. Click **Add Condition** and add this condition: **Event Name** is `Audience Entered`. +12. Click **Add Condition** and add this condition: **Event Property** `audience_key` is `my_audience` (where `my_audience` is the Audience Key found on the Audience settings page). +13. Under **Select mappings**, enter the list ID and map the email address if `context.traits.email` is not desired. +14. Under **Select mappings**, in the section for mapping the `Profile Field Values`, enter the profile field ID for the `Enter Key Name` textbox on the right and `on` in the textbox for its value to the left. Click **Save**. +15. Repeat steps 9 through 14 using `Audience Exited` instead of `Audience Entered` in step 11 and `off` instead of `on` in step 14. +16. **Enable** both mappings. +17. Go to the **Settings** tab for the destination and **Enable** the destination. Click **Save Changes**. +18. Select the Engage space and navigate to **Engage > Audiences**. Select the source audience to send to the Listrak destination. +19. Click **Add Destination** and select the Listrak Audience destination. +20. In the connection settings that appear on the right-hand side, ensure that the toggle to **Send Track** events is _enabled_, and the toggle to **Send Identify** events is _disabled_. +21. Click **Save**. +22. To filter email sends in Listrak using the new audience profile field, see the [help article](https://help.listrak.com/en/articles/3951597-introduction-to-building-filter-2-0-segments){:target="_blank”}. +23. Repeat steps 1 through 21, if you want to sync another audience. + +{% include components/actions-fields.html %} + +--- diff --git a/src/connections/destinations/catalog/actions-livelike-cloud/index.md b/src/connections/destinations/catalog/actions-livelike-cloud/index.md index ca952a26be..187f376cce 100644 --- a/src/connections/destinations/catalog/actions-livelike-cloud/index.md +++ b/src/connections/destinations/catalog/actions-livelike-cloud/index.md @@ -3,13 +3,13 @@ title: LiveLike Cloud Mode (Actions) Destination id: 63e42b47479274407b671071 hide-boilerplate: true hide-dossier: false -private: true -hidden: true ---- +private: false +hidden: false +--- {% include content/plan-grid.md name="actions" %} -[LiveLike](https://livelike.com/) is a technology company dedicated to empowering digital experiences that enable deeper fan engagement, increased retention rates, and new monetization opportunities. +[LiveLike](https://livelike.com/){:target="_blank”} is a technology company dedicated to empowering digital experiences that enable deeper fan engagement, increased retention rates, and new monetization opportunities. > info "" > The events transferred from Segment to your LiveLike application will appear under the [Actions](https://docs.livelike.com/docs/reward-actions){:target="_blank"} section. diff --git a/src/connections/destinations/catalog/actions-liveramp-audiences/index.md b/src/connections/destinations/catalog/actions-liveramp-audiences/index.md new file mode 100644 index 0000000000..a205f74327 --- /dev/null +++ b/src/connections/destinations/catalog/actions-liveramp-audiences/index.md @@ -0,0 +1,74 @@ +--- +title: LiveRamp Audiences Destination +hide-boilerplate: true +hide-dossier: false +id: 644ad6c6c4a87a3290450602 +beta: true +--- + +[LiveRamp](https://liveramp.com/){:target="_blank"} gives companies and their partners the power to connect, control, and activate data to transform customer experiences and generate more valuable business outcomes. Segment's integration with LiveRamp lets you push user audiences created in [Twilio Engage](https://www.twilio.com/en-us/engage){:target="_blank"} into your LiveRamp account to execute various marketing use cases. + +The LiveRamp Audiences destination allows users to connect their Engage Audiences to LiveRamp through their SFTP or a customer-managed S3 cloud storage bucket. Users will be able to configure their delivery preferences within Segment. + +The LiveRamp Audiences destination can be connected to **Twilio Engage sources only**. + +## Getting started + +### Set up your file drop + +#### SFTP + +1. Contact your LiveRamp representative to gain a set of [SFTP](https://docs.liveramp.com/connect/en/upload-a-file-via-liveramp-s-sftp.html){:target="_blank"} credentials. +2. Connect to the SFTP server using the client of your choice, and create a new folder under `/uploads` with the name of your audience. + +#### S3 + +1. Create a new S3 bucket. +2. Create a new IAM Role with `PutObject` access to the S3 bucket. +3. Create a new IAM User and assign them the role. +4. Generate a new Access Key pair for the user and note them down; you'll use it for the settings. + +### Connect LiveRamp Audiences + +1. Create and configure your Engage Audience. +2. Navigate to **Engage > Engage Settings > Destinations** and click **Add Destination**. +3. Select **LiveRamp Audiences**, select your Audience Space as the source, and name your destination. +4. On the **Mappings** tab, click **Add Mapping** and choose whether your will be using S3 or SFTP to upload the files. Within the mapping, configure which fields from your payload will be included in the files. +5. Enable the destination and configured mappings. +6. On the **Engage > Audiences > (your audience)** page, click **Add Destination** and select the destination just created. +7. In the settings that appear in the side panel, toggle the Send Track option on and do not change the Audience Entered/Audience Exited event names. Click Save Settings +8. File a [support case](https://docs.liveramp.com/connect/en/considerations-when-uploading-the-first-file-to-an-audience.html#creating-a-support-case){:target="_blank"} with the LiveRamp team to configure and enable ingestion. + +{% include components/actions-fields.html settings="false"%} + +## Limitations + +* Audience must have at least 25 unique members, otherwise the destination will fail and the data will not be synced. This means the Actions Mapping Event Tester does not work (only one test event can be configured). +* Audience sync happens once per day. On a 24-hour cadence, but can take up to 30 hours. +* Audience Sync is a full sync, including only users or accounts in the audience at the time of sync. +* Files are created per audience. +* After initial ingestion is complete, changing the mappings will cause the LiveRamp ingestion to start failing until ingestion setup is run again. +* Time to first sync can be up to 3 days, please be patient. + +## Trait Enrichment + +Use Trait Enrichment to access Segment profile traits when you sync Audiences to Destinations. With Trait Enrichment, you can use custom, SQL, computed, and predictive traits to enrich the data you map to your destinations. + +> info "Trait Enrichment in beta" +> Trait Enrichment is in beta, and Segment is actively working on this feature. Some functionality may change before it becomes generally available. [Contact Segment](https://segment.com/help/contact/){:target="_blank"} with any feedback or questions. + +Trait Enrichment setup + +1. Confirm that **Send Track** is toggled on and select Customized Setup. Select **Add Trait**, select the traits you want to sync, and click **Save**. + +![Alt text](traitEnrichment-EngageSettings.png) + +2. Update the **Identifier Data** Field in your destination **Audience Entered** Mapping (either SFTP or S3). +- To update a trait field mapping, click on the **Select event variable** section and in the dropdown search for `properties`, followed by your trait. For example, `properties.firstName`. If no matches are found, use `properties.TRAIT` as an event variable. + +![Alt text](traitEnrichment-Mappings.png) + +For best results with Trait Enrichment, Segment recommends the following: + +- Use Trait Enrichment with new audiences. +- Use smaller audiences for real-time use cases, as data delivery is slower for large audiences. diff --git a/src/connections/destinations/catalog/actions-liveramp-audiences/traitEnrichment-EngageSettings.png b/src/connections/destinations/catalog/actions-liveramp-audiences/traitEnrichment-EngageSettings.png new file mode 100644 index 0000000000..e37b44e00a Binary files /dev/null and b/src/connections/destinations/catalog/actions-liveramp-audiences/traitEnrichment-EngageSettings.png differ diff --git a/src/connections/destinations/catalog/actions-liveramp-audiences/traitEnrichment-Mappings.png b/src/connections/destinations/catalog/actions-liveramp-audiences/traitEnrichment-Mappings.png new file mode 100644 index 0000000000..ff43b2605e Binary files /dev/null and b/src/connections/destinations/catalog/actions-liveramp-audiences/traitEnrichment-Mappings.png differ diff --git a/src/connections/destinations/catalog/actions-logrocket/index.md b/src/connections/destinations/catalog/actions-logrocket/index.md index a110f71939..38bdb07775 100644 --- a/src/connections/destinations/catalog/actions-logrocket/index.md +++ b/src/connections/destinations/catalog/actions-logrocket/index.md @@ -11,14 +11,12 @@ id: 635ada35ce269dbe305203ff [LogRocket](https://www.logrocket.com/){:target="_blank"} combines session replay, error tracking, and product analytics – empowering software teams to create the ideal web and mobile product experience. With the Segment integration, your Segment user telemetry and events will be sent to LogRocket for enhanced analytics and filtering. -{% include content/ajs-upgrade.md %} - ## Getting started 1. From the Segment web app, click **Catalog**, then click **Destinations**. 2. Find the **LogRocket** destination item in the left navigation, and click it. 3. Click **Configure LogRocket**. 4. Select an existing Source to connect to LogRocket. -5. On the **Settings** tab, set your LogRocket [appID](https://app.logrocket.com/). +5. On the **Settings** tab, set your LogRocket [appID](https://app.logrocket.com/){:target="_blank”}. {% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-loops/index.md b/src/connections/destinations/catalog/actions-loops/index.md new file mode 100644 index 0000000000..95752b48e9 --- /dev/null +++ b/src/connections/destinations/catalog/actions-loops/index.md @@ -0,0 +1,69 @@ +--- +title: Loops (Actions) Destination +hide-boilerplate: true +hide-dossier: true +id: 63360a5fe290ca3fdfad4a68 +--- + +{% include content/plan-grid.md name="actions" %} + +[Loops](https://loops.so?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target:="_blank"} is a modern email platform for SaaS, a better way to send marketing and transactional email. + +You can use this Segment destination to create and update your Loops contacts and trigger email sending with events. + +Loops maintains this destination. For any issues with the destination, [contact their Support team](mailto:help@loops.so). + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for “Loops (Actions)” in the Destinations Catalog, and select the destination. +3. Click **Configure Loops**. +4. Select an existing Source to connect to Loops and click **Next**. +5. On the Setup page, enter a name for your destination and click **Create destination**. +6. Open Loops and generate an API key from [Settings > API](https://app.loops.so/settings?page=api){:target="_blank"}. Click "Generate key" then click the "Copy to clipboard" icon. +7. Open the Segment app, go to the Settings page inside your Loops destination, and paste your API key. Then, click "Save Changes". + +## Create or update contacts + +You can create and update Loops contacts by using Segment's [Identify method](/docs/connections/spec/identify/), like this: + +```javascript +analytics.identify("test-user-a5h7xb", { + email: "adam@loops.so", + firstName: "Adam", + favoriteColor: "blue", + favoriteNumber: 42 +}); +``` + +If the email address or user ID do not exist in your contacts, a new contact will be created. If the email address or user ID already exists, the existing contact will be updated with the data sent in the Identify call. + +Go to the Mappings tab inside your Loops destination and click **New Mapping**. Select **Create or update a contact**. + +It is important that you set up the data mapping properly in step 3 of the "Create or update a contact" form. This is where you can select which data is sent on to Loops and into which fields. Loops provides an example default mapping in the form, but you should make sure that you set up the mapping to capture the correct data in the correct fields (you may have some [custom fields in Loops](https://loops.so/docs/add-users/properties){:target="_blank"} that the default mapping doesn't cover, for example). + +You can pass any custom fields that you're using in Loops inside "Custom Contact Attributes". + +Once you have completed the mapping you can send a test event. After you submit a test event, you can verify everything is set up correctly by looking for the contact on the [Audience](https://app.loops.so/audience){:target="_blank"} page in your Loops account. + +Loops has a full tutorial for creating and updating contacts [in the Loops docs](https://loops.so/docs/add-users/segment#create-or-update-contact){:target="_blank"}. + +## Sending events + +In Loops you can send emails [triggered by events](https://loops.so/docs/loop-builder/triggering-emails){:target="_blank"}. You can trigger these events from Segment by using the [Track method](/docs/connections/spec/track/), like this: + +```javascript +analytics.track("User Registered"); +``` + +When you make a Track call, Segment will pass this event data on to Loops, which can then send emails based on [email-sending triggers](https://loops.so/docs/loop-builder/loop-triggers){:target="_blank"} you've set up in your account. + +To set up event sending with Segment, go to the Mappings tab inside your Loops destination and click **New Mapping**. Select **Send Event**. + +In the next page, enter the name of the event you're tracking into the "Event Name" field (for example, "User Registered" from the example above). If you have not already created the contact in Loops, you need to include an email address in your mapping, as Loops requires a contact for each event. + +Now you are able to send a test event. You can verify that the event was triggered properly in your Loops account from the [Events](https://app.loops.so/settings?page=events){:target="_blank"} page. + +Read the tutorial for sending events [in the Loops docs](https://loops.so/docs/add-users/segment#send-event){:target="_blank"}. + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-magellan-ai/index.md b/src/connections/destinations/catalog/actions-magellan-ai/index.md new file mode 100644 index 0000000000..f5fcfe7219 --- /dev/null +++ b/src/connections/destinations/catalog/actions-magellan-ai/index.md @@ -0,0 +1,43 @@ +--- +title: Magellan AI (Actions) Destination +id: 661eca176680eee35d82c955 +beta: true +hidden: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Magellan AI](https://www.magellan.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the all-in-one platform for audio advertising intelligence, media planning, and measurement. + +This destination is maintained by Magellan AI. For any issues with the destination, [contact their Measurement team](mailto:measurement@magellan.ai). + +## Getting started + +1. From your Segment workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for "Magellan AI". +2. Select "Magellan AI" and click **Add Destination**. +3. Select an existing Source to connect to Magellan AI (Actions), give your destination a name and click **Create destination**. +4. Enter the campaign's **pixel token** in the destination settings in Segment. You can obtain this token either from the [Magellan AI pixel management dashboard](https://app.magellan.ai/navigator/measurement/pixels){:target="_blank"} or provided by your Magellan AI Measurement Success Manager. +5. Configure which actions you want to send to Magellan AI. + +(Optional) If you need Magellan AI to process GDPR deletion requests: +1. Contact your Magellan AI Measurement Success Manager to enable API access for your account. +2. Go to the [Magellan AI API access token page](https://app.magellan.ai/api_access_tokens){:target="_blank"} and generate a new API token. +3. Find and copy the new **API token**. +4. Enter the **API token** in the destination settings for your Magellan AI (Actions) destination. + +{% include components/actions-fields.html %} + +## Limitations + +* Magellan AI only supports Segment's Replay feature for mobile events. + +### Lead + +Magellan AI's `Lead` action is semantically closest to Segment's [B2B SaaS `Signed Up` event](/docs/connections/spec/b2b-saas/#signed-up) and uses it as the default Trigger. However, Magellan AI's API spec considers `Lead` an e-commerce event, requiring a value and a currency. You may: +* Configure your sources sending `Signed Up` events to include the additional e-commerce-style fields +* Consider mapping an alternative event to the `Lead` action, like `Promotion Clicked` or `Product Added to Wishlist`, depending on your use case +* Map `Signed Up` events to the `Lead` action, providing dummy values in the mapping like `0` for the value and `USD` for the currency + +### Install, Third-Party Event + +Magellan AI's API spec requires a user agent, but Segment's [Analytics-Swift](/docs/connections/sources/catalog/libraries/mobile/apple/) library does not provide user agent information in the event context. In order to use this action with Segment's Swift library, you can provide either a static user agent string or a placeholder value in the mapping. diff --git a/src/connections/destinations/catalog/actions-marketo-static-lists/index.md b/src/connections/destinations/catalog/actions-marketo-static-lists/index.md new file mode 100644 index 0000000000..688ae28f3e --- /dev/null +++ b/src/connections/destinations/catalog/actions-marketo-static-lists/index.md @@ -0,0 +1,99 @@ +--- +title: Marketo Static Lists (Actions) Destination +hide-boilerplate: true +strat: adobe +id: 65302a514ce4a2f0f14cd426 +--- +> info "Marketo Static Lists vs Marketo Static Lists (Actions) Destinations" +> +> Marketo Static Lists (Actions) is a rebuild of the classic destination that provides the following benefits: +> +> - **Streamlined setup process** - Marketo Static Lists (Actions) has a streamlined default setup process, making it faster to get started in a way that "just works". +> - **More control** - Actions-based destinations allow you to define the mapping between the data Segment receives from your sources, and the data Segment sends to Marketo. +> - **Default property mappings** - Default mappings from the Segment like event, timestamp, and more allows data to be mapped correctly without any setup required. + +## Overview + +The Marketo Static Lists (Actions) destination lets you sync users into Marketo as a **List**, allowing you to run email campaigns in Marketo without having to manually find and upload a refreshed csv of users. This documentation explains how to set up Marketo in Segment, and what to expect in your Marketo UI. + +## Details + +- **Supports Engage**: Yes +- **Supports RETL**: Yes +- **Engage Destination type**: List +- **Must create audience_name field before Engage can update those values?**: No. You don't need to create the _list_ in Marketo, however you do need to create the folder Segment will create the list in. +- **Audience appears as**: A list in the folder you created, in the Marketo Lead Database under Group Lists. +- **Destination rate limit**: 100 calls per 20 seconds, which is shared among all third-party API services +- **Lookback window allowed**: Yes +- **Client or Server-Side Connection**: Server-side + +{% include content/sync-frequency-note.md %} + +## Configuring Marketo Static Lists + +> success "Good to know:" +> To set up Marketo, you need Marketo administrator access. If you don't have that access, work with the administrator for your organization. + +### Step 1: Create an API-Only Marketo user + +In this step, you'll create an API-Only Marketo user with both Access API and Lead Database access. + +1. You can use an existing role with these permissions, or create a new role that has both Access API and Access Lead Database permissions. (Do this in Marketo by going to **Admin**→ **Users & Roles** → **Roles**). +2. Go to **Admin** → **Users & Roles** → **Users** → **Invite New User** and create a new **API Only user** with the role that has both Access API and Lead Database permissions. **Be sure to check the API Only box.** + +### Step 2: Create a Marketo Launchpoint Service + +1. Go to **Admin** → **Integration** → **LaunchPoint** → **New** +2. Create a new service. In the Service field, select `Custom`, and in the **API Only User** field, select the user you created in step 1. +3. Write down the **Client Id** and **Client Secret** for this service, as you will need it when configuring the destination settings. + +### Step 3: Create a Marketo Lead Database folder and get your Marketo Endpoint + +1. Go to your Marketo Lead Database, and create a new folder under Group Lists. After connecting, each Engage audience shows up as a list in this folder. + +2. Before you continue to the next step, in Marketo, go to **Admin → Web Services**, and copy or write down the REST API Endpoint. **Be sure to copy the REST endpoint and not the SOAP endpoint.** You'll need that in the next step. + +> warning "Warning:" +> Do not create a list in the folder for the audience. Segment creates the list for you! + +### Using Marketo Static Lists (Actions) destination with Engage + +1. From your Segment workspace, go to **Engage → Engage Settings → Destinations → Add Destination**, and then Search for Marketo Static Lists (Actions). +2. In the destination settings, enter the **Client Id**, **Client Secret**, **Endpoint**, and **Folder Name** from the LaunchPoint service and folder you created in Steps 2 and 3. For **Endpoint**, note the Endpoint from Step 3 above. +3. Select the toggle to enable the Marketo Static Lists (Actions) destination. +4. Navigate to the **Mappings** tab, click **Add Mapping**, and select **Add to List**. +6. Click **Save**, and make sure to enable the mapping. +7. On the **Mappings** tab, click **Add Mapping**, and select **Remove from List**. +8. Click **Save**, and make sure you enable the mapping. +9. Navigate to the Engage Audiences tab, and create a new audience. +10. Give your audience a name, some event and trait criteria, then click **Preview**. +11. Select **Marketo Static Lists** as a destination for the Audience. +12. In the settings that appear in the side panel, toggle the **Send Track** option on, and don't change the **Audience Entered/Audience Exited** event names. +13. Click **Save Settings**. + +### Using Marketo Static Lists (Actions) destination with RETL + +1. Navigate to your data warehouse, and add Marketo Static Lists (Actions) as a destination. +2. From your model, click **Add Mapping**, and select your Marketo Marketo Static Lists (Actions) destination, and the **Add to List** Action. +3. If you already have a list created in Marketo, fill in the List ID field. If you want Segment to create a list in Marketo, fill in the List name field. +4. Finish setting up the rest of the action. +5. Click **Save Mapping**. + +When you save the mapping, a list is created in Marketo. You can update the list the mapping syncs to at any time. + +> info "" +> Only users with an email address appear in the list in Marketo. Users with multiple email addresses as external ids appear in the list once for each email address. + +You can view the audience in Marketo by going to **Lead Database→ Group Lists→Name of folder you created in Step 3 → Audience name** + +{% include components/actions-fields.html %} + +## Troubleshooting + +#### Not seeing an audience in Marketo? +Check that you followed all of the set up steps. Wait six or more hours after setup for your audience to start appearing in Marketo. Check that you didn't create a list in the folder for the audience - Segment creates the list for you, and an existing one can conflict. Check that the audience members you expect have an email address on their profile. + +#### Audience size is smaller than expected +Only users in the audience who also have an email address are uploaded to the list. You may need to adjust your query to filter out users without an email so you can get a better estimate of how many users will appear on the list. In the example below, we added an AND condition where users have a Custom trait of `email` which `exists`. + +If a user has multiple email addresses, each address appears once in the Marketo list. diff --git a/src/connections/destinations/catalog/actions-mixpanel/index.md b/src/connections/destinations/catalog/actions-mixpanel/index.md index f5b5aa24ea..790c7073ca 100644 --- a/src/connections/destinations/catalog/actions-mixpanel/index.md +++ b/src/connections/destinations/catalog/actions-mixpanel/index.md @@ -36,7 +36,7 @@ Mixpanel (Actions) provides the following benefits over the classic Mixpanel des ### Connection Modes for Mixpanel (Actions) destination -The Mixpanel (Actions) destination does not offer a device-mode connection mode. If you're using one of Segment's new libraries ([Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/), [Swift](https://github.com/segmentio/analytics-swift) or [Kotlin](https://github.com/segmentio/analytics-kotlin)) with the Actions-framework version of the destination, you do not need the device-mode connection. +The Mixpanel (Actions) destination does not offer a device-mode connection mode. If you're using one of Segment's new libraries ([Analytics.js 2.0](/docs/connections/sources/catalog/libraries/website/javascript/), [Swift](https://github.com/segmentio/analytics-swift){:target="_blank”} or [Kotlin](https://github.com/segmentio/analytics-kotlin){:target="_blank”}) with the Actions-framework version of the destination, you do not need the device-mode connection. {% capture track_purchase_details %} @@ -107,14 +107,16 @@ The group id that Mixpanel will use is `12345`. {% capture identify_user_details %} > success "" -> The below special traits will be mapped to Mixpanel reserved properties automatically to fit Mixpanel's use cases. `traits.created` -> `$created`, `traits.email` -> `$email`, `traits.firstName` -> `$first_name`, `traits.lastName` -> `$last_name`, `traits.name` -> `$name`, `traits.username` -> `$username` and `traits.phone` -> `$phone`. +> Segment maps the userId set in the identify event to the distinct ID in Mixpanel. Segment also maps the following traits to Mixpanel reserved properties to fit Mixpanel's use cases: `traits.created` -> `$created`, `traits.email` -> `$email`, `traits.firstName` -> `$first_name`, `traits.lastName` -> `$last_name`, `traits.name` -> `$name`, `traits.username` -> `$username` and `traits.phone` -> `$phone`. {% endcapture %} {% include components/actions-fields.html content1=track_purchase_details section1="trackPurchase" content2=group_identify_user_details section2="groupIdentifyUser" content3=identify_user_details section3="identifyUser" %} -## Migration from Mixpanel Classic -{% include content/ajs-upgrade.md %} +> info "Anonymous ID format" +> [Mixpanel](https://developer.mixpanel.com/reference/create-identity#create-identity){:target="_blank"} requires that values it receives for the anonymous identifier (`anonymousId` in Segment) must be in the UUID v4 format. Analytics.js sends `anonymousId` in this format by default. If you manually send anonymous identifiers to Mixpanel, ensure they are in the correct format. + +## Migration from Mixpanel Classic Assuming you're already using Segment Cloud-mode, the Mixpanel (Actions) destination is expected to have no breaking changes when upgrading. With the exception of a few new properties added to your events in the new Actions destination, there should be no difference in the data received in Mixpanel when using either of the Mixpanel destinations. @@ -123,4 +125,22 @@ If you want to confirm, you can configure the new destination to point to a diff > info "" > Contact Mixpanel support if you find features missing from the Mixpanel (Actions) destination that were available in the classic Mixpanel destination. -{% include components/actions-map-table.html name="mixpanel" %} \ No newline at end of file +{% include components/actions-map-table.html name="mixpanel" %} + +## Troubleshooting + +### Track events are not attributed to Mixpanel Groups + +If the Mixpanel (Actions) destination uses $group_id as the group key, ensure that the mappings handling your `track` events have the field for **Group ID** mapped to a valid value. By default, this field maps to the event variable `context.groupId`. + +To send Track events with a custom Group Key, include the key as a property of Track events. For example: +```js +analytics.track('Example Event', { custom_group_key : 'group1' }); +``` +### Failed events due to timestamp + +If your integration is correct and you are still seeing failed events, review and verify that you are sending all date properties as UTC time format, due to Mixpanel timestamp format requirements. + +### Why is Boardman, Oregon appearing in my users' profile location field? + +If you are seeing traffic from Boardman or see Segment as the browser, you might be sending server side calls to your Mixpanel (Actions) destination. To correctly populate your users' profile location field, manually pass the IP information in the context object from the server. diff --git a/src/connections/destinations/catalog/actions-moengage/index.md b/src/connections/destinations/catalog/actions-moengage/index.md index 5a85e87e66..19b0dd1ae8 100644 --- a/src/connections/destinations/catalog/actions-moengage/index.md +++ b/src/connections/destinations/catalog/actions-moengage/index.md @@ -18,10 +18,6 @@ id: 620feaa207e70f6c6a765ff7 > info "" > This page is about the [Actions-framework](/docs/connections/destinations/actions/) MoEngage Segment destination. There's also a page about the [non-Actions MoEngage Destination](/docs/connections/destinations/catalog/moengage/). Both of these destinations receives data from Segment. - - -{% include content/ajs-upgrade.md %} - This destination is maintained by MoEngage. For any issues with the destination, [contact the MoEngage Support team](mailto:support@moengage.com). @@ -52,7 +48,7 @@ MoEngage (Actions) provides the following benefits over the MoEngage Classic des Name | The name of the Moengage destination such as MoEngage prod, MoEngage test. | App Id | Navigate to Settings > API > General on your MoEngage dashboard to access the App ID. | App Key | Navigate to Settings > API > General on your MoEngage dashboard to access the App Key. | - Endpoint Region | This is your MoEngage data center. [Read more](https://help.moengage.com/hc/en-us/articles/360057030512-Data-Centers-in-MoEngage). | + Endpoint Region | This is your MoEngage data center. [Read more](https://help.moengage.com/hc/en-us/articles/360057030512-Data-Centers-in-MoEngage){:target="_blank”}. | 7. Enable the toggle option to **Enable** the destination and click **Save changes**. @@ -83,8 +79,8 @@ If successful, the data starts flowing into your MoEngage account in 3-5 minutes -## Migration from the classic MoEngage destination + +## Migration from the classic MoEngage destination -{% include content/ajs-upgrade.md %} +Include any pertinent information here. --> diff --git a/src/connections/destinations/catalog/actions-moloco-rmp/index.md b/src/connections/destinations/catalog/actions-moloco-rmp/index.md new file mode 100644 index 0000000000..19fda5d9a0 --- /dev/null +++ b/src/connections/destinations/catalog/actions-moloco-rmp/index.md @@ -0,0 +1,143 @@ +--- +title: Moloco Commerce Media Destination +id: 65f05e455b125cddd886b793 +beta: true +--- + +[Moloco Commerce Media](https://www.moloco.com/products/moloco-retail-media-platform){:target="_blank”} (MCM) is a technology solution that empowers marketplaces and online retailers to build and scale a retail media business (for example, sponsored ads). Moloco’s solution helps platforms leverage and activate their first-party data to deliver highly relevant and performant ads, automate ad decision-making, and scale their ads business. + +The Moloco Commerce Media destination can send user events collected using the Segment SDK to Moloco’s platform for a simplified performance ads integration. + +This allows you to run performance advertising without having to build your own backend system to ingest and send user events data in realtime to Moloco. + +## Getting started + +### Prerequisites +Before you configure the Moloco Commerce Media destination, add a source to Segment and use the [Source Debugger](/docs/connections/sources/debugger/) to verify Segment is receiving events. + +Before you configure the Moloco Commerce Media destination, reach out to your Moloco representative about the following account information: +- Moloco Platform ID +- Moloco Event Service API key + +After you obtain that account information, you can move on to the Segment app. + +### Set up your Moloco destination +1. From the Segment web console, click **Catalog**. +2. On the Catalog page, search for “Moloco”, select it, and click **Add destination**. +3. Choose which of your sources to connect the destination to. +4. In the Moloco MCM destination settings page, fill the Platform ID and API key fields with your Moloco Platform ID and Event Service API key. +5. Select “APP" if your source endpoint is a mobile app, and "SITE" if it is a website. + +## Identify + +Moloco strongly recommends that you identify your logged-in users using Segment's [Identify method](/docs/connections/spec/identify/) and that you hash the user ID before sending it to Moloco. + +Please find an example Identify call below: + +```js +analytics.identify('361b1fdfbeaa9d64a13c033eb9f970dc6740f6bc', { + email: 'john.doe@example.com' +}); +``` + +Once a user is identified, each call to Segment's [Track method](/docs/connections/spec/track/) automatically records the user ID. +Users that are not logged in can be tracked using an [anonymousID](/docs/connections/spec/identify/#anonymous-id). Moloco Commerce Media does not use anonymousIDs for users that are not logged in. Segment recommends formatting your anonymousID in UUID format. + +> info" " +> If you hash the user ID before sending it to Moloco, ensure you reuse the same hashed ID when calling other Moloco APIs. + + +## Track + +If you’re not familiar with the Segment Spec, take a look to understand what the [Track method](/docs/connections/spec/track/) does. The mappings in the Moloco Commerce Media destination are built based on the Segment [Ecommerce Spec](/docs/connections/spec/ecommerce/v2/). + +Please find below an example call to track a product detail page (PDP) view event: + +```js +analytics.track("Product Viewed", { + product_id: "1193", + name: "Newage Uplift Eye Care Cream", + price: 19.99 + currency: "USD" + quantity: 1, + image_url: "https://www.example.com/image.png" +}); +``` + +## Page + +If you’re not familiar with the Segment Spec, take a look to understand what the [Page method](/docs/connections/spec/page/) does. + +Please find below an example call to page: + +```js +analytics.page(); +``` + +If you use Segment’s Web SDK, this call automatically collects the page information. Here’s an example of page information automatically collected using Segment’s Web SDK. + +```js + "page": { + "path": "/account", + "referrer": "", + "search": "", + "title": "Your Account", + "url": "https://www.example.com/account" + }, +``` + +However for iOS and Android, it won’t collect page information. + +Moloco Commercial Media requires the [page_id](https://mcm-docs.moloco.com/docs/51-user-event-data-specifications#page_view-event-type){:target="_blank”} attribute for a PAGE_VIEW event. Using the Web SDK, the page_id can be associated with the path attribute. However for iOS/Android, Moloco Commercial Media recommends using the Page Identifier Token field. + +The Page Identifier Token field accepts key:value pairs of strings that can identify the page. +Stringification Logic is: {key}:{value}s concatenated by ";" + +Moloco Commercial Media ignores the Page Identifier Token if page_id is passed, as page_id has a higher priority. + +Here’s an example of a Page Identifier Token that could be tracked in a mobile app. + +Say the input had the following schema: + +```js + ... + "event": "Product List Viewed", + "vertical": "fruit" + ... +``` + +and user chose the following mapping: + +```js + // "event" represents the name of the event + event: properties.event + // "vertical" represents which vertical the event happened on + vertical: properties.vertical + + // The combination of those two tokens can repsent + // "Which action happened on which vertical" +``` + +The tokens are stringified into the following: + +```js + "event:Product List Viewed;vertical:fruit" +``` + +The tokens are stringified in the format of the above example because they are key-value pairs concatenated by a semicolon (;). + +> info " " +> if you decide to use the Page Identifier Token in your mobile app, reuse the same Page Identifier Token in place of page_id when calling Moloco’s APIs. + +## Mappings + +In the Mappings tab, some fields are chosen by default if some common fields map to Moloco Event’s fields. If the mapped key does not exist in the input data, it won’t trigger an error. Instead, the mapping will not pass any value. + +If you are using **the default fields in a custom way**, please confirm that your mapping meets Moloco's requirements. + +Default Mappings are not hard rules. They can be modified to your convenience. + +{% include components/actions-fields.html %} +## Monitoring + +Once the mappings are configured correctly, you can verify the flow of events from your source to Moloco’s destination in the [Delivery Overview](/docs/connections/delivery-overview/) tab of your Moloco destination. If you correctly configured your destination, you should see a growing **Successful delivery** count. diff --git a/src/connections/destinations/catalog/actions-movable-ink/index.md b/src/connections/destinations/catalog/actions-movable-ink/index.md new file mode 100644 index 0000000000..572052cdc7 --- /dev/null +++ b/src/connections/destinations/catalog/actions-movable-ink/index.md @@ -0,0 +1,56 @@ +--- +title: Movable Ink (Actions) Destination +id: 6537b55db9e94b2e110c9cf9 +beta: true +--- + +[Movable Ink](https://movableink.com/){:target="_blank"} lets email marketers deliver jaw-dropping customer experiences. Movable Ink's cloud-based software activates any data to generate intelligent content at the moment of open. + +This destination enables you to send Segment event data which can be used to automatically generate personalized content at scale across email and mobile experiences. + +> info "" +> This destination is maintained by Movable Ink. For any issues with the destination, please reach out to your Movable Ink Client Experience team. + +## Pre-Requisites + +A Movable Ink Stories license is required to use this integration. Please reach out to your Movable Ink client experience team with any questions. + +You'll need to share sample event payloads with your Movable Ink Client Experience team before enabling the destination in Segment. Your Client Experience team will then work with a Solutions Architect to map the event within Movable Ink and share an endpoint URL, access key ID, and access secret. This event mapping in Movable Ink and API credentials are required for a successful response. + +### Find sample event payloads in Segment: + +To find sample event payloads in Segment: + +1. Navigate to **Connections > Sources** and click on the source you’d like to stream data from. +2. Select the **Debugger** tab. You'll see a list of incoming sample events. +3. Select the event you’re interested in, then select **Raw** to view a full sample payload. +4. Copy and paste this sample payload and share with your client experience team. + +Your client experience manager will then provide you with a Movable Ink endpoint URL, access Key ID, and access secret. + +## Getting started + +1. From the Segment web app, navigate to **Connections > Catalog**, then select **Destinations**. +2. Search for "Movable Ink (Actions)" and select it. +3. Click **Add Destination**. +4. Within the **Settings** tab of your destination, input your Movable Ink API credentials into the following fields: +- **Username**: paste your Movable Ink Access Key ID +- **Access Secret**: paste your Movable Ink Access Secret +- **Movable Ink URL**: paste your Movable Ink Endpoint URL + +## Select events and event properties to stream to Movable Ink + +"Send Entire Event" is the only action available with this destination. To configure this action: +1. Navigate to the **Mappings** section of your destination. +2. Select **Edit Mapping** and tailor the events you wish to send by adding or removing conditions that trigger this action. +3. Preview the data: +- Load a test event from the source or use a sample event for data preview. +4. Map specific fields (optional): +- Click **Test Mapping** to send a test event and identify any potential issues. +- Return to the Mappings overview page and enable your mapping. +6. Navigate to your integration’s **Settings** tab and activate the integration by toggling on **Enable Destination**. + +> info "" +> For any unexpected errors, contact your Movable Ink client experience team with the full sample payload. + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-optimizely-advanced-audience-targeting/index.md b/src/connections/destinations/catalog/actions-optimizely-advanced-audience-targeting/index.md new file mode 100644 index 0000000000..d6514f037d --- /dev/null +++ b/src/connections/destinations/catalog/actions-optimizely-advanced-audience-targeting/index.md @@ -0,0 +1,43 @@ +--- +title: Optimizely Advanced Audience Targeting Destination +id: 64edeb2bee24614fe52ede34 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Optimizely Advanced Audience Targeting](https://optimizely.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target=”blank”} allows you to sync your Segment Engage audiences to Optimizely for targeting with Web Experimentation audiences, Feature Experimentation audiences, and CMS Visitor Groups. + +This destination is maintained by Optimizely. For any issues with the destination, [contact the Optimizely Support team](mailto:support@optimizely.com). + +## Getting started + +**Within your Optimizely Data Platform Account** + +1. Navigate to the **App Directory**. +2. Use autocomplete to find the **Twilio Segment** app. +3. Click into the app and click **INSTALL**. +4. Click **SETTINGS > GENERATE** and copy the resulting token to your clipboard. + +**Within your Twilio Segment Account** + +1. From the Segment web app, navigate to **Connections > Catalog** and select the **Destinations** tab of the catalog. +2. Select the Destinations Actions tab and search for **Optimizely Advanced Audience Targeting**. +3. Select the **Configure Optimizely Advanced Audience Targeting** tile. +4. Select your **Engage Space** as a source. Note that this destination only works when an Engage Space is configured as a Source. +5. Click **Confirm Source**. +6. Within the **Settings** tab paste your ODP token into the **API Key** field, select your region, enable the integration and click **Save Changes**. +7. Click into the **Mappings** section, then click **New Mapping**, then click on the **Sync Audience** tile. +8. In section 3 **Select Mappings** ensure the user identifier you are targeting with your Advanced Audience Targeting integration is mapped to the Optimizely User ID field. +9. Click **Save**. +10. Enable the Action by toggling the Status to **Enabled**. +11. Click back to the **Settings** tab and enable the destination by toggling the **Enable Destination** toggle to *On*. +12. Click **Save changes**. + +{% include components/actions-fields.html %} + +## Notes + +- Ensure the Advanced Audience Targeting integration is configured in your Optimizely Products so that you can access your connected audiences from Segment Engage. + +- If connecting your Segment Engage audiences to **Optimizely Web Experimentation** ensure the user id mapped to the Optimizely User ID in the Destination mappings area is an identifier available on the browser (client side). This allows Optimizely web to properly check audience membership for visitors included in connected Segment Engage audiences. diff --git a/src/connections/destinations/catalog/actions-optimizely-feature-experimentation-cloud/index.md b/src/connections/destinations/catalog/actions-optimizely-feature-experimentation-cloud/index.md new file mode 100644 index 0000000000..01ffec24f3 --- /dev/null +++ b/src/connections/destinations/catalog/actions-optimizely-feature-experimentation-cloud/index.md @@ -0,0 +1,61 @@ +--- +title: 'Optimizely Feature Experimentation (Actions) Destination' +id: 641d5acea88fa531b9068608 +hide-personas-partial: true +hide-boilerplate: false +hide-dossier: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Optimizely Feature Experimentation](https://www.optimizely.com/products/experiment/feature-experimentation/){:target="_blank"} is a feature flagging and experimentation platform for websites, mobile apps, chatbots, APIs, smart devices and anything else with a network connection. + +With the Optimizely SDK you can deploy code behind feature flags, experiment with A/B tests and use percentage deliveries to roll out or roll back flags immediately. + +Segment’s Optimizely Feature Experimentation (Actions) destination supports tracking of conversion events. +Segment supports one action (event): trackEvent. [TrackEvent](https://docs.developers.optimizely.com/experimentation/v4.0.0-full-stack/docs/track-event-javascript-node){:target="_blank"} sends user conversion events for active experiments. Segment sends data using Optimizely's [Event API](https://docs.developers.optimizely.com/experimentation-data/reference/post_events){:target="_blank"}. + +## Prerequisites + +Optimizely works differently than other Segment destinations: it requires that customers implement some Optimizely functionality native to make sure your experiment logic runs correctly. + +Segment maps `track` events to Optimizely's `track` method. You must implement all Optimizely decision-based methods, such as `activate` and `isFeatureEnabled`. Segment sends data using Optimizely's [Event API](https://docs.developers.optimizely.com/experimentation-data/reference/post_events){:target="_blank"}. +Segment's API does not include methods that correspond to decision-based methods. + +This requires that customers include a native Optimizely implementation before their Segment implementation on pages or in mobile apps where Optimizely experiments run. + +## Getting started + +Before connecting to the Optimizely Feature Experimentation destination, you must have a [Optimizely Feature Experimentation](https://www.optimizely.com/products/experiment/feature-experimentation/){:target="_blank"} account, Account ID and Datafile URL. + +To connect the Optimizely Feature Experimentation destination: + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for **Optimizely Feature Experimentation** in the Destinations Catalog, and select the destination. +3. Click **Configure Optimizely Feature Experimentation (Actions)** in the top-right corner of the screen. +4. Select the source that will send data to Optimizely Feature Experimentation and follow the steps to name your destination. +5. On the **Settings** tab, input your `datafile` URL and your Account Id. Toggle “Enable Destination” on and click **Save Changes**. +6. Navigate to the **Mappings** tab, click **New Mapping**, and select **Track Event**. +7. Under Select mappings, select the event key from the dropdown or input the event manually as the "event" and select the other mappings. Click **Save** and toggle to enable the mapping. + * **Note:** The conversion event will only be sent if the configured event key exactly matches the name of an active experiment metric set up in the Optimizely dashboard. + * **Note:** The current user should activate a running experiment with the associated metric before sending track events to Segment. + +### Track + +Upon invocation of a Segment `track` event, Segment maps the event to an Optimizely `track` event: +* If the Segment event name matches exactly the name of an active experiment `metric` set up in the Optimizely dashboard; +* If the experiment `metric` is associated with a running experiment; +* If the current user has been assigned a `userId` using Segment's `identify` method (for example, `analytics.identify('123')`); +* If the current user is activated in a running experiment with the associated `metric`. + +Segment also handles the following mapping: +* Segment maps `track` events to Optimizely `eventName`. +* Segment maps `track` event, `properties`, to Optimizely `eventTags`. +* Segment maps `track` event, `context.traits`, to Optimizely `attributes`. + +`revenue` values should be passed as a Segment `property`. The value should be an integer and represent the value in cents, so, for example, $1 should be represented by `100`. + +## GDPR Support +Segment supports deleting/suppressing users in Optimizely Feature Experimentation (Actions) using the [Segment app](/docs/privacy/user-deletion-and-suppression/). Before deleting/suppressing a user, create a [Personal Access Token](https://developers.optimizely.com/x/authentication/personal-token/){:target="_blank”} in Optimizely and provide it as the value of the Personal Access Token setting. + +{% include components/actions-fields.html settings="true"%} diff --git a/src/connections/destinations/catalog/actions-outfunnel/index.md b/src/connections/destinations/catalog/actions-outfunnel/index.md index 91d0546e9c..0198a5f3b8 100644 --- a/src/connections/destinations/catalog/actions-outfunnel/index.md +++ b/src/connections/destinations/catalog/actions-outfunnel/index.md @@ -3,21 +3,19 @@ title: Outfunnel Destination hide-boilerplate: true hide-dossier: true id: 63ff8bae963d5cb4fc79f097 -private: false -hidden: false +private: true +hidden: true --- {% include content/plan-grid.md name="actions" %} -[Outfunnel](https://outfunnel.com/product-led-sales-platform/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a product-led sales platform that syncs product usage insights to CRMs like Pipedrive so your salespeople can easily find product-qualified leads and close more revenue. +[Outfunnel](https://outfunnel.com/product-led-sales-platform/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a product-led sales platform that syncs product usage insights to CRMs like Pipedrive so your salespeople can easily find product-qualified leads and close more revenue. This destination is maintained by Outfunnel. For any issues with the destination, [contact their Support team](mailto:support@outfunnel.com). Outfunnel’s Segment integration is an [Actions-based Destination in cloud mode](/docs/connections/destinations/#connection-modes)  that lets you send your frontend and backend events directly to Outfunnel. -{% include content/ajs-upgrade.md %} - {% include content/beta-note.md %} ## Benefits of Outfunnel diff --git a/src/connections/destinations/catalog/actions-pendo-web/index.md b/src/connections/destinations/catalog/actions-pendo-web/index.md new file mode 100644 index 0000000000..4ae5fd21e8 --- /dev/null +++ b/src/connections/destinations/catalog/actions-pendo-web/index.md @@ -0,0 +1,41 @@ +--- +title: Pendo Web (Actions) Destination +id: 6501a4325a8a629197cdd691 +beta: true +hide-boilerplate: true +hide-dossier: true +--- + +{% include content/plan-grid.md name="actions" %} + + +[Pendo](http://www.pendo.io/){:target="_blank"} combines powerful software usage analytics with in-app guidance and user feedback capabilities, enabling even non-technical teams to deliver better product experiences to their customers or employees. + +Pendo maintains this destination. For issues with the Pendo Web (Actions) destination, please reach out to [Pendo's support team](https://support.pendo.io/hc/en-us/articles/360034163971-Get-help-with-Pendo-from-Technical-Support){:target="_blank"}. + +> success "" +> **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Pendo Web (Actions) Segment destination. There's also a page about the [non-Actions Pendo destination](/docs/connections/destinations/catalog/pendo/). Both of these destinations receives data from Segment. + +## Benefits of Pendo Web (Actions) vs Pendo Classic + +Pendo Web (Actions) provides the following benefits over the classic Pendo destination: + +- **Support for Track, Identify, and Group calls**. The classic Pendo destination did not support Track calls and required users to configure an additional Webhook destination. +- **Full region support**. Setup allows the destination to be configured for US, EU, US restricted, or Japan. +- **Supports CNAME for Pendo**. Works with subscriptions using Pendo's custom CNAME feature. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Pendo Web (Actions)**. +4. Click **Add destination ->**. +5. Select an existing Source to connect to Pendo Web (Actions). +6. In the destination settings, enter your Pendo API Key, which a Pendo Admin can find in the Pendo UI by going to **Settings** > [Subscription Settings](https://app.pendo.io/admin){:target="_blank"} > **Applications**, opening the relevant app, then locating the **API Key** value. +7. Select the correct region for your Pendo subscription. + +{% include components/actions-fields.html %} + +## Migration from the classic Pendo destination + +Remove the classic Pendo destination and Webhook destination from your Segment workspace before adding the Pendo Web (Actions) destination. diff --git a/src/connections/destinations/catalog/actions-pinterest-conversions-api/index.md b/src/connections/destinations/catalog/actions-pinterest-conversions-api/index.md new file mode 100644 index 0000000000..c1f4d90a65 --- /dev/null +++ b/src/connections/destinations/catalog/actions-pinterest-conversions-api/index.md @@ -0,0 +1,160 @@ +--- +title: Pinterest Conversions API +id: 63e42e512566ad7c7ca6ba9b +hide-personas-partial: true +hide-boilerplate: false +hide-dossier: true +private: false +hidden: false + +--- +The Pinterest Conversions API destination is a server-to-server integration with [The Pinterest API for Conversions](https://help.pinterest.com/en/business/article/the-pinterest-api-for-conversions){:target="_blank"} that allows advertisers to send conversions directly to Pinterest without requiring a Pinterest Tag. These conversions map to Pinterest campaigns for conversion reporting to improve conversion visibility. When you pass events to Pinterest, advertisers can use Pinterest's insights to evaluate an ad's effectiveness to improve content, targeting, and placement of future ads. + +Advertisers can send web, in-app, or offline conversions to Pinterest’s server to server endpoint in real-time. Events received in real time or within an hour of the event occurring are reported as web or app events. Events received outside of this window, as well as delayed batch events are considered as offline events. + +The API for Conversions helps Pinterest provide a more comprehensive view of your campaign performance. All advertisers who currently use the Pinterest Tag will benefit from using it in tandem with the API for Conversions. + +## Benefits of Pinterest Conversions API (Actions) + +The Pinterest Conversions API destination provides the following benefits: + +- **Fewer settings**. Data mapping for actions-based destinations happens during configuration, which eliminates the need for most settings. +- **Clearer mapping of data**. Actions-based destinations enable you to define the mapping between the data Segment receives from your source, and the data Segment sends to the Pinterest Conversions API. +- **Prebuilt mappings**. Mappings for standard Pinterest Conversions API events, like `Add to Cart`, are prebuilt with the prescribed parameters and available for customization. +- **Support Deduplication**. Deduplication removes duplicates events which improves the accuracy of your conversions +- **Support for page calls**. Page calls can be sent to Pinterest as a standard Page View. +- **Support for multi-user arrays**. User data nested within arrays, like the `User Data` array in the Order Completed event, can be sent to Pinterest. +- **Data normalization**. Data is normalized before it's hashed to send to Pinterest Conversions. + +## Getting started + +Before connecting to the Pinterest Conversions destination, you must have a [Pinterest](https://ads.pinterest.com/login/){:target="_blank"} account and an Ad Account ID. + +To connect the Pinterest Conversions API Destination: + +1. From the Segment web app, navigate to **Connections > Catalog**. +2. Search for **Pinterest Conversions API** in the Destinations Catalog, and select the destination. +3. Click **Configure Pinterest Conversions API**. +4. Select the source that will send data to Pinterest Conversions API and follow the steps to name your destination. +5. On the **Basic Settings** page, configure the following fields: + - Destination Name + - [Ad Account ID](https://developers.pinterest.com/docs/conversions/conversions/#Find%20your%20%2Cad_account_id#Find%20your%20%2Cad_account_id#Find%20your%20%2Cad_account_id){:target="_blank”} + - [Conversions Token](https://developers.pinterest.com/docs/conversions/conversions/#Get%20the%20conversion%20token){:target="_blank”} +6. Navigate to the **Mappings** tab, there are already Prebuilt mapping like `Checkout,Search,Add to Cart` defined with prescribed parameter . All required ,recommended and optional fields are listed [here](https://developers.pinterest.com/docs/conversions/best/#Authenticating%20for%20the%20Conversion%20Tracking%20endpoint#The%20%2Cuser_data%2C%20and%20%2Ccustom_data%2C%20objects#Required%2C%20recommended%2C%20and%20optional%20fields#Required%2C%20recommended%2C%20and%20optional%20fields){:target="_blank”} +7. If you want to create **New Mapping**, and select **Report Conversions Event** ,configure and enable it. +8. Follow the steps in the Destinations Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customize-mappings). +9. Enable the destination using the **Enable Destination** toggle switch and click **Save Changes**. + + +{% include components/actions-fields.html settings="true"%} + +> warning "" +> By default, all mappings send as `web` conversions. If you want to send events as mobile or offline conversions, update the Action Source in each mapping to be `app_android`, `app_ios`, `offline`. + +## FAQ & Troubleshooting + +### Deduplication with Pinterest Tag + +Pinterest cannot know if a conversion reported by the Tag and another reported by the API for Conversions are the same. + +Because Pinterest recommends using both the API for Conversions and the Pinterest Tag, deduplication is an essential part of the implementation process. It helps to avoid double-counting of a single event when it’s sent through multiple sources, such as the Pinterest Tag and the Pinterest API for Conversions. + +For example, if a user triggers an add to cart event and the tag reports the data using `123` as the event ID. Later, their web server reports the conversion to the API and uses `123` as the event ID. When Pinterest receives the events, Segment looks at the event IDs to confirm they correspond to the same event. + +By using deduplication advertisers can report conversions using both the tag and the API without having to worry about over-counting conversions. This will result in more conversions being attributed than either alone, because if the tag doesn’t match an event, but the API does (or vice versa), the event can still be linked. + +Advertisers should use deduplication for any events they expect to be reported by multiple sources across the API and the Pinterest Tag. + +Conversion Events must meet the following requirements to be considered for deduplication: + +1. The event has non-empty and non-null values for `event_id` and `event_name` +2. The `action_source` of the event is not `offline` (for example, events that occurred in the physical world, like in a local store) The `action_source` parameter is an enum that gives the source of the event – `app_android`, `app_ios`, `web`, or `offline`. +3. The duplicate events arrived within 24 hours of the time of receipt of the first unique event. + +> info "" +> Segment offers a client-side destination specifically designed for the Pinterest Tag. You can find detailed documentation and further information on how to implement this integration by following this [link](https://segment.com/catalog/integrations/pinterest-tag/){:target="_blank”}. + +### Events fail to send due to no App Name set + +App Name is a mandatory field for many of the Pinterest Conversion API destination's mappings. Segment's mobile libraries automatically collect and map the App Name to the correct field. However, Segment's web or server-based libraries do not automatically collect this field, which can cause mappings to fail. Segment recommends adding the App Name to the Segment event, or hardcoding a static string in the mapping as the App Name. + +## Limited Data Processing +Starting from Jan 1, 2023, Pinterest introduced the Limited Data Processing flag as per California Consumer Privacy Act (CCPA). With this flag set Pinterest will allow advertisers to comply with CCPA. + +Advertisers are responsible for complying with user opt-outs, as well as identifying the user’s state of residency when implementing the Limited Data Processing flag. + +Keep in mind that the Limited Data Processing flag could impact campaign performance and targeting use cases. Pinterest recommends using the Limited Data Processing flag on a per-user basis for best results. + +LDP relies on 3 fields and is enabled only when all 3 combinations are met, if one of them is not met then LDP is disabled / ignored. + +| Field Name | Field Description | Required Value for LDP | +| -------------- | ----------------------------------------------- | ---------------------- | +| `opt_out_type` | Opt Out Type based on User’s privacy preference | "LDP" | +| `st` | State of Residence | "CA" | +| `country` | Country of Residence | "US" | + + + +### PII Hashing + +Segment creates a SHA-256 hash of the following fields before sending to Pinterest: +- External ID +- Mobile Ad Identifier +- Email +- Phone +- Gender +- Date of Birth +- Last Name +- First Name +- City +- State +- Zip Code +- Country + +### User Data Parameters + +Segment automatically maps User Data fields to their corresponding parameters [as expected by the Conversions API](https://developers.pinterest.com/docs/conversions/best/#Authenticating%20for%20the%20Conversion%20Tracking%20endpoint#The%20%2Cuser_data%2C%20and%20%2Ccustom_data%2C%20objects#Required%2C%20recommended%2C%20and%20optional%20fields#Required%2C%20recommended%2C%20and%20optional%20fields#User_data%2C%20and%20%2Ccustom_data%2C%20objects){:target="_blank"} before sending to Pinterest Conversions: + +| User Data Field | Conversions API User Data Parameter | +| ----------------- | ----------------------------------- | +| External ID | `external_id` | +| Mobile Ad Id | `hashed_maids` | +| Client IP Address | `client_ip_address` | +| Client User Agent | `client_user_agent` | +| Email | `em` | +| Phone | `ph` | +| Gender | `ge` | +| Date of Birth | `db` | +| Last Name | `ln` | +| First Name | `fn` | +| City | `ct` | +| State | `st` | +| Zip Code | `zp` | +| Country | `country` | + +### Custom Data Parameters + +Segment automatically maps Custom Data fields (excluding `content_ids`, `contents`, `num_items`, `opt_out_type`) to their corresponding parameters [as expected by the Conversions API](https://developers.pinterest.com/docs/conversions/best/#Authenticating%20for%20the%20Conversion%20Tracking%20endpoint#The%20%2Cuser_data%2C%20and%20%2Ccustom_data%2C%20objects#Required%2C%20recommended%2C%20and%20optional%20fields#Required%2C%20recommended%2C%20and%20optional%20fields#User_data%2C%20and%20%2Ccustom_data%2C%20objects){:target="_blank"} before sending to Pinterest Conversions: + +| User Data Field | Conversions API Custom Data Parameter | +| --------------- | ------------------------------------- | +| Currency | `currency` | +| Value | `value` | +| Content IDs | `content_ids` | +| Contents | `contents` | +| Number of Items | `num_items` | +| Order ID | `order_id` | +| Search String | `search_string` | +| Opt Out Type | `opt_out_type` | + +### Server Event Parameter Requirements + +Pinterest requires the `action_source` server event parameter for all events sent to the Pinterest Conversions API. This parameter specifies where the conversions occur. + +### Verify Events in Pinterest Conversions Dashboard + +After you start sending events, you should start seeing them in dashboard. You can confirm that Pinterest received them: + +1. Go to the Events Overview. +2. Click on the Event History to see all the events sent to Pinterest conversions. + diff --git a/src/connections/destinations/catalog/actions-pipedrive/images/deal_match_fields.png b/src/connections/destinations/catalog/actions-pipedrive/images/deal_match_fields.png new file mode 100644 index 0000000000..b586a4330c Binary files /dev/null and b/src/connections/destinations/catalog/actions-pipedrive/images/deal_match_fields.png differ diff --git a/src/connections/destinations/catalog/actions-pipedrive/images/email_match_field.png b/src/connections/destinations/catalog/actions-pipedrive/images/email_match_field.png new file mode 100644 index 0000000000..5cd19d5173 Binary files /dev/null and b/src/connections/destinations/catalog/actions-pipedrive/images/email_match_field.png differ diff --git a/src/connections/destinations/catalog/actions-pipedrive/images/match_field.png b/src/connections/destinations/catalog/actions-pipedrive/images/match_field.png new file mode 100644 index 0000000000..dc6a9d22f3 Binary files /dev/null and b/src/connections/destinations/catalog/actions-pipedrive/images/match_field.png differ diff --git a/src/connections/destinations/catalog/actions-pipedrive/index.md b/src/connections/destinations/catalog/actions-pipedrive/index.md index 86e0033931..851366e810 100644 --- a/src/connections/destinations/catalog/actions-pipedrive/index.md +++ b/src/connections/destinations/catalog/actions-pipedrive/index.md @@ -3,15 +3,11 @@ title: Actions Pipedrive hide-boilerplate: true hide-dossier: true id: 5f7dd8191ad74f868ab1fc48 -private: true -hidden: true --- {% include content/plan-grid.md name="actions" %} -The Actions Pipedrive destination is an integration that allows customers to share events from Segment directly to Pipedrive. When you use Pipedrive with Segment, you don’t need to manually export and upload data to Pipedrive. Your customer data will remain up to date in real time and across all enabled integrations. Every tool you use to interact with leads and customers will land in Pipedrive, so you can always have a clear picture in front of you. - -{% include content/ajs-upgrade.md %} +The Actions Pipedrive destination allows customers to share Segment event data with Pipedrive. Segment events sent to Pipedrive will either create new Entities or update existing Entities in Pipedrive. ## Benefits of Actions Pipedrive @@ -22,21 +18,34 @@ Actions Pipedrive provides the following benefits: ## Getting started -1. From the Segment web app, click **Catalog**, then click **Destinations**. -2. Find the Destinations Actions item in the left navigation, and click it. -3. Click **Configure "Actions Pipedrive"**. -4. Select an existing Source to connect to "Actions Pipedrive". -5. When adding Pipedrive as a destination, you will be redirected to the basic settings page, where you need to enter the destination name as well as Pipedrive's domain and API token. -6. To complete the installation process, switch to advanced settings and enter your Pipedrive IDs. +1. Sign in to your Segment Workspace +2. Click to the **Catalog** tab. +3. Click on the **Destinations** tab. +2. Use the search field to find the 'Pipedrive' destination. Click on the **Actions Pipedrive** tile. +3. Click **Add Destination**. +4. Select a source to connect to and click the **Next** button. +5. Provide a name for your Pipedrive destination and click the **Create Destination** button. +6. On the Settings tab, provide values in the **Domain** and **API Token** settings fields, then click the **Save Changes** button. +7. Navigate to the **Mappings** tab to configure how Segment events will be mapped to Pipedrive Entities. By default, mappings to upsert to Pipedrive's Person, Organization and Activity Entities will already be enabled. You can configure new Mappings by clicking on the **New Mapping** button. +8. After you've configured and enabled your Mappings, click back to the **Settings** tab and enable the integration using the **Enable Destination** toggle. Segment should now start sending event data to Pipedrive. -To set up the Segment integration with your Pipedrive account: -1. Go to either your Marketplace menu within your settings or directly to Pipedrive's Marketplace. -2. Search for *Segment* and click on **Install now**. -3. A new window will pop up and prompt you to allow Segment to connect with Pipedrive. -4. Choose the Pipedrive account you wish to connect to, then, click **Allow and Install**. +## Inserting new Entities compared to updating existing Entities -Once the installation is successful, you'll be redirected to Segment to authenticate your account. +Segment uses the **Match value** field value as a key when creating or updating an Entity in Pipedrive. By default, the **Match value** will be mapped to the **id** field for the corresponding Entity. You can specify which Pipedrive field to use as a key using the **Match field** field. -{% include components/actions-fields.html %} +**Match field** fields are dynamic and will populate with data from your Pipedrive account. +![Match value and and fields can be used to specify how Segment should update Pipedrive Entities](images/match_field.png) + +In the following example, Segment is configured to create or update Person Entities using the email field. +![Using email to upsert to the Person Entity](images/email_match_field.png) + +## Associating Entities with other Entities +Entities such as the **Deal** Entity can be configured to be associated with other Entities in Pipedrive. In the example with the **Deal** mapping below the following will happen: +1. A **Person** Entity with an email address matching **properties.email** will be associated with the **Deal** Entity being created or updated. +2. An **Organization** Entity with an ID matching **properties.org_id** will be assocated with the **Deal** Entity being created or updated. + +![Associating Entities with other Entities](images/deal_match_fields.png) + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-podscribe/index.md b/src/connections/destinations/catalog/actions-podscribe/index.md new file mode 100644 index 0000000000..48e2309f5e --- /dev/null +++ b/src/connections/destinations/catalog/actions-podscribe/index.md @@ -0,0 +1,95 @@ +--- +title: Podscribe (Actions) Destination +id: 643fdecd5675b7a6780d0d67 +--- + +[Podscribe](https://podscribe.com/){:target="\_blank”} measures the effectiveness of podcast advertising. Through integrations with podcast hosting providers, matches downloads with on-site actions, providing advertisers household-level attribution. + +{% include content/beta-note.md %} + +## Getting started + +1. From the Segment web app, navigate to **Connections > Catalog**. +2. Search for "Podscribe", select it, and choose which of your sources to connect the destination to. + +Once you start sending data to the Podscribe's Destination it will take up to 20 minutes to appear in the Podscribe postbacks page. + +{% include components/actions-fields.html %} + +## Page + +If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: + +```js +analytics.page(); +``` + +Page calls will be sent to Podscribe as a View event. + +Podscribe is an attribution platform, and as such, Podscribe needs more context about the visitor than just a User ID. Analytics.js [automatically collects context fields](/docs/connections/spec/common/#context-fields-automatically-collected). Podscribe requires certain context fields and properties for Page calls. Below is an example of a raw JSON payload that contains the minimum requirements. + +```js +{ + "type": "page", + "context": { + "ip": "111.111.111.111", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko Chrome/118.0.0.0 Safari/537.36" + }, + "properties": { + "referrer": "", + "url": "https://url.com" + }, + "timestamp": "2023-11-05T01:00:00.000Z", + "userId": "3212" +} +``` + +For Page events Podscribe requires: +- A `context` object that contains a `userAgent` and an `ip` field +- A `properties` object that contains a `referrer` and a `url` field + +You'll see these in the Page event's raw JSON payload above. + +The `context` and `properties` objects are required, along with the fields in them. If you're using Segment server-side you must send these attributes. + +## Track + +If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: + +```js +analytics.track("Order Completed", { + order_id: "50314b8e9bcf000000000000", + total: 27.5, + coupon: "hasbros", + currency: "USD", +}); +``` + +Track calls will be mapped to Podscribe events. Podscribe supports the following from the Segment Spec: + +- [Signed Up](/docs/connections/spec/b2b-saas/#signed-up) as `signup` +- [Order Completed](/docs/connections/spec/ecommerce/v2/#order-completed) as `purchase` + +For Track events, Podscribe requires: +- A `context` object that contains a `userAgent` +- An `ip` Podscribe also requires a `page` object that contains a `referrer` and a `url` field + +Analytics.js [automatically collects context fields](/docs/connections/spec/common/#context-fields-automatically-collected). Podscribe requires certain context fields for Track calls. Below is an example of a raw JSON payload that contains the minimum requirements. + +```js +{ + "type": "track", + "context": { + "ip": "1.2.3.4", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko Chrome/118.0.0.0 Safari/537.36" + "page": { + "url": "https://url.com", + "referrer": "" + } + }, + "event": "Test Event Name", + "userId": "test-user-xip99", + "timestamp": "2023-11-05T01:00:00.000Z", + "properties": {} +} +``` diff --git a/src/connections/destinations/catalog/actions-pushwoosh/index.md b/src/connections/destinations/catalog/actions-pushwoosh/index.md new file mode 100644 index 0000000000..8ea86c48ee --- /dev/null +++ b/src/connections/destinations/catalog/actions-pushwoosh/index.md @@ -0,0 +1,31 @@ +--- +title: Pushwoosh (Actions) Destination +id: 64e72af1eabf77368b877a51 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Pushwoosh](https://pushwoosh.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a customer engagement platform that lets you create personalized messaging campaigns combining multiple channels, like push notifications, in-app messages, emails, and SMS. + +Pushwoosh maintains this destination. For any issues with the destination, [contact the Pushwoosh support team](mailto:help@pushwoosh.com){:target="_blank"}. + +## Getting started + +### Pushwoosh SDK integration + +- If you configured Segment to receive push tokens, you don't need to integrate the Pushwoosh SDK into your app. +- If your Segment implementation doesn't receive push tokens, integrate the Pushwoosh SDK into your app before setting up the Pushwoosh integration. + +### Segment configuration + +1. From the Segment web app, navigate to **Connections > Destinations**, and click **Add Destination**. +2. Search for **Pushwoosh** and select it as the destination. +3. Choose the sources you want to connect the Pushwoosh destination to. +4. Open the destination settings. +5. Enter your [**Pushwoosh API key**](https://docs.pushwoosh.com/platform-docs/api-reference/api-access-token/){:target="_blank"} and **application code**, which you can find below the project name in Pushwoosh. Verify that the **Enable Destination** switch is toggled on, then click **Save Changes**. +6. Go to the **Mappings** tab and verify that the **Create or Update User Profile** and **Track Events options** are enabled. + +Once you've configured the integration, Pushwoosh will receive events and user attributes from Segment. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-qualtrics/index.md b/src/connections/destinations/catalog/actions-qualtrics/index.md index 33d0b071b8..3b14967b9a 100644 --- a/src/connections/destinations/catalog/actions-qualtrics/index.md +++ b/src/connections/destinations/catalog/actions-qualtrics/index.md @@ -11,11 +11,7 @@ id: 62e17e6f687e4a3d32d0f875 -[Qualtrics](https://qualtrics.com) is an Experience Management platform that allows companies to design and improve customer and employee experiences through listening, analysis and action. Power richer Qualtrics insights or perform action based on your event data using the Qualtrics destination - - - -{% include content/ajs-upgrade.md %} +[Qualtrics](https://qualtrics.com){:target="_blank”} is an Experience Management platform that allows companies to design and improve customer and employee experiences through listening, analysis and action. Power richer Qualtrics insights or perform action based on your event data using the Qualtrics destination @@ -28,13 +24,18 @@ Qualtrics (Actions) provides the following benefits: +### Limitations +The Qualtrics destination is only available to customers on a Business Tier plan with Segment. + +To link your Qualtrics destination in Segment to your Qualtrics workspace, [Qualtrics](https://www.qualtrics.com/support/integrations/twilio-segment/twilio-segment-task/){:target="_blank"} requires a [Segment Token](https://app.segment.com/goto-my-workspace/settings/access-management/tokens){:target="_blank"} that can only be generated by Business Tier customers who have access to the [Public API](https://segment.com/docs/api/public-api/){:target="_blank"}. + ## Getting started 1. From the Segment web app, click **Catalog**, then click **Destinations**. 2. Find the Destinations Actions item in the left navigation, and click it. 3. Click **Configure Qualtrics**. 4. Select an existing Source to connect to Qualtrics (Actions). -5. To authenticate, enter your API key & Datacenter ID. To locate your API key & Datacenter ID, follow in the instructions found [here](https://api.qualtrics.com/ZG9jOjg3NjYzNQ-finding-your-qualtrics-i-ds) +5. To authenticate, enter your API key & Datacenter ID. To locate your API key & Datacenter ID, follow in the instructions found [here](https://api.qualtrics.com/ZG9jOjg3NjYzNQ-finding-your-qualtrics-i-ds){:target="_blank”}. diff --git a/src/connections/destinations/catalog/actions-rehook/index.md b/src/connections/destinations/catalog/actions-rehook/index.md new file mode 100644 index 0000000000..3f7a2a8c14 --- /dev/null +++ b/src/connections/destinations/catalog/actions-rehook/index.md @@ -0,0 +1,101 @@ +--- +title: Rehook Destination +id: 64c02312ff0ce798cc8d1a7e +--- + +{% include content/plan-grid.md name="actions" %} + +[Rehook](https://rehook.ai/){:target="_blank"} is a powerful and dedicated user-incentivization solution that enables businesses to reward and engage users without depending on tech teams. With an elegant and easy-to-use interface, Rehook is designed to help you run user-promotion campaigns that are flexible, customizable and scalable. + +This destination is maintained by Rehook. For any issues with the destination, [contact the Rehook Support team](mailto:services@rehook.ai). + + +## Getting started + +1. From the Destinations catalog page in the Segment App, click **Add Destination**. +2. Search for **Rehook** in the Destinations Catalog, and select the **Rehook** destination. +3. Select which Source should send data to the Rehook destination. +4. Open the [Rehook Dashboard](https://dashboard.rehook.ai/){:target="_blank"} and navigate to **Settings > API Keys & Secret Key**. Copy your key. +5. Open the Segment app and paste the **API Key & Secret Key** in the Rehook destination settings page. + + +## Supported methods + +Rehook's destination is designed to support the following [Segment Spec](/docs/connections/spec) methods. Because this is an Actions Destination, you can also map other Segment methods. + +### Identify + +If you're not familiar with the Segment Spec, take a moment to understand what the [Identify method](/docs/connections/spec/identify/) does. +An example call looks like this: + +#### Example 1: +```js +analytics.identify('userId12345', { + firstName: 'Bob', + lastName: 'Dole', + email: 'bob.dole@example.com', + company: 'Initech', + employees: 234 +}); +``` + +#### Example 2: +```js +analytics.identify('userId12345', { + firstName: 'Bob', + lastName: 'Dole', + email: 'bob.dole@example.com', + company: 'Initech', + employees: 234, + referral_code: "ERTYUS" +}); +``` + +Every time you make an Identify call with an included `userId`: + +1. Rehook verifies that the `userId` exists. +2. If the `userId` does not exist, Rehook adds the user as a Customer to the Rehook database and matches user properties with the Segment `traits` sent in the Identify call payload. +3. If the `userId` exists, Rehook updates the user properties for the Customer against the Segment `traits` sent in the Identify call payload. +4. If `referral_code` is unique, Rehook updates the user properties in its database. + +All of the [traits](/docs/connections/spec/identify#traits) recognized by Segment are translated and matched with the Rehook Customer user properties. These fields are automatically created or mapped for a Customer in Rehook and are available for personalization and advanced segmentation. + +> info "How Rehook handles incoming userId and referral_code in Identify calls:" +> * The `userId` field is required. Rehook drops Identify calls without a userId. +> * If a call is made with `anonymousID`, Rehook drops the Identify call. +> * If `referral_code` matches with another `userId`, Rehook drops the Identify call. + +### Track + +If you're not familiar with the Segment Spec, take a moment to understand what the [Track method](/docs/connections/spec/track/) does. + +An example call looks like this: + +#### Example 1: +```js +analytics.track('Product Viewed', { + userId: "userId12345", + product_id: '507f1f779439011', + name: 'Monopoly: 3rd Edition', + price: 18.99, + url: 'https://www.example.com/product/path', + image_url: 'https://www.example.com/product/path.jpg' +}); +``` + +#### Example 2: +```js +analytics.track('signup', { + userId: "userId12345", + referral_code: 'ERTYUS' +}); +``` + +Segment sends Track calls to Rehook as a Custom Event. When you make a Track call, Segment sends the event to Rehook with the event name and all properties that you specified. + +> info "How Rehook handles incoming userId and referral_code in Track calls:" +> * The `userId` field is required. Rehook drops Track calls without a `userId`. +> * If a call is made with `anonymousId`, Rehook drops the Track call. +> * The `referral_code` field is required if event name is set as a conversion event in Rehook. + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-revx/index.md b/src/connections/destinations/catalog/actions-revx/index.md new file mode 100644 index 0000000000..43a60ed476 --- /dev/null +++ b/src/connections/destinations/catalog/actions-revx/index.md @@ -0,0 +1,22 @@ +--- +title: RevX Cloud (Actions) Destination +id: 6464ef424ac5c5f47f5f3968 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[RevX Cloud (Actions)](https://revx.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} helps app marketers achieve their growth objectives by simplifying programmatic advertising for them. With RevX, your reach extends to over 90% of app users globally, encompassing more than 1 million mobile apps. Leverage audience intelligence to achieve highly precise targeting, accompanied by personalized messaging. Employ advanced AI-driven audience segmentation to identify high-intent players, while optimizing creatives to amplify performance to new heights. + +This destination is maintained by RevX. For any issues with the destination, [contact their support team](mailto:tse@revx.io). + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure RevX Cloud (Actions)**. +4. Select an existing Source to connect to RevX Cloud (Actions). +5. Add Revx Client ID as provided by the tse team. + +{% include components/actions-fields.html %} + diff --git a/src/connections/destinations/catalog/actions-ripe-cloud/index.md b/src/connections/destinations/catalog/actions-ripe-cloud/index.md index dbaa6ace60..fa55442e0f 100644 --- a/src/connections/destinations/catalog/actions-ripe-cloud/index.md +++ b/src/connections/destinations/catalog/actions-ripe-cloud/index.md @@ -1,37 +1,88 @@ --- -title: Ripe Cloud (Actions) Destination +title: Ripe Cloud Mode (Actions) Destination hide-boilerplate: true hide-dossier: true id: 63cade592992cf7052ce2e3e --- -[Ripe](https://www.getripe.com/){:target="_blank"} is a product-led sales -platform that empowers you to unlock revenue pipeline with product data. By identifying and showing which prospects to focus efforts on, you can convert leads into meetings inside your product. +[Ripe](https://www.getripe.com/){:target="_blank"} is a sales conversion tool that enables B2B revenue teams to surface and meet their best leads at the best possible time - when they are using your product. -This destination enables you to send product data to Ripe. Sales teams can identify who decision-makers and product champions are by understanding what properties they have and what events they have triggered. The Ripe destination is built as an alternative to directly adding Ripe’s SDK script to your app or site. +The Ripe Segment integration is an [Actions Destination in cloud mode](/docs/connections/destinations/#connection-modes) that lets you send your product events data to Ripe. -The Ripe Segment integration is an [Actions-based Destination in cloud mode](/docs/connections/destinations/#connection-modes) that lets you send your backend events directly to Ripe. +Ripe maintains this destination. For any issues with the destination, [contact the Ripe team](mailto:support@getripe.com). -{% include content/ajs-upgrade.md %} +> success "" +> Set up a free account with Ripe by visiting their [website](https://www.getripe.com/){:target="_blank"}. -## Benefits of Ripe +## Getting Started -Ripe provides the following benefits: +> warning "Ripe Cloud Mode (Actions) destination requires events from an Analytics.js source" +> Ripe Cloud Mode is a way to send your backend events to Ripe and should be used in tandem with the client-side [Ripe Destination](/docs/connections/destinations/catalog/actions-ripe-web/). Without a Ripe Web Mode (Actions) destination receiving information from an Analytics.js source, you will not be able to interact with leads in the Ripe app. -- **Be relevant**. The Ripe destination understands key events in Segment to identify relevant leads, and shows its widget selectively to them. -- **Quick integration**. Using the Ripe destination is the fastest way to start combining key product events with sales data and start targeting ripe leads. -- **More control**. You can customize the conditions under which the events are sent to Ripe. +1. From the Destinations catalog page in the Segment App, click Add Destination. +2. Search for "Ripe Cloud Mode (Actions)" in the Destinations Catalog, and select the "Ripe Cloud Mode (Actions)" destination. +3. Choose which Source should send data to the "Ripe" destination. +4. Go to Ripe integrations page (or onboarding page) and click on the "Segment" integration. +5. Copy the "Segment API key". +6. Enter the "Segment API Key" in the "Ripe Cloud Mode" destination settings in Segment. -## Getting started +## Supported Methods -> info "" -> Before you begin, create an API key in Ripe which you'll use to configure the integration. +Ripe supports all the following methods out of the box. -1. From the Segment web app, navigate to **Connections > Catalog**, then click the **Destinations** tab at the top of the catalog. -2. Search for *Ripe Cloud Mode (Actions)* in the left navigation, and click it. -3. Click **Configure Ripe Cloud Mode (Actions)**. -4. Select an existing Source to connect to Ripe (Actions). -5. Enter your Ripe API key in the API key field. +### Identify + +Take a look at the [Identify method documentation](/docs/connections/spec/identify/) to learn about what it does. An example call would look like this: + +```js +analytics.identify('userId123', { + email: 'steve@apple.com', + firstName: 'Steve', + lastName: 'Jobs' +}); +``` + +Segment sends Identify calls to Ripe as `identify` events. Ripe displays these events as `Users` by default. `Identify` event data is augmented with traits. It's important to include email as a trait, as soon as it is known. Ripe will use email to populate User views by default. Ripe fully supports [Segment's Identify Spec](https://segment.com/docs/connections/spec/identify/#traits), and recommend using the standardized names for the reserved traits covered there. + + +### Track + +Take a look at the [Track method documentation](https://segment.com/docs/connections/spec/track/) to learn about what it does. An example call would look like: + +```js +analytics.track('Clicked Book a Demo Button') +``` + +Segment sends Track calls to Ripe as `track` events. Track events should be flattened whenever possible. For example, rather than `Button Click` as a track event with `Book a Demo` as a property, use `Clicked Book a Demo Button`. Product Events can be filtered and grouped by `userId` or `groupId`. When firing track calls from a backend source you should always include the `userId` to ensure it can be attributed back to the correct user. + + +### Page + +Take a look at the [Page method documentation](https://segment.com/docs/connections/spec/page/) to learn about what it does. An example call would look like this: + +```js +analytics.page() +``` + +Segment sends Page calls to Ripe as a `pageview` event. Ripe displays these events as Page views by default. + + +### Group + +Take a look at the [Group method documentation](https://segment.com/docs/connections/spec/group/) to learn about what it does. An example call would look like this: + +```js +analytics.group("0e8c78ea9d97a7b8185e8632", { + name: "Apple Inc.", + industry: "Technology", + employees: 164000, + plan: "enterprise", + "total billed": 1000000, + website: "apple.com" +}); +``` + +Segment sends Group calls to Ripe as a `group` event. Group events can be augmented with group traits. Ripe displays these events as Workspaces by default. Including a name and a website (domain) as a trait is recommended, as Ripe will use the traits to populate Workspace views by default. {% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-ripe-web/index.md b/src/connections/destinations/catalog/actions-ripe-web/index.md index 055d34c5bf..b239f9243d 100644 --- a/src/connections/destinations/catalog/actions-ripe-web/index.md +++ b/src/connections/destinations/catalog/actions-ripe-web/index.md @@ -1,114 +1,84 @@ --- -title: Ripe Web (Actions) Destination +title: Ripe Device Mode (Actions) Destination hide-boilerplate: true hide-dossier: true id: 63913b2bf906ea939f153851 -redirect_from: '/connections/destinations/catalog/actions-ripe/' --- -[Ripe](https://www.getripe.com/){:target="_blank"} is a product-led sales platform that empowers you to unlock revenue pipeline with product data. By identifying and showing which prospects to focus efforts on, you can convert leads into meetings inside your product. +[Ripe](https://www.getripe.com/){:target="_blank"} is a sales conversion tool that enables B2B revenue teams to surface and meet their best leads at the best possible time - when they are using your product. -This destination enables you to send product data to Ripe. Sales teams can identify decision-makers and product champions by understanding what properties they have and what events they have triggered. The Ripe destination is built as an alternative to directly adding Ripe’s SDK script to your app or site. +The Ripe Segment integration is an [Actions-based Destination in web mode](https://segment.com/docs/connections/destinations/#connection-modes) that lets you send your product events data to Ripe. -The Ripe Segment integration is an [Actions-based Destination in device mode](/docs/connections/destinations/#connection-modes) that loads and configures Ripe’s SDK script for you. If you’re already using Segment’s Analytics.js for identifying and tracking your users, either directly or through Segment source integrations that you’ve installed, you can configure Segment to send this data directly to Ripe. +Ripe maintains this destination. For any issues with the destination, [contact the Ripe team](mailto:support@getripe.com). -{% include content/ajs-upgrade.md %} +> success "" +> Set up a free account with Ripe by visiting their [website](https://www.getripe.com/){:target="_blank"}. -## Benefits of Ripe +## Getting Started -Ripe provides the following benefits: +1. From the Destinations catalog page in the Segment App, click Add Destination. +2. Search for "Ripe Device Mode (Actions)" in the Destinations Catalog, and select the "Ripe Device Mode (Actions)" destination. +3. Choose which Source should send data to the "Ripe Device Mode (Actions)" destination. +4. Go to Ripe integrations page (or onboarding) and click on the "Segment" integration. +5. Copy the "Segment API key". +6. Enter the "Segment API Key" in the "Ripe" destination settings in Segment. -- **Be relevant**. The Ripe destination understands key events in Segment to identify relevant leads, and shows its widget selectively to them. -- **Quick integration**. Using the Ripe destination is the fastest way to start combining key product events with sales data and start targeting ripe leads. -- **More control**. You can customize the conditions under which the events are sent to Ripe. +## Supported Methods -## Getting started - -> info "" -> Before you begin, create an API key in Ripe that you'll use to configure the integration. - - -1. From the Segment web app, navigate to **Connections > Catalog**, then click the **Destinations** tab at the top of the catalog. -2. Search for *Ripe Device Mode (Actions)* in the left navigation, and click it. -3. Click **Configure Ripe Device Mode (Actions)**. -4. Select an existing Source to connect to Ripe (Actions). -5. Enter your Ripe API key in the API key field. - -{% include components/actions-fields.html %} - -{% comment %} -## Ripe SDK +Ripe supports all the following methods out of the box. ### Identify -When you have a unique identifier for a user, preferably an identifier from your database, call this method. For example, when a user logs in or updates their email. If you don't provide a `user_id` is not provided an automatically generated `anonymous_id` will be used. - -If you aren't familiar with the Segment Spec, take a look at -the [Identify method documentation](/docs/connections/spec/identify/) to learn -about what it does. An example call would look like: +Take a look at the [Identify method documentation](/docs/connections/spec/identify/) to learn about what it does. An example call would look like this: ```js analytics.identify('userId123', { - email: 'john.doe@example.com' + email: 'steve@apple.com', + firstName: 'Steve', + lastName: 'Jobs' }); ``` -Segment sends Identify calls to Ripe as an `identify` event. +Segment sends Identify calls to Ripe as `identify` events. Ripe displays these events as `Users` by default. `Identify` event data is augmented with traits. It's important to include email as a trait, as soon as it is known. Ripe will use email to populate User views by default. We fully support the [Segment's Identify Spec](https://segment.com/docs/connections/spec/identify/#traits), and we recommend using the standardized names for the reserved traits covered there. -### Track -Use `track` calls to track what actions your user perform along with properties -related to the `track` call. +### Track -If you aren't familiar with the Segment Spec, take a look at -the [Track method documentation](/docs/connections/spec/track/) to learn about -what it does. An example call would look like: +Take a look at the [Track method documentation](https://segment.com/docs/connections/spec/track/) to learn about what it does. An example call would look like: ```js -analytics.track('Login Button Clicked') +analytics.track('Clicked Book a Demo Button') ``` -Segment sends Track calls to Ripe as a `track` event. +Segment sends Track calls to Ripe as `track` events. Track events should be flattened whenever possible. For example, rather than `Button Click` as a track event with `Book a Demo` as a property, use `Clicked Book a Demo Button`. Product Events can be filtered and grouped by `userId` or `groupId`. Both of these will be appended automatically if they have been fired prior to the track call for web/client-side events. ----> Add comment on fast track property here? -### Group +### Page -If you aren't familiar with the Segment Spec, take a look at -the [Group method documentation](/docs/connections/spec/group/) to learn about -what it does. An example call would look like: +Take a look at the [Page method documentation](https://segment.com/docs/connections/spec/page/) to learn about what it does. An example call would look like this: ```js -analytics.group("0e8c78ea9d97a7b8185e8632", { - name: "Initech", - industry: "Technology", - employees: 329, - plan: "enterprise", - "total billed": 830 -}); +analytics.page() ``` -Group calls from Segment update `Companies` in Ripe. Each `Company` is -associated with a distinct `group_id`. +Segment sends Page calls to Ripe as a `pageview` event. Ripe displays these events as Page views by default. -### Page -Use page calls to track what pages your users sees. This is typically called on -each page load in a traditional web page and on route changes in -SPA-applications. +### Group -If you aren't familiar with the Segment Spec, take a look at -the [Page method documentation](/docs/connections/spec/page/) to learn about -what it does. An example call would look like: +Take a look at the [Group method documentation](https://segment.com/docs/connections/spec/group/) to learn about what it does. An example call would look like this: ```js -analytics.page('Home') +analytics.group("0e8c78ea9d97a7b8185e8632", { + name: "Apple Inc.", + industry: "Technology", + employees: 164000, + plan: "enterprise", + "total billed": 1000000, + website: "apple.com" +}); ``` -Segment sends Page calls to Ripe as a `pageview` event. +Segment sends Group calls to Ripe as a `group` event. Group events can be augmented with group traits. Ripe displays these events as Workspaces by default. Including a name and a website (domain) as a trait is recommended, as Ripe will use the traits to populate Workspace views by default. -### Segment session - -Ripe will use the `userId`, `anonymous` and `groupId` set in Segment and the Ripe SDK keeps track of the current ids. - -{% endcomment %} +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-rupt/index.md b/src/connections/destinations/catalog/actions-rupt/index.md new file mode 100644 index 0000000000..bfcde02af8 --- /dev/null +++ b/src/connections/destinations/catalog/actions-rupt/index.md @@ -0,0 +1,32 @@ +--- +title: Rupt (Actions) Destination +hide-boilerplate: true +hide-dossier: true +beta: true +id: 6501a5225aa338d11164cc0f +--- + +{% include content/plan-grid.md name="actions" %} + +[Rupt](https://rupt.dev?utm_source=segment.com&utm_medium=docs&utm_campaign=partners){:target="_blank"} helps customers monitor and monetize account sharing. + +## Benefits of Rupt (Actions) + +Rupt (Actions) provides the following benefits: + +- **Account sharing detection**. Find out exactly which accounts are being shared and how many people are sharing them. +- **Convert & monetize account sharers**. Prebuilt UI to convert account sharers into paying customers. +- **Track account sharing revenue**. Track revenue from account sharing conversions. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for *Rupt (Actions)* and select it. +3. Click **Configure Rupt (Actions)**. +4. Select an existing Source to connect to Rupt (Actions). +5. Copy your **API key Client ID** from the [Rupt dashboard](https://dashboard.rupt.dev?utm_source=segment.com&utm_medium=docs&utm_campaign=partners){:target="_blank"}. +6. Add your API key to the Rupt (Actions) settings in Segment. + +{% include components/actions-fields.html %} + +To learn more about how Rupt works, see: [How account sharing prevention works](https://www.rupt.dev/docs/how-account-sharing-prevention-works?utm_source=segment.com&utm_medium=docs&utm_campaign=partners){:target="_blank"}. diff --git a/src/connections/destinations/catalog/actions-salesforce-marketing-cloud/index.md b/src/connections/destinations/catalog/actions-salesforce-marketing-cloud/index.md index 061e10c91a..3d34244d78 100644 --- a/src/connections/destinations/catalog/actions-salesforce-marketing-cloud/index.md +++ b/src/connections/destinations/catalog/actions-salesforce-marketing-cloud/index.md @@ -58,7 +58,11 @@ Once you save the API integration and add permissions, you will see a Summary pa {% include components/actions-fields.html settings="true"%} -## FAQ & Troubleshooting +> info "" +> Note that **send contact to data extension** handles a pre-defined structure of contacts being filled into a data extension, whereas **send event to data extension action** customizes event data extensions. +> For example, `contactKey` is the fixed Primary Key that is available when you use **send contact to data extension** action, which you also have to create as a Primary Key in SFMC. However, the Primary Key can be set as per Segment's requirements using **send event to data extension**. + +## FAQ and troubleshooting ### Batching Data to SFMC @@ -71,7 +75,7 @@ The batch feature is only compatible with the "Send Contact to Data Extension" a ### Data Extensions & API Events -To use the SFMC Journey Builder to send marketing campaigns to your users, you need to have data about those users in SFMC. The most common way to send data to SFMC is to send Segment data to an SFMC data extension. Data extensions are tables that contain your data. When you send a contact or event to a data extension, it appear will appear as a "row" in your data extension. Any metadata about the particular contact or event are considered attributes and will appear as a "column" in your data extension. +To use the SFMC Journey Builder to send marketing campaigns to your users, you need to have data about those users in SFMC. The most common way to send data to SFMC is to send Segment data to an SFMC data extension. Data extensions are tables that contain your data. When you send a contact or event to a data extension, it will appear as a "row" in your data extension. Any metadata about the particular contact or event are considered attributes and will appear as a "column" in your data extension. Data extensions and attributes must be created **before** sending data. You can create a data extension in your SFMC account by navigating to **Audience Builder > Contact Builder > Data Extensions > Create**. Segment recommends creating a single data extension to store all contact data, and individual data extensions for each event type you plan to send. Once a data extension is created, you can add attributes for any traits or properties you plan to send. You must include at least one Primary Key attribute that will be used to uniquely identify each row. @@ -85,7 +89,7 @@ API events are another way to send your Segment events to SFMC. API events can t To send an Engage audience to SFMC: 1. Create an attribute in the SFMC data extension that stores your contact data. The attribute should be a boolean data type to store whether or not a user entered the audience. You can name this attribute anything. 2. Set up the Salesforce Marketing Cloud (Actions) destination using the instructions [above](#connect-the-salesforce-marketing-cloud-actions-destination) and connect it to your Engage source. -3. Create a "Send Contact to Data Extension" action in order to map the SFMC attribute to the Engage audience key. The Engage audience key can be found in **Engage > Audiences > Select your audience > Settings > Audience key**. In the Contact Fields mapping, input the name of the attribute you created in SFMC on the left-hand side. On the right-hand side, search for an event variable of `traits.[your-audience-key]` and select "No matches found. Use "traits.[your-audience-key]" as an event variable". +3. Create a "Send Contact to Data Extension" action in order to map the SFMC attribute to the Engage audience key. The Engage audience key can be found in **Engage > Audiences > Select your audience > Settings > Audience key**. In the Contact Fields mapping, input the name of the attribute you created in SFMC on the right-hand side. On the left-hand side, search for an event variable of `traits.[your-audience-key]` and select "No matches found. Use "traits.[your-audience-key]" as an event variable". 4. Navigate back to your Engage audience and connect the Salesforce Marketing Cloud (Actions) destination to the audience. Keep "Send Identify" toggled on and save. When you add an Engage audience to SFMC, the first sync contains all the users in that audience. Users are added as rows in your data extension with the attribute you created set to `true` to indicate audience membership. If a user leaves that audience, the attribute value is automatically updated to `false`, but the user is not removed from the data extension. This allows you to see all users who have ever been in the audience, and then optionally create a [filtered data extension](https://help.salesforce.com/s/articleView?id=sf.mc_es_create_filtered_de.htm&type=5){:target="_blank"} if you want a subset of users. @@ -93,5 +97,5 @@ When you add an Engage audience to SFMC, the first sync contains all the users i To send an Engage computed trait to SFMC: 1. Create an attribute in the SFMC data extension that stores your contact data. Choose the data type matching the type of computed trait you plan to send; for example, text for traits which produce string values, number or decimal for traits which produce numeric values. You can name this attribute anything. 2. Set up the Salesforce Marketing Cloud (Actions) destination using the instructions [above](#connect-the-salesforce-marketing-cloud-actions-destination) and connect it to your Engage source. -3. Create a "Send Contact to Data Extension" action in order to map the SFMC attribute to the Engage trait key. The Engage trait key can be found in **Engage > Audiences > Computed Traits > Choose your computed trait > Settings > Trait key**. In the Contact Fields mapping, input the name of the attribute you created in SFMC on the left-hand side. On the right-hand side, search for an event variable of `traits.[your-trait-key]` and select "No matches found. Use "traits.[your-trait-key]" as an event variable". +3. Create a "Send Contact to Data Extension" action in order to map the SFMC attribute to the Engage trait key. The Engage trait key can be found in **Engage > Audiences > Computed Traits > Choose your computed trait > Settings > Trait key**. In the Contact Fields mapping, input the name of the attribute you created in SFMC on the right-hand side. On the left-hand side, search for an event variable of `traits.[your-trait-key]` and select "No matches found. Use "traits.[your-trait-key]" as an event variable". 4. Navigate back to your Engage computed trait and connect the Salesforce Marketing Cloud (Actions) destination to the computed trait. Keep "Send Identify" toggled on and save. diff --git a/src/connections/destinations/catalog/actions-salesforce/index.md b/src/connections/destinations/catalog/actions-salesforce/index.md index faa0750eef..80d03237bb 100644 --- a/src/connections/destinations/catalog/actions-salesforce/index.md +++ b/src/connections/destinations/catalog/actions-salesforce/index.md @@ -81,7 +81,6 @@ If you have more than one Salesforce instance connected to Segment, repeat these Keep the following in mind as you begin to use Salesforce (Actions): - Salesforce (Actions) supports batching. The workspace owner can edit the enabled-batching field manually for any of the mappings. This setting is disabled by default. -- Salesforce (Actions) doesn’t support Delete CRUD operations on Custom Object. Custom Objects with CRUD the operation set to `delete` are not migrated. - Sending Identify events to Salesforce (Classic) results in a create or update operation for Leads, and maps properties from `event.traits` Salesforce (Actions) does not support this behavior. By default, the automatic migration maps only a subset of the most used Lead properties as mentioned below. The workspace owner must map any additional Salesforce properties or Custom properties manually. Review the tables below to see how settings from Salesforce (Classic) were migrated to Salesforce (Actions). @@ -117,7 +116,7 @@ Review the tables below to see how settings from Salesforce (Classic) were migra ## FAQ ### How do I enable a sandbox instance? -To send data to a Salesforce sandbox instance, navigate to **Settings > Advanced Settings**, toggle on the "Sandbox Instance" setting, and authenticate. If you are already authenticated, please disconnect and reconnect with your sandbox username. +To send data to a Salesforce sandbox instance, navigate to **Settings > Advanced Settings**, toggle on the "Sandbox Instance" setting, save the setting and then authenticate. If you are already authenticated, please disconnect and reconnect with your sandbox username. Your Salesforce sandbox username appends the sandbox name to your Salesforce production username. For example, if a username for a production org is `user@acme.com` and the sandbox is named `test`, the username to log in to the sandbox is `user@acme.com.test`. @@ -155,7 +154,12 @@ When using the `create` operation, it's possible for duplicate records to be cre Please note this is only a concern when using the `create` operation. You can use the `upsert` operation instead to avoid duplicates if `upsert` meets your needs. ### How does Salesforce Bulk API work? -When **Use Salesforce Bulk API** is enabled for your mapping, events are sent to [Salesforce’s Bulk API 2.0](https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/asynch_api_intro.htm){:target="_blank"} rather than their streaming REST API. If enabled, Segment will collect events into batches of 1000 before sending to Salesforce. Bulk support can be used for the `upsert` or `update` operations only. +When **Use Salesforce Bulk API** is enabled for your mapping, events are sent to [Salesforce’s Bulk API 2.0](https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/asynch_api_intro.htm){:target="_blank"} rather than their streaming REST API. If enabled, Segment will collect events into batches of up to 1000 before sending to Salesforce. Bulk support can be used for the `upsert` or `update` operations only. For bulk `update`, if a record in a batch is missing a Bulk Update Record ID, Segment will still send it to Salesforce. Salesforce will reject the individual record because it will be unable to find a record to update. Other records in the batch that are valid will still be processed. Please note that Segment's Event Delivery tab will show the entire batch as successful as Segment cannot currently break down Event Delivery stats into individual failed/passed events. +### Which fields are supposed to map to Salesforce’s required fields for "Bulk Update Record ID" and "Bulk Upsert External ID"? + +For "Bulk Update Record ID", see [Salesforce’s help documentation](https://help.salesforce.com/s/articleView?id=000385008&type=1){:target="_blank"}. +For "Bulk Upsert External ID", see[Salesforce’s help documentation](https://help.salesforce.com/s/articleView?id=000383278&type=1){:target="_blank"}. + diff --git a/src/connections/destinations/catalog/actions-saleswings/index.md b/src/connections/destinations/catalog/actions-saleswings/index.md index 24016bda60..df0cf88dcf 100644 --- a/src/connections/destinations/catalog/actions-saleswings/index.md +++ b/src/connections/destinations/catalog/actions-saleswings/index.md @@ -2,10 +2,11 @@ title: SalesWings (Actions) Destinaton hide-boilerplate: true hide-dossier: true -private: true +private: false id: 63d17a1e6ab3e62212278cd0 ---- +hidden: false +--- {% include content/plan-grid.md name="actions" %} [SalesWings](https://www.saleswingsapp.com/){:target="_blank"} is a lead scoring platform that offers a user-friendly, no-code solution to identify your leads' true interests. The SalesWings Destination enables using the data collected in Segment to identify, tag and prioritize your leads in SalesWings for your Marketing and Sales teams. diff --git a/src/connections/destinations/catalog/actions-schematic/index.md b/src/connections/destinations/catalog/actions-schematic/index.md new file mode 100644 index 0000000000..8c45c9ad8f --- /dev/null +++ b/src/connections/destinations/catalog/actions-schematic/index.md @@ -0,0 +1,28 @@ +--- +title: Schematic (Actions) Destination +beta: true +id: 65b8e9eca1b5903a031c6378 +--- + +{% include content/plan-grid.md name="actions" %} + +[Schematic](https://schematichq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} enables you to launch, package, meter, and monitor features with ease, so you can manage it all in one place as your business grows. + +Segment is the easiest way to send events from your application to Schematic. If you already have Segment up and running in your application, Schematic recommends this approach so you don't have to implement any additional code. + +Schematic maintains this destination. For any issues with the destination, [contact the Schematic Support team](mailto:hi@schematichq.com). + +## Getting started + +1. From your Segment web app, navigate to **Connections > Catalog > Destinations**. +2. Search for *Schematic*, select the Schematic destination, and click **Add destination**. +3. Select the source that will send data to Schematic, give your destination a name, then click **Create destination**. +4. On the destination's Settings tab, input your Schematic API Key. To generate an API key, navigate to your Schematic workspace settings under **Settings > API Keys**. + +Once you've connected Schematic to Segment, you can configure how you want to send data to Schematic in the Schematic destination's **Mappings** tab. + +{% include components/actions-fields.html %} + +## Additional Context + +Schematic only accepts Track event names that contain alphanumeric characters, dashes, and underscores. If Segment event names have other characters, like spaces, the Schematic destination automatically snake_cases the event name before passing to Schematic. Segment passes the raw event name as an event trait. \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-screeb-web/index.md b/src/connections/destinations/catalog/actions-screeb-web/index.md new file mode 100644 index 0000000000..e32e60f73c --- /dev/null +++ b/src/connections/destinations/catalog/actions-screeb-web/index.md @@ -0,0 +1,24 @@ +--- +title: Screeb Web (Actions) Destination +id: 64820d8030d09e775fbac372 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Screeb](https://screeb.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} + provides self-serve predictive analytics for growth marketers, using machine learning to automate audience insights and recommendations. + +Screeb maintains this destination. For any issues with the destination, consult [Screeb's documentation](https://github.com/ScreebApp/developers/wiki){:target="_blank"} or [contact their support team](mailto:support@screeb.app). + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure Screeb Web (Actions)**. +4. Select an existing Source to connect to **Screeb Web (Actions)**. +5. Find your Website ID on [Screeb > Settings > Install Screeb > Web App](https://admin.screeb.app/org/last/settings/install?from=segment){:target="_blank"} +6. In the destination configuration, input the Website ID. +7. Enable the destination. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-segment-profiles/index.md b/src/connections/destinations/catalog/actions-segment-profiles/index.md index 05385bf2f8..fa32f0694a 100644 --- a/src/connections/destinations/catalog/actions-segment-profiles/index.md +++ b/src/connections/destinations/catalog/actions-segment-profiles/index.md @@ -15,16 +15,12 @@ The Segment Profiles destination allows you to send your warehouse data back to To use this destination, you must have an active Segment Profile space. If you have not yet created a Segment Profile space, please follow the steps in the [Profiles Onboarding Guide](/docs/profiles/quickstart/). -### Create a Public API token - -To enable the Segment Profiles destination to send data to an existing Profile space, provide an authentication token for the Segment Public API. See [Segment's Public API documentation](https://docs.segmentapis.com/tag/Getting-Started#section/Get-an-API-token){:target="_blank"} for information on how to create a token. The token must include Source Admin permissions. You will need this token in the below steps. - ### Connect and configure the Segment Profiles destination 1. From the Segment web app, navigate to **Reverse ETL > Destinations**. 2. Click **Add Destination**. 3. Select the Segment Profiles destination, click **Next**, and select the warehouse source that will send data to the Segment Profiles destination. If you have not set up a warehouse source, follow the steps in the Reverse ETL documentation on [Getting started](/docs/reverse-etl/#getting-started). -4. On the **Settings** tab, name your destination, input the Public API token created above, select an endpoint region, and click **Save Changes**. It is recommended to configure and enable all mappings before enabling the Segment Profiles destination. +4. On the **Settings** tab, name your destination, select an endpoint region, and click **Save Changes**. It is recommended to configure and enable all mappings before enabling the Segment Profiles destination. 5. On the **Mappings** tab, click **Add Mapping**. Select a data model and the API call type you want to map. Identify calls will create and update user profiles and Group calls will create and update account profiles. Fill in the fields on screen to create the desired mappings, and click **Create Mapping** to complete the configuration. Repeat this step to configure multiple mappings. 6. Enable the configured mapping(s). 7. On the **Settings** tab, click the **Enable Destination** toggle, and then click **Save Changes** to enable the Segment Profiles destination. @@ -35,3 +31,13 @@ To enable the Segment Profiles destination to send data to an existing Profile s ### API Calls and MTUs The Segment Profiles destination is not subject to API call or MTU costs. Any users or accounts created and updated by the Segment Profiles destination will not count towards your API call or MTU usage. + +### Succesful syncs but no changes on profiles +Make sure that the Endpoint Region setting matches the region of your workspace. If the region is correct and you don't see any profile changes, [contact Segment](https://segment.com/help/contact/){:target="_blank"}. + +### Test Mapping +The **Test Mapping** feature on the Mapping page does not send events to Profiles. It will only validate the mappings and confirm that the event will be accepted by the Tracking API. To send and validate the event in profile, please run a RETL sync. + +### Can I view samples of events received in Engage by the Segment Profiles Destination? + +Records sent to the Segment Profiles Destination are managed through a Unify Spaces' Profile Sources. Samples of these events may be reviewed in a [Profile Source Debugger](https://segment.com/docs/unify/debugger/). For a more comprehensive analysis of the events received in Unify & Engage, consider utilizing [Profiles Sync](https://segment.com/docs/unify/profiles-sync/overview/) connected to your Data Warehouse. diff --git a/src/connections/destinations/catalog/actions-segment/index.md b/src/connections/destinations/catalog/actions-segment/index.md index d4decadd8d..da70dd5eeb 100644 --- a/src/connections/destinations/catalog/actions-segment/index.md +++ b/src/connections/destinations/catalog/actions-segment/index.md @@ -32,3 +32,6 @@ The Segment Connections destination enables you to mold data extracted from your ### API Calls and MTUs The Segment Connections destination sends data to Segment's Tracking API, which has cost implications. New users will count as new MTUs and each call will count as an API call. For information on how Segment calculates MTUs and API calls, please see [MTUs, Throughput and Billing](/docs/guides/usage-and-billing/mtus-and-throughput/). + +### Test Mapping +The **Test Mapping** feature on the Mapping page does not send events to the Tracking API. It only validates the mappings and confirms that the event will be accepted by the Tracking API. To send and validate the event in your source, run a RETL sync. \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-sendgrid/index.md b/src/connections/destinations/catalog/actions-sendgrid/index.md index 25877e2117..e2653709f2 100644 --- a/src/connections/destinations/catalog/actions-sendgrid/index.md +++ b/src/connections/destinations/catalog/actions-sendgrid/index.md @@ -8,9 +8,7 @@ id: 631a6f32946dd8197e9cab66 --- -{% include content/ajs-upgrade.md %} - -[SendGrid Marketing Campaigns](https://sendgrid.com/solutions/email-marketing/) provides email marketing automation for businesses. With Segment you can add contacts and lists to SendGrid Marketing Campaigns. +[SendGrid Marketing Campaigns](https://sendgrid.com/solutions/email-marketing/){:target="_blank”} provides email marketing automation for businesses. With Segment you can add contacts and lists to SendGrid Marketing Campaigns. ## Getting started diff --git a/src/connections/destinations/catalog/actions-slack/index.md b/src/connections/destinations/catalog/actions-slack/index.md index f25e1063ef..aeea0d094a 100644 --- a/src/connections/destinations/catalog/actions-slack/index.md +++ b/src/connections/destinations/catalog/actions-slack/index.md @@ -7,7 +7,7 @@ redirect_from: - '/connections/destinations/catalog/vendor-slack' versions: - name: Slack (Classic) - link: /docs/connections/destinations/slack + link: /docs/connections/destinations/catalog/slack/ --- {% include content/plan-grid.md name="actions" %} @@ -30,21 +30,19 @@ Slack (Actions) provides the following benefits over the classic Slack destinati 3. Click **Configure Actions Slack**. 4. Select an existing Source to connect to Slack (Actions). 5. Click Customized Setup to start from a blank mapping. +6. In your Slack workspace, create a new [Incoming Webhook URL](https://my.slack.com/services/new/incoming-webhook/){:target="_blank"} and select the Slack channel associated with your account that you'd like to send messages to. The Slack channel you select will be the default channel that receives message events. Paste the Incoming Webhook URL you created into each of your Slack Destination's Actions under the field labeled `Webhook URL*`. ## Important differences from the classic Slack destination -- The classic Slack destination formats messages using the handlebars syntax. Slack (Actions) follows [Slack's formatting syntax](https://api.slack.com/reference/surfaces/formatting){:target="_blank"}. +- The classic Slack destination formats messages using the handlebars syntax. Slack (Actions) follows [Slack's formatting syntax](https://api.slack.com/reference/surfaces/formatting){:target="_blank"}. {% include components/actions-fields.html %} ## Migration from the classic Slack destination -{% include content/ajs-upgrade.md %} - - Follow the table below to map your existing Slack destination configuration to Slack (Actions). > warning "" > Slack (Actions) uses [Slack's formatting syntax](https://api.slack.com/reference/surfaces/formatting){:target="_blank"}. This requires that you manually re-enter any messages from Slack Classic, and pick event data from the event variable picker. The handlebars syntax from Slack Classic is not compatible. -{% include components/actions-map-table.html name="slack" %} \ No newline at end of file +{% include components/actions-map-table.html name="slack" %} diff --git a/src/connections/destinations/catalog/actions-snap-conversions/index.md b/src/connections/destinations/catalog/actions-snap-conversions/index.md index edd266b40a..0ef7f67187 100644 --- a/src/connections/destinations/catalog/actions-snap-conversions/index.md +++ b/src/connections/destinations/catalog/actions-snap-conversions/index.md @@ -36,6 +36,12 @@ The Snapchat Conversions API destination provides the following benefits: ## FAQ and Troubleshooting +### Invalid token error +If you're experiencing 400 Bad Requests errors related to an invalid token, follow [these instructions](/docs/connections/destinations/catalog/actions-snap-conversions/#getting-started) to reauthorize your account: +- On the **Settings** tab, authenticate with Snap using OAuth. +- Click **Connect to Snapchat Conversions API**. +- Follow the prompts to authenticate using OAuth with a Snapchat login. Use a Snapchat login that is a member of the Snapchat Ads account you want to connect. + ### Deduplication with the Snap Pixel or App Ads Kit (SDK) There are many ways to send conversion data to Snap, including through the Snap Pixel, App Ads Kit or Conversions API. Snap recommends sending redundant data across sources to ensure the best optimization, targeting, and measurement capabilities. The Client Deduplication ID, Transaction ID, and Mobile Ad Identifier are used by Snap to deduplicate events across sources. Please see below for guidance on when to use each field for deduplication. - **Web**: Snap Conversions API and PixeI @@ -51,7 +57,7 @@ There are many ways to send conversion data to Snap, including through the Snap The Client Deduplication ID allows for a 48-hour deduplication window. The Transaction ID is only eligible for `PURCHASE` events and allows for a 30-day deduplication window. See Snapchat’s [Marketing API documentation](https://marketingapi.snapchat.com/docs/conversion.html#deduplication){:target="_blank"} and [Business Help Center](https://businesshelp.snapchat.com/s/article/event-deduplication?language=en_US){:target="_blank"} for more information. > info "" -> Segment does not have client-side destinations for the Snap Pixel or Snap App Ads Kit (SDK). If you choose to integrate client-side, these must be implemented natively. See Snapchat’s [Install Snap Pixel](https://businesshelp.snapchat.com/s/article/pixel-website-install?language=en_US){:target="_blank"} and [App Ads Kit](https://businesshelp.snapchat.com/s/article/app-ads-kit?language=en_US){:target="_blank"} for implementation details. +> Segment does not have client-side destinations for the Snap Pixel or Snap App Ads Kit (SDK). If you choose to integrate client-side, these must be implemented natively. See Snapchat’s [Install Snap Pixel](https://businesshelp.snapchat.com/s/article/pixel-website-install?language=en_US){:target="_blank"} and [App Ads Kit](https://businesshelp.snapchat.com/s/topic/0TO0y000000YmidGAC/app-ads-kit?language=en_US){:target="_blank"} for implementation details. ### Latency It may take up to 1-hour for events to appear in the Snapchat [Events Manager](https://businesshelp.snapchat.com/s/article/events-manager?language=en_US){:target="_blank"}. @@ -62,7 +68,15 @@ If you want to send a Snap Event Type that Segment doesn’t have a prebuilt map 2. Set up your Event Trigger criteria for trial starts. 3. Input a literal string of “START_TRIAL” as the Event Type. -The Snapchat Conversions API only supports sending Event Types that are in the [predefined `event_type` list](https://marketingapi.snapchat.com/docs/conversion.html#conversion-parameters){:target="_blank"}. This includes custom events. You must use `CUSTOM_EVENT_1`, `CUSTOM_EVENT_2`, `CUSTOM_EVENT_3`, `CUSTOM_EVENT_4`, or `CUSTOM_EVENT_5` as the Event Type. Events sent with an invalid event type will fail with an `Unrecognized event type` error. +The Snapchat Conversions API only supports sending Event Types that are in the [predefined `event_type` list](https://marketingapi.snapchat.com/docs/conversion.html#conversion-parameters){:target="_blank"}. This includes custom events. You must use `CUSTOM_EVENT_1`, `CUSTOM_EVENT_2`, `CUSTOM_EVENT_3`, `CUSTOM_EVENT_4`, or `CUSTOM_EVENT_5` as the Event Type. Events sent with an invalid event type will fail with an `Unrecognized event type` error. + +### Single or multiple products or items +It's possible to send details of either single or multiple products/items in a single conversion event. +- **Single product/item**: Use the "Item ID", "Item Category" and "Brand" fields. +- **Multiple products/items**: Use the "Products" field which accepts an array of products / items. + +### Specifying the total value of a purchase +The "Price" field should be used when specifying the total value of a purchase, and should contain a numeric value only. e.g. 99.5. ### Required parameters and hashing To match visitor events with Snapchat ads, Snap requires that one or a combination of the following parameters are sent to the Conversions API: diff --git a/src/connections/destinations/catalog/actions-sprig-web/index.md b/src/connections/destinations/catalog/actions-sprig-web/index.md index 76be4c9337..4d8f507dce 100644 --- a/src/connections/destinations/catalog/actions-sprig-web/index.md +++ b/src/connections/destinations/catalog/actions-sprig-web/index.md @@ -12,7 +12,7 @@ hidden: true [Sprig (formerly UserLeap)](https://sprig.com/?&utm_source=segmentio&utm_medium=docs_actions&utm_campaign=integration){:target="_blank"} is an in-context user research platform that makes it fast and effortless for product teams to learn from their actual customers in real-time, through microsurveys, concept tests, and video questions. -Sprig maintains this destination. For any issues with the destination, consult [Sprig's documentation](https://docs.sprig.com/docs/segment-web) or contact [support@sprig.com](mailto:support@sprig.com). +Sprig maintains this destination. For any issues with the destination, consult [Sprig's documentation](https://docs.sprig.com/docs/segment-web){:target="_blank”} or contact [support@sprig.com](mailto:support@sprig.com). diff --git a/src/connections/destinations/catalog/actions-stackadapt-cloud/images/copy-pixel-id.png b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/copy-pixel-id.png new file mode 100644 index 0000000000..5779b94896 Binary files /dev/null and b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/copy-pixel-id.png differ diff --git a/src/connections/destinations/catalog/actions-stackadapt-cloud/images/email-event-rule.png b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/email-event-rule.png new file mode 100644 index 0000000000..6c108a7fbb Binary files /dev/null and b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/email-event-rule.png differ diff --git a/src/connections/destinations/catalog/actions-stackadapt-cloud/images/install-pixel-link.png b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/install-pixel-link.png new file mode 100644 index 0000000000..10dda554bd Binary files /dev/null and b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/install-pixel-link.png differ diff --git a/src/connections/destinations/catalog/actions-stackadapt-cloud/images/order-completed-event-rule.png b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/order-completed-event-rule.png new file mode 100644 index 0000000000..d850eceeb0 Binary files /dev/null and b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/order-completed-event-rule.png differ diff --git a/src/connections/destinations/catalog/actions-stackadapt-cloud/images/snowflake-mappings.png b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/snowflake-mappings.png new file mode 100644 index 0000000000..7ab6cc4a6d Binary files /dev/null and b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/snowflake-mappings.png differ diff --git a/src/connections/destinations/catalog/actions-stackadapt-cloud/images/user-registered-event-rule.png b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/user-registered-event-rule.png new file mode 100644 index 0000000000..a4f493cfad Binary files /dev/null and b/src/connections/destinations/catalog/actions-stackadapt-cloud/images/user-registered-event-rule.png differ diff --git a/src/connections/destinations/catalog/actions-stackadapt-cloud/index.md b/src/connections/destinations/catalog/actions-stackadapt-cloud/index.md new file mode 100644 index 0000000000..d0d132e18e --- /dev/null +++ b/src/connections/destinations/catalog/actions-stackadapt-cloud/index.md @@ -0,0 +1,172 @@ +--- +title: StackAdapt Destination +hide-boilerplate: true +hide-dossier: true +beta: true +id: 61d8859be4f795335d5c677c +hidden: true +redirect_from: '/connections/destinations/catalog/actions-stackadapt/' +--- + +{% include content/plan-grid.md name="actions" %} + +By setting up StackAdapt as a Segment destination, your Segment events will be forwarded to [StackAdapt](https://www.stackadapt.com/){:target="_blank"}. This allows you to generate retargeting and lookalike audiences, track conversions, and measure return on ad spend using your Segment events - bypassing the need to install the StackAdapt pixel on your website and write code to send events to StackAdapt. + +This destination is maintained by StackAdapt. For any issues with the destination, please [submit a ticket to StackAdapt's support team](https://support.stackadapt.com/hc/en-us/requests/new?ticket_form_id=360006572593){:target="_blank"}. + + +## Getting started + +### Getting your StackAdapt Universal Pixel ID + +1. Log in to your StackAdapt account and navigate to the Pixels page. +2. Above the list of pixels, click **Install StackAdapt Pixel**. + + ![Image showing location of link to install Pixel](images/install-pixel-link.png) + +3. In the instructions that appear, copy the universal pixel ID from the code snippet. Below is an example of a code snippet where the universal pixel ID is `sqQHa3Ob1hFi__2EcYYVZg1`. + +![Image showing location of universal pixel ID in code snippet](images/copy-pixel-id.png) + +### Setting up the StackAdapt destination in Segment + +1. From the Segment web app, navigate to **Connections > Catalog > Destinations**. +2. Search for and select the "StackAdapt" destination. +3. Click **Add Destination**. +4. Select an existing source to connect to the StackAdapt destination. +5. Give the destination a name. +6. On the Settings screen, provide your StackAdapt Universal Pixel ID. This can be found on the Pixels page in StackAdapt as described above. +7. Toggle on the destination using the **Enable Destination** toggle. +8. Click **Save Change**. + +### StackAdapt Pixel setup + +Segment events that are forwarded to StackAdapt can be used to track ad conversions, and to generate retargeting and lookalike audiences. Please review the StackAdapt documentation for the general setup of these if you are not already familiar: + +- [Creating Conversion Events](https://support.stackadapt.com/hc/en-us/articles/360005859214-Creating-Conversion-Events){:target="_blank"} +- [Creating Retargeting Audiences](https://support.stackadapt.com/hc/en-us/articles/360005939153-Creating-Retargeting-Audiences){:target="_blank"} +- [How to Generate and Target a Lookalike Audience](https://support.stackadapt.com/hc/en-us/articles/360023738733-How-to-Generate-and-Target-a-Lookalike-Audience){:target="_blank"} + +Setup of conversion events, retargeting audiences, and lookalike audiences that fire on Segment events is largely the same as the setup in the StackAdapt documentation, with a few caveats: + +1. You **must** select "Universal Pixel" as the pixel type. This is because the StackAdapt destination in Segment uses your Universal Pixel ID to send events to StackAdapt. +2. There is no need to install the StackAdapt pixel on your website as instructed in the "Installation" step, since Segment will forward events to StackAdapt that would normally be tracked by the StackAdapt pixel. +3. If you choose to set up event rules, you will need to ensure that you use the event keys supported by the the StackAdapt destination as described below. + +### Event rules + +The StackAdapt Segment destination sends an `action` event key which by default is mapped to the Segment event name. Creating rules on this `action` key should be sufficient for most simple event rule use cases. For example, if you fire a Segment event when a user fills out a registration form on your website and want to track this as a conversion event in StackAdapt, you can create a rule in StackAdapt that matches the `action` key with the Segment event name. + +A Segment event fired with the code `analytics.track("User Registered")` can be tracked as a conversion event with an event rule that matches an `action` of `User Registered` as shown below: + +![Image showing event rule in StackAdapt the matches a User Registered event](images/user-registered-event-rule.png) + +#### Ecommerce events + +The StackAdapt destination also supports forwarding ecommerce fields for the purpose of creating event rules that match ecommerce events, with default mappings to properties specified in the [Segment V2 Ecommerce Event Spec](/docs/connections/spec/ecommerce/v2/) as described in the below table: + +| Segment Ecommerce Event Property | StackAdapt Event Key | +|----------------------------------|----------------------| +| `order_id` | `order_id` | +| `revenue` | `revenue` | +| `product_id` | `product_id` | +| `category` | `product_category` | +| `name` | `product_name` | +| `price` | `product_price` | +| `quantity` | `product_quantity` | + +For events that can involve multiple products, such as checkout events, StackAdapt forwards a JSON array of product objects with a `products` key and fields that map by default to following Segment product array fields: + +| Segment Ecommerce Event Property | StackAdapt Product Object Key | +|----------------------------------|-------------------------------| +| `products.$.product_id` | `product_id` | +| `products.$.category` | `product_category` | +| `products.$.name` | `product_name` | +| `products.$.price` | `product_price` | +| `products.$.quantity` | `product_quantity` | + +For example, to create a conversion event when an order is completed with a revenue value greater than 10, you could set up an event rule matching an `action` value of `Order Completed` and a `revenue` value greater than 10 as shown below: + +![Image showing event rule in StackAdapt the matches an Order Completed event with a revenue greater than 10](images/order-completed-event-rule.png) + +This rule would match a Segment event fired with code such as: + +```javascript +analytics.track('Order Completed', { + order_id: '50314b8e9bcf000000000000', + revenue: 11.5 + products: [ + { + product_id: '507f1f77bcf86cd799439011', + name: 'Monopoly: 3rd Edition', + price: 11.5, + quantity: 1, + category: 'Games' + } + ] +}); +``` + +#### Trait Fields + +Although trait fields are not frequently used in event rules, the StackAdapt destination forwards them and they can be used if desired. + +| Segment Trait Property | StackAdapt Event Key | +|------------------------|----------------------| +| `traits.email` | `email` | +| `traits.first_name` | `first_name` | +| `traits.last_name` | `last_name` | +| `traits.phone` | `phone` | + +For example, to create a conversion event when a user with the domain `example.com` completes an order, you could set up an event rule matching an `action` value of `Order Completed` and an `email` containing `@example.com` as shown below: + +![Image showing event rule in StackAdapt the matches an Order Completed event with an email containing @example.com](images/email-event-rule.png) + +This rule would match a Segment event fired with code such as: + +```javascript +analytics.track('Order Completed', { + order_id: '50314b8e9bcf000000000000', + traits: { + email: 'john.smith@example.com', + first_name: 'John', + last_name: 'Smith', + phone: '+180055501000' + } +}); +``` + +### URL rules + +If you are using URL rules, these will be matched whenever Segment sends an event to StackAdapt with a `url` matching the URL rule. This should be accomplished by the page event Segment automatically fires when a page is viewed, so setup of URL rules should be identical to setting up URL rules with the StackAdapt pixel. + +### Conversion Tracking with Backend Events + +When you send events to Segment from your backend, which are forwarded to StackAdapt using Segment's backend SDKs, the user agent and IP address of the user who originated the event must be included in the event context for conversions to be tracked. StackAdapt uses the user agent and IP address to attribute the conversion to the correct event to a user who has interacted with your ads. Examples of how to do this can be found in the documentation for Segment's SDKs. For example, for the [Python SDK](/docs/connections/sources/catalog/libraries/server/python/#override-context-value) this can be done as follows: + +```python +analytics.track('user_id', 'Order Completed', context={ + 'ip': '203.0.113.1', + 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' +}) +``` + +This is necessary when using backend SDKs but not for events sent from the frontend with `analytics.js`, because `analytics.js` automatically includes the user-agent and IP address in the event context. + +### Conversion Tracking with Reverse ETL + +When sending past events to StackAdapt using a Reverse ETL tool, the user agent, IP address, event type, and either the page URL (for conversion trackers with URL rules), or the fields the event rules match on, must be included in your mappings. For example, the below mapping for a Snowflake source can be used to match a conversion tracker with an event rule that matches an `action` of `User Registered`: + +![Image showing Snowflake mapping to forward User Registered events](images/snowflake-mappings.png) + +Rows forwarded to StackAdapt with this mapping will be matched by the `User Registered` event rule shown below: + +![Image showing event rule in StackAdapt the matches a User Registered event](images/user-registered-event-rule.png) + +When forwarding past events using Reverse ETL, only users who have interacted with an ad from an associated campaign within the conversion tracker's configured view-through expiry window (for impressions) or click-through expiry window (for clicks) will count as conversions. These windows can be set to up to 180 days in the conversion tracker configuration. + +{% include components/actions-fields.html %} + +## Data and privacy + +Review [StackAdapt's Data Processing Agreement](https://www.stackadapt.com/data-processing-agreement){:target="_blank"} to learn more about StackAdapt's privacy and data terms. diff --git a/src/connections/destinations/catalog/actions-surveysparrow/index.md b/src/connections/destinations/catalog/actions-surveysparrow/index.md new file mode 100644 index 0000000000..73f2ca53c4 --- /dev/null +++ b/src/connections/destinations/catalog/actions-surveysparrow/index.md @@ -0,0 +1,22 @@ +--- +title: SurveySparrow (Actions) Destination +hidden: true +beta: true +--- +{% include content/plan-grid.md name="actions" %} + +[SurveySparrow](https://surveysparrow.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is an end-to-end omnichannel experience management platform that bundles Customer Experience and Employee Experience tools such as NPS, Offline, Chat, Classic, and 360 Surveys which are mobile-first, highly engaging, and user-friendly. + +This destination is maintained by SurveySparrow. For any issues with the destination, [contact their Support team](mailto:support@surveysparrow.com). + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank"} search for "SurveySparrow" +2. Select SurveySparrow and click **Add Destination** +3. Select an existing Source to connect to SurveySparrow (Actions). +4. Log in to your [SurveySparrow](https://app.surveysparrow.com/) account, then navigate to **Settings > Apps and Integrations > Create a Custom app**. +5. Fill in the details for the custom app and choose **Select all** under Scope. Later, you can remove any scopes that are not required. +6. Click **Save** and copy the **Access Token**. +7. Enter the **Access Token** in the SurveySparrow destination settings in Segment. + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/actions-survicate/index.md b/src/connections/destinations/catalog/actions-survicate/index.md new file mode 100644 index 0000000000..3ccd0f53e6 --- /dev/null +++ b/src/connections/destinations/catalog/actions-survicate/index.md @@ -0,0 +1,132 @@ +--- +rewrite: true +title: Survicate (Actions) Destination +id: 65a6ac19ea6d3ced628be00b +--- +[Survicate](https://survicate.com/integrations/segment-survey/?utm_source=segment&utm_medium=referral){:target="_blank”} is a complete toolkit for customer feedback. + +This destination is maintained by Survicate. For any issues with the destination, [contact the Survicate Support team](mailto:help@survicate.com). + + +## Getting Started + +1. From the Segment web app, click **Destinations**. +2. Search for "Survicate (Actions)" in the Catalog, select it, and choose which of your sources to connect the destination to. +3. Enter the "Workspace Key" into your Segment Settings UI which you can find from your [Survicate Workspace Settings](https://panel.survicate.com/o/0/w/0/settings/web-surveys){:target="_blank"}. +{% include components/actions-fields.html %} +## Identify + +If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: + +``` +analytics.identify('userId123', { + email: 'john.doe@example.com', + jobTitle: 'CEO', + companySize: '50' +}); +``` + +When you call Identify, we pass Segment traits as respondents' attributes to Survicate. They can be used to trigger web surveys or filter survey results. + +All traits passed in Identify calls will be available in Survicate - once you view a respondent profile or export survey data. + +All `camelCase` attribute keys are translated to `snake_case`. + +All *object attributes* will be flattened to attributes prefixed by object key. All *array attributes* will be omitted. + +``` +analytics.identify('1234', { + address: { + street: '6th St', + city: 'San Francisco', + state: 'CA', + postalCode: '94103', + country: 'USA' + }, + categories: ['startup','SaaS'] +}); +``` + +The above described call creates following respondent's traits in Survicate: + +| key | value | +| ------------------- | ------------- | +| id | 1234 | +| address_street | 6th St | +| address_city | San Francisco | +| address_state | CA | +| address_postal_code | 94103 | +| address_country | USA | + +*Categories* attribute is omitted as it is an array attribute. + +## Group + +If you're not familiar with the Segment Specs, take a look to understand what the [Group method](/docs/connections/spec/group/) does. An example call would look like: + +``` +analytics.group('group123', { + name: 'Company Inc.' +}); +``` + +All Group traits will be passed to respondent attributes with `group_` prefix. All `camelCase` attribute keys are translated to `snake_case`. All *object attributes* will be flattened to attributes prefixed by object key. All *array attributes* will be omitted. + +``` +analytics.group('group123', { + name: 'Company Inc.', + address: { + street: '6th St', + city: 'San Francisco', + state: 'CA', + postalCode: '94103', + country: 'USA' + }, + categories: ['startup','SaaS'] +}); +``` + +The above described call creates the following respondent's traits in Survicate: + +| key | value | +| ------------------------- | ------------- | +| group_id | group123 | +| group_name | Company Inc. | +| group_address_street | 6th St | +| group_address_city | San Francisco | +| group_address_state | CA | +| group_address_postal_code | 94103 | +| group_address_country | USA | + +*Categories* attribute is omitted as it is an array attribute. + +## Track + +A Segment track call, f.ex: +``` +analytics.track('plan_purchased', { + plan: 'Pro Annual', + accountType : 'Facebook' +}); +``` + +will trigger a Survicate call that sends the event name and properties to Survicate. + +If you want to trigger your survey on a Segment event, you are able to do that by setting that condition in the panel in the targeting tab in the section: "When a user triggers an event" under "Where would you like to show the survey". + +When the Segment event fires and other targeting conditions you've set in the panel are met - your survey will show. + +Event properties are optional. + +### Sending survey answers to Segment + +Once the Segment integration is enabled in Survicate Integrations tab, it starts sending track events from your client-side source. Here's a sample call that will be triggered when a survey is answered. + +``` +analytics.track('survicate_survey_answered', { + answer: 'Great suppport!', + answer_type: 'text', + question: 'What makes us stand out from the competition?', + survey: 'Advantages Over Competition Research', +}); +``` diff --git a/src/connections/destinations/catalog/actions-the-trade-desk-crm/index.md b/src/connections/destinations/catalog/actions-the-trade-desk-crm/index.md new file mode 100644 index 0000000000..dbdd3db628 --- /dev/null +++ b/src/connections/destinations/catalog/actions-the-trade-desk-crm/index.md @@ -0,0 +1,67 @@ +--- +title: The Trade Desk CRM Destination +hide-personas-partial: true +hide-boilerplate: true +hide-dossier: false +beta: true +id: 6440068936c4fb9f699b0645 +redirect_from: "/connections/destinations/catalog/the-trade-desk-crm/" +--- + +[The Trade Desk](https://www.thetradedesk.com/us){:target="_blank"} empowers companies and their partners to leverage data in their expansive data marketplace, facilitating seamless discovery, creation, and engagement with valuable audiences. Segment's integration with The Trade Desk allows you to push first-party user data from audiences created in [Twilio Engage](https://www.twilio.com/en-us/engage){:target="_blank"} to The Trade Desk platform, enhancing targeted reach to brand's first-party audiences. + +This integration lets users link Engage audiences to The Trade Desk and transmit Personally Identifiable Information (PII), including email addresses and hashed emails. Users have the flexibility to configure their delivery preferences within Segment. + +The Trade Desk destination can only be connected to Twilio Engage sources. + +## Getting started + +### Obtaining credentials from The Trade Desk + +> info "" +> Contact your The Trade Desk account manager to sign the UID POC contract before you activate audiences on The Trade Desk. Afterwards, The Trade Desk will grant permission and share your advertiser ID and secret key for configuring your destination. + +Before you begin, generate a [long-lived token](https://partner.thetradedesk.com/v3/portal/api/doc/Authentication#ui-method-create){:target="_blank"} on [The Trade Desk's Developer Portal](https://api.thetradedesk.com/v3/tokens){:target="_blank"}. + +### Connecting The Trade Desk CRM + +1. Go to the Segment web app and navigate to **Engage > Audiences**. Ensure you are in the Engage space you intend to use with The Trade Desk. Choose an existing Engage Audience or create a new one. This is the audience you plan to send to The Trade Desk. +2. Access **Engage > Engage Settings** and click on **Destinations**. Confirm that you are in the correct Engage space. +3. Search for **The Trade Desk CRM** and select the destination. +4. Click on **Configure The Trade Desk CRM**. +5. On the **Select Source** screen, your Engage space should already be selected as the source. Click on **Confirm Source**. +6. Generate a [long-lived token](https://partner.thetradedesk.com/v3/portal/api/doc/Authentication#ui-method-create){:target="_blank"} on [The Trade Desk's Developer Portal](https://auth.thetradedesk.com/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3Dttd-dev-portal%26redirect_uri%3Dhttps%253A%252F%252Fpartner.thetradedesk.com%252Fv3%252Fsignin-oidc%26response_type%3Dcode%26scope%3Dopenid%2520profile%2520email%2520ttdui_refresh%2520offline_access%2520applications%26code_challenge%3DG5xIiN4NLQYS_L9kqCGZyWg678USH1pV6D2Iqu1e1Q8%26code_challenge_method%3DS256%26response_mode%3Dform_post%26nonce%3D638441362885322803.NWFjOTk2NTMtMzkyOS00NmJmLWE3N2YtODZlYzZjNGQxZWQ1M2E3OGI1ZmUtOThmNC00MDA5LWFiNzQtZmZiZGI2OTUzMzMy%26state%3DCfDJ8BBsgv10-z9IvE3EffVp_QCSKM7pxVdw3rv-shU-_OG4utdVslWzvw8nfZ0D8TKi75uKGCMPp2hiM-IBxjjwToGR-ryK13SXlVMOGMxXj_FUEV8nQfnRR1oQN6YZED0-48NhERsQr96xbaz6a_pVR_z5OZWgQ6RR9MBMUkHYF5tFp651wtbno-7ES1-zsje7hCqzFMTAVV_qAoNur-f8MGkMdw7oSAOQmoYOW4zV2w6SIMLSIOkUvariDC9EAAVPYTjonQdieo2V0rYscC-aVG6U8ASV3yqJc6RmnGRUEVnKHPt-ZZcvy9PHA2-Et04QlGwz6b-buRbNXd3v1E6zuMC5F7dxcT3otr5TQ4yMuC1JA5VRxT4c1tFON2lY4jtxKuyQIQs5N3a59eFc1wGdUSo%26x-client-SKU%3DID_NETSTANDARD2_0%26x-client-ver%3D6.10.0.0){:target="_blank"}. +7. After authenticating, enter your Authentication Token and Advertiser ID from your [The Trade Desk's CRM Data Platform API](https://api.thetradedesk.com/v3/portal/data/doc/DataIntegrateCRMData){:target="_blank"} account. Enable the destination by toggling **Enable Destination** and click **Save Changes**. +8. Navigate to the **Mappings** tab, click **New Mapping**, and choose **Sync Audience to CRM Data Segment**. +9. In the **Select mappings** section, input the PII Type and maintain other defaults. Click **Save** and toggle to enable the mapping. + - **Create only one mapping for every instance.** + - If any of the emails stored in your Engage audience are already in a hashed format, please specify the PII type as `Hashed Email.` Failure to do so results in The Trade Desk categorizing the hashed records as invalid during the ingestion process. +10. Return to **Engage > Audiences** and select the audience from Step 1. +11. Click **Add Destinations** and choose The Trade Desk CRM destination you just created. In the settings that appear in the side panel, enable the **Send Track** option and **do not** alter the Audience Entered/Audience Exited event names. Fill out the audience settings, specifically the region field, with the geographical region of the CRM data segment based on the origin of the PII (US, EU, or APAC). Click **Save Settings**. + +Setup is now complete, and the audience starts syncing to The Trade Desk. + +To sync additional Audiences from your Engage space, create a separate instance of The Trade Desk CRM Destination. + +{% include components/actions-fields.html settings="true"%} + + +## Limitations + +* An audience must have at least 1500 unique members; otherwise, the destination fails, and the data won't sync. +* Audience attempts to sync once per day. +* Audience sync is a full sync. + +## FAQs + +#### How is the CRM Segment Created? + +When connecting your audience from your Engage source to an enabled TTD destination, there's no need to manually create CRM Segments. Segment automatically generates a CRM Segment in your TTD account, mirroring the name of the audience linked to the TTD instance. + +#### How does TTD handle emails that don't already exist? + +The CRM endpoint maps email addresses into UID2s. If it's a valid email address, TTD generates a UID2 for it. However, if there are no bid requests coming in from the SSP with the specific UID2, then the ID would exist in the segment until it hits the TTL and won't be used when purchasing an impression. + +#### What PII format should I send? + +The Trade Desk recommends transmitting personally identifiable information (PII) in its original, non-hashed format. TTD's preference is to handle the hashing of any PII, like emails, on their end. However, if your data already contains any hashed emails, please ensure you are normalizing and hashing the emails by designating the PII type as `Hashed Email`, in line with TTD's [PII Normalization and Hash Encoding](https://api.thetradedesk.com/v3/portal/data/doc/DataPiiNormalization){:target="_blank”} documentation. diff --git a/src/connections/destinations/catalog/actions-tiktok-audiences/index.md b/src/connections/destinations/catalog/actions-tiktok-audiences/index.md index 28e9fcd3d7..45ba7c9e69 100644 --- a/src/connections/destinations/catalog/actions-tiktok-audiences/index.md +++ b/src/connections/destinations/catalog/actions-tiktok-audiences/index.md @@ -4,25 +4,59 @@ id: 63d2e550fb90f1632ed8820a hide-personas-partial: true hide-boilerplate: true hide-dossier: false -hidden: true --- -The TikTok Audiences destination enables advertisers to send Engage audiences to TikTok as Custom Audiences using [TikTok's Segment API](https://ads.tiktok.com/marketing_api/docs?id=1739940504185857){:target="_blank"}. +The TikTok Audiences destination enables advertisers to send Twilio Engage audiences to TikTok as custom audiences using [TikTok's Audience API](https://business-api.tiktok.com/portal/docs?id=1739940504185857){:target="_blank"}. By using Segment's TikTok Audiences destination, you can increase traffic and drive conversions with hyper-relevant ads that promote product discovery. -> info "" -> The TikTok Audiences destination is in beta and is in active development. Some functionality may change before it becomes generally available. - ## Getting started +### Notes + +- If you created a TikTok Audiences destination instance before September 25th, 2023, your instance(s) and all subsequent instances are considered _legacy_ instances. To create a new _legacy_ instance, see the [Create a TikTok audience (Legacy)](#create-a-tiktok-audience-legacy){:target="_blank"} documentation. Users who created their first instance after September 25, 2023 are considered to have _native_ instances. To create a new _native_ instance, see [Configure the TikTok Audiences destination](#configure-the-tiktok-audiences-destination){:target="_blank"} documentation. +- Both _legacy_ and _native_ instances have the same set of features, but are configured differently. Legacy instances require you to create an audience or action manually, but native instances automatically create audiences and actions. +- If you update the events names from the default Audience Entered/Audience Exited, please make sure to also update it in the "Add to Audience" and "Remove from Audience" mappings. +- TikTok [requires](https://business-api.tiktok.com/portal/docs?id=1739940585975809){:target="_blank"} `phone` number to be formatted in E.164 form, e.g. `+1231234567`. If your phone number is missing country code, you can prepend `+1` in the Action Mapping. +- For more information about how to update from _legacy_ to _native_, reach out to [friends@segment.com](mailto:friends@segment.com). + ### Prerequisites -1. Before connecting to the TikTok Audiences destination, you must have a [TikTok Ads Manager](https://www.tiktok.com/business/en-US/solutions/ads-manager){:target="_blank"} account. +Before connecting to the TikTok Audiences destination, you must have a [TikTok Ads Manager](https://www.tiktok.com/business/en-US/solutions/ads-manager){:target="_blank"} account. + +### TikTok Audience Segments + +Send Engage audiences to an existing TikTok audience segment or create a new audience. Note the `audience_id` as this is required to send Engage audiences to TikTok. + +### Configure the TikTok Audiences destination + +1. From the Segment web app, navigate to **Engage > Audiences**. Choose an existing Engage audience or create a new one. Ensure you are in the Engage space you plan to use with the TikTok Audiences destination. + +2. Navigate to **Engage > Engage Settings** and click **Destinations**. + +3. Search for “TikTok Audiences” and select the destination. Click **Configure TikTok Audiences**. + +4. On the Select Source screen, your Engage space should already be selected as the source. Click **Confirm Source**. + +5. On the **Settings** tab for the TikTok Audiences destination, name your destination and authenticate with TikTok Audiences using OAuth. + +6. Once authenticated, toggle “Enable Destination” on and click **Save Changes**. + +7. Navigate to the **Mappings** tab, click **New Mapping**, and select **Add to Audience**. -2. You must also have an audience segment created in your TikTok Advertising account. You can send Engage audiences to an existing audience segment, or you can create a new audience in TikTok. Please take note of the `audience_id` as this will be required to send Engage audiences to TikTok. See TikTok's [Create/Delete an audience segment](https://ads.tiktok.com/marketing_api/docs?id=1739940583739393){:target="_blank"} for instructions on how to create a TikTok audience segment. +8. Navigate to the **Mappings** tab, click **New Mapping**, and select **Remove from Audience**. -### Connect the TikTok Audiences destination +9. Navigate back to **Engage > Audiences** and click on the audience from step 1. + +10. Click **Add Destinations** and select the TikTok Audiences destination you just created. + In the settings that appear in the side panel, toggle the **Send Track** option on and **Send Identify** option off. Provide the [Advertiser ID](https://ads.tiktok.com/help/article/ad-account-information-faq?lang=en){:target="_blank"} linked to the TikTok account that will receive the audience data, as well as the **ID Type** of data you'll be sending. Click **Save Settings**. + +The setup is complete and the audience will start syncing to TikTok. The audience will appear in your [TikTok Ads Manager](https://www.tiktok.com/business/en-US/solutions/ads-manager){:target="_blank"} account under **Assets > Audiences**. Please note that it can take 24-48 hours for users to appear in TikTok. + +### Connect the TikTok Audiences (_Legacy_) destination + +> info "" +> Add User and Remove User are considered legacy actions. 1. From the Segment web app, navigate to **Engage > Audiences**. Ensure you are in the Engage space you plan to use with the TikTok Audiences destination. Either choose an existing Engage audience or create a new one. This is the audience you plan to send to TikTok. @@ -40,7 +74,9 @@ By using Segment's TikTok Audiences destination, you can increase traffic and dr 8. Under Select mappings, select the TikTok "Advertiser ID" of the audience segment you want to add users to. Input the `audience_id` of that audience segment under "Audience ID." **Note: A separate mapping must be created for each audience segment you plan to send Engage audiences to.** -9. Repeat Steps 7 and 8 to also set up a **Remove Users** mapping. + **Note:** Once you've created the audience using the name of Segment's audience key, you can get the Audience ID from TikTok's Assets>Audiences page. You'll also find the Advertised ID, noted by `aadvid`, over the TikTok URL. + +9. Repeat steps 7 and 8 to also set up a **Remove Users** mapping. 10. Navigate back to **Engage > Audiences** and click on the audience from Step 1. @@ -48,6 +84,29 @@ By using Segment's TikTok Audiences destination, you can increase traffic and dr The setup is complete and the audience will start syncing to TikTok. The audience will appear in your [TikTok Ads Manager](https://www.tiktok.com/business/en-US/solutions/ads-manager){:target="_blank"} account under **Assets > Audiences**. Please note that it can take 24-48 hours for users to appear in TikTok. -To sync additional audiences from your Engage space, create a separate mapping in the TikTok Audiences destination. Navigate to **Connections > Destinations**, search and select the TikTok Audiences destination, and follow Steps 7-11 above. +To sync additional audiences from your Engage space, create a separate mapping in the TikTok Audiences destination. Navigate to **Connections > Destinations**, search and select the TikTok Audiences destination, and follow steps 7-11 above. + +### Create a TikTok Audience + +To create an audience in Segment: + +1. Navigate to New Mapping and select **Create Audience**. +2. On the Add test event panel, click **Load Sample Event**. +3. Fill in the mappings on the Select mappings panel accordingly. +4. On the Send test event panel, click **Test Mapping**. +5. You've created your audience. Copy the `audience_id` from the response as you will need it to create additional mappings. + +You can use the same mapping to create as many audiences as you'd like. To create another audience, change the audience name and click **Test Mapping**. + +You can create a duplicate audience since TikTok doesn't restrict users from having multiple audiences with the same name. If you click **Test Mapping** multiple times, you will create audiences with the same name. However, each audience will have its own unique `audience_id`. + +You do not need to update the status of the mapping to `enabled`. + +For instructions on how to create a TikTok audience segment, see TikTok's [Create/Delete an audience segment](https://ads.tiktok.com/marketing_api/docs?id=1739940583739393){:target="_blank"} docs. {% include components/actions-fields.html %} + +## FAQS + +### Why is my audience considered too small in TikTok? +[TikTok](https://ads.tiktok.com/help/article/custom-audiences?lang=en) requires a minimum audience size of 1,000 to target Custom Audiences in an ad group. diff --git a/src/connections/destinations/catalog/actions-tiktok-offline-conversions/index.md b/src/connections/destinations/catalog/actions-tiktok-offline-conversions/index.md new file mode 100644 index 0000000000..6927ed4f3f --- /dev/null +++ b/src/connections/destinations/catalog/actions-tiktok-offline-conversions/index.md @@ -0,0 +1,55 @@ +--- +title: Tiktok Offline Conversions (Actions) Destination +id: 6447ca8bfaa773a2ba0777a0 +--- + +{% include content/plan-grid.md name="actions" %} + +[Tiktok's Offline Events API](https://ads.tiktok.com/marketing_api/docs?id=1758049779688450){:target="_blank”} helps advertisers measure how TikTok ads result in offline customer actions, such as in-store purchases or offline subscriptions, purchases and more. Attributing online and offline events is an important step for advertisers to measure omni-channel results from their campaigns. + +**Benefits** +- **Measure how TikTok ads influence offline conversions.** Learn what online strategies lead to better Brick & Mortar sales, subscription sign-ups or leads. +- **Power holistic attribution models with cross-channel event tracking.** Combine online and offline touchpoints to get comprehensive campaign metrics, like ROAS. +- **Reach offline customers online with custom audiences.** Promote new products or services to high-value customers who initiative offline events. + + +This destination is maintained by Tiktok. For any issues with the destination, [contact their Support team](mailto:segmenteng@bytedance.com). + +## Getting started + +Prior to setting up the **TikTok Offline Conversion Destination**, please create an Offline Event Set and generate the Access Token for it from **TikTok Events Manager**. + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure Tiktok Offline Conversions (Actions)**. +4. Select an existing Source to connect to Tiktok Offline Conversions (Actions). +5. Give Destination a name. +6. On the Settings screen, provide Access Token and Event Set ID. +7. Toggle on the Destination. +8. Hit the Save Change button. + +**Mappings Enabled by Default** + +After setting up the Destination, four mappings will be enabled by default. You can click on the mappings tab to view and edit these mappings. + +- Complete Payment: use this to track offline purchase events +- Subscribe: use this to track offline subscription events +- Contact: use this to track offline contact events +- Submit Form: use this to track offline form submissions + +{% include components/actions-fields.html %} + +## Acess Token & Event Set ID +Please refer to the [documentation](https://ads.tiktok.com/marketing_api/docs?id=1758051319816193){:target="_blank”} to obtain the **Access Token** and the **Event Set ID**. + +## PII Requirement & Validation +TikTok Offline Events API requires at least one type of PII (email addresses and/or phone numbers) to be included in all offline conversion events. The email addresses and phone numbers will be hashed using SHA 256 from Segment before they are sent to TikTok. TikTok Offline Conversions Destination will automatically hash the provided PII, so please do not hash the PIIs before sending them to Segment. In addition, TikTok Offline Conversions Destination will validate all offline events before forwarding them to TikTok Offline Events API. TikTok Offline Conversions Destination will not send any offline events to TikTok with invalid or missing PIIs. + +## Data and Privacy Considerations +- Every offline event sent to TikTok Offline Events API requires at least one email address or phone number. +- E-mails and phone numbers will be hashed in a privacy-safe way by default so that TikTok cannot identify customers who are not TikTok users. +- iOS compliance checks will be performed on PII (ATT opt-out users will still be reported and attributed). +- TikTok will pruge unmatched offline conversions IDs/records. + + +--- diff --git a/src/connections/destinations/catalog/actions-tiktok-pixel/index.md b/src/connections/destinations/catalog/actions-tiktok-pixel/index.md new file mode 100644 index 0000000000..5cb68cb960 --- /dev/null +++ b/src/connections/destinations/catalog/actions-tiktok-pixel/index.md @@ -0,0 +1,69 @@ +--- +title: TikTok Pixel Destination +id: 64c1690a9f08c84a420aba78 +--- + +{% include content/plan-grid.md name="actions" %} + +[TikTok Pixel](https://ads.tiktok.com/marketing_api/docs?id=1739583652957185){:target="_blank"} is a piece of code that you can place on your website that allows you to share website events with TikTok. With TikTok for Business Tools, the Pixel can help you measure traffic on your website, measure ad campaign performance, optimize your campaigns and find new customers. + +### Benefits of TikTok Pixel + +Use data collected from TikTok Pixel to: +- **Build marketing audiences**: Create custom Audiences based on website visitor events, like viewing a product page or making a purchase. Audiences can be used to re-engage previous site visitors or model lookalikes to find new customers. +- **Optimize ad delivery**: Target Audiences that are more likely to initiate a website event by setting an optimization goal on visitor events like add to cart, view page, or purchase. +- **Measure campaign performance**: Measure your ad performance and return on ad spend (ROAS) based on a series of conversion events you define. + +This destination is maintained by TikTok. For any issues with the destination, [contact TikTok's Support team](mailto:segmenteng@bytedance.com). + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for "TikTok Pixel" in the search bar, then click on the Destination "TikTok Pixel". +3. Click **Add Destination**. +4. Select an existing JavaScript Source to connect to TikTok Pixel. +5. Give the Destination a name. +6. On the Settings screen, provide the Pixel Code. This can be found in the TikTok Events Manager (TTEM). +7. Toggle on the Destination using the **Enable Destination** toggle. +8. Click **Save Change**. + +### Mappings enabled by default + +After setting up the Destination, Segment enables seven mappings by default. You can click on the mappings tab to view and edit these mappings. + +- **View Content**: When a page is viewed +- **Search**: When a search is made +- **Add to Wishlist**: When an item is added to a wishlist +- **Add to Cart**: When an item is added to the shopping cart +- **Initiate Checkout**: When the checkout process is started +- **Add Payment Info**: When payment information is added in the checkout flow +- **Place an Order**: When an order is placed + +{% include components/actions-fields.html %} + +## Getting started with Pixel and obtaining the Pixel code + +Please refer to the [TikTok Help Center documentation](https://ads.tiktok.com/help/article/get-started-pixel?redirected=2){:target="_blank"} to learn more about how to get started with TikTok Pixel. Once the Pixel is created, please retrieve the Pixel Code from TikTok Events Manager (TTEM). + +## Advanced Matching + +Advanced Matching helps you optimize your TikTok ads and drive performance by matching customer information with TikTok users. Hashed customer information can be shared with any TikTok event to attribute more conversions, build bigger audiences, and improve campaign optimization. + +There are two types of Advanced Matching: manual or automatic. + +**Manual Advanced Matching** is the passing of customer information to TikTok from your website. With this option, you have the flexibility to configure what information and for which event you want to pass to TikTok. This will be enabled automatically if PIIs are included in the Pixel events sent from TikTok Pixel Destination. + +When email and/or phone number values are sent to TikTok, TikTok will try to match users with the PII you send to TikTok. If you don't send email or phone number values, TikTok will try to match users with IP and user-agent values that are included in the Pixel event payload. + +**Automatic Advanced Matching** is when advertisers instruct TikTok to automatically identify form fields on pages where Pixel is installed and to hash and collect email and phone numbers entered on those pages for ad measurement and attribution purposes. Learn more about Automatic Advanced Matching and how to turn it on in [TikTok help center](https://ads.tiktok.com/help/article/advanced-matching-web?lang=en){:target="_blank"}. + +To maximize Advanced Matching's performance, TikTok recommends using both Manual and Automatic Advanced Matching at the same time. + +## PII hashing +- TikTok hashes all values with `sha256` before processing. + +- Normalize phone numbers you send to TikTok with in the `E.164` format. This format is a combination of `+[country code][phone number]`. For example: `+12133734253`. + +## Data and privacy + +Visit TikTok's [docs](https://ads.tiktok.com/i18n/official/policy/business-products-terms){:target="_blank"} to learn more about TikTok's privacy and data terms. diff --git a/src/connections/destinations/catalog/actions-toplyne-cloud/index.md b/src/connections/destinations/catalog/actions-toplyne-cloud/index.md index 9db1283d96..7082de33e8 100644 --- a/src/connections/destinations/catalog/actions-toplyne-cloud/index.md +++ b/src/connections/destinations/catalog/actions-toplyne-cloud/index.md @@ -1,26 +1,17 @@ --- -# The end name should be similar to `Slack Destination` title: Toplyne Cloud Mode (Actions) Destination beta: true hide-boilerplate: true hide-dossier: true -hidden: true -private: true id: 6408ac6c144a7d5ac55cf414 ---- - - +private: false +hidden: false +--- {% include content/plan-grid.md name="actions" %} [Toplyne](https://www.toplyne.io/){:target="_blank"} is a headless Sales AI for revenue teams. Toplyne's AI captures and understands every user click passed through Segment and enriches it with demographic data (through 3rd party enrichment tools). Toplyne then delivers opportunities for expansion and conversion into your existing CRM. Toplyne does this without involving your data and engineering teams. Cloudflare, Vercel, and Canva depend on Toplyne to build predictable pipelines and improve conversions and expansions for their sales and account management teams. - - -{% include content/ajs-upgrade.md %} - - - ## Benefits of Toplyne (Actions) Toplyne (Actions) provides the following benefits: @@ -29,7 +20,7 @@ Toplyne (Actions) provides the following benefits: - **Clear mapping of data** Actions-based destinations enable you to define the mapping between the data Segment received from your source and the data Segment sends to Toplyne. - **Pre-built mapping.** Mappings for Toplyne, are prebuilt with the prescribed parameters and available for customization - **No 3rd party tool is involved.** Move the data directly from Segment to Toplyne without the requirement of a 3rd party tool to facilitate the data sync. - + ## Getting started @@ -43,9 +34,6 @@ Toplyne (Actions) provides the following benefits: 8. Copy the access token that has just been generated. This will be the API key that you will enter in Segment. 9. Save your changes and enable the destination. - - {% include components/actions-fields.html %} - + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-upollo/index.md b/src/connections/destinations/catalog/actions-upollo/index.md index 7709441ef4..20bbe96329 100644 --- a/src/connections/destinations/catalog/actions-upollo/index.md +++ b/src/connections/destinations/catalog/actions-upollo/index.md @@ -5,10 +5,11 @@ id: 640267d74c13708d74062dcd {% include content/plan-grid.md name="actions" %} -[Upollo](https://upollo.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} finds and converts repeat trialers, account sharers and more. +[Upollo](https://upollo.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} gives unique and actionable insights that lead to conversion, retention and expansion. -11% of users signing up for free trials have [already had a free trial](https://upollo.ai/blog/turn-repeated-trials-into-growth?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}, and up to 45% of users [share their logins](https://upollo.ai/blog/grow-by-understanding-account-sharing?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} with others. -Inviting these users to a paid account is the top underutilized growth channel for SaaS businesses. +Understand who your users truly are, if they are ready to convert, churn or expand and why they are ready. Upollo provices unique insights from users who are ready to convert because they have [already had a free trial](https://upollo.ai/blog/turn-repeated-trials-into-growth?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}, a company ripe for a team wide roll out because they [share logins](https://upollo.ai/blog/grow-by-understanding-account-sharing?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} or finding high intent companies [hidden behind public emails](https://upollo.ai/blog/hidden-goldmine-public-emails){:target="_blank”}. + +Upollo also enriches your identify data with firmopgrahic data so you can understand your users in Upollo or in your data warehouse. See company name, size and industry for your users as soon as they sign in, for free at unlimited scale. Upollo maintains this destination. For any questions or issues with the destination, please [contact the Upollo team](https://upollo.ai/contact?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. @@ -16,13 +17,12 @@ Upollo maintains this destination. For any questions or issues with the destinat Upollo (Actions) provides the following benefits: -- **Find hidden growth opportunities**. Quickly see how many users are repeating free trials or sharing their account. +- **Find hidden growth opportunities**. Quickly see opportunities to convert, retain and expand. - **More happy paying customers**. Upgrade these users onto a paying plan and get more happy paying users. ## Getting Started - -1. From the Segment web app, navigate to **Connections > Catalog**, and select the **Destinations** tab. +1. From the Segment web app, navigate to **Connections > Catalog**, and select the **Destinations** tab. 2. Select **Destinations Actions** under **Categories** in the left navigation. 3. Search for **Upollo (Actions)** and click **Configure Upollo**. 4. Select an existing Source to connect to Upollo (Actions). @@ -31,15 +31,15 @@ Upollo (Actions) provides the following benefits: ## Identify -Upollo uses the `identify` call to analyze users on your platform. If the same person is using multiple accounts or if different people are sharing an account, they are flagged and shown in the Upollo dashboard. - +Upollo uses the `identify` call to analyze users on your platform. Our unique insights shown in the Upollo dashboard and optionally enriched data is added to identify events. The `identify` call provides any available information about the user. + ```js -analytics.identify('userId123', { - email: 'john.doe@example.com', - name: 'John Doe', - phone: '+123456789' +analytics.identify("userId123", { + email: "john.doe@example.com", + name: "John Doe", + phone: "+123456789", }); ``` diff --git a/src/connections/destinations/catalog/actions-usermotion/index.md b/src/connections/destinations/catalog/actions-usermotion/index.md new file mode 100644 index 0000000000..53d884712a --- /dev/null +++ b/src/connections/destinations/catalog/actions-usermotion/index.md @@ -0,0 +1,22 @@ +--- +title: UserMotion (Actions) Destination +id: 6537b5da8f27fd20713a5ba8 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[UserMotion](https://usermotion.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="\_blank”} is AI-powered predictive lead scoring software that discovers intention signals and scores leads on potential to buy, expand, or churn. + +This destination is maintained by UserMotion. For any issues with the destination, [contact their Support team](mailto:support@usermotion.com). + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="\_blank”} search for "UserMotion (Actions)". +2. Select UserMotion (Actions) and click **Add Destination**. +3. Select an existing Source to connect to UserMotion (Actions). +4. Go to the [UserMotion dashboard](https://app.usermotion.com/?returnPath=/settings/integrations?provider=api){:target="\_blank"}, find and copy the **API key**. +5. Enter the **API Key** in the UserMotion destination settings in Segment. +6. Save your changes and enable the destination. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-vwo-cloud/index.md b/src/connections/destinations/catalog/actions-vwo-cloud/index.md index 0c5e1f06e4..837a8a3e26 100644 --- a/src/connections/destinations/catalog/actions-vwo-cloud/index.md +++ b/src/connections/destinations/catalog/actions-vwo-cloud/index.md @@ -10,10 +10,10 @@ versions: {% include content/plan-grid.md name="actions" %} -[VWO](https://vwo.com/) is an optimization platform that allows websites to run experiments on their platforms to derive insights from visitor behavior and harness the results to amp up the conversion rate. Apart from experimentation, it also provides for personalization of the platform for different cohorts, full stack implementation, and direct deployment of the changes determined through experimentation. +[VWO](https://vwo.com/){:target="_blank"} is an optimization platform that allows websites to run experiments on their platforms to derive insights from visitor behavior and harness the results to amp up the conversion rate. Apart from experimentation, it also provides for personalization of the platform for different cohorts, full stack implementation, and direct deployment of the changes determined through experimentation. > info "" -> The events and attributes that are transferred from Segment to your VWO account will appear under [Unregistered Events](https://help.vwo.com/hc/en-us/articles/8676443712537-Working-with-Events-in-VWO#:~:text=UNREGISTERED%20EVENTS%3A%20These%20are%20the,UNREGISTERED%20EVENTS.){:target="_blank"} and [Unregistered Attributes](https://help.vwo.com/hc/en-us/articles/8681465703705-Working-with-Attributes-in-VWO#:~:text=UNREGISTERED%20ATTRIBUTES%3A%20These%20are%20the,UNREGISTERED%20ATTRIBUTES.){:target="_blank"} sections, respectively. You need to save these events and attributes to VWO for further use. +> The events and attributes that are transferred from Segment to your VWO account will appear under [UNREGISTERED EVENTS](https://help.vwo.com/hc/en-us/articles/8676443712537-Working-with-Events-in-VWO#:~:text=UNREGISTERED%20EVENTS%3A%20These%20are%20the,UNREGISTERED%20EVENTS.){:target="_blank"} and [UNREGISTERED ATTRIBUTES](https://help.vwo.com/hc/en-us/articles/8681465703705-Working-with-Attributes-in-VWO#:~:text=UNREGISTERED%20ATTRIBUTES%3A%20These%20are%20the,UNREGISTERED%20ATTRIBUTES.){:target="_blank"} sections, respectively. You need to save these events and attributes to VWO for further use. ## Benefits of VWO Cloud Mode(Actions) vs VWO Classic @@ -32,6 +32,172 @@ VWO Cloud Mode (Actions) provides the following benefits over the classic VWO de 6. To customize the mapping of actions, follow the steps in the Destinations Actions documentation on [Customizing mappings](/docs/connections/destinations/actions/#customize-mappings). Mappings in Segment allow you to control the events and attributes that are sent to VWO. 7. Enable the destination using the toggle switch. +> info "" +> VWO requires you to include a `vwo_uuid` key for all calls made in cloud-mode. The value of this key must be the VWO UUID(in the case of a website) or the User ID (in the case of FullStack). Track and Page calls require the `vwo_uuid` in the *properties* object. For Identify calls, you can place `vwo_uuid` in the *traits* object. + +## Using VWO Cloud mode destination with Web + +> info "" +> VWO recommends using the [VWO Web Mode destination](/docs/connections/destinations/catalog/actions-vwo-web/) for web pages as it requires minimal to no additional setup. + +1. Install the VWO SmartCode on your website following VWO's guide [Configuring SmartCode for Your Website](https://help.vwo.com/hc/en-us/articles/360019422834-Configuring-SmartCode-for-Your-Website){:target="_blank"} +2. Create a VWO campaign on your website. +3. When a visitor lands on your website VWO generates a `_vwo_uuid` cookie that acts as a unique identifier for the visitor. To learn more about the VWO UUID, see VWO's article [How to locate your VWO UUID](https://help.vwo.com/hc/en-us/articles/360034891513-How-to-Locate-your-VWO-UUID-){:target="_blank"}. +4. Pass the value of the `_vwo_uuid` cookie with every call to Segment in the `vwo_uuid` key. Track and Page calls require the `vwo_uuid` in the *properties* object. For Identify calls, you can place `vwo_uuid` in the *traits* object.

    To automate this step, you can use [Segment Analytics.js middleware](/docs/connections/sources/catalog/libraries/website/javascript/middleware/) and use the following script on your website. This script fetches the VWO UUID from the cookie and adds it to the segment payload so that you don’t have to do the same manually. + +```html + +``` + +All the events triggered in Segment will be available under **UNREGISTERED EVENTS** in the **Data360 > Events** section in VWO. For more information about Events in VWO Data360, see VWO's article [Working with Events in VWO](https://help.vwo.com/hc/en-us/articles/8676443712537-Working-with-Events-in-VWO){:target="_blank"}. + +## Using VWO Cloud mode destination with VWO FullStack + +To use the VWO Cloud mode destination with the VWO FullStack suite, link your VWO FullStack environment with Segment using the environment’s SDK key. After that's done, integrate your VWO account with Segment. + +To link your VWO FullStack environment with Segment: + +1. From your VWO dashboard, navigate to the nav bar on the left > **FullStack > Projects** and select the appropriate project. +2. Under the **Environments** section, click the **Copy** button corresponding to the environment that you want to link to Segment. +3. In the **VWO SDK Key** field in the destination settings in Segment, paste the copied SDK key from the previous step. +4. Click **Save Changes**. + +To integrate Segment with VWO FullStack: + +1. Initialize VWO FullStack SDK. Follow the steps for your server in VWO's [Quick Start Guide](https://developers.vwo.com/docs/quick-start-guide){:target="_blank"}. +2. To track visitors in VWO, provide the user IDs of the visitors, which were used to track them in the VWO FullStack campaign. Pass that same User ID as `vwo_uuid` with all calls to Segment. Track and Page calls require the `vwo_uuid` in the *properties* object. For Identify calls, you can place `vwo_uuid` in the *traits* object.. +3. All the events triggered in Segment will be available under **UNREGISTERED EVENTS** section which can be accessed by navigating from the left navbar > **Data360 > Events**. + +## Using VWO Cloud mode destination with audiences in VWO + +By adding the VWO Cloud mode destination to your Segment audiences, you can export audiences to your VWO account to target your campaigns in VWO. To achieve this, perform the following steps: + +1. Navigate to **Engage > Engage Settings**, and click **Destinations**. +- Ensure that you're in the Engage space you plan to use for VWO. +2. Click **Add Destination**. +3. Search for “VWO Cloud Mode (Actions)” and select the destination. Click **Add Destination**. +4. On the **Select Source** screen, you'll see your Engage space selected as the source. Click **Confirm Source**. +5. Select the VWO Cloud mode destination that you’ve created and navigate to the **Settings** tab. Name your destination and enter your **VWO Account ID**. Toggle **Enable Destination** on and click **Save Changes**. +- You'll find your VWO account ID at the top of the VWO dashboard. +6. Navigate to the **Mappings** tab and click **New Mapping**. Under **PRE-BUILT MAPPINGS**, select **Sync Audience**, then click **Save**. +7. The **STATUS** of the mapping displays as disabled by default. Enable the mapping using the toggle. +8. Navigate to **Engage > Audiences**. Choose an existing Engage audience or create a new one to export to VWO. +9. Click **Add Destination** and select the VWO Cloud Mode destination you created. From the **Connection Settings** screen, toggle the Send Track option on. Be sure you don't change the **Audience Entered/Audience Exited** event names. Click **Save**. + +> success "" +> After you set up your destination, you can repeat steps eight and nine to sync any subsequent audiences. + +Visit [Using Data From Segment](https://help.vwo.com/hc/en-us/articles/16147461611161){:target="_blank"} for more on how to configure audiences in VWO. + +## Supported Segment Calls in VWO + +VWO Supports the following calls, as specified in the [Segment Spec](/docs/connections/spec/). + +### Track +The [Track](/docs/connections/spec/track/) call records any actions your visitors perform, along with any properties that describe the action. Each action is known as an event. + +The destination forwards these events to VWO Data360 where they can be seen under the **UNREGISTERED EVENTS** section in **Data360 > Events** in VWO. These events can be registered and used as [Metrics](https://help.vwo.com/hc/en-us/articles/8675547113625-Working-with-Metrics-in-VWO){:target="_blank"} in VWO. + +**Sample payload for Track Call to the destination** + +```js +analytics.track("Segment Test Event", { + "vwo_uuid": "", + "property1": "value1" +}); +``` + +**Corresponding JavaScript event that would generate the above payload** + +```js +{ + "type": "track", + "event": "", + "properties": { + "vwo_uuid": "", + "property1": "value1" + } +} +``` + +> info "" +> Event names are prepended with `segment.` before they're sent to VWO. If an event named "**ctaClick**" is triggered in Segment, it appears as `segment.ctaClick` under **UNREGISTERED EVENTS** in VWO. + +### Identify +The [Identify](/docs/connections/spec/identify/) call associates a visitor with their actions and captures their traits. + +The destination forwards these traits to VWO Data360 where they can be seen under the **UNREGISTERED ATTRIBUTES** section in the **Data360 > Attributes** in VWO. These attributes can be registered and used to create [segments in VWO](https://help.vwo.com/hc/en-us/articles/8976459309465-Working-with-Segments-in-VWO-Data360){:target="_blank"}. For more information about Attributes in VWO Data360, see [Working with Attributes in VWO](https://help.vwo.com/hc/en-us/articles/8681465703705-Working-with-Attributes-in-VWO){:target="_blank"}. + +**Sample payload for Identify call to the destination** + +```js +{ + "type": "identify", + "traits": { + "vwo_uuid": "", + "trait1": "value1" + } +} +``` + +**Corresponding JavaScript event that would generate the above payload** + +```js +analytics.identify({ + "vwo_uuid": "", + "trait1": "value1" +}); +``` + +> info "" +> Each trait key will be prepended with “**segment.**” before sending to VWO. So if a trait named "**trait1**" is sent in Segment, it’ll appear as "**segment.trait1**" under UNREGISTERED ATTRIBUTES in VWO. + + +### Page +The [Page](/docs/connections/spec/page/) call records when a visitor arrives at a page of your website, along with any optional properties about the page. When received, the destination triggers VWO’s Page Visit event. + +> info "" +> Use Page calls with web pages only. Server-side sources in VWO's FullStack Suite do not support the Page Visit event. + +**Sample payload for Page Call to the destination** + +```js +{ + "type": "page", + "properties": { + "vwo_uuid": "" + } +} + +``` + +**Corresponding JavaScript event that would generate the above payload** + +```js +analytics.page({ + "vwo_uuid": "", +}); +``` {% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/actions-vwo-web/index.md b/src/connections/destinations/catalog/actions-vwo-web/index.md index d28d1398b4..53a18e8276 100644 --- a/src/connections/destinations/catalog/actions-vwo-web/index.md +++ b/src/connections/destinations/catalog/actions-vwo-web/index.md @@ -19,7 +19,7 @@ versions: VWO Web Mode (Actions) provides the following benefits over the classic VWO destination: -- **Support for Customer Data Platform (Data360)**. With the Web mode destination enabled, you will be able to transfer all the events and attributes into your VWO account through the [Data360 module](https://help.vwo.com/hc/en-us/articles/8679651827737-About-VWO-Data360). You can use these events and attributes to [create segments](https://help.vwo.com/hc/en-us/articles/360020418454-Using-Segmentation-in-VWO) and [metrics](https://help.vwo.com/hc/en-us/articles/8675547113625) in your VWO campaigns. +- **Support for Customer Data Platform (Data360)**. With the Web mode destination enabled, you will be able to transfer all the events and attributes into your VWO account through the [Data360 module](https://help.vwo.com/hc/en-us/articles/8679651827737-About-VWO-Data360){:target="_blank”}. You can use these events and attributes to [create segments](https://help.vwo.com/hc/en-us/articles/360020418454-Using-Segmentation-in-VWO){:target="_blank”} and [metrics](https://help.vwo.com/hc/en-us/articles/8675547113625){:target="_blank”} in your VWO campaigns. ## Getting started diff --git a/src/connections/destinations/catalog/actions-webhook/index.md b/src/connections/destinations/catalog/actions-webhook/index.md index 270f71bd9a..c3fe75bf68 100644 --- a/src/connections/destinations/catalog/actions-webhook/index.md +++ b/src/connections/destinations/catalog/actions-webhook/index.md @@ -23,3 +23,23 @@ Segment's Webhooks (Actions) destination uses internet protocol and HTTP callbac 7. Enable the destination and configured mappings. {% include components/actions-fields.html settings="true"%} + +## Batch size limits + +In Webhook Actions mapping, the default value of batch size is `1000`. You can change this value, but there's a maximum batch size limit of `4000`. + +## FAQs + +### Why is a Webhooks (Actions) Destination helpful with end-to-end tests? +The easiest way to test whether a source's events are sending through the Segment pipeline is with an end-to-end test. Use the steps below to monitor the events arriving to your Segment source and whether they're successfully sending to your destinations. Connecting a Webhooks (Actions) Destination to your sources makes these requests easy to see. For example, if you connect a Webhooks Destination (Webhook Actions Destination) to your source, you'd be able to see the events received by that source and sent to that destination. + +#### Connect a Webhook Actions destination to your workspace +1. [Add a new Webhook (Actions) destination](https://app.segment.com/goto-my-workspace/destinations/catalog/actions-webhook) to your source. Make sure you select the intended source to connect this destination to. +2. Visit the webhook's site, and copy the endpoint to your clipboard. An example site you can use is [https://webhook.site/#!/]([url](https://webhook.site/#!/)), but use whichever webhooks site you prefer. +3. Add a mapping to the Webhook Actions destination, and configure Step 1's conditions to allow for all types of events that you're currently sending through that source. +4. Add the endpoint you copied from Step 2 to the Webhook Actions Mapping's URL in Step 3. +5. Enable the Mapping. +6. Enable the Webhook Actions destination. +7. Begin sending events to your source. +8. Verify those events throughout the Segment pipeline (source debugger/ event delivery). +9. Verify the webhook's website which shows the raw JSON for all of the events successfully received by your Segment source and its Webhooks Actions destination. diff --git a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-custom-event.png b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-custom-event.png index 713e26e763..a8cebdc675 100644 Binary files a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-custom-event.png and b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-custom-event.png differ diff --git a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-goal-id.png b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-goal-id.png new file mode 100644 index 0000000000..8215580af2 Binary files /dev/null and b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-goal-id.png differ diff --git a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-group-id.png b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-group-id.png deleted file mode 100644 index 25caaadda0..0000000000 Binary files a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-group-id.png and /dev/null differ diff --git a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-group-plan.png b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-group-plan.png index e31e0f4f3f..61743a972a 100644 Binary files a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-group-plan.png and b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-group-plan.png differ diff --git a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-setup-code.png b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-setup-code.png deleted file mode 100644 index d6b428ebbf..0000000000 Binary files a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-setup-code.png and /dev/null differ diff --git a/src/connections/destinations/catalog/actions-wisepops/images/wisepops-website-hash.png b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-website-hash.png new file mode 100644 index 0000000000..b8a58a3be9 Binary files /dev/null and b/src/connections/destinations/catalog/actions-wisepops/images/wisepops-website-hash.png differ diff --git a/src/connections/destinations/catalog/actions-wisepops/index.md b/src/connections/destinations/catalog/actions-wisepops/index.md index 2e25030c75..f177ee8a87 100644 --- a/src/connections/destinations/catalog/actions-wisepops/index.md +++ b/src/connections/destinations/catalog/actions-wisepops/index.md @@ -12,9 +12,6 @@ Wisepops powers 2,000 brands in 53 countries and delivers 2 billion personalized When you use the Wisepops destination, Segment loads Wisepops on your website for you. With no development, you can target your users based on their traits or events, display personalized messages, and track the revenue generated by your campaigns. -{% include content/ajs-upgrade.md %} - - ## Getting started 1. From the Segment web app, click **Catalog**, then click **Destinations**. @@ -22,8 +19,8 @@ When you use the Wisepops destination, Segment loads Wisepops on your website fo 3. Click **Configure Wisepops**. 4. Select an existing Source to connect to Wisepops. 5. Give the destination a name. -6. In the **Basic Settings** page, enter your **Website Identifier**. It can be found in your [Wisepops setup code](https://app.wisepops.com/f/settings/websites){:target='_blank'}. It's the bolded string in the setup code of the Popups service that's 10 characters long. - ![Wisepops setup code](images/wisepops-setup-code.png) +6. In the **Basic Settings** page, enter your **Website Identifier**. It can be found in your [Wisepops setup code](https://id.wisepops.com/r/id/workspaces/_workspaceId_/settings/setup-code){:target='_blank'}. It's the bolded string that's 10 characters long. + ![Wisepops setup code](images/wisepops-website-hash.png) 7. Toggle **Enable Destination** and click **Save Changes**. > info "Wisepops Destination is device mode only (web)" @@ -68,10 +65,17 @@ For example, you can display a popup when a product is added to the cart: ### Track Goal -By default, when you track the event **Order Completed**, Segment sends a [goal completion](https://support.wisepops.com/article/mx3z8na6yb-set-up-goal-tracking){:target='_blank'} to Wisepops. -The goal and its revenue are attached to one of your campaigns based on your Wisepops' goal attribution model. -You can easily track more goals by editing the mapping. -The goals are named after the Segment event name. +The Track Goal action is not mapped by default. You can enable it to track [goal completion and revenue](https://support.wisepops.com/article/mx3z8na6yb-set-up-goal-tracking){:target='_blank'} on Wisepops. + +To track a JavaScript goal using Segment: + +1. [Create your JavaScript goal in Wisepops](https://id.wisepops.com/r/id/workspaces/_workspaceId_/goals){:target='_blank'}. +2. Copy the goal identifier. It is a 32-character string visible after the goal is created: + ![Wisepops goal identifier](images/wisepops-goal-id.png) +3. In Segment, create a new mapping with the action **Track Goal**. +4. In the first section, configure when the goal should be tracked. +5. In the third section, paste the goal identifier, without quotes, into the **Goal Identifier** field. +6. Save the new mapping. ### Track Page diff --git a/src/connections/destinations/catalog/actions-xtremepush/index.md b/src/connections/destinations/catalog/actions-xtremepush/index.md new file mode 100644 index 0000000000..983c2e7d0d --- /dev/null +++ b/src/connections/destinations/catalog/actions-xtremepush/index.md @@ -0,0 +1,77 @@ +--- +title: Xtremepush (Actions) Destination +beta: true +id: 661e9787658d112ba31b59a7 +versions: + - name: Xtremepush Destination + link: /docs/connections/destinations/catalog/xtremepush/ +--- +{% include content/plan-grid.md name="actions" %} + +[Xtremepush](https://xtremepush.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a complete digital engagement platform that empowers global brands to create personalized, real-time experiences for their customers across mobile, web, email, SMS and social. Xtremepush's clients are increasing revenue through data-driven, contextually-relevant interactions. The software is flexible, reliable and quick to deploy, backed up by a team of expert strategists and technical support. + +This destination is maintained by Xtremepush. For any issues with the destination, [contact the Xtremepush Support team](mailto:support@xtremepush.com). + +## Benefits of Xtremepush (Actions) vs Xtremepush Classic + +Xtremepush (Actions) provides the following benefits over the classic Xtremepush destination: + +- **Easier setup**: Users see fewer initial settings which can decrease the time spent configuring the destination. +- **Increased transparency**: Users can see both the exact data that is sent to the destination and the time that Segment sent it. +- **Improved customization**: Users can determine how the events their sources trigger map to actions supported by the Xtremepush (Actions) destination. + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for "Xtremepush". +2. Select **Xtremepush (Actions)** and click **Add destination**. +3. Select an existing Source to connect to **Xtremepush (Actions)**, and click **Next**. +4. Enter a name for your Xtremepush (Actions) destination and click **Create destination**. +5. From the Segment destinations settings page, enter the "API Key" and "API Endpoint". You can find these values in your Xtremepush Project under *Settings > Integrations* as described in the [Xtremepush Segment integration user guide](https://docs.xtremepush.com/docs/segment){:target="_blank"}. + +{% include components/actions-fields.html %} + +## Identify + +If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: + +``` +analytics.identify('userId123', { + email: 'john.doe@example.com', + phone: '1234567890', + firstName: 'John' +}); +``` + +When you identify a user, Segment passes that user's information to Xtremepush and creates a new user, if no profile exists with that `user_id`, or updates an existing profile if the `user_id` already exists. + +Some user traits are also passed as additional user identifiers: + +| Segment Trait | Xtremepush User Identifier | +| ------------- | -------------------------- | +| email | email | +| phone | mobile_number | + +For any additional traits you want to save, create [User Profile Attributes](https://docs.xtremepush.com/docs/attributes-tags){:target="_blank"} in your Xtremepush Project. + +If a trait does not match a custom Xtremepush User Profile Attribute and is not recognized as a User Identifier, Xtremepush ignores the trait. + +## Track + +If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: + +``` +analytics.track('Product Purchased', { + productName: 'Some Product' +}) +``` + +Track calls are sent to Xtremepush as a `event hits` and you can use them to [trigger a campaign](https://docs.xtremepush.com/docs/campaign-events){:target="_blank"} for a user. + +Event properties can be used as merge tags in the message content. You can also define additional rules on where to trigger the campaign based on event properties value. + +## Enabling Push and In-App Notifications +To enable Xtremepush push and in-app notifications you must also install the relevant Xtremepush SDKs. + +[Xtremepush iOS SDK Docs](https://docs.xtremepush.com/docs/ios-integration){:target="_blank"} + +[Xtremepush Android SDK Docs](https://docs.xtremepush.com/docs/android-integration){:target="_blank"} diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-1.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-1.png new file mode 100644 index 0000000000..a9f77078c0 Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-1.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-2.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-2.png new file mode 100644 index 0000000000..bc5a96ac12 Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-2.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-3.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-3.png new file mode 100644 index 0000000000..7bad4b6e31 Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-3.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-4.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-4.png new file mode 100644 index 0000000000..a47150bf40 Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-4.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-5.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-5.png new file mode 100644 index 0000000000..a84425d074 Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-5.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-6.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-6.png new file mode 100644 index 0000000000..bc7ad77cbe Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-6.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-7.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-7.png new file mode 100644 index 0000000000..7f328557b0 Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-7.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-8.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-8.png new file mode 100644 index 0000000000..01f22d25b8 Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-8.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-9.png b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-9.png new file mode 100644 index 0000000000..53fae42296 Binary files /dev/null and b/src/connections/destinations/catalog/actions-yahoo-audiences/images/yahoo-9.png differ diff --git a/src/connections/destinations/catalog/actions-yahoo-audiences/index.md b/src/connections/destinations/catalog/actions-yahoo-audiences/index.md new file mode 100644 index 0000000000..6dadbf32fe --- /dev/null +++ b/src/connections/destinations/catalog/actions-yahoo-audiences/index.md @@ -0,0 +1,98 @@ +--- +title: Yahoo Audiences Destination +id: 6514281004d549fae3fd086a +beta: true +--- + +The Yahoo Audiences integration facilitates seamless connectivity between Engage Audiences and Yahoo DSP, offering users the flexibility to configure their data delivery preferences within the Segment platform. + +This integration is designed to accommodate various identifiers, including **email**, **phone**, and **MAIDs** (iOS IDFA, Android Advertising Id). To ensure data security, the integration hashes **email** and **phone** identifiers, while also formatting phone numbers to comply with E.164 requirements. + +Operating on the [Yahoo DataX platform](https://developer.yahooinc.com/datax/guide/){:target="_blank"}, the integration harnesses the power of the [Yahoo Realtime API](https://developer.yahooinc.com/datax/guide/datax-online-spec/user-data-audience-data/){:target="_blank"} for audience synchronization. Users can enjoy the convenience of syncing both realtime and batch audiences, with incremental batches supporting a maximum of 1000 user records. Notably, each synchronized user record can encompass the individual's membership in multiple audiences. + +In addition to these features, the integration provides support for [Trait Activation](/docs/engage/trait-activation/) functionalities, specifically [Trait Enrichment](/docs/engage/trait-activation/trait-enrichment/) and [ID Sync](/docs/engage/trait-activation/id-sync/), enhancing the overall user experience. + + +## Getting started + +To connect your Yahoo Audiences Destination: +1. Create your Engage Audience. +2. Navigate to **Engage** > **Engage Settings** > **Destinations** and click **Add Destination**. +3. Select **Yahoo Audiences**, select your Engage space as the source, and name your destination. +4. Configure global destination settings on the **Settings** tab: + + Settings | Details + -------- | ------- + Name | Specify the destination name, for example “Yahoo Audiences Production”. This value is only available in Segment. + MDM ID | Specify the MDM ID provided by your Yahoo DSP representative. + Engage Space ID | Specify the Engage Space ID. To locate Engage Space ID navigate to **Unify** > **Unify Settings** > **API Access**. This value identifies your customer node in Yahoo Data Taxonomy. Don't provide arbitrary values in this field, or any values other than your Engage Space ID.

    **Note:** The destination displays an error if the provided value includes any characters other than [a-zA-Z0-9] and “_” (underscore). This is to prevent passing values not supported by Yahoo. + Customer Description | Provide an optional description for the integration. +5. Turn on the **Enable Destination** toggle. +6. Click **Save Changes** to save the destination. +7. Configure destination Action Mappings. Action Mappings determine the information sent from Engage to the Yahoo Audiences destination. + 1. On the **Mapping** tab click **Add Mapping** and select **Sync to Yahoo Ads Segment**. + 2. Within the mapping’s **Select events to map and send** configure whether the mapping should be triggered for all audiences connected to the destination, or for specific audiences only. + - **Note:** Action mapping settings apply to all audiences that are processed by the mapping. The mapping can be configured to process all audiences connected to the destination, or only specific audiences. This can be helpful when enabling the GDPR flag only for specific audiences. + - To apply the mapping only to specific audiences, modify the trigger as follows: + ![A screenshot subscription settingsfor specific audience](images/yahoo-1.png) + - To apply the mapping to all audiences, modify the trigger as follows: + ![A screenshot subscription settings for all audiences](images/yahoo-2.png) + 3. Configure the mapping for **Email**, **Phone**, **Mobile Advertising Id** and **Device Type** fields. You can keep default mapping for these fields, if your data matches default mappings. + - **Note:** The destination expects the mobile advertising ID to be a combination of 2 fields: advertising ID and device type. If device type field is not available in your data, the destination deduces the platform (iOS /Android) based on advertising ID value formatting. If the value is capitalized - the destination assumes that this is iOS IDFA, otherwise the destination assumes that is Android DSP ID. + 4. Configure whether **GDPR Flag** should be sent. + - **Note:** **GDPR Flag** setting applies to the entire audience. Set this setting to TRUE if the audience is subject to GDPR regulations. If you set the **GDPR Flag** to YES, then populate **GDPR Consent Attributes** setting with the following IAB user consent attributes: “Access of Information” and “Personalization”. See more in [Yahoo DSP API documentation](https://developer.yahooinc.com/datax/guide/gdpr/faq/){:target="_blank"}. If the **GDPR Flag** setting is set to YES, and **GDPR Consent Attributes** is not populated, the audience sync fails. + 5. Provide **GDPR Consent Attributes** if you opted to send a **GDPR Flag**. + 6. Save the mapping. +8. Connect the Destination to the Audience and configure the Audience Sync settings. + 1. Navigate to **Engage** > **Audiences** > **(your audience)**. Click **Add Destination** and select the destination you just created. + 2. Configure how the audience should be synced. Enable **Send Track** and disable **Send Identify**. + 3. Select the identifiers to be synced to Yahoo: + - **Default Setup**: Sends all email IDs available on a user profile. + - **Customized Setup**: Configure the identifiers to be sent to Yahoo DSP. + 4. If you’d like to send iOS IDFA and Android Advertising ID - turn on **Send Mobile IDs** and map MAIDs using **Customized Setup**. + 5. Don't modify the **Placeholder** setting. + 6. Click **Save Settings**. + +> info "" +> Yahoo DSP supports the following identifiers: **email**, **phone**, **iOS IDFA**, **Android Advertising Id**. Segment hashes email and phone per Yahoo DSP requirements, so you don’t have to hash email and phone. Segment formats the phone to meet E.164 requirements: removes non-digit characters and adds “+” sign. Your phone trait/identifier must include country code, as Segment does not prepend phone with country code. + +Once the Audience is connected to the Destination, Segment makes a request to Yahoo DSP to create an ‘audience’ (‘segment’) node in Yahoo Data Taxonomy. The node is identified by Audience ID, and named with Audience Key. After Engage has computed the audience, the Destination syncs the audience to Yahoo DSP. + +{% include components/actions-fields.html %} + +## Destination configurations for various use cases + +### Use case 1 + +Email, phone, IOS IDFA and Android Advertising ID are available as Engage Identifiers. + +Setting | Details +------- | -------- +Action Mappings | Keep default field mappings. +Audience Sync settings | Select **Customized Setup**, and map available identifiers under the Identifiers section. You can select whether Engage should send First, Last, or All Available identifiers. + +### Use case 2 + +Email, phone, IOS IDFA and Android Advertising Id are available as Engage Identifiers and/or Traits. + +Settings | Details +-------- | -------- +Action Mappings | Modify the mapping to reflect your custom trait names. For example, if you’re planning to send `email_addr` trait as email to Yahoo Audiences, map `email_addr` trait in the **User Email** field. +Audience Sync settings | Click **Customized Setup** and select the **Identifiers** and **Traits** that you plan to send to Yahoo Audiences. For example, if you plan to send `phone` identifier and `email_addr` trait, map these fields as shown below: ![A screenshot customized setup configuration with traits](images/yahoo-5.png) + +### Use case 3 +Send mobile advertising ID custom traits to Yahoo Audiences. + +Settings | Details +-------- | -------- +Action Mappings | The destination expects 2 fields for mobile advertising ID: 1) advertising ID field (trait) storing the ID value iteself, and 2) device type field (trait) storing mobile platform name (`ios` or `android`).

    * If your Engage data includes these 2 fields, you can map them as: `traits.advertising_id_trait` → `User Mobile Advertising ID` and `traits.device_type_trait` → `User Mobile Device Type`.

    * If your data doesn't include a field with the device type, you can only map the advertising ID trait. The destination detects device type based on the ID value format. Apple IDFA is typically capitalized, and Android advertising ID is typically lowercase.

    * If you have separate traits for iOS IDFA and Android Advertising ID, you can map them using the coalesce() function: `coalesce( traits.ios_ad_id_trait`, `traits.android_ad_id_trait)` → `User Mobile Advertising ID` +Audience Sync settings | Use **Customized Setup** to map custom advertising ID and, if available, device type traits. ![A screenshot customized setup configuration for use-case 3](images/yahoo-9.png) + + +## FAQs + +### Why am I seeing the difference between audience size in Engage and in Yahoo DSP? +The difference between audience size in Segment and in Yahoo DSP is expected due to ID matching. Yahoo DSP will recognize only users it has matching ID (email / phone / MAID) for. + +### The audience has synced, but I’m seeing 0 population in Yahoo DSP UI. +As soon as user records land in Yahoo DSP, users become targetable in minutes. However, Yahoo DSP reporting is not realtime, and might take 24-48 hours to catch up. This delay does not affect targeting. Because of that you might see 0 users in the Yahoo DSP audience immediately after the sync. diff --git a/src/connections/destinations/catalog/activecampaign/index.md b/src/connections/destinations/catalog/activecampaign/index.md index 940e5ed0ca..06cfb1cced 100644 --- a/src/connections/destinations/catalog/activecampaign/index.md +++ b/src/connections/destinations/catalog/activecampaign/index.md @@ -3,13 +3,13 @@ rewrite: true title: ActiveCampaign Destination id: 55d66bb5ebe537b09c977fa3 --- -[ActiveCampaign](https://www.activecampaign.com) is an integrated email marketing, marketing automation, and small business CRM. It allows you to send beautiful newsletters, set up behavioral based automations, and benefit from sales automation. +[ActiveCampaign](https://www.activecampaign.com){:target="_blank”} is an integrated email marketing, marketing automation, and small business CRM. It allows you to send beautiful newsletters, set up behavioral based automations, and benefit from sales automation. -This destination is maintained by ActiveCampaign. For any issues with the destination, [contact the ActiveCampaign support team](https://www.activecampaign.com/contact/). +This destination is maintained by ActiveCampaign. For any issues with the destination, [contact the ActiveCampaign support team](https://www.activecampaign.com/contact/){:target="_blank”}. ## Getting Started -{% include content/connection-modes.md %} + 1. From your Segment UI's Destinations page click on "Add Destination". 2. Search for "Active Campaign" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/adikteev/index.md b/src/connections/destinations/catalog/adikteev/index.md index 048a67bcfb..065af29ecd 100644 --- a/src/connections/destinations/catalog/adikteev/index.md +++ b/src/connections/destinations/catalog/adikteev/index.md @@ -5,12 +5,10 @@ id: 5c75564f1d2f34000116ef78 --- This destination is maintained by Adikteev. For any issues with the destination, [contact the Adikteev support team](mailto:contact@adikteev.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + Currently, this destination supports events originating from Mobile sources alone. diff --git a/src/connections/destinations/catalog/adjust/index.md b/src/connections/destinations/catalog/adjust/index.md index 5825aebee8..f01340d82f 100644 --- a/src/connections/destinations/catalog/adjust/index.md +++ b/src/connections/destinations/catalog/adjust/index.md @@ -5,12 +5,12 @@ id: 56f6ce7280412f644ff12fb2 --- [Adjust](https://adjust.com){:target="_blank"} is the mobile attribution provider of choice for hundreds of organizations across the globe. They unify all your marketing activities into one powerful platform, giving you the insights you need to scale your business. The Adjust Destination is open-source. You can browse the code on GitHub for [iOS](https://github.com/segment-integrations/analytics-ios-integration-adjust){:target="_blank"} and [Android](https://github.com/segment-integrations/analytics-android-integration-adjust){:target="_blank"}. -If you notice any gaps, out-dated information, or want to leave feedback to help improve Segment's documentation, [let us know](https://segment.com/help/contact). +If you notice any gaps, out-dated information, or want to leave feedback to help improve Segment's documentation, [let us know](https://segment.com/help/contact){:target="_blank”}. ## Getting started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Adjust" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -109,10 +109,6 @@ analytics = new Analytics.Builder(this, "write_key") After you build and release to the App Store, Segment automatically starts translating and sending your data to Adjust. -### React Native - -{% include content/react-dest.md %} - ### Server The Cloud-mode integration allows you to send *supplemental* data to Adjust. This *does not* include attribution events. If you rely on the Adjust server-side component, and do not bundle the Segment-Adjust SDK, your installs will not be attributed. E-commerce events and other general `track` events are supported out of the box. You **must** map your `track` events to your custom Adjust Event Token in your [Adjust destination settings](#map-your-events-to-custom-adjust-event-tokens). @@ -237,7 +233,7 @@ If you're using Adjust's iOS SDK, it will automatically takes care of duplicate ### In-app purchase receipts -The destination does not currently support in-app purchase receipts. If this is important to you, [reach out to support](https://segment.com/help/contact/). +The destination does not currently support in-app purchase receipts. If this is important to you, [reach out to support](https://segment.com/help/contact/){:target="_blank”}. ### Push notifications diff --git a/src/connections/destinations/catalog/adobe-analytics/best-practices.md b/src/connections/destinations/catalog/adobe-analytics/best-practices.md index 7285a3df48..138082951b 100644 --- a/src/connections/destinations/catalog/adobe-analytics/best-practices.md +++ b/src/connections/destinations/catalog/adobe-analytics/best-practices.md @@ -9,7 +9,7 @@ This page contains best practices and tips for setting up and testing Adobe Anal The following list contains tools you can use to validate data coming from Segment and going to each different Adobe Analytics component -- **Analytics.js** - [Adobe Experience Cloud Debugger](https://chrome.google.com/webstore/detail/adobe-experience-cloud-de/ocdmogmohccmeicdhlhhgepeaijenapj) and Chrome Developer Tools +- **Analytics.js** - [Adobe Experience Cloud Debugger](https://chromewebstore.google.com/detail/adobe-experience-platform/bfnnokhpnncpkdmbokanobigaccjkpob){:target="_blank”} and Chrome Developer Tools - **Other Segment server libraries** - Segment's in-app [Event Tester Tool](/docs/connections/test-connections/) - **iOS Device mode** - Charles Proxy, DEBUG mode - **Android Device Mode** - Charles Proxy, VERBOSE logging @@ -48,7 +48,7 @@ If you are setting up the Adobe Analytics destination in cloud-mode, you can pas **Note**: If you pass in the `visitorId` in a destination-specific `integration` object in your Segment Page or Track events, the `visitorId` passed persists on Page or Track calls that occur after an Identify call. This effectively supersedes the `visitorId` variable Segment would set to your `userId` after an Identify call. -We know this is daunting territory, so don't hesitate to [contact us directly for guidance](https://segment.com/help/contact/)! +We know this is daunting territory, so don't hesitate to [contact us directly for guidance](https://segment.com/help/contact/){:target="_blank”}. ### Setting the event linkType diff --git a/src/connections/destinations/catalog/adobe-analytics/heartbeat.md b/src/connections/destinations/catalog/adobe-analytics/heartbeat.md index 107168e53e..601b49848a 100644 --- a/src/connections/destinations/catalog/adobe-analytics/heartbeat.md +++ b/src/connections/destinations/catalog/adobe-analytics/heartbeat.md @@ -3,7 +3,7 @@ title: Setting up Adobe Analytics Heartbeat strat: adobe --- -Adobe Heartbeat is an Adobe Analytics add-on that allows you to collect video analytics data from [mobile applications, and JavaScript or website sources](https://marketing.adobe.com/resources/help/en_US/sc/appmeasurement/hbvideo/). +Adobe Heartbeat is an Adobe Analytics add-on that allows you to collect video analytics data from [mobile applications, and JavaScript or website sources](https://marketing.adobe.com/resources/help/en_US/sc/appmeasurement/hbvideo/){:target="_blank”}. > info "" > At this time, Adobe Heartbeat is only available for events sent using [device mode](/docs/connections/destinations/#connection-modes). @@ -24,9 +24,9 @@ Next, enable Adobe's VisitorID service in your Adobe account. You must do this t For Android: -1. If you haven't done so already, go to the Adobe Mobile Services UI and follow [these steps](https://docs.adobe.com/content/help/en/mobile-services/android/getting-started-android/requirements.html#section_044C17DF82BC4FD8A3E409C456CE9A46) to download the core `adobeMobileLibrary` and configure in your Android project. Add the `ABDMobileConfig.json` to your project from the downloaded SDK. -2. Download the latest version of the `MediaSDK.jar` file and [include it in your Android project using Adobe's documentation steps](https://docs.adobe.com/content/help/en/media-analytics/using/sdk-implement/setup/set-up-android.html). -3. Follow the [remaining set up steps](https://docs.adobe.com/content/help/en/media-analytics/using/sdk-implement/setup/set-up-android.html) to complete the installation. +1. If you haven't done so already, go to the Adobe Mobile Services UI and follow [these steps](https://docs.adobe.com/content/help/en/mobile-services/android/getting-started-android/requirements.html#section_044C17DF82BC4FD8A3E409C456CE9A46){:target="_blank”} to download the core `adobeMobileLibrary` and configure in your Android project. Add the `ABDMobileConfig.json` to your project from the downloaded SDK. +2. Download the latest version of the `MediaSDK.jar` file and [include it in your Android project using Adobe's documentation steps](https://docs.adobe.com/content/help/en/media-analytics/using/sdk-implement/setup/set-up-android.html){:target="_blank”}. +3. Follow the [remaining set up steps](https://docs.adobe.com/content/help/en/media-analytics/using/sdk-implement/setup/set-up-android.html){:target="_blank”} to complete the installation. For iOS: The Adobe Heartbeat SDK is already included with the Segment-Adobe-Analytics SDK when you add a Heartbeat Tracking Server URL. Ensure you have added the `ABDMobileConfig.json` for your iOS project from the Adobe Mobile Services UI. @@ -174,7 +174,7 @@ Adobe Analytics supports many - but not all - of the [Segment Video Spec events] -On web, multiple video sessions can be open at once so video events must have a `session_id` property unique to the session the content belongs to. If a `session_id` is not included, Segment will send `default` as the [s:event:sid](https://experienceleague.adobe.com/docs/media-analytics/using/sdk-implement/validation/heartbeat-params.html?lang=en) and Adobe will create a new session. For more information on `session_id`, please visit [Segment's Video Spec](/docs/connections/spec/video/#playback). +On web, multiple video sessions can be open at once so video events must have a `session_id` property unique to the session the content belongs to. If a `session_id` is not included, Segment will send `default` as the [s:event:sid](https://experienceleague.adobe.com/docs/media-analytics/using/sdk-implement/validation/heartbeat-params.html?lang=en){:target="_blank”} and Adobe will create a new session. For more information on `session_id`, please visit [Segment's Video Spec](/docs/connections/spec/video/#playback). ### Video Playback Started @@ -445,7 +445,7 @@ You can send custom metadata with any video event that accepts metadata. To send ### Custom Video Metadata Formatting -For custom Context Data Variables, including custom video metadata, use the following notation when mapping your Segment payload properties. The formatting for these mapings is different for iOS and Android components, so read the documentation below carefully. +For custom Context Data Variables, including custom video metadata, use the following notation when mapping your Segment payload properties. The formatting for these mappings is different for iOS and Android components, so read the documentation below carefully. diff --git a/src/connections/destinations/catalog/adobe-analytics/identity.md b/src/connections/destinations/catalog/adobe-analytics/identity.md index a2df8aac5d..de50eb1142 100644 --- a/src/connections/destinations/catalog/adobe-analytics/identity.md +++ b/src/connections/destinations/catalog/adobe-analytics/identity.md @@ -20,15 +20,15 @@ The Timestamp destination settings are: ## Analytics.js - Device Mode -If you're using Analytics.js in device-mode, Segment "wraps" the Adobe libraries. In this configuration, Segment sends Events directly from the client using the Adobe Analytics [`Appmeasurement.js` library](https://docs.adobe.com/content/help/en/analytics/implementation/js/overview.html). For more information on choosing a connection mode see our section on [Choosing between Device-mode and Cloud-mode](/docs/connections/destinations/catalog/adobe-analytics/#choosing-between-device-mode-and-cloud-mode). In this section we will discuss how identity resolution is handled if you are using Analytics.js in device-mode. +If you're using Analytics.js in device-mode, Segment "wraps" the Adobe libraries. In this configuration, Segment sends Events directly from the client using the Adobe Analytics [`Appmeasurement.js` library](https://docs.adobe.com/content/help/en/analytics/implementation/js/overview.html){:target="_blank”}. For more information on choosing a connection mode see our section on [Choosing between Device-mode and Cloud-mode](/docs/connections/destinations/catalog/adobe-analytics/#choosing-between-device-mode-and-cloud-mode). In this section we will discuss how identity resolution is handled if you are using Analytics.js in device-mode. You can enable **Drop Visitor ID** from the Segment app to prevent Adobe from creating a new user profile when you set `window.s.visitorID` with a custom value. However if you're only using Analytics.js to send data to Adobe, this can make it difficult to combine anonymous and identified users inside your reports. Adobe Analytics counts every "effective" visitor ID as a *unique* visitor. Unfortunately, Segment cannot to alias two effective IDs on your behalf, either implicitly or explicitly. -To understand this, it's important to first understand what Adobe Analytics means by **"effective" visitor ID identifiers**. We recommend reading [the Adobe documentation on connecting users across devices](https://docs.adobe.com/content/help/en/analytics/implementation/js/xdevice-visid/xdevice-connecting.html). +To understand this, it's important to first understand what Adobe Analytics means by **"effective" visitor ID identifiers**. We recommend reading [the Adobe documentation on connecting users across devices](https://docs.adobe.com/content/help/en/analytics/implementation/js/xdevice-visid/xdevice-connecting.html){:target="_blank”}. -Analytics.js automatically generates an Adobe Analytics [`s_vi` cookie value](https://docs.adobe.com/content/help/en/core-services/interface/ec-cookies/cookies-analytics.html) which it uses as a visitor ID until you `identify` your users. If you provide your Marketing Cloud ID Service Organization ID, then Segment sets the Experience Cloud ID and uses that instead. +Analytics.js automatically generates an Adobe Analytics [`s_vi` cookie value](https://docs.adobe.com/content/help/en/core-services/interface/ec-cookies/cookies-analytics.html){:target="_blank”} which it uses as a visitor ID until you `identify` your users. If you provide your Marketing Cloud ID Service Organization ID, then Segment sets the Experience Cloud ID and uses that instead. Once you `identify` your user, Segment sets the `visitorId` variable to your `userId`. This effectively creates a new user, which *does* have unique user implications. However, based on a thorough reading of the Adobe documentation and discussion with many customers, we believe this is the best practice because it allows you to seamlessly track logged-in users across devices. @@ -47,7 +47,7 @@ If you're using the Experience Cloud ID, you should accept this and use the Segm > note "" > **Note**: If you use the destination-specific `integration` object to pass the `visitorId` in your Segment `page` or `track` events, then the `visitorId` persists on Page or Track calls that occur after an Identify call. You can use this to override the Segment setting the `visitorId` variable to your `userId` after an `identify` call. -We know this is daunting territory, so don't hesitate to [contact us directly for guidance](https://segment.com/help/contact/). +We know this is daunting territory, so don't hesitate to [contact us directly for guidance](https://segment.com/help/contact/){:target="_blank”}. ## No Fallbacks for VisitorId Setting - Cloud Mode Only diff --git a/src/connections/destinations/catalog/adobe-analytics/index.md b/src/connections/destinations/catalog/adobe-analytics/index.md index 79a4d90875..68781752ab 100644 --- a/src/connections/destinations/catalog/adobe-analytics/index.md +++ b/src/connections/destinations/catalog/adobe-analytics/index.md @@ -4,7 +4,7 @@ strat: adobe redirect_from: '/connections/destinations/catalog/omniture/' id: 5783cec280412f644ff14226 --- -Once you enable Adobe Analytics (formerly known as Omniture or Sitecatalyst) in Segment, you can start sending data from any of the Segment [libraries](/docs/connections/sources/catalog/) to an Adobe report suite. When you send events from Segment's mobile SDKs or Cloud-mode libraries, Segment translates that data using a mapping that you configure, and then passes it to the Adobe Analytics [Data Insertion API](https://docs.adobe.com/content/help/en/analytics/import/c-data-insertion-api.html). +Once you enable Adobe Analytics (formerly known as Omniture or Sitecatalyst) in Segment, you can start sending data from any of the Segment [libraries](/docs/connections/sources/catalog/) to an Adobe report suite. When you send events from Segment's mobile SDKs or Cloud-mode libraries, Segment translates that data using a mapping that you configure, and then passes it to the Adobe Analytics [Data Insertion API](https://docs.adobe.com/content/help/en/analytics/import/c-data-insertion-api.html){:target="_blank”}. The following documentation provides detailed explanation of how both destination the Device-mode and Cloud-mode components work. For FAQs about Device- vs Cloud-mode tracking, unique users, identifiers, and more, see the Best Practices page! @@ -31,7 +31,7 @@ We strongly recommend that you create a tracking plan for both your Segment and ### Choosing between Device-mode and Cloud-mode -If you're using device-mode JavaScript, by default Segment "bundles" (mobile) or "wraps" (when using Analytics.js) the Adobe libraries. In this configuration, Segment sends Events directly from the client using the Adobe Analytics [`Appmeasurement.js` library](https://docs.adobe.com/content/help/en/analytics/implementation/js/overview.html). Adobe's client-side libraries can provide services to other Adobe suites and products, however they can also increase the size of your page. +If you're using device-mode JavaScript, by default Segment "bundles" (mobile) or "wraps" (when using Analytics.js) the Adobe libraries. In this configuration, Segment sends Events directly from the client using the Adobe Analytics [`Appmeasurement.js` library](https://docs.adobe.com/content/help/en/analytics/implementation/js/overview.html){:target="_blank”}. Adobe's client-side libraries can provide services to other Adobe suites and products, however they can also increase the size of your page. If you prefer, you can enable [Cloud-mode](/docs/connections/destinations/#connection-modes), and send data through the Segment servers where it is then mapped and sent on to Adobe Analytics. By default, mobile and server sources will use Adobe Analytics in Cloud-mode. You can enable Cloud-mode for Javascript sources from the Adobe Analytics source settings in the Segment app. @@ -43,21 +43,21 @@ Our Cloud-mode Adobe Analytics destination also provides support for **Adobe Mob To set up Adobe Analytics as a destination for your Segment data, Segment needs some information on how to connect to Adobe. -- If you're using Device-mode data collection with Analytics.js, or using a server-side library, you need your Adobe Report Suite ID, and your Tracking Server URL. You'll add this information in the Destination settings in the Segment app UI so that Segment can send information to Adobe. An example tracking server is `jimsbrims.sc.omtrdc.net`. You do not need to include the hypertext transfer protocol (ie. `http://`). For more information on how to identify your analytics tracking server and report suites see Adobe's [documentation here](https://docs.adobe.com/content/help/en/analytics-learn/tutorials/implementation/implementation-basics/how-to-identify-your-analytics-tracking-server-and-report-suites.html). +- If you're using Device-mode data collection with Analytics.js, or using a server-side library, you need your Adobe Report Suite ID, and your Tracking Server URL. You'll add this information in the Destination settings in the Segment app UI so that Segment can send information to Adobe. An example tracking server is `jimsbrims.sc.omtrdc.net`. You do not need to include the hypertext transfer protocol (ie. `http://`). For more information on how to identify your analytics tracking server and report suites see Adobe's [documentation here](https://docs.adobe.com/content/help/en/analytics-learn/tutorials/implementation/implementation-basics/how-to-identify-your-analytics-tracking-server-and-report-suites.html){:target="_blank”}. ![The Adobe Analytics settings page in Segment, with the General section selected.](images/trackingurl-setup.png) -- If you're collecting data from mobile devices, you can download the `ADBMobileConfig.json` file instead of specifying these settings in the UI which contains that information. Follow the instructions in Adobe's documentation, [here for iOS](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html), and [here for Android](https://marketing.adobe.com/resources/help/en_US/mobile/android/dev_qs.html). +- If you're collecting data from mobile devices, you can download the `ADBMobileConfig.json` file instead of specifying these settings in the UI which contains that information. Follow the instructions in Adobe's documentation, [here for iOS](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html){:target="_blank”}, and [here for Android](https://marketing.adobe.com/resources/help/en_US/mobile/android/dev_qs.html){:target="_blank”}. Once you've done that, you can either use the default Ecommerce Spec and the mappings Segment provides, or write custom Page and Track events, and then configure how they map to your Adobe Analytics fields and settings. For more information on how to get started with implementation see the [Mapping Segment to Adobe Analytics](settings/) guide. ### When Will I See Data? -If you just enabled Adobe Analytics for an app already deployed with the Segment library, Adobe can require up to 24 hours to process and display new data. There is also a known [reporting delay](https://helpx.adobe.com/forums/update-forumname/page/en/index.html) on the Adobe side due to [processing times](https://forums.adobe.com/thread/2326058). +If you just enabled Adobe Analytics for an app already deployed with the Segment library, Adobe can require up to 24 hours to process and display new data. There is also a known [reporting delay](https://helpx.adobe.com/forums/update-forumname/page/en/index.html){:target="_blank”} on the Adobe side due to [processing times](https://forums.adobe.com/thread/2326058){:target="_blank”}. It can also take up to an hour for all of the mobile users' Segment settings caches to refresh. Once they refresh, the mobile devices learn about the new service and begin sending data to Adobe Analytics. -Adobe Analytics has a real-time reporting feature which displays web page traffic and ranks page views in real time. Configuring and enabling these reports are restricted to Adobe Admin users. To learn more see Adobe's [overview on Real-time reporting](https://docs.adobe.com/content/help/en/analytics/components/real-time-reporting/realtime.html) +Adobe Analytics has a real-time reporting feature which displays web page traffic and ranks page views in real time. Configuring and enabling these reports are restricted to Adobe Admin users. To learn more see Adobe's [overview on Real-time reporting](https://docs.adobe.com/content/help/en/analytics/components/real-time-reporting/realtime.html){:target="_blank”} --- @@ -66,9 +66,9 @@ Adobe Analytics has a real-time reporting feature which displays web page traffi Device-mode web data is sent using Analytics.js, with Analytics.js either serving as a wrapper/bundle around the Adobe Analytics code, or sending directly to Segment servers where the data is then sent on to the Adobe destination. Our Adobe Analytics device-mode destination code is open sourced on GitHub. Feel free to check it out: -[iOS](https://github.com/segment-integrations/analytics-ios-integration-adobe-analytics), -[Android](https://github.com/segment-integrations/analytics-android-integration-adobe-analytics) and -[JS](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/adobe-analytics). +[iOS](https://github.com/segment-integrations/analytics-ios-integration-adobe-analytics){:target="_blank”}, +[Android](https://github.com/segment-integrations/analytics-android-integration-adobe-analytics){:target="_blank”} and +[JS](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/adobe-analytics){:target="_blank”}. ### Initialization @@ -78,7 +78,7 @@ Once these required properties are set, Segment loads `appmeasurement.js` versio ### Marketing Cloud Visitor ID Service -Segment's Analytics.js destination loads the Adobe `visitorAPI.js` library, but does not initialize it unless you provide your Marketing Cloud Organization ID. When you do, Segment sets `window.s.visitor` with the return value from `window.Visitor.getInstance()`. See [the Adobe Marketing Cloud documentation](https://marketing.adobe.com/resources/help/en_US/mcvid/mcvid-setup-analytics.html) for more information. +Segment's Analytics.js destination loads the Adobe `visitorAPI.js` library, but does not initialize it unless you provide your Marketing Cloud Organization ID. When you do, Segment sets `window.s.visitor` with the return value from `window.Visitor.getInstance()`. See [the Adobe Marketing Cloud documentation](https://marketing.adobe.com/resources/help/en_US/mcvid/mcvid-setup-analytics.html){:target="_blank”} for more information. **Note:** Segment loads `visitorAPI.js` in the same script as `appmeasurement.js` because Adobe Analytics requires synchronous execution of the two scripts. Using the visitor API is **optional** but if you do, Segment makes it available on the page. @@ -90,11 +90,11 @@ To use Adobe's Marketing Cloud Visitor ID Service, enter your **Marketing Cloud ## Cloud-mode - Server-side -"Cloud-mode" data is data sent _without_ bundling the Segment-Adobe-Analytics SDK. It can be sent using mobile libraries, Analytics.js, and other server-based sources. Cloud mode data is sent to Adobe using Adobe's data insertion API in XML format. To learn more about Adobe's data insertion API see the [documentation here](https://docs.adobe.com/content/help/en/analytics/import/c-data-insertion-api.html). +"Cloud-mode" data is data sent _without_ bundling the Segment-Adobe-Analytics SDK. It can be sent using mobile libraries, Analytics.js, and other server-based sources. Cloud mode data is sent to Adobe using Adobe's data insertion API in XML format. To learn more about Adobe's data insertion API see the [documentation here](https://docs.adobe.com/content/help/en/analytics/import/c-data-insertion-api.html){:target="_blank”}. *For more information on mobile native integrations using Segment's iOS and Android Adobe Analytics SDKs, see the [section "Setting up Adobe Analytics for Mobile"](mobile/).* -**Important**: For data sent from server-side libraries, you must define your events and custom properties BEFORE you send events to Adobe Analytics server-side destination. However, *for data sent from mobile devices*, Segment sends *every* event along automatically, and you can use the Adobe Analytics [processing rules](https://marketing.adobe.com/resources/help/en_US/reference/processing_rules.html) UI to map actions, lifecycle dimensions, and custom properties from `contextData` to events, props and eVars. +**Important**: For data sent from server-side libraries, you must define your events and custom properties BEFORE you send events to Adobe Analytics server-side destination. However, *for data sent from mobile devices*, Segment sends *every* event along automatically, and you can use the Adobe Analytics [processing rules](https://marketing.adobe.com/resources/help/en_US/reference/processing_rules.html){:target="_blank”} UI to map actions, lifecycle dimensions, and custom properties from `contextData` to events, props and eVars. Segment's server-side integration is not open-source. Let's explore what happens when Segment generates the XML to send to Adobe: @@ -131,6 +131,9 @@ Segment's server-side integration is not open-source. Let's explore what happens - `userId` - `anonymousId` +> info "" +> Adobe Analytics timestamp options need to match in the Segment destination settings and Adobe setting. Otherwise, events might be silently dropped by Adobe despite sending a 200 success response to Segment + 5. Segment maps a number of other supported XML tags. For example, it sets `` with the `ip` of the call. **Note**: For server side libraries, the `ip` is by default be the `ip` address of your company servers, NOT the customers' own. This means that for server side events, it is best practice to record the customer's `ip` from their requests, and manually send that to Segment as `context.ip`. @@ -171,7 +174,7 @@ Segment's server-side integration is not open-source. Let's explore what happens 8. On the server, Segment sends *all* property values as `contextData.$propertyKey` by default, so you can further map them with Adobe Processing Rules. You can also choose to add a prefix for properties in the destination's advanced settings page. Properties with a prefix are sent as `contextData..$propertyKey`. -9. Segment automatically translates [native mobile spec](/docs/connections/spec/native-mobile-spec/) events and forwards them to Adobe Analytics as [Mobile Services Lifecycle Metrics](https://marketing.adobe.com/resources/help/en_US/mobile/ios/metrics.html). +9. Segment automatically translates [native mobile spec](/docs/connections/spec/native-mobile-spec/) events and forwards them to Adobe Analytics as [Mobile Services Lifecycle Metrics](https://marketing.adobe.com/resources/help/en_US/mobile/ios/metrics.html){:target="_blank”}. Specifically, Segment maps the following events: diff --git a/src/connections/destinations/catalog/adobe-analytics/mobile.md b/src/connections/destinations/catalog/adobe-analytics/mobile.md index 6c30c3141f..911d9e5e52 100644 --- a/src/connections/destinations/catalog/adobe-analytics/mobile.md +++ b/src/connections/destinations/catalog/adobe-analytics/mobile.md @@ -14,7 +14,7 @@ Before you start sending data from your mobile application to Adobe Analytics, y - First, enable the Segment-Adobe Analytics destination from in your Segment workspace. - From your Adobe Mobile Services dashboard, check and customize the settings on the "Manage App Settings" tab. -- Download these settings as the `ADBMobileConfig.json` file by clicking the **Config JSON** link at the bottom of the same tab. Follow the instructions in Adobe's documentation [here for iOS](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html) and [here for Android](https://marketing.adobe.com/resources/help/en_US/mobile/android/dev_qs.html). +- Download these settings as the `ADBMobileConfig.json` file by clicking the **Config JSON** link at the bottom of the same tab. Follow the instructions in Adobe's documentation [here for iOS](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html){:target="_blank”} and [here for Android](https://marketing.adobe.com/resources/help/en_US/mobile/android/dev_qs.html){:target="_blank”}. - Finally, follow the instructions below for each mobile environment to bundle Segment's Adobe Analytics SDK in your project. > success "" @@ -48,7 +48,7 @@ analytics = new Analytics.Builder(this, "write_key") ``` -You can see the [Android SDK changelog](https://github.com/segment-integrations/analytics-android-integration-adobe-analytics/blob/master/CHANGELOG.md) in the open-source repository for information about specific versions of the Android Adobe Analytics SDK. +You can see the [Android SDK changelog](https://github.com/segment-integrations/analytics-android-integration-adobe-analytics/blob/master/CHANGELOG.md){:target="_blank”} in the open-source repository for information about specific versions of the Android Adobe Analytics SDK. #### For iOS @@ -56,7 +56,7 @@ You can see the [Android SDK changelog](https://github.com/segment-integrations/ pod 'Segment-Adobe-Analytics' ``` -You can see the [iOS SDK changelog](https://github.com/segment-integrations/analytics-ios-integration-adobe-analytics/blob/master/Changelog.md) in the open-source repository for information about specific versions of the iOS Adobe Analytics SDK. +You can see the [iOS SDK changelog](https://github.com/segment-integrations/analytics-ios-integration-adobe-analytics/blob/master/Changelog.md){:target="_blank”} in the open-source repository for information about specific versions of the iOS Adobe Analytics SDK. ## Sending Data to Adobe analytics @@ -140,7 +140,7 @@ Here's an example of how you would implement the same mapping in Adobe's Mobile ## Adobe Lifecycle events -Segment implements Adobe Lifecycle Events automatically - you don't have to enable any additional settings! Lifecycle events gather important information such as app launches, crashes, session length, and more. See the [list of all Adobe lifecycle metrics and dimensions](https://marketing.adobe.com/resources/help/en_US/mobile/android/metrics.html) to learn more. +Segment implements Adobe Lifecycle Events automatically - you don't have to enable any additional settings! Lifecycle events gather important information such as app launches, crashes, session length, and more. See the [list of all Adobe lifecycle metrics and dimensions](https://marketing.adobe.com/resources/help/en_US/mobile/android/metrics.html){:target="_blank”} to learn more. ## Identify on Mobile diff --git a/src/connections/destinations/catalog/adobe-analytics/settings.md b/src/connections/destinations/catalog/adobe-analytics/settings.md index 7f685174fa..54339a9d27 100644 --- a/src/connections/destinations/catalog/adobe-analytics/settings.md +++ b/src/connections/destinations/catalog/adobe-analytics/settings.md @@ -189,7 +189,7 @@ When you use Segment's Analytics.js Device Mode integration, Segment does the fo However, Segment checks the `properties.currency` property to see if you passed a currency in your event. If you did not, the default `currencyCode` set on page load is `USD`. - **Important**: To collect `transactionID`, make sure you enable the transactionID storage setting inside your [Adobe Reporting Suite](https://marketing.adobe.com/resources/help/en_US/sc/implement/transactionID.html)! + **Important**: To collect `transactionID`, make sure you enable the transactionID storage setting inside your [Adobe Reporting Suite](https://marketing.adobe.com/resources/help/en_US/sc/implement/transactionID.html){:target="_blank”}. 7. Attaches the `timestamp` as `window.s.timestamp` if your **Timestamp Option** (in the Adobe settings in Segment) is set to **Timestamp Enabled** or **Timestamp Optional**. @@ -326,16 +326,24 @@ When you make a `page` call, here's what Segment does from the browser when you ## Conversion Variables - eVars -Custom Conversion variables, also known as eVars, are how Adobe segments conversion success metrics in custom marketing reports. To learn more, see the [Adobe documentation about eVars and how to configure them](https://docs.adobe.com/content/help/en/analytics/admin/admin-tools/conversion-variables/conversion-var-admin.html). +Custom Conversion variables, also known as eVars, are how Adobe segments conversion success metrics in custom marketing reports. To learn more, see the [Adobe documentation about eVars and how to configure them](https://docs.adobe.com/content/help/en/analytics/admin/admin-tools/conversion-variables/conversion-var-admin.html){:target="_blank”}. You must configure an eVar mapping in your Segment destination settings to send eVars to Adobe on Track and Page calls. When configuring the mapping, the list of eVars must be defined in the Adobe Analytics UI. Map your Adobe Analytics eVar names to the Segment property names you're using in your Segment events. Enter a Segment property name on the left and an Adobe Analytics eVar number on the right. You can view your Segment events and properties in your Schema. An example eVar mapping in the Segment Destination settings UI should look like this: ![A screenshot of the Adobe Analytics settings page in Segment, with the Mappings section selected and two sample mappings under the eVars tab.](/docs/connections/destinations/catalog/adobe-analytics/images/eVar-mapping.png) +You can only map properties to Adobe eVar properties. For example, you could map the following properties to Adobe: `path`, `referrer`, `search`, `signup_mode`, `title` and `url`. + +>![Adobe evar](https://github.com/segmentio/segment-docs/assets/82051355/999b398a-f752-47f6-8511-9b2ec866cbae) +>![adobe mapping](https://github.com/segmentio/segment-docs/assets/82051355/c22eb82d-c9cd-4a2a-b216-b9b36569a606) + + + + ## Merchandising events -The Merchandising Events setting allows you to set eVars and events on a per-product basis within the "products" string, and supports increment and currency events. This provides robust product string support, which you can read more about [in the Adobe Analytics Compontents guide](https://marketing.adobe.com/resources/help/en_US/sc/implement/products.html). +The Merchandising Events setting allows you to set eVars and events on a per-product basis within the "products" string, and supports increment and currency events. This provides robust product string support, which you can read more about [in the Adobe Analytics Compontents guide](https://marketing.adobe.com/resources/help/en_US/sc/implement/products.html){:target="_blank”}. Per the Adobe documentation, Segment formats the `s.products` as `[category][item][quantity][total][incrementor][merchString]`. Segment automatically assigns the product category, quantity, and total. The `[item]` defaults to the Product Name. If you want to use the SKU or ID instead, you can change this by using the [Product Identifier setting](#product-identifier-setting). @@ -446,7 +454,7 @@ analytics.page({ ## Custom Traffic Variables - props -Custom Traffic Variables, also known as props, allow you to correlate custom data with specific traffic-related events in Adobe. To learn more about props and how to configure them in the Adobe UI, see the documentation [here](https://docs.adobe.com/content/help/en/analytics/admin/admin-tools/traffic-variables/traffic-var.html). You can map your Segment properties in your destination settings to any of your Adobe props. +Custom Traffic Variables, also known as props, allow you to correlate custom data with specific traffic-related events in Adobe. To learn more about props and how to configure them in the Adobe UI, see the documentation [here](https://docs.adobe.com/content/help/en/analytics/admin/admin-tools/traffic-variables/traffic-var.html){:target="_blank”}. You can map your Segment properties in your destination settings to any of your Adobe props. ![A screenshot of the Adobe Analytics settings page in Segment, with the Mappings section selected and a sample property mapping under the Props tab.](images/prop-mapping.png) @@ -456,7 +464,7 @@ You can either send the property value as a string (ie. `'brady'`) or as an arra ## List Variables - lVars -List variables are similar to eVars except you can send multiple values for the same event. You can map your Segment properties in your settings to any of your list variables. To learn more about list variables and how to configure them in the Adobe UI, see [the list vars documentation](https://docs.adobe.com/content/help/en/analytics/implementation/vars/page-vars/list.html). +List variables are similar to eVars except you can send multiple values for the same event. You can map your Segment properties in your settings to any of your list variables. To learn more about list variables and how to configure them in the Adobe UI, see [the list vars documentation](https://docs.adobe.com/content/help/en/analytics/implementation/vars/page-vars/list.html){:target="_blank”}. To represent the multiple values in a list, you can either send the property value as a comma delimited string (ie. `'brady,edelman,blount'`) or as an array (`['brady', 'edelman', 'blount']`). If you choose to send them as an array, Segment joins it as a comma delimited string by default before sending it to Adobe. To set up a custom delimiter, see the [documentation section below on custom delimiters](#custom-delimiter). @@ -484,19 +492,25 @@ Segment concatenates `list_var1` into `hello|world` before sending it to Adobe. ## Hierarchy Variables - hVars -Hierarchy variables mirror how customers can track “breadcrumbs” or “breadcrumb trails” which are a type of secondary navigation scheme that reveals the user's location in a website or Web application. See the Adobe documentation to learn more about [`hier` variables and how to configure them](https://docs.adobe.com/content/help/en/analytics/implementation/vars/page-vars/hier.html). +Hierarchy variables mirror how customers can track “breadcrumbs” or “breadcrumb trails” which are a type of secondary navigation scheme that reveals the user's location in a website or Web application. See the Adobe documentation to learn more about [`hier` variables and how to configure them](https://docs.adobe.com/content/help/en/analytics/implementation/vars/page-vars/hier.html){:target="_blank”}. Map your Adobe Analytics hVars to the property names you use in your Segment Page calls. Enter a Segment property name on the left, and an Adobe Analytics hVar number on the right. You can view your Segment page calls and properties in your Schema. ![A screenshot of the Adobe Analytics settings page in Segment, with the Mappings section selected and a sample hierarchy variable mapping under the Hierarchy Variables tab.](images/hier-mapping.png) ## Context Data Variables -Context data variables let you define custom variables on each page that processing rules can read. See the Adobe documentation to learn more about [how to use Adobe Analytics `contextData` and use processing rules](https://docs.adobe.com/content/help/en/analytics/implementation/vars/page-vars/contextdata.html) to populate analytics variables from that data. +Context data variables let you define custom variables on each page that processing rules can read. See the Adobe documentation to learn more about [how to use Adobe Analytics `contextData` and use processing rules](https://docs.adobe.com/content/help/en/analytics/implementation/vars/page-vars/contextdata.html){:target="_blank”} to populate analytics variables from that data. -Segment will automatically sends all event properties as context data on specced eccommerce events, `page()`, `track()`, and `screen()` calls if you are using a device-mode ("bundled") destination for Analytics.js, or if you are sending unbundled events from a [Server library](/docs/connections/sources/catalog/). If you want to send additional context data from within your context data object ini your Segment payload, you can configure the Context Data Variables mapping in your destination settings to tell Segment which context variables to send to Adobe as context data. +Segment automatically sends event properties as context data on the following: +- ecommerce events that adhere to the [Ecommerce Spec](/docs/connections/spec/ecommerce/v2/) +- Page calls +- Track calls +- Screen calls if you are using a device-mode ("bundled") destination for Analytics.js, or if you are sending unbundled events from a [Server library](/docs/connections/sources/catalog/). -> note "" -> **Note**: The context data value cannot be an object or an array as this not an Adobe accepted data type by Adobe Analytics. +If you want to send additional context data from the context data object in the Segment payload, configure the Context Data Variables mapping in the destination's settings to tell Segment which context variables to send to Adobe as context data. + +> info "" +> The context data value cannot be an object or an array as this is not an Adobe accepted data type by Adobe Analytics. For more information on how to set up Context Data for iOS and Android see the [Sending Custom Properties section](/docs/connections/destinations/catalog/adobe-analytics/mobile/#sending-custom-properties) in [Setting up Adobe Analytics for Mobile](/docs/connections/destinations/catalog/adobe-analytics/mobile). For more information on how to set up Context Data for Heartbeat Events see the [Custom Video Metadata section](/docs/connections/destinations/catalog/adobe-analytics/heartbeat/#custom-video-metadata) in [Setting up Adobe Analytics Heartbeat guide](/docs/connections/destinations/catalog/adobe-analytics/heartbeat). @@ -629,3 +643,7 @@ This option is only available when you use a cloud mode (also called server-side } }); ``` +### Download mappings with the Segment Public API + +Download your Adobe Destination mappings by sending a GET request to Segment’s [Public API](/docs/api/public-api/) endpoint for [Get Destination](https://docs.segmentapis.com/tag/Destinations#operation/getDestination). The response from the Public API includes the field names for both the Segment fields and Adobe fields. +The endpoint: `https://api.segmentapis.com/destinations/{destinationId}/` diff --git a/src/connections/destinations/catalog/adobe-target-web/index.md b/src/connections/destinations/catalog/adobe-target-web/index.md deleted file mode 100644 index eb1f6e4281..0000000000 --- a/src/connections/destinations/catalog/adobe-target-web/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Adobe Target Web Destination' -hidden: true -id: 61fc2ffcc76fb3e73d85c89d -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/adobe-target/index.md b/src/connections/destinations/catalog/adobe-target/index.md index 6ed5b29fdc..f444d81536 100644 --- a/src/connections/destinations/catalog/adobe-target/index.md +++ b/src/connections/destinations/catalog/adobe-target/index.md @@ -6,7 +6,7 @@ beta: true hidden: true published: false --- -[Adobe Target](https://www.adobe.com/marketing-cloud/target.html) removes the +[Adobe Target](https://www.adobe.com/marketing-cloud/target.html){:target="_blank”} removes the coding and set up hassles of A/B testing to help you quickly discover which offers, experiences and messages truly engage your visitors. @@ -17,7 +17,7 @@ Destination and its documentation, [let us know](https://segment.com/help/contac ## Getting Started -{% include content/connection-modes.md %} + 1. Download the `at.js` file from Adobe and include it in the `head` of your website above the Segment snippet. Because Adobe Target is an A/B testing @@ -127,7 +127,7 @@ page flicker in conjunction with Segment would be to create a global mbox. Adobe will automatically set the HTML body style opacity to 0, which keeps the page content hidden while allowing the browser to still execute page load. After a response from Target is received, `at.js` resets the HTML body opacity to 1. You -can read more about preventing page flicker in Adobe's [documentation here](https://marketing.adobe.com/resources/help/en_US/target/ov2/c_target-atjs-faq.html). +can read more about preventing page flicker in Adobe's [documentation here](https://marketing.adobe.com/resources/help/en_US/target/ov2/c_target-atjs-faq.html){:target="_blank”}. ### Console Errors @@ -155,4 +155,4 @@ window.targetGlobalSettings = { These errors are not typically related to `at.js` functionality, but are fairly common, most frequently resulting from defining actions with no corresponding HTML elements on your page. You can read more about these errors in Adobe's -[documentation here](https://marketing.adobe.com/resources/help/en_US/target/ov2/c_target-atjs-faq.html). +[documentation here](https://marketing.adobe.com/resources/help/en_US/target/ov2/c_target-atjs-faq.html){:target="_blank”}. diff --git a/src/connections/destinations/catalog/adquick/index.md b/src/connections/destinations/catalog/adquick/index.md index 38c1c411a3..47703643c6 100644 --- a/src/connections/destinations/catalog/adquick/index.md +++ b/src/connections/destinations/catalog/adquick/index.md @@ -3,18 +3,18 @@ title: AdQuick Destination rewrite: true id: 5d3638cd54d6be00014e6bf1 --- -[AdQuick](https://adquick.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) makes outdoor advertising easy to purchase and measure. By integrating with Segment you can analyze the impact of your outdoor ad campaign across all your digital channels. +[AdQuick](https://adquick.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} makes outdoor advertising easy to purchase and measure. By integrating with Segment you can analyze the impact of your outdoor ad campaign across all your digital channels. This destination is maintained by AdQuick. For any issues with the destination, [contact the AdQuick team](mailto:segment@adquick.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "AdQuick" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Select the campaign you want to connect to Segment in your [Campaings list page](https://adquick.com/campaigns) +3. Select the campaign you want to connect to Segment in your [Campaigns list page](https://adquick.com/campaigns){:target="_blank”} 4. Click on the Analytics tab. 5. Enter the "API Key" into your Segment Settings UI which you can find on the Segment API key card. diff --git a/src/connections/destinations/catalog/adroll/index.md b/src/connections/destinations/catalog/adroll/index.md index 8ce6d427eb..22b4ffbc01 100644 --- a/src/connections/destinations/catalog/adroll/index.md +++ b/src/connections/destinations/catalog/adroll/index.md @@ -3,11 +3,11 @@ rewrite: true title: AdRoll Destination id: 54521fd525e721e32a72ee8e --- -[AdRoll](https://adroll.com/) is a retargeting network that allows you to show ads to visitors who've landed on your site while browsing the web. The AdRoll Destination is open-source. You can browse the code on [GitHub](https://github.com/segment-integrations/analytics.js-integration-adroll). +[AdRoll](https://adroll.com/){:target="_blank”} is a retargeting network that allows you to show ads to visitors who've landed on your site while browsing the web. The AdRoll Destination is open-source. You can browse the code on [GitHub](https://github.com/segment-integrations/analytics.js-integration-adroll){:target="_blank”}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Adroll" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -62,7 +62,7 @@ When you include an event property labeled `price` it will be tracked to AdRoll ### Currency -When you send `Order Completed` event with `properties.currency`, we will send that as `adroll_currency`. AdRoll supports [these currency codes](https://help.adroll.com/hc/en-us/articles/213429827-Currency-Codes). +When you send `Order Completed` event with `properties.currency`, we will send that as `adroll_currency`. AdRoll supports [these currency codes](https://help.adroll.com/hc/en-us/articles/213429827-Currency-Codes){:target="_blank”}. ### Order ID diff --git a/src/connections/destinations/catalog/adtriba/index.md b/src/connections/destinations/catalog/adtriba/index.md index 8416c2e824..3766a4dcf4 100644 --- a/src/connections/destinations/catalog/adtriba/index.md +++ b/src/connections/destinations/catalog/adtriba/index.md @@ -3,16 +3,14 @@ rewrite: true title: Adtriba Destination id: 5c7550de16b530000157a2d5 --- -[Adtriba](https://www.adtriba.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) allows advertisers to track, control and optimize their marketing activities across all digital marketing channels through AI and user journey analysis. +[Adtriba](https://www.adtriba.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} allows advertisers to track, control and optimize their marketing activities across all digital marketing channels through AI and user journey analysis. This destination is maintained by Adtriba. For any issues with the destination, [contact the Adtriba Support team](mailto:support@adtriba.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Adtriba" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/adwords-remarketing-lists/index.md b/src/connections/destinations/catalog/adwords-remarketing-lists/index.md index 6d125adaeb..fd36c6098e 100644 --- a/src/connections/destinations/catalog/adwords-remarketing-lists/index.md +++ b/src/connections/destinations/catalog/adwords-remarketing-lists/index.md @@ -2,24 +2,29 @@ title: Google Ads Remarketing Lists Destination strat: google hide-boilerplate: true +hide-dossier: false +hide-cmodes: true id: 5a6b50f1c900fa00011858fd +engage: true --- ## Overview The Google Ads Remarketing Lists destination is one of Segment's most popular Engage List destinations. It has a variety of use cases related to exclusion, acquisition (using Similar Audience), remarketing, and more. -This destination can send audiences created in [Engage](/docs/engage/) to Google Ads as a [Customer List](https://support.google.com/google-ads/answer/6276125){:target="_blank"}. Once you set this destination up, Segment sends an initial user list of users to the [Google Ads API](https://developers.google.com/google-ads/api/docs/remarketing/overview){:target="_blank"}. As users move in and out of the audience, Segment automatically updates the list in Google every hour. This allows you to run advertising campaigns without having manually update the list of users to target in your Google Ads campaigns. +This destination can send audiences created in [Engage](/docs/engage/) to Google Ads as a [Customer List](https://support.google.com/google-ads/answer/6276125){:target="_blank"}. Once you set this destination up, Segment sends an initial user list of users to the [Google Ads API](https://developers.google.com/google-ads/api/docs/remarketing/overview){:target="_blank"}. As users move in and out of the audience, Segment automatically updates the list in Google. This allows you to run advertising campaigns without having manually update the list of users to target in your Google Ads campaigns. - -You can send either an email address or mobile device ID (IDFA) from Engage to Google as custom matchers. You can set an email address on the user profile by including `email` as a trait on an [`identify` call](/docs/connections/spec/identify/), as a property on a [`track` call](/docs/connections/spec/track/), or as an [external id](/docs/unify/identity-resolution/externalids/) for the user. If you use Segment’s mobile SDKs to collect events from a mobile app, the user’s IDFA is automatically captured. If you don't use Segment’s mobile SDKs, you can set the user’s IDFA by setting it within `context.device.advertisingId`. +You can send either an email address or mobile device ID (IDFA) from Engage to Google as custom matchers. You can set an email address on the user profile by including `email` as a trait on an [`identify` call](/docs/connections/spec/identify/), as a property on a [`track` call](/docs/connections/spec/track/), or as an [external id](/docs/unify/identity-resolution/externalids/) for the user. If you use Segment’s mobile SDKs to collect events from a mobile app, the user’s IDFA is automatically captured. If you don't use Segment’s mobile SDKs, you can set the user’s IDFA by setting it within `context.device.advertisingId`. You are also required to collect `context.device.type` and `context.device.adTrackingEnabled` on the event payload. Additionally, ensure `android.idfa` and `ios.idfa` are enabled as identifiers in your [Identity Resolution settings](/docs/unify/identity-resolution/identity-resolution-settings/) in Engage. When you send an audience to Google Ads Remarketing Lists, you can choose which custom matcher (email or mobile device ID/IDFA) to match with. If a user has multiple emails or IDFAs on their account as `external_ids`, Engage sends the ID that was most recently added to the user profile to Google Ads. These audience lists can be used to serve content on Google Search, YouTube, and Gmail. You can only target users with email addresses that are associated with a Google account, and you can target users in Gmail only if they have an `@gmail.com` address. > info "" -> You must have access to Engage as part of your Segment plan to use this destination. [Contact Segment's sales team](https://segment.com/demo/) to try this out. +> You must have access to Engage as part of your Segment plan to use this destination. [Contact Segment's sales team](https://segment.com/demo/){:target="_blank”} to try this out. + +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/adwords-remarketing-lists/#consent-mode) and how to set it up. ## Details @@ -40,12 +45,12 @@ Google Ads Remarketing Lists allows you to efficiently run several marketing and ### Exclusion audiences (suppression audiences) -Create an audience of users that signed up, purchased a product, or otherwise performed some conversion event. You can then send those users to Google in a timely manner (hourly syncs) to prevent advertising to users that already converted. You can do this by creating an audience in Engage, syncing it to the Google Ads Remarketing Lists, and setting it as an [Exclusion List](https://support.google.com/google-ads/answer/2549058){:target="_blank"} in your Google Ads campaign. +Create an audience of users that signed up, purchased a product, or otherwise performed some conversion event. You can then send those users to Google in a timely manner to prevent advertising to users that already converted. You can do this by creating an audience in Engage, syncing it to the Google Ads Remarketing Lists, and setting it as an [Exclusion List](https://support.google.com/google-ads/answer/2549058){:target="_blank"} in your Google Ads campaign. ### Similar audience -You can use Engage to create a detailed profile of your most loyal customers (sometimes called a “seed audience”) and then send this list of customers to Google. In Google, you can then use Google's [Similar Audience](https://support.google.com/google-ads/answer/7151628?hl=en-AU) features to find similar users to target. For example, you might want to create a group of high-value users who have spent a certain amount of money on your product, and then use Similar Audiences to find users who might also spend that much. +You can use Engage to create a detailed profile of your most loyal customers (sometimes called a “seed audience”) and then send this list of customers to Google. In Google, you can then use Google's [Similar Audience](https://support.google.com/google-ads/answer/7151628?hl=en-AU){:target="_blank”} features to find similar users to target. For example, you might want to create a group of high-value users who have spent a certain amount of money on your product, and then use Similar Audiences to find users who might also spend that much. > note "" > **Note:** A “seed audience” must have at least 100 members for Google's Similar Audience feature to function. @@ -61,7 +66,7 @@ When you create an audience in Engage and connect it to Google Ads Remarketing L 1. Creates a Google Ads User List (Customer List) with the name you entered in Engage. 2. Adds any users that fit the audience definition based on email or mobile ID (IDFA). Google uses these identifiers to match users in your list to users in the Google system who can be served ads. -3. Every hour, Segment either adds or removes users from this audience based on the same identifiers. +3. Either adds or removes users from this audience based on the same identifiers. ## Set up @@ -104,6 +109,29 @@ In Google Ads, go to **Tools & Settings** > **Shared Library** > **Audience mana > info "" > **Note**: Google Ads can take 24+ hours to fully process initial audience uploads before they can be used for a campaign. If the audience is still processing, the list status appears as “Populating”. +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Consent mode may involve updates to your sources outside of Segment, such as incorporating a consent management system for consent functionality. + +### Set up consent mode + +To enable consent mode for Google Adwords Remarketing Lists destination: +1. Navigate to **Connections > Destinations** and select your Google Ads Remarketing Lists destination. +2. Go to the **Settings** tab of the destination. +3. Under the **Connection Settings** section, select **Ad Personalization**. +4. Select `GRANTED` in the dropdown and click **Save**. +5. Under the **Connection Settings** section, select **Ad User Data**. +6. Select `GRANTED` in the dropdown and click **Save**. + +The consent fields apply universally to all audiences linked to the instance. The consent fields are intended for application across all audiences. If it's not intended for all audiences, you should create a new instance of the destination and associated non-consent audiences with the new instance. For more information, see [FAQ about the EU user consent policy for Customer Match upload partners](https://support.google.com/google-ads/answer/14310715?hl=en){:target="_blank"}. + +If you have any questions setting up consent mode, reach out to [friends@segment.com](mailto:friends@segment.com). + ## Troubleshooting ### Not seeing an audience in Google Ads Audience manager @@ -123,6 +151,14 @@ You can set an email on the user profile by including `email` as a trait, as a p If a user has more than one email address or IDFA on their account as `external_ids`, Engage sends the most recent id on the user profile to Adwords for matching. The match rate will be low if Google can't identify users based on the data that you provide. +### Invalid Settings error in Event Delivery + +Make sure that this destination was created in [Engage](/docs/engage/) as it requires additional event data not available in standard destinations. + +### Invalid user list ID error in Event Delivery + +When you first connect a destination to an audience, Segment triggers a call to the destination to create the audience downstream. Once Segment creates the audience, the destination API returns an audience ID. For subsequent updates to the audience in the destination (adding or removing users), Segment uses this ID to send requests to the destination. The invalid user list ID error usually means that the audience ID no longer exists in the destination. To resolve this, you'll need to either recreate the audience or create a *new instance* of the destination and link it to the audience. Removing and re-adding the same instance of the destination will not work. + ## FAQs #### What Google Ads campaigns does Engage support? @@ -146,3 +182,7 @@ Engage sends the most recent ID added to the user profile to Google Ads. If you have more than one App ID (such as a separate App ID for Android and iOS apps), add a separate Google Ads Remarketing Lists destination for each App ID, and make sure the settings for these destinations include the correct App IDs. When you create Engage audiences, add conditions to specify which App ID to send the audience to. For example, you might add a property condition of "where `device.type` contains `iOS`" to send only your iOS users to a specific destination. + +#### Why is there a schemaType validation error when I test an event? + +Typically this is a validation error and the permissions need to be re-authorized. Ensure the user who is authorizing has adminstration permissions. diff --git a/src/connections/destinations/catalog/airship/index.md b/src/connections/destinations/catalog/airship/index.md index e79324fc49..96c81f23c8 100644 --- a/src/connections/destinations/catalog/airship/index.md +++ b/src/connections/destinations/catalog/airship/index.md @@ -5,7 +5,7 @@ id: 5d0ac1fbc12d700001651e34 --- Airship gives brands the data, channels, orchestration and services they need to deliver push notifications, emails, SMS, in-app messages, and more to the right person at the right moment — building trust, boosting engagement, driving action, and growing value. -[Airship Cloud-mode Destination integration](https://docs.airship.com/partners/segment/#destination) enables users to set Airship tags, attributes, and custom events through Segment's `identify`, `track`, and `group` API calls. +[Airship Cloud-mode Destination integration](https://docs.airship.com/partners/segment/#destination){:target="_blank”} enables users to set Airship tags, attributes, and custom events through Segment's `identify`, `track`, and `group` API calls. Segment `track` API calls are received by Airship as Custom Events. The traits of the Segments `identify` API call are interpreted as either `tags` or `attributes`. Tags are all traits that contains a boolean value (either `true` or `false`). A trait which contains a non-boolean value -- and is known to Airship -- becomes an attribute. @@ -17,11 +17,9 @@ This destination is maintained by Airship. For any issues [contact the Airship S > success "" > **Good to know**: This page is about the Airship Segment destination, which receives data from Segment. There's also a page about the [Airship Segment source](/docs/connections/sources/catalog/cloud-apps/airship/), which sends data _to_ Segment! -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + Follow these steps to configure the integration @@ -30,14 +28,14 @@ Follow these steps to configure the integration 3. Find the `Airship` destination (under *SMS & Push Notifications*), click the *Airship* tile and then click the *Configure Airship* button. 4. In the *Select Source* dialog, select a source and click *Confirm Source*. 5. Toggle on *Airship EU Data Center* if you are implemented in Airship's European Data Center (if you are not sure which data center you are on please [contact the Airship support team](mailto:support@airship.com)). -3. Enter the *App Key* and Access Token that you copied when setting up the Real-Data Streaming integration in Airship. See [Airship documentation for steps to create an Access Token](https://docs.airship.com/partners/segment/#access-token). -4. For `identify` events, first [set up a tag group within Airship](https://docs.airship.com/partners/segment/#tag-group). -5. For `attributes`, first [predefine them in Airship](https://docs.airship.com/guides/messaging/user-guide/audience/segmentation/attributes/#add-attributes). +3. Enter the *App Key* and Access Token that you copied when setting up the Real-Data Streaming integration in Airship. See [Airship documentation for steps to create an Access Token](https://docs.airship.com/partners/segment/#access-token){:target="_blank”}. +4. For `identify` events, first [set up a tag group within Airship](https://docs.airship.com/partners/segment/#tag-group){:target="_blank”}. +5. For `attributes`, first [predefine them in Airship](https://docs.airship.com/guides/messaging/user-guide/audience/segmentation/attributes/#add-attributes){:target="_blank”}. ## Requirements To use the Segment Destination integration, you must implement `Named Users` in Airship. The Segment UserID must match the Named User ID in Airship. If your `named_user_id` and `UserID` do not match, Airship will not be able to associate `identify`, `track`, or `group` events to the proper user in Airship. You will not be able to issue automated messages or to attach user attributes from Segment within Airship. -See [Tags and Named Users](https://docs.airship.com/guides/audience/tags-named-users/) or the [Named Users API](https://docs.airship.com/api/ua/#tag/named-users) for more information about configuring named users. +See [Tags and Named Users](https://docs.airship.com/guides/audience/tags-named-users/){:target="_blank”} or the [Named Users API](https://docs.airship.com/api/ua/#tag/named-users){:target="_blank”} for more information about configuring named users. ## Identify diff --git a/src/connections/destinations/catalog/akita-customer-success/index.md b/src/connections/destinations/catalog/akita-customer-success/index.md deleted file mode 100644 index bd625a7055..0000000000 --- a/src/connections/destinations/catalog/akita-customer-success/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Akita Customer Success Destination' -hidden: true -id: 5fc76defdde39f67d4fa85de -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/akita-user-tracking/index.md b/src/connections/destinations/catalog/akita-user-tracking/index.md index 7d4109464a..bfcd6051e1 100644 --- a/src/connections/destinations/catalog/akita-user-tracking/index.md +++ b/src/connections/destinations/catalog/akita-user-tracking/index.md @@ -72,7 +72,7 @@ Segment sends Track calls to Akita as a `event` event. ## Page -If you aren't familiar with the Page Spec, take a look at the [Page method documentation](https://segment.com/docs/connections/spec/page/) to learn about what it does. An example call would look like: +If you aren't familiar with the Page Spec, take a look at the [Page method documentation](/docs/connections/spec/page/) to learn about what it does. An example call would look like: ```js analytics.page(); diff --git a/src/connections/destinations/catalog/akita/index.md b/src/connections/destinations/catalog/akita/index.md index e75129e9d2..d31bfc8a8b 100644 --- a/src/connections/destinations/catalog/akita/index.md +++ b/src/connections/destinations/catalog/akita/index.md @@ -13,7 +13,7 @@ Once you have integrated one of the Segment libraries (such as `analytics.js`) i You will need to provide your Akita API Token value. To find your API Token, sign in to your Akita account and then click on the following link: -[https://app.akitaapp.com/#int/account/tracking](https://app.akitaapp.com/#int/account/tracking) +[https://app.akitaapp.com/#int/account/tracking](https://app.akitaapp.com/#int/account/tracking){:target="_blank”} You will see your API Token under the "Segment.com Users" heading. diff --git a/src/connections/destinations/catalog/alexa/index.md b/src/connections/destinations/catalog/alexa/index.md index bc0c7fde4e..abd2f3e482 100644 --- a/src/connections/destinations/catalog/alexa/index.md +++ b/src/connections/destinations/catalog/alexa/index.md @@ -3,12 +3,12 @@ rewrite: true title: Alexa Destination id: 54521fd525e721e32a72ee90 --- -[Alexa](https://www.alexa.com/) helps improve your website's SEO and conduct competitive analysis. They help your business get better marketing results. The Alexa Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-alexa). +[Alexa](https://www.alexa.com/){:target="_blank”} helps improve your website's SEO and conduct competitive analysis. They help your business get better marketing results. The Alexa Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-alexa){:target="_blank”}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Alexa" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/amazon-eventbridge/index.md b/src/connections/destinations/catalog/amazon-eventbridge/index.md index 948aa3a21f..bdd6bc3766 100644 --- a/src/connections/destinations/catalog/amazon-eventbridge/index.md +++ b/src/connections/destinations/catalog/amazon-eventbridge/index.md @@ -3,23 +3,26 @@ rewrite: true title: Amazon EventBridge Destination id: 5d1994fb320116000112aa12 --- -[Amazon EventBridge](https://aws.amazon.com/eventbridge/) is the easiest way to onboard your Segment data into the AWS ecosystem. +[Amazon EventBridge](https://aws.amazon.com/eventbridge/){:target="_blank”} is the easiest way to onboard your Segment data into the AWS ecosystem. -In addition to already supported destinations like Kinesis, S3, and Redshift, you can use EventBridge to selectively route streaming data into Amazon SQS, SNS, and any service supported by [AWS CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). +In addition to already supported destinations like Kinesis, S3, and Redshift, you can use EventBridge to selectively route streaming data into Amazon SQS, SNS, and any service supported by [AWS CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html){:target="_blank”}. ## Getting Started -{% include content/connection-modes.md %} + 1. Provide Segment your AWS Account ID and the region you'd like us to configure the Segment Partner Event Source in. Ensure you've provided the same region in Segment where you'd like to configure your Event Bus. 2. Once you send an event through with the destination enabled, we'll create a Partner Event Source in Amazon EventBridge, which you can activate in the AWS Console. - 3. Use the [AWS Console](http://console.aws.amazon.com/events/) to configure rules and destinations for the events in your Segment Partner Event Source. + 3. Use the [AWS Console](http://console.aws.amazon.com/events/){:target="_blank”} to configure rules and destinations for the events in your Segment Partner Event Source. The Event Source will be denoted by your Segment Source ID, which you can find in your Source Settings page under API Keys. We'll forward all the messages in the source (pending any Destination Filters you've enabled) to the Segment Partner Event Source we create for you in EventBridge. +> info "Create a separate Segment source for testing" +> Segment recommends that you create a separate Segment source for testing if you use a test Account ID, because you cannot change the test Account ID to a production Account ID at a later date. + ## Page If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: ```javascript @@ -45,9 +48,9 @@ analytics.track("User Registered", { }); ``` -## FAQ +## FAQs -### Can I change my Account ID? -Currently you can only set up one Account ID per source, and once it is set it cannot be changed. +### Can I change my AWS Account ID? +You are only able to configure one AWS Account ID per source. Once you've configured your Amazon EventBridge destination with an AWS Account ID, it is not possible to modify it. If you do need to change the AWS Account ID for any reason, you will need to create a new Segment source and configure a new destination. -We recommend that you create a separate Segment source for testing if you use a test Account ID, because you cannot change it to a production Account ID at a later date. \ No newline at end of file +As an alternative, you can use a [Repeater destination](/docs/connections/destinations/catalog/repeater/) to your existing source, which repeats the events through the new source you create. This new source can then be connected to a new EventBridge destination which can be configured with a new Account ID in the settings. diff --git a/src/connections/destinations/catalog/amazon-kinesis-firehose/index.md b/src/connections/destinations/catalog/amazon-kinesis-firehose/index.md index b4ad81e5e0..8293253ff0 100644 --- a/src/connections/destinations/catalog/amazon-kinesis-firehose/index.md +++ b/src/connections/destinations/catalog/amazon-kinesis-firehose/index.md @@ -3,11 +3,11 @@ rewrite: true title: Amazon Kinesis Firehose Destination id: 59022a2270a3e552b955caa9 --- -[Amazon Kinesis Firehose](https://aws.amazon.com/kinesis/data-firehose/) provides way to load streaming data into AWS. It can capture, transform, and load streaming data into Amazon Kinesis Analytics, Amazon S3, Amazon Redshift, and Amazon Elasticsearch Service, enabling near real-time analytics with existing business intelligence tools and dashboards you're already using today. It's a fully managed service that automatically scales to match the throughput of your data and requires no ongoing administration. It can also batch, compress, and encrypt the data before loading it, minimizing the amount of storage used at the destination and increasing security. +[Amazon Kinesis Firehose](https://aws.amazon.com/kinesis/data-firehose/){:target="_blank”} provides way to load streaming data into AWS. It can capture, transform, and load streaming data into Amazon Kinesis Analytics, Amazon S3, Amazon Redshift, and Amazon Elasticsearch Service, enabling near real-time analytics with existing business intelligence tools and dashboards you're already using today. It's a fully managed service that automatically scales to match the throughput of your data and requires no ongoing administration. It can also batch, compress, and encrypt the data before loading it, minimizing the amount of storage used at the destination and increasing security. + +## Getting started -## Getting Started -{% include content/connection-modes.md %} To get started: 1. Create at least one Kinesis Firehose delivery stream. You can follow these [instructions](http://docs.aws.amazon.com/firehose/latest/dev/basic-create.html){:target="_blank"} to create a new delivery stream. @@ -36,7 +36,7 @@ To get started: 3. Create an IAM role. - 1. Follow [these instructions](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) to create an IAM role to allow Segment permission to write to your Kinesis Firehose Stream. + 1. Follow [these instructions](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console){:target="_blank”} to create an IAM role to allow Segment permission to write to your Kinesis Firehose Stream. 2. When prompted to enter an Account ID, enter `595280932656`. 3. Select the checkbox to enable **Require External ID**. 4. Enter your Secret ID as the **External ID**. This can be found in Segment by navigating to your Amazon Kinesis Firehose destination in Segment, going to the Settings tab, and clicking the Secret ID setting. @@ -54,7 +54,7 @@ Take a look to understand what the [Page method](/docs/connections/spec/page/) d ``` ## Identify -Take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example identify call is shown below: +Take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example Identify call is shown below: ```javascript analytics.identify('97980cfea0085', { email: 'gibbons@example.com', @@ -63,7 +63,7 @@ analytics.identify('97980cfea0085', { ``` ## Track -Take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example identify call is shown below: +Take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example Track call is shown below: ```js analytics.track("User Registered", { @@ -72,14 +72,14 @@ analytics.track("User Registered", { }); ``` -### Event Mapping +### Event mapping To begin using the Kinesis Firehose destination, you must first decide on which Segment events you would like to route to which Firehose delivery streams. This mapping then needs to be defined in your destination settings. -Segment `track` events can map based on their **event name**. For example, if you have an event called `User Registered`, and you want these events to be published to a Firehose delivery stream called `new_users`, create a row in your destination settings that looks like this: +Segment Track events can map based on their **event name**. For example, if you have an event called `User Registered`, and you want these events to be published to a Firehose delivery stream called `new_users`, create a row in your destination settings that looks like this: ![track event mapping screenshot](images/track_mapping.png) -Any Segment **event type** (ie. `page`, `track`, `identify`, `screen`, etc.) can also be mapped. This enables you to publish all instances of a given Segment event type to a given stream. To do this, create a row with the event type and its corresponding delivery stream: +Any Segment **event type** (for example, Page, Track, Identify, or Screen) can also be mapped. This enables you to publish all instances of a given Segment event type to a given stream. To do this, create a row with the event type and its corresponding delivery stream: ![page event mapping screenshot](images/page_mapping.png) @@ -87,7 +87,7 @@ Events can be defined **insensitive to case** so `Page` will be equivalent to `p If you would like to route all events to a stream, use an `*` as the event name. -### Data Model +### Data model Let's say you've decided to publish your Segment track events named `User Registered` to your Kinesis Firehose delivery stream named `online_registrations`. If you send Segment the following `track` call: ```json @@ -126,9 +126,9 @@ analytics.group("0e8c78ea9d9dsasahjg", { }); ``` -## Best Practices +## Best practices -### Multiple Sources +### Multiple sources If you have multiple sources using Kinesis/Firehose, you have two options: #### Attach multiple sources to your IAM role @@ -144,7 +144,7 @@ To attach multiple sources to your IAM role: { "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::595280932656:root" + "AWS": "arn:aws:iam::595280932656:role/customer-firehose-access" }, "Action": "sts:AssumeRole", "Condition": { @@ -166,7 +166,7 @@ To attach multiple sources to your IAM role: { "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::595280932656:root" + "AWS": "arn:aws:iam::595280932656:role/customer-firehose-access" }, "Action": "sts:AssumeRole", "Condition": { @@ -198,7 +198,7 @@ To set this value for a Secret ID: { "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::595280932656:root" + "AWS": "arn:aws:iam::595280932656:role/customer-firehose-access" }, "Action": "sts:AssumeRole", "Condition": { diff --git a/src/connections/destinations/catalog/amazon-kinesis/index.md b/src/connections/destinations/catalog/amazon-kinesis/index.md index 3a1620d567..de45722cb5 100644 --- a/src/connections/destinations/catalog/amazon-kinesis/index.md +++ b/src/connections/destinations/catalog/amazon-kinesis/index.md @@ -3,12 +3,12 @@ rewrite: true title: Amazon Kinesis Destination id: 57da359580412f644ff33fb9 --- -[Amazon Kinesis](https://aws.amazon.com/kinesis/) enables you to build custom applications that process or analyze streaming data for specialized needs. Amazon Kinesis Streams can continuously capture and store terabytes of data per hour from hundreds of thousands of sources such as website clickstreams, financial transactions, social media feeds, IT logs, and location-tracking events. +[Amazon Kinesis](https://aws.amazon.com/kinesis/){:target="_blank”} enables you to build custom applications that process or analyze streaming data for specialized needs. Amazon Kinesis Streams can continuously capture and store terabytes of data per hour from hundreds of thousands of sources such as website clickstreams, financial transactions, social media feeds, IT logs, and location-tracking events. ## Getting Started -{% include content/connection-modes.md %} + To get started: 1. Create a Kinesis stream. Follow these [instructions](http://docs.aws.amazon.com/streams/latest/dev/learning-kinesis-module-one-create-stream.html){:target="_blank"} in order to create a new AWS Kinesis Stream. @@ -155,7 +155,7 @@ To attach multiple sources to your IAM role: { "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::595280932656:root" + "AWS": "arn:aws:iam::595280932656:role/customer-kinesis-access" }, "Action": "sts:AssumeRole", "Condition": { @@ -175,7 +175,7 @@ To attach multiple sources to your IAM role: { "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::595280932656:root" + "AWS": "arn:aws:iam::595280932656:role/customer-kinesis-access" }, "Action": "sts:AssumeRole", "Condition": { @@ -228,7 +228,7 @@ If you have many sources using Kinesis that it's impractical to attach all of th { "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::595280932656:root" + "AWS": "arn:aws:iam::595280932656:role/customer-kinesis-access" }, "Action": "sts:AssumeRole", "Condition": { diff --git a/src/connections/destinations/catalog/amazon-lambda/index.md b/src/connections/destinations/catalog/amazon-lambda/index.md index eca7f20860..1b325282e9 100644 --- a/src/connections/destinations/catalog/amazon-lambda/index.md +++ b/src/connections/destinations/catalog/amazon-lambda/index.md @@ -14,7 +14,7 @@ With Lambda, you can run code for any type of application or backend service - a ## Getting started -{% include content/connection-modes.md %} + To get started, you'll need to: 1. [Build a Lambda function to process Segment events](/docs/connections/destinations/catalog/amazon-lambda/#build-a-lambda-function-to-process-segment-events) @@ -146,7 +146,7 @@ To create an IAM role: ![A screenshot of the AWS IAM home summary, with the Trust relationships tab selected.](images/LambdaTrustRelationship.png) 7. Copy and paste the following code into your trust relationship. You should replace `` with either the Source ID of the attached Segment source (the default) or the External ID set in your AWS Lambda destination settings. - * `arn:aws:iam::595280932656:root` refers to Segment's AWS Account, and is what allows Segment's Destination to access the role to invoke your Lambda. + * `arn:aws:iam::595280932656:role/customer-lambda-prod-destination-access` refers to Segment's AWS Account, and is what allows Segment's Destination to access the role to invoke your Lambda. > note "" > **Note**: Source ID can be found by navigating to **Settings > API Keys** from your Segment source homepage. @@ -158,7 +158,7 @@ To create an IAM role: { "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::595280932656:root" + "AWS": "arn:aws:iam::595280932656:role/customer-lambda-prod-destination-access" }, "Action": "sts:AssumeRole", "Condition": { @@ -186,11 +186,11 @@ To configure your Segment Lambda destination: **What is the Log Type Setting?** -This setting controls the [Log Type](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax) for your Lambda function using Cloud Watch. Select option `Tail` if you would like to see [detailed logs](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html) in Cloud Watch. +This setting controls the [Log Type](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax){:target="_blank”} for your Lambda function using Cloud Watch. Select option `Tail` if you would like to see [detailed logs](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html){:target="_blank”} in Cloud Watch. **My Lambda <> Segment connection is timing out, what do I do?** -Due to how the event delivery system, [Centrifuge](https://segment.com/blog/introducing-centrifuge/), works, your Lambda can't take more than 5 seconds to run per message. If you're consistently running into timeout issues, you should consult the [AWS Lambda docs](https://docs.aws.amazon.com/lambda/index.html#lang/en_us), as well as docs for your language of choice, for tips on optimizing performance. +Due to how the event delivery system, [Centrifuge](https://segment.com/blog/introducing-centrifuge/){:target="_blank”}, works, your Lambda can't take more than 5 seconds to run per message. If you're consistently running into timeout issues, you should consult the [AWS Lambda docs](https://docs.aws.amazon.com/lambda/index.html#lang/en_us){:target="_blank”}, as well as docs for your language of choice, for tips on optimizing performance. **Handling Common Errors** You can find delivery logs in Destination > [Event Delivery](/docs/connections/event-delivery/). diff --git a/src/connections/destinations/catalog/amazon-personalize/index.md b/src/connections/destinations/catalog/amazon-personalize/index.md index ee703d9d28..cc0c6f6371 100644 --- a/src/connections/destinations/catalog/amazon-personalize/index.md +++ b/src/connections/destinations/catalog/amazon-personalize/index.md @@ -13,7 +13,7 @@ Developing the machine-learning capabilities necessary to produce these recommen ## Getting Started -{% include content/connection-modes.md %} + These are the pre-requisites you need before getting started: @@ -691,7 +691,7 @@ To create an IAM role: { "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::595280932656:root" + "AWS": "arn:aws:iam::595280932656:role/customer-personalize-prod-destination-access" }, "Action": "sts:AssumeRole", "Condition": { @@ -720,18 +720,19 @@ Segment provides an example Lambda function, written in Python, for you to get u To build a Lambda function to process Segment events: 1. Go to the Lambda service page in your AWS account. -2. Click **Create a function** to create a new function. +2. Ensure that you are in AWS Region 'us-west-2'. You must be in us-west-2 so that Segment's Lambdas can communicate with your resources. +3. Click **Create a function** to create a new function. ![A screenshot of the Lambda service page in AWS, with a box around the Create a function button.](images/LambdaDashboard.png) -3. Select **Author from scratch** since Segment will be providing the source code for the function. +4. Select **Author from scratch** since Segment will be providing the source code for the function. -4. Enter a name for your function and select **Python 3.7** for the runtime. +5. Enter a name for your function and select **Python 3.7** for the runtime. -5. For the **Role** field, select **Create a new role from AWS policy templates** from the dropdown. -6. Create a **Role name** that makes sense for you, and leave **Policy templates** empty. You will come back to modify this role shortly. +6. For the **Role** field, select **Create a new role from AWS policy templates** from the dropdown. +7. Create a **Role name** that makes sense for you, and leave **Policy templates** empty. You will come back to modify this role shortly. -7. Click **Create function**. +8. Click **Create function**. ![A screenshot of the Create a function settings page, with a function name, runtime, permissions, and role name entered.](images/LambdaCreateFunction.png) @@ -761,7 +762,7 @@ import of import init_personalize_api as api_helper api_helper.init() ``` -This `import` and function call uses some boilerplate code, packaged as a [Lambda Layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) needed to configure the Personalize API with the AWS Python SDK. This is only necessary while Personalize is in Preview. Once Personalize is GA and the API is bundled with the Python SDK, as well as other language SDKs, this supporting Layer will no longer be needed. +This `import` and function call uses some boilerplate code, packaged as a [Lambda Layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html){:target="_blank”} needed to configure the Personalize API with the AWS Python SDK. This is only necessary while Personalize is in Preview. Once Personalize is GA and the API is bundled with the Python SDK, as well as other language SDKs, this supporting Layer will no longer be needed. To install Segment's Layer: @@ -828,7 +829,7 @@ You need to modify the IAM Role & Policy originally created with this Lambda to **Wire-up Personalize Event Tracker** -Another dependency in the function is the ability to call the Personalize [PutEvents API](https://docs.aws.amazon.com/personalize/latest/dg/API_UBS_PutEvents.html) endpoint as shown in the following excerpt. +Another dependency in the function is the ability to call the Personalize [PutEvents API](https://docs.aws.amazon.com/personalize/latest/dg/API_UBS_PutEvents.html){:target="_blank”} endpoint as shown in the following excerpt. ```js personalize_events.put_events( @@ -1004,8 +1005,8 @@ There are two settings relevant for track calls: **What is the Log Type Setting?** -This setting controls the [Log Type](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax) for your Lambda function using Cloud Watch. Select option `Tail` if you would like to see [detailed logs](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html) in Cloud Watch. +This setting controls the [Log Type](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax){:target="_blank”} for your Lambda function using Cloud Watch. Select option `Tail` if you would like to see [detailed logs](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html){:target="_blank”}in Cloud Watch. **My Lambda <> Segment connection is timing out, what do I do?** -Due to how Segment's event delivery system, [Centrifuge](https://segment.com/blog/introducing-centrifuge/), works, your Lambda can't take more than five seconds to run per message. If you're consistently running into timeout issues, you should consult the [AWS Lambda docs](https://docs.aws.amazon.com/lambda/index.html#lang/en_us), as well as docs for your language of choice, for tips on optimizing performance. +Due to how Segment's event delivery system, [Centrifuge](https://segment.com/blog/introducing-centrifuge/){:target="_blank”}, works, your Lambda can't take more than five seconds to run per message. If you're consistently running into timeout issues, you should consult the [AWS Lambda docs](https://docs.aws.amazon.com/lambda/index.html#lang/en_us){:target="_blank”}, as well as docs for your language of choice, for tips on optimizing performance. diff --git a/src/connections/destinations/catalog/ambassador/index.md b/src/connections/destinations/catalog/ambassador/index.md index c0228c9d40..2e36be4c87 100644 --- a/src/connections/destinations/catalog/ambassador/index.md +++ b/src/connections/destinations/catalog/ambassador/index.md @@ -3,11 +3,11 @@ rewrite: true title: Ambassador Destination id: 573a3dfb80412f644ff13679 --- -[Ambassador](https://www.getambassador.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) empowers companies to easily create, track & manage custom incentives that drive referrals and evangelize their users. +[Ambassador](https://www.getambassador.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} empowers companies to easily create, track & manage custom incentives that drive referrals and evangelize their users. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Ambassador" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/amberflo/index.md b/src/connections/destinations/catalog/amberflo/index.md index 8fdb311310..e3782bd1a9 100644 --- a/src/connections/destinations/catalog/amberflo/index.md +++ b/src/connections/destinations/catalog/amberflo/index.md @@ -1,22 +1,18 @@ --- title: Amberflo Destination -hidden: true id: 62274854b16140600b51d1cd --- -## Amberflo Destination -[Amberflo](https://www.amberflo.io/) provides cloud based usage metering, pricing, and billing. Meter any infrastructure, platform, application, custom resource, event, or feature. Amberflo provides an end-to-end usage platform engine that serves as the system of records and single source of truth. It's platform is built on top of the metering service, Amberflo Metering Cloud. It is built on cloud platform design principles of durability, availability, scalability, and cost-effectiveness with specialized logic built-in to ensure accuracy of the metering system - that is that each record is processed once, and once only, and that duplicate records sent are automatically de-duped. Amberflo Billing Cloud is a decoupled (yet integrated) application that is built on the Metering Cloud. It allows users to create, model, and manage usage-based pricing plans with full flexibility over modern sales artifacts such as prepaid credits, rewards, promotions, and custom currency creation. +[Amberflo](https://www.amberflo.io/){:target="_blank”} provides cloud based usage metering, pricing, and billing. Meter any infrastructure, platform, application, custom resource, event, or feature. Amberflo provides an end-to-end usage platform engine that serves as the system of records and single source of truth. It's platform is built on top of the metering service, Amberflo Metering Cloud. It is built on cloud platform design principles of durability, availability, scalability, and cost-effectiveness with specialized logic built-in to ensure accuracy of the metering system - that is that each record is processed once, and once only, and that duplicate records sent are automatically de-duped. Amberflo Billing Cloud is a decoupled (yet integrated) application that is built on the Metering Cloud. It allows users to create, model, and manage usage-based pricing plans with full flexibility over modern sales artifacts such as prepaid credits, rewards, promotions, and custom currency creation. This destination is maintained by Amberflo. For any issues with the destination, [contact the Amberflo Support team](mailto:support@amberflo.io). ## Getting Started -{% include content/connection-modes.md %} - 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Amberflo" in the Destinations Catalog, and select the "Amberflo" destination. 3. Choose which Source should send data to the "Amberflo" destination. -4. Go to the [Amberflo dashboard](https://ui.amberflo.io/settings/account/api-keys), find and copy the "API key". +4. Go to the [Amberflo dashboard](https://ui.amberflo.io/settings/account/api-keys){:target="_blank”}, find and copy the "API key". 5. Enter the "API Key" in the "Amberflo" destination settings in Segment. ## Supported methods @@ -25,7 +21,7 @@ Amberflo supports the following methods, as specified in the [Segment Spec](/doc ### Page -Send [Page](/docs/connections/spec/page) calls the [Amberflo Ingestion API](https://docs.amberflo.io/reference/post_ingest) to ingest as a meter with value 1. For example: +Send [Page](/docs/connections/spec/page) calls the [Amberflo Ingestion API](https://docs.amberflo.io/reference/post_ingest){:target="_blank”} to ingest as a meter with value 1. For example: ```js analytics.page({ userId: "some_user_id", @@ -72,7 +68,7 @@ curl --request POST \ ### Screen -Send [Screen](/docs/connections/spec/screen) calls the [Amberflo Ingestion API](https://docs.amberflo.io/reference/post_ingest) to ingest as a meter with value 1. For example: +Send [Screen](/docs/connections/spec/screen) calls the [Amberflo Ingestion API](https://docs.amberflo.io/reference/post_ingest){:target="_blank”} to ingest as a meter with value 1. For example: ```js analytics.screen({ @@ -109,7 +105,7 @@ curl --request POST \ ### Identify -Send [Identify](/docs/connections/spec/identify) calls the [Amberflo Customers API](https://docs.amberflo.io/reference/post_customers) to create a customer in Amberflo or update if the customer already exists. For example: +Send [Identify](/docs/connections/spec/identify) calls the [Amberflo Customers API](https://docs.amberflo.io/reference/post_customers){:target="_blank”} to create a customer in Amberflo or update if the customer already exists. For example: ```js analytics.identify({ @@ -155,7 +151,7 @@ curl --request PUT \ ### Track -Send [Track](/docs/connections/spec/track) calls [Amberflo Ingestion API](https://docs.amberflo.io/reference/post_ingest) to ingest as a meter with value of `properties.value` or 1 if value is not set. For example: +Send [Track](/docs/connections/spec/track) calls [Amberflo Ingestion API](https://docs.amberflo.io/reference/post_ingest){:target="_blank”} to ingest as a meter with value of `properties.value` or 1 if value is not set. For example: ```js analytics.track({ diff --git a/src/connections/destinations/catalog/amplitude/index.md b/src/connections/destinations/catalog/amplitude/index.md index 22325dbab1..bba0db7899 100644 --- a/src/connections/destinations/catalog/amplitude/index.md +++ b/src/connections/destinations/catalog/amplitude/index.md @@ -13,10 +13,10 @@ Segment's Amplitude destination code is open source and available on GitHub. You - [Kotlin](https://github.com/segment-integrations/analytics-kotlin-amplitude){:target="_blank"} - [Swift](https://github.com/segment-integrations/analytics-swift-amplitude){:target="_blank"} -In addition to Segment's Amplitude documentation, Amplitude provides a [Segment integration guide](https://developers.amplitude.com/docs/segment-amplitude-integration){:target="_blank"}, as well. +In addition to Segment's Amplitude documentation, Amplitude provides a [Segment integration guide](https://docs.developers.amplitude.com/data/sources/segment/){:target="_blank"}, as well. > note "" -> To delete users based on GDPR regulations, you must include a secret key in the **Secret Key** setting of every Amplitude destination. You can find your Secret Key on the [General Settings](https://help.amplitude.com/hc/en-us/articles/235649848-Settings#general) of your Amplitude project. +> To delete users based on GDPR regulations, you must include a secret key in the **Secret Key** setting of every Amplitude destination. You can find your Secret Key on the [General Settings](https://help.amplitude.com/hc/en-us/articles/235649848-Settings#general){:target="_blank"} of your Amplitude project. @@ -42,11 +42,6 @@ In addition to Segment's Amplitude documentation, Amplitude provides a [Segment If you included Segment's JavaScript snippet on your page, then Amplitude's SDK loads on your page automatically and you can use Segment's to begin sending events right away. -### React Native device mode set up - -{% include content/react-dest.md %} - - ## Page and Screen If you're not familiar with the Segment Specs, take a look to understand what the [Page](/docs/connections/spec/page/) and [Screen](/docs/connections/spec/screen/) methods do. By default, Segment does not send these standard calls to Amplitude. However, you can enable them with the destination settings below, which you can find under the "Optional Settings" tab. @@ -90,7 +85,7 @@ If you use Analytics.js (in either [device- or cloud-mode](/docs/connections/des Before you choose a setting, read about the Amplitude event type volume considerations. -When you use the **Track Named Pages** or **Track Categorized Pages** settings, Segment sends a Page or Screen call that includes the name or category. This option stores the page and screen name as a top-level event type. However, Amplitude [limits the number of distinct event types per project](https://help.amplitude.com/hc/en-us/articles/115002923888-Limits#h_8d90ca72-bf91-4161-88b2-01b5448b0859). Each unique Page and Screen name, Page and Screen category, and Track event counts towards the event type limit. Anything past the instrumentation limit is not visualized in Amplitude. +When you use the **Track Named Pages** or **Track Categorized Pages** settings, Segment sends a Page or Screen call that includes the name or category. This option stores the page and screen name as a top-level event type. However, Amplitude [limits the number of distinct event types per project](https://help.amplitude.com/hc/en-us/articles/115002923888-Limits#h_8d90ca72-bf91-4161-88b2-01b5448b0859){:target="_blank"}. Each unique Page and Screen name, Page and Screen category, and Track event counts towards the event type limit. Anything past the instrumentation limit is not visualized in Amplitude. When you use the **Track All Pages** setting, Segment sends a `Loaded a Page` event type to Amplitude. When you use the generic event name, it is applied to all Page and Screen calls, so you don't hit the event type limit in your project in Amplitude. The page or screen name is still available as an attribute of the `Loaded a Page` event, and you can query it as an event property. The `Loaded a Page` event is counted as one event type, and Amplitude does not place any limits on the number of unique event property values in Amplitude. @@ -292,7 +287,7 @@ Property names should be `camelCase` for Android implementations, and `snake_cas > info "" > Amplitude [doesn't support currency conversion](https://help.amplitude.com/hc/en-us/articles/115003116888-Track-revenue){:target="_blank"} -. Normalize all revenue data to your currency of choice before sending it to Amplitude. +Normalize all revenue data to your currency of choice before sending it to Amplitude. ### Revenue @@ -509,7 +504,7 @@ analytics.alias({ ### sessionId -[Segment doesn't have a concept for a session](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/). +[Segment doesn't have a concept for a session](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/){:target="_blank"}. Device-mode calls to Amplitude include session information because Segment bundles Amplitude's SDK. To set up the same `sessionId` for cloud-mode calls to Amplitude, you must explicitly set the [`session_id`](https://developers.amplitude.com/docs/http-api-v2#optional-keyst){:target="_blank"} as an integration-specific option, as in the example below. @@ -703,10 +698,10 @@ Segment logs the user out by setting the `userId` to `nil` and calling Amplitude Amplitude offers a robust [Instrumentation Explorer/Debugger](https://help.amplitude.com/hc/en-us/articles/360003032451-Instrumentation-Explorer-Debugger){:target="_blank"}. This is a helpful Chrome extension that shows each page interaction that sends an event to Amplitude. -### Amplitude/Segment FAQ +### I Don't See My Data In Amplitude -Have a question about the Amplitude/Segment integration that's already been answered? Take a look at [Amplitude's FAQ](https://developers.amplitude.com/docs/segment-amplitude-integration){:target="_blank"} for common issues integrating Amplitude with Segment. +If you don't your data arrive in Amplitude, see the Analytics.js [guide to validating data being transmitted](/docs/connections/sources/catalog/libraries/website/javascript/troubleshooting#is-data-being-transmitted-to-your-third-party-destinations) to your third-party destination. -### I Don't See My Data In Amplitude +Also, Amplitude doesn't support fields with a value of an array with nested arrays. -If you aren't seeing your data arrive in Amplitude, take a look at our Analytics.js [guide to validating data being transmitted](/docs/connections/sources/catalog/libraries/website/javascript/troubleshooting#is-data-being-transmitted-to-your-third-party-destinations) to your third-party destination. +For more information on the Amplitude/Segment integration, view Amplitude's [Import Segment Data](https://docs.developers.amplitude.com/data/sources/segment/){:target="_blank"} documentation. diff --git a/src/connections/destinations/catalog/anodot/index.md b/src/connections/destinations/catalog/anodot/index.md index 3264445555..b112ad6532 100644 --- a/src/connections/destinations/catalog/anodot/index.md +++ b/src/connections/destinations/catalog/anodot/index.md @@ -3,20 +3,20 @@ title: Anodot Destination rewrite: true id: 5feb4422ecbab07ade913573 --- -[Anodot](https://www.anodot.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) rapidly identifies revenue-critical issues by leveraging AI to constantly monitor and correlate business performance, providing real-time alerts and forecasts. +[Anodot](https://www.anodot.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} rapidly identifies revenue-critical issues by leveraging AI to constantly monitor and correlate business performance, providing real-time alerts and forecasts. This destination is maintained by Anodot. For any issues with the destination, [contact the Anodot Support team](mailto:support@anodot.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Anodot" in the Destinations Catalog, and select the Anodot destination. 3. Choose which Source should send data to the Anodot destination. -4. Go to Anodot's [Data Management Page](https://app.anodot.com/#!/r/bc/data-manager), create a new "Segment" Source, and copy the Integration Token. +4. Go to Anodot's [Data Management Page](https://app.anodot.com/#!/r/bc/data-manager){:target="_blank”}, create a new "Segment" Source, and copy the Integration Token. 5. Enter the Integration Token into the "API Key" field in the Anodot Destination settings in Segment. -6. [Create a Stream in Anodot](https://support.anodot.com/hc/en-us/articles/360018508380-Segment-Integration). Choose which Segment Methods and which [Dimensions](https://support.anodot.com/hc/en-us/articles/360009537879-Mapping-Dimensions-to-Measures-BETA-) to track. +6. [Create a Stream in Anodot](https://support.anodot.com/hc/en-us/articles/360018508380-Segment-Integration){:target="_blank”}. Choose which Segment Methods and which [Dimensions](https://support.anodot.com/hc/en-us/articles/360009537879-Mapping-Dimensions-to-Measures-BETA-){:target="_blank”} to track. ## Page diff --git a/src/connections/destinations/catalog/appcues/index.md b/src/connections/destinations/catalog/appcues/index.md index 16c9880a3c..d01918ffcb 100644 --- a/src/connections/destinations/catalog/appcues/index.md +++ b/src/connections/destinations/catalog/appcues/index.md @@ -4,25 +4,28 @@ title: Appcues Destination hide-cmodes: true id: 554926390a20f4e22f0fb38a --- -[Appcues](https://www.appcues.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) adds an experience layer to your product so you can build user onboarding, NPS surveys, or feature announcements in minutes instead of weeks. The Appcues JavaScript Destination is open-source. You can browse the code [on GitHub](https://github.com/appcues/analytics.js-integration-appcues). +[Appcues](https://www.appcues.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} adds an experience layer to your product so you can build user onboarding, NPS surveys, or feature announcements in minutes instead of weeks. The Appcues JavaScript Destination is open-source. You can browse the code [on GitHub](https://github.com/appcues/analytics.js-integration-appcues){:target="_blank”}. ## Getting Started 1. From the Segment web app, click **Catalog**. 2. Search for "Appcues" in the Catalog, select it, and choose the source you'll connect to the destination. -3. In the destination settings, enter your `Account ID` (for client-side integration functionality) and/or your `API Key` (for server-side integration functionality) from the [Appcues account page](https://my.appcues.com/account). +3. In the destination settings, enter your `Account ID` (for client-side integration functionality) and/or your `API Key` (for server-side integration functionality) from the [Appcues account page](https://my.appcues.com/account){:target="_blank”}. ### Server -As an alternative to a traditional JavaScript implementation, Appcues offers a server-side destination with Segment. +As an alternative to a traditional JavaScript implementation, Appcues offers a server-side destination with Segment. -You may find the server-side destination useful if you'd like to send user profile or event data to Appcues from another Segment partner service. You can use the server-side destination alongside the JavaScript destination, which you may find preferable to routing all data through the JavaScript destination. +You may find the server-side destination useful if you'd like to send user profile or event data to Appcues from another Segment partner service. You can use the server-side destination alongside the JavaScript destination, which you may find preferable to routing all data through the JavaScript destination. As with the JavaScript destination, you can segment and target user profile and event data received through the Appcues server-side Segment destination. For example, using the server-side destination, you can direct customer profile and event data from a CRM tool into Appcues. You can then use the directed data for content targeting and user segmentation in the Appcues content editor, alongside data from Segment's `analytics.js` destination. +> info "Implementations can only be used with server or mobile sources" +> Analytics.js sources will default to a device-mode connection. + ## Page Refer to the Segment Spec for information about the [Page method](/docs/connections/spec/page/). The following represents an example `page` call: diff --git a/src/connections/destinations/catalog/appfit/index.md b/src/connections/destinations/catalog/appfit/index.md new file mode 100644 index 0000000000..f6410ada85 --- /dev/null +++ b/src/connections/destinations/catalog/appfit/index.md @@ -0,0 +1,7 @@ +--- +title: 'AppFit Destination' +hidden: true +id: 64b67be0d0dd66094c162ca7 +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/appsflyer/index.md b/src/connections/destinations/catalog/appsflyer/index.md index b3955c5b8a..b369b36dc5 100644 --- a/src/connections/destinations/catalog/appsflyer/index.md +++ b/src/connections/destinations/catalog/appsflyer/index.md @@ -14,8 +14,6 @@ Segment's Appsflyer destination code is open source and available on GitHub. You ## Getting Started -{% include content/connection-modes.md %} - 1. From the Segment web app, click **Catalog**. 2. Search for "AppsFlyer" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. In the destination settings, enter your `AppsFlyer Dev Key`, which can be retrieved from the App Settings section of your AppsFlyer account. @@ -26,7 +24,7 @@ Segment's Appsflyer destination code is open source and available on GitHub. You #### Additional device-mode set up for iOS 14 support -Segment updated the AppsFlyer iOS SDK to use version `6.0 beta` to prepare for tracking changes in iOS 14. The SDK beta version is compatible with the beta version of iOS 14 released by Apple, and supports both AppsFlyer's aggregate attribution, and Apple's `AppTrackingTransparency` framework, and more. See [the AppsFlyer blog post](https://www.appsflyer.com/blog/privacy-centric-attribution-ios14/) about AppsFlyer's new privacy-centric attribution model. +Segment updated the AppsFlyer iOS SDK to use version `6.0 beta` to prepare for tracking changes in iOS 14. The SDK beta version is compatible with the beta version of iOS 14 released by Apple, and supports both AppsFlyer's aggregate attribution, and Apple's `AppTrackingTransparency` framework, and more. See [the AppsFlyer blog post](https://www.appsflyer.com/blog/privacy-centric-attribution-ios14/){:target="_blank"} about AppsFlyer's new privacy-centric attribution model. To use the latest AppsFlyer SDK to collect IDFAs, do the following: @@ -62,54 +60,26 @@ To prevent this, you can enable the new **Fallback to send IDFV when advertising #### Additional React Native device-mode set up -{% include content/react-dest.md %} +{% include content/react2-dest.md %} -### Server +## Server -AppsFlyer offers an **augmentative** server-side [HTTP API](https://support.appsflyer.com/hc/en-us/articles/207034486-Server-to-Server-In-App-Events-API-HTTP-API-) intended for use along side the AppsFlyer mobile SDK. Use the cloud-mode destination _with_ the mobile SDK to link out-of-app events (such as website or offline purchases) with attributed users and devices. +AppsFlyer offers an **augmentative** server-side [HTTP API](https://support.appsflyer.com/hc/en-us/articles/207034486-Server-to-Server-In-App-Events-API-HTTP-API-){:target="_blank"} intended for use along side the AppsFlyer mobile SDK. Use the cloud-mode destination _with_ the mobile SDK to link out-of-app events (such as website or offline purchases) with attributed users and devices. **Important**: The cloud-mode destination is not meant to replace the device-mode destination, and you should not use the cloud-mode destination by itself. AppsFlyer requires that you bundle the mobile SDK to correctly attribute user actions. Remember that if you pass in an `appsFlyerId` on cloud-mode calls, you cannot prevent events from sending to AppsFlyer from the Segment app. If you want to use AppsFlyer server-side only, contact your AppsFlyer representative, as this is an Enterprise Customer Feature. -## Identify - -If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example iOS call would look like: - -```swift -[[SEGAnalytics sharedAnalytics] identify:@"12091906-01011992" - traits:@{ @"email": @"john.doe@example.com" }]; -``` - -When you call `.identify()`, Segment uses AppsFlyer's `setCustomerUserID` to send the `userId` that was passed in. - -**Note:** `identify` calls are not supported using AppsFlyer's HTTP API at the moment. You can only send `.identify` calls if you have the AppsFlyer SDK bundled. - -## Track - -If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example iOS call would look like: - -```swift -[[SEGAnalytics sharedAnalytics] track:@"Article Completed" - properties:@{ @"title": @"How to Create a Tracking Plan", @"course": @"Intro to Analytics" }]; -``` - -When you call `track`, Segment translates it automatically and sends the event to AppsFlyer. - -Segment includes all the event properties as callback parameters on the AppsFlyer event, and automatically translate `properties.revenue` to the appropriate AppsFlyer purchase event properties based on the spec'd properties. - -Finally, Segment uses AppsFlyer's `transactionId` deduplication when you send an `orderId` (see the [e-commerce spec](/docs/connections/spec/ecommerce/v2/)). - -### Server +### Configuring Server-side Delivery If you'd like to attribute offline events with a certain user or device, the server-side destination may be employed. AppsFlyer requires the following properties for this attribution: -**AppsFlyer Device ID** +**AppsFlyer ID** -Send the **AppsFlyer Device ID** with each event at `integrations.AppsFlyer.appsFlyerId`, see example below. -This identifier is unique to each device and can be [retrieved using the AppsFlyer SDK](https://support.appsflyer.com/hc/en-us/articles/207034486-Server-to-Server-In-App-Events-API-HTTP-API-). It is a good idea to store this value in an external database where it may be easily accessible by a server or website environments. +Send the **AppsFlyer ID** with each event at `integrations.AppsFlyer.appsFlyerId`, see example below. +This identifier is unique to each device and can be [retrieved using the AppsFlyer SDK](https://support.appsflyer.com/hc/en-us/articles/207034486-Server-to-Server-In-App-Events-API-HTTP-API-){:target="_blank"}. It is a good idea to store this value in an external database where it may be easily accessible by a server or website environments. **Device Type** @@ -139,9 +109,12 @@ analytics.track({ ``` > Check your specific [server-side library docs](/docs/connections/sources/#server) for specifics on how to format the method properly. +> info "" +> See the **Can Omit AppsFlyerId** and **Fallback to send IDFV when advertisingId key not present (Server-Side Only)** settings descriptions for details on excluding the previous fields in server-side events. + Finally, the server-side component will look for the following `properties` and handle them specially: -- `ip` (this should be the `ip` of your customer--this is not collected by Segment's libraries out-of-the-box) +- `ip` (this should be the `ip` of your customer--this is not collected by Segment's libraries out-of-the-box. Pass this into the payload under context so that AppsFlyer can properly attribute it.) - `timestamp` (refer to AppsFlyer's docs on [how they process timestamps](https://support.appsflyer.com/hc/en-us/articles/207034486-Server-to-Server-In-App-Events-API-HTTP-API-){:target="blank"}. Since the libraries generate a [timestamp](/docs/connections/spec/common/#timestamps), Segment always sets this value) - `currency` (defaults to `"USD"`) - `revenue` (For `Order Completed` events, precedence is given to `total`, falling back to `properties.revenue`) @@ -151,15 +124,108 @@ All other `properties` will be sent to AppsFlyer as custom properties inside `ev > info "" > Be sure to calibrate/update the time window in AppsFlyer's dashboard to see your events! +### Send in-app events to Appsflyer v3 Endpoint + +When transmitting data serverside to Appsflyer, you have the option to enhance security by enabling the transmission of in-app events to [Appsflyer's v3 endpoint](https://dev.appsflyer.com/hc/reference/s2s-events-api3-post){:target="_blank"}, which authenticates requests using a more secure [S2S token](https://support.appsflyer.com/hc/en-us/articles/360004562377-Managing-API-and-Server-to-server-S2S-tokens){:target="_blank"}. + +To activate this feature, simply input your S2S token in the destination settings and toggle the "Use API v3" switch to the enabled position. + +### Send User Consent Preferences Server-side + +To transmit user consent data server-side, incorporate the consent preferences into the `integrations.AppsFlyer.consent_data` object. This can be done in either TCF or manual format, as outlined in [the AppsFlyer Send Event documentation](https://dev.appsflyer.com/hc/reference/s2s-events-api3-post){:target="_blank”}. + +```js +// node.js library example with tcf +analytics.track({ + event: 'Membership Upgraded', + userId: '97234974', + context: { + device: { + type: 'ios', + advertisingId: '159358' + } + }, + integrations: { + AppsFlyer: { + appsFlyerId: '1415211453000-6513894' + }, + consent_data: { + tcf: { + tcstring: "string", + cmp_sdk_version: 1, + cmp_sdk_id: 1, + gdpr_applies: 0, + policy_version: 1 + } + } + } +}); + +// node.js library example with manual consent +analytics.track({ + event: 'Membership Upgraded', + userId: '97234974', + context: { + device: { + type: 'ios', + advertisingId: '159358' + } + }, + integrations: { + AppsFlyer: { + appsFlyerId: '1415211453000-6513894' + }, + consent_data: { + manual: { + ad_personalization_enabled: 'true', + ad_user_data_enabled: 'true', + gdpr_applies: 'true' + } + } + } +}); +``` + +## Identify + +If you're not familiar with the Segment Spec, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example iOS call would look like: + +```swift +[[SEGAnalytics sharedAnalytics] identify:@"12091906-01011992" + traits:@{ @"email": @"john.doe@example.com" }]; +``` + +When you call Identify, Segment uses AppsFlyer's `setCustomerUserID` to send the `userId` that was passed in. + +**Note:** Identify calls are not supported using AppsFlyer's HTTP API at the moment. You can only send `.identify` calls if you have the AppsFlyer SDK bundled. + +## Track + +If you're not familiar with the Segment Spec, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example iOS call would look like: + +```swift +[[SEGAnalytics sharedAnalytics] track:@"Article Completed" + properties:@{ @"title": @"How to Create a Tracking Plan", @"course": @"Intro to Analytics" }]; +``` + +When you call Track, Segment translates it automatically and sends the event to AppsFlyer. + +Segment includes all the event properties as callback parameters on the AppsFlyer event, and automatically translates `properties.revenue` to the appropriate AppsFlyer purchase event properties based on the spec'd properties. + +Segment uses AppsFlyer's `transactionId` deduplication when you send an `orderId` (see Segment's [e-commerce spec](/docs/connections/spec/ecommerce/v2/) for more details). + ## Install Attributed ### Client Segment will automatically trigger an `Install Attributed` event if you have **trackAttributionData** enabled in your settings, and the Segment-AppsFlyer integration installed in your app. The event payload will adhere to the `Install Attributed` event specification documented [here](/docs/connections/spec/mobile/#install-attributed) and will propagate to your other downstream destinations. ### Server -If you are tracking events server-side, AppsFlyer can still send attribution postbacks but you will need to configure this functionality in your AppsFlyer account. To enable this, navigate to your AppsFlyer app and on the sidebar of the main screen click on **Integrated Partners** and search for Segment. You will be prompted with a couple of configuration options and asked to input your Segment Write Key. Once enabled, successfully attributed app installs will begin showing up as `Install Attributed` events similar to the client side behavior documented above. +If you track events server-side, AppsFlyer can still send attribution postbacks, but you need to configure this functionality in your AppsFlyer account. To enable this: +1. Navigate to your AppsFlyer app and on the sidebar of the main screen select **Configuration > Partner Marketplace** and search for Segment. +2. Enter the configuration options and input your Segment Write Key. +Once enabled, successfully attributed app installs begin showing up as `Install Attributed` events similar to the client side behavior documented above. -If you are sending in the attribution data yourself, for iOS be sure the following properties are sent in within the campaign object on the `Install Attributed` or `Application Opened` event so Appsflyer can correctly attribute it as an Apple Search Ad event. These values should be returned by the [Apple Search Ads API](https://searchads.apple.com/help/reporting/0028-apple-ads-attribution-api): +If you are sending in the attribution data yourself, for iOS be sure the following properties are sent in within the campaign object on the `Install Attributed` or `Application Opened` event so Appsflyer can correctly attribute it as an Apple Search Ad event. These values should be returned by the [Apple Search Ads API](https://searchads.apple.com/help/reporting/0028-apple-ads-attribution-api){:target="_blank"}: ``` "campaign": { @@ -219,4 +285,4 @@ The destination does not automatically support out-of-the-box deeplinking (you n Therefore, you can use AppsFlyer's OneLink integration which is a single, smart, tracking link that can be used to track on both Android and iOS. OneLink tracking links can launch your app when it is already installed instead of redirecting the user to the app store. -For more details, review the [AppsFlyer OneLink set up Guide](https://support.appsflyer.com/hc/en-us/articles/207032246-OneLink-Setup-Guide). More information is available in the AppsFlyer SDK Integration Guides ([iOS](https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS), [Android](https://support.appsflyer.com/hc/en-us/articles/207032126-AppsFlyer-SDK-Integration-Android)) and Segment's mobile FAQs ([iOS](/docs/connections/sources/catalog/libraries/mobile/ios/#faq), [Android](/docs/connections/sources/catalog/libraries/mobile/android/#faq)). +For more details, review the [AppsFlyer OneLink set up Guide](https://support.appsflyer.com/hc/en-us/articles/207032246-OneLink-Setup-Guide){:target="_blank"}. More information is available in the AppsFlyer SDK Integration Guides ([iOS](https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS{:target="_blank"}), [Android](https://support.appsflyer.com/hc/en-us/articles/207032126-AppsFlyer-SDK-Integration-Android){:target="_blank"}) and Segment's mobile FAQs ([iOS](/docs/connections/sources/catalog/libraries/mobile/ios/#faq), [Android](/docs/connections/sources/catalog/libraries/mobile/android/#faq)). diff --git a/src/connections/destinations/catalog/apptimize/index.md b/src/connections/destinations/catalog/apptimize/index.md index a24f9db1d2..267b921d74 100644 --- a/src/connections/destinations/catalog/apptimize/index.md +++ b/src/connections/destinations/catalog/apptimize/index.md @@ -3,11 +3,11 @@ rewrite: true title: Apptimize Destination id: 5537d3e80a20f4e22f0fb385 --- -[Apptimize](https://apptimize.com/) empowers product teams to efficiently run A/B tests, rollout and manage new features, and deliver personalized user experiences. Our Apptimize destination code is open-source. You can browse the code on GitHub for [iOS](https://github.com/Apptimize/analytics-ios-integration-apptimize) and [Android](https://github.com/Apptimize/analytics-android-integration-apptimize). +[Apptimize](https://apptimize.com/){:target="_blank"} empowers product teams to efficiently run A/B tests, rollout and manage new features, and deliver personalized user experiences. Our Apptimize destination code is open-source. You can browse the code on GitHub for [iOS](https://github.com/Apptimize/analytics-ios-integration-apptimize){:target="_blank"} and [Android](https://github.com/Apptimize/analytics-android-integration-apptimize){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Apptimize" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -60,7 +60,7 @@ Set the plist property `ApptimizeAppKey` to the corresponding app key for the ap #### Android -Use the [Apptimize.setup](https://sdk.apptimize.com/android/javadocs/javadoc-2.12.10/com/apptimize/Apptimize.html#setup(android.content.Context,%20java.lang.String) API to initialize Apptimize with the app key. +Use the [Apptimize.setup](https://sdk.apptimize.com/android/javadocs/javadoc-2.12.10/com/apptimize/Apptimize.html#setup(android.content.Context,%20java.lang.String){:target="_blank"} API to initialize Apptimize with the app key. It is important to note that if the app keys in the plist/code and the Segment dashboard do not match, the SDK will use the app key from the plist/code as it finishes initialization first. While it is safe to initialize Apptimize multiple times in the app, to avoid confusion, be very careful that the app key is the same in both the places. diff --git a/src/connections/destinations/catalog/asayer/index.md b/src/connections/destinations/catalog/asayer/index.md index 76968b55de..37a1d7555a 100644 --- a/src/connections/destinations/catalog/asayer/index.md +++ b/src/connections/destinations/catalog/asayer/index.md @@ -3,15 +3,14 @@ rewrite: true title: Asayer Destination id: 5d00754256e478000114784f --- -[Asayer](https://asayer.io) is a session replay tool for engineering teams. It lets you capture the full picture of each user session on your website so you can quickly solve issues and improve your customer experience. +[Asayer](https://asayer.io){:target="_blank"} is a session replay tool for engineering teams. It lets you capture the full picture of each user session on your website so you can quickly solve issues and improve your customer experience. This destination is maintained by Asayer. For any issues with the destination, [contact the Asayer Support team](mailto:support@asayer.io). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Asayer" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -45,7 +44,7 @@ analytics.identify("userId123", { }); ``` -**NOTE:** All traits, as well as `userId` and `anonymousId` fields must be explicitly enabled within the Asayer dashboard under [Preferences -> Custom Fields](https://app.openreplay.com/client/custom-fields) before they will successfully send. +**NOTE:** All traits, as well as `userId` and `anonymousId` fields must be explicitly enabled within the Asayer dashboard under [Preferences -> Custom Fields](https://app.openreplay.com/client/custom-fields){:target="_blank"} before they will successfully send. ## Track diff --git a/src/connections/destinations/catalog/astrolabe/index.md b/src/connections/destinations/catalog/astrolabe/index.md new file mode 100644 index 0000000000..26cae4ee43 --- /dev/null +++ b/src/connections/destinations/catalog/astrolabe/index.md @@ -0,0 +1,75 @@ +--- +title: Astrolabe Destination +id: 64d2643196f4937712e54198 +--- + +[Astrolabe](https://astrolabe.so/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a Revenue Operations Platform built for go-to-market teams to generate pipelines, prioritize, close, and grow accounts. It's a no-code AI-based platform that empowers teams to easily access data, build advanced predictive machine learning models, create efficient workflows, and drive better results without technical expertise. + +This destination is maintained by Astrolabe. For any issues with the destination, [contact the Astrolabe Support team](mailto:team@astrolabe.so). + +## Getting started + +### Obtain your Astrolabe API Key + +1. Log in to your [Astrolabe workspace](https://console.astrolabe.so/login){:target="_blank"}. +2. Navigate to the [Connectors page](https://console.astrolabe.so/connectors){:target="_blank"} and click **Add Connector**. +3. Choose the **Segment.com Connector**. +4. Name the Connector and click **Continue**. +5. Decide whether to allow or block users with free email providers, then click **Finish**. +6. Copy the **API key** displayed in the dialog window. + +### Add Astrolabe Destination to your Segment Workspace + +1. In the Segment web app, go to **Connections > Catalog** and then click on the **Destinations** tab. +2. Search for **Astrolabe** and select it. +3. Click **Add destination**. +4. Choose an existing data Source to connect to **Astrolabe**. +5. Give the destination a name that is recognizable. +6. Paste the **Astrolabe API key** (copied earlier). +7. Enable the destination by changing the bottom **Enable Destination** toggle to active. +8. Click **Save Changes**. + +## Supported methods + +Astrolabe supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). + +### Identify + +If you aren't familiar with the Segment Spec, take a look at the [Identify method documentation](/docs/connections/spec/identify/) to learn about what it does. An example call would look like: + +```js +analytics.identify("userId123", { + email: "john.doe@example.com", +}); +``` + +Segment sends Identify calls to Astrolabe as an `identify` event. When you identify a new user, Astrolabe creates a new User record. If the User already exists, Astrolabe updates the User's properties. + +### Group + +If you aren't familiar with the Segment Spec, take a look at the [Group method documentation](/docs/connections/spec/group/) to learn about what it does. An example call would look like: + +```js +analytics.group("0e8c78ea9d97a7b8185e8632", { + name: "Initech", + industry: "Technology", + employees: 329, + plan: "enterprise", + "total billed": 830, +}); +``` + +Segment sends Group calls to Astrolabe as an `group` event. A `group` event can create an Account, If the Account already exists, Astrolabe updates the Account's properties. A `group` event can also associate a User to an Account within Astrolabe. + +### Track + +If you aren't familiar with the Segment Spec, take a look at the [Track method documentation](/docs/connections/spec/track/) to learn about what it does. An example call would look like: + +```js +analytics.track("User Registered", { + plan: "Pro Annual", + accountType: "Facebook", +}); +``` + +Segment sends Track calls to Astrolabe as a `track` event. \ No newline at end of file diff --git a/src/connections/destinations/catalog/atatus/index.md b/src/connections/destinations/catalog/atatus/index.md index 3c0d29c3f5..63e0c5562a 100644 --- a/src/connections/destinations/catalog/atatus/index.md +++ b/src/connections/destinations/catalog/atatus/index.md @@ -1,10 +1,9 @@ --- title: 'Atatus Destination' -hidden: true id: 54c02204db31d978f14a7f6d --- -[Atatus](https://www.atatus.com/) provides visibility into the performance of an application and its underlying infrastructure under a single dashboard. This visibility can help businesses identify and diagnose issues, and take corrective action to prevent or resolve application issues. +[Atatus](https://www.atatus.com/){:target="_blank"} provides visibility into the performance of an application and its underlying infrastructure under a single dashboard. This visibility can help businesses identify and diagnose issues, and take corrective action to prevent or resolve application issues. ## Getting Started Before you start, make sure Atatus supports the source type and connection mode you’ve chosen to implement. You can learn more about [connection modes here](/docs/connections/destinations/#connection-modes). diff --git a/src/connections/destinations/catalog/attribution/index.md b/src/connections/destinations/catalog/attribution/index.md index cba9637760..575f37fb40 100644 --- a/src/connections/destinations/catalog/attribution/index.md +++ b/src/connections/destinations/catalog/attribution/index.md @@ -3,15 +3,15 @@ title: Attribution Destination rewrite: true id: 54521fd525e721e32a72ee96 --- -[Attribution](http://attributionapp.com/) is an easy to use one stop dashboard for multi-touch attribution across all marketing channels. Attribution prides itself on high-fidelity and allows marketers to trace every visit, conversion or revenue dollar to the source. Marketers can easily integrate Attribution and Segment to begin measuring the effectiveness of their campaigns today. +[Attribution](http://attributionapp.com/){:target="_blank"} is an easy to use one stop dashboard for multi-touch attribution across all marketing channels. Attribution prides itself on high-fidelity and allows marketers to trace every visit, conversion or revenue dollar to the source. Marketers can easily integrate Attribution and Segment to begin measuring the effectiveness of their campaigns today. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Attribution" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "Project ID" into your Segment Settings UI which you can find from your [Attribution settings](https://dashboard.attributionapp.com/v1/#!/settings). +3. Enter the "Project ID" into your Segment Settings UI which you can find from your [Attribution settings](https://dashboard.attributionapp.com/v1/#!/settings){:target="_blank"}. 4. It will take 15 - 30 minutes for data to begin populating on your Attribution dashboard. ![gettingstarted](images/att1.png) diff --git a/src/connections/destinations/catalog/auryc/index.md b/src/connections/destinations/catalog/auryc/index.md index a21d6550fd..014062bc87 100644 --- a/src/connections/destinations/catalog/auryc/index.md +++ b/src/connections/destinations/catalog/auryc/index.md @@ -3,19 +3,18 @@ rewrite: true title: Auryc Destination id: 5cae592103251a0001c2820a --- -[Auryc](https://www.auryc.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a client-side journey intelligence platform that surfaces real-time insights with powerful visual context across all of your digital ecommerce journeys. Auryc helps enterprises find and resolve the customer journey issues that directly impact conversions and customer satisfaction. +[Auryc](https://www.auryc.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a client-side journey intelligence platform that surfaces real-time insights with powerful visual context across all of your digital ecommerce journeys. Auryc helps enterprises find and resolve the customer journey issues that directly impact conversions and customer satisfaction. This source is maintained by Auryc. For any issues with the destination, [contact the Auryc Support team](mailto:segment@auryc.com). -{% include content/beta-note.md %} It also means that, for the time being, there is a longer delay for us to deploy it to your analytics.js after you enable; expect about 24 hours for it to render on your site. ## Getting Started -{% include content/connection-modes.md %} -1. Go to your [Auryc Installation Guides](https://portal.auryc.com/auth/session?modal=integrations) and click **Install Segment**. + +1. Go to your [Auryc Installation Guides](https://portal.auryc.com/auth/session?modal=integrations){:target="_blank”} and click **Install Segment**. 2. On the Segment page, log in and authorize the Auryc Destination. 3. Select the workspace and source you to add Auryc to, and click **Allow**. diff --git a/src/connections/destinations/catalog/autopilotapp/index.md b/src/connections/destinations/catalog/autopilotapp/index.md index 06bdd11866..0fb28a7334 100644 --- a/src/connections/destinations/catalog/autopilotapp/index.md +++ b/src/connections/destinations/catalog/autopilotapp/index.md @@ -13,13 +13,14 @@ This destination is maintained by Ortto. For any issues with the destination, [c ## Getting Started -{% include content/connection-modes.md %} +> info "" +> You need Workspace Owner permissions to create the Ortto destination through OAuth on Ortto's website. 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Ortto" in the Destinations Catalog, and select the "Ortto" destination. 3. Click **Configure Ortto** and choose which Source should send data to the "Ortto" destination. 4. If requested, specify the Destination Name for your "Ortto" destination, and click **Save**. -5. Complete [integrating your Ortto account with Segment](https://help.ortto.com/user/latest/data-sources/configuring-a-new-data-source/3rd-party-integrations/segment.html), which automatically configures your Ortto API keys within your "Ortto" destination in Segment. +5. Complete [integrating your Ortto account with Segment](https://help.ortto.com/user/latest/data-sources/configuring-a-new-data-source/3rd-party-integrations/segment.html){:target="_blank"}, which automatically configures your Ortto API keys within your "Ortto" destination in Segment. ## Supported methods @@ -52,4 +53,4 @@ analytics.track('Login Button Clicked', { }); ``` -Segment sends Track calls to Ortto as a `track` event. \ No newline at end of file +Segment sends Track calls to Ortto as a `track` event. diff --git a/src/connections/destinations/catalog/autopilothq/index.md b/src/connections/destinations/catalog/autopilothq/index.md index c040ade4fa..0385ead9d2 100644 --- a/src/connections/destinations/catalog/autopilothq/index.md +++ b/src/connections/destinations/catalog/autopilothq/index.md @@ -3,19 +3,16 @@ rewrite: true title: Autopilot Destination id: 5515e05c0a20f4e22f0fb36f --- -[Autopilot](https://www.autopilothq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps thousands of organizations around the world automate their marketing with visual and simple customer journey marketing software. +[Autopilot](https://www.autopilothq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps thousands of organizations around the world automate their marketing with visual and simple customer journey marketing software. -This destination is maintained by Autopilot. See [Autopilot's documentation](https://support.autopilothq.com/hc/en-us/categories/200396835-Segment) for more information. For any issues with the destination, [contact our friends at Autopilot](https://support.autopilothq.com/hc/en-us/requests/new). +This destination is maintained by Autopilot. See [Autopilot's documentation](https://support.autopilothq.com/hc/en-us/categories/200396835-Segment){:target="_blank”} for more information. For any issues with the destination, [contact our friends at Autopilot](https://support.autopilothq.com/hc/en-us/requests/new){:target="_blank”}. Are you instead trying to set up Autopilot as a Source to get data from Autopilot into your data warehouse or other downstream tools? See our documentation on our [Autopilot source](/docs/connections/sources/catalog/cloud-apps/autopilothq/) instead. ## Getting Started - -{% include content/connection-modes.md %} - 1. From the Segment web app, click **Catalog**. 2. Search for "Autopilot" in the Catalog, select it, and choose which of your sources to connect the destination to. - 3. In the destination settings, enter your "API Key" from [here](https://login.autopilothq.com/login#settings/app-connections/segment-sync) or go to Autopilot: Settings -> App Connections -> Segment and copy/paste the API key which is listed there. + 3. In the destination settings, enter your "API Key" from [here](https://login.autopilothq.com/login#settings/app-connections/segment-sync){:target="_blank”} or go to Autopilot: Settings -> App Connections -> Segment and copy/paste the API key which is listed there. 4. Once enabled 'identify' and 'track' calls will be sent to Autopilot. ## Identify @@ -29,6 +26,9 @@ analytics.identify('12091906-01011992', { }); ``` +> info "Engage requires Identify calls from the Autopilot destination to include email or userId" +> If neither are provided in the payload then the Autopilot destination's [Event Delivery](/docs/connections/event-delivery/) tab will show a 400 Bad Request error message : _"Missing unique identifier traits. Either `email` or `user_id` traits must be provided"_. + ## Track If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: @@ -48,4 +48,4 @@ Additional Autopilot Tracking code will be required on your site to unlock the f - Triggering Headsup messages. - User association using the Autopilot JavaScript library. -For complete details, visit the Autopilot page [How to use Segment with Autopilot](https://support.autopilothq.com/hc/en-us/articles/203658119). +For complete details, visit the Autopilot page [How to use Segment with Autopilot](https://support.autopilothq.com/hc/en-us/articles/203658119){:target="_blank”}. diff --git a/src/connections/destinations/catalog/avo/images/api-key.png b/src/connections/destinations/catalog/avo/images/api-key.png new file mode 100644 index 0000000000..c038148bde Binary files /dev/null and b/src/connections/destinations/catalog/avo/images/api-key.png differ diff --git a/src/connections/destinations/catalog/avo/images/avo-destination.png b/src/connections/destinations/catalog/avo/images/avo-destination.png new file mode 100644 index 0000000000..7289986883 Binary files /dev/null and b/src/connections/destinations/catalog/avo/images/avo-destination.png differ diff --git a/src/connections/destinations/catalog/avo/images/issue-sidebar.png b/src/connections/destinations/catalog/avo/images/issue-sidebar.png new file mode 100644 index 0000000000..de597c2c1c Binary files /dev/null and b/src/connections/destinations/catalog/avo/images/issue-sidebar.png differ diff --git a/src/connections/destinations/catalog/avo/images/select-source.png b/src/connections/destinations/catalog/avo/images/select-source.png new file mode 100644 index 0000000000..35307c852a Binary files /dev/null and b/src/connections/destinations/catalog/avo/images/select-source.png differ diff --git a/src/connections/destinations/catalog/avo/index.md b/src/connections/destinations/catalog/avo/index.md new file mode 100644 index 0000000000..2afc044138 --- /dev/null +++ b/src/connections/destinations/catalog/avo/index.md @@ -0,0 +1,90 @@ +--- +title: Avo Destination +id: 65c2465d0d7d550aa8e7e5c6 +redirect_from: "/connections/destinations/catalog/actions-avo/" +--- + +**Avo lets you find, fix, and prevent data quality issues upstream.** World class data and product teams at companies like Fender, IKEA, and Wolt use Avo to guarantee event data quality upstream, so they can focus on building great user experiences. With Avo you get reliable data with less effort, by moving from reactive damage control to proactive data management and addressing your data quality issues at the source, where the data is created. + +With [Avo](https://avo.app){:target="\_blank”} Inspector, data quality is no longer a dream, it’s a workflow. +[Inspector](https://www.avo.app/data-observability){:target="\_blank”} lets you find, triage, fix, and prevent data quality issues in your event based data. Launch Inspector to discover all your data quality issues and systematically work towards better data, one resolved issue at a time. + +The Avo Inspector destination automatically extracts event schemas from your product events, sending only the signatures from the connected Segment sources to the Inspector API. **Avo Inspector receives no PII data from your source**. + +{% include content/plan-grid.md name="actions" %} + +## Supported methods + +### Track events + +The Avo destination supports Track events. + +Example of Track call: + +```js +analytics.track("Login", { + userName: "John", + city: "San Fransisco" + age: 32 +}); +``` + +This Track call is translated into an event signature that is sent to Avo's Inspector API. + +```js +{ + "eventName": "Login", + "properties": [ + {"userName": "string"}, + {"city": "string"} + {"age": "integer"} + ] +} +``` + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Select [Avo](https://app.segment.com/goto-my-workspace/destinations/catalog/actions-avo){:target="\_blank”} from the list of destinations, then click **Add destination**. +4. Select a source to connect to Avo (Actions) and click **Next**. +5. Enter a name for your Avo (Actions) destination and click **Create destination**. + +## Configure Avo + +### Get the Avo API key + +Before connecting the Segment source to Avo, you will need an API key for your source. + +1. Create your Avo workspace at avo.app (If you don’t have one already). +2. From the Avo workspace sidebar, select **Sources**. +3. Select an existing source or create a new one. (Avo recommends naming your Avo sources the same as your Segment sources, for example "Web", "iOS", "Android") + ![Select a source](images/select-source.png) +4. Click the **Inspector Setup** tab in the Avo source +5. Copy the API Key + ![Copy API key](images/api-key.png) + +### Configure Destination + +#### Avo Inspector API key + +You can copy the API key from your source in Avo. The API key allows Avo to map the events from your Segment source to the Avo source, to accurately compare your source’s event schemas to your Tracking Plan in Avo. + +#### Environment + +Environment describes which app environment the source is sent from, `Development | Staging | Production`. +Avo only generates issues for events in your `Production` environment, but you can see the event shapes for staging and development environments to make sure they are implemented correctly. + +#### App Version Property + +App Version Property is an optional **(but recommended)** field. Having accurate app release versions in Avo Inspector allows you to see how events change across releases. This helps you identify which releases an issue is impacting, and monitor for regressions in future releases after an issue has been resolved. + +Without app versions, the inspector has no way of differentiating between old and new releases, and might surface irrelevant issues based on old releases. Learn more about how Inspector uses releases in [Avo's documentation](https://www.avo.app/docs/inspector/inspector-issues-view#release-and-source-breakdown){:target="\_blank”}. + +For most mobile sources, Avo automatically fetches the app version from Segment Context. If you have an event property describing the app release version of your source (for example, “app_version”) you can provide it under App Version. + +If you are unsure of whether this applies to your source, or if you don’t know which event property to use, you can proceed with setting up the source and add this information later. + +![Select a source](images/avo-destination.png) + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/azure-function/index.md b/src/connections/destinations/catalog/azure-function/index.md index 890a801754..9628d80e7d 100644 --- a/src/connections/destinations/catalog/azure-function/index.md +++ b/src/connections/destinations/catalog/azure-function/index.md @@ -6,7 +6,7 @@ id: 5cbf95e258453600011d6d8f --- Segment makes it easy to send your data to Azure Function (and lots of other destinations). When you track your data using Segment's open-source [libraries](/docs/connections/sources/catalog/), Segment can translate and route your data to an Azure Function in the format it expects. -[Azure Function](https://azure.microsoft.com/en-us/services/functions) is a serverless compute service that enables you to run code on-demand without having to explicitly provision or manage infrastructure. Use Azure Functions to run a script or piece of code in response to a variety of events. +[Azure Function](https://azure.microsoft.com/en-us/services/functions){:target="_blank"} is a serverless compute service that enables you to run code on-demand without having to explicitly provision or manage infrastructure. Use Azure Functions to run a script or piece of code in response to a variety of events. {% include content/beta-note.md %} @@ -14,7 +14,7 @@ Segment makes it easy to send your data to Azure Function (and lots of other des # Getting Started -{% include content/connection-modes.md %} + ## Build an Azure Function to Process Segment Events diff --git a/src/connections/destinations/catalog/batch/index.md b/src/connections/destinations/catalog/batch/index.md index 85432c091a..e24f72a142 100644 --- a/src/connections/destinations/catalog/batch/index.md +++ b/src/connections/destinations/catalog/batch/index.md @@ -3,7 +3,7 @@ title: Batch Destination beta: true id: 596d11f870a3e552b957e6d9 --- -The Batch.com integration code is open sourced on GitHub. Feel free to check it out: [iOS](https://github.com/BatchLabs/ios-segment-integration), [Android](https://github.com/BatchLabs/android-segment-integration). +The Batch.com integration code is open sourced on GitHub. Feel free to check it out: [iOS](https://github.com/BatchLabs/ios-segment-integration){:target="_blank"}, [Android](https://github.com/BatchLabs/android-segment-integration){:target="_blank"}. ## Getting Started @@ -68,6 +68,10 @@ SEGAnalyticsConfiguration *config = [SEGAnalyticsConfiguration configurationWith [SEGAnalytics setupWithConfiguration:config]; ``` +## Server Side + +You can transmit server-side data from Segment to Batch with a [destination function](/docs/connections/functions/destination-functions/). Follow the steps outlined [in Batch's documentation](https://help.batch.com/en/articles/2208243-how-to-connect-batch-to-segment){:target="_blank"} for a smooth integration. + ## Screen When you call `screen` in your mobile app, we send a screen view to an event named `SEGMENT_SCREEN`. The screen name will be tracked as the event's label. diff --git a/src/connections/destinations/catalog/beamer/index.md b/src/connections/destinations/catalog/beamer/index.md index 3518075d68..879597c641 100644 --- a/src/connections/destinations/catalog/beamer/index.md +++ b/src/connections/destinations/catalog/beamer/index.md @@ -4,25 +4,24 @@ beta: true rewrite: true id: 5d2d8f56f159f30001b3c3a9 --- -[Beamer](https://www.getbeamer.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a changelog and notification center that lets you announce new features, product updates, special offers and more. +[Beamer](https://www.getbeamer.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a changelog and notification center that lets you announce new features, product updates, special offers and more. This destination is maintained by Beamer. For any issues with the destination, [contact the Beamer Support team](mailto:info@getbeamer.com). > success "" > **Good to know**: This page is about the Beamer Segment destination, which receives data from Segment. There's also a page about the [Beamer Segment source](/docs/connections/sources/catalog/cloud-apps/beamer/), which sends data _to_ Segment! -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Beamer" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Beamer settings](https://app.getbeamer.com/settings#api). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Beamer settings](https://app.getbeamer.com/settings#api){:target="_blank”}. -You can select any of the existing API keys in [your list](https://app.getbeamer.com/settings#api), but we recommend creating a new key to use specifically with your new Segment integration. Make sure to **enable the 'Create users' and 'Update users' permissions** for the API key you select. +You can select any of the existing API keys in [your list](https://app.getbeamer.com/settings#api){:target="_blank”}, but we recommend creating a new key to use specifically with your new Segment integration. Make sure to **enable the 'Create users' and 'Update users' permissions** for the API key you select. ## Identify @@ -38,4 +37,4 @@ analytics.identify({ `identify` calls will create a user in Beamer with the data available in each event, including basic attributes (such as ID, name or email) as well as any custom user `traits` you may send to Segment. -New users will show up in the [Users](https://app.getbeamer.com/users) section within your Beamer dashboard. +New users will show up in the [Users](https://app.getbeamer.com/users){:target="_blank”} section within your Beamer dashboard. diff --git a/src/connections/destinations/catalog/bento/index.md b/src/connections/destinations/catalog/bento/index.md index e8cdab0a57..070a082c03 100644 --- a/src/connections/destinations/catalog/bento/index.md +++ b/src/connections/destinations/catalog/bento/index.md @@ -1,16 +1,18 @@ --- title: Bento Destination id: 5ff25116284da6d5091e21b1 +hidden: true +private: true --- -[Bento](https://www.trybento.co/) allows you to create embedded onboarding solutions to support your users as they get started with your product, and beyond. Using your customer data you can tailor user experiences providing a personalized journey through your product. +[Bento](https://www.trybento.co/){:target="_blank"} allows you to create embedded onboarding solutions to support your users as they get started with your product, and beyond. Using your customer data you can tailor user experiences providing a personalized journey through your product. This destination is maintained by Bento. For any issues with the destination, [contact the Bento Support team](mailto:support@trybento.co). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Bento" in the Destinations Catalog, and select the "Bento" destination. diff --git a/src/connections/destinations/catalog/bing-ads/index.md b/src/connections/destinations/catalog/bing-ads/index.md index 35df3d19c5..96980cb2a5 100644 --- a/src/connections/destinations/catalog/bing-ads/index.md +++ b/src/connections/destinations/catalog/bing-ads/index.md @@ -3,27 +3,26 @@ title: Bing Ads Destination rewrite: true id: 54521fd525e721e32a72ee97 --- - [Bing Ads](https://bingads.microsoft.com) enables Marketers to track and monitor campaigns, clicks, CTRs, spend and budget. Bing Ads lets you place cross-device product ads in front of Bing, Yahoo, and MSN customers and support imported pay-per-click ad campaigns from third-party platforms like Google AdWords. With Bing Ads you can also retarget ads to customers after they complete an action like leaving a shopping cart or viewing a product without purchasing. Learn more about all you can do with Bing Ads [here](https://advertise.bingads.microsoft.com/en-us/resources/training/what-is-bing-ads). You can also browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-bing-ads). -## Getting Started +[Bing Ads](https://bingads.microsoft.com){:target="_blank"} enables Marketers to track and monitor campaigns, clicks, CTRs, spend and budget. Bing Ads lets you place cross-device product ads in front of Bing, Yahoo, and MSN customers and support imported pay-per-click ad campaigns from third-party platforms like Google AdWords. With Bing Ads you can also retarget ads to customers after they complete an action like leaving a shopping cart or viewing a product without purchasing. To learn more, see [Bing Ads](https://advertise.bingads.microsoft.com/en-us/resources/training/what-is-bing-ads){:target="_blank"}. You can also browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-bing-ads){:target="_blank"}. -{% include content/connection-modes.md %} +## Getting started -Before you can track conversions or target audiences, you need to create a UET tag in Bing Ads and then add it to the destination settings. Follow the steps within [the Bing Ads documentation to create a UET tag](https://advertise.bingads.microsoft.com/en-us/resources/training/universal-event-tracking). +Before you can track conversions or target audiences, create a UET tag in Bing Ads and then add it to the destination settings. Follow the steps within [the Bing Ads documentation to create a UET tag](https://advertise.bingads.microsoft.com/en-us/resources/training/universal-event-tracking){:target="_blank"}. -Once you have created the Tag ID, you can follow the steps below: +After you have created the Tag ID, follow the steps below: 1. From the Segment web app, click **Catalog**. -2. Search for "Bing Ads" in the Catalog, select it, and choose which of your sources to connect the destination to. Note the source must be sending events using our JavaScript library Analytics.js. -3. In the destination settings, enter your Tag Id +2. Search for "Bing Ads" in the Catalog, select it, and choose which of your sources to connect to the destination. Note that the source must be sending events using Segment's JavaScript library Analytics.js. +3. In the destination settings, enter your Tag Id. -Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Bing Ads' snippet on your page and sending data. +Your changes will appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Bing Ads snippets on your page and sending data. _**Note:** You'll only be able to include one Tag ID per source so make sure to associate the conversion goals to the correct Tag ID that is included in your settings._ ## Page -If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: +If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call looks like: ```javascript // name and properties are optional @@ -36,7 +35,7 @@ Page events will be sent to Bing Ads as a `Page Load` event where name and prope If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. -In order for us to map your track events to a Conversion Goal, you'll first need to create the goal on your Bing Ads account: +For Segment to map your track events to a Conversion Goal, first create the goal on your Bing Ads account: 1. Click the **Campaigns** tab, and then on the left pane, click **Conversion Tracking**. 2. Under **Conversion Tracking**, click **Conversion Goals**. @@ -45,9 +44,41 @@ In order for us to map your track events to a Conversion Goal, you'll first need 5. Choose the `Event` type of conversion and click **Next**. 6. Fill in the appropriate values. Make sure to add the Segment event name as the **label** field and to associate the goal to the correct Tag (**UET Tag**) that is set up in your Segment source. +## Setting up Custom Events: -![creating a goal in Bing Ads](images/creating-a-goal-new.png) +### Step 1: Add the UET Tag Tracking Code to Your Website +1. Copy the UET tag from Microsoft Advertising. +2. Paste the tag into the head or body section of your website's code. + +### Step 2: Create a Conversion Goal or Remarketing List + +Creating a conversion goal for a custom event: + +1. From the top menu, select **Tools > Conversion goals.** +2. Select the type of conversion you want to track. +3. Enter a descriptive name for your goal. +4. Fill in the appropriate values for your selected goal type. +5. Fine-tune your conversion goal with advanced settings. +6. Associate the UET tag with the conversion goal. + +Creating a remarketing list for a custom event: + +In Microsoft Advertising, click **Shared Library > Audiences.** +Click **Create audience > Remarketing list.** +For Whom to add to your audience, select **Custom events.** +Choose the parameters to report when logging custom events. +Set the membership duration. +Associate the UET tag with the remarketing list. + +### Step 3: Modify the UET Tag Tracking Code in Your Website + +1. Add the code for the custom event to the UET tag tracking code. +2. Follow the instructions provided to set up the event tag on your website. + +For Segment to map your track events to a Conversion Goal, create the goal in your Bing Ads account: + +For information about tracking custom events, see Microsoft's article [How to track custom events with UET](https://help.ads.microsoft.com/#apex/ads/en/56684/2-500){:target="_blank"} Only the event name is required - other properties are optional. An example track call is shown below: @@ -60,13 +91,13 @@ analytics.track('Order Completed', { }); ``` -**Label**: Event Name (`'Order Completed'` in this case) - -**Value**: `revenue` property - -**Category**: `category` property +| Property | Description | +| -------- | --------------------------------------------- | +| Label | Event Name (`'Order Completed'` in this case) | +| Value | `revenue` property | +| Category | `category` property | +| Action | Always set to `track` | -**Action**: always sent with value of `track` ## Troubleshooting diff --git a/src/connections/destinations/catalog/blackbaud-raisers-edge-nxt/index.md b/src/connections/destinations/catalog/blackbaud-raisers-edge-nxt/index.md new file mode 100644 index 0000000000..12891893d3 --- /dev/null +++ b/src/connections/destinations/catalog/blackbaud-raisers-edge-nxt/index.md @@ -0,0 +1,27 @@ +--- +title: Blackbaud Raiser's Edge NXT Destination +hide-boilerplate: true +hide-dossier: false +id: 63e42d44b0a59908dc4cacc6 +--- + +[Blackbaud Raiser's Edge NXT](https://www.blackbaud.com/products/blackbaud-raisers-edge-nxt){:target="_blank"} +is a comprehensive cloud-based fundraising and donor management software solution built specifically +for nonprofits and the social good community. + +## Getting started + +1. From the Segment app, click **Catalog**, then click **Destinations**. +2. Search for **Blackbaud Raiser's Edge NXT** in the Destinations Catalog, and select the destination. +3. Click **Configure Blackbaud Raiser's Edge NXT** in the top-right corner of the screen. +4. Select the source that will send data to Raiser's Edge NXT. +5. On the **Basic Settings** screen, click **Connect to Blackbaud Raiser's Edge NXT**, and authenticate with +your Blackbaud Developer account. +6. Visit the Blackbaud ["My subscriptions"](https://developer.blackbaud.com/subscriptions/){:target="_blank"} +page, copy your **Primary access key**, and paste the value into the **Blackbaud API Subscription Key** field. +7. Follow the steps in the Destinations Actions documentation on +[Customizing mappings](/docs/connections/destinations/actions/#customizing-mappings). You must select which +Event Types and/or Event Names will trigger each mapping. +8. Enable the destination and configured mappings. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/blendo/index.md b/src/connections/destinations/catalog/blendo/index.md index 8497db2cca..2b216d9ec5 100644 --- a/src/connections/destinations/catalog/blendo/index.md +++ b/src/connections/destinations/catalog/blendo/index.md @@ -3,19 +3,17 @@ title: Blendo Destination rewrite: true id: 5c6db002edda600001b2af8b --- -[Blendo](https://www.blendo.co/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is an ELT platform that syncs all your sales, marketing, financial or any other data, from your SaaS tools to your data warehouse. +[Blendo](https://www.blendo.co/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an ELT platform that syncs all your sales, marketing, financial or any other data, from your SaaS tools to your data warehouse. This destination is maintained by Blendo. For any issues with the destination, [contact the Blendo Support team](mailto:help@blendo.co). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Blendo" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI that was created when you set up your Segment pipeline. If you don't have it available, log in to your [Blendo account](https://app.blendo.co) and select the Segment pipeline you want to sent data to. Click on the "Edit" button and copy the "API Key" as shown in the modal window that appears. +3. Enter the "API Key" into your Segment Settings UI that was created when you set up your Segment pipeline. If you don't have it available, log in to your [Blendo account](https://app.blendo.co){:target="_blank”} and select the Segment pipeline you want to sent data to. Click on the "Edit" button and copy the "API Key" as shown in the modal window that appears. 4. Blendo will collect any Segment data as soon as they arrive but will sync data to your data warehouse according to your pipeline's schedule. By default, this is at the start of each hour. You can also manually sync any collected data by selecting your Segment pipeline from your pipelines' list, and clicking "Sync Now" on the overview section of your pipeline's syncing status. diff --git a/src/connections/destinations/catalog/blitzllama/index.md b/src/connections/destinations/catalog/blitzllama/index.md index fa9c7e9e8e..9087c19cf2 100644 --- a/src/connections/destinations/catalog/blitzllama/index.md +++ b/src/connections/destinations/catalog/blitzllama/index.md @@ -10,7 +10,7 @@ This destination is maintained by Blitzllama. For any issues with the destinatio ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. diff --git a/src/connections/destinations/catalog/bloomreach-engagement/index.md b/src/connections/destinations/catalog/bloomreach-engagement/index.md new file mode 100644 index 0000000000..4798a75df4 --- /dev/null +++ b/src/connections/destinations/catalog/bloomreach-engagement/index.md @@ -0,0 +1,191 @@ +--- +title: Bloomreach Engagement Destination +rewrite: true +id: 5d4d88bbd02041672e51e3ca +--- +[Bloomreach Engagement](https://www.bloomreach.com/en/products/engagement?spz=learn_orig/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a Customer Data & Experience Platform (CDXP) which creates a unified source of customer intelligence in real-time, ready for immediate activation using its own built‑in omnichannel marketing systems (web, email, push, mobile, text messages,etc.) powered by customer-centric analytics and artificial intelligence (product recommendations and predictions). + +This destination is maintained by Bloomreach Engagement. For any issues with the destination, contact [the Bloomreach Engagement Support team](mailto:support@exponea.com). + +## Getting Started + +1. From the Segment web app, click **Catalog**. +2. Search for "Bloomreach Engagement" in the Catalog, select it, and choose which of your sources to connect the destination to. +3. Create a [public API group](https://documentation.bloomreach.com/engagement/reference/authentication){:target="_blank”} for your Segment integration in your Bloomreach Engagement project. Don't forget to set the appropriate [group permissions](https://documentation.bloomreach.com/engagement/reference/authentication#using-the-api-groups){:target="_blank”} so you can receive events and customer updates. +4. Fill in the "API Base URL", "API key" and "Project Token" into your Segment Settings UI. You can find all of the above in the API settings page of your Bloomreach Engagement project. +5. Enter your Bloomreach Engagement hard ID and soft ID names into the corresponding fields to specify Segment's userId and anonymousId mapping into your Bloomreach Engagement ID structure. + + +## Common fields + +If you have not had a chance to review the Segment spec, take a look to understand what the [Common fields](/docs/connections/spec/common/) are. + +The `userId` and `anonymousId` common fields are used for all types of calls to identify the user in Bloomreach Engagement. Mapping of the IDs is based on the destination settings: + +| Segment | Bloomreach Engagement | +| -------- | -------- | +| userId | Bloomreach Engagement hard ID (e.g registered) | +| anonymousId | Bloomreach Engagement soft ID (e.g cookie) | + + + +Other common fields are used only for `track`, `page` and `screen` calls which are translated into Bloomreach Engagement events. The following common fields are mapped to Bloomreach Engagement: + + +| Segment | Bloomreach Engagement | +| -------- | -------- | +| timestamp | timestamp (string date is parsed to unix timestamp) | +| context: app, device, os, screen, referrer, campaign, user_agent, location | event properties (fields that contain child objects are flattened) | + + +## Page + +If you have not had a chance to review the Segment spec, take a look to understand what the [Page method](/docs/connections/spec/page/) does. + +Page calls will be sent to Bloomreach Engagement as a `page_visit` event with the `properties` field mapped into event properties and the `name` field mapped into the `page_name` property. + +Example of page call: + +```js +analytics.page("Home", { + url: "https://Bloomreach Engagement.com", + referrer: "http://google.com" +}) +``` + +This `page` call is translated into a `page_visit` event with the following properties: + +```js +"page_name": "Home", +"url": "https://Bloomreach Engagement.com", +"referrer": "http://google.com" +``` + +An optional event `session_ping` can be tracked along with `page_visit` for [automatic session tracking](https://documentation.bloomreach.com/engagement/docs/system-events#section-first-session-session-start-session-end){:target="_blank”}. You can adjust this behavior in your Bloomreach Engagement destination settings by toggling on and off the 'Track session ping' settings. The Bloomreach Engagement soft ID must be set to `cookie` and the `anonymousId` field must be present in the `page` call for session events to work. + + +## Screen + +If you have not had a chance to review the Segment spec, take a look to understand what the [Screen method](/docs/connections/spec/screen/) does. + +Screen calls will be sent to Bloomreach Engagement as a `screen_visit` event with the `properties` field mapped into event properties and the`name` field mapped into the `screen_name` property. + +Example of screen call: + +```objc +[[SEGAnalytics sharedAnalytics] screen:@"Home" + properties:@{ @"Feed Type": @"private" }]; +``` + +This `screen` call is translated into a `screen_visit` event with the following properties: + +```objc +"screen_name": "Home", +"Feed Type": "private" +``` + +An optional event `session_ping` can be tracked along with `screen_visit` for [automatic session tracking](https://documentation.bloomreach.com/engagement/docs/system-events#section-first-session-session-start-session-end){:target="_blank”}. You can adjust this behavior in your Bloomreach Engagement destination settings by toggling on and off the 'Track session ping' settings. The Bloomreach Engagement soft ID must be set to `cookie` for session events to work and `anonymousId` field must be present in the `screen` call for session events to work. + +## Track + +If you have not had a chance to review the Segment spec, take a look to understand what the [Track method](/docs/connections/spec/track/) does. + +Track calls will be sent to Bloomreach Engagement as events under name provided in the event field. The `properties` field will be mapped into event properties (objects will be flattened using underscore). + +Example of track call: + +```js +analytics.track("Registered", { + plan: "Pro Annual", + accountType: "Facebook" +}); +``` + +This track call is translated into a `Registered` event with the following properties: + +```js +"plan": "Pro Annual", +"accountType" : "Facebook" +``` + +## Identify + +If you have not had a chance to review the Segment spec, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. + +Identify calls will be sent to Bloomreach Engagement as customer updates with traits set as customer properties. + +Example of identify call: + +```js +analytics.identify("userId123", { + name: "John Doe", + email: "john.doe@example.com", + address: { + city: "New York", + country: "USA" + } +}); +``` + +This identify call is translated into a customer update for user with Bloomreach Engagement hard id `userId123` with properties: + +```js +"name": "John Doe", +"email": "john.doe@example.com", +"address_city": "New York", +"address_country": "USA", +``` + +## Alias + +If you have not had a chance to review the Segment spec, take a look to understand what the [Alias method](/docs/connections/spec/alias/) does. + +The alias call can be used to merge two user identities and their data to one. The `previousId` field should always contain a previously used `anonymousId`, as merging users by specifying two `userIds` is not supported. Sending an alias event with `previousId` and no `userId` will cause the event to be ignored. Note that users are also merged when any call specifies both a userId and an anonymousId, which previously belonged to two separate users. + +Example of alias call: + +```js +analytics.alias("507f191e81"); +``` +## Group + +If you have not had a chance to review the Segment spec, take a look to understand what the [Group method](/docs/connections/spec/group/) does. + +Group calls will be sent to Bloomreach Engagement as customer updates with group traits as customer properties prefixed with `group_` and `groupId` into `group_id`. For example: + +```js +analytics.group("123", { + name: "Bloomreach Engagement", + industry: "Technology" +}); +``` + +will be translated into a customer update with properties: + +```js +"group_id": "123", +"group_name": "Bloomreach Engagement", +"group_industry": "Technology", +``` + +Disclaimer: This is a beta version of group tracking and might be subject to change. + +## General + +### Nested Objects +Values that contain nested objects will be flattened using underscore. + +For example: +```js +analytics.identify('userId123', { + address: { + city: "New York", + country: "USA" + } +}); +``` +The properties would be sent as: +```js +"address_city": "New York", +"address_country": "USA", +``` diff --git a/src/connections/destinations/catalog/boomtrain/index.md b/src/connections/destinations/catalog/boomtrain/index.md index 7fd35884fe..b57ef788bb 100644 --- a/src/connections/destinations/catalog/boomtrain/index.md +++ b/src/connections/destinations/catalog/boomtrain/index.md @@ -1,11 +1,11 @@ --- -tile: Boomtrain Destination +title: Boomtrain Destination beta: true --- -Boomtrain is a predictive intelligence platform for marketers that uses machine learning to drive increased clicks, engagement and revenue through customer communications. [Visit Website](http://boomtrain.com). +Boomtrain is a predictive intelligence platform for marketers that uses machine learning to drive increased clicks, engagement and revenue through customer communications. [Visit Website](http://boomtrain.com){:target="_blank"}. -The Boomtrain destination with Segment supports the `identify`, `track` and `page` methods. Our JavaScript destination code is open sourced on GitHub. [Feel free to check it out](https://github.com/boomtrain/segmentio_integration). +The Boomtrain destination with Segment supports the `identify`, `track` and `page` methods. Our JavaScript destination code is open sourced on GitHub. [Feel free to check it out](https://github.com/boomtrain/segmentio_integration){:target="_blank"}. ## Getting Started @@ -23,7 +23,7 @@ When you enable Boomtrain in the Segment web app, your changes appear in the Seg ## Identify -When you call [`identify`](/docs/connections/spec/identify/) on analytics.js, we call `person.set` on the Boomtrain JavaScript Library with the `traits` object. A `userId` must be specified. For additional details about the Boomtrain `person.set` methods see [this article](https://boomtrain.readme.io/docs/set) on the Boomtrain Developer Documentation. +When you call [`identify`](/docs/connections/spec/identify/) on analytics.js, we call `person.set` on the Boomtrain JavaScript Library with the `traits` object. A `userId` must be specified. For additional details about the Boomtrain `person.set` methods see [this article](https://boomtrain.readme.io/docs/set){:target="_blank"} on the Boomtrain Developer Documentation. ## Track @@ -37,4 +37,4 @@ Segment lets you change these settings on the destination settings, without havi The App ID for your app can be taken from the destination guide provided by Boomtrain to your company. For additional information about your App ID or destination details, contact your Boomtrain CSM or [support@boomtrain.com](mailto:support@boomtrain.com). -If you have any questions, or suggestions on we can improve this documentation, feel free to [contact us](http://boomtrain.com/contact/). +If you have any questions, or suggestions on we can improve this documentation, feel free to [contact us](http://boomtrain.com/contact/){:target="_blank"}. diff --git a/src/connections/destinations/catalog/branch-metrics/index.md b/src/connections/destinations/catalog/branch-metrics/index.md index f37506b16c..03a9b33921 100644 --- a/src/connections/destinations/catalog/branch-metrics/index.md +++ b/src/connections/destinations/catalog/branch-metrics/index.md @@ -4,51 +4,34 @@ rewrite: true hide-personas-partial: true id: 5642909ae954a874ca44c582 --- -[Branch](https://branch.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) empowers you to increase mobile revenue with enterprise-grade links built to acquire, engage, and measure across all devices, channels, and platforms. An industry-leading mobile measurement and deep linking platform, trusted by the most top ranking apps to increase efficiency and revenue. +[Branch](https://branch.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} empowers you to increase mobile revenue with enterprise-grade links built to acquire, engage, and measure across all devices, channels, and platforms. An industry-leading mobile measurement and deep linking platform, trusted by the most top ranking apps to increase efficiency and revenue. --- **As of November 2019, the Branch mobile SDKs for Segment are in maintenance mode.** -Existing users of the Branch SDKs are unaffected, however new installations must implement the Branch native SDK separately. They can then enable Branch's [data export integration](https://docs.branch.io/integrations/segment-export/) to push additional data to Segment, and [data import integration](https://docs.branch.io/integrations/segment-import/) to pull additional Segment data into the Branch dashboard. +Existing users of the Branch SDKs are unaffected, however new installations must implement the Branch native SDK separately. They can then enable Branch's [data export integration](https://docs.branch.io/integrations/segment-export/) to push additional data to Segment, and [data import integration](https://docs.branch.io/integrations/segment-import/){:target="_blank"} to pull additional Segment data into the Branch dashboard. -The legacy instructions for implementing the Branch mobile SDKs for Segment have been removed from this documentation. If you need access to the removed sections, you can view them [here](https://web.archive.org/web/20191113225102//docs/connections/destinations/catalog/branch-metrics/). +The legacy instructions for implementing the Branch mobile SDKs for Segment have been removed from this documentation. If you need access to the removed sections, you can view them [here](https://web.archive.org/web/20191113225102//docs/connections/destinations/catalog/branch-metrics/){:target="_blank"}. --- -This destination is maintained by Branch. For any issues with the destination, [contact the Branch support team](https://support.branch.io/support/home). +This destination is maintained by Branch. For any issues with the destination, [contact the Branch support team](https://support.branch.io/support/home){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} - 1. From the Segment web app, click **Catalog**. 2. Search for "Branch Metrics" in the Catalog, select it, and choose which of your sources to connect the destination to. - 3. On Branch side you will need to [sign up for a free Branch account](http://branch.io/signup?bmp=segment) and follow the steps on their Dashboard to complete set up. - 4. Copy your `Branch Key` from the Settings page of your [Branch dashboard](https://dashboard.branch.io/#/settings). + 3. On Branch side you will need to [sign up for a free Branch account](http://branch.io/signup?bmp=segment){:target="_blank"} and follow the steps on their Dashboard to complete set up. + 4. Copy your `Branch Key` from the Settings page of your [Branch dashboard](https://dashboard.branch.io/#/settings){:target="_blank"}. 5. Paste the Branch Key in the destination settings and click **Save**. -### Adding Branch device-mode SDKs for React Native - - - -To add the Branch device-mode SDK to a [React Native](/docs/connections/sources/catalog/libraries/mobile/react-native/) project using Segment's `1.5.1≤` release: -1. Navigate to the root folder of your project, and run a `yarn add branch` command to add the destination SDK to your project. -2. Add an `import` statement to your project, as in the example below. - ```js - import Branch from '@segment/analytics-react-native-branch' - ``` -3. In the same project file, add the destination to the `using` list in the `await` command. - ```js - await analytics.setup('YOUR_WRITE_KEY', { - // Add any of your Device-mode destinations. This ensures they load before continuing. - using: Branch - // ... - }) - ``` -4. Finally, change to your iOS development folder ( `cd ios` ) and run `pod install`. +### Identifiers for app events +Identifiers are required for events to be imported to Branch. You must include: +- `context.device.advertisingId` and `context.os.name` and `context.os.version`, or +- `context.device.id` and `context.os.name` and `context.os.version` ## Identify diff --git a/src/connections/destinations/catalog/braze-cloud-mode-actions/index.md b/src/connections/destinations/catalog/braze-cloud-mode-actions/index.md index 8d3758cc6a..0cd30764e2 100644 --- a/src/connections/destinations/catalog/braze-cloud-mode-actions/index.md +++ b/src/connections/destinations/catalog/braze-cloud-mode-actions/index.md @@ -13,7 +13,7 @@ versions: --- {% include content/plan-grid.md name="actions" %} -[Braze](https://www.braze.com/), formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. +[Braze](https://www.braze.com/){:target="_blank"}, formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. > success "" > **Good to know**: This page is about the [Actions-framework](/docs/connections/destinations/actions/) Braze Segment destination. There's also a page about the [non-Actions Braze destination](/docs/connections/destinations/catalog/braze/). Both of these destinations receives data _from_ Segment. There's also the [Braze source](/docs/connections/sources/catalog/cloud-apps/braze//), which sends data _to_ Segment! @@ -40,7 +40,13 @@ Braze Cloud Mode (Actions) provides the following benefit over Braze Classic: ## Migration from Braze Classic -{% include content/ajs-upgrade.md %} - Keep the following in mind if you plan to move to Braze (Actions) from the classic Braze destination. {% include components/actions-map-table.html name="braze-cloud" %} + +## Troubleshooting + +### Missing required fields +Braze requires one of either `external_id`, `user_alias`, or `braze_id` to be present in all events sent. If events are failing to send, please check your event mappings to make sure these fields are resolving to valid values. + +### Missing events +When an event is sent under an alias, the event may seem to be missing when the alias cannot be found in Braze. This may be due to incorrect search for the alias in Braze. To search for an alias in Braze, use the format "Alias Label:Alias Name". For example, if the "Alias Label" field is set as email and "Alias Name" field is set as email address (for example: "test@email.com"), use "email:test@email.com" to search for the alias in Braze. diff --git a/src/connections/destinations/catalog/braze-cohorts/index.md b/src/connections/destinations/catalog/braze-cohorts/index.md deleted file mode 100644 index 5618b2553c..0000000000 --- a/src/connections/destinations/catalog/braze-cohorts/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Braze Cohorts Destination' -hidden: true -id: 63872c01c0c112b9b4d75412 -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/braze-web-device-mode-actions/index.md b/src/connections/destinations/catalog/braze-web-device-mode-actions/index.md index d954617b14..921224d8a7 100644 --- a/src/connections/destinations/catalog/braze-web-device-mode-actions/index.md +++ b/src/connections/destinations/catalog/braze-web-device-mode-actions/index.md @@ -34,8 +34,6 @@ Braze Web Mode (Actions) provides the following benefits over Braze Classic: {% include components/actions-fields.html settings="true"%} -{% include components/actions-fields.html%} - ## Other features Braze Web Mode (Actions) can use the following features of Braze. @@ -170,7 +168,5 @@ For more details on this snippet, see Braze's documentation [here](https://www.b ## Migration from Braze Classic -{% include content/ajs-upgrade.md %} - Keep the following in mind if you plan to move to Braze (Actions) from the classic Braze destination. {% include components/actions-map-table.html name="braze-web" %} diff --git a/src/connections/destinations/catalog/braze/index.md b/src/connections/destinations/catalog/braze/index.md index 99c6afdf8f..0cc90e7c3d 100644 --- a/src/connections/destinations/catalog/braze/index.md +++ b/src/connections/destinations/catalog/braze/index.md @@ -11,18 +11,18 @@ maintenance-content: > id: 54efbf12db31d978f14aa8b5 --- -[Braze](https://www.braze.com/), formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. +[Braze](https://www.braze.com/){:target="_blank"}, formerly Appboy, is an engagement platform that empowers growth by helping marketing teams to build customer loyalty through mobile, omni-channel customer experiences. The Braze Destination is open-sourced on GitHub. Source code for the following integrations is available: -- [iOS](https://github.com/Appboy/appboy-segment-ios) (maintained by Braze) -- [Android](https://github.com/Appboy/appboy-segment-android)(maintained by Braze) -- [Swift](https://github.com/braze-inc/analytics-swift-braze)(maintained by Braze) -- [Kotlin](https://github.com/braze-inc/braze-segment-kotlin)(maintained by Braze) -- [Web](https://github.com/segment-integrations/analytics.js-integration-appboy) (maintained by Segment) -- [Server](https://github.com/segmentio/integration-appboy) (maintained by Segment) +- [iOS](https://github.com/Appboy/appboy-segment-ios){:target="_blank"} (maintained by Braze) +- [Android](https://github.com/Appboy/appboy-segment-android){:target="_blank"}(maintained by Braze) +- [Swift](https://github.com/braze-inc/analytics-swift-braze){:target="_blank"}(maintained by Braze) +- [Kotlin](https://github.com/braze-inc/braze-segment-kotlin){:target="_blank"}(maintained by Braze) +- [Web](https://github.com/segment-integrations/analytics.js-integration-appboy){:target="_blank"} (maintained by Segment) +- [Server](https://github.com/segmentio/integration-appboy){:target="_blank"} (maintained by Segment) -For issues with mobile platforms (iOS, Android, Swift, or Kotlin), contact Braze support. For issues with Web or Server platforms, contact [Segment support](https://segment.com/help/contact). +For issues with mobile platforms (iOS, Android, Swift, or Kotlin), contact Braze support. For issues with Web or Server platforms, contact [Segment support](https://segment.com/help/contact){:target="_blank"}. > info "The Braze SDK contains three major versions" > If you are migrating from version 1 to version 2, see information about [migration from Version 1 to Version 2](/docs/connections/destinations/catalog/braze/#migrating-to-v2-of-the-braze-web-sdk) below. @@ -32,10 +32,10 @@ For issues with mobile platforms (iOS, Android, Swift, or Kotlin), contact Braze 1. From the Segment web app, click **Catalog**. 2. Search for "Braze" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the Destination Settings, add the **API Key**, found in the Braze Dashboard in *App Settings > Manage App Group*. -4. Set up a new App Group REST API Key in the Braze Dashboard in *App Settings > Developer Console > API Settings*. For more information, see [Creating and Managing REST API Keys](https://www.braze.com/docs/api/basics/#creating-and-managing-rest-api-keys) in the Braze documentation. +3. In the Destination Settings, add the **API Key**, found in the Braze Dashboard in **Settings > Manage API Keys**. +4. Set up a new workspace REST API Key in the Braze Dashboard in **Settings > API Keys**. For more information, see [Creating and Managing REST API Keys](https://www.braze.com/docs/api/basics/#creating-and-managing-rest-api-keys){:target="_blank"} in the Braze documentation. - Select the `users.track` endpoint in the **User Data** section. -5. If you're adding Braze using Analytics.js, Segment automatically loads the [Braze Web SDK](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup). Otherwise, depending on the source you've selected, include Braze's library by adding the following lines to your dependency configuration. +5. If you're adding Braze using Analytics.js, Segment automatically loads the [Braze Web SDK](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup){:target="_blank"}. Otherwise, depending on the source you've selected, include Braze's library by adding the following lines to your dependency configuration. ### iOS @@ -46,7 +46,8 @@ For issues with mobile platforms (iOS, Android, Swift, or Kotlin), contact Braze pod 'Segment-Appboy' ``` - Use the latest version of the Braze Segment Pod available on [CocoaPods](https://cocoapods.org/pods/Segment-Appboy) to ensure you have the must up-to-date features and bug fixes. + Use the latest version of the Braze Segment Pod available on [CocoaPods](https://cocoapods.org/pods/Segment-Appboy){:target="_blank"} + to ensure you have the must up-to-date features and bug fixes. 2. Next, declare Braze's destination in your app delegate instance: @@ -56,15 +57,18 @@ For issues with mobile platforms (iOS, Android, Swift, or Kotlin), contact Braze [SEGAnalytics setupWithConfiguration:config]; ``` - [Here](https://github.com/Appboy/appboy-segment-ios/blob/master/CocoapodsExample/Segment-Appboy/SEGAppDelegate.m) is a sample project which shows how to integrate the above. + [Here](https://github.com/Appboy/appboy-segment-ios/blob/master/CocoapodsExample/Segment-Appboy/SEGAppDelegate.m){:target="_blank"} + is a sample project which shows how to integrate the above. #### Sample App -Braze created a sample iOS application that integrates Braze using Segment. See the Braze [GitHub repository](https://github.com/Appboy/appboy-segment-ios/tree/master/CocoapodsExample) for more information. +Braze created a sample iOS application that integrates Braze using Segment. See the Braze [GitHub repository](https://github.com/Appboy/appboy-segment-ios/tree/master/CocoapodsExample){:target="_blank"} + for more information. #### Device-mode set up for iOS 14 support -Braze updated the Braze iOS Segment SDK to 3.26.1 to prepare for iOS 14. As of version 3.27.0, Braze removed the `ABK_ENABLE_IDFA_COLLECTION` macro. To configure sending ISFA to Braze, see Braze's [Implementing IDFA Collection](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/other_sdk_customizations/#ios-14-apptrackingtransparency) documentation. +Braze updated the Braze iOS Segment SDK to 3.26.1 to prepare for iOS 14. As of version 3.27.0, Braze removed the `ABK_ENABLE_IDFA_COLLECTION` macro. To configure sending ISFA to Braze, see Braze's [Implementing IDFA Collection](https://www.braze.com/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/other_sdk_customizations/){:target="_blank"} + documentation. To use the latest Braze SDK to collect IDFAs you must do the following: @@ -72,7 +76,8 @@ To use the latest Braze SDK to collect IDFAs you must do the following: 2. Update the Braze iOS Segment SDK to version 3.3.0 or greater. 3. Import and add the AppTrackingTransparency (ATT) Framework. - Navigate to your project `Info.plist` and add a “Privacy - Tracking Usage Description”. This description appears in a popup when the application initializes in iOS 14. Applications prompt users to select if they want to allow tracking. -4. Add Braze's `ABKIDFADelegate`. For more information on how to add this see [Braze's IDFA Collection documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/initial_sdk_setup/other_sdk_customizations/#implementing-idfa-collection). +4. Add Braze's `ABKIDFADelegate`. For more information on how to add this see [Braze's IDFA Collection documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/other_sdk_customizations#implementing-idfa-collectionn){:target="_blank"} +. 5. Follow [Segment's guide for collecting IDFA](/docs/connections/sources/catalog/libraries/mobile/ios/#idfa-collection-in-40-beta-and-later) ### Android @@ -90,7 +95,7 @@ To use the latest Braze SDK to collect IDFAs you must do the following: compile 'com.appboy:appboy-segment-integration:+' ``` - To ensure you have the most up-to-date features and bug fixes, use the latest version available on [Maven](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22appboy-segment-integration%22). + To ensure you have the most up-to-date features and bug fixes, use the latest version available on [Maven](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22appboy-segment-integration%22){:target="_blank"}. **Note:** The `groupId` is `com.appboy` and not `com.segment.analytics.android.integrations`. @@ -103,30 +108,6 @@ To use the latest Braze SDK to collect IDFAs you must do the following: .build(); ``` -### React Native device-mode set up - - - -To add the Braze device-mode SDK to a [React Native](/docs/connections/sources/catalog/libraries/mobile/react-native/) project using Segment's `1.5.1≤` release: -1. Navigate to the root folder of your project, and run a `yarn add appboy` command to add the destination SDK to your project. -2. Add an `import` statement to your project, as in the example below. - ```js - import Braze from '@segment/analytics-react-native-appboy' - ``` -3. In the same project file, add the destination to the `using` list in the `await` command. - ```js - await analytics.setup('YOUR_WRITE_KEY', { - // Add any of your Device-mode destinations. This ensures they load before continuing. - using: [Braze] - // ... - }) - ``` -4. Change to your iOS development folder ( `cd ios` ) and run `pod install`. - - -> note "" -> Braze was formerly known as "Appboy", and the Braze React component still uses that name. Be sure to use the old name! - ## Page If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: @@ -140,7 +121,8 @@ Segment sends Page calls to Braze as custom events if you have enabled either ** ## Identify > info "Tip" -> Add Segment's open-source [Middleware](https://github.com/segmentio/segment-braze-mobile-middleware) tool to optimize your integration. This tool limits [Data Point](https://www.braze.com/docs/user_guide/onboarding_with_braze/data_points/) use by debouncing duplicate identify() calls from Segment. For more information, see the project's [README](https://github.com/segmentio/segment-braze-mobile-middleware/blob/master/README.md#how-does-this-work). +> Add Segment's open-source [Middleware](https://github.com/segmentio/segment-braze-mobile-middleware){:target="_blank"} + tool to optimize your integration. This tool limits [Data Point](https://www.braze.com/docs/user_guide/data_and_analytics/data_points/){:target="_blank"} use by debouncing duplicate identify() calls from Segment. For more information, see the project's [README](https://github.com/segmentio/segment-braze-mobile-middleware/blob/master/README.md#how-does-this-work){:target="_blank"}. If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: @@ -191,7 +173,7 @@ The endpoint returns: > info "Tip" -> Braze is complex. If you decide to use the `braze_id`, consider [contacting Segment Success Engineering](https://segment.com/help/contact/) or a Solutions Architect to verify your Braze implementation. +> If you decide to use the `braze_id`, consider [contacting Segment Success Engineering](https://segment.com/help/contact/){:target="_blank"} or a Solutions Architect to verify your Braze implementation. Segment's special traits recognized as Braze's standard user profile fields (in parentheses) are: @@ -205,13 +187,13 @@ Segment's special traits recognized as Braze's standard user profile fields (in | `address.country` | `country` | | `gender` | `gender` | -Segment sends all other traits (except Braze's [reserved user profile fields](https://www.braze.com/docs/api/objects_filters/user_attributes_object/#braze-user-profile-fields)) to Braze as custom attributes. You can send an array of strings as trait values but not nested objects. +Segment sends all other traits (except Braze's [reserved user profile fields](https://www.braze.com/docs/api/objects_filters/user_attributes_object/#braze-user-profile-fields){:target="_blank"}) to Braze as custom attributes. You can send an array of strings as trait values but not nested objects. ## Track > info "Tip" -> To lower [Data Point](https://www.braze.com/docs/user_guide/onboarding_with_braze/data_points/) use, limit the events you send to Braze to those that are relevant for campaigns and segmentation to the Braze destination. For more information, see [Schema Controls](/docs/protocols/schema/). +> To lower [Data Point](https://www.braze.com/docs/user_guide/data_and_analytics/data_points/){:target="_blank"} use, limit the events you send to Braze to those that are relevant for campaigns and segmentation to the Braze destination. For more information, see [Schema Controls](/docs/protocols/schema/). If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call looks like: @@ -250,12 +232,12 @@ analytics.track('Purchased Item', { }) ``` -The example above would have "Purchased Item" as its `productId` and includes two required properties that you must pass in: +The previous example would have "Purchased Item" as its `productId` and includes two required properties that you must pass in: - `revenue` - `currency` -Braze supports currency codes as specified in [their Purchase Object Specification](https://www.braze.com/docs/api/objects_filters/purchase_object/). Be aware that any currency reported other than USD displays in [the Braze UI in USD based on the exchange rate on the date it was reported](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/logging_purchases/#logging-purchases). +Braze supports currency codes as specified in [their Purchase Object Specification](https://www.braze.com/docs/api/objects_filters/purchase_object/){:target="_blank"}. Be aware that any currency reported other than USD displays in [the Braze UI in USD based on the exchange rate on the date it was reported](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/logging_purchases/#logging-purchases){:target="_blank"}. You can add more product details in the form of key-value pairs to the `properties` object. The following reserved keys are not passed to Braze if included in your Track call's `properties` object: @@ -314,7 +296,7 @@ If you don't want your site to immediately display new In-App Messages when they }); ``` -The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](https://js.appboycdn.com/web-sdk/latest/doc/ab.InAppMessage.html) subclass or [`appboy.ab.ControlMessage`](https://js.appboycdn.com/web-sdk/latest/doc/ab.ControlMessage.html) objects, each of which has various lifecycle event subscription methods. +The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](https://js.appboycdn.com/web-sdk/latest/doc/ab.InAppMessage.html){:target="_blank"} subclass or [`appboy.ab.ControlMessage`](https://js.appboycdn.com/web-sdk/latest/doc/ab.ControlMessage.html){:target="_blank"} objects, each of which has various lifecycle event subscription methods. ### Push Notifications @@ -343,7 +325,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt [[SEGAppboyIntegrationFactory instance] saveRemoteNotification:userInfo]; } ``` -6. If you are using the `UserNotification` framework, follow [Braze's documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/#using-usernotification-framework-ios-10) to register push notifications using the `UserNotification` framework. Then in your application's `userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler` method, add the following: +6. If you are using the `UserNotification` framework, follow [Braze's documentation](https://www.braze.com/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/integration#using-usernotification-framework-ios-10){:target="_blank"} to register push notifications using the `UserNotification` framework. Then in your application's `userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler` method, add the following: ```objc if ([Appboy sharedInstance] == nil) { @@ -359,7 +341,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt #### Android -1. Follow the directions in Braze's [push notification docs](https://www.braze.com/docs/developer_guide/platform_integration_guides/android/push_notifications/android/implementation_guide/). +1. Follow the directions in Braze's [push notification docs](https://www.braze.com/docs/developer_guide/platform_integration_guides/android/push_notifications/android/implementation_guide/){:target="_blank"}. 2. If you don't have Braze automatically register for push (for example, you pass the push token from an FCM or manual GCM registration) you need to ensure you call `registerAppboyPushMessages` after Braze is initialized. You can do this by checking if Braze is initialized before trying to pass the push token, and waiting for initializing to set if not. You can do this in an `onIntegrationReady` method: @@ -371,7 +353,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt // When you get the push token String receivedToken; - appboyPushToken = recievedToken; + appboyPushToken = receivedToken; if (appboyInitialized) { Appboy.getInstance(getContext()).registerAppboyPushMessages(appboyPushToken); } @@ -390,7 +372,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt #### Client -1. To support push notifications on Chrome, you'll need to enable FCM/GCM as well as configure your site. Check out steps [one and two here for detailed instructions on both](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-1-to-support-chrome-enable-fcmgcm). +1. To support push notifications on Chrome, you'll need to enable FCM/GCM as well as configure your site. Check out steps [one and two here for detailed instructions on both](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-1-to-support-chrome-enable-fcmgcm){:target="_blank"}. 2. Browser Registration. In order for a browser to receive push notifications, you must register it for push by calling: @@ -424,13 +406,13 @@ analytics.ready(function() { }); ``` -3. Set your GCM/FCM server API key and SenderID on the Braze dashboard. You can find more details for this [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-4-set-your-gcmfcm-server-api-key-and-senderid-on-the-Braze-dashboard). +3. Set your GCM/FCM server API key and SenderID on the Braze dashboard. You can find more details for this [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-4-set-your-gcmfcm-server-api-key-and-senderid-on-the-Braze-dashboard){:target="_blank"}. -4. To support push notifications on Safari, add your Website Push ID into your Segment Settings UI and Segment sends it when the Braze Web SDK initializes. To get your Website Push ID, follow the first two bullet points in [these instructions](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-5-configure-safari-push). +4. To support push notifications on Safari, add your Website Push ID into your Segment Settings UI and Segment sends it when the Braze Web SDK initializes. To get your Website Push ID, follow the first two bullet points in [these instructions](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#step-5-configure-safari-push){:target="_blank"}. ### Soft Push Prompts -1. Follow [step one](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts) to create a "Prime for Push" in-app messaging Campaign on the Braze dashboard. +1. Follow [step one](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts){:target="_blank"} to create a "Prime for Push" in-app messaging Campaign on the Braze dashboard. 2. Disable your [Automatically Send In-App Messages Destination setting](/docs/connections/destinations/catalog/braze/#settings). By default, it is enabled when you enable the Braze destination. @@ -473,7 +455,7 @@ analytics.ready(function() { }); ``` -For more details on this snippet, check out Braze's docs [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts). +For more details on this snippet, check out Braze's docs [here](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup#soft-push-prompts){:target="_blank"}. **Note:** Place this snippet outside of your [Segment Snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet) within your `script` tag. @@ -505,7 +487,7 @@ end ``` ### Migrating to v2 of the Braze Web SDK -There are three major [versions](https://github.com/Appboy/appboy-web-sdk/blob/master/CHANGELOG.md#breaking) of this SDK: 1, 2, and 3. Segment currently supports both as migrating to Version 2+ requires some important changes to your website. +There are three major [versions](https://github.com/Appboy/appboy-web-sdk/blob/master/CHANGELOG.md#breaking){:target="_blank"} of this SDK: 1, 2, and 3. Segment currently supports both as migrating to Version 2+ requires some important changes to your website. If you have never implemented Braze on your site, either using Segment or natively, you can ignore this section. If you have had Braze running before and want to migrate to Version 2+ **you must ensure you remove all references to `appboy.min.css` from your site.** This is very important as it will cause issues with Version 2+ of their SDK. Once you have done this you can select Version 2+ using the "Braze Web SDK Version" with your Segment Settings UI. @@ -513,27 +495,27 @@ If you have never implemented Braze on your site, either using Segment or native You can send computed traits and audiences created in Engage to Braze, and use them to run personalization campaigns or power messages to users. -Engage sends [event data](/docs/glossary/#event) about your users to Braze using an `identify` call and/or `track` call. +Engage sends [event data](/docs/glossary/#event) about your users to Braze using an Identify call and/or Track call. ### Computed Traits in Braze -You can send computed traits to Braze as [custom attributes](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/setting_custom_attributes/) or as [custom events](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/tracking_custom_events/). +You can send computed traits to Braze as [custom attributes](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/setting_custom_attributes/){:target="_blank"} or as [custom events](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/tracking_custom_events/){:target="_blank"}. -- If you send a computed trait using the `identify` call, they appear in Braze as custom attributes. -- If you send a computed trait using the `track` call, they appear in Braze as custom events. +- If you send a computed trait using the Identify call, they appear in Braze as custom attributes. +- If you send a computed trait using the Track call, they appear in Braze as custom events. You can choose which method to use (or choose to use both) when you connect the computed trait to the Braze destination. #### Computed Traits using Identify calls -You can send computed traits created in Engage as `identify` calls to create custom attributes in Braze. The custom attribute is set to the value of the computed trait. The custom attribute name appears as the snake_cased version of the computed trait name you provide. +You can send computed traits created in Engage as Identify calls to create custom attributes in Braze. The custom attribute is set to the value of the computed trait. The custom attribute name appears as the snake_cased version of the computed trait name you provide. For example, if you have a computed trait for “Last Product Viewed Item,” that would be named `last_product_viewed_item` in the user's Engage profile. ![A screenshot of a user's Engage profile with the Computed Traits button selected.](images/last_viewed-user.png) -If the “Last Product Viewed Item” trait is connected to Braze to send `identify` calls, as in this example: +If the “Last Product Viewed Item” trait is connected to Braze to send Identify calls, as in this example: ![A screenshot of the Last Product Viewed Item tab, with the Settings button selected.](images/last_viewed-identify.png) @@ -543,9 +525,9 @@ The following custom attribute, “last_product_viewed_item” appears in Braze #### Computed Traits using Track calls -You can also send computed traits created in Engage as `track` calls to create custom events in Braze. When Engage calculates a computed trait for a user, it sends a `Trait Computed` event to Braze. +You can also send computed traits created in Engage as Track calls to create custom events in Braze. When Engage calculates a computed trait for a user, it sends a `Trait Computed` event to Braze. -Using the same example as above, if a user has a computed trait for “Last Product Viewed Item” and the trait is connected to Braze and configured to send `track` calls: +Using the same example as above, if a user has a computed trait for “Last Product Viewed Item” and the trait is connected to Braze and configured to send Track calls: ![A screenshot of the Braze settings tab in Segment, with the Send Track setting enabled and a Trait Computed value in the Compute Event field.](images/last_viewed-track.png) @@ -558,22 +540,22 @@ The following custom event appears in Braze on the user's profile: ### Audiences in Braze -You can send Audiences to Braze as [custom attributes](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/setting_custom_attributes/) or [custom events](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/tracking_custom_events/). +You can send Audiences to Braze as [custom attributes](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/setting_custom_attributes/){:target="_blank"} or [custom events](https://www.braze.com/docs/developer_guide/platform_integration_guides/web/analytics/tracking_custom_events/){:target="_blank"}. -- When you send an Audience using the `identify` call, it appears in Braze as a custom attribute. -- When you send an Audience using the `track` call, it appears in Braze as a custom event. +- When you send an Audience using the Identify call, it appears in Braze as a custom attribute. +- When you send an Audience using the Track call, it appears in Braze as a custom event. You can choose which method to use (or choose both) when you connect the audience to the Braze destination. #### Audiences using Identify calls -You can send audiences created in Engage as `identify` calls to create custom attributes in Braze. If a user is added to an audience, Engage sends a custom attribute to Braze with a value of `true`. The custom attribute name is be the snake_cased version of the audience name in Engage. +You can send audiences created in Engage as Identify calls to create custom attributes in Braze. If a user is added to an audience, Engage sends a custom attribute to Braze with a value of `true`. The custom attribute name is be the snake_cased version of the audience name in Engage. For example, if a user is in a “Dormant Shoppers” audience: ![A screenshot of a user's profile in Engage, with the Audiences tab selected and the Dormant Shoppers trait present.](images/dormant-user.png) -And the “Dormant Shoppers” audience is connected to Braze to send `identify` calls: +And the “Dormant Shoppers” audience is connected to Braze to send Identify calls: ![A screenshot of the Braze settings tab in Segment, with the Send Identify setting enabled.](images/dormant-identify.png) @@ -584,9 +566,9 @@ The “dormant_shoppers” custom attribute appears in Braze on the user's profi #### Audiences using Track calls -You can also send audiences created in Engage as `track` calls to create custom events in Braze. If a user is added to an audience, Engage sends an `Audience Entered` event to Braze. If a user leaves the audience (because they no longer satisfy the criteria) Engage sends an `Audience Exited` event to Braze. +You can also send audiences created in Engage as Track calls to create custom events in Braze. If a user is added to an audience, Engage sends an `Audience Entered` event to Braze. If a user leaves the audience (because they no longer satisfy the criteria) Engage sends an `Audience Exited` event to Braze. -Using the same example as above, if a user is in a “Dormant Shoppers” audience and the audience is connected to Braze to send `track` calls, Engage sends the following “Audience Entered” and “Audience Exited” events. (You can edit the names of these events from this screen.) +Using the same example as above, if a user is in a “Dormant Shoppers” audience and the audience is connected to Braze to send Track calls, Engage sends the following “Audience Entered” and “Audience Exited” events. (You can edit the names of these events from this screen.) ![A screenshot of the Braze settings tab in Segment, with the Send Track setting enabled, Enter Event and Exit Event fields configured.](images/dormant-track.png) @@ -610,8 +592,8 @@ To send computed traits or audiences to Braze, you first must connect it to Enga - **Engage Destination type**: [Event](/docs/glossary/#event) - data is delivered to this Destination one-by-one on a real-time basis - **Support for Track and Identify?**: Yes, both are supported. -- **Traits and Audiences created by**: Computed traits and audiences are added as custom attributes using `identify` calls. You can also send computed traits and audiences as custom events using `track` calls. -- **Must create audience_name field before Engage can update those values?**: No. If sent as an `identify` call, Engage creates the computed trait or audience name as a custom attribute in Braze. If sent as a `track` call, Engage creates a custom event in Braze. +- **Traits and Audiences created by**: Computed traits and audiences are added as custom attributes using Identify calls. You can also send computed traits and audiences as custom events using Track calls. +- **Must create audience_name field before Engage can update those values?**: No. If sent as an Identify call, Engage creates the computed trait or audience name as a custom attribute in Braze. If sent as a Track call, Engage creates a custom event in Braze. - **Computed trait appears as**: A snake cased version of the computed trait name (for example, `last_product_viewed: 'Sweater'`) with a string for the value of the computed trait. - **Audience appears as**: A snake cased version of the audience name (for example, `order_completed_last_30days: true` ) with a boolean value of `true` indicates that a user is in the audience. - **Destination rate limit**: 100 requests per second (this is at the Space-level, for example shared across all Audiences & Computed Traits syncing from 1 Space to Braze. This rate limit would not be shared by multiple Spaces.) @@ -622,7 +604,7 @@ To send computed traits or audiences to Braze, you first must connect it to Enga ## Debounce with Middlewares -If you use the Braze destination in either [cloud or device mode](/docs/connections/destinations/#connection-modes) you can save Braze costs by "debouncing" duplicate `identify()` calls from Segment by adding the [open-source Middleware tool](https://github.com/segmentio/segment-braze-mobile-middleware) to your implementation. More information about this tool and how it works [is available in the project's README](https://github.com/segmentio/segment-braze-mobile-middleware/blob/master/README.md#how-does-this-work). +If you use the Braze destination in either [cloud or device mode](/docs/connections/destinations/#connection-modes) you can save Braze costs by "debouncing" duplicate `identify()` calls from Segment by adding the [open-source Middleware tool](https://github.com/segmentio/segment-braze-mobile-middleware){:target="_blank"} to your implementation. More information about this tool and how it works [is available in the project's README](https://github.com/segmentio/segment-braze-mobile-middleware/blob/master/README.md#how-does-this-work){:target="_blank"}. ## Braze Engage FAQs @@ -635,11 +617,11 @@ By default, Engage data is sent to Braze by matching the `userId`. The Segment ` You can find the `braze_id` in the Braze UI or by using Braze's [Users by Identifier API Endpoint](https://www.braze.com/docs/api/endpoints/export/user_data/post_users_identifier/){:target="_blank"}. -#### Do Engage audiences sync with [Braze Segments](https://www.braze.com/docs/user_guide/engagement_tools/segments/)? +#### Do Engage audiences sync with [Braze Segments](https://www.braze.com/docs/user_guide/engagement_tools/segments/){:target="_blank"}? No. Audiences are sent to Braze as either custom attributes or custom events. You can use these events and attributes when building your Braze Segments and Campaigns. #### How long do my computed traits and audiences exist in Braze? All Braze user profile data (including custom events, custom attributes) is stored for as long as those profiles are active. #### What happens if I delete a computed trait or audience in Segment? -When you delete an audience or trait in Segment they are not deleted from Braze. Data sent to Braze is immutable and cannot be deleted or modified once they receive it. However, you can [blocklist](https://www.braze.com/docs/user_guide/administrative/app_settings/manage_app_group/custom_event_and_attribute_management/#blacklisting-custom-attributes-custom-events-and-products) custom attributes and events in Braze. +When you delete an audience or trait in Segment they are not deleted from Braze. Data sent to Braze is immutable and cannot be deleted or modified once they receive it. However, you can [blocklist](https://www.braze.com/docs/user_guide/data_and_analytics/custom_data/managing_custom_data#blocklisting-custom-data){:target="_blank"} custom attributes and events in Braze. diff --git a/src/connections/destinations/catalog/breyta-crm/index.md b/src/connections/destinations/catalog/breyta-crm/index.md index 73221309f0..bf864923e1 100644 --- a/src/connections/destinations/catalog/breyta-crm/index.md +++ b/src/connections/destinations/catalog/breyta-crm/index.md @@ -9,7 +9,7 @@ This destination is maintained by Breyta. For any issues with the destination, [ ## Getting started -{% include content/connection-modes.md %} + 1. Login to your [Breyta account](https://app.breyta.io){:target="_blank"}. 2. Go to the Integrations page and click **Add New**. diff --git a/src/connections/destinations/catalog/bronto/index.md b/src/connections/destinations/catalog/bronto/index.md index c381c8d738..acdfa77cd8 100644 --- a/src/connections/destinations/catalog/bronto/index.md +++ b/src/connections/destinations/catalog/bronto/index.md @@ -2,7 +2,7 @@ title: Bronto Destination id: 54521fd525e721e32a72ee98 --- -Our Bronto destination code is open-source on GitHub if you want to [check it out](https://github.com/segment-integrations/analytics.js-integration-bronto). +Our Bronto destination code is open-source on GitHub if you want to [check it out](https://github.com/segment-integrations/analytics.js-integration-bronto){:target="_blank"}. ## Getting Started diff --git a/src/connections/destinations/catalog/bucket-web/index.md b/src/connections/destinations/catalog/bucket-web/index.md new file mode 100644 index 0000000000..160d6ef160 --- /dev/null +++ b/src/connections/destinations/catalog/bucket-web/index.md @@ -0,0 +1,59 @@ +--- +title: 'Bucket Web (Actions) Destination' +id: 656dc9330d1863a8870bacd1 +versions: + - name: "Bucket (Classic)" + link: '/docs/connections/destinations/catalog/bucket' +--- + +{% include content/plan-grid.md name="actions" %} + +[Bucket](https://bucket.co/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="blank"} is a feature-focused analytics software that empowers software teams with a repeatable approach to shipping features that satisfy customers. + +Bucket maintains this destination. For any issues with the destination, [contact the Bucket Support team](mailto:support@bucket.co). + + +> warning "" +> If you are using both the Bucket Web (Actions) destination and the server side [Bucket destination](/docs/connections/destinations/catalog/bucket/) on the same source, avoid duplicate event tracking by disabling the "Track Event" mapping in Bucket Web (Actions). + + +## Benefits of Bucket Web (Actions) compared to Bucket Classic + +Bucket Web (Actions) provides the following benefits over the classic Bucket destination: + +- Clearer mapping of data. Actions-based destinations let you define the mapping between the data Segment receives from your source and the data Segment sends to the destination. +- Automatically enables [Live Satisfaction](https://bucket.co/live-satisfaction){:target="_blank"} prompts in your app, giving you fully-automated customer satisfaction scores and feedback on your features. + + +## Getting started + +1. From the Destinations catalog page in the Segment App, click **Add Destination**. +2. Search for "Bucket Web" in the Destinations Catalog, and select the Bucket Web (Actions) destination. +3. Select a source to send data to the Bucket destination. +4. Go to [Bucket's Settings](https://app.bucket.co){:target="blank"} and find and copy the Publishable Key on the Tracking page. +5. Enter the Publishable Key as Publishable Key in the "Bucket Web (Actions)" destination settings in Segment. + +{% include components/actions-fields.html %} + +## Content security policies (CSP) + +If you are running with strict Content Security Policies active on your website, you must enable these directives in order to use this destination: + +| Directive | Values | Module | Reason | +| --------------- | ------------------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| script-src-elem | https://cdn.jsdelivr.net | bootstrap | Loads the Bucket tracking SDK from a CDN | +| connect-src | https://tracking.bucket.co | tracking | Used for all tracking methods: `analytics.identify()`, `analytics.group()` and `analytics.track()` | +| connect-src | https://livemessaging.bucket.co | live satisfaction | Server sent events from the Bucket Live Feedback service, which allows for automatically collecting feedback when a user used a feature. | +| style-src | 'unsafe-inline' | feedback UI | The feedback UI is styled with inline styles. Not having this directive results unstyled HTML elements. | + +As HTTP-header: + +```http +Content-Security-Policy: script-src-elem https://cdn.jsdelivr.net; connect-src https://livemessaging.bucket.co https://tracking.bucket.co; style-src 'unsafe-inline' +``` + +As ``-tag: + +```html + +``` diff --git a/src/connections/destinations/catalog/bucket/index.md b/src/connections/destinations/catalog/bucket/index.md index b884d55efe..bdd0cc87d3 100644 --- a/src/connections/destinations/catalog/bucket/index.md +++ b/src/connections/destinations/catalog/bucket/index.md @@ -2,6 +2,9 @@ title: Bucket Destination rewrite: true id: 5fabc0b00f88248bbce4db48 +versions: + - name: "Bucket Web (Actions)" + link: '/docs/connections/destinations/catalog/bucket-web' --- [Bucket](https://bucket.co/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="blank"} is feature-focused analytics. Bucket empowers software teams with a repeatable approach to shipping features that customers crave. @@ -10,13 +13,13 @@ This destination is maintained by Bucket. For any issues with the destination, [ ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Bucket" in the Destinations Catalog, and select the Bucket destination. 3. Choose which Source should send data to the Bucket destination. -4. Go to [Bucket's Settings](https://bucket.co){:target="blank"} and find and copy the "Tracking Key" under Settings. -5. Enter the "Tracking Key" as "API Key" in the "Bucket" destination settings in Segment. +4. Go to [Bucket's Settings](https://app.bucket.co){:target="blank"} and find and copy the "Publishable Key" under Settings. +5. Enter the "Publishable Key" as "Publishable Key" in the "Bucket" destination settings in Segment. ## Identify diff --git a/src/connections/destinations/catalog/bugherd/index.md b/src/connections/destinations/catalog/bugherd/index.md index afe470a1b9..2228a38268 100644 --- a/src/connections/destinations/catalog/bugherd/index.md +++ b/src/connections/destinations/catalog/bugherd/index.md @@ -3,11 +3,11 @@ title: BugHerd Destination rewrite: true id: 54521fd525e721e32a72ee99 --- -[BugHerd](http://bugherd.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a bug tracking software that lets users report bugs right in your interface. Once reported, you get a Trello-like management interface for taking care of the issues. The `analytics.js` BugHerd Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-bugherd). +[BugHerd](http://bugherd.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a bug tracking software that lets users report bugs right in your interface. Once reported, you get a Trello-like management interface for taking care of the issues. The `analytics.js` BugHerd Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-bugherd){:target="_blank”}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "BugHerd" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/bugsnag/index.md b/src/connections/destinations/catalog/bugsnag/index.md index ee4ca8e3ba..73c2a1f28f 100644 --- a/src/connections/destinations/catalog/bugsnag/index.md +++ b/src/connections/destinations/catalog/bugsnag/index.md @@ -3,18 +3,18 @@ title: Bugsnag Destination rewrite: true id: 54521fd525e721e32a72ee9b --- -[Bugsnag](https://docs.bugsnag.com/api/data-access/) helps you detect and diagnose crashes in your application. Depending on the data you provide, Bugsnag can filter errors based on user name, user email, timeline, release stages, paying user status, and more. +[Bugsnag](https://docs.bugsnag.com/api/data-access/){:target="_blank"} helps you detect and diagnose crashes in your application. Depending on the data you provide, Bugsnag can filter errors based on user name, user email, timeline, release stages, paying user status, and more. At the moment, we support the following integrations: -Web | [Analytics.js SDK 2.1.0](https://github.com/segment-integrations/analytics.js-integration-bugsnag) -Android | [Android SDK 2.0.0](https://github.com/segment-integrations/analytics-android-integration-bugsnag) -iOS | [iOS SDK 1.0.3](https://github.com/segment-integrations/analytics-ios-integration-bugsnag) +Web | [Analytics.js SDK 2.1.0](https://github.com/segment-integrations/analytics.js-integration-bugsnag){:target="_blank"} +Android | [Android SDK 2.0.0](https://github.com/segment-integrations/analytics-android-integration-bugsnag){:target="_blank"} +iOS | [iOS SDK 1.0.3](https://github.com/segment-integrations/analytics-ios-integration-bugsnag){:target="_blank"} ## Getting Started -{% include content/connection-modes.md %} + ### Web @@ -27,16 +27,9 @@ iOS | [iOS SDK 1.0.3](https://github.com/segment-integrations/analytics-ios-inte If you'd like to integrate with Bugsnag's iOS and/or Android SDKs, in addition to completing steps 1-3 in the previous section, you will also need to complete the install steps outlined below: -1. [Android](https://github.com/segment-integrations/analytics-android-integration-bugsnag) - -2. [iOS](https://github.com/segment-integrations/analytics-ios-integration-bugsnag) - - -### React Native - -{% include content/react-dest.md %} +1. [Android](https://github.com/segment-integrations/analytics-android-integration-bugsnag){:target="_blank"} -- - - +2. [iOS](https://github.com/segment-integrations/analytics-ios-integration-bugsnag){:target="_blank"} ## Identify @@ -56,4 +49,4 @@ Bugsnag will show you the `userId` and `traits` in the Users tab of each error. ## Error Reporting -In addition to sending Bugsnag user-specific information, you can send handled exceptions and diagnostic data to your Bugsnag dashboard using Bugsnag's native methods. Documentation on these methods is available [on their website](https://docs.bugsnag.com/platforms/browsers/#reporting-handled-exceptions). +In addition to sending Bugsnag user-specific information, you can send handled exceptions and diagnostic data to your Bugsnag dashboard using Bugsnag's native methods. Documentation on these methods is available [on their website](https://docs.bugsnag.com/platforms/browsers/#reporting-handled-exceptions){:target="_blank"}. diff --git a/src/connections/destinations/catalog/button/index.md b/src/connections/destinations/catalog/button/index.md index a0183ba975..274246d1b4 100644 --- a/src/connections/destinations/catalog/button/index.md +++ b/src/connections/destinations/catalog/button/index.md @@ -3,13 +3,13 @@ title: Button Destination rewrite: true id: 5f99f7f79cecdd08a8e22c4f --- -[Button](https://usebutton.com?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the mobile commerce technology company that is powering a commerce-driven internet. The Button platform powers mobile business growth for the world's largest brands and publishers, while offering consumers more seamless, enjoyable experiences. +[Button](https://usebutton.com?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the mobile commerce technology company that is powering a commerce-driven internet. The Button platform powers mobile business growth for the world's largest brands and publishers, while offering consumers more seamless, enjoyable experiences. This destination is maintained by Button. For any issues with the destination, [contact the Button Support team](mailto:support@usebutton.com). ## Getting Started -{% include content/connection-modes.md %} + > info "" > Contact your Button representative for your Button API Key. @@ -115,4 +115,4 @@ analytics.track('Order Completed' { someProperty: true }, { If you are a Business Tier customer, you can set up a [Destination Filter](/docs/connections/destinations/destination-filters/) to only send your `Deep link` and `Order` events to Button. -Read [Button's Destination Filter documentation](https://developer.usebutton.com/docs/segment-integration-guide) to learn more. +Read [Button's Destination Filter documentation](https://developer.usebutton.com/docs/segment-integration-guide){:target="_blank"} to learn more. diff --git a/src/connections/destinations/catalog/buzzboard/index.md b/src/connections/destinations/catalog/buzzboard/index.md index 7a35fd0ce8..f3f1236a63 100644 --- a/src/connections/destinations/catalog/buzzboard/index.md +++ b/src/connections/destinations/catalog/buzzboard/index.md @@ -1,23 +1,20 @@ --- title: 'BuzzBoard Destination' rewrite: true -beta: true redirect_from: '/connections/destinations/catalog/smbstream/' id: 5ca76cbb1a6b900001618e74 --- -[BuzzBoard](https://www.buzzboard.com/smbstreams/solutions/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides self-serve predictive analytics for growth marketers, leveraging machine learning to automate audience insights and recommendations. The most comprehensive set of data is maintained, integrated and then delivered as important insights across your sales and marketing organization. +[BuzzBoard](https://www.buzzboard.com/smbstreams/solutions/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides self-serve predictive analytics for growth marketers, leveraging machine learning to automate audience insights and recommendations. The most comprehensive set of data is maintained, integrated and then delivered as important insights across your sales and marketing organization. This destination is maintained by BuzzBoard. For any issues with the destination, [contact the BuzzBoard Support team](mailto:support@buzzboard.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "BuzzBoard" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your BuzzBoard [Dashboard](https://sales.buzzboard.com/v5/stream-dashboard). +3. Enter the "API Key" into your Segment Settings UI which you can find from your BuzzBoard [Dashboard](https://sales.buzzboard.com/v5/stream-dashboard){:target="_blank”}. ## Identify @@ -36,4 +33,4 @@ Identify calls will be sent to BuzzBoard with the required traits, matching and While your data is being enriched, a `track` call will appear in your Segment Debugger with event name `enrichment_in_progress`. -In order to send back the data to your Segment source, BuzzBoard would need the write key access. For this, you would have to add the Segment write key by going into the BuzzBoard [Dashboard](https://sales.buzzboard.com/v5/stream-dashboard). +In order to send back the data to your Segment source, BuzzBoard would need the write key access. For this, you would have to add the Segment write key by going into the BuzzBoard [Dashboard](https://sales.buzzboard.com/v5/stream-dashboard){:target="_blank”}. diff --git a/src/connections/destinations/catalog/bytegain/index.md b/src/connections/destinations/catalog/bytegain/index.md index 96146d9d74..eda9d21a33 100644 --- a/src/connections/destinations/catalog/bytegain/index.md +++ b/src/connections/destinations/catalog/bytegain/index.md @@ -3,15 +3,13 @@ title: ByteGain Destination rewrite: true id: 5c9c28081e78ca0001031b81 --- -[ByteGain](https://bytegain.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is an Artificial Intelligence platform that learns from online user behavior to predict and automate the exact actions needed to engage, convert, and retain customers. ByteGain's software analyzes billions of data points on a website to identify patterns in journeys enabling real-time predictions, and improves over time due to its self-learning nature. The platform then uses these predictions to intelligently automate ad retargeting, personalization, content recommendations, and more. +[ByteGain](https://bytegain.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an Artificial Intelligence platform that learns from online user behavior to predict and automate the exact actions needed to engage, convert, and retain customers. ByteGain's software analyzes billions of data points on a website to identify patterns in journeys enabling real-time predictions, and improves over time due to its self-learning nature. The platform then uses these predictions to intelligently automate ad retargeting, personalization, content recommendations, and more. This destination is maintained by ByteGain. For any issues with the destination, [contact the ByteGain Support team](mailto:support@bytegain.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "ByteGain" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/byteplus/index.md b/src/connections/destinations/catalog/byteplus/index.md index 03fd28df82..142a3eb74f 100644 --- a/src/connections/destinations/catalog/byteplus/index.md +++ b/src/connections/destinations/catalog/byteplus/index.md @@ -14,7 +14,7 @@ This destination is maintained by BytePlus. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. @@ -27,7 +27,7 @@ This destination is maintained by BytePlus. For any issues with the destination, ## Page -If you aren't familiar with the Segment Spec, take a look at the Page method documentation (/docs/connections/spec/page/) to learn about what it does. An example call would look like: +If you aren't familiar with the Segment Spec, take a look at the [Page method documentation](/docs/connections/spec/page/) to learn about what it does. An example call would look like: ```js diff --git a/src/connections/destinations/catalog/calixa/index.md b/src/connections/destinations/catalog/calixa/index.md index 3a7e302c91..d075182837 100644 --- a/src/connections/destinations/catalog/calixa/index.md +++ b/src/connections/destinations/catalog/calixa/index.md @@ -3,16 +3,16 @@ title: Calixa Destination rewrite: true id: 5df41c5d2f4a8cd2b74b5725 --- -[Calixa](https://www.calixa.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) makes it easy to manage all your customers in one place. No more jumping around from tool to tool, learning SQL, or maintaining internal tools. Calixa connects to the third party SaaS tools you use (like Stripe, Zendesk, and Intercom) so that you can see everything about your customers and take action in one place. +[Calixa](https://www.calixa.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} makes it easy to manage all your customers in one place. No more jumping around from tool to tool, learning SQL, or maintaining internal tools. Calixa connects to the third party SaaS tools you use (like Stripe, Zendesk, and Intercom) so that you can see everything about your customers and take action in one place. This destination is maintained by Calixa. For any issues with the destination, [contact the Calixa support team](mailto:team@calixa.io). ## Getting Started -{% include content/connection-modes.md %} -1. Login to your [Calixa account](https://console.calixa.io/login). -2. Go to the [Integrations page](https://console.calixa.io/integrations) and click **Add Integration**. + +1. Login to your [Calixa account](https://console.calixa.io/login){:target="_blank”}. +2. Go to the [Integrations page](https://console.calixa.io/integrations){:target="_blank”} and click **Add Integration**. 3. Select the Segment Integration and sign in to your Segment account to grant Calixa access. ## Track diff --git a/src/connections/destinations/catalog/callingly/index.md b/src/connections/destinations/catalog/callingly/index.md index cd9b316682..f94db0fef0 100644 --- a/src/connections/destinations/catalog/callingly/index.md +++ b/src/connections/destinations/catalog/callingly/index.md @@ -3,21 +3,19 @@ title: Callingly Destination rewrite: true id: 5c953ce33407d0000104d495 --- -[Callingly](https://callingly.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) automatically gets your sales team on the phone with your incoming leads within seconds, generating better results and happy customers. +[Callingly](https://callingly.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} automatically gets your sales team on the phone with your incoming leads within seconds, generating better results and happy customers. This destination is maintained by Callingly. For any issues with the destination, [contact the Callingly Support team](mailto:support@callingly.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Callingly" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Callingly Integrations page](https://callingly.com/dashboard/integrations). Click "Connect" on the Segment integration to enable it. -4. In the Segment integration settings on the [Callingly Integrations page](https://callingly.com/dashboard/integrations) you can also select which Team will receive the calls triggered from Segment events. +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Callingly Integrations page](https://callingly.com/dashboard/integrations){:target="_blank”}. Click "Connect" on the Segment integration to enable it. +4. In the Segment integration settings on the [Callingly Integrations page](https://callingly.com/dashboard/integrations){:target="_blank”} you can also select which Team will receive the calls triggered from Segment events. ## Identify @@ -36,4 +34,4 @@ Identify calls will be sent to Callingly as an `identify` event. To trigger a ca If the `phone` trait is valid, formatted either in E.164 or your country's local standard, Callingly will add the visitor as a Lead to your account and trigger a phone call to the Team selected in your Integration settings. -To configure agents, schedules, call routing options and retry settings edit the Team settings on the [Callingly Teams Page](https://callingly.com/dashboard/teams). +To configure agents, schedules, call routing options and retry settings edit the Team settings on the [Callingly Teams Page](https://callingly.com/dashboard/teams){:target="_blank”}. diff --git a/src/connections/destinations/catalog/candu/index.md b/src/connections/destinations/catalog/candu/index.md index cfa075b138..91f8fda979 100644 --- a/src/connections/destinations/catalog/candu/index.md +++ b/src/connections/destinations/catalog/candu/index.md @@ -1,22 +1,19 @@ --- title: Candu Destination rewrite: true -beta: true id: 5c7df2eafeed45000121a49e --- -[Candu](https://www.candu.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the first Editor for your app. Instead of overlaying an experience layer, Candu's embedded components inherit your style guide, so they look like a native part of your interface. Candu helps you build, iterate, and personalize native onboarding experiences that guide your end-users from basic to expert-level fluency. +[Candu](https://www.candu.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the first Editor for your app. Instead of overlaying an experience layer, Candu's embedded components inherit your style guide, so they look like a native part of your interface. Candu helps you build, iterate, and personalize native onboarding experiences that guide your end-users from basic to expert-level fluency. This destination is maintained by Candu Labs. For any issues with the destination, [contact the Candu Support team](mailto:support@candu.ai). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Candu" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Candu Settings page](https://app.candu.ai/settings/workplace). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Candu Settings page](https://app.candu.ai/settings/workplace){:target="_blank”}. ## Page diff --git a/src/connections/destinations/catalog/canny-functions/index.md b/src/connections/destinations/catalog/canny-functions/index.md deleted file mode 100644 index 340c830592..0000000000 --- a/src/connections/destinations/catalog/canny-functions/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Canny-Functions Destination' -hidden: true -beta: true ---- diff --git a/src/connections/destinations/catalog/canny/index.md b/src/connections/destinations/catalog/canny/index.md index 890c3a62bb..b0453e324d 100644 --- a/src/connections/destinations/catalog/canny/index.md +++ b/src/connections/destinations/catalog/canny/index.md @@ -3,17 +3,19 @@ title: Canny Destination rewrite: true hide-dossier: true redirect_from: '/connections/destinations/catalog/canny-functions/' +hidden: true +private: true id: 609d2b40f4bd0f24a5a37fbb --- -[Canny](https://canny.io) is a single place for all customer feedback. It saves you time managing all the feedback while keeping your customers in the loop. Let your customers post and vote on feedback from within your website or mobile app. You'll get an organized list of feedback that you can use to inform your roadmap. +[Canny](https://canny.io){:target="_blank"} is a single place for all customer feedback. It saves you time managing all the feedback while keeping your customers in the loop. Let your customers post and vote on feedback from within your website or mobile app. You'll get an organized list of feedback that you can use to inform your roadmap. This destination is maintained by Canny. For any issues with the destination, [contact the Canny Support team](mailto:segment-help@canny.io). ## Getting Started -{% include content/connection-modes.md %} -1. Go to your [Canny Admin Segment Settings](https://canny.io/redirect?to=%2Fadmin%2Fsettings%2Fsegment). + +1. Go to your [Canny Admin Segment Settings](https://canny.io/redirect?to=%2Fadmin%2Fsettings%2Fsegment){:target="_blank"}. 2. You will then be routed to Segment where you will be prompted to login and authorize the Canny Destination. Select the workspace and source you would like to integrate and click allow. 3. After you click allow you will be rerouted back to Canny where to complete the installation by creating the destination in Segment and configuring it with an API key. diff --git a/src/connections/destinations/catalog/castle/index.md b/src/connections/destinations/catalog/castle/index.md index f9e10de956..22b5de0d86 100644 --- a/src/connections/destinations/catalog/castle/index.md +++ b/src/connections/destinations/catalog/castle/index.md @@ -4,6 +4,12 @@ id: 56a8f566e954a874ca44d3b0 --- [Castle](https://castle.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} monitors every step of the customer journey to help visualize and proactively block fraud that would otherwise fly under the radar. Types of fraud or abuse that can be managed include bots, fake accounts, multi-accounting, and account sharing. +The Castle destination source code is available on GitHub. Source code for the following integrations are available: + +- [iOS](https://github.com/castle/analytics-ios-integration-castle){:target="_blank"} +- [Android](https://github.com/castle/analytics-kotlin-integration-castle){:target="_blank"} +- [Web](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/castle){:target="_blank"} + Castle maintains this destination. For any issues with the destination, contact the [Castle support team](mailto:support@castle.io). ## Getting Started @@ -16,10 +22,61 @@ Calls are now visible in Castle dashboards in real-time. > info "" > Castle ingests Segment Client-side events. Server-side events are dropped and not processed. -> Castle only supports web integrations through Segment, but is in the process of working on mobile support. +> Castle supports web, Android and iOS integrations through Segment. + +### iOS + +1. Add the Castle Segment dependency + + - With Xcode: + + In the Xcode **File** menu, click **Add Packages**. In the resulting dialog where you can search for Swift packages, enter the following repository URL: `https://github.com/castle/analytics-ios-integration-castle` + + + You can optionally pin the package to a specific branch or version, and select the project in your workspace to which you'll add the package. When you're done, click **Add Package**. + + - With Package.swift: + + ``` + .package( + name: "SegmentCastle", + url: "https://github.com/castle/analytics-ios-integration-castle", + from: "1.0.0" + ), + ``` + +2. Next, add the Castle destination to your analytics instance: + ```swift + let analytics = Analytics(configuration: Configuration(writeKey: "")) + + let castleDestination = CastleDestination(userJwt: "") + analytics.add(plugin: castleDestination) + ``` +### Android + +1. You can add the Castle Segment dependency two ways: + + - Add this line to your gradle file: + + ``` + implementation 'com.segment.analytics.kotlin.destinations:castle:' + ``` + + - Add the following for Kotlin DSL: + + ``` + implementation("com.segment.analytics.kotlin.destinations:castle:") + ``` + +2. Next, add the Castle destination to your analytics instance: + + ```kotlin + analytics = Analytics("", applicationContext) + analytics.add(plugin = CastleDestination(userJwt = "")) + ``` ## Page @@ -30,8 +87,6 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.page() ``` - - Segment sends Page calls to Castle as `$page` events. diff --git a/src/connections/destinations/catalog/chameleon/index.md b/src/connections/destinations/catalog/chameleon/index.md index c359105ff2..920b22f177 100644 --- a/src/connections/destinations/catalog/chameleon/index.md +++ b/src/connections/destinations/catalog/chameleon/index.md @@ -2,17 +2,17 @@ title: Chameleon Destination id: 555a14f80a20f4e22f0fb38d --- -Our Chameleon destination code is open-source on GitHub if you want to [check it out](https://github.com/segment-integrations/analytics.js-integration-chameleon). +Our Chameleon destination code is open-source on GitHub if you want to [check it out](https://github.com/segment-integrations/analytics.js-integration-chameleon){:target="_blank"}. ## Getting started -When you enable the Segment direct destination on the [Chameleon dashboard](https://app.trychameleon.com/settings/integrations) we will immediately start receiving your app's user and event data collected by Segment. +When you enable the Segment direct destination on the [Chameleon dashboard](https://app.trychameleon.com/settings/integrations){:target="_blank"} we will immediately start receiving your app's user and event data collected by Segment. -You may need to enable your website domain on the [Chameleon Domains Dashboard](https://app.trychameleon.com/settings/domains) to see User events and properties on Chameleon. +You may need to enable your website domain on the [Chameleon Domains Dashboard](https://app.trychameleon.com/settings/domains){:target="_blank"} to see User events and properties on Chameleon. ## Identify -This helps you target product tours to specific (segments of) users. You can read more about how to segmentations work in [Chameleon's docs](https://help.trychameleon.com/en/articles/1500422-how-to-create-a-target-audience) +This helps you target product tours to specific (segments of) users. You can read more about how to segmentations work in [Chameleon's docs](https://help.trychameleon.com/en/articles/1500422-how-to-create-a-target-audience){:target="_blank"} At a minimum we suggest sending us: - `email` @@ -38,7 +38,7 @@ You can send us your app's events for two main reasons: 1. Signal a `conversion` from a product tour (a user successfully completing the action that they were prompted to take with the tour) 2. Trigger a specific product tour _(coming soon)_ -Product tours should lead to user actions and so offer the option of tagging each Chameleon product tour with a 'conversion event' that helps you track how successful your tour is. We collect data about each tour (users starting, completing, conversions) and send this back to your preferred analytics provider. Read more about the [analytics Chameleon tracks](https://help.trychameleon.com/en/articles/1226450-what-analytics-does-chameleon-provide). +Product tours should lead to user actions and so offer the option of tagging each Chameleon product tour with a 'conversion event' that helps you track how successful your tour is. We collect data about each tour (users starting, completing, conversions) and send this back to your preferred analytics provider. Read more about the [analytics Chameleon tracks](https://help.trychameleon.com/en/articles/1226450-what-analytics-does-chameleon-provide){:target="_blank"}. ## Help -For more information, refer to [Chameleon's docs](https://help.trychameleon.com/) or [email them](mailto:support@trychameleon.com). +For more information, refer to [Chameleon's docs](https://help.trychameleon.com/){:target="_blank"} or [email them](mailto:support@trychameleon.com). diff --git a/src/connections/destinations/catalog/chartbeat/index.md b/src/connections/destinations/catalog/chartbeat/index.md index 070b02eca6..aff9d7cac4 100644 --- a/src/connections/destinations/catalog/chartbeat/index.md +++ b/src/connections/destinations/catalog/chartbeat/index.md @@ -2,7 +2,7 @@ title: Chartbeat Destination id: 54521fd525e721e32a72ee9d --- -Our Chartbeat destination code is open-source on GitHub if you want to [check it out](https://github.com/segment-integrations/analytics.js-integration-chartbeat). +Our Chartbeat destination code is open-source on GitHub if you want to [check it out](https://github.com/segment-integrations/analytics.js-integration-chartbeat){:target="_blank"}. ## Getting Started diff --git a/src/connections/destinations/catalog/churned/index.md b/src/connections/destinations/catalog/churned/index.md new file mode 100644 index 0000000000..8935031919 --- /dev/null +++ b/src/connections/destinations/catalog/churned/index.md @@ -0,0 +1,51 @@ +--- +title: Churned Destination +id: 6638e615c59c2acad44ec223 +--- + +[Churned](https://www.churned.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="\_blank”} is an AI-powered customer success platform for subscription businesses, eliminating the need for rule-based decision making with live AI-driven actions. It uses machine learning to predict churn and drive customer retention. + +This destination is maintained by Churned. For any issues with the destination, [contact the Churned Support team](mailto:info@churned.io). + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="\_blank”} search for "Churned" +2. Select "Churned" and click **Add Destination** +3. Choose which Source should send data to the "Churned" destination. +4. Enter the **API Key** you've received from Churned in the "Churned" destination settings in Segment. + +## Supported methods + +Churned supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). + +### Page + +Send [Page](/docs/connections/spec/page) calls. For example: + +```js +analytics.page(); +``` + +Segment sends Page calls to Churned as a `pageview`. + +### Identify + +Send [Identify](/docs/connections/spec/identify) calls. For example: + +```js +analytics.identify("userId123", { + email: "john.doe@example.com", +}); +``` + +Segment sends Identify calls to Churned as an `identify` event. + +### Track + +Send [Track](/docs/connections/spec/track) calls. For example: + +```js +analytics.track("Login Button Clicked"); +``` + +Segment sends Track calls to Churned as a `track` event. diff --git a/src/connections/destinations/catalog/churnzero/index.md b/src/connections/destinations/catalog/churnzero/index.md index 7bb0c1e942..d2b0663cd4 100644 --- a/src/connections/destinations/catalog/churnzero/index.md +++ b/src/connections/destinations/catalog/churnzero/index.md @@ -3,18 +3,18 @@ title: ChurnZero Destination rewrite: true id: 5c6386ce6b340800017691fa --- -[ChurnZero](https://churnzero.net/) is a real-time Customer Success platform that helps subscription businesses fight churn, expand current accounts, increase product adoption and optimize the customer experience. +[ChurnZero](https://churnzero.net/){:target="_blank"} is a real-time Customer Success platform that helps subscription businesses fight churn, expand current accounts, increase product adoption and optimize the customer experience. This destination is maintained by ChurnZero. For any issues with the destination, [contact the ChurnZero Support team](mailto:support@churnzero.net). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "ChurnZero" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find within ChurnZero under [Admin > Application Keys](https://app.churnzero.net/#/app/admin/applicationKeys). Be sure you are providing the key for your Production instance of ChurnZero. -4. Once you've completed Steps 1-3, notify your ChurnZero Implementation Specialist or Customer Success Manager. The ChurnZero team will finalize your set-up for you. Note that you must also provide your Implementation Specialist or CSM with your company's [Segment Implementation Requirements](https://churnzerohelp.zendesk.com/hc/en-us/articles/360022631452-Usage-Data-Segment-com-Destination). +3. Enter the "API Key" into your Segment Settings UI which you can find within ChurnZero under [Admin > Application Keys](https://app.churnzero.net/#/app/admin/applicationKeys){:target="_blank"}. Be sure you are providing the key for your Production instance of ChurnZero. +4. Once you've completed Steps 1-3, notify your ChurnZero Implementation Specialist or Customer Success Manager. The ChurnZero team will finalize your set-up for you. Note that you must also provide your Implementation Specialist or CSM with your company's [Segment Implementation Requirements](https://churnzerohelp.zendesk.com/hc/en-us/articles/360022631452-Usage-Data-Segment-com-Destination){:target="_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/clearbit-enrichment/index.md b/src/connections/destinations/catalog/clearbit-enrichment/index.md index d6f0564d27..a09fe9ebd5 100644 --- a/src/connections/destinations/catalog/clearbit-enrichment/index.md +++ b/src/connections/destinations/catalog/clearbit-enrichment/index.md @@ -3,15 +3,17 @@ title: Clearbit Enrichment Destination rewrite: true id: 576af9ca80412f644ff13b87 --- -[Clearbit Enrichment](https://clearbit.com/segment) helps customers enrich and append real-time data to an email or domain, driving growth or powering your product with social data, location, job title, company size and technology. +[Clearbit Enrichment](https://clearbit.com/segment){:target="_blank"} helps customers enrich and append real-time data to an email or domain, driving growth or powering your product with social data, location, job title, company size and technology. ## Getting Started -{% include content/connection-modes.md %} +> warning "" +> This destination is not supported with EU Workspaces. + 1. From the Segment web app, click **Catalog**. 2. Search for "Clearbit Enrichment" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In your Segment UI's destination settings, enter your Clearbit **secret** API key (note: it should start with "sk_"). You can find this in the API section of your [Clearbit dashboard](https://dashboard.clearbit.com/api). +3. In your Segment UI's destination settings, enter your Clearbit **secret** API key (note: it should start with "sk_"). You can find this in the API section of your [Clearbit dashboard](https://dashboard.clearbit.com/api){:target="_blank"}. To verify that the destination has been set up correctly, check the Debugger section of your Segment Source. Assuming everything is as it should be, you should start seeing Clearbit Enrichment data populate in the `identify` events – click on the specific event you're interested in to see Clearbit Enrichment traits. These traits will now be available to other Segment destinations in your account. Notice that all Clearbit Enrichment traits are prefixed with `clearbit_` to ensure they don't conflict with existing traits. @@ -27,7 +29,7 @@ analytics.identify('pixar123', { When you call `identify` with a `userId` and `email` trait - **the latter must be present for Clearbit Enrichment to function properly** - we'll send the Segment spec to Clearbit so that they can enrich your data. Once Clearbit enriches your data, they will send back a new `identify` call to your Segment source (Clearbit will have access to your `writeKey`) with additional traits. -You can find details on what traits Clearbit Enrichment adds and exactly what will be in the enriched `identify` call on [Clearbit's site](https://segment.clearbit.com/mapping). +You can find details on what traits Clearbit Enrichment adds and exactly what will be in the enriched `identify` call on [Clearbit's site](https://segment.clearbit.com/mapping){:target="_blank"}. ## Troubleshooting diff --git a/src/connections/destinations/catalog/clearbit-reveal/index.md b/src/connections/destinations/catalog/clearbit-reveal/index.md index e28ecd6a16..71c46ea550 100644 --- a/src/connections/destinations/catalog/clearbit-reveal/index.md +++ b/src/connections/destinations/catalog/clearbit-reveal/index.md @@ -3,19 +3,19 @@ title: Clearbit Reveal Destination rewrite: true id: 57e0726680412f644ff36883 --- -[Clearbit Reveal](https://clearbit.com/segment) helps customers instantly match IP addresses with company names, and see full profiles for all site visitors. It turns your anonymous web traffic into a full company profile — complete with industry, employee count, funding details, and much more. You can find a list of the different attributes you can collect with Clearbit [here](https://clearbit.com/attributes). +[Clearbit Reveal](https://clearbit.com/segment){:target="_blank"} helps customers instantly match IP addresses with company names, and see full profiles for all site visitors. It turns your anonymous web traffic into a full company profile — complete with industry, employee count, funding details, and much more. You can find a list of the different attributes you can collect with Clearbit [here](https://clearbit.com/attributes){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + Setup within Segment: 1. From the Segment web app, click **Catalog**. 2. Search for "Clearbit Reveal" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In your Segment Settings UI, enter your Clearbit **secret** API key (note: it should start with "sk_"). You can find this in the API section of your [Clearbit dashboard](https://dashboard.clearbit.com/api). +3. In your Segment Settings UI, enter your Clearbit **secret** API key (note: it should start with "sk_"). You can find this in the API section of your [Clearbit dashboard](https://dashboard.clearbit.com/api){:target="_blank"}. Setup within Clearbit: -1. From your [Clearbit dashboard](https://dashboard.clearbit.com/integrate) click on the [Reveal product](https://dashboard.clearbit.com/integrate/reveal). +1. From your [Clearbit dashboard](https://dashboard.clearbit.com/integrate){:target="_blank"} click on the [Reveal product](https://dashboard.clearbit.com/integrate/reveal){:target="_blank"}. 2. Click on the Segment integration tile and click to 'Enable with Segment'. 3. Select the source that you connected Clearbit Reveal to as a destination in the above Segment set up instructions. 4. CLick 'Send Data'. @@ -38,7 +38,7 @@ analytics.page('Home', { When you call `page` event from Analytics.js, Clearbit Reveal will send back an enriched `identify` call from their servers. For this to work you **must** send an IP address in the context of your Page calls. Our Analytics.js library collects the IP address for you, otherwise you need to manually retrieve and set it in `context.ip`. The Clearbit Reveal Destination is a server-side destination so you will need to use your secret key. This enriched identify call will only arrive in downstream destinations that are configured to receive server-side `identify` events. -You can find details on what traits Clearbit adds and exactly what will be in the enriched Identify call on [Clearbit's site](https://segment.clearbit.com/mapping) and full documentation on the Reveal API in the [docs here](https://clearbit.com/docs#reveal-api). +You can find details on what traits Clearbit adds and exactly what will be in the enriched Identify call on [Clearbit's site](https://segment.clearbit.com/mapping){:target="_blank"} and full documentation on the Reveal API in the [docs here](https://clearbit.com/docs#reveal-api){:target="_blank"}. **Notes** 1. Clearbit Reveal attributes will not populate on every single identify event as Reveal will not have 100% match rates for your traffic. diff --git a/src/connections/destinations/catalog/clearbrain/index.md b/src/connections/destinations/catalog/clearbrain/index.md index 980196467f..a0d91dc061 100644 --- a/src/connections/destinations/catalog/clearbrain/index.md +++ b/src/connections/destinations/catalog/clearbrain/index.md @@ -3,20 +3,18 @@ title: ClearBrain Destination rewrite: true id: 5c412bc57526b50001622f52 --- -[ClearBrain](https://clearbrain.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides self-serve predictive analytics for growth marketers, using machine learning to automate audience insights and recommendations. +[ClearBrain](https://clearbrain.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides self-serve predictive analytics for growth marketers, using machine learning to automate audience insights and recommendations. This destination is maintained by ClearBrain. For any issues with the destination, [contact the ClearBrain Support team](mailto:support@clearbrain.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "ClearBrain" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [ClearBrain dashboard](https://app.clearbrain.com/connections). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [ClearBrain dashboard](https://app.clearbrain.com/connections){:target="_blank”}. > tip "" > **Optional**: If you are on a Business tier Segment plan, you can sync past events sent through Segment to your ClearBrain instance using [Segment Replay](/docs/guides/what-is-replay/). diff --git a/src/connections/destinations/catalog/clevertap/index.md b/src/connections/destinations/catalog/clevertap/index.md index 645d3755f4..40b58a769c 100644 --- a/src/connections/destinations/catalog/clevertap/index.md +++ b/src/connections/destinations/catalog/clevertap/index.md @@ -7,12 +7,17 @@ cmode-override: true Once the Segment library is integrated, toggle CleverTap on in your Segment destinations, and add your CleverTap Account ID and CleverTap Account Token which you can find in the CleverTap Dashboard under Settings. +CleverTap supports the Identify, Track, Page (server-side only), and Screen (iOS and server-side only) methods. + You can integrate CleverTap using a server-side or mobile destination (iOS or Android). If you are interested in using CleverTap's push notifications or in-app notifications products, you should use the mobile destinations. -All server-side destination requests require both the Segment `anonymousId` and `userId` in the payload. This is a requirement from CleverTap. CleverTap maintains the server-side integration. For any issues with the server-side integration, [contact the CleverTap Support team](https://help.clevertap.com/hc/en-us/requests/new){:target="_blank"}. +For server-side destination requests, CleverTap requires both the Segment `anonymousId` and `userId` in the payload. -CleverTap supports the `identify`, `track`, `page` (server-side only), and `screen` (iOS and server-side only) methods. +CleverTap maintains the server-side and mobile integrations: +- [Android](https://github.com/CleverTap/clevertap-segment-android){:target="_blank"} +- [iOS](https://github.com/CleverTap/clevertap-segment-ios){:target="_blank"} +For any issues with the server-side and mobile integrations, [contact the CleverTap Support team](https://help.clevertap.com/hc/en-us/requests/new){:target="_blank"}. ## Identify @@ -29,8 +34,8 @@ All other traits will be sent to CleverTap as custom attributes. The default log > info "" -> In cloud mode CleverTap uses Segment anononymous ID as the CleverTap ID -> In device mode, CleverTap ignores the anonymous ID and CleverTap injects it's own ID +> In cloud mode, CleverTap uses Segment anonymous ID as the CleverTap ID. +> In device mode, CleverTap ignores the anonymous ID and CleverTap injects its own ID. ## Alias @@ -163,12 +168,6 @@ No further action is required to integrate in-app notifications, which are regis CleverTap has created a sample iOS application that integrates CleverTap using Segment. Check it out at the [GitHub repository](https://github.com/CleverTap/clevertap-segment-ios/tree/master/Example){:target="_blank"}. - -## React Native - -{% include content/react-dest.md %} - - ## Server-Side ### Push Tokens @@ -176,3 +175,10 @@ CleverTap has created a sample iOS application that integrates CleverTap using S If you chose not to bundle the CleverTap Mobile SDK, then you will have to implement your own Push Message processors (and you won't have access to CleverTap's In-App feature). If you decide to implement your own Push Message processors, then you can pass push tokens to CleverTap using the server-side destination. You can do this by sending it inside context.device.token. + + +## Troubleshooting + +### Verbose Logging + +When using Web Device-mode, you can enable verbose logging of all communication with CleverTap servers by setting the `theWZRK_D` variable in `sessionStorage`. In the developer console of your browser, enter `sessionStorage['WZRK_D'] = '';`, you'll see error messages and warnings logged. See the [CleverTap Web Quickstart Guide](https://developer.clevertap.com/docs/web-quickstart-guide#debugging){:target="_blank"} for more details. diff --git a/src/connections/destinations/catalog/clicky/index.md b/src/connections/destinations/catalog/clicky/index.md index 48baf41db7..5490b60be8 100644 --- a/src/connections/destinations/catalog/clicky/index.md +++ b/src/connections/destinations/catalog/clicky/index.md @@ -3,14 +3,14 @@ title: Clicky Destination rewrite: true id: 54521fd525e721e32a72eea2 --- -[Clicky](https://clicky.com/) is a web analytics tool that enables you to monitor, analyze, and react to your blog or web site's traffic in real time. Clicky supports user segmentation, so marketers can define and track customers based on unique constraints like user action, traffic source, location, or device. Additionally, it allows on-site analytics in order to track total visitors on site, pages currently viewed, and user actions like pageviews, downloads, sign ups, and session duration. +[Clicky](https://clicky.com/){:target="_blank"} is a web analytics tool that enables you to monitor, analyze, and react to your blog or web site's traffic in real time. Clicky supports user segmentation, so marketers can define and track customers based on unique constraints like user action, traffic source, location, or device. Additionally, it allows on-site analytics in order to track total visitors on site, pages currently viewed, and user actions like pageviews, downloads, sign ups, and session duration. -Our Clicky destination code is open-source on GitHub. You can check out the code [here](https://github.com/segment-integrations/analytics.js-integration-clicky). +Our Clicky destination code is open-source on GitHub. You can check out the code [here](https://github.com/segment-integrations/analytics.js-integration-clicky){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. diff --git a/src/connections/destinations/catalog/cliff/index.md b/src/connections/destinations/catalog/cliff/index.md index b554dbab74..2a18530a69 100644 --- a/src/connections/destinations/catalog/cliff/index.md +++ b/src/connections/destinations/catalog/cliff/index.md @@ -3,19 +3,19 @@ title: Cliff Destination rewrite: true id: 603bebf26429db1da7b36150 --- -[Cliff](https://cliff.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) monitors all your metrics in real time, detects unexpected changes (such as a sudden spike or dip), and notifies you immediately. It also shows you the root cause behind the unexpected change. +[Cliff](https://cliff.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} monitors all your metrics in real time, detects unexpected changes (such as a sudden spike or dip), and notifies you immediately. It also shows you the root cause behind the unexpected change. This destination is maintained by Cliff.ai. For any issues with the destination, [contact the Cliff Support team](mailto:support@cliff.ai). ## Getting Started -{% include content/connection-modes.md %} -1. Go to the [Cliff Integrations library](https://app.cliff.ai/apps/anomaly-detection/integrations/inbound). + +1. Go to the [Cliff Integrations library](https://app.cliff.ai/apps/anomaly-detection/integrations/inbound){:target="_blank”}. 2. Find "Segment" in the list of available integrations and click **Start**. 3. Name your integration and click **Authorise Segment**. 4. Select your Workspace and Source and click **Allow**. -5. [Create a Data Stream on Cliff](https://app.cliff.ai/apps/anomaly-detection/data-streams/create-streams). Choose which Segment events and dimensions to start monitoring. Enter the name of the event and click the blue **+** button. Repeat to add dimensions. Click **Continue**. +5. [Create a Data Stream on Cliff](https://app.cliff.ai/apps/anomaly-detection/data-streams/create-streams){:target="_blank”}. Choose which Segment events and dimensions to start monitoring. Enter the name of the event and click the blue **+** button. Repeat to add dimensions. Click **Continue**. ![A screenshot of the Cliff data stream configuration page.](images/cliff1.png) **Note**: Cliff ingests _only_ the events you select in this screen. 6. Select how often Cliff should batch the data that Segment sends. diff --git a/src/connections/destinations/catalog/close/index.md b/src/connections/destinations/catalog/close/index.md index b2b9e116cc..08e48d2959 100644 --- a/src/connections/destinations/catalog/close/index.md +++ b/src/connections/destinations/catalog/close/index.md @@ -15,11 +15,6 @@ redirect_from: [Close](https://close.com/){:target="_blank"} is the inside sales CRM of choice for startups and small and midsize businesses (SMBs.) - - - -{% include content/ajs-upgrade.md %} - ## Getting started diff --git a/src/connections/destinations/catalog/commandbar/index.md b/src/connections/destinations/catalog/commandbar/index.md deleted file mode 100644 index c01451975a..0000000000 --- a/src/connections/destinations/catalog/commandbar/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'CommandBar Destination' -hidden: true -id: 638f843c4520d424f63c9e51 -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/comscore/index.md b/src/connections/destinations/catalog/comscore/index.md index 9d7f3c7d4f..3d2c037833 100644 --- a/src/connections/destinations/catalog/comscore/index.md +++ b/src/connections/destinations/catalog/comscore/index.md @@ -3,9 +3,9 @@ title: comScore Destination id: 54521fd525e721e32a72eea1 --- Segment's comScore destination code is open source and available on GitHub. Feel free to check it out: -- [JavaScript](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/comscore) -- [iOS](https://github.com/segment-integrations/analytics-ios-integration-comscore) -- [Android](https://github.com/segment-integrations/analytics-android-integration-comscore) +- [JavaScript](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/comscore){:target="_blank"} +- [iOS](https://github.com/segment-integrations/analytics-ios-integration-comscore){:target="_blank"} +- [Android](https://github.com/segment-integrations/analytics-android-integration-comscore){:target="_blank"} ## Getting Started @@ -25,14 +25,10 @@ To get started with comScore and Segment, you'll want to first integrate your mo For mobile sources, you will need to enter your comScore **c2 ID** and **Publisher Secret**. ### iOS -To install comScore via Segment on iOS, please follow the additional set up steps in the Segment-Comscore iOS repository [here](https://github.com/segment-integrations/analytics-ios-integration-comscore#analytics-ios-integration-comscore). +To install comScore via Segment on iOS, please follow the additional set up steps in the Segment-Comscore iOS repository [here](https://github.com/segment-integrations/analytics-ios-integration-comscore#analytics-ios-integration-comscore){:target="_blank"}. ### Android -To install comScore via Segment on Android, please follow the additional set up steps in the Segment-Comscore Android repository [here](https://github.com/segment-integrations/analytics-android-integration-comscore#analytics-android-integration-comscore). - -### React Native - -{% include content/react-dest.md only="ios"%} +To install comScore via Segment on Android, please follow the additional set up steps in the Segment-Comscore Android repository [here](https://github.com/segment-integrations/analytics-android-integration-comscore#analytics-android-integration-comscore){:target="_blank"}. ## Page @@ -75,7 +71,7 @@ Segment will map values to comScore's `cs_ucfr` label as outlined below: ## Video Streaming -**Note**: The video tracking functionality is in beta for **mobile only**, and requires version 3.0.0 of the `Segment-comScore` SDK. If you have feedback on or questions about this beta feature, [contact us](https://segment.com/help/contact)! +**Note**: The video tracking functionality is in beta for **mobile only**, and requires version 3.0.0 of the `Segment-comScore` SDK. If you have feedback on or questions about this beta feature, [contact us](https://segment.com/help/contact){:target="_blank"}! To get started tracking video content through Segment, make sure you are using a media player that has an API which allows you to detect the player state. Refer to our [Video Spec](/docs/connections/spec/video/) and implement video tracking as outlined there. We will map the semantic events to comScore's relevant methods. diff --git a/src/connections/destinations/catalog/convertflow/index.md b/src/connections/destinations/catalog/convertflow/index.md index 0754a59570..0fce2175af 100644 --- a/src/connections/destinations/catalog/convertflow/index.md +++ b/src/connections/destinations/catalog/convertflow/index.md @@ -3,20 +3,18 @@ title: ConvertFlow Destination rewrite: true id: 5cb607714cab700001f13480 --- -[ConvertFlow](https://www.convertflow.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the all-in-one platform for converting your website visitors. From one builder, you can create, personalize and launch dynamic website content, forms, popups, sticky bars, surveys, quizzes and landing pages, without coding. +[ConvertFlow](https://www.convertflow.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the all-in-one platform for converting your website visitors. From one builder, you can create, personalize and launch dynamic website content, forms, popups, sticky bars, surveys, quizzes and landing pages, without coding. This destination is maintained by ConvertFlow. For any issues with the destination, [contact the ConvertFlow Support team](mailto:support@convertflow.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "ConvertFlow" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Paste in your ConvertFlow website's ID into your Segment Settings UI, which you can find by heading into your [ConvertFlow account](https://app.convertflow.com/), selecting a website and copying the website ID from the website dashboard's URL. This will enable the ConvertFlow website's tracking snippet as a Destination for your selected Segment source. Your ConvertFlow website campaigns can then be fully managed from the ConvertFlow dashboard. +3. Paste in your ConvertFlow website's ID into your Segment Settings UI, which you can find by heading into your [ConvertFlow account](https://app.convertflow.com/){:target="_blank”}, selecting a website and copying the website ID from the website dashboard's URL. This will enable the ConvertFlow website's tracking snippet as a Destination for your selected Segment source. Your ConvertFlow website campaigns can then be fully managed from the ConvertFlow dashboard. ## Identify diff --git a/src/connections/destinations/catalog/correlated/index.md b/src/connections/destinations/catalog/correlated/index.md index 6b1ad222f2..438c1c4fdf 100644 --- a/src/connections/destinations/catalog/correlated/index.md +++ b/src/connections/destinations/catalog/correlated/index.md @@ -8,13 +8,13 @@ id: 60df6d4c038b872f10c54801 This destination is maintained by Correlated. For any issues with the destination, [contact the Correlated Support team](mailto:support@getcorrelated.com). > success "" -> Set up a free account with Correlated by visiting their [website](https://www.getcorrelated.com/get-started){:target="_new"}. +> Set up a free account with Correlated by visiting their [website](https://docs.getcorrelated.com/docs/setting-up-your-account){:target="_new"}. ## Getting Started ### Connect with OAuth 1. Log in to the Correlated application. -2. Go to [Correlated integrations](https://app.getcorrelated.com/integrations) and select the Segment integration. +2. Go to [Correlated integrations](https://app.getcorrelated.com/integrations){:target="_blank"} and select the Segment integration. 3. Click **Connect to Segment** to connect with OAuth. 4. Select the relevant Sources that you want to include (Correlated recommends that you include your website and application) @@ -22,7 +22,7 @@ This destination is maintained by Correlated. For any issues with the destinatio 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Correlated" in the Destinations Catalog, and select the "Correlated" destination. 3. Choose which Source should send data to the "Correlated" destination. -4. Go to [Correlated integrations](https://app.getcorrelated.com/integrations) and click on the "Segment" integration. +4. Go to [Correlated integrations](https://app.getcorrelated.com/integrations){:target="_blank"} and click on the "Segment" integration. 5. Copy the "Segment API key". 6. Enter the "Segment API Key" in the "Correlated" destination settings in Segment. diff --git a/src/connections/destinations/catalog/countly/index.md b/src/connections/destinations/catalog/countly/index.md index af294f4b3e..b15ac525e9 100644 --- a/src/connections/destinations/catalog/countly/index.md +++ b/src/connections/destinations/catalog/countly/index.md @@ -12,11 +12,6 @@ After you integrate the appropriate destination with your app, add the Countly d These new settings take up to an hour to propagate to existing users, but is instantaneous for new users. -### React Native set up - -{% include content/react-dest.md %} - - ## Track Countly helps you better understand your user's behavior. To accomplish that, [`track`](/docs/connections/spec/track/) your user's actions in detail. diff --git a/src/connections/destinations/catalog/courier/index.md b/src/connections/destinations/catalog/courier/index.md index f4859b15ef..8050399910 100644 --- a/src/connections/destinations/catalog/courier/index.md +++ b/src/connections/destinations/catalog/courier/index.md @@ -3,22 +3,35 @@ rewrite: true title: Courier Destination id: 5e4b07ed88472cc19ea4f8d0 --- -[Courier](https://courier.com?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides a way to design and deliver notifications. Design once with a rich visual editor and deliver to any channel through one API request. -This destination is maintained by Courier. For any issues with the destination, [contact the Courier support team](mailto:support@courier.com). +[Courier](https://courier.com?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides a way to design and deliver notifications. Design once with a rich visual editor and deliver to any channel through one API request. -{% include content/beta-note.md %} +This destination is maintained by Courier. For any issues with the destination, [contact the Courier support team](mailto:support@courier.com). ## Getting Started -{% include content/connection-modes.md %} - 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for “Courier” in the Destinations Catalog, and select the “Courier” destination. 3. Choose which Source should send data to the “Courier” destination. -4. Go to the [Courier Settings Page](https://app.courier.com/settings), find and copy the “Auth Token”. +4. Go to the [Courier Settings Page](https://app.courier.com/settings){:target="_blank”}, find and copy the “Auth Token”. 5. Enter the “Auth Token” in the “Courier” destination settings field “API Key” in Segment. +## Group + +If you aren't familiar with the Segment Spec, read the [Group method documentation](/docs/connections/spec/group/) to learn about what it does. An example call would look like: + +```js +analytics.group("0e8c78ea9d97a7b8185e8632", { + name: "Initech", + industry: "Technology", + employees: 329, + plan: "enterprise", + "total billed": 830, +}); +``` + +Segment sends Group calls to Courier as an `group` event. + ## Identify If you aren't familiar with the Segment Spec, read through the [Identify method documentation](/docs/connections/spec/identify/) to learn about what it does. An example call would look like: @@ -33,7 +46,7 @@ Segment sends Identify calls to Courier as an `identify` event. ### User Profiles -Identify calls made from Segment automatically create profiles for users in Courier. `Traits` included in the Segment Identify call automatically merge into a user's Courier Profile over time. +Identify calls made from Segment automatically create profiles for users in Courier. `Traits` included in the Segment Identify call automatically merge into a user's Courier Profile over time. The example below shows a few basic properties you might want to track if you send notifications to users in one or more channels: @@ -50,28 +63,28 @@ analytics.identify('userId123', { }); ``` -For more information on how Courier handles profiles, see the [Courier Profile documentation](https://docs.courier.com/reference/profiles-api?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) +For more information on how Courier handles profiles, see the [Courier Profile documentation](https://docs.courier.com/reference/profiles-api?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”}. ## Track If you aren't familiar with the Segment Spec, read through the [Track method documentation](/docs/connections/spec/track/) to learn about what it does. An example call would look like: ```js -analytics.track('Login Button Clicked') +analytics.track("Login Button Clicked"); ``` Segment sends Track calls to Courier as a `track` event. ### Inbound Events and Properties -Segment Track events are inbound events that might trigger a notification when Courier receives them. To begin, events appear in [Courier's Data Logs](https://app.courier.com/data/messages?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) after you configure the Courier destination. +Segment Track events are inbound events that might trigger a notification when Courier receives them. To begin, events appear in [Courier's Data Logs](https://app.courier.com/data/messages?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} after you configure the Courier destination. -All Inbound Events coming from Segment Track calls appear with a `Segment-TrackEvent` prefix in Courier to help distinguish them from other inbound events. +All Inbound Events coming from Segment Track calls appear with a `Segment-TrackEvent` prefix in Courier to help distinguish them from other inbound events. -Courier extracts data from the Segment Track `properties` object, and conditionally triggers a request to the [Courier Send API](https://www.courier.com/docs/reference/send/message/) - only if that event is already [mapped](https://help.courier.com/en/articles/4202416-how-to-create-and-map-event-triggers-for-your-notifications). +Courier extracts data from the Segment Track `properties` object, and conditionally triggers a request to the [Courier Send API](https://www.courier.com/docs/reference/send/message/){:target="_blank”} - only if that event is already [mapped](https://www.courier.com/docs/platform/sending/create-map-events/){:target="_blank”}. -* Segment passes all `properties` from the Track call to the `Send API` as elements in the `data` json objects. You can use these data points as variables in the Notification Template or as input on conditional routing logic. -* Courier uses the `userId` or `anonymousId` to look up and include the associated `User Profile` with the inbound event. (See the note in the [Identify section](#identify) above.) +- Segment passes all `properties` from the Track call to the `Send API` as elements in the `data` json objects. You can use these data points as variables in the Notification Template or as input on conditional routing logic. +- Courier uses the `userId` or `anonymousId` to look up and include the associated `User Profile` with the inbound event. (See the note in the [Identify section](#identify) above.) ```js analytics.track('Login Button Clicked', { @@ -82,8 +95,8 @@ analytics.track('Login Button Clicked', { ``` > note "Note:" -> Courier does not send notifications until you publish a Notification Template and map incoming Segment Track events to that published Notification Template. If you send data to Courier before you complete those steps, incoming events are marked with a status of `Unmapped`. +> Courier does not send notifications until you publish a Notification Template and map incoming Segment Track events to that published Notification Template. If you send data to Courier before you complete those steps, incoming events are marked with a status of `Unmapped`. ### Mapping Inbound Events to Notification Templates -Once you are comfortable with the Notification Template(s) and are ready to send Notifications, you can map these inbound events to start sending. You can do this directly from the [Event Log in Courier](https://app.courier.com/data/messages?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) or in the `Events` settings page. +Once you are comfortable with the Notification Template(s) and are ready to send Notifications, you can map these inbound events to start sending. You can do this directly from the [Event Log in Courier](https://app.courier.com/data/messages?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} or in the `Events` settings page. diff --git a/src/connections/destinations/catalog/crazy-egg/index.md b/src/connections/destinations/catalog/crazy-egg/index.md index dccdddd3ec..73df0af633 100644 --- a/src/connections/destinations/catalog/crazy-egg/index.md +++ b/src/connections/destinations/catalog/crazy-egg/index.md @@ -3,21 +3,21 @@ title: Crazy Egg Destination rewrite: true id: 54521fd525e721e32a72eea7 --- -[Crazy Egg](https://www.crazyegg.com/) is a user testing tool that gives you heatmaps, clickmaps and scrollmaps of your visitors interacting with your site. It helps you learn where your users are having trouble. The Crazy Egg Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-crazy-egg). +[Crazy Egg](https://www.crazyegg.com/){:target="_blank"} is a user testing tool that gives you heatmaps, clickmaps and scrollmaps of your visitors interacting with your site. It helps you learn where your users are having trouble. The Crazy Egg Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-crazy-egg){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Crazy Egg" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Navigate to the [set up page within your Crazy Egg UI](https://app.crazyegg.com/v2/install/manually) and copy the Account Number which should be a series of 8-9 numbers in bold. +3. Navigate to the [set up page within your Crazy Egg UI](https://app.crazyegg.com/v2/install/manually){:target="_blank"} and copy the Account Number which should be a series of 8-9 numbers in bold. 4. Enter this in the Segment app's destination settings under "Account Number". 5. Enter the URL of the page you want to use heatmap tracking on to complete the set up process. Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading the Crazy Egg snippet and recording heatmap data. -You can navigate to the [Crazy Egg Dashboard](https://app.crazyegg.com/v2/dashboard) to track the data. +You can navigate to the [Crazy Egg Dashboard](https://app.crazyegg.com/v2/dashboard){:target="_blank"} to track the data. > note "" > **Note**: It may take up to 24-48 hours for initial data to show up. @@ -36,6 +36,6 @@ As this is automatically included in the `analytics.js` snippet by default, you ## Troubleshooting ### I can't map user variables -The current Crazy Egg Destination doesn't support mapping of user variables out of the box. You will need to add your own additional JavaScript as specified [here](https://help.crazyegg.com/articles/61-user-variables). +The current Crazy Egg Destination doesn't support mapping of user variables out of the box. You will need to add your own additional JavaScript as specified [here](https://help.crazyegg.com/articles/61-user-variables){:target="_blank"}. {% include content/client-side-script-unverified.md %} diff --git a/src/connections/destinations/catalog/crisp/index.md b/src/connections/destinations/catalog/crisp/index.md index 8fdad84c34..53cf49b5c0 100644 --- a/src/connections/destinations/catalog/crisp/index.md +++ b/src/connections/destinations/catalog/crisp/index.md @@ -3,15 +3,15 @@ title: Crisp Destination rewrite: true id: 5d284cc671bb1c0001f41d2a --- -[Crisp](https://crisp.chat/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is an all-in-one solution to communicate with your customers using text-messaging. +[Crisp](https://crisp.chat/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an all-in-one solution to communicate with your customers using text-messaging. This destination is maintained by Crisp. For any issues with the destination, [contact the Crisp Support team](mailto:support@crisp.chat). ## Getting Started -{% include content/connection-modes.md %} + -1. Go to the [Crisp Plugins page](http://app.crisp.chat). +1. Go to the [Crisp Plugins page](http://app.crisp.chat){:target="_blank"}. 2. Search for the "Segment" plugin, click **Connect to Segment**. 3. The Segment App opens in a new window. Log in to authenticate the connection from Crisp. 4. Select the Workspace and Source to connect with Crisp. diff --git a/src/connections/destinations/catalog/criteo-app-web-events/index.md b/src/connections/destinations/catalog/criteo-app-web-events/index.md index 9637813ea2..99da7bddaa 100644 --- a/src/connections/destinations/catalog/criteo-app-web-events/index.md +++ b/src/connections/destinations/catalog/criteo-app-web-events/index.md @@ -15,7 +15,7 @@ Currently this destination supports events originating from Mobile or Web source To get started with Criteo Events and Segment, you'll need: -1. An existing account with [Criteo](http://www.criteo.com/). +1. An existing account with [Criteo](http://www.criteo.com/){:target="_blank"}. 2. A data source integrated with either one of our mobile SDK's ([iOS](/docs/connections/sources/catalog/libraries/mobile/ios/) or [Android](/docs/connections/sources/catalog/libraries/mobile/android/)) or JavaScript library ([Analytics.js](/docs/connections/sources/catalog/libraries/website/javascript/)) @@ -379,7 +379,7 @@ window.criteo_q.push({ event: 'viewItem', item: 'PRODUCT-ID', sub_status: 'trial ### Setting Emails -It's easy to associate emails with a user, if there's an `email` property in a [`track`](/docs/connections/spec/track/) call, we'll include the `setHashedEmail` event to Criteo along with your event. We'll take care of hashing it for you +If you make an [identify call](/docs/connections/spec/identify/) that has an `email` trait in the payload, this email is stored as a customer trait. We then include a hashed version of this email in subsequent [`track`](/docs/connections/spec/track/) calls by pushing the `setHashedEmail` event to Criteo along with your event. Segment takes care of hashing customer emails for you. ### Criteo Data Centers diff --git a/src/connections/destinations/catalog/criteo-audiences/index.md b/src/connections/destinations/catalog/criteo-audiences/index.md index d07260644a..d149042adc 100644 --- a/src/connections/destinations/catalog/criteo-audiences/index.md +++ b/src/connections/destinations/catalog/criteo-audiences/index.md @@ -51,7 +51,7 @@ You will also need your Criteo Advertiser ID. Please reach out to your Criteo Ac 7. Click **Save Changes**. -8. In the **Mappings** tab, click **New Mapping** and select **Add Users to Audience**. Don't change any defaults. +8. In the **Mappings** tab, click **New Mapping** and select **Add Users to Audience**. To hash emails before you send them to Criteo, select **yes** in the **Hash Emails** dropdown. By default, emails are not hashed before you send them to Criteo; however, Criteo will hash the emails before storing them in our system. DO NOT change any other default settings. 9. Under the **Configure actions fields**, set **Enable Batching** to *Yes* and click **Save**. diff --git a/src/connections/destinations/catalog/criteo-offline-conversions/index.md b/src/connections/destinations/catalog/criteo-offline-conversions/index.md index 33d562185b..5d911ae00a 100644 --- a/src/connections/destinations/catalog/criteo-offline-conversions/index.md +++ b/src/connections/destinations/catalog/criteo-offline-conversions/index.md @@ -4,14 +4,14 @@ rewrite: true hide-personas-partial: true id: 5d433ab511dfe7000134faca --- -[Criteo Offline Conversions](https://www.criteo.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) enables offline event tracking so marketers can run Omnichannel Campaigns by leveraging deterministic matching of SKU-level offline sales data with online user profiles. Criteo can predict which store the shopper prefers to visit and deliver personalized recommendations for products that entice them to visit and purchase. +[Criteo Offline Conversions](https://www.criteo.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} enables offline event tracking so marketers can run Omnichannel Campaigns by leveraging deterministic matching of SKU-level offline sales data with online user profiles. Criteo can predict which store the shopper prefers to visit and deliver personalized recommendations for products that entice them to visit and purchase. The Criteo Offline Conversions Destination and this document are maintained by Criteo. For any issues with the destination, [let the Criteo team know](mailto:support@criteo.com)! ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Criteo Offline Conversions" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/crittercism/index.md b/src/connections/destinations/catalog/crittercism/index.md index c292c46af7..0a015c4e55 100644 --- a/src/connections/destinations/catalog/crittercism/index.md +++ b/src/connections/destinations/catalog/crittercism/index.md @@ -3,7 +3,7 @@ title: Crittercism Destination redirect_from: '/connections/destinations/catalog/apteligent/' id: 54521fd525e721e32a72eea3 --- -Our Crittercism destination code is open sourced on GitHub. Feel free to check it out: [iOS](https://github.com/segment-integrations/analytics-ios-integration-crittercism), [Android](https://github.com/segment-integrations/analytics-android-integration-crittercism). +Our Crittercism destination code is open sourced on GitHub. Feel free to check it out: [iOS](https://github.com/segment-integrations/analytics-ios-integration-crittercism){:target="_blank"}, [Android](https://github.com/segment-integrations/analytics-android-integration-crittercism){:target="_blank"}. ## Getting Started @@ -11,13 +11,6 @@ To get started with Crittercism and Segment, you'll want to integrate our [Andro Once the Segment library is integrated with your app, toggle Crittercism on in your Segment destination catalog, and add your **App Id** which you can find in your [Crittercism app settings](https://app.crittercism.com/developers/login). These new settings will take up to an hour to propagate to all of your existing users. For new users it'll be instantaneous! -### React Native set up - -{% include content/react-dest.md %} - -- - - - - ## Identify Crittercism can show you information about the user using your app. You can record that info with our [`identify`](/docs/connections/spec/identify/) method. You should put the `identify` call as soon as you know the user's identity. This usually happens after they register or log in. diff --git a/src/connections/destinations/catalog/crossing-minds/index.md b/src/connections/destinations/catalog/crossing-minds/index.md index 46896b87b2..104118851a 100644 --- a/src/connections/destinations/catalog/crossing-minds/index.md +++ b/src/connections/destinations/catalog/crossing-minds/index.md @@ -7,8 +7,6 @@ id: 602c595c1cdf37acb79bb5d5 Crossing Minds maintains this destination. For any issues with the destination, [contact the Crossing Minds Support team](mailto:support@crossingminds.com). -{% include content/beta-note.md %} - ## Getting Started diff --git a/src/connections/destinations/catalog/crowdpower/index.md b/src/connections/destinations/catalog/crowdpower/index.md index 49c8e80e11..1ba41173f7 100644 --- a/src/connections/destinations/catalog/crowdpower/index.md +++ b/src/connections/destinations/catalog/crowdpower/index.md @@ -1,23 +1,20 @@ --- title: CrowdPower Destination rewrite: true -beta: true id: 5e59dad99437ab152550ce1f --- -[CrowdPower](https://crowdpower.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a growth marketing platform that enables businesses to track key customer actions and deliver automated tailored communications to drive sales and increase engagement. +[CrowdPower](https://crowdpower.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a growth marketing platform that enables businesses to track key customer actions and deliver automated tailored communications to drive sales and increase engagement. This destination is maintained by CrowdPower. For any issues with the destination, [contact the CrowdPower Support team](mailto:support@crowdpower.io). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "CrowdPower" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the API Key into your Segment Settings UI which you can find from your [CrowdPower Project Settings](https://app.crowdpower.io). +3. Enter the API Key into your Segment Settings UI which you can find from your [CrowdPower Project Settings](https://app.crowdpower.io){:target="_blank"}. 4. To find your CrowdPower API Key, go to the CrowdPower Console and click **Settings** in the sidebar menu. Use your CrowdPower project's Public Key as the API key for Segment. ## Identify diff --git a/src/connections/destinations/catalog/cruncher/index.md b/src/connections/destinations/catalog/cruncher/index.md index eb23ef61cb..8cde726324 100644 --- a/src/connections/destinations/catalog/cruncher/index.md +++ b/src/connections/destinations/catalog/cruncher/index.md @@ -3,22 +3,20 @@ title: Cruncher Destination rewrite: true id: 5c785483f45dbc00017f0731 --- -[Cruncher](https://cruncherlabs.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides an end-to-end data crunching platform with a focus on data science and advanced analytics for analysts and business people. It lets you bring all your siloed data sources in one place and empowers you to extract deep insights using a powerful, yet simple interface. +[Cruncher](https://cruncherlabs.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides an end-to-end data crunching platform with a focus on data science and advanced analytics for analysts and business people. It lets you bring all your siloed data sources in one place and empowers you to extract deep insights using a powerful, yet simple interface. This destination is maintained by Cruncher. For any issues with the destination, [contact the Cruncher Support team](mailto:support@cruncherlabs.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Cruncher" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Cruncher dashboard](https://tower.cruncherlabs.com/connectors). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Cruncher dashboard](https://tower.cruncherlabs.com/connectors){:target="_blank”}. -Alternatively, you can connect Segment to Cruncher directly from your [Cruncher dashboard](https://tower.cruncherlabs.com/connectors). For more information, visit [Cruncher Documentation](https://docs.cruncherlabs.com/connectors/saas/segment). +Alternatively, you can connect Segment to Cruncher directly from your [Cruncher dashboard](https://tower.cruncherlabs.com/connectors){:target="_blank"}. For more information, visit [Cruncher Documentation](https://docs.cruncherlabs.com/connectors/saas/segment){:target="_blank”}. _Optional:_ If you would like to sync your past events which were sent through Segment into your Cruncher instance as a Business Tier customer, you have the option of leveraging [Segment Replay](/docs/connections/data-export-options/#business-plan-customers). diff --git a/src/connections/destinations/catalog/custify/index.md b/src/connections/destinations/catalog/custify/index.md index 4bbb333a1b..266fd7224d 100644 --- a/src/connections/destinations/catalog/custify/index.md +++ b/src/connections/destinations/catalog/custify/index.md @@ -3,19 +3,17 @@ title: Custify Destination rewrite: true id: 5cf78a8db6bcdf00017208cd --- -[Custify](https://www.custify.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners)'s Customer Success Platform is designed for B2B SaaS businesses and enables them to reduce their churn and increase customer lifetime value. +[Custify](https://www.custify.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}'s Customer Success Platform is designed for B2B SaaS businesses and enables them to reduce their churn and increase customer lifetime value. This destination is maintained by Custify. For any issues with the destination, [contact the Custify Support team](mailto:contact@custify.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Custify" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Custify Developer area](https://app.custify.com/settings/developer/api-key). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Custify Developer area](https://app.custify.com/settings/developer/api-key){:target="_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/customer-io-actions/index.md b/src/connections/destinations/catalog/customer-io-actions/index.md index 3dab8d3657..15a9f54114 100644 --- a/src/connections/destinations/catalog/customer-io-actions/index.md +++ b/src/connections/destinations/catalog/customer-io-actions/index.md @@ -36,9 +36,6 @@ id: 5f7dd78fe27ce7ff2b8bfa37 ## Migration from Customer.io classic -{% include content/ajs-upgrade.md %} - - Keep the following in mind if you plan to move to Customer.io (Actions) from the classic Customer.io destination. {% include components/actions-map-table.html name="customer-io" %} @@ -53,3 +50,6 @@ Customer.io makes an exception for the `created_at` trait, converting ISO-8601 t ## Device token collection Segment does not automatically collect push notification tokens. These parameters are required by Customer.io, requiring logic to be implemented to collect these values. As an example, you can use [this plugin](https://github.com/segmentio/analytics-react-native/tree/master/packages/plugins/plugin-device-token){:target="_blank"} to collect the Firebase Cloud Messaging device token for React Native. + +## In-App Messaging +The Customer.io Actions destination is built and maintained by Segment's partner Customer.io, and does not currently support [in-app messaging](https://customer.io/docs/journeys/in-app-getting-started/#javascript-snippet). Segment recommends reaching out to them to express your interest in using in-app messaging with the Segment integration. diff --git a/src/connections/destinations/catalog/customer-io/index.md b/src/connections/destinations/catalog/customer-io/index.md index dc1516eb71..a8ffce950d 100644 --- a/src/connections/destinations/catalog/customer-io/index.md +++ b/src/connections/destinations/catalog/customer-io/index.md @@ -7,7 +7,7 @@ maintenance: true id: 54521fd525e721e32a72eea8 actions-slug: "customer-io-actions" --- -[Customer.io](https://customer.io/) helps you send automated email, push, SMS, and webhooks based on your customers' activities in your app or product. It makes conversion tracking, optimization and re-marketing easier. The `analytics.js` Customer.io Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/customerio). +[Customer.io](https://customer.io/){:target="_blank"} helps you send automated email, push, SMS, and webhooks based on your customers' activities in your app or product. It makes conversion tracking, optimization and re-marketing easier. The `analytics.js` Customer.io Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/customerio){:target="_blank"}. > success "" > **Good to know**: This page is about the Customer.io Segment destination, which receives data from Segment. There's also a page about the [Customer.io Segment source](/docs/connections/sources/catalog/cloud-apps/customer-io/), which sends data _to_ Segment! @@ -15,7 +15,7 @@ actions-slug: "customer-io-actions" ## Getting Started -{% include content/connection-modes.md %} + You can follow the setup guide through Segment using the steps below, or you can automatically sync your Customer.io connection settings to your Segment source using the flow in your Customer.io workspace's Integrations page. @@ -118,9 +118,9 @@ analytics.track('Clicked Button'); Track events send to Customer.io as `custom events`. In the Customer.io "Activity Logs", "Activity Type" sets to `event` and "Activity Name" sets to the event name. -## Device Token Set up +## Device token setup -Set `device.token` before you send the `Application Installed`, `Application Uninstalled`, or `Application Opened` events to Segment. +Set `device.token` before you send the `Application Installed`, `Application Uninstalled`, or `Application Opened` events to Segment. For more on why you'd want to send `device.token`, see Customer.io's [device token documentation](https://customer.io/docs/journeys/device-tokens/#what-is-a-device-token){:target="_blank"}. You'll likely need to extract this value from your push notification provider. For that, you need to make the following calls: @@ -131,7 +131,7 @@ For that, you need to make the following calls: ## Application Installed -[Application Installed](/docs/connections/spec/mobile/#application-installed) events will add or update a device in the person's Customer.io profile using [this](https://customer.io/docs/api/#operation/add_device) API endpoint. Note, you must pass a device token in your event payload using a `context.device.token` property. See more on Contextual properties [here](/docs/connections/spec/common/#context). +[Application Installed](/docs/connections/spec/mobile/#application-installed) events will add or update a device in the person's Customer.io profile using [this](https://customer.io/docs/api/#operation/add_device){:target="_blank"} API endpoint. Note, you must pass a device token in your event payload using a `context.device.token` property. See more on Contextual properties [here](/docs/connections/spec/common/#context). {% comment %} api-example '{ "action": "track", @@ -211,7 +211,7 @@ For that, you need to make the following calls: ## Application Uninstalled -[Application Uninstalled](/docs/connections/spec/mobile/#application-installed) events will remove the device from the person's Customer.io profile using [this](https://customer.io/docs/api/#operation/delete_device) API endpoint. Note, you must pass a device token in your event payload using a `context.device.token` property. See more on [Contextual properties](/docs/connections/spec/common/#context). +[Application Uninstalled](/docs/connections/spec/mobile/#application-installed) events will remove the device from the person's Customer.io profile using [this](https://customer.io/docs/api/#operation/delete_device){:target="_blank"} API endpoint. Note, you must pass a device token in your event payload using a `context.device.token` property. See more on [Contextual properties](/docs/connections/spec/common/#context). {% comment %} api-example '{ @@ -263,12 +263,13 @@ To enable this feature: ## Best Practices ### Rate Limits -Customer.io has limits on the data collected by their API. To ensure your events arrive in Customer.io, make sure that you're respecting the limits placed on the [Customer.io API](https://customer.io/docs/api/#tag/trackLimit). If you're using Segment's [HTTP API](/docs/connections/sources/catalog/libraries/server/http/) to send a batch of events to Customer.io at once, make sure you throttle the `import` to 100-200 requests per second. +Customer.io has limits on the data collected by their API. To ensure your events arrive in Customer.io, make sure that you're respecting the limits placed on the [Customer.io API](https://customer.io/docs/api/#tag/trackLimit){:target="_blank"}. If you're using Segment's [HTTP API](/docs/connections/sources/catalog/libraries/server/http/) to send a batch of events to Customer.io at once, make sure you throttle the `import` to 100-200 requests per second. ## Troubleshooting ### No Events in Customer.io from the Browser Remember that before Segment can send events to Customer.io from client-side JavaScript, the current user must identify with their `userId`. The user's email address is only used to identify them if that is the ID on record for them in Customer.io. +Verify that your Customer.io workspace doesn't have any filters configured, as these filters could prevent campaigns from triggering. ### Page events not associated with user Page events will associate to a user if the user has been previously identified in Customer.io. If you identify a user after making Page calls, the previous page events won't associate to the user in Customer.io. diff --git a/src/connections/destinations/catalog/customersuccessbox/index.md b/src/connections/destinations/catalog/customersuccessbox/index.md index ec28ef5f7b..3fb899e9e0 100644 --- a/src/connections/destinations/catalog/customersuccessbox/index.md +++ b/src/connections/destinations/catalog/customersuccessbox/index.md @@ -3,16 +3,13 @@ title: CustomerSuccessBox Destination rewrite: true id: 5c9ce8b88171a10001f9eefa --- -[CustomerSuccessBox](https://customersuccessbox.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is Outcome Driven Customer Success software, which helps maximize retention, drive product adoption and grow revenue for your B2B SaaS +[CustomerSuccessBox](https://customersuccessbox.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is Outcome Driven Customer Success software, which helps maximize retention, drive product adoption and grow revenue for your B2B SaaS This destination is maintained by CustomerSuccessBox. For any issues with the destination, [contact the CustomerSuccessBox Support team](mailto:support@customersuccessbox.com). -{% include content/beta-note.md %} - - ## Getting Started -{% include content/connection-modes.md %} + ### Adding Destination @@ -26,7 +23,7 @@ This destination is maintained by CustomerSuccessBox. For any issues with the de Send **account_id** and **user_id** in **traits** of an identify call to set and update the traits of a unique user belonging to a unique Account. -To learn more about user traits that are supported (including custom traits), check **User traits** section from [here](https://support.customersuccessbox.com/article/77-customersuccessbox-destination-on-segment-com) +To learn more about user traits that are supported (including custom traits), check **User traits** section from [here](https://support.customersuccessbox.com/article/77-customersuccessbox-destination-on-segment-com){:target="_blank”}. If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: @@ -44,7 +41,7 @@ Identify calls will be sent to CustomerSuccessBox as an `identify` event. Send **account_id** and **user_id** in properties of a track call to attribute the event to a unique user belonging to a unique Account. -You can also pass **product_id** and **module_id** in properties of a track call to define a module and product for the event. To learn more, check **Understanding Product Usage** section [here](https://support.customersuccessbox.com/article/70-getting-started-with-customersuccessbox) +You can also pass **product_id** and **module_id** in properties of a track call to define a module and product for the event. To learn more, check **Understanding Product Usage** section [here](https://support.customersuccessbox.com/article/70-getting-started-with-customersuccessbox){:target="_blank”}. If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: @@ -63,7 +60,7 @@ Track calls will be sent to CustomerSuccessBox as a `track` event. Send **account_id** in traits of a group call to set and update the traits of a unique Account. -To learn more about account traits that are supported (including custom traits), check **Account traits** section from [here](https://support.customersuccessbox.com/article/77-customersuccessbox-destination-on-segment-com) +To learn more about account traits that are supported (including custom traits), check **Account traits** section from [here](https://support.customersuccessbox.com/article/77-customersuccessbox-destination-on-segment-com){:target="_blank”}. If you're not familiar with the Segment Specs, take a look to understand what the [Group method](/docs/connections/spec/group/) does. An example call would look like: diff --git a/src/connections/destinations/catalog/customfit-ai/index.md b/src/connections/destinations/catalog/customfit-ai/index.md index 754edd5ad9..c13e4a43ca 100644 --- a/src/connections/destinations/catalog/customfit-ai/index.md +++ b/src/connections/destinations/catalog/customfit-ai/index.md @@ -2,8 +2,10 @@ title: CustomFit Destination rewrite: true id: 5cee939ff784ec0001f1cf91 +hidden: true +published: false --- -[CustomFit.ai](https://customfit.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is an intelligent `App Experience Engine` for B2C apps(Mobile/Web/IoT), with which one can effortlessly craft hyper-personalized app experiences & alternative user journeys to each of their user or segment of users with zero code. Every user is unique, so should be your app. +[CustomFit.ai](https://customfit.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an intelligent `App Experience Engine` for B2C apps(Mobile/Web/IoT), with which one can effortlessly craft hyper-personalized app experiences & alternative user journeys to each of their user or segment of users with zero code. Every user is unique, so should be your app. This destination is maintained by CustomFit.ai. For any issues with the destination, [contact the CustomFit Support team](mailto:reach@customfit.ai). @@ -11,11 +13,11 @@ This destination is maintained by CustomFit.ai. For any issues with the destinat ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "CustomFit.ai" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "Server Key" into your Segment Settings UI which you can find from your [CustomFit.ai dashboard](https://dashboard.customfit.ai/settings/app-settings). +3. Enter the "Server Key" into your Segment Settings UI which you can find from your [CustomFit.ai dashboard](https://dashboard.customfit.ai/settings/app-settings){:target="_blank”}. ## Identify @@ -33,7 +35,7 @@ Segment handles the following mapping: 1. Segment `identify` event userId to CustomFit.ai `user_customer_id` field. 2. Segment `identify` event traits to CustomFit.ai `properties`. -Identify calls will be sent to CustomFit.ai as an `identify` event. You can find the user details in [users profile page](https://dashboard.customfit.ai/users/profiles). +Identify calls will be sent to CustomFit.ai as an `identify` event. You can find the user details in [users profile page](https://dashboard.customfit.ai/users/profiles){:target="_blank”}. ## Track diff --git a/src/connections/destinations/catalog/cxense/index.md b/src/connections/destinations/catalog/cxense/index.md index 99a7317700..090f66856c 100644 --- a/src/connections/destinations/catalog/cxense/index.md +++ b/src/connections/destinations/catalog/cxense/index.md @@ -5,13 +5,13 @@ hidden: true ## Getting Started -{% include content/connection-modes.md %} + Currently this destination supports events originating from Web sources (not Server or Mobile). You can read more about how define a source [here](/docs/connections/sources/#what-is-a-source). To get started with Cxense and Segment, you'll need the following: -1. An existing account with [Cxense](http://www.cxense.com/). +1. An existing account with [Cxense](http://www.cxense.com/){:target="_blank"}. 2. A data source integrated with Segment's JavaScript SDK ([Analytics.js](/docs/connections/sources/catalog/libraries/website/javascript/)). 3. Your Cxense Site Id. diff --git a/src/connections/destinations/catalog/data-lakes/index.md b/src/connections/destinations/catalog/data-lakes/index.md new file mode 100644 index 0000000000..49c6b9a090 --- /dev/null +++ b/src/connections/destinations/catalog/data-lakes/index.md @@ -0,0 +1,6 @@ +--- +title: 'Data Lakes Destination' +hidden: true +id: 5e1f879beef894b09f7a0ba9 +published: false +--- diff --git a/src/connections/destinations/catalog/datarangers/index.md b/src/connections/destinations/catalog/datarangers/index.md index bb965383a7..0c20e15f8f 100644 --- a/src/connections/destinations/catalog/datarangers/index.md +++ b/src/connections/destinations/catalog/datarangers/index.md @@ -12,7 +12,7 @@ This destination is maintained by BytePlus. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. @@ -25,7 +25,7 @@ This destination is maintained by BytePlus. For any issues with the destination, ## Page -If you aren't familiar with the Segment Spec, take a look at the Page method documentation (/docs/connections/spec/page/) to learn about what it does. An example call would look like: +If you aren't familiar with the Segment Spec, take a look at the [Page method documentation](/docs/connections/spec/page/) to learn about what it does. An example call would look like: ```js diff --git a/src/connections/destinations/catalog/delighted/index.md b/src/connections/destinations/catalog/delighted/index.md index 98d0c1685a..69eb0fb981 100644 --- a/src/connections/destinations/catalog/delighted/index.md +++ b/src/connections/destinations/catalog/delighted/index.md @@ -3,7 +3,7 @@ title: Delighted Destination rewrite: true id: 58915ccf80412f644ff6295b --- -[Delighted](https://delighted.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the modern customer feedback solution used by the world's most coveted brands to deliver stellar experiences to their customers. +[Delighted](https://delighted.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the modern customer feedback solution used by the world's most coveted brands to deliver stellar experiences to their customers. This destination is maintained by Delighted. For any issues with the destination, [contact the Delighted Support team](mailto:hello@delighted.com) @@ -12,7 +12,7 @@ _**NOTE:** The Delighted Destination is currently only compatible with email sur ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Delighted" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -48,7 +48,7 @@ This also enables you to define the "Sample Rate" and an optional "Delay" for th ![trigger-delighted-surveys-segment](images/e3ed84b8608df907bcf753f52c17249d.png) -**NOTE**: Delighted has built in protections for over surveying called *Survey Throttling*. This will ensure the same person won't be surveyed more than once per month ([adjustable in your Delighted account settings](https://delighted.com/account/edit_min_survey_interval)). *Survey Throttling* provides you peace of mind so that you can use frequent `track` calls like purchase or contact events. +**NOTE**: Delighted has built in protections for over surveying called *Survey Throttling*. This will ensure the same person won't be surveyed more than once per month ([adjustable in your Delighted account settings](https://delighted.com/account/edit_min_survey_interval){:target="_blank”}). *Survey Throttling* provides you peace of mind so that you can use frequent `track` calls like purchase or contact events. ## Sending data from Delighted back to Segment (optional) diff --git a/src/connections/destinations/catalog/delivrai-resolve/index.md b/src/connections/destinations/catalog/delivrai-resolve/index.md new file mode 100644 index 0000000000..f16df94cb6 --- /dev/null +++ b/src/connections/destinations/catalog/delivrai-resolve/index.md @@ -0,0 +1,35 @@ +--- +title: Delivr.ai Resolve (Browser) Destination +id: 650c69e7f47d84b86c120b4c +beta: true +redirect_from: + - '/connections/destinations/catalog/actions-cdpresolution/' +--- + +{% include content/plan-grid.md name="actions" %} + +[Delivr.ai Resolve](https://delivr.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} helps customers instantly match visitor website traffic to full profiles. It turns your anonymous web traffic into full company and buyer profiles — complete with PII and firmographics data, and much more. You can find a [list of the different attributes](https://cdpresolution.com/theattributes?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} you can collect with Delivr.ai. + +This destination is maintained by Delivr.ai. For any issues with the destination, [contact the Delivr.ai support team](mailto:support@delivr.ai). + +How this works: A visitor lands on a digital property that has the Segment analytics.js script connected to the Delivr.ai Resolve Destination enabled. For each session, the anonymous ID is sent to Delivr.ai to check if our cookie is present on the browser. This allows Delivr.ai to resolve the cookie against our graph. If found, the profile and firmographics data are sent to Segment against a source that is configured within Delivr.ai platform. + +## Getting started + +To set up the Delivr.ai destination: +1. Navigate to **Connections > Catalog** in the Segment app and select the **Destinations** tab of the catalog. +2. Search for *Delivr.ai* and select it. +3. Choose which of your sources to connect the destination to. +4. In the Settings, enter your Delivr.ai API key. You can find this in the CDP Connector Setting section of your [Delivr.ai Dashboard Connection Settings](https://app.cdpresolution.com/administration/cdp-connections/segment-io-f4241?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. +5. Go to the Delivr.ai UI. +5. Go to the [Delivr.ai Connectors](https://app.cdpresolution.com/administration/cdp-connections?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} page and select the Segment IO connector. +2. Paste your Delivr.ai API key in Segment to generate your Write Key. +3. Paste your Write Key into Delivr.ai's connection configuration. +4. Click **Upload Key**. + +Further documentation can be found on the [Delivr.ai documentation site](https://docs.delivr.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. + +If you have configured your Delivr.ai Destination correctly, and if you've also configured Delivr.ai to send user profile data to a Segment Source, you should start to see user profile data shown in the Segment Source debugger as identify() and group() calls. + +{% include components/actions-fields.html %} + diff --git a/src/connections/destinations/catalog/devrev/index.md b/src/connections/destinations/catalog/devrev/index.md new file mode 100644 index 0000000000..08b9e6a24d --- /dev/null +++ b/src/connections/destinations/catalog/devrev/index.md @@ -0,0 +1,42 @@ +--- +title: DevRev (Actions) Destination +hide-boilerplate: true +hide-dossier: true +id: 649adeaa719bd3f55fe81bef +--- + +{% include content/plan-grid.md name="actions" %} + +DevRev is a business software company that brings developers (dev) and customers (rev) together in the era of product-led growth. DevRev is building an API-first dev-centric CRM that uses data, design, and machine intelligence to empower devs to build, support, and grow their revs. Learn more at [devrev.ai](https://devrev.ai){:target="\_blank”}, Twitter [@devrevinc](https://twitter.com/devrevinc){:target="\_blank”}, and [Medium](https://medium.com/devrev){:target="\_blank”}. + +The DevRev destination uses Segment's action framework to take action in your DevOrg when particular events or activity is sent from enabled Segment Sources. + +## DevRev Destination (Actions) use cases + +With this destination, website or external events can trigger action within DevRev. + +For example: + +- When a user requests a demo, DevRev creates a work ticket or issue with the details +- When a user fills out a form, create a RevUser (lead) object +- Track user events within DevRev + + +## Getting started + +1. Generate an API key from the [DevRev app](https://app.devrev.ai/){:target="_blank"}. Be sure you're in the DevOrg you want the events sent to and then navigate to **Settings** (the gear in the top left) > **Account** > **New Token**. Copy this API key, as you'll need it when setting up your DevRev (Actions) destination in Segment. +2. Open the Segment web app, click **Catalog**, then click **Destinations**. +3. Search for DevRev (Actions) and click it. +4. Click **Configure DevRev**. +5. Select an existing Source to connect to DevRev (Actions). +6. Give it a name and choose how to configure the destination. +7. The email blacklist is a comma separated list of domains that you want the integration to consider personal (vs business) email addresses. + +### Accounts, domains, emails, and the blacklist + +By default, the `createRevUser` function will create a new RevUser (Contact) object in DevRev. This contact will be associated with an Account as well, based on the following rules: + +1. If the email address is a personal email address (defined by having a domain in the domain blacklist), then the Account will be searched for using the email address specifically (for example, `test@gmail.com` would look for an account with external_ref of `test@gmail.com`). +2. If the email address is a company address (not having a domain in the domain blacklist), then DevRev looks for an account with the company domain. If found, the RevUser will be attached to this Account. If there is no existing account, a new one will be created with the company domain (for example, DevRev would add `test@company.com` under the Account with the domain `company.com`). + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/digioh/index.md b/src/connections/destinations/catalog/digioh/index.md index 437f0b7d99..dc93bb9c98 100644 --- a/src/connections/destinations/catalog/digioh/index.md +++ b/src/connections/destinations/catalog/digioh/index.md @@ -2,16 +2,17 @@ title: Digioh Destination rewrite: true id: 5f73b9dae27ce740818bf92d +hidden: true --- -[Digioh](https://www.digioh.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) allows you to grow your email lists with personalized forms, landing pages, paywalls and email preference centers. Digioh makes it easy with a drag and drop builder and built-in integrations to your favorite marketing tools. +[Digioh](https://www.digioh.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} allows you to grow your email lists with personalized forms, landing pages, paywalls and email preference centers. Digioh makes it easy with a drag and drop builder and built-in integrations to your favorite marketing tools. This destination is maintained by Digioh. For any issues with the destination, [contact the Digioh Support team](mailto:contact@digioh.com). ## Getting Started -{% include content/connection-modes.md %} -1. Open the [Digioh Integrations tab](https://account.digioh.com/Integration/List), click **New Integration**. + +1. Open the [Digioh Integrations tab](https://account.digioh.com/Integration/List){:target="_blank”}, click **New Integration**. 2. The Segment App opens in a new window. Log in to authenticate the connection from Digioh. 3. Select the Workspace and Source to connect with Digioh. diff --git a/src/connections/destinations/catalog/display-and-video-360-actions/index.md b/src/connections/destinations/catalog/display-and-video-360-actions/index.md new file mode 100644 index 0000000000..3184ed9293 --- /dev/null +++ b/src/connections/destinations/catalog/display-and-video-360-actions/index.md @@ -0,0 +1,7 @@ +--- +title: 'Display and Video 360 (Actions) Destination' +hidden: true +id: 65302a3acb309a8a3d5593f2 +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/doubleclick-floodlight/index.md b/src/connections/destinations/catalog/doubleclick-floodlight/index.md index bee6ff0648..b0277bcf01 100644 --- a/src/connections/destinations/catalog/doubleclick-floodlight/index.md +++ b/src/connections/destinations/catalog/doubleclick-floodlight/index.md @@ -4,7 +4,7 @@ strat: google cmode-override: true id: 57ab9dfc80412f644ff2004c --- -The [DoubleClick Floodlight](https://support.google.com/searchads/answer/7298761?hl=en) destination allows you to make calls directly to Floodlight based on your mapped events. All you have to do is enter your **DoubleClick Advertiser ID** in the Doubleclick Floodlight destinations settings in the Segment App, then map the Segment `track` events to their corresponding Floodlight tags. +The [DoubleClick Floodlight](https://support.google.com/searchads/answer/7298761?hl=en){:target="_blank"} destination allows you to make calls directly to Floodlight based on your mapped events. All you have to do is enter your **DoubleClick Advertiser ID** in the Doubleclick Floodlight destinations settings in the Segment App, then map the Segment `track` events to their corresponding Floodlight tags. This destination _requires_ that you send device-specific information such as the `IDFA` or the `advertisingId`. The best way to send events to Doubleclick Floodlight from mobile devices is using [one of the Segment mobile libraries](/docs/connections/sources/catalog/#mobile), because they collect this information automatically. If you use [one of the Segment server source libraries](/docs/connections/sources/catalog/#server) instead, you must manually include the required `advertisingId`. You can also send data from [Analytics.js](/docs/connections/sources/catalog/libraries/website/javascript/) and Segment makes direct HTTP requests to Doubleclick Floodlight from your browser. @@ -85,7 +85,7 @@ See the [Analytics.js documentation](/docs/connections/sources/catalog/libraries ## Setting up Custom Variables -There are two things you need to do in order to send custom track properties as custom Floodlight variables. Refer to Google's [Custom Floodlight Variables](https://support.google.com/campaignmanager/answer/2823222?hl=en) documentation. +There are two things you need to do in order to send custom track properties as custom Floodlight variables. Refer to Google's [Custom Floodlight Variables](https://support.google.com/campaignmanager/answer/2823222?hl=en){:target="_blank"} documentation. Custom Floodlight variables use the keys u1=, u2=, and so on, and can take any values that you choose to pass to them. You can include custom Floodlight variables in any of your Floodlight activity tags and report on their values in Report Builder. diff --git a/src/connections/destinations/catalog/dreamdata-io/index.md b/src/connections/destinations/catalog/dreamdata-io/index.md index a287da19e9..ee69b9770b 100644 --- a/src/connections/destinations/catalog/dreamdata-io/index.md +++ b/src/connections/destinations/catalog/dreamdata-io/index.md @@ -1,22 +1,20 @@ --- -title: Dreamdata IO Destination +title: Dreamdata Destination rewrite: true id: 5c6ef3322a6fb40001a71bf7 --- -[Dreamdata IO](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) uses your Segment data to deliver multitouch, per account attribution. This enables B2B companies to understand the impact on revenue of every touch in their customer journey. +[Dreamdata](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} uses your Segment data to deliver multitouch, per account attribution. This enables B2B companies to understand the impact on revenue of every touch in their customer journey. -This destination is maintained by Dreamdata IO. For any issues with the destination, [contact the Dreamdata Support team](mailto:friends@dreamdata.io). - -{% include content/beta-note.md %} +This destination is maintained by Dreamdata. For any issues with the destination, [contact the Dreamdata Support team](mailto:friends@dreamdata.io). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. -2. Search for "Dreamdata IO" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Dreamdata IO settings](https://app.dreamdata.io/settings). -4. You will be able to verify that data is flowing into Dreamdata IO from your [Dreamdata IO settings](https://app.dreamdata.io/settings). +2. Search for "Dreamdata" in the Catalog, select it, and choose which of your sources to connect the destination to. +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Dreamdata settings](https://app.dreamdata.io/settings){:target="_blank”}. +4. You will be able to verify that data is flowing into Dreamdata from your [Dreamdata settings](https://app.dreamdata.io/settings){:target="_blank”}. ## Page @@ -27,7 +25,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.page() ``` -Page calls will be sent to [Dreamdata IO](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) as a `pageview`. +Page calls will be sent to [Dreamdata](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} as a `pageview`. ## Screen @@ -38,7 +36,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th [[SEGAnalytics sharedAnalytics] screen:@"Home"]; ``` -Screen calls will be sent to [Dreamdata IO](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) as a `screenview`. +Screen calls will be sent to [Dreamdata](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} as a `screenview`. ## Identify @@ -51,7 +49,7 @@ analytics.identify('userId123', { }); ``` -Identify calls will be sent to [Dreamdata IO](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) as an `identify` event. +Identify calls will be sent to [Dreamdata](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} as an `identify` event. ## Track @@ -62,7 +60,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.track('Clicked Login Button') ``` -Track calls will be sent to [Dreamdata IO](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) as a `track` event. +Track calls will be sent to [Dreamdata](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} as a `track` event. ## Group @@ -78,6 +76,6 @@ analytics.group("userId123", { }); ``` -Group calls will be sent to [Dreamdata IO](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) as a `group` event where it is used to join users to accounts. +Group calls will be sent to [Dreamdata](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} as a `group` event where it is used to join users to accounts. -By default, [Dreamdata IO](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) uses user emails and your CRM data to map user activites to accounts and attribute the value correctly. Adding Group calls using Segment will give a more precise attribution and ensure that all activities are attributed to the right account. +By default, [Dreamdata](https://dreamdata.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} uses user emails and your CRM data to map user activities to accounts and attribute the value correctly. Adding Group calls using Segment will give a more precise attribution and ensure that all activities are attributed to the right account. diff --git a/src/connections/destinations/catalog/drift/index.md b/src/connections/destinations/catalog/drift/index.md index bb9f4c0303..53b62bb867 100644 --- a/src/connections/destinations/catalog/drift/index.md +++ b/src/connections/destinations/catalog/drift/index.md @@ -6,16 +6,16 @@ rewrite: true -[Drift](http://www.drift.com/segment/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the world's first and only conversational marketing platform. Instead of traditional marketing and sales platforms that rely on forms and follow ups, Drift connects your business with the best leads in real-time. +[Drift](http://www.drift.com/segment/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the world's first and only conversational marketing platform. Instead of traditional marketing and sales platforms that rely on forms and follow ups, Drift connects your business with the best leads in real-time. -The `analytics.js` device-mode destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-drift). +The `analytics.js` device-mode destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-drift){:target="_blank”}. -The cloud-mode destination is maintained by Drift. For any issues with the destination, [contact the Drift support team](https://www.drift.com/help/). +The cloud-mode destination is maintained by Drift. For any issues with the destination, [contact the Drift support team](https://www.drift.com/help/){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Drift" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -54,7 +54,7 @@ If you do not pass a `userId`, we will try to fill it in with the `id` or `usern Keep in mind, we _strongly_ suggest to ensure that the `email` field is passed in the `identify` call. -Integrations options passed to `identify` event will be passed to drift identify as third argument. This can be leveraged for [signed identifies](https://devdocs.drift.com/docs/securing-drift-on-your-site-using-signed-identities). +Integrations options passed to `identify` event will be passed to drift identify as third argument. This can be leveraged for [signed identifies](https://devdocs.drift.com/docs/securing-drift-on-your-site-using-signed-identities){:target="_blank”}. ```javascript analytics.identify('ksc2303', { diff --git a/src/connections/destinations/catalog/drip/index.md b/src/connections/destinations/catalog/drip/index.md index 337d7b6367..66a204d8e7 100644 --- a/src/connections/destinations/catalog/drip/index.md +++ b/src/connections/destinations/catalog/drip/index.md @@ -3,7 +3,7 @@ title: Drip Destination id: 54521fd525e721e32a72eeaa cmode-override: true --- -The Drip destination code is all open-source on GitHub if you want to check it out: [JavaScript](https://github.com/segment-integrations/analytics.js-integration-drip),(iOS and Android work using the server destination). +The Drip destination code is all open-source on GitHub if you want to check it out: [JavaScript](https://github.com/segment-integrations/analytics.js-integration-drip){:target="_blank"},(iOS and Android work using the server destination). ## Getting Started diff --git a/src/connections/destinations/catalog/elevio/index.md b/src/connections/destinations/catalog/elevio/index.md index 48d38106f8..f84ecaab0e 100644 --- a/src/connections/destinations/catalog/elevio/index.md +++ b/src/connections/destinations/catalog/elevio/index.md @@ -3,17 +3,17 @@ title: Elevio Destination rewrite: true id: 556df6680a20f4e22f0fb3a0 --- -[Elevio](https://elev.io/) is a continuous user education platform that makes your product easier to learn and use. It helps your organization increase user engagement through up-skilling and education while reducing support loads and customer churn. The Elevio Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-elevio). +[Elevio](https://elev.io/){:target="_blank"} is a continuous user education platform that makes your product easier to learn and use. It helps your organization increase user engagement through up-skilling and education while reducing support loads and customer churn. The Elevio Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-elevio){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Elevio" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the destination settings, enter your "Account ID" from your Elevio's [Installation](https://app.elev.io/installation) page under "Install via Code Snippet". You can also use Elevio's "Install with Segment" workflow from the same page. -4. Ensure that you have Elevio's Assistant enabled from your [Settings](https://app.elev.io/settings). +3. In the destination settings, enter your "Account ID" from your Elevio's [Installation](https://app.elev.io/installation){:target="_blank"} page under "Install via Code Snippet". You can also use Elevio's "Install with Segment" workflow from the same page. +4. Ensure that you have Elevio's Assistant enabled from your [Settings](https://app.elev.io/settings){:target="_blank"}. Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Elevio's snippet on your page and sending data. diff --git a/src/connections/destinations/catalog/eloqua/index.md b/src/connections/destinations/catalog/eloqua/index.md index ddaa9b7564..96c94bb07f 100644 --- a/src/connections/destinations/catalog/eloqua/index.md +++ b/src/connections/destinations/catalog/eloqua/index.md @@ -18,9 +18,7 @@ When you enable Eloqua in your Segment integrations page, Segment automatically ## Page -Client-side page-view tracking is achieved using an integration with the [Eloqua -Asynchronous Visitor Tracking -Script](https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/pdf/AsynchronousVisitorTrackingScripts.pdf). +Client-side page-view tracking is achieved using an integration with the [Eloqua Asynchronous Visitor Tracking Script](https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/pdf/AsynchronousVisitorTrackingScripts.pdf){:target="_blank"}. Page tracking with Eloqua is, by default, achieved with a third party cookie. This cookie is generated upon successful completion of an Eloqua form. Once a @@ -88,10 +86,8 @@ Eloqua destination in the Segment UI. ## Mapping custom traits to Eloqua Accounts and Contacts First, configure the custom Account fields or custom Contact fields in your -Eloqua dashboard. Read how to set those up for [Contacts -here](https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/ContactFields/Tasks/CreatingContactFields.htm) -and for [Accounts -here](https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/AccountFields/Tasks/CreatingAccountFields.htm). +Eloqua dashboard. Read how to set those up for [Contacts here](https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/ContactFields/Tasks/CreatingContactFields.htm){:target="_blank"} +and for [Accounts here](https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/AccountFields/Tasks/CreatingAccountFields.htm){:target="_blank"}. Once you are set up in Eloqua, you are ready to map custom traits to your Contacts and Accounts. Next, provide a mapping in your destination settings @@ -109,8 +105,7 @@ incompatible data types, Eloqua will return an error for the entire request. ## Track -Segment `track` events trigger the creation of [Eloqua Custom -Object](http://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/CustomObjects/CustomObjects.htm) +Segment `track` events trigger the creation of [Eloqua Custom Object](http://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/CustomObjects/CustomObjects.htm){:target="_blank"} records and associate them with a specific Contact. To get started, provide a mapping in your destination settings @@ -123,6 +118,9 @@ formatting-insensitive match so that if you have a field called `Account Type` in Eloqua and a property called `AccountType` in your Segment event, the mapping will get handled. +> info "Track event mapping limitations" +> Each `track` event can only be mapped to a single custom object. Segment doesn't support mapping a single `track` event to multiple custom objects. + For `track` event properties you intend to send to Eloqua as Custom Object fields, make sure the value of the data type sent to Segment matches the data type specified in your Eloqua dashboard. If a Custom Object field data diff --git a/src/connections/destinations/catalog/emarsys/index.md b/src/connections/destinations/catalog/emarsys/index.md index 1a6f760449..525e95ef1f 100644 --- a/src/connections/destinations/catalog/emarsys/index.md +++ b/src/connections/destinations/catalog/emarsys/index.md @@ -3,15 +3,13 @@ title: Emarsys Destination rewrite: true id: 5a8e1add366cd2000115dfe7 --- -[The Emarsys Marketing Platform](https://www.emarsys.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) allows consumer-facing companies of any industry to convert, grow and retain their clients by enabling automated and personalized interactions across the customer lifecycle and across channels and devices. +[The Emarsys Marketing Platform](https://www.emarsys.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} allows consumer-facing companies of any industry to convert, grow and retain their clients by enabling automated and personalized interactions across the customer lifecycle and across channels and devices. This destination is maintained by Emarsys. For any issues with the destination, [contact the Emarsys Support team](mailto:help@support.emarsys.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Emarsys" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/emma/index.md b/src/connections/destinations/catalog/emma/index.md index db463fa583..90dd041e54 100644 --- a/src/connections/destinations/catalog/emma/index.md +++ b/src/connections/destinations/catalog/emma/index.md @@ -3,20 +3,18 @@ title: Emma Destination rewrite: true id: 5c8bcba020ab84000148897c --- -[EMMA](https://emma.io/en/) helps you track campaigns from your trusted networks, Google Ads campaigns, Facebook and Instagram campaigns, and Twitter campaigns. You can also track user activities in your app, so you can send personalized push notifications and in-app campaigns like banners, start-views etc. +[EMMA](https://emma.io/en/){:target="_blank"} helps you track campaigns from your trusted networks, Google Ads campaigns, Facebook and Instagram campaigns, and Twitter campaigns. You can also track user activities in your app, so you can send personalized push notifications and in-app campaigns like banners, start-views etc. This destination is maintained by EMMA. For any issues with the destination, [contact the EMMA Support team](mailto:support@emma.io). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From your Segment UI's Destinations page, click "Add Destination". 2. Search for "EMMA" in the Destinations Catalog, and confirm the Source you'd like to connect to. 3. Copy and paste the "API Key" into your Segment Settings UI. - You can find your API key on your [EMMA Dashboard](https://in.emma.io/index/login/). To find your API Key follow the steps on [this guide](https://support.emma.io/hc/en-us/articles/360019026214). + You can find your API key on your [EMMA Dashboard](https://in.emma.io/index/login/){:target="_blank"}. To find your API Key follow the steps on [this guide](https://support.emma.io/hc/en-us/articles/360019026214){:target="_blank"}. ## Identify @@ -32,12 +30,12 @@ analytics.identify('userId123', { This method calls in EMMA to method update the user, processing all traits as user tags. Then in EMMA you can segment data, for example to send Push Notifications. In the EMMA SDK this is equivalent to `trackUserExtraInfo`. -Info can be consulted in all parts on EMMA Dashboard where segmentation is used and [Explore](https://support.emma.io/hc/en-us/articles/115002474285-How-to-use-EMMA-Explore) section to view analitycs data. +Info can be consulted in all parts on EMMA Dashboard where segmentation is used and [Explore](https://support.emma.io/hc/en-us/articles/115002474285-How-to-use-EMMA-Explore){:target="_blank"} section to view analitycs data. ## Track -Track calls are sent to EMMA as a `trackEvent`. It's necessary to activate the events in our [Dashboard](https://support.emma.io/hc/en-us/articles/115002413585-Create-and-edit-events). +Track calls are sent to EMMA as a `trackEvent`. It's necessary to activate the events in our [Dashboard](https://support.emma.io/hc/en-us/articles/115002413585-Create-and-edit-events){:target="_blank"}. EMMA identifies the events with a token. This token can be modified using an alias to replace it (only in non-reserved tokens). diff --git a/src/connections/destinations/catalog/encharge-cloud-actions/index.md b/src/connections/destinations/catalog/encharge-cloud-actions/index.md new file mode 100644 index 0000000000..9c615aa32b --- /dev/null +++ b/src/connections/destinations/catalog/encharge-cloud-actions/index.md @@ -0,0 +1,33 @@ +--- +title: Encharge (Actions) Destination +hide-personas-partial: true +hide-boilerplate: true +hide-cmodes: true +id: 642440d46b66b3eeac42b581 +--- +{% include content/plan-grid.md name="actions" %} + +[Encharge](https://encharge.io/){:target="_blank"} is a marketing automation platform built for B2B SaaS businesses. + +With Encharge, you can nurture, convert, and onboard customers with advanced behavior emails, company profiles, billing integrations, and CRM sync. + +Encharge maintains this destination. For any issues with the destination, [contact the Encharge Support team](mailto:support@encharge.io). + +{% include content/beta-note.md %} + +## Getting started + +1. From the Segment web app, navigate to **Connections**. +2. Click **Add Destination**. +3. Search for the **Encharge (Actions)** destination. +4. Select the Source you want to connect to your Destination. +5. Click **Next**. +6. Give your Destination a name. +7. Click **Create Destination**. +8. Configure the settings and enable your destination on the destination settings page. +9. Enter the **API Key**. This can be found on your [Account page](https://app.encharge.io/settings/api-keys){:target="_blank"}. +10. Click **Save Changes**. +11. To start with pre-populated event subscriptions, enable the **Enable Destination** and click **Save Changes**. Otherwise, click on the **Mappings** tab to configure each action, and then enable the destination. + +{% include components/actions-fields.html settings="true"%} + diff --git a/src/connections/destinations/catalog/engage-messaging/index.md b/src/connections/destinations/catalog/engage-messaging/index.md index 7d6538f68b..771a6c17ac 100644 --- a/src/connections/destinations/catalog/engage-messaging/index.md +++ b/src/connections/destinations/catalog/engage-messaging/index.md @@ -1,10 +1,10 @@ --- -title: Engage Destination +title: Engage Messaging Destination id: 607482568738ee46aaa8404c --- ## Engage Messaging -[Engage Messaging](https://engage.so/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps businesses send personalised messages to customers based on customer traits and actions. +[Engage Messaging](https://engage.so/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps businesses send personalised messages to customers based on customer traits and actions. This destination is maintained by Engage Messaging. For any issues with the destination, [contact the Engage Messaging Support team](mailto:hello@engage.so). @@ -14,7 +14,7 @@ This destination is maintained by Engage Messaging. For any issues with the dest 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Engage Messaging" in the Destinations Catalog, after selecting it, choose the Source that will send data to Engage Messaging. -4. Go to your [Engage dashboard](https://app.engage.so/settings/account), find and copy your "Public API key". +4. Go to your [Engage dashboard](https://app.engage.so/settings/account){:target="_blank”}, find and copy your "Public API key". 5. Enter the API Key in the destination settings in Segment. ## Supported methods diff --git a/src/connections/destinations/catalog/enjoyhq/index.md b/src/connections/destinations/catalog/enjoyhq/index.md index 4430eba796..9e543a0d67 100644 --- a/src/connections/destinations/catalog/enjoyhq/index.md +++ b/src/connections/destinations/catalog/enjoyhq/index.md @@ -3,7 +3,7 @@ rewrite: true title: EnjoyHQ Destination id: 5fb411aeff3f6d1023f2ae8d --- -[EnjoyHQ](https://getenjoyhq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps UX and product teams learn from customers faster by streamlining their customer research process. EnjoyHQ makes it easy to centralize, organize and share all their customer insights and user research data in one place. +[EnjoyHQ](https://getenjoyhq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps UX and product teams learn from customers faster by streamlining their customer research process. EnjoyHQ makes it easy to centralize, organize and share all their customer insights and user research data in one place. This destination is maintained by EnjoyHQ. For any issues with the destination, [contact the EnjoyHQ support team](mailto:support@getenjoyhq.com). @@ -14,12 +14,12 @@ This destination is maintained by EnjoyHQ. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "EnjoyHQ" in the Destinations Catalog, and select the EnjoyHQ destination. 3. Choose which Source should send data to the EnjoyHQ destination. -4. Go to the [EnjoyHQ's integrations page](https://app.enjoyhq.com/account/integrations), find Segment and create a new API key. +4. Go to the [EnjoyHQ's integrations page](https://app.enjoyhq.com/account/integrations){:target="_blank”}, find Segment and create a new API key. 5. Enter the API Key in the EnjoyHQ destination settings in the Segment web app. @@ -39,9 +39,9 @@ analytics.identify('userId123', { }); ``` -Segment sends Identify calls to EnjoyHQ as an `identify` event. These events can create or update an existing customer profile with a matching email address. Data imported using Segment Identify calls [is merged with the data already stored in your EnjoyHQ account](https://documentation.getenjoyhq.com/article/v9liiusghf-customer-profiles#how_is_customer_data_merged). +Segment sends Identify calls to EnjoyHQ as an `identify` event. These events can create or update an existing customer profile with a matching email address. Data imported using Segment Identify calls [is merged with the data already stored in your EnjoyHQ account](https://documentation.getenjoyhq.com/article/v9liiusghf-customer-profiles#how_is_customer_data_merged){:target="_blank”}. -You can find profiles connected to at least one document in the **People tab** using the global search. You can also find any profile (connected or not) when you [associate a customer with a piece of feedback](https://documentation.getenjoyhq.com/article/v9liiusghf-customer-profiles#assigning_customers_to_documents). +You can find profiles connected to at least one document in the **People tab** using the global search. You can also find any profile (connected or not) when you [associate a customer with a piece of feedback](https://documentation.getenjoyhq.com/article/v9liiusghf-customer-profiles#assigning_customers_to_documents){:target="_blank”}. > note "Note:" > The EnjoyHQ destination only accepts Identify calls if they contain a correctly formed email address in the "email" field. Otherwise, the event is ignored and is not forwarded to EnjoyHQ. diff --git a/src/connections/destinations/catalog/epica/index.md b/src/connections/destinations/catalog/epica/index.md index bb562aaaec..3b1fd8cce6 100644 --- a/src/connections/destinations/catalog/epica/index.md +++ b/src/connections/destinations/catalog/epica/index.md @@ -3,20 +3,18 @@ title: EPICA Destination rewrite: true id: 5c6dca8369c83b0001d6b868 --- -[EPICA](https://www.epica.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the world's first Prediction-as-a-Service platform. Powered by AI, EPICA captures, processes and analyses online data sources to accurately predict customer behavior. EPICA provides predictive analytics for growth marketers, using machine learning to automate audience insights and recommendations. +[EPICA](https://www.epica.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the world's first Prediction-as-a-Service platform. Powered by AI, EPICA captures, processes and analyses online data sources to accurately predict customer behavior. EPICA provides predictive analytics for growth marketers, using machine learning to automate audience insights and recommendations. This destination is maintained by EPICA. For any issues with the destination, [contact the Epica Support team](mailto:support@epica.ai). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "EPICA" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your EPICA [Account settings](https://platform.epica.ai/account). +3. Enter the "API Key" into your Segment Settings UI which you can find from your EPICA [Account settings](https://platform.epica.ai/account){:target="_blank"}. ## Page @@ -68,7 +66,7 @@ analytics.track('Clicked Login Button', { }) ``` -Track calls will be sent to EPICA as a `track` event and can be seen populated in the `Data Platform > Personas` section of EPICA [admin panel](https://platform.epica.ai/personas), which includes unified profiles across a single customer journey. +Track calls will be sent to EPICA as a `track` event and can be seen populated in the `Data Platform > Personas` section of EPICA [admin panel](https://platform.epica.ai/personas){:target="_blank”}, which includes unified profiles across a single customer journey. There are two types of Personas: diff --git a/src/connections/destinations/catalog/equals/index.md b/src/connections/destinations/catalog/equals/index.md new file mode 100644 index 0000000000..51de0ce704 --- /dev/null +++ b/src/connections/destinations/catalog/equals/index.md @@ -0,0 +1,7 @@ +--- +title: 'Equals Destination' +hidden: true +id: 659eb6903c4d201ebd9e2f5c +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/events-win/index.md b/src/connections/destinations/catalog/events-win/index.md new file mode 100644 index 0000000000..f62b1a5aa3 --- /dev/null +++ b/src/connections/destinations/catalog/events-win/index.md @@ -0,0 +1,41 @@ +--- +title: events.win Destination +beta: true +id: 662d3328d029f89724a0c294 +--- + +[events.win](https://events.win/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="\_blank”} provides a single platform to create your tracking plan, sync event definitions to your code, and see detailed metrics on how correct your data is. With events.win, you can ensure that your tracking is accurate and up-to-date. + +This destination is maintained by events.win. For any issues with the destination, [contact the events.win support team](mailto:hi@events.win). + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="\_blank”} search for "events.win". +2. Select events.win and click **Add Destination**. +3. Select an existing Source to connect to events.win. +4. Go to the [events.win dashboard](https://app.events.win/developers){:target="\_blank"}, find and copy the **Developer key**. +5. Return to Segment and enter the **Developer Key** in the events.win destination settings. +6. events.win starts to receive data from Segment. There may be a delay before data is visible in the events.win dashboard. + +## Supported methods + +events.win supports Segment's [Track](/docs/connections/spec/track) method, as specified in the [Segment Spec](/docs/connections/spec). + +### Track + +events.win consumes and validates [Track](/docs/connections/spec/track) calls against the tracking plan you've previously defined in events.win. events.win doesn't store the data, but instead provides a detailed report on how correct your data is. + +You can use the [@events.win/cli](https://www.npmjs.com/package/@events.win/cli){:target="\_blank”} to generate type-safe tracking code for your events. + +```js +/** + * Example: + * events.win will look at your spec for the event `login-button-clicked` and validate the properties `handle` and `id` are present and have the correct data type. + */ +analytics.track("login-button-clicked", { + user: { + handle: "frodo.baggins", + id: "123456789", + }, +}); +``` diff --git a/src/connections/destinations/catalog/everflow/index.md b/src/connections/destinations/catalog/everflow/index.md index d746262046..6b4fd84e91 100644 --- a/src/connections/destinations/catalog/everflow/index.md +++ b/src/connections/destinations/catalog/everflow/index.md @@ -9,7 +9,7 @@ This destination is maintained by Everflow. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Everflow" in the Destinations Catalog, and select the Everflow destination. @@ -43,12 +43,12 @@ If you aren't familiar with the Segment Spec, take a look at the [Track method d ``` > warning "Map your events" -> To track the event, go to the Everflow Segment destination settings, and in the Segment event name field, enter the Advertiser ID from your [Offer's Revenue & Payout card](https://helpdesk.everflow.io/en/articles/3673712-offer-revenue-payout). +> To track the event, go to the Everflow Segment destination settings, and in the Segment event name field, enter the Advertiser ID from your [Offer's Revenue & Payout card](https://helpdesk.everflow.io/en/articles/6125868-offer-revenue-payout){:target="_blank"}. ### TransactionId -The TransactionId (`context.referrer.id`) and `context.referrer.type` are **required** fields. Read more about how to pass the TransactionId in [Everflow's TransactionId Documentation](https://developers.everflow.io/docs/everflow-sdk/click_tracking/) +The TransactionId (`context.referrer.id`) and `context.referrer.type` are **required** fields. Read more about how to pass the TransactionId in [Everflow's TransactionId Documentation](https://developers.everflow.io/docs/everflow-sdk/click_tracking/){:target="_blank"} ### Property Mappings -The data type for Segment properties must match the data type set in Everflow for the corresponding property. Read more about how Everflow maps Segment properties in [Everflow's Properties Mapping documentation](https://helpdesk.everflow.io/en/articles/4785627-integrations-segment). +The data type for Segment properties must match the data type set in Everflow for the corresponding property. Read more about how Everflow maps Segment properties in [Everflow's Properties Mapping documentation](https://helpdesk.everflow.io/en/articles/6288916-segment-integration){:target="_blank"}. Custom properties are not supported at this time. diff --git a/src/connections/destinations/catalog/evergage/index.md b/src/connections/destinations/catalog/evergage/index.md index ddc85474fa..54c1b045f5 100644 --- a/src/connections/destinations/catalog/evergage/index.md +++ b/src/connections/destinations/catalog/evergage/index.md @@ -3,7 +3,7 @@ title: Evergage Destination rewrite: true --- -[Evergage](https://www.evergage.com/) offers a cloud-based platform that empowers digital marketers to increase engagement and conversions through real-time 1:1 personalization. The `analytics.js` Evergage Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-evergage). +[Evergage](https://www.evergage.com/){:target="_blank"} offers a cloud-based platform that empowers digital marketers to increase engagement and conversions through real-time 1:1 personalization. The `analytics.js` Evergage Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-evergage){:target="_blank"}. > warning "The Evergage destination has been deprecated" > The Evergage Destination was deprecated on January 8, 2021 and is no longer supported or maintained. It is no longer available in the Segment catalog, but remains available to existing users. @@ -18,7 +18,7 @@ analytics.identify('userId123', { }); ``` -A `userId` is required on all `identify` calls sent to {{ integration.name}}. When you call `identify` Segment will call both `setUser` and `setUserField` in the [Evergage library](https://doc.evergage.com/display/EKB/Send+Data+to+Evergage+via+JavaScript) to insert both the `userId` and corresponding user traits into {{ integration.name}}. +A `userId` is required on all `identify` calls sent to Evergage. When you call `identify` Segment will call both `setUser` and `setUserField` in the [Evergage library](https://doc.evergage.com/display/EKB/Send+Data+to+Evergage+via+JavaScript){:target="_blank"} to insert both the `userId` and corresponding user traits into {{ integration.name}}. ## Group If you're not familiar with the Segment Specs, take a look to understand what the [Group method](/docs/connections/spec/group/) does. An example call would look like: @@ -29,7 +29,7 @@ analytics.group('companyId123', { }); ``` -A `groupId` is required on all `group` calls sent to {{ integration.name}}. When you call `group` Segment will call both `setCompany` and `setAccountField` in the [Evergage library](https://doc.evergage.com/display/EKB/Send+Data+to+Evergage+via+JavaScript) to insert both the `groupId` and corresponding group traits into {{ integration.name}}. +A `groupId` is required on all `group` calls sent to Evergage. When you call `group` Segment will call both `setCompany` and `setAccountField` in the [Evergage library](https://doc.evergage.com/display/EKB/Send+Data+to+Evergage+via+JavaScript){:target="_blank"} to insert both the `groupId` and corresponding group traits into {{ integration.name}}. ## Track If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: diff --git a/src/connections/destinations/catalog/experiments-by-growthhackers/index.md b/src/connections/destinations/catalog/experiments-by-growthhackers/index.md index 77f11c9c8d..4ea693d282 100644 --- a/src/connections/destinations/catalog/experiments-by-growthhackers/index.md +++ b/src/connections/destinations/catalog/experiments-by-growthhackers/index.md @@ -4,15 +4,13 @@ title: Experiments by Growthhackers Destination redirect_from: '/connections/destinations/catalog/northstar-by-growthhackers/' id: 5cc205876b9a830001432515 --- -[Experiments by Growthhackers](http://growthhackers.com/software) provides a project management tool for growth teams, allowing companies to create and prioritize ideas, run experiments and gather data to learn upon! +[Experiments by Growthhackers](https://growth.software/){:target="_blank"} provides a project management tool for growth teams, allowing companies to create and prioritize ideas, run experiments and gather data to learn upon! This destination is maintained by Experiments by Growthhackers. For any issues with the destination, [contact the Growthhackers Support team](mailto:tech@growthhackers.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Experiments by Growthhackers" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -28,4 +26,4 @@ analytics.track('Clicked Login Button') Track calls will be sent to Experiments by Growthhackers as a `track` event. -Once the integration is completed, your events will always be available in your cards, all you have to do is select the ones that best help you validate your hypothesis. For further information and visual guidance of how it's going to look like, check [this article](https://www.notion.so/Integrate-Experiments-with-Segment-77843e36055d4288b1d8c85e1aa5f96e). +Once the integration is completed, your events will always be available in your cards, all you have to do is select the ones that best help you validate your hypothesis. For further information and visual guidance of how it's going to look like, check [this article](https://www.notion.so/Integrate-Experiments-with-Segment-77843e36055d4288b1d8c85e1aa5f96e){:target="_blank"}. diff --git a/src/connections/destinations/catalog/exponea/index.md b/src/connections/destinations/catalog/exponea/index.md deleted file mode 100644 index bb6a271217..0000000000 --- a/src/connections/destinations/catalog/exponea/index.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: Exponea Destination -rewrite: true -beta: true -id: 5d4d88bbd02041672e51e3ca ---- -[Exponea](https://exponea.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a Customer Data & Experience Platform (CDXP) which creates a unified source of customer intelligence in real-time, ready for immediate activation using its own built‑in omnichannel marketing systems (web, email, push, mobile, text messages,etc.) powered by customer-centric analytics and artificial intelligence (product recommendations and predictions). - -This destination is maintained by Exponea. For any issues with the destination, contact [the Exponea Support team](mailto:support@exponea.com). - - -{% include content/beta-note.md %} - - -## Getting Started - - -{% include content/connection-modes.md %} - -1. From the Segment web app, click **Catalog**. -2. Search for "Exponea" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Create a [public API group](https://docs.exponea.com/reference#setting-up-access-keys) for your Segment integration in your Exponea project. Don't forget to set the appropriate [group permissions](https://docs.exponea.com/v2/reference#section-modifying-the-access-of-your-api-group) to allow recieveing events and customer updates. -4. Fill in the "API Base URL", "API key" and "Project Token" into your Segment Settings UI. You can find all of the above in the API settings page of your Exponea project. -5. Enter your Exponea hard ID and soft ID names into the corresponding fields to specify Segment's userId and anonymousId mapping into your Exponea ID structure. - - -## Common fields - -If you have not had a chance to review our spec, take a look tounderstand what the [Common fields](/docs/connections/spec/common/) are. - -The `userId` and `anonymousId` common fields are used for all types of calls to identify the user in Exponea. Mapping of the IDs is based on the destination settings: - -| Segment | Exponea | -| -------- | -------- | -| userId | Exponea hard ID (e.g registered) | -| anonymousId | Exponea soft ID (e.g cookie) | - - - -Other common fields are used only for `track`, `page` and `screen` calls which are translated into Exponea events. The following common fields are mapped to Exponea: - - -| Segment | Exponea | -| -------- | -------- | -| timestamp | timestamp (string date is parsed to unix timestamp) | -| context: app, device, os, screen, referrer, campaign, user_agent, location | event properties (fields that contain child objects are flattened) | - - -## Page - -If you have not had a chance to review our spec, take a look tounderstand what the [Page method](/docs/connections/spec/page/) does. - -Page calls will be sent to Exponea as a `page_visit` event with the `properties` field mapped into event properties and the `name` field mapped into the `page_name` property. - -Example of page call: - -```js -analytics.page("Home", { - url: "https://exponea.com", - referrer: "http://google.com" -}) -``` - -This `page` call is translated into a `page_visit` event with the following properties: - -```js -"page_name": "Home", -"url": "https://exponea.com", -"referrer": "http://google.com" -``` - -An optional event `session_ping` can be tracked along with `page_visit` for [automatic session tracking](https://docs.exponea.com/docs/system-events#section-first-session-session-start-session-end). You can adjust this behavior in your Exponea destination settings by toggling on and off the 'Track session ping' settings. The Exponea soft ID must be set to `cookie` and the `anonymousId` field must be present in the `page` call for session events to work. - - -## Screen - -If you have not had a chance to review our spec, take a look tounderstand what the [Screen method](/docs/connections/spec/screen/) does. - -Screen calls will be sent to Exponea as a `screen_visit` event with the `properties` field mapped into event properties and the`name` field mapped into the `screen_name` property. - -Example of screen call: - -```objc -[[SEGAnalytics sharedAnalytics] screen:@"Home" - properties:@{ @"Feed Type": @"private" }]; -``` - -This `screen` call is translated into a `screen_visit` event with the following properties: - -```objc -"screen_name": "Home", -"Feed Type": "private" -``` - -An optional event `session_ping` can be tracked along with `screen_visit` for [automatic session tracking](https://docs.exponea.com/docs/system-events#section-first-session-session-start-session-end). You can adjust this behavior in your Exponea destination settings by toggling on and off the 'Track session ping' settings. The Exponea soft ID must be set to `cookie` for session events to work and `anonymousId` field must be present in the `screen` call for session events to work. - -## Track - -If you have not had a chance to review our spec, take a look tounderstand what the [Track method](/docs/connections/spec/track/) does. - -Track calls will be sent to Exponea as events under name provided in the event field. The `properties` field will be mapped into event properties (objects will be flattened using underscore). - -Example of track call: - -```js -analytics.track("Registered", { - plan: "Pro Annual", - accountType: "Facebook" -}); -``` - -This track call is translated into a `Registered` event with the following properties: - -```js -"plan": "Pro Annual", -"accountType" : "Facebook" -``` - -## Identify - -If you have not had a chance to review our spec, take a look tounderstand what the [Identify method](/docs/connections/spec/identify/) does. - -Identify calls will be sent to Exponea as customer updates with traits set as customer properties. - -Example of identify call: - -```js -analytics.identify("userId123", { - name: "John Doe", - email: "john.doe@example.com", - address: { - city: "New York", - country: "USA" - } -}); -``` - -This identify call is translated into a customer update for user with Exponea hard id `userId123` with properties: - -```js -"name": "John Doe", -"email": "john.doe@example.com", -"address_city": "New York", -"address_country": "USA", -``` - -## Alias - -If you have not had a chance to review our spec, take a look tounderstand what the [Alias method](/docs/connections/spec/alias/) does. - -The alias call can be used to merge two user identities and their data to one. The `previousId` field should always contain a previously used `anonymousId`, as merging users by specifying two `userIds` is not supported. Sending an alias event with `previousId` and no `userId` will cause the event to be ignored. Note that users are also merged when any call specifies both a userId and an anonymousId, which previously belonged to two separate users. - -Example of alias call: - -```js -analytics.alias("507f191e81"); -``` -## Group - -If you have not had a chance to review our spec, take a look tounderstand what the [Group method](/docs/connections/spec/group/) does. - -Group calls will be sent to Exponea as customer updates with group traits as customer properties prefixed with `group_` and `groupId` into `group_id`. For example: - -```js -analytics.group("123", { - name: "Exponea", - industry: "Technology" -}); -``` - -will be translated into a customer update with properties: - -```js -"group_id": "123", -"group_name": "Exponea", -"group_industry": "Technology", -``` - -Disclaimer: This is a beta version of group tracking and might be subject to change. - -## General - -### Nested Objects -Values that contain nested objects will be flattened using underscore. - -For example: -```js -analytics.identify('userId123', { - address: { - city: "New York", - country: "USA" - } -}); -``` -The properties would be sent as: -```js -"address_city": "New York", -"address_country": "USA", -``` diff --git a/src/connections/destinations/catalog/extole-platform/index.md b/src/connections/destinations/catalog/extole-platform/index.md index 18dd0f6ef1..4670bdf38c 100644 --- a/src/connections/destinations/catalog/extole-platform/index.md +++ b/src/connections/destinations/catalog/extole-platform/index.md @@ -14,9 +14,9 @@ This destination is maintained by Extole. For any issues with the destination, [ ## Getting Started -{% include content/connection-modes.md %} -1. Go to your [Extole Tech Center](https://my.extole.com/tech-center#access-token) page and generate an API Key. Copy that key. If you encounter any problems, check this [Extole Help Page on access tokens](https://success.extole.com/hc/en-us/articles/360001616668-Generating-Long-Lived-Access-Tokens). + +1. Go to your [Extole Tech Center](https://my.extole.com/tech-center#access-token){:target="_blank"} page and generate an API Key. Copy that key. If you encounter any problems, check this [Extole Help Page on access tokens](https://success.extole.com/hc/en-us/articles/360001616668-Generating-Long-Lived-Access-Tokens){:target="_blank"}. 2. From the Segment Destinations page, click **Add Destination**. 3. Search for "Extole Platform" in the Destinations Catalog, and select it. 4. Confirm which Source to connect to Extole. @@ -106,7 +106,7 @@ If you do not use the event names `registration` and `conversion` in your implem To make consumer data deletion requests more seamless, Extole handles deletion requests. Example of expected `delete` request body: -```json= +```json { "userId": "056tf9eqw24" } diff --git a/src/connections/destinations/catalog/facebook-app-events/index.md b/src/connections/destinations/catalog/facebook-app-events/index.md index 18526d0311..b8248a4f02 100644 --- a/src/connections/destinations/catalog/facebook-app-events/index.md +++ b/src/connections/destinations/catalog/facebook-app-events/index.md @@ -4,33 +4,37 @@ rewrite: true strat: facebook id: 56fc7e4680412f644ff12fb9 --- -[Facebook App Events](https://developers.facebook.com/docs/app-events) collects required information from one of Segment's mobile SDKs ([iOS](/docs/connections/sources/catalog/libraries/mobile/ios/) or [Android](/docs/connections/sources/catalog/libraries/mobile/android/)) and sends it from Segment's servers to Facebook App Events servers. This *server-to-server* connection will not work with our server-side libraries. The Facebook App Events Destination is open-source. You can browse the code on GitHub for [iOS](https://github.com/segment-integrations/analytics-ios-integration-facebook-app-events). + +> warning "" +> For new implementations, [Facebook no longer recommends using App Events]([url](https://developers.facebook.com/docs/marketing-api/app-event-api/)). Instead, they suggest switching to [Facebook Conversions API (Actions)](https://segment.com/docs/connections/destinations/catalog/actions-facebook-conversions-api/) for all server-side data tracking needs. + +[Facebook App Events](https://developers.facebook.com/docs/app-events){:target="_blank"} collects required information from one of Segment's mobile SDKs ([iOS](/docs/connections/sources/catalog/libraries/mobile/ios/){:target="_blank"}, [Android](/docs/connections/sources/catalog/libraries/mobile/android/){:target="_blank"}, or [Swift](/docs/connections/sources/catalog/libraries/mobile/apple/){:target="_blank"}) and sends it from Segment's servers to Facebook App Events servers. + +The iOS device-mode connection for the Facebook App Events destination is open source and [available on GitHub](https://github.com/segment-integrations/analytics-ios-integration-facebook-app-events){:target="_blank"}. + +Segment also has an [Analytics Swift Facebook App Events Plugin](/docs/connections/sources/catalog/libraries/mobile/apple/destination-plugins/facebook-app-events-swift/) for the Facebook App Events device-mode connection available. You can view the [open-source integration code on GitHub](https://github.com/segment-integrations/analytics-swift-facebook-app-events){:target="_blank"}. ## Other Facebook Destinations Supported by Segment This page is about the **Facebook App Events**. For documentation on other Facebook destinations, see the pages linked below. -| **Facebook Destination** | Supported by Engage | -| ----------------------------------------------------------------------------------------------------------- | ------------------- | -| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/)** | Yes | -| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/)** | Yes | -| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/)** | No | -| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/)** | Yes | -| **[Facebook Conversions API](/docs/connections/destinations/catalog/actions-facebook-conversions-api/)** | Yes | +| **Facebook Destination** | Supported by Engage | +| ----------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/){:target="_blank"}** | Yes | +| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/){:target="_blank"}** | Yes | +| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/){:target="_blank"}** | No | +| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/){:target="_blank"}** | Yes | +| **[Facebook Conversions API](/docs/connections/destinations/catalog/actions-facebook-conversions-api/){:target="_blank"}** | Yes | ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Facebook App Events" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the destination settings, enter your Facebook App ID which can be retrieved from your [Facebook Apps dashboard](https://developers.facebook.com/apps/). -4. Once you turn on the Facebook App Events integration in your app's Segment project, we'll start sending `track` data to Facebook's App Events endpoints. - -### Using Facebook App Events with React Native Device Mode - -{% include content/react-dest.md only="ios" %} +3. In the destination settings, enter your Facebook App ID which can be retrieved from your [Facebook Apps dashboard](https://developers.facebook.com/apps/){:target="_blank"}. +4. After you turn on the Facebook App Events integration in your app's Segment project, we'll start sending `track` data to Facebook's App Events endpoints. ## Screen @@ -43,9 +47,9 @@ If you're not familiar with the Segment Specs, take a look to understand what th Our integration also supports using Segment `screen` events as `track` events. For example, if you had a `screen` event named `Confirmation` you could map the invocation of this to a Facebook app event as you would with Segment `track` events. -To use this functionality you must opt into it using the integration setting named **Use Screen Events as Track Events**. Once enabled, you should start seeing `screen` events populate in Facebook App Events. The screen name you provide will be bookended with the words **Viewed** and **Screen**. So, if you have a `screen` event with the name property set to `Welcome`, it will show up in Facebook as an event called **Viewed Welcome Screen**. +To use this functionality you must opt into it using the integration setting named **Use Screen Events as Track Events**. After enabling, you should start seeing `screen` events populate in Facebook App Events. The screen name you provide will be bookended with the words **Viewed** and **Screen**. So, if you have a `screen` event with the name property set to `Welcome`, it will show up in Facebook as an event called **Viewed Welcome Screen**. -Note, the integration will not automatically translate `screen` events to spec'd Facebook events as our `track` method does. If you would like to map these events to specific Facebook events you can do this using the **Map your events to Standard FB App Events** setting. Be sure to specify the event as **Viewed** `name` **Screen** where `name` is the name property of the `screen` event. +Note: the integration will not automatically translate `screen` events to spec'd Facebook events as our `track` method does. If you would like to map these events to specific Facebook events you can do this using the **Map your events to Standard FB App Events** setting. Be sure to specify the event as **Viewed** `name` **Screen** where `name` is the name property of the `screen` event. ## Track @@ -227,7 +231,7 @@ Facebook returns a 4xx error due to lack of required parameters if the `device.a ## Other Features ### Facebook Login and Facebook Dialogs -The integration does not automatically support Facebook Login and Facebook Dialogs out of the box (you'd need to write code here regardless!). To use these features you'll need to set up [Facebook's app delegate hooks](https://developers.facebook.com/docs/ios/getting-started#delegate) by accessing [the Facebook SDK directly](/docs/connections/sources/catalog/libraries/mobile/ios/#faq). +The integration does not automatically support Facebook Login and Facebook Dialogs out of the box (you'd need to write code here regardless!). To use these features you'll need to set up [Facebook's app delegate hooks](https://developers.facebook.com/docs/ios/getting-started#delegate){:target="_blank"} by accessing [the Facebook SDK directly](/docs/connections/sources/catalog/libraries/mobile/ios/#faq). ### Packaged Integration @@ -236,20 +240,18 @@ In addition to the integration available for both iOS and Android, there is a cl ### Pre-defined Events and Parameters -The integration currently only supports the `FBSDKAppEventNameActivatedApp` pre-defined event (via the `activateApp` handler). All other events are forwarded as [custom events](https://developers.facebook.com/docs/app-events/getting-started-app-events-ios). If other pre-defined events are important to you, [contact us](https://segment.com/help/contact/). +The integration currently only supports the `FBSDKAppEventNameActivatedApp` pre-defined event (via the `activateApp` handler). All other events are forwarded as [custom events](https://developers.facebook.com/docs/app-events/getting-started-app-events-ios){:target="_blank"}. If other pre-defined events are important to you, [contact us](https://segment.com/help/contact/){:target="_blank"}. ## Troubleshooting ### Not seeing events? -You will have to be sure that the [IDFA](/docs/connections/sources/catalog/libraries/mobile/ios/#idfa) is working within your app, which involves adding the [iAD framework](/docs/connections/sources/catalog/libraries/mobile/ios/#idfa). +You will have to be sure that the [IDFA](/docs/connections/sources/catalog/libraries/mobile/ios/#idfa) is working within your app, which involves adding the [AdSupport and App Tracking Transparency frameworks](https://segment.com/docs/connections/sources/catalog/libraries/mobile/ios/#ad-tracking-and-idfa). Similarly, on Android, you'll need to include the Play Services Ads library as [mentioned here](/docs/connections/sources/catalog/libraries/mobile/android/#how-do-you-handle-unique-identifiers-) in order for the `advertisingId` to populate. -Once you've added these, you will start to see the `context.device.advertisingId` populate and the `context.device.adTrackingEnabled` flag set to `true` unless the user has ad tracking limited or is using a mobile ad blocker. +After you've added these, you will start to see the `context.device.advertisingId` populate and the `context.device.adTrackingEnabled` flag set to `true` unless the user has ad tracking limited or is using a mobile ad blocker. -> note "" -> While the network is deprecated, the relevant iOS [framework](https://developer.apple.com/reference/iad) is not. Facebook requires that payloads include the following: - `context.device.id` diff --git a/src/connections/destinations/catalog/facebook-offline-conversions/index.md b/src/connections/destinations/catalog/facebook-offline-conversions/index.md index 50acdce91a..388c05465f 100644 --- a/src/connections/destinations/catalog/facebook-offline-conversions/index.md +++ b/src/connections/destinations/catalog/facebook-offline-conversions/index.md @@ -4,7 +4,7 @@ rewrite: true strat: facebook id: 58ae54dc70a3e552b95415f6 --- -[Facebook Offline Conversions](https://www.facebook.com/business/help/1782327938668950?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) enables offline event tracking, so marketers can run campaigns, upload transaction data, and compare in-store transactions. +[Facebook Offline Conversions](https://www.facebook.com/business/help/1782327938668950?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} enables offline event tracking, so marketers can run campaigns, upload transaction data, and compare in-store transactions. > info "Customer Information Parameters Requirements" > As of Facebook Marketing API v13.0+, Facebook began enforcing new requirements for customer information parameters (match keys). To ensure your events don't throw an error, Segment recommends that you review [Facebook’s new requirements](https://developers.facebook.com/docs/graph-api/changelog/version13.0#conversions-api){:target="_blank"}. @@ -12,18 +12,18 @@ id: 58ae54dc70a3e552b95415f6 ## Other Facebook Destinations Supported by Segment This page is about the **Facebook Offline Conversions**. For documentation on other Facebook destinations, see the pages linked below. -| **Facebook Destination** | Supported by Engage | -| ----------------------------------------------------------------------------------------------------------- | --------------------- | -| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/)** | Yes | -| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/)** | Yes | -| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/)** | No | -| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/)** | Yes | -| **[Facebook Conversions API](/docs/connections/destinations/catalog/actions-facebook-conversions-api/)** | Yes | +| **Facebook Destination** | Supported by Engage | +| ----------------------------------------------------------------------------------------------------------------------------- | --------------------- | +| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/){:target="_blank"}** | Yes | +| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/){:target="_blank"}** | Yes | +| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/){:target="_blank"}** | No | +| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/){:target="_blank"}** | Yes | +| **[Facebook Conversions API](/docs/connections/destinations/catalog/actions-facebook-conversions-api/){:target="_blank"}** | Yes | ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. @@ -33,7 +33,7 @@ This page is about the **Facebook Offline Conversions**. For documentation on ot ![A screenshot of the Facebook Offline Conversions page in the Segment app.](images/8acf724eb5cf484f29f4dd278ccbd118.png) -By doing so, we will ask for `ads_management` and `public_profile` access scopes which will allow Segment to have proper permissions to send offline events to your Event Sets. You can read more about Facebook's [access and authentication](https://developers.facebook.com/docs/marketing-api/access) if you would like to know exactly what these scopes allow. +By doing so, we will ask for `ads_management` and `public_profile` access scopes which will allow Segment to have proper permissions to send offline events to your Event Sets. You can read more about Facebook's [access and authentication](https://developers.facebook.com/docs/marketing-api/access){:target="_blank”} if you would like to know exactly what these scopes allow. **IMPORTANT**: Note that the Segment user that is OAuthing **MUST** have admin access in your company's Facebook Business Manager account. Otherwise, the authorization will fail. diff --git a/src/connections/destinations/catalog/facebook-pixel-server-side/index.md b/src/connections/destinations/catalog/facebook-pixel-server-side/index.md index 6b00262989..32dd3072fa 100644 --- a/src/connections/destinations/catalog/facebook-pixel-server-side/index.md +++ b/src/connections/destinations/catalog/facebook-pixel-server-side/index.md @@ -25,16 +25,16 @@ hide-dossier: true This page is about the **Facebook Conversions API** destination. For documentation on other Facebook destinations, including Facebook Pixel, see the pages linked below. -| **Facebook Destination** | Supported by Engage | -| ----------------------------------------------------------------------------------------------------------- | ------------------- | -| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/)** | Yes | -| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/)** | Yes | -| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/)** | Yes | -| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/)** | No | +| **Facebook Destination** | Supported by Engage | +| ----------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/){:target="_blank"}** | Yes | +| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/){:target="_blank"}** | Yes | +| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/){:target="_blank"}** | Yes | +| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/){:target="_blank"}** | No | ## Getting started -{% include content/connection-modes.md %} + Next, set up your Pixel to work with the Facebook Conversions API destination. You can use an existing Facebook Pixel that you already have set up, or create a new one. If you don't already have a Facebook Pixel configured, follow the "New Pixel" instructions below to create one. @@ -96,7 +96,7 @@ Use this approach if you want to separate tracking events completed on a user's For this option to work best, the same `external_id` needs to be passed from the browser and the server. To achieve this, go to your Facebook Pixel destination settings in Segment and enable the **Enable Advanced Matching** and **Use User ID or Anonymous ID as External ID** settings. By default the Facebook Conversions API destination uses the `userId` (or `anonymousId` if not present) to set the `external_id`, so when you set up Facebook Pixel to use the same settings, Facebook can then match the users. -You can also send [user traits in the context object of the track events](#default-mappings-to-facebook-properties)to increase the match rate for events from a server source. Collect other fields from the browser, like `userAgent`, `ip` address, and [Facebook's parameters (fbp, fbc)](https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc){:target="_blank"}, pass them to the server, and manually add them to the events. +You can also send [user traits in the context object of the track events](#default-mappings-to-facebook-properties) to increase the match rate for events from a server source. Collect other fields from the browser, like `userAgent`, `ip` address, and [Facebook's parameters (fbp, fbc)](https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc){:target="_blank"}, pass them to the server, and manually add them to the events. #### Deduplication considerations @@ -127,7 +127,7 @@ For more information about Track calls, see the [Track method](/docs/connections Beginning February 15th, 2021, Facebook requires the `action_source` server event parameter for all events sent to the Conversions API. This parameter is used to specify where the conversions occurred. If `action_source` is set to 'website' then the `client_user_agent` and the `event_source_url` parameters are also required. Events sent to the Conversions API after February 15th that do not meet the requirements may not be available for optimization, targeting, or measurement. -| Server Event Parameter | Requirement | Implementation p | +| Server Event Parameter | Requirement | Implementation | | ---------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | `action_source` | Always required | It is set automatically but it can be set manually. | | `client_user_agent` | Only required if `action_source` = "website" | It must be set manually if using a server library. It is set automatically if using the Segment web library. | diff --git a/src/connections/destinations/catalog/facebook-pixel/index.md b/src/connections/destinations/catalog/facebook-pixel/index.md index ac1208abcb..1a6ecabfe6 100644 --- a/src/connections/destinations/catalog/facebook-pixel/index.md +++ b/src/connections/destinations/catalog/facebook-pixel/index.md @@ -4,39 +4,37 @@ rewrite: true strat: facebook id: 5661eb58e954a874ca44cc07 --- -[Facebook Pixel](https://developers.facebook.com/docs/facebook-pixel) lets you measure and optimize the performance of your Facebook Ads. It makes conversion tracking, optimization and remarketing easier than ever. The Facebook Pixel Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-facebook-pixel). +[Facebook Pixel](https://developers.facebook.com/docs/facebook-pixel){:target="_blank"} lets you measure and optimize the performance of your Facebook Ads, making conversion tracking, optimization and remarketing easier than ever. The Facebook Pixel Destination is open-source. You can browse the code on [GitHub](https://github.com/segment-integrations/analytics.js-integration-facebook-pixel){:target="_blank"}. > warning "" -> Facebook has deprecated the modular "Ads For Websites" suite, which previously comprised Facebook Custom Audiences and Facebook Conversion Tracking. We've consolidated those two destinations into this new and improved "Facebook Pixel" destination. +> Facebook deprecated the modular Ads For Websites suite, which previously comprised Facebook Custom Audiences and Facebook Conversion Tracking. Segment consolidated those two destinations into this new and improved Facebook Pixel destination. -**Use Cases** +**Use cases** -* [Increase conversions by retargeting shopping cart abandoners on Facebook](https://segment.com/recipes/abandon-cart-retargeting-facebook/) +* [Increase conversions by retargeting shopping cart abandoners on Facebook](https://segment.com/recipes/abandon-cart-retargeting-facebook/){:target="_blank"} -## Other Facebook Destinations Supported by Segment -This page is about the **Facebook Pixel**. For documentation on other Facebook destinations, see the pages linked below. +## Other Facebook Destinations supported by Segment +This page is about the **Facebook Pixel** destination. For documentation on other Facebook destinations, see the pages linked below. -| **Facebook Destination** | Supported by Engage | -| ----------------------------------------------------------------------------------------------------------- | ------------------- | -| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/)** | Yes | -| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/)** | Yes | -| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/)** | No | -| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/)** | Yes | -| **[Facebook Conversions API](/docs/connections/destinations/catalog/actions-facebook-conversions-api/)** | Yes | +| **Facebook Destination** | Supported by Engage | +| ----------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/){:target="_blank"}** | Yes | +| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/){:target="_blank"}** | Yes | +| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/){:target="_blank"}** | No | +| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/){:target="_blank"}** | Yes | +| **[Facebook Conversions API](/docs/connections/destinations/catalog/actions-facebook-conversions-api/){:target="_blank"}** | Yes | -## Getting Started - -{% include content/connection-modes.md %} +## Getting started 1. From the Segment web app, click **Catalog**. 2. Search for "Facebook Pixel" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the destination settings, enter your `pixelId` from the [Pixels tab in Facebook Ads Manager](https://www.facebook.com/ads/manager/pixel/facebook_pixel). +3. In the destination settings, enter your `pixelId` from the [Pixels tab in Facebook Ads Manager](https://www.facebook.com/ads/manager/pixel/facebook_pixel){:target="_blank"}. -Segment automatically initializes Facebook's pixel with your `pixelId` upon loading `analytics.js`. +When you enable Facebook Pixel as a destination in your Segment workspace, Segment automatically initializes Facebook's pixel with your `pixelId` upon loading `analytics.js`. This means you should remove the native Facebook script from your page. ## Page @@ -46,7 +44,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.page(); ``` -Segment maps `analytics.page()` to Facebook's `fbq('track', "PageView")` method and will forward all page views accordingly. Note that the integration will ignore any parameters you pass to `analytics.page()`. +Segment maps `analytics.page()` to Facebook's `fbq('track', "PageView")` method and will forward all page views accordingly. The integration will ignore any parameters you pass to `analytics.page()`. ## Identify @@ -79,9 +77,9 @@ analytics.track("My Custom Event", { }); ``` -On our analytics.js client-side integration we support all three [documented](https://developers.facebook.com/docs/facebook-pixel/api-reference#events) methods of sending events to Facebook. +Segment's analytics.js client-side integration supports all three [documented](https://developers.facebook.com/docs/facebook-pixel/api-reference#events){:target="_blank"} methods of sending events to Facebook. -At any time, you can define a custom `contentType` on the integration options. If the value is present, it will take +At any time, you can define a custom `contentType` on the integration options. If the value is present, it takes precedence over any other setting or default value. ```javascript @@ -99,23 +97,22 @@ analytics.track('Checkout Started', { ); ``` -### Standard Events +### Standard events -To send *Standard* events, use the Segment destination setting labeled "Map Your Events to Standard FB Events". Then, any time Segment receives one of the events in that mapping, it will be sent to Facebook as the standard event you specified. All properties you included in the event will be sent as event properties. You can find documentation on these events [here](https://developers.facebook.com/docs/facebook-pixel/implementation/conversion-tracking/#standard-events). +To send *Standard* events, use the Segment destination setting labeled "Map Your Events to Standard FB Events". Then, any time Segment receives one of the events in that mapping, it will be sent to Facebook as the standard event you specified. All properties you included in the event will be sent as event properties. For more information, view [Meta's conversion tracking documentation](https://developers.facebook.com/docs/facebook-pixel/implementation/conversion-tracking/#standard-events){:target="_blank"}. -In addition, Segment will specially handle the following event types and send them as Standard events: +In addition, Segment sends the following event types as Standard events: -- "Order Completed" will be sent as "Purchase" -- "Product Added" will be sent as "AddToCart" -- "Product List Viewed" will be sent as "ViewContent" -- "Product Viewed" will be sent as "ViewContent" -- "Products Searched" will be sent as "Search" -- "Checkout Started" will be sent as "InitiateCheckout" +- `Order Completed`, which Segment sends as `Purchase` +- `Product Added`, which Segment sends as `AddToCart` +- `Product List Viewed`, which Segment sends as `ViewContent` +- `Product Viewed`, which Segment sends as `ViewContent` +- `Products Searched`, which Segment sends as `Search` +- `Checkout Started`, which Segment sends as `InitiateCheckout` -Facebook requires a currency for "Purchase" events -- if you leave it out, Segment will set a default value of "USD". +Facebook requires a currency for `Purchase` events. If you leave it out a currency, Segment will set a default value of `USD`. -You can set custom properties for the events listed above. Use the setting "Standard Events custom properties" to list -all the properties you want to send. +You can set custom properties for the events listed above. Use the setting "Standard Events custom properties" to list all the properties you want to send. Here is how you'd specify standard events in the settings view: @@ -123,17 +120,17 @@ Here is how you'd specify standard events in the settings view: You can map more than one Track event to the same Facebook standard event. -### Legacy Events +### Legacy events -To send *Legacy Conversion* events, use the Segment setting called "Legacy Conversion Pixel IDs". Any events that appear in that mapping will be sent to Facebook with the specified Pixel ID used as the Facebook Pixel `eventName`. Conversion events only support `currency` and `value` as event properties, so only these will be associated with the event. `currency` will default to "USD" if left out. +To send *Legacy Conversion* events, use the Segment setting called "Legacy Conversion Pixel IDs". Any events that appear in that mapping will be sent to Facebook with the specified Pixel ID used as the Facebook Pixel `eventName`. Conversion events only support `currency` and `value` as event properties, so only these will be associated with the event. `currency` will default to `USD` if left out. -### Custom Events +### Custom events -To send *Custom* events, send any event that does not appear in either mapping. All properties you included in the event will be included as event properties. +To send *Custom* events, send any event that does not appear in either mapping. All properties you include in the event are included as event properties. Segment sends any events you don't add to the "Map Your Events to Standard FB Events" setting to Facebook as a custom event. There is no setting to add custom events in the Facebook Pixel Destination configuration. ### Timestamps -Facebook Pixel uses a custom timestamp format: an ISO 8601 timestamp without timezone information. For the following event fields, if you pass in a JavaScript `Date` object, it will be converted to this custom format. If you pass in a string, it is assumed that the string is already formatted as Facebook expects: +Facebook Pixel uses a custom timestamp format: an ISO 8601 timestamp without timezone information. For the following event fields, if you pass in a JavaScript `Date` object, it will be converted to this custom format. If you pass in a string, Segment assumes that the string is already formatted as Facebook expects: - `checkinDate` - `checkoutDate` @@ -144,9 +141,9 @@ Facebook Pixel uses a custom timestamp format: an ISO 8601 timestamp without tim - `travelEnd` - `travelStart` -### Advanced Matching +### Advanced matching -The Segment Facebook Pixel integration supports [Advanced Matching](https://developers.facebook.com/docs/facebook-pixel/advanced/advanced-matching) which enables you to send your customer data through the pixel to match more website actions with Facebook users. With this additional data, you can report and optimize your ads for more conversions and build larger re-marketing audiences. When the page loads, before we fire off the pixels, we'll check for traits that the user has been previously identified with and send that along with each call. +The Segment Facebook Pixel integration supports [Advanced Matching](https://developers.facebook.com/docs/facebook-pixel/advanced/advanced-matching){:target="_blank"}, which enables you to send your customer data through the pixel to match more website actions with Facebook users. With this additional data, you can report and optimize your ads for more conversions and build larger re-marketing audiences. When the page loads, and before Segment fires off the pixels, Segment checks for traits that the user has been previously identified with and sends that along with each call. Facebook accepts the following properties: @@ -162,23 +159,23 @@ Facebook accepts the following properties: If you follow Segment's [spec](/docs/connections/spec/identify/#traits), these properties send in the correct format. -When you use Advanced Matching, Facebook also accepts an External ID. This can be any unique ID from the advertiser, like loyalty membership IDs, user IDs, and external cookie IDs. To send an `external_id` to Facebook you can either: +When you use Advanced Matching, Facebook also accepts an `external_id`. This can be any unique ID from the advertiser, like loyalty membership IDs, user IDs, and external cookie IDs. To send an `external_id` to Facebook you can either: - Send the Segment `userId` or `anonymousId` as `external_id` using the **Use User ID or Anonymous ID as External ID** setting - Indicate which user trait you would like Segment to map to `external_id` using the **Advanced Match Trait Key for External ID** setting -## Limited Data Use +## Limited data use {% include content/facebook-ldu-intro.md %} > info "" -> The **Use Limited Data Use** destination setting is disabled by default for all Facebook destinations except for Facebook Pixel. This must be enabled manually from the destination settings if you're using other Facebook destinations. +> The **Use Limited Data Use** destination setting is disabled by default for all Facebook destinations except for Facebook Pixel. You must enable the setting manually from the destination settings if you're using other Facebook destinations. {% include content/facebook-ldu-params.md %} -Facebook uses the `context.ip` to determine the geolocation of the event. +Facebook uses `context.ip` to determine event geolocation. -You can manually change the Data Processing parameters by adding settings to the `integrations` object. For Facebook Pixel, you must store these settings in the [Load object](/docs/connections/sources/catalog/libraries/website/javascript/#load-options) so that Segment can set them *before* it calls `init`. The example below shows how you might set custom Data Processing parameters in Analytics.js. +You can manually change the Data Processing parameters by adding settings to the `integrations` object. For Facebook Pixel, you must store these settings in the [Load object](/docs/connections/sources/catalog/libraries/website/javascript/#load-options) so that Segment can set them *before* it calls `init`. The following example shows how you might set custom Data Processing parameters in Analytics.js. ```javascript analytics.load("replace_with_your_write_key", { @@ -190,19 +187,17 @@ analytics.load("replace_with_your_write_key", { }); ``` -## Settings - -### Map Categories to FB Content Types +## Map categories to Facebook content types -If you're using real estate, travel, or automotive [Dynamic Ads](https://www.facebook.com/business/learn/facebook-create-ad-dynamic-ads) you can map `category` values to `content_type` values. For example, you might map the category "cars" to the "vehicle" content type so Facebook promotes relevant vehicles from your catalog. To understand which content types you can map to, consult the [Facebook Dynamic Ads](https://developers.facebook.com/docs/marketing-api/dynamic-ad) documentation. +If you're using real estate, travel, or automotive [Dynamic Ads](https://www.facebook.com/business/learn/facebook-create-ad-dynamic-ads){:target="_blank"} you can map `category` values to `content_type` values. For example, you might map the category "cars" to the "vehicle" content type so Facebook promotes relevant vehicles from your catalog. To understand which content types you can map to, consult the [Facebook Dynamic Ads documentation](https://developers.facebook.com/docs/marketing-api/dynamic-ad){:target="_blank"}. -For most implementations we recommend leaving these mappings blank. By default, we'll set `content_type` to "product". +For most implementations, Segment recommends leaving these mappings blank. By default, Segment sets `content_type` to "product". ## Troubleshooting -### PII Blocklisting +### PII blocklisting -Facebook enforces strict guidelines around sending Personally Identifiable Information (PII) as properties of Pixel events. In order to adhere to these guidelines, Segment will automatically scan `track` event properties for PII and remove any that get flagged from the event to Facebook. The following keys are currently filtered: +Facebook enforces strict guidelines around sending Personally Identifiable Information (PII) as properties of Pixel events. To adhere to these guidelines, Segment automatically scans `track` event properties for PII and removes any that get flagged from the event to Facebook. The following keys are currently filtered: - email - firstName @@ -219,24 +214,30 @@ Any `track` events with properties containing those keys will be sent to Faceboo If you have events that use any of those keys for non-PII properties, you can manually allowlist them using the **Allowlist PII Properties** setting. You may also add to this list and/or optionally hash blocklisted properties with the **Blocklist PII Properties** setting. -### Inconsistent or Missing Conversions +### Inconsistent or missing conversions -The most common reason for Facebook conversion pixels to fire inconsistently is that the page redirects or reloads before the pixel has time to be loaded on the page. Make sure your page does not redirect or reload for at least 300ms after the conversion event happens. In some cases a delay of 500ms is necessary. +Facebook conversion pixels can fire inconsistently due to page redirects or reloads before the pixel has finished loading on the page. Make sure your page doesn't redirect or reload for at least 300ms after the conversion event happens. In some cases a delay of 500ms is necessary. -We recommend using our `trackLink` or `trackForm` helpers to delay the page redirect. [Documentation here](/docs/connections/sources/catalog/libraries/website/javascript#track-link). You can extend the delay by [setting the timeout to 500ms](/docs/connections/sources/catalog/libraries/website/javascript#extending-timeout). +Segment recommends using the `trackLink` or `trackForm` helpers to delay the page redirect. For more on these methods, view [the track link documentation](/docs/connections/sources/catalog/libraries/website/javascript#track-link). You can extend the delay by [setting the timeout to 500ms](/docs/connections/sources/catalog/libraries/website/javascript#extending-timeout). -### Extra or Duplicate Conversions +### Extra or duplicate conversions -This may be due to conversion events being sent from your development, staging, or testing environments. We recommend setting up separate source for each environment. That way you can either point events to test conversion pixels in Facebook Conversion Tracking or turn off Facebook Conversion Tracking completely in non-production environments. +This may be due to conversion events being sent from your development, staging, or testing environments. Segment recommends setting up separate sources for each environment, which will let you either point events to test conversion pixels in Facebook Conversion Tracking or turn off Facebook Conversion Tracking completely in non-production environments. -Double check that your mapped conversion events aren't happening anywhere else on your site. If the user reloads the conversion page or re-triggers the tracked event they may be double counted. +Double check that your mapped conversion events aren't happening anywhere else on your site. If the user reloads the conversion page or re-triggers the tracked event, they may be double counted. Facebook's conversion reports count view-through conversions as well as click-through conversions by default. You can change that setting inside Facebook Conversion Tracking in the report attribution settings. -### Facebook Conversions Not Matching Google Analytics +### Facebook conversions not matching Google Analytics Facebook counts conversions per person, as opposed to Google Analytics which counts per browser cookie session (unless you're using [Google Analytics User-ID](/docs/connections/destinations/catalog/google-analytics/#user-id)). -If someone saw or clicked on your ad on a mobile phone then later came back directly to purchase on a desktop machine Google Analytics wouldn't know that this was the same person, but Facebook would. In that scenario Google Analytics counts 2 unique visits with a conversion last attributed to a direct visit on desktop. Facebook counts one conversion with the conversion properly attributed to the last ad click/view on mobile. +If someone saw or clicked on your ad on a mobile phone then later came back directly to purchase on a desktop machine, Google Analytics wouldn't know that this was the same person, but Facebook would. In that scenario, Google Analytics would count two unique visits with a conversion last attributed to a direct visit on desktop. Facebook would count one conversion with the conversion properly attributed to the last ad click/view on mobile. + +### Are Facebook Pixel events reflected in Facebook Ads Manager in real-time? + + +Facebook Pixel events typically don't display in real-time within the Facebook Ads Manager or other reporting interfaces. While Facebook Pixel events are tracked in near real-time, there might be some delay before you see them in your reporting. Visit [Facebook's documentation](https://www.facebook.com/business/help/147965221941551){:target="_blank"} to learn more. + {% include content/client-side-script-unverified.md %} diff --git a/src/connections/destinations/catalog/factorsai/index.md b/src/connections/destinations/catalog/factorsai/index.md index dcc89c0b35..95edb7d37a 100644 --- a/src/connections/destinations/catalog/factorsai/index.md +++ b/src/connections/destinations/catalog/factorsai/index.md @@ -5,17 +5,15 @@ id: 5d1060c40d357d000181e92c hide-cmodes: true hide-components: true --- -[FactorsAI](https://www.factors.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides advanced and intuitive analytics for marketers and product managers, to help drive growth. With FactorsAI you get immediate insights to optimize marketing campaigns, improve conversions and understand user behaviours that drive feature adoption and retention. +[FactorsAI](https://www.factors.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides advanced and intuitive analytics for marketers and product managers, to help drive growth. With FactorsAI you get immediate insights to optimize marketing campaigns, improve conversions and understand user behaviours that drive feature adoption and retention. This destination is maintained by FactorsAI. For any issues with the destination, [contact the FactorsAI Support team](mailto:support@factors.ai). -{% include content/beta-note.md %} - ## Getting Started 1. From the Segment web app, click **Catalog**. 2. Search for "FactorsAI" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [FactorsAI dashboard](https://app.factors.ai/#/settings/segment). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [FactorsAI dashboard](https://app.factors.ai/#/settings/segment){:target="_blank”}. ## Page diff --git a/src/connections/destinations/catalog/firebase/index.md b/src/connections/destinations/catalog/firebase/index.md index 0ff92d64ea..eb90759494 100644 --- a/src/connections/destinations/catalog/firebase/index.md +++ b/src/connections/destinations/catalog/firebase/index.md @@ -14,6 +14,9 @@ Segment's Firebase destination code is open source and available on GitHub. You - [Kotlin](https://github.com/segment-integrations/analytics-kotlin-firebase){:target="_blank"} - [Swift](https://github.com/segment-integrations/analytics-swift-firebase){:target="_blank"} +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/firebase/#consent-mode) and how to set it up. + ## Getting Started on Android To start sending data to Firebase Analytics from your Android project, you'll need to follow a few simple steps: @@ -77,16 +80,16 @@ Analytics analytics = new Analytics.Builder(context, writeKey) ... .build(); ``` -Firebase periodically updates the Android configuration requirements for loading their SDK in your app. To check if your Android configuration is compatible with for your version of Firebase, check [Google's Firebase release notes](https://firebase.google.com/support/release-notes/android). +Firebase periodically updates the Android configuration requirements for loading their SDK in your app. To check if your Android configuration is compatible with for your version of Firebase, check [Google's Firebase release notes](https://firebase.google.com/support/release-notes/android){:target="_blank"}. -You can also check the [Segment-Firebase changelog](https://github.com/segment-integrations/analytics-android-integration-firebase/blob/master/CHANGELOG.md) to find the version of the Firebase SDK that Segment requires in each of the Segment-Firebase SDK version. For example, Segment-Firebase 1.3.1 includes Firebase Core 17.0.1 as a dependency. +You can also check the [Segment-Firebase changelog](https://github.com/segment-integrations/analytics-android-integration-firebase/blob/master/CHANGELOG.md){:target="_blank"} to find the version of the Firebase SDK that Segment requires in each of the Segment-Firebase SDK version. For example, Segment-Firebase 1.3.1 includes Firebase Core 17.0.1 as a dependency. -By default, Segment bundles only `Firebase/Core` which is [Firebase's mobile analytics offering](https://firebase.google.com/docs/analytics/). You can see the other available [Firebase dependencies and features in the Firebase documentation](https://firebase.google.com/docs/android/setup). +By default, Segment bundles only `Firebase/Core` which is [Firebase's mobile analytics offering](https://firebase.google.com/docs/analytics/){:target="_blank"}. You can see the other available [Firebase dependencies and features in the Firebase documentation](https://firebase.google.com/docs/android/setup){:target="_blank"}. ## Getting Started on iOS -1. Register your app in the [Firebase console](https://console.firebase.google.com/) and add the `GoogleService-Info.plist` to the root of your Xcode project. +1. Register your app in the [Firebase console](https://console.firebase.google.com/){:target="_blank"} and add the `GoogleService-Info.plist` to the root of your Xcode project. 2. Add the following dependency to your Podfile: ``` @@ -104,7 +107,28 @@ By default, Segment bundles only `Firebase/Core` which is [Firebase's mobile ana [config use:[SEGFirebaseIntegrationFactory instance]]; ``` -By default, Segment only bundles `Firebase/Core` which is [Firebase's Analytics offering](https://firebase.google.com/docs/analytics/). You can see the other available [Firebase pods and features here](https://firebase.google.com/docs/ios/setup). +By default, Segment only bundles `Firebase/Core` which is [Firebase's Analytics offering](https://firebase.google.com/docs/analytics/){:target="_blank"}. You can see the other available [Firebase pods and features here](https://firebase.google.com/docs/ios/setup){:target="_blank"}. + +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Consent mode may involve updates to your sources outside of Segment, such as incorporating a consent management system for consent functionality. + +To set up consent mode for Google Firebase: +1. Update your app's SDK to a version that supports consent mode v2. + * Android apps must use F[irebase Android Analytics SDK version 21.5.0 or later](https://firebase.google.com/support/release-notes/android#analytics_v21-5-0){:target="_blank"}. + * iOS apps must use [Firebase Apple SDK version 10.17.0 or later](https://firebase.google.com/support/release-notes/ios#analytics){:target="_blank"}. + +2. Set up consent mode for your app if you haven't already set it up. + * Android: [Set up consent mode for Android apps](https://developers.google.com/tag-platform/security/guides/app-consent?platform=android&consentmode=advanced){:target="_blank"} + * iOS: [Set up consent mode for iOS apps](https://developers.google.com/tag-platform/security/guides/app-consent?platform=ios&consentmode=advanced){:target="_blank"} +3. If you already set up consent mode for your app, upgrade it to consent mode v2. + * Android: [Upgrade to consent mode v2 for Android apps](https://developers.google.com/tag-platform/security/guides/app-consent?platform=android&consentmode=advanced#upgrade-consent-v2){:target="_blank"} + * iOS: [Upgrade to consent mode v2 for iOS apps](https://developers.google.com/tag-platform/security/guides/app-consent?platform=ios&consentmode=advanced#upgrade-consent-v2){:target="_blank"} ## Setting up Firebase with Analytics-React-Native @@ -126,9 +150,9 @@ When you call `identify` Segment will map to the corresponding Firebase Analytic You can use these traits to create audiences and views to analyze your users' behavior. -**Note**: Google prohibits sending PII to Firebase unless ["robust notice" is given to your app users](https://firebase.google.com/policies/analytics/). For iOS apps, some Analytics features, such as audiences and campaign attribution, and some user properties, such as Age and Interests, require the [AdSupport framework](https://developer.apple.com/reference/adsupport) to be enabled. +**Note**: Google prohibits sending PII to Firebase unless ["robust notice" is given to your app users](https://firebase.google.com/policies/analytics/){:target="_blank"}. For iOS apps, some Analytics features, such as audiences and campaign attribution, and some user properties, such as Age and Interests, require the [AdSupport framework](https://developer.apple.com/reference/adsupport){:target="_blank"} to be enabled. -Learn more about [Firebase's reporting dashboard here](https://support.google.com/firebase/answer/6317517?hl=en&ref_topic=6317489). +Learn more about [Firebase's reporting dashboard here](https://support.google.com/firebase/answer/6317517?hl=en&ref_topic=6317489){:target="_blank"}. **Firebase has strict requirements for User Property names; they must:** @@ -146,11 +170,11 @@ You are limited to 25 unique user properties per Firebase Console. - Replaces spaces with underscores - Trims property names to 40 characters (Android only) -Firebase automatically collects [these user properties](https://support.google.com/firebase/answer/6317486). +Firebase automatically collects [these user properties](https://support.google.com/firebase/answer/6317486){:target="_blank"}. ## Track -When you call `track` Segment will log the event with Firebase. Firebase automatically tracks [the events listed here](https://support.google.com/firebase/answer/6317485) and it will still do so when bundling with Segment. +When you call `track` Segment will log the event with Firebase. Firebase automatically tracks [the events listed here](https://support.google.com/firebase/answer/6317485){:target="_blank"} and it will still do so when bundling with Segment. Firebase has a limit of 500 distinctly named events so it pays off to be [intentional in what you track](/docs/protocols/tracking-plan/best-practices/). @@ -229,7 +253,7 @@ Google Analytics for Firebase iOS does NOT support the case of manual-only scree #### **Firebase Dynamic Linking** (iOS only) -Firebase Dynamic Links are smart URLs that can change behavior dynamically depending on the platform where the user clicks them. Use them in web, email, social media, referral and physical promotions to increase user acquisition, retention and lifetime value. Key features include ability to survive app installs, controlling user experience depending on what platform they access the link on and knowing which content and campaigns are working using tracking in the Firebase console. [Check out Firebase's Docs here](https://firebase.google.com/docs/dynamic-links/). +Firebase Dynamic Links are smart URLs that can change behavior dynamically depending on the platform where the user clicks them. Use them in web, email, social media, referral and physical promotions to increase user acquisition, retention and lifetime value. Key features include ability to survive app installs, controlling user experience depending on what platform they access the link on and knowing which content and campaigns are working using tracking in the Firebase console. [Check out Firebase's Docs here](https://firebase.google.com/docs/dynamic-links/){:target="_blank"}. To use Firebase Dynamic Links, add the below to your podfile. @@ -237,7 +261,7 @@ To use Firebase Dynamic Links, add the below to your podfile. pod 'Firebase/DynamicLinks' ``` -Then, enter the deep link URL scheme in your Segment Firebase destination settings. [Here's a sample app delegate that shows how to implement the Dynamic Linking Logic](https://github.com/firebase/quickstart-ios/blob/master/dynamiclinks/DynamicLinksExample/AppDelegate.m#L41-L135). +Then, enter the deep link URL scheme in your Segment Firebase destination settings. [Here's a sample app delegate that shows how to implement the Dynamic Linking Logic](https://github.com/firebase/quickstart-ios/blob/master/dynamiclinks/DynamicLinksExample/AppDelegate.m#L41-L135){:target="_blank"}. ### **Conversion Tracking and Adwords Conversions** @@ -245,7 +269,7 @@ Firebase is Google's recommended method for reporting conversions to Adwords. To ### Troubleshooting -Firebase has great logging. If you are having any issues, you can enable debug mode as outlined [here](https://firebase.google.com/docs/analytics/debugview). +Firebase has great logging. If you are having any issues, you can enable debug mode as outlined [here](https://firebase.google.com/docs/analytics/debugview){:target="_blank"}. ### Changes from iOS v1 to v2 Beta @@ -256,7 +280,7 @@ We have been working hard bringing our Firebase iOS beta integration up to date - Fixes a crash when passing a non NSString value through `traits` on `Identify`. - Fixes Mapping to Firebase `logEvent` and Firebase reserved Params and Constants. -The last point is important, as the mappings are different in this new version and will change which events you seen in your Firebase dash. We suggest you make this upgrade, as this new naming convention coincides with Firebase's semantic [Constants and Params](https://firebase.google.com/docs/reference/ios/firebaseanalytics/api/reference/Constants#/). +The last point is important, as the mappings are different in this new version and will change which events you seen in your Firebase dash. We suggest you make this upgrade, as this new naming convention coincides with Firebase's semantic [Constants and Params](https://firebase.google.com/docs/reference/ios/firebaseanalytics/api/reference/Constants#/){:target="_blank"}. Even more exciting is that this new iOS SDK will have parity with the new Segment-Firebase Android SDK. @@ -264,4 +288,4 @@ As a current user of Segment-Firebase iOS, you will be able to pull in the lates For details on the new mapping, you can check out our documentation [here](/docs/connections/destinations/catalog/firebase/#event-mappings). -Let us know if you have any questions. We recommend upgrading as soon as possible, and [let us know](https://segment.com/help/contact/) if you have any feedback about both the Firebase iOS and Android betas. +Let us know if you have any questions. We recommend upgrading as soon as possible, and [let us know](https://segment.com/help/contact/){:target="_blank"} if you have any feedback about both the Firebase iOS and Android betas. diff --git a/src/connections/destinations/catalog/fl0/index.md b/src/connections/destinations/catalog/fl0/index.md new file mode 100644 index 0000000000..f16692bed4 --- /dev/null +++ b/src/connections/destinations/catalog/fl0/index.md @@ -0,0 +1,62 @@ +--- +title: FL0 Destination +id: 66048cbafa5a03fc49b153d3 +beta: true +--- + +[FL0](https://fl0.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the Product Intelligence Platform that converts customer interactions into revenue opportunities. + +This destination is maintained by FL0. For any issues with the destination, [contact the FL0 Support team](mailto:support@fl0.com). + + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for "FL0". +2. Select FL0 and click **Add Destination** +3. Select an existing source to connect to FL0. +4. Go to your [FL0 Organization](https://go.fl0.com){:target="_blank"}. +5. Click on **Connections** in the left-hand menu. +6. Click **Add source** in the top-right of the page and select **Segment**. +7. Copy the **API Key** from the Segment properties. +8. Enter the **API Key** in the FL0 destination settings in Segment. + + +## Supported methods + +The FL0 destination supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). + +### Page + +Send [Page](/docs/connections/spec/page) calls to FL0 to measure what pages your users and companies are visiting. For example: + +```js +analytics.page() +``` + +Segment sends Page calls to FL0 as automatically tagged events called `Page View`. + + + +### Identify + +Send [Identify](/docs/connections/spec/identify) calls to notify FL0 of your logged-in users. For example: + +```js +analytics.identify('userId123', { + email: 'john.doe@example.com' +}); +``` + +Segment sends Identify calls to FL0 as an `Identify` event. + + +### Track + +Send [Track](/docs/connections/spec/track) calls to measure custom events that happen within your app. For example: + +```js +analytics.track('Login Button Clicked') +``` + +Segment sends Track calls to FL0 as a tagged event with the same name as the event, for example `Login Button Clicked`. + diff --git a/src/connections/destinations/catalog/flagship-io/index.md b/src/connections/destinations/catalog/flagship-io/index.md deleted file mode 100644 index 16801af065..0000000000 --- a/src/connections/destinations/catalog/flagship-io/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Flagship.io Destination' -hidden: true -id: 626153e34fb8f47a32f8deab -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/flagshipio/index.md b/src/connections/destinations/catalog/flagshipio/index.md index 2bd24aa859..84ad040102 100644 --- a/src/connections/destinations/catalog/flagshipio/index.md +++ b/src/connections/destinations/catalog/flagshipio/index.md @@ -12,7 +12,7 @@ Flagship.io maintains this destination. For any issues with the destination, [co ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **Flagship.io** in the Destinations Catalog, and select the **Flagship.io** destination. diff --git a/src/connections/destinations/catalog/flurry/index.md b/src/connections/destinations/catalog/flurry/index.md index 32a1ee1e56..9e731d831d 100644 --- a/src/connections/destinations/catalog/flurry/index.md +++ b/src/connections/destinations/catalog/flurry/index.md @@ -3,26 +3,22 @@ title: Flurry Destination rewrite: true id: 54521fd625e721e32a72eeb1 --- -[Flurry](https://developer.yahoo.com/flurry/docs/) provides you with the tools and resources you need to gain a deep level of understanding about your users' behavior in your apps. +[Flurry](https://developer.yahoo.com/flurry/docs/){:target="_blank"} provides you with the tools and resources you need to gain a deep level of understanding about your users' behavior in your apps. -Our Flurry destination code is open sourced on GitHub. Feel free to check it out: [iOS](https://github.com/segment-integrations/analytics-ios-integration-flurry), [Android](https://github.com/segment-integrations/analytics-android-integration-flurry). +Our Flurry destination code is open sourced on GitHub. Feel free to check it out: [iOS](https://github.com/segment-integrations/analytics-ios-integration-flurry){:target="_blank"}, [Android](https://github.com/segment-integrations/analytics-android-integration-flurry){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Flurry" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. In the destination settings, enter your Flurry "API Key" in Segment's Settings UI. You can retrieve this from your **Flurry Admin > Apps > API Key**. It should look like "4KKKGS3BAK4WW8WJ93DN". -4. Follow the instructions in the GitHub repos: [iOS SDK](https://github.com/segment-integrations/analytics-ios-integration-flurry) and [Android SDK](https://github.com/segment-integrations/analytics-android-integration-flurry). +4. Follow the instructions in the GitHub repos: [iOS SDK](https://github.com/segment-integrations/analytics-ios-integration-flurry){:target="_blank"} and [Android SDK](https://github.com/segment-integrations/analytics-android-integration-flurry){:target="_blank"}. 5. Once the Segment library is integrated with your app, toggle Flurry on in your Segment UI. _Note: Flurry does not always display data in real time. We've seen that it can take anywhere from a few hours to a few days for certain types of data to sync with Flurry._ -### React Native set up - -{% include content/react-dest.md %} - ## Screen If you're not familiar with the Segment Specs, take a look to understand what the [Screen method](/docs/connections/spec/screen/) does. diff --git a/src/connections/destinations/catalog/foxmetrics/index.md b/src/connections/destinations/catalog/foxmetrics/index.md index b7e21b87bd..b92054d1e3 100644 --- a/src/connections/destinations/catalog/foxmetrics/index.md +++ b/src/connections/destinations/catalog/foxmetrics/index.md @@ -3,11 +3,11 @@ title: FoxMetrics Destination rewrite: true id: 54521fd625e721e32a72eeb2 --- -[FoxMetrics](https://www.foxmetrics.com/) is a personalization platform that allows users to collect & analyze customer actions through computers, mobile, and web applications. The `analytics.js` FoxMetrics destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-foxmetrics). +[FoxMetrics](https://www.foxmetrics.com/){:target="_blank"} is a personalization platform that allows users to collect & analyze customer actions through computers, mobile, and web applications. The `analytics.js` FoxMetrics destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-foxmetrics){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "FoxMetrics" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/freshmarketer/index.md b/src/connections/destinations/catalog/freshmarketer/index.md index 0c56536719..aa6ac17ebd 100644 --- a/src/connections/destinations/catalog/freshmarketer/index.md +++ b/src/connections/destinations/catalog/freshmarketer/index.md @@ -3,16 +3,13 @@ title: Freshmarketer Destination rewrite: true id: 5c823fb8af6c8c00015636b6 --- -Segment makes it easy to send your data to [Freshmarketer](https://www.freshmarketer.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) (and lots of other destinations). Once you collect your data using Segment's [open source libraries](/docs/connections/sources/catalog/), Segment translates and routes your data to Freshmarketer in the format it can use. +Segment makes it easy to send your data to [Freshmarketer](https://www.freshmarketer.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} (and lots of other destinations). Once you collect your data using Segment's [open source libraries](/docs/connections/sources/catalog/), Segment translates and routes your data to Freshmarketer in the format it can use. This destination is maintained by Freshmarketer. For any issues with the destination, [contact the Freshmarketer Support team](mailto:support@freshmarketer.com). -{% include content/beta-note.md %} - - ## Getting Started -{% include content/connection-modes.md %} + 1. From your Segment UI's Destinations page click **Add Destination**. 2. Search for "Freshmarketer" in the Destinations Catalog and confirm the Source you'd like to connect to. diff --git a/src/connections/destinations/catalog/freshsales-suite-crm/index.md b/src/connections/destinations/catalog/freshsales-suite-crm/index.md index a8d9e03da4..3d8916680b 100644 --- a/src/connections/destinations/catalog/freshsales-suite-crm/index.md +++ b/src/connections/destinations/catalog/freshsales-suite-crm/index.md @@ -55,7 +55,7 @@ userId is a mandatory field which is used to identify the contact in Freshsales. #### Traits -Traits are pieces of information you know about a user that are included in an identify method. +Traits are pieces of information you know about a user. They are a mandatory part of the [Identify method](/docs/connections/spec/identify/). #### Default Traits diff --git a/src/connections/destinations/catalog/freshsales/index.md b/src/connections/destinations/catalog/freshsales/index.md index 3fb87bfd35..b2477e6372 100644 --- a/src/connections/destinations/catalog/freshsales/index.md +++ b/src/connections/destinations/catalog/freshsales/index.md @@ -2,7 +2,7 @@ title: Freshsales Destination id: 56fd5efd80412f644ff12fbd --- -This destination is maintained by [Freshsales](https://www.freshworks.com/freshsales-crm/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners). For any issues with the destination contact us at support@freshsales.io. +This destination is maintained by [Freshsales](https://www.freshworks.com/freshsales-crm/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. For any issues with the destination contact us at support@freshsales.io. ## Getting Started @@ -65,7 +65,7 @@ All attributes that are a part of traits should correspond to the internal names However, we make exception to two attributes `title` and `phone` that are part of default traits. They are automatically mapped to Freshsales attributes `job_title` and `work_number` respectively. ### Custom Traits: -As part of traits, you can send custom fields created in Freshsales by using their internal names in camel case. You can find internal names in corresponding field settings page. Also, custom fields will not be automatically created. You have to create them in Freshsales before proceeding to send data from Segment. To learn more about creating custom fields in Freshsales check this [link](https://support.freshsales.io/support/solutions/articles/214558-how-to-add-custom-fields-for-leads-contacts-accounts-and-deals). +As part of traits, you can send custom fields created in Freshsales by using their internal names in camel case. You can find internal names in corresponding field settings page. Also, custom fields will not be automatically created. You have to create them in Freshsales before proceeding to send data from Segment. To learn more about creating custom fields in Freshsales check this [link](https://support.freshsales.io/support/solutions/articles/214558-how-to-add-custom-fields-for-leads-contacts-accounts-and-deals){:target="_blank"}. ![Custom Traits](images/szDo5891Qq.png) diff --git a/src/connections/destinations/catalog/friendbuy/index.md b/src/connections/destinations/catalog/friendbuy/index.md index 696f5b3f51..df2c87720f 100644 --- a/src/connections/destinations/catalog/friendbuy/index.md +++ b/src/connections/destinations/catalog/friendbuy/index.md @@ -16,14 +16,14 @@ Friendbuy is a referral marketing and campaign optimization platform. This destination allows you to: -- Map your Page calls to enable [Widget Management](http://developers.friendbuy.com/#widget-management) -- Map your Identify calls to enable [Customer Tracking](http://developers.friendbuy.com/#customer-tracking) -- Map your Track calls to enable [Order Tracking](http://developers.friendbuy.com/#order-tracking) and [Product Tracking](http://developers.friendbuy.com/#product-tracking) +- Map your Page calls to enable [Widget Management](http://developers.friendbuy.com/#widget-management){:target="_blank"} +- Map your Identify calls to enable [Customer Tracking](http://developers.friendbuy.com/#customer-tracking){:target="_blank"} +- Map your Track calls to enable [Order Tracking](http://developers.friendbuy.com/#order-tracking){:target="_blank"} and [Product Tracking](http://developers.friendbuy.com/#product-tracking){:target="_blank"} ## Page -To load specific widgets on different web pages, you can configure your settings to map your _named_ Page call(s) to specific Friendbuy Widget(s). You can also configure a several optional [advanced widget configurations](http://developers.friendbuy.com/#widget-options) such as **auto delay** and **custom parameters**. +To load specific widgets on different web pages, you can configure your settings to map your _named_ Page call(s) to specific Friendbuy Widget(s). You can also configure a several optional [advanced widget configurations](http://developers.friendbuy.com/#widget-options){:target="_blank"} such as **auto delay** and **custom parameters**. Friendbuy has two Widgets you can map to your Page calls: @@ -88,7 +88,7 @@ analytics.identify('2', { This Destination accepts `Order Completed` events as described in the Segment [ecommerce spec](/docs/connections/spec/ecommerce/v2/#order-completed). -Friendbuy has a concept of [Order Tracking](http://developers.friendbuy.com/#order-tracking) and [Product Tracking](http://developers.friendbuy.com/#product-tracking) where the former describes how to send data about the top level order whereas the latter documents instructions on sending data about each of the product within that order. +Friendbuy has a concept of [Order Tracking](http://developers.friendbuy.com/#order-tracking){:target="_blank"} and [Product Tracking](http://developers.friendbuy.com/#product-tracking){:target="_blank"} where the former describes how to send data about the top level order whereas the latter documents instructions on sending data about each of the product within that order. When you send order details, Segment makes the following translation: diff --git a/src/connections/destinations/catalog/frontleaf/index.md b/src/connections/destinations/catalog/frontleaf/index.md index 99a10e509b..1d713d52eb 100644 --- a/src/connections/destinations/catalog/frontleaf/index.md +++ b/src/connections/destinations/catalog/frontleaf/index.md @@ -27,4 +27,4 @@ analytics.page('Product', 'Shoe'); analytics.page('Lesson'); ``` -* A custom URL filter (configured for you by Frontleaf) that interprets part of the page path (and/or query parameters) as the interaction type. This option can work well for "object-verb" types of URL schemes, e.g. `/lesson/123/view` and `/lesson/456/view` both get labeled as a `/lesson/view` action (which you can then relabel in the UI). [Contact Frontleaf support](https://www.frontleaf.com/contact/) for assistance with this option. +* A custom URL filter (configured for you by Frontleaf) that interprets part of the page path (and/or query parameters) as the interaction type. This option can work well for "object-verb" types of URL schemes, e.g. `/lesson/123/view` and `/lesson/456/view` both get labeled as a `/lesson/view` action (which you can then relabel in the UI). [Contact Frontleaf support](https://www.frontleaf.com/contact/){:target="_blank"} for assistance with this option. diff --git a/src/connections/destinations/catalog/fullstory-cloud-mode-actions/index.md b/src/connections/destinations/catalog/fullstory-cloud-mode-actions/index.md deleted file mode 100644 index c987033a03..0000000000 --- a/src/connections/destinations/catalog/fullstory-cloud-mode-actions/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Fullstory Cloud Mode (Actions) Destination' -hidden: true -id: 62d9aa9899b06480f83e8a66 -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/fullstory/index.md b/src/connections/destinations/catalog/fullstory/index.md index 633eaeb366..ff78b4c9b4 100644 --- a/src/connections/destinations/catalog/fullstory/index.md +++ b/src/connections/destinations/catalog/fullstory/index.md @@ -13,7 +13,7 @@ versions: ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "FullStory" in the Catalog, select it, and choose which of your sources to connect the destination to. Note the source must be sending events using our JavaScript library Analytics.js. @@ -23,7 +23,7 @@ Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.j ## Identify -If you're not familiar with the Segment Specs, take a look to understand what the [identify method](/docs/connections/spec/identify/) does. Identify calls sent to Segment will be transformed and sent to [FullStory's](https://help.fullstory.com/hc/en-us/articles/360020828113) `FS.identify` method. +If you're not familiar with the Segment Specs, take a look to understand what the [identify method](/docs/connections/spec/identify/) does. Identify calls sent to Segment will be transformed and sent to [FullStory's](https://help.fullstory.com/hc/en-us/articles/360020828113){:target="_blank"} `FS.identify` method. An example call which does not include a `userId` will send FullStory the value of the `anonymousId` and would look like: @@ -48,7 +48,7 @@ analytics.identify("userId123", { ### Specifying display name and email -Both `email` and `displayName` are special traits that will be passed to FullStory to be used in their interface as explained in [FullStory's docs](https://help.fullstory.com/hc/en-us/articles/360020828113). These traits are optional. +Both `email` and `displayName` are special traits that will be passed to FullStory to be used in their interface as explained in [FullStory's docs](https://help.fullstory.com/hc/en-us/articles/360020828113){:target="_blank"}. These traits are optional. ``` analytics.identify("userId123", { diff --git a/src/connections/destinations/catalog/funnelenvy/index.md b/src/connections/destinations/catalog/funnelenvy/index.md index 08a418b03c..b2b07b0443 100644 --- a/src/connections/destinations/catalog/funnelenvy/index.md +++ b/src/connections/destinations/catalog/funnelenvy/index.md @@ -3,12 +3,10 @@ title: FunnelEnvy Destination rewrite: true id: 5d3752aec1c95d00012c80aa --- -[FunnelEnvy](https://www.funnelenvy.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps marketers optimize revenue by delivering personalized experiences and offers for every customer across their unique journey. +[FunnelEnvy](https://www.funnelenvy.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps marketers optimize revenue by delivering personalized experiences and offers for every customer across their unique journey. This destination is maintained by FunnelEnvy. For any issues with the destination, [contact the FunnelEnvy Support team](mailto:support@funnelenvy.com). -{% include content/beta-note.md %} - ## Implementation Prerequisite FunnelEnvy works differently than other Segment destinations: It requires that customers include a native FunnelEnvy snippet on their page along with the Segment snippet. @@ -18,11 +16,11 @@ The FunnelEnvy snippet can be found in your settings within FunnelEnvy which is ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "FunnelEnvy" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Head over to your [FunnelEnvy integration settings](https://backstage.funnelenvy.com/#/integrationsNew) and add "Segment Souce" as a source integration. +3. Head over to your [FunnelEnvy integration settings](https://backstage.funnelenvy.com/#/integrationsNew){:target="_blank”} and add "Segment Souce" as a source integration. 4. Copy the "API Key" from the Segment Source integration in FunnelEnvy into your Segment Settings UI. diff --git a/src/connections/destinations/catalog/funnelfox/index.md b/src/connections/destinations/catalog/funnelfox/index.md index cc7210d627..6b0f568eb7 100644 --- a/src/connections/destinations/catalog/funnelfox/index.md +++ b/src/connections/destinations/catalog/funnelfox/index.md @@ -7,16 +7,14 @@ id: 5d10e0d0d3831900017af2cd This destination is maintained by FunnelFox. For any issues with the destination, [contact the FunnelFox Support team](mailto:support@funnelfox.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "FunnelFox" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find on your personal [FunnelFox Homepage](https://app.funnelfox.com/#/home) under Data Sources > Websites. +3. Enter the "API Key" into your Segment Settings UI which you can find on your personal [FunnelFox Homepage](https://app.funnelfox.com/#/home){:target="_blank"} under Data Sources > Websites. ## Page diff --git a/src/connections/destinations/catalog/gainsight-px/index.md b/src/connections/destinations/catalog/gainsight-px/index.md index 4aa95d3aa7..685977e9d5 100644 --- a/src/connections/destinations/catalog/gainsight-px/index.md +++ b/src/connections/destinations/catalog/gainsight-px/index.md @@ -4,13 +4,13 @@ rewrite: true redirect_from: '/connections/destinations/catalog/aptrinsic/' id: 59d6b77928a96e00019c6ded --- -[Gainsight PX](https://www.gainsight.com/product-experience/) (formerly known as Aptrinsic) provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. +[Gainsight PX](https://www.gainsight.com/product-experience/){:target="_blank"} (formerly known as Aptrinsic) provides a personalized product experience platform to help companies acquire, retain, and grow customers by creating real-time, personalized engagements driven by product usage data. With Gainsight PX, companies can implement an effective product-led go-to-market strategy that will increase product adoption and customer lifetime value. -Our Gainsight PX destination code is open sourced on GitHub, feel free to check it out: [Gainsight PX integration code](https://github.com/segment-integrations/analytics.js-integration-aptrinsic). +Our Gainsight PX destination code is open sourced on GitHub, feel free to check it out: [Gainsight PX integration code](https://github.com/segment-integrations/analytics.js-integration-aptrinsic){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Gainsight PX" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -26,7 +26,7 @@ Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.j > note "" > **Note**: If you use this integration, you should remove the Gainsight PX native tag code from your page, since Segment loads it for you. -Don't miss out the [The Configuration Checklist - Segment.com](https://www.gainsight.com/product-experience/) in Gainsight PX! +Don't miss the [Segment Connector](https://support.gainsight.com/Gainsight_NXT/Connectors/Connectors/Sightline_Integrations/Usage_Data_Connectors/Segment_Connector){:target="_blank"} page in Gainsight PX documentation! ## Identify If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. diff --git a/src/connections/destinations/catalog/gainsight/index.md b/src/connections/destinations/catalog/gainsight/index.md index 092a2d5955..e6d1a13bf0 100644 --- a/src/connections/destinations/catalog/gainsight/index.md +++ b/src/connections/destinations/catalog/gainsight/index.md @@ -8,7 +8,7 @@ id: 54521fd625e721e32a72eeb5 ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for Gainsight in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/gameball/index.md b/src/connections/destinations/catalog/gameball/index.md index 1e08e0eabf..62e3c38e2a 100644 --- a/src/connections/destinations/catalog/gameball/index.md +++ b/src/connections/destinations/catalog/gameball/index.md @@ -2,19 +2,20 @@ title: Gameball Destination hide-cmodes: true id: 5df6778be7d93d3a5b742b1a +hidden: true --- -[Gameball](https://gameball.co/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a gamified loyalty platform, offering growth, retention, and referral-management programs; and providing self-serve predictive analytics for growth marketers using machine learning to automate audience insights and recommendations. +[Gameball](https://gameball.co/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a gamified loyalty platform, offering growth, retention, and referral-management programs; and providing self-serve predictive analytics for growth marketers using machine learning to automate audience insights and recommendations. This destination is maintained by Gameball. For any issues with the destination, [contact Gameball support](mailto:support@gmabell.co). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment app Destinations page click "Gameball". 2. Search for "Gameball" in the Destinations Catalog and confirm the Source you'd like to connect to. -3. Copy and paste in your ["API Key"](https://help.gameball.co/en/articles/3467114-how-can-you-get-your-account-integration-details-api-key-transaction-key) from your [Account Integration](https://app.gameball.co/settings) page into your Segment Settings UI. +3. Copy and paste in your ["API Key"](https://help.gameball.co/en/articles/3467114-how-can-you-get-your-account-integration-details-api-key-transaction-key){:target="_blank"} from your [Account Integration](https://app.gameball.co/settings){:target="_blank"} page into your Segment Settings UI. Segment's `track` and `identify` events can only update the following properties in Gameball: @@ -50,7 +51,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.track('View Product') ``` -Set up your [custom `track` events in Gameball](https://help.gameball.co/en/articles/3467130-manage-your-players-events) before you send them from Segment to Gameball. +Set up your [custom `track` events in Gameball](https://help.gameball.co/en/articles/3467130-manage-your-players-events){:target="_blank"} before you send them from Segment to Gameball. All `track` events _must_ contain a `userID` property. diff --git a/src/connections/destinations/catalog/gist/index.md b/src/connections/destinations/catalog/gist/index.md index 44b3acfc67..db89a2a8c0 100644 --- a/src/connections/destinations/catalog/gist/index.md +++ b/src/connections/destinations/catalog/gist/index.md @@ -3,17 +3,17 @@ title: Gist Destination rewrite: true id: 5ec499003e60e9200f681768 --- -[Gist](https://getgist.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a marketing and support platform that helps companies attract visitors, convert leads, and support customers. +[Gist](https://getgist.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a marketing and support platform that helps companies attract visitors, convert leads, and support customers. This destination is maintained by Gist. For any issues with the destination, [contact the Gist Support team](mailto:support@getgist.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment App's Destinations catalog page, click **Add Destination**. 2. Search for "Gist" in the Destinations Catalog, and select the Gist destination. 3. Choose which Source should send data to the Gist destination. -4. Copy your [Gist API key](https://app.getgist.com/projects/_/settings/api-key). +4. Copy your [Gist API key](https://app.getgist.com/projects/_/settings/api-key){:target="_blank”}. 5. Enter the "API Key" in the Gist destination settings in Segment. ## Identify @@ -31,7 +31,7 @@ When you identify a new user, the contact is created in Gist. If the contact alr Only `identify` events can *update* existing Contacts. -See [Gist's Contact Properties](https://docs.getgist.com/article/241-contact-properties-glossary) for more details. +See [Gist's Contact Properties](https://docs.getgist.com/article/241-contact-properties-glossary){:target="_blank”} for more details. ## Track If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: diff --git a/src/connections/destinations/catalog/gleap-action/index.md b/src/connections/destinations/catalog/gleap-action/index.md new file mode 100644 index 0000000000..64a001993e --- /dev/null +++ b/src/connections/destinations/catalog/gleap-action/index.md @@ -0,0 +1,7 @@ +--- +title: 'Gleap (Action) Destination' +hidden: true +id: 656f2474a919b7e6e4900265 +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/gleap-cloud-actions/index.md b/src/connections/destinations/catalog/gleap-cloud-actions/index.md new file mode 100644 index 0000000000..d7ee167475 --- /dev/null +++ b/src/connections/destinations/catalog/gleap-cloud-actions/index.md @@ -0,0 +1,25 @@ +--- +title: Gleap (Actions) Destination +id: 656f2474a919b7e6e4900265 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Gleap](https://gleap.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a customer feedback platform designed for apps and websites. It offers a suite of tools including visual bug reporting, live chat, AI customer support, public roadmaps, marketing automation, and more, aimed at enhancing customer success and product improvement. + + +This destination is maintained by Gleap. For any issues with the destination, [contact their Support team](mailto:hello@gleap.io). + + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure Gleap**. +4. Select an existing Source to connect to Gleap (Actions). +5. To use the Gleap destination, obtain an API key by signing up at [app.gleap.io](https://app.gleap.io){:target="_blank”}. +6. Once registered, navigate to **Project > Settings > Security** in the Gleap dashboard. +7. Copy the API key and paste it into the Segment Gleap destination settings. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/google-ads-classic/index.md b/src/connections/destinations/catalog/google-ads-classic/index.md index 284279107d..bf9c320bcc 100644 --- a/src/connections/destinations/catalog/google-ads-classic/index.md +++ b/src/connections/destinations/catalog/google-ads-classic/index.md @@ -14,6 +14,9 @@ id: 54521fd525e721e32a72ee92 With Segment, you can use your events to fire a Google Ads conversion pixel from your website **in client-side JavaScript.** You can also trigger Google Ads (Classic) conversion from your mobile app using the **Server to Server** destination, so you don't need to include the SDK in your app. The server to server connection requires mobile device specific details to forward the events to Google Ads (Classic). Google Ads (Classic) **does not work with any server-side libraries**. Make sure when you're setting up your Google Ads (Classic) conversions that you choose the appropriate tracking method. +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Google Ads Classic won’t be updated to support Consent Mode due to its use of a Google legacy tag that, while still functional, is not actively maintained by Google and lacks support for privacy-durable solutions like consent management. Segment recommends that you migrate to the [Google Ads (Gtag) destination](/docs/connections/destinations/catalog/google-adwords-new/) for web tracking and to the [Google Firebase destination](/docs/connections/destinations/catalog/firebase/) for mobile tracking as soon as possible. + ### Configure the Google Ads (Classic) destination 1. From the Segment Destinations Catalog find and select Google Ads (Classic). @@ -84,7 +87,7 @@ Segment recommends using the `trackLink` or `trackForm` helpers to delay the pag ### Legacy Migration -The server-to-server integration with Google Ads (Classic) integrates with the [App Conversion Tracking and Remarketing API](https://developers.google.com/app-conversion-tracking/api/) which is responsible for receiving and processing in-app conversion events. Google recently released an entirely new version of this API that is slated to completely replace the [legacy API](https://developers.google.com/app-conversion-tracking/api/legacy/android-conversion-tracking-server) in the near future. If you are an existing user of this integration and are migrating to this new version, there are three important changes to be aware of: +The server-to-server integration with Google Ads (Classic) integrates with the [App Conversion Tracking and Remarketing API](https://developers.google.com/app-conversion-tracking/api/){:target="_blank"} which is responsible for receiving and processing in-app conversion events. Google recently released an entirely new version of this API that is slated to completely replace the [legacy API](https://developers.google.com/app-conversion-tracking/api/legacy/android-conversion-tracking-server){:target="_blank"} in the near future. If you are an existing user of this integration and are migrating to this new version, there are three important changes to be aware of: 1) App Event Mappings @@ -106,7 +109,7 @@ To authorize Segment to track conversion events using the Google Ads (Classic) A #### Generate a Link ID in your Google Ads (Classic) Account -Authorization between an Google Ads (Classic) account and a third-party-application is done using the use of a Link Id. This process is detailed [here](https://support.google.com/adwords/answer/7365001). +Authorization between an Google Ads (Classic) account and a third-party-application is done using the use of a Link Id. This process is detailed [here](https://support.google.com/adwords/answer/7365001){:target="_blank"}. > warning "" > During this process, you are required to enter a Provider ID. Segment's Provider ID is: `7552494388`. @@ -216,4 +219,4 @@ The following properties are optional, if you'd like to see more, [contact Segme | `currency_code` | `properties.currency` | -Here's Google documentation for the endpoint Segment connects to [for iOS apps](https://developers.google.com/app-conversion-tracking/ios/conversion-tracking-server#reporting_in-app_conversions_from_an_analytics_server) and [for Android Apps](https://developers.google.com/app-conversion-tracking/android/conversion-tracking-server#in-app_conversions). It can take 24-48 hours for conversions to show up in the conversions dashboard. +Here's Google documentation for the endpoint Segment connects to [for iOS apps](https://developers.google.com/app-conversion-tracking/ios/conversion-tracking-server#reporting_in-app_conversions_from_an_analytics_server){:target="_blank"} and [for Android Apps](https://developers.google.com/app-conversion-tracking/android/conversion-tracking-server#in-app_conversions){:target="_blank"}. It can take 24-48 hours for conversions to show up in the conversions dashboard. diff --git a/src/connections/destinations/catalog/google-ads-gtag/index.md b/src/connections/destinations/catalog/google-ads-gtag/index.md index cdea67a14d..b04a2b306c 100644 --- a/src/connections/destinations/catalog/google-ads-gtag/index.md +++ b/src/connections/destinations/catalog/google-ads-gtag/index.md @@ -15,10 +15,69 @@ The [Google global site tag (gtag.js)](https://support.google.com/google-ads/ans > info "" > If you're sending [enhancement data to Google Ads](/docs/connections/destinations/catalog/actions-google-enhanced-conversions/) in parallel with Gtag, you must include the same Order ID (Transaction ID) on both sets of data. This is required to properly deduplicate conversions between Gtag conversions and enhanced conversions. To send Order ID (Transaction ID) to Gtag, include `order_id` as a property on your web events. +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/google-ads-gtag/#consent-mode) and how to set it up. + ## Getting Started You can use this destination to map your `.page()` calls to **Page Load Conversions** or `.track()` calls to **Click Conversions**. Currently this is only supported on the browser. +### Configure the Google Ads (Gtag) destination + +1. From the Segment Destinations Catalog find and select Google Ads (Gtag). +2. Click **Configure Google Ads (Gtag)**. +3. Select the source you will use to send data to Google Ads (Gtag). +4. Provide a meaningful name to this instance of the destination. +5. On the destination Settings tab, enter the **Conversion ID** from your Google Ads (Gtag) account. +6. Select the 'Click Conversion' setting. Enter the name of the event as it appears in the [`track`](/docs/connections/spec/track) call and map it to your Google Ads (Gtag) conversion label. + + +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Consent mode may involve updates to your sources outside of Segment, such as incorporating a consent management system for consent functionality. + +### Set up consent mode + +To enable consent mode for your Google Ads (Gtag) destination, you can choose from 2 implementation options. + +* **Option 1:** + 1. Set the consent defaults by implementing the `ready()` method to set consent defaults. + + ``` + analytics.ready(function() { + window.gtag('consent', 'default', { + 'ad_storage': 'granted', + 'ad_user_data': 'granted', + 'ad_personalization': 'granted', + 'analytics_storage': 'granted' + }); + }); + ``` + + 2. Use your Consent Management Platform to prompt the visitor. Ask the visitor to grant or deny consent for the applicable types (for example, analytics, advertising). + + 3. Pass the information to Gtag.js by calling `gtag` inside the Segment `ready`() method. + + ``` + analytics.ready(function() { + window.gtag('consent', 'update', { + 'ad_storage': 'denied', + 'ad_user_data': 'granted', + 'ad_personalization': 'denied', + 'analytics_storage': 'granted' + }); + }); + ``` + +* **Option 2:** Create an instance of the [Google Analytics 4 Web destination](/docs/connections/destinations/catalog/actions-google-analytics-4-web/), to set up [consent in your GA4 Web destination](/docs/connections/destinations/catalog/actions-google-analytics-4-web/#consent-mode), which loads a gtag with consent preferences. If you're already using Google Analytics 4 Web on the same page, you just need to configure the consent mode settings once. There's no need to create another instance of GA4 Web. + +If you have any questions setting up consent mode, reach out to [friends@segment.com](mailto:friends@segment.com). + ## Page If you want to map all your unnamed `.page()` calls to a default Page Load Conversion, you can enter the Conversion ID in **Settings > Default Page Conversion**. However, if you created specific Page Load Conversions in Google Ads that you'd like to map your named `.page()` calls in Segment, you can map the events in **Settings > Page Load Conversions**. @@ -46,7 +105,7 @@ You can map your custom `.track()` events to any **Click Conversions** you creat If you pass `properties.value`, `properties.currency`, or `properties.order_id`, Segment maps them to Google's semantic `value`, `currency`, or `transaction_id` respectively. -The only exception is that for `Order Completed` events, Segment will map Google's semantic `value` field to your `properties.revenue`. +The only exception is that for `Order Completed` events, Segment will map Google's semantic `value` field to your `properties.revenue` or `properties.total`. If you pass both as properties, `properties.revenue` takes precedence. ## Troubleshooting Google Ads Conversions To figure out if an event is flagged for conversion, follow these steps: @@ -61,13 +120,16 @@ To figure out if an event is flagged for conversion, follow these steps: ``` 2. Verify that the [Google Conversion ID](/docs/connections/destinations/catalog/google-ads-gtag/#google-conversion-id) in your Segment workspace is correct. -3. Find your ad online and click on it. This will redirect you to your website. +3. Find your ad online and click it. This will redirect you to your website. 4. Open the Network tab in your browser and make sure the **Preserve log** checkbox is checked and **All** is selected. Keep this Network tab and webpage open. ![Network tab](../../images/network-tab.png) 5. Go to the **Settings** tab for your Gtag destination in Segment on a new webpage and choose **Click Conversions** to look at the mapped `track()` events and make sure the events are mapped to the correct **Conversion Label**. +> info "" +> The conversion label is unique to each conversion action and is configured per mapping. You can find the conversion label in the [event snippet](https://support.google.com/google-ads/answer/7548399?hl=en#:~:text=For%20website%20conversion,currency%27%3A%20%27USD%27%0A%20%20%20%20%20%20%7D){:target="_blank"}. The event snippet should have `send_to: 'AW-123456789/AbC-D_efG-h12_34-567'`. The conversion label is the part after the '/'. + ![Edit Settings](../../images/conversion-settings.png) 6. Go back to your website and trigger the event mapped to the conversion. For example, as shown in the image above, it would be `Order Completed`. @@ -77,6 +139,20 @@ To figure out if an event is flagged for conversion, follow these steps: 8. See if the value for the `ct_cookie_present` changed to `true`. If `true`, it means that Google Ads counts the event as a conversion. +> info "" +> Google Ads considers an event as a conversion when the user arrives to your website as a result of an Ad _click_. The Google SDK is responsible for checking if the user came from an Ad click and sets the parameter `ct_cookie_present` to true. Without clicking through an ad, Google Ads doesn't reflect the conversion because this information is missing in the network requests. + ## Multiple Google Ads Accounts If you are an enterprise that uses multiple Google Ads Gtag accounts (usually managed by various third party agencies) you can override the top level default Google Conversion ID at the event level by entering it into the settings. + +## Remarketing Support + +Google offers two primary types of remarketing: + +* [Standard Remarketing](https://support.google.com/google-ads/answer/2453998){:target="_blank"} : allows advertisers to show targeted ads to users who have previously visited their website. Advertisers can create custom remarketing lists based on user behavior, such as pages viewed or specific actions taken on the website. +* [Dynamic Remarketing](https://support.google.com/google-ads/answer/3103357){:target="_blank"} : takes personalized advertising a step further by showing users specific products or services they viewed on an advertiser's website. This type of remarketing is particularly beneficial for e-commerce businesses as it displays dynamic product ads to previous visitors, reminding them of products they showed interest in. + +> warning "Google Ads (Gtag) Destination does not support Dynamic Remarketing" +> Segment's Google Ads (Gtag) Destination only supports Standard Remarketing. + diff --git a/src/connections/destinations/catalog/google-analytics/ga4-plans.md b/src/connections/destinations/catalog/google-analytics/ga4-plans.md index 7823152c61..396d56b2a4 100644 --- a/src/connections/destinations/catalog/google-analytics/ga4-plans.md +++ b/src/connections/destinations/catalog/google-analytics/ga4-plans.md @@ -13,9 +13,9 @@ Google introduced the new version of Google Analytics, called Google Analytics 4 ## Event-based data model vs pageview-based data model -GA4 has an event-based data model, like Segment. It is replacing Universal Analytics (UA), which has a pageview-centric data model. For more details, see Google's help center article: [Universal Analytics versus Google Analytics 4 data](https://support.google.com/analytics/answer/9964640?hl=en). +GA4 has an event-based data model, like Segment. It is replacing Universal Analytics (UA), which has a pageview-centric data model. For more details, see Google's help center article: [Universal Analytics versus Google Analytics 4 data](https://support.google.com/analytics/answer/9964640?hl=en){:target="_blank"}. -Because the data models are different, data *cannot* be migrated from Universal Analytics to GA4. Google recommends you rethink your data collection in terms of the new model, rather than port everything over from UA. If you're using UA for ecommerce, see Google's best practices guide for setting up ecommerce tracking in GA4: [Migrate ecommerce data collection from Universal Analytics](https://support.google.com/analytics/answer/10119380?hl=en&ref_topic=10270831); note this is not a simple migration. +Because the data models are different, data *cannot* be migrated from Universal Analytics to GA4. Google recommends you rethink your data collection in terms of the new model, rather than port everything over from UA. If you're using UA for ecommerce, see Google's best practices guide for setting up ecommerce tracking in GA4: [Migrate ecommerce data collection from Universal Analytics](https://support.google.com/analytics/answer/10119380?hl=en&ref_topic=10270831){:target="_blank"}; note this is not a simple migration. ## Support for web and mobile data streams @@ -36,10 +36,10 @@ GA4 requires that you use GA4's recommended events and properties in order to ge ## Cloud Mode (Server-based) first -Segment will start by supporting Cloud-mode for GA4. Note that the [Measurement Protocol](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=gtag#send_an_event) that enables server-to-server data syncing for GA4 properties is [currently in alpha](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=gtag#send_an_event). +Segment will start by supporting Cloud-mode for GA4. Note that the [Measurement Protocol](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=gtag#send_an_event){:target="_blank"} that enables server-to-server data syncing for GA4 properties is [currently in alpha](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type=gtag#send_an_event){:target="_blank"}. ## Switching to GA4 Universal Analytics replaced Google Analytics in 2012; there is precedent for Google slowly replacing the previous generation of Google Analytics with something new. You do not need to switch to GA4 right now. Ultimately, when and how you migrate to GA4 is up to you and your team. -While Google indicates that GA4 is the future (it's the new default property type when you create a new Google Analytics account), Universal Analytics doesn't appear to be going anywhere. You can still choose to [create a new Universal Analytics property](https://support.google.com/analytics/answer/10269537) when you create your new GA4 property. +While Google indicates that GA4 is the future (it's the new default property type when you create a new Google Analytics account), Universal Analytics doesn't appear to be going anywhere. You can still choose to [create a new Universal Analytics property](https://support.google.com/analytics/answer/10269537){:target="_blank"} when you create your new GA4 property. diff --git a/src/connections/destinations/catalog/google-analytics/index.md b/src/connections/destinations/catalog/google-analytics/index.md index f4d4503ad5..d46b90753d 100644 --- a/src/connections/destinations/catalog/google-analytics/index.md +++ b/src/connections/destinations/catalog/google-analytics/index.md @@ -6,6 +6,10 @@ redirect_from: - '/connections/destinations/catalog/google-universal-analytics' id: 54521fd725e721e32a72eebb --- +> warning "" +> Google announced that all standard Universal Analytics properties will stop processing new data on July 1, 2023. 360 Universal Analytics properties will receive a one-time processing extension ending on July 1, 2024. Segment recommends [migrating to Google Analytics 4](https://segment.com/docs/connections/destinations/catalog/actions-google-analytics-4/#migrating-from-universal-analytics-to-google-analytics-4){:target='_blank'} as soon as possible. Learn more about when [Google Analytics 4 will replace Universal Analytics](https://support.google.com/analytics/answer/11583528?sjid=13479291677968058253-NA){:target='_blank'}. + + > warning "Migrate mobile implementations to Firebase" > Google ended support for Google Analytics classic on iOS and Android mobile apps on October 31st 2019. To continue measuring and optimizing user engagement in your mobile apps, [migrate your implementation to use the Firebase SDKs](migrating). If you are using Google Analytics 360 you do not need to migrate. @@ -16,17 +20,17 @@ id: 54521fd725e721e32a72eebb If your Google Measurement ID starts with a G, you're using G-Codes from Google Analytics 4, and should consider using [Segment's Google Analytics 4 destination](/docs/connections/destinations/catalog/actions-google-analytics-4/). -Although GA4 is now the default when you create a new property, you can still [create a Universal Analytics property](https://support.google.com/analytics/answer/10269537). You can use a UA property with [Segment's Google Universal Analytics destination](/docs/connections/destinations/catalog/google-analytics/). +Although GA4 is now the default when you create a new property, you can still [create a Universal Analytics property](https://support.google.com/analytics/answer/10269537){:target="_blank"}. You can use a UA property with [Segment's Google Universal Analytics destination](/docs/connections/destinations/catalog/google-analytics/). Different Measurement IDs begin with different prefixes, which indicate which Google destination you should use. | Prefix | Google Account type | Segment Settings | | ------ | -------------------------- | ----------------- | -| UA | Your global site tag is controlled by Google Universal Analytics. The ID is your Google Universal Analytics Measurement ID. To find the property associated with this ID, use the [account search feature](https://support.google.com/analytics/answer/6100731) in Google Universal Analytics. If the property doesn't appear, you probably don't have access to it. | [Google Universal Analytics](/docs/connections/destinations/catalog/google-analytics/): Tracking ID | +| UA | Your global site tag is controlled by Google Universal Analytics. The ID is your Google Universal Analytics Measurement ID. To find the property associated with this ID, use the [account search feature](https://support.google.com/analytics/answer/6100731){:target="_blank"} in Google Universal Analytics. If the property doesn't appear, you probably don't have access to it. | [Google Universal Analytics](/docs/connections/destinations/catalog/google-analytics/): Tracking ID | | G | Your global site tag is controlled by Google Analytics 4 (GA4). The ID is your Google Analytics Measurement ID. | [Google Analytics 4](/docs/connections/destinations/catalog/actions-google-analytics-4/): Measurement ID | | AW | Your global site tag is controlled by Google Ads. The numeric string following the AW prefix is your Google Ads Conversion ID. | [Google Ads](/docs/connections/destinations/catalog/google-ads-gtag/): Google Conversion ID | | DC | Your global site tag is controlled by a Floodlight tag. The numeric string following DC is your Advertiser ID. | [Floodlight](/docs/connections/destinations/catalog/doubleclick-floodlight/): DoubleClick Advertiser ID | -| other | Your global site tag is controlled by a different Google product or may be implemented incorrectly. Use the [Tag Assistant extension](https://support.google.com/tagassistant/answer/2947093) for Google Chrome to verify. | n/a | +| other | Your global site tag is controlled by a different Google product or may be implemented incorrectly. Use the [Tag Assistant extension](https://support.google.com/tagassistant/answer/2947093){:target="_blank"} for Google Chrome to verify. | n/a | @@ -43,8 +47,11 @@ When you enable the Google Universal Analytics destination in Segment: - Google Universal Analytics starts automatically collecting data on your site. It takes several hours for Google to process this data and add it to your reports, but you should still see events appear in the Google Universal Analytics real-time events dashboard. +> info "Consent Mode" +> Google is enforcing consent starting March 6, 2024 for European Economic Area (EEA) users. Google Analytics won't be updated to support Consent Mode due to planned deprecation by Google. Segment recommends you to [migrate to Google Analytics 4](/docs/connections/destinations/catalog/actions-google-analytics-4/#migrating-from-universal-analytics-to-google-analytics-4) as soon as possible. + > info "Classic tracking deprecated" -> These docs cover Google Analytics Universal features, since the [Classic tracking method has been depreciated](http://analytics.blogspot.com/2014/04/universal-analytics-out-of-beta-into.html). +> These docs cover Google Analytics Universal features, since the [Classic tracking method has been depreciated](http://analytics.blogspot.com/2014/04/universal-analytics-out-of-beta-into.html){:target="_blank"}. ## Page and Screen @@ -55,7 +62,7 @@ The resulting `page` event name in Google Universal Analytics corresponds to the When you send Page events from a server library you must include a `url` property, or else Google Universal Analytics silently rejects the Page event. -If you send a [`screen`](/docs/connections/spec/screen) call using a server library, you must pass in an [application name](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#appName) using Segment's `context.app.name` object, or Google rejects your event. +If you send a [`screen`](/docs/connections/spec/screen) call using a server library, you must pass in an [application name](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#appName){:target="_blank"} using Segment's `context.app.name` object, or Google rejects your event. ### Virtual Pageviews @@ -80,14 +87,14 @@ In some cases, for example if you're tracking search queries, you might want to ## Identify -It is against Google's terms of service to pass Personally Identifiable Information (PII) to the Google Universal Analytics reporting interface. For that reason Segment never passes anything from an [Identify call](/docs/connections/spec/identify/) to Google unless you specifically tell it to. You can read about Google's best practices for avoiding this [here](https://support.google.com/analytics/answer/6366371?hl=en). +It is against Google's terms of service to pass Personally Identifiable Information (PII) to the Google Universal Analytics reporting interface. For that reason Segment never passes anything from an [Identify call](/docs/connections/spec/identify/) to Google unless you specifically tell it to. You can read about Google's best practices for avoiding this [here](https://support.google.com/analytics/answer/6366371?hl=en){:target="_blank"}. ### User ID -[Google Universal Analytics Universal tracking method](https://support.google.com/analytics/answer/3123663) allows you to set a user ID for your identified visitors. +[Google Universal Analytics Universal tracking method](https://support.google.com/analytics/answer/3123663){:target="_blank"} allows you to set a user ID for your identified visitors. -To use this feature you must [set up User-ID in your Google Universal Analytics property](https://support.google.com/analytics/answer/3123666) and create a User-ID view. +To use this feature you must [set up User-ID in your Google Universal Analytics property](https://support.google.com/analytics/answer/3123666){:target="_blank"} and create a User-ID view. To pass the `id` from your [Identify calls](/docs/connections/spec/identify) to Google Universal Analytics, go to the Google Universal Analytics destination settings in the Segment App, navigate to the Advanced Options section, and enable the **Send User-ID to GA** setting. @@ -110,7 +117,7 @@ If you are passing an **email**, **phone number**, **full name** or other PII as Google Universal Analytics has multiple scopes for each custom dimensions: hit (synonymous with events), session, user, product (which requires that enhanced ecommerce be enabled). Segment's device-mode [Analytics.js library](/docs/connections/sources/catalog/libraries/website/javascript/) supports all of them. #### Setting up Custom Dimensions -First, [configure the Custom Dimensions](https://support.google.com/analytics/answer/2709829?hl=en) from your Google Universal Analytics admin page. +First, [configure the Custom Dimensions](https://support.google.com/analytics/answer/2709829?hl=en){:target="_blank"} from your Google Universal Analytics admin page. Once you finish this set up in Google Universal Analytics, you can map traits and properties to your custom dimensions. Go to the Google Universal Analytics destination settings in the Segment App and locate the **Custom Dimensions** setting. This is where you will enter your mapping. You can only map each trait or property to one Custom Dimension at a time. @@ -228,7 +235,7 @@ For **Event Value** you can name the event property `value` or `revenue`. Segmen ### Non-interaction Events -Google Universal Analytics allows you to tag some events as ["non-interaction" events](https://support.google.com/analytics/answer/1033068#NonInteractionEvents). To create an event with the `nonInteraction` flag, pass Segment an event property labeled `nonInteraction` with the value of `1`. You can also set all events to be non-interactive by default in the Advanced Options. +Google Universal Analytics allows you to tag some events as ["non-interaction" events](https://support.google.com/analytics/answer/1033068#NonInteractionEvents){:target="_blank"}. To create an event with the `nonInteraction` flag, pass Segment an event property labeled `nonInteraction` with the value of `1`. You can also set all events to be non-interactive by default in the Advanced Options. Here's an example: @@ -360,8 +367,8 @@ For client-side integrations we use Google Universal Analytics' `ProductAction` -- [Analytics.js - Enhanced E-Commerce](https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce) -- [Analytics.js - E-Commerce](https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce) +- [Analytics.js - Enhanced E-Commerce](https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce){:target="_blank"} +- [Analytics.js - E-Commerce](https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce){:target="_blank"} ### Measuring Promotions @@ -389,8 +396,8 @@ For client-side integrations, we use Google Universal Analytics' Promotions clas -- [Analytics.js - Enhanced E-Commerce](https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce) -- [Analytics.js - E-Commerce](https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce) +- [Analytics.js - Enhanced E-Commerce](https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce){:target="_blank"} +- [Analytics.js - E-Commerce](https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce){:target="_blank"} ### Coupons @@ -545,7 +552,7 @@ To use server-side Google Universal Analytics, there are three options with Segm > info " " > When you add `Google Universal Analytics` to the `integrations` object, the Google Universal Analytics event appears in the Segment debugger as `Google Analytics`. -Universal Analytics (analytics.js) uses the [`clientId`](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage#analyticsjs) to keep track of unique visitors. +Universal Analytics (analytics.js) uses the [`clientId`](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage#analyticsjs){:target="_blank"} to keep track of unique visitors. *A Google Analytics Universal cookie will look like this:* @@ -629,7 +636,7 @@ Your UTM params need to be passed in the `context` object in `context.campaign`. ### Measurement Protocol Parameters -Google Universal Analytics uses a reserved set of [Measurement Protocol Parameters](https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters) which are automatically collected by the device-mode Google Universal Analytics tracker. +Google Universal Analytics uses a reserved set of [Measurement Protocol Parameters](https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters){:target="_blank"} which are automatically collected by the device-mode Google Universal Analytics tracker. To include Measurement Protocol Parameters when sending server-side events to Google Universal Analytics: @@ -701,7 +708,7 @@ If you need to set a specific domain name keep reading :) ### Multiple Trackers -Although Segment does not support loading multiple trackers through the destinations settings page (you will probably run into Google Universal Analytics's [rate limits](https://developers.google.com/analytics/devguides/collection/ios/v3/limits-quotas?hl=en)), you can load a 2nd tracker on the page manually. +Although Segment does not support loading multiple trackers through the destinations settings page (you will probably run into Google Universal Analytics's [rate limits](https://developers.google.com/analytics/devguides/collection/ios/v3/limits-quotas?hl=en){:target="_blank"}), you can load a 2nd tracker on the page manually. Here's how you'd initialize the second tracker and send a pageview to the second tracker Google Universal Analytics property: @@ -730,7 +737,7 @@ analytics.on('track', function(event, properties, options){ }); ``` -**Important**: Keep in mind you will need to do all the data translation/properties mapping inside this `.on()` function before you send the event to Google Universal Analytics like you see in the [destination code](https://github.com/segment-integrations/analytics.js-integration-google-analytics/blob/master/lib/index.js#L161-L207). +**Important**: Keep in mind you will need to do all the data translation/properties mapping inside this `.on()` function before you send the event to Google Universal Analytics like you see in the [destination code](https://github.com/segment-integrations/analytics.js-integration-google-analytics/blob/master/lib/index.js#L161-L207){:target="_blank"}. To do this server side, you can create a separate [source](/docs/connections/sources/) in Segment, and within this source enter your GA credentials for the second tracker. @@ -750,7 +757,7 @@ If you need to test on `localhost`, but don't need to track between multiple sub If you only want the cookie to persist on a single sub-domain, enter that sub-domain in the **Cookie Domain Name** field, like this: `swingline.example.com`. In this case visitors to `conclusions.example.com` or `example.com` will not be tracked. -For more information on Google Universal Analytics cookies and domains name see [Google's docs on the subject](https://developers.google.com/analytics/devguides/collection/analyticsjs/domains). +For more information on Google Universal Analytics cookies and domains name see [Google's docs on the subject](https://developers.google.com/analytics/devguides/collection/analyticsjs/domains){:target="_blank"}. ### Cross-Domain Tracking @@ -786,7 +793,7 @@ analytics.ready(function () { To make things easy Segment enables `allowLinker` by default so all you need to do is run these two functions with any domains you want to track across to in the second call above. -You'll have to send the `clientId` as described in the [Google Universal Analytics Domain Guide](https://developers.google.com/analytics/devguides/collection/analyticsjs/cross-domain) to get this setup. +You'll have to send the `clientId` as described in the [Google Universal Analytics Domain Guide](https://developers.google.com/analytics/devguides/collection/analyticsjs/cross-domain){:target="_blank"} to get this setup. ### Site Search @@ -804,7 +811,7 @@ In order to populate the Site Search report in Google Universal Analytics there ### Webmaster Tools -When you use Segment to load Google Universal Analytics, the script loads the Google Universal Analytics script. If you use [Google Universal Analytics as the verification option](https://support.google.com/webmasters/answer/1120006?hl=en) in Google Webmaster Tools, you'll need to switch to the [Meta tags verification option](https://support.google.com/webmasters/answer/79812?hl=en) instead. This will require you to find the `` tag in Webmaster Tools and place it in your master HTML template. +When you use Segment to load Google Universal Analytics, the script loads the Google Universal Analytics script. If you use [Google Universal Analytics as the verification option](https://support.google.com/webmasters/answer/1120006?hl=en){:target="_blank"} in Google Webmaster Tools, you'll need to switch to the [Meta tags verification option](https://support.google.com/webmasters/answer/79812?hl=en){:target="_blank"} instead. This will require you to find the `` tag in Webmaster Tools and place it in your master HTML template. ### Cannonical Urls @@ -816,12 +823,12 @@ Segment tracks the canonical URL and automatically sends it to Google Universal > info "" > You can only use this feature in device-mode. -To integrate with the Google Universal Analytics [Optimize plugin](https://support.google.com/360suite/optimize/answer/6262084#optimize-ga-plugin), insert your Optimize **Container ID** in your destination settings. Segment adds the plugin when Analytics.js next initializes the Google Universal Analytics snippet. +To integrate with the Google Universal Analytics [Optimize plugin](https://support.google.com/360suite/optimize/answer/6262084#optimize-ga-plugin){:target="_blank"}, insert your Optimize **Container ID** in your destination settings. Segment adds the plugin when Analytics.js next initializes the Google Universal Analytics snippet. > warning "" > Make sure your Container ID is spelled correctly and that your Optimize container is ENABLED in Google. If you don't enable this, your Google Universal Analytics destination silently errors out every time you make a call. -Google recommends that you deploy [page hiding](https://support.google.com/360suite/optimize/answer/6262084#page-hiding) to prevent the page from flashing or flickering when an A/B test loads. You must add this code manually, since it needs to load synchronously. Note that you must include the Optimize container ID in the page hiding snippet too. +Google recommends that you deploy [page hiding](https://support.google.com/360suite/optimize/answer/6262084#page-hiding){:target="_blank"} to prevent the page from flashing or flickering when an A/B test loads. You must add this code manually, since it needs to load synchronously. Note that you must include the Optimize container ID in the page hiding snippet too. ### User Deletion @@ -832,7 +839,7 @@ To enable user deletion for Google Universal Analytics: 2. Authenticate your Google Universal Analytics account using OAuth. > info "" -> **NOTE:** Segment supports user deletion for Google Universal Analytics in Universal Analytics and not Classic Analytics. You can send user deletion requests using a `userId` through the Privacy Tool. This means you must have the User-Id feature enabled in your Google Universal Analytics Property within the your Google Universal Analytics dashboard and have Segment sending your Property `userIds` by enabling the setting **Send User-ID to GA**. +> **NOTE:** Segment supports user deletion for Google Universal Analytics in Universal Analytics and not Classic Analytics. You can send user deletion requests using a `userId` through the Privacy Tool. This means you must have the User-Id feature enabled in your Google Universal Analytics Property within your Google Universal Analytics dashboard and have Segment sending your Property `userIds` by enabling the setting **Send User-ID to GA**. diff --git a/src/connections/destinations/catalog/google-analytics/migrating.md b/src/connections/destinations/catalog/google-analytics/migrating.md index 5ae6dd869c..c019ab827b 100644 --- a/src/connections/destinations/catalog/google-analytics/migrating.md +++ b/src/connections/destinations/catalog/google-analytics/migrating.md @@ -4,7 +4,7 @@ strat: google hidden: true --- -Previously, you could use Segment's Google Analytics mobile SDKs to measure and optimize user engagement with your mobile-apps. On [October 31st 2019, Google sunset the Google Analytics mobile-apps reporting](https://support.google.com/firebase/answer/9167112?hl=en) using the Google Analytics Services SDKs for both Android and iOS. This means all data collection and processing stopped for properties that received data from the Google Analytics Service SDK for mobile apps. Google deprecated Google Analytics in favor of its new [Firebase SDKs](/docs/connections/destinations/catalog/firebase/). +Previously, you could use Segment's Google Analytics mobile SDKs to measure and optimize user engagement with your mobile-apps. On [October 31st 2019, Google sunset the Google Analytics mobile-apps reporting](https://support.google.com/firebase/answer/9167112?hl=en){:target="_blank"} using the Google Analytics Services SDKs for both Android and iOS. This means all data collection and processing stopped for properties that received data from the Google Analytics Service SDK for mobile apps. Google deprecated Google Analytics in favor of its new [Firebase SDKs](/docs/connections/destinations/catalog/firebase/). The following tutorial explains how to migrate your mobile analytics from Google Analytics to Firebase. @@ -22,7 +22,7 @@ If you received this deprecation notice, your property has already been flagged ## Getting Started with Firebase -For more detailed information for each of the classes and methods in the Firebase SDK by platform visit the [Firebase Analytics SDK documentation](https://firebase.google.com/docs/reference). +For more detailed information for each of the classes and methods in the Firebase SDK by platform visit the [Firebase Analytics SDK documentation](https://firebase.google.com/docs/reference){:target="_blank"}. #### Installing the iOS SDK For information on how to add the Segment-Firebase SDK and register the dependency with the Segment SDK visit [Segment's Firebase for iOS](/docs/connections/destinations/catalog/firebase/#ios) documentation. @@ -33,11 +33,11 @@ For information on how to add the Segment-Firebase SDK and apply the Google Serv ## Comparing Google Analytics and Firebase Functionality -| **Google Analytics Functionality** | **Firebase Functionality** | **Supported?** | -| ----------------------------------------------- | ---------------------------------------------------------------------------- | -------------- | -| Enable/disable anonymize (obfuscate) device IP. | Enforced in Firebase. | ✅ | -| Automatic reporting of uncaught exceptions . | Use [Crashlytics](https://firebase.google.com/docs/crashlytics/get-started). | ✅ | -| Report when Android Activity starts and stops. | On Activity Resumed, we set the current screen. | ✅ | +| **Google Analytics Functionality** | **Firebase Functionality** | **Supported?** | +| ----------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------- | +| Enable/disable anonymize (obfuscate) device IP. | Enforced in Firebase. | ✅ | +| Automatic reporting of uncaught exceptions . | Use [Crashlytics](https://firebase.google.com/docs/crashlytics/get-started){:target="_blank"}. | ✅ | +| Report when Android Activity starts and stops. | On Activity Resumed, we set the current screen. | ✅ | ## Migrating Screen Calls @@ -106,21 +106,21 @@ The following Segment properties are mapped to Firebase Analytics properties: -> **Note**: Firebase Analytics does not support `action` or `label` in their [predefined event parameter names](https://firebase.google.com/docs/reference/cpp/group/parameter-names), and Segment's Firebase SDK does not support mapping those properties. If you want to pass those properties to Firebase send them as a custom property. +> **Note**: Firebase Analytics does not support `action` or `label` in their [predefined event parameter names](https://firebase.google.com/docs/reference/cpp/group/parameter-names){:target="_blank"}, and Segment's Firebase SDK does not support mapping those properties. If you want to pass those properties to Firebase send them as a custom property. ### Custom Events and Properties -Segment's Firebase Analytics SDK allows you to send custom events and properties. If you make a `track()` call but the event name is not one of the above mappings, Segment calls `logEventWithName` (iOS) or `logEvent` (Android). This allows you to pass any custom event name you want. Event names must contain 1 to 40 alphanumeric characters or underscores, per the [Firebase documentation](https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event). The Segment Firebase SDKs format custom event names to remove trailing whitespace and replace all spaces and periods with underscores. +Segment's Firebase Analytics SDK allows you to send custom events and properties. If you make a `track()` call but the event name is not one of the above mappings, Segment calls `logEventWithName` (iOS) or `logEvent` (Android). This allows you to pass any custom event name you want. Event names must contain 1 to 40 alphanumeric characters or underscores, per the [Firebase documentation](https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event){:target="_blank"}. The Segment Firebase SDKs format custom event names to remove trailing whitespace and replace all spaces and periods with underscores. Firebase Analytics supports up to 500 event names, and each event can have up to 25 parameters. > note "" -> **Note**: Firebase has a [list of reserved event names](https://firebase.google.com/docs/reference/ios/firebaseanalytics/api/reference/Classes/FIRAnalytics#/c:objc(cs)FIRAnalytics(cm)logEventWithName:parameters) which cannot be used. +> **Note**: Firebase has a [list of reserved event names](https://firebase.google.com/docs/reference/ios/firebaseanalytics/api/reference/Classes/FIRAnalytics#/c:objc(cs)FIRAnalytics(cm)logEventWithName:parameters){:target="_blank"} which cannot be used. ## Recording Uncaught Exceptions Segment's Google Analytics mobile SDK supports automatic reporting of uncaught exceptions for iOS and Android platforms. -Firebase supports recording of uncaught exceptions through the use of [Firebase Crashlytics](https://firebase.google.com/docs/crashlytics). Firebase Crashlytics is a lightweight, realtime crash reporter that helps you track, prioritize, and fix stability issues that erode your app quality. Crashlytics saves you troubleshooting time by intelligently grouping crashes and highlighting the circumstances that lead up to them. +Firebase supports recording of uncaught exceptions through the use of [Firebase Crashlytics](https://firebase.google.com/docs/crashlytics){:target="_blank"}. Firebase Crashlytics is a lightweight, realtime crash reporter that helps you track, prioritize, and fix stability issues that erode your app quality. Crashlytics saves you troubleshooting time by intelligently grouping crashes and highlighting the circumstances that lead up to them. -To get started with Firebase Crashlytics so you can generate comprehensive crash reports in your Firebase console follow the [set up guide outlined in the Firebase documentation](https://firebase.google.com/docs/crashlytics/get-started) for iOS or Android. +To get started with Firebase Crashlytics so you can generate comprehensive crash reports in your Firebase console follow the [set up guide outlined in the Firebase documentation](https://firebase.google.com/docs/crashlytics/get-started){:target="_blank"} for iOS or Android. diff --git a/src/connections/destinations/catalog/google-cloud-function/index.md b/src/connections/destinations/catalog/google-cloud-function/index.md index 685392e5ac..2e2a84870c 100644 --- a/src/connections/destinations/catalog/google-cloud-function/index.md +++ b/src/connections/destinations/catalog/google-cloud-function/index.md @@ -7,13 +7,13 @@ id: 5cbe24b1d07261000146ab55 --- Segment makes it easy to send your data to Google Cloud Function (and lots of other destinations). Once you collect your data using Segment's [open source libraries](/docs/connections/sources/catalog/), Segment translates and routes your data to Google Cloud Function in a format it can use. -[Google Cloud Function](https://cloud.google.com/functions) is a lightweight compute solution for developers to create single-purpose, stand-alone functions that respond to Cloud events without the need to manage a server or runtime environment. +[Google Cloud Function](https://cloud.google.com/functions){:target="_blank"} is a lightweight compute solution for developers to create single-purpose, stand-alone functions that respond to Cloud events without the need to manage a server or runtime environment. {% include content/beta-note.md %} # Getting Started -{% include content/connection-modes.md %} + ## Build a Google Cloud Function to Process Segment Events @@ -48,4 +48,4 @@ Once you create the Google Cloud Function, you can set up a Segment destination | Setting | Description | | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **HTTP Trigger** | The URL given under the `Trigger` section when you created the Google Cloud Function. | -| **API Key** (optional) | A string to identify that a request is coming from Segment, if required by the function.

    The API key is injected in the `Authorization` header as a [basic authorization header](https://en.wikipedia.org/wiki/Basic_access_authentication) without password. | +| **API Key** (optional) | A string to identify that a request is coming from Segment, if required by the function.

    The API key is injected in the `Authorization` header as a [basic authorization header](https://en.wikipedia.org/wiki/Basic_access_authentication){:target="_blank"} without password. | diff --git a/src/connections/destinations/catalog/google-cloud-pubsub/index.md b/src/connections/destinations/catalog/google-cloud-pubsub/index.md index 15f518c311..269af832f7 100644 --- a/src/connections/destinations/catalog/google-cloud-pubsub/index.md +++ b/src/connections/destinations/catalog/google-cloud-pubsub/index.md @@ -7,9 +7,9 @@ When you enable Google Cloud Pub/Sub in the Segment app, Segment starts sending ## Authentication -In order for Segment to publish events to a Pub/Sub topic on your behalf, you must grant Segment's [Google Cloud Service Account](https://cloud.google.com/iam/docs/understanding-service-accounts) publish access to your chosen topic. Follow these steps to enable this: +In order for Segment to publish events to a Pub/Sub topic on your behalf, you must grant Segment's [Google Cloud Service Account](https://cloud.google.com/iam/docs/understanding-service-accounts) {:target="_blank"} publish access to your chosen topic. Follow these steps to enable this: -1. In your Google Cloud Console, [navigate to your Pub/Sub topic list](https://console.cloud.google.com/cloudpubsub/topicList). +1. In your Google Cloud Console, [navigate to your Pub/Sub topic list](https://console.cloud.google.com/cloudpubsub/topicList){:target="_blank"}. 2. Select one or more topics using the checkboxes to the left of each topic name. **Permissions** options appear at the right of the page once you make a selection. 3. In the **Add Members** input field, copy/paste Segment's Service Account email: `pubsub@segment-integrations.iam.gserviceaccount.com`. 4. Click the **Select a Role** drop-down menu and choose **Pub/Sub Publisher**. @@ -40,8 +40,8 @@ To route _all_ events to a topic, use an `*` as the event name. ## Data Model -The structure of a Pub/Sub message uses [the PubsubMessage structure](https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage). +The structure of a Pub/Sub message uses [the PubsubMessage structure](https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage){:target="_blank"}. The Segment destination publishes the entire Segment event payload as a Base64 encoded string, and sets it as the value of the `data` parameter in the Pub/Sub message payload. Segment sets the `publishTime` to be the `timestamp` of the Segment event. -Segment does not currently use the optional `attributes` parameter. If you use this functionality, [contact us](https://segment.com/help/contact). +Segment does not currently use the optional `attributes` parameter. If you use this functionality, [contact us](https://segment.com/help/contact){:target="_blank"}. diff --git a/src/connections/destinations/catalog/google-cloud-storage/index.md b/src/connections/destinations/catalog/google-cloud-storage/index.md new file mode 100644 index 0000000000..3c3ba68231 --- /dev/null +++ b/src/connections/destinations/catalog/google-cloud-storage/index.md @@ -0,0 +1,7 @@ +--- +title: 'Google Cloud Storage Destination' +hidden: true +id: 5d375a0e6947e700012f1d5b +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/google-tag-manager/index.md b/src/connections/destinations/catalog/google-tag-manager/index.md index d9ad05ad17..743a6b8369 100644 --- a/src/connections/destinations/catalog/google-tag-manager/index.md +++ b/src/connections/destinations/catalog/google-tag-manager/index.md @@ -4,21 +4,23 @@ hide-cmodes: true strat: google id: 54521fd625e721e32a72eeb9 --- -[Google Tag Manager](https://support.google.com/tagmanager) (GTM) is a tag management system that allows you to quickly and easily update tags and code snippets on your website or mobile apps. Once you add the Tag Manager snippet to your website or mobile app, you can configure tags using a web-based user interface without having to alter and deploy additional code. This reduces errors and frees you from having to involve a developer whenever you need to make changes. The Google Tag Manager Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-google-tag-manager). +[Google Tag Manager](https://support.google.com/tagmanager){:target="_blank"} (GTM) is a tag management system that allows you to quickly update tags and code snippets on your website. Once you add the Tag Manager snippet to your website, you can configure tags using a web-based user interface without having to alter and deploy additional code. This reduces errors and frees you from having to involve a developer whenever you need to make changes. The Google Tag Manager Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-google-tag-manager){:target="_blank"}. +> info "" +> The Google Tag Manager destination is web only and is only compatible with Analytics.js sources. This destination is not compatible with iOS or other mobile sources. For mobile tracking, Segment recommends using the [Firebase Destination](/docs/connections/destinations/catalog/firebase/). -## Getting Started +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/google-tag-manager/#consent-mode) and how to set it up. +## Getting Started 1. From the Segment web app, click **Catalog**. 2. Search for "Google Tag Manager" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In your Segment UI's destination settings, enter your Container ID (note: it should start with "GTM-"). You can find this in the Admin section of your [GTM dashboard](https://tagmanager.google.com/#/admin/). +3. In your Segment UI's destination settings, enter your Container ID (note: it should start with "GTM-"). You can find this in the Admin section of your [GTM dashboard](https://tagmanager.google.com/#/admin/){:target="_blank"}. 4. GTM loads on any pages where your Segment snippet is initialized and `analytics.page` is called in client-side JavaScript. Once you've turned on GTM through Segment, you can use Segment `track` events to populate the GTM `dataLayer`, and remove the GTML snippet from your page. -**Notes** -* Segment recommends that you load GTM through Segment rather than loading Segment inside of GTM. -* Be sure to "publish" your GTM container in GTM before trying to load it through Segment, otherwise your container URL will return a 404 error. - +> info "" +> Segment recommends that you load GTM through Segment rather than loading Segment inside of GTM. When you load Segment through GTM, it limits Segment's ability to help troubleshoot. ## Page If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: @@ -30,7 +32,7 @@ analytics.page('Home', { }); ``` -You must call the Page method for Google Tag Manager to load. Segment includes a call to `analytics.page` in your default Segment snippet, so if you haven't removed that, GTM will work the same as if you installed the GTM snippet directly. +You must call the Page method for Google Tag Manager to load. Segment includes a call to `analytics.page` in your default Segment snippet, so if you want GTM to work the same as if you've installed the GTM snippet directly, you will want to keep the Page method in your snippet. ### Tracking All Pages When you turn on the setting to **Track All Pages** in your Optional Settings, Segment tracks events whenever you call the `page` method and sends a "Loaded a Page" event to Google Tag Manager. See the `track` section below for more info on how Segment sends events to GTM. @@ -53,7 +55,7 @@ analytics.track('Article Completed', { }); ``` -When you make a Track call in with GTM enabled through Segment, the event data is pushed to the GTM `dataLayer`. +When you make a `track` call with GTM enabled through Segment, the event data is pushed to the GTM `dataLayer`. For example, if you make this `track` call: @@ -64,7 +66,7 @@ analytics.track('Played Video', { }) ``` -Segment it to the `dataLayer` as an object like this: +Segment sends it to the `dataLayer` as an object like this: ```json { @@ -78,8 +80,13 @@ Segment it to the `dataLayer` as an object like this: ## Troubleshooting ### 404 Error +If you are seeing `404` error on the JavaScript console of your page and it is attributed to Google Tag Manager, it is likely that you have yet to publish your GTM container. If the issue still persists, please ensure that Google's preview mode is disabled and that the [environment variable](/docs/connections/destinations/catalog/google-tag-manager/#environment) is removed from your destination settings. + -If you are seeing `404` error on the JavaScript console of your page and it is attributed to Google Tag Manager, it is likely that you have yet to publish your GTM container. +### Duplicate Events +If you have Google Ads enabled and see duplicate events in GTM, check to see if the event is set as a conversion in Google Ads. Duplicate conversions are common when you use both Google Ads and GTM, since Segment's Adwords destination initializes the gtag script with the dataLayer itself. So, when you fire a mapped event, Segment submits the payload directly to the dataLayer. + +Google recommends using [transactionIds](https://support.google.com/google-ads/answer/6386790){:target="_blank"} to prevent this duplication. ## Appendices @@ -88,4 +95,11 @@ If you are seeing `404` error on the JavaScript console of your page and it is a By default Segment pushes the `anonymousId` and `userId`(if exists) into the `dataLayer` for each `page` or `track` call. Since the `anonymousId` is created by Segment, namespaces that property in the `dataLayer` as `segmentAnonymousId`. ### Environments -If you're using an 'environment' variable for `gtm_preview` in your tag's query string, you can set that string in the **Environment** of your Optional Settings. IMPORTANT: Make sure the string includes the `gtm_auth` variable. For example, your string should look like: `env-xxxxx>m_auth=xxxxx`. +If you're using an 'environment' variable for `gtm_preview` in your tag's query string, you can set that string in the **Environment** of your Optional Settings. IMPORTANT: Make sure the string includes the `gtm_auth` variable. For example, your string should look like: `env-xx>m_auth=xxxxx`. + +### Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +For Google Tag Manager, consent mode settings need to be managed directly [within your GTM account](https://support.google.com/tagmanager/answer/10718549?hl=en#tag-settings){:target="_blank"}. There's no direct update from Segment for the GTM destination regarding consent mode, as it's managed within GTM tags themselves. + +Segment recommends you install a consent management platform that uses the current [consent-tools wrapper](https://github.com/segmentio/analytics-next/tree/master/packages/consent/consent-tools){:target="_blank"} that's outside of Google Tag Manager like [OneTrust](https://tanelytics.com/integrate-onetrust-with-google-tag-manager/){:target="_blank"}. diff --git a/src/connections/destinations/catalog/google/index.md b/src/connections/destinations/catalog/google/index.md index 71dbb278ab..88abb26ef8 100644 --- a/src/connections/destinations/catalog/google/index.md +++ b/src/connections/destinations/catalog/google/index.md @@ -12,7 +12,7 @@ Your Measurement IDs might begin with one of several different prefixes which in #### UA- prefix -Your global site tag is controlled by Google Analytics. The ID is your Google Analytics Measurement ID. To find the property associated with this ID, use the [account search feature](https://support.google.com/analytics/answer/6100731) in Google Analytics. If the property does not appear, you probably do not have access to it. +Your global site tag is controlled by Google Analytics. The ID is your Google Analytics Measurement ID. To find the property associated with this ID, use the [account search feature](https://support.google.com/analytics/answer/6100731){:target="_blank"} in Google Analytics. If the property does not appear, you probably do not have access to it. To add this number in Segment, go to the Google Analytics destination, then to **Settings > Configure ID > Measurement ID**. @@ -37,5 +37,5 @@ To add this number to your Segment destination, go to the Floodlight destination #### Other prefix not listed -Your global site tag is controlled by a different Google product or may be implemented incorrectly. Use the [Tag Assistant extension](https://support.google.com/tagassistant/answer/2947093) for Google Chrome to verify. +Your global site tag is controlled by a different Google product or may be implemented incorrectly. Use the [Tag Assistant extension](https://support.google.com/tagassistant/answer/2947093){:target="_blank"} for Google Chrome to verify. diff --git a/src/connections/destinations/catalog/gosquared/index.md b/src/connections/destinations/catalog/gosquared/index.md index cd19ed5f8a..b099baac37 100644 --- a/src/connections/destinations/catalog/gosquared/index.md +++ b/src/connections/destinations/catalog/gosquared/index.md @@ -20,20 +20,20 @@ When you enter your GoSquared site token into Segment, website tracking will aut ## Mobile and Server-Side Tracking -To track data using Segment's mobile and server-side sources, you will need to enter a GoSquared API Key, which can be created in your [GoSquared account](https://www.gosquared.com/settings/api). The API Key must have "Write Tracking" access. All functionality is supported by mobile and server-side tracking. +To track data using Segment's mobile and server-side sources, you will need to enter a GoSquared API Key, which can be created in your [GoSquared account](https://www.gosquared.com/settings/api){:target="_blank"}. The API Key must have "Write Tracking" access. All functionality is supported by mobile and server-side tracking. - - - ## Page -When you call [`page`](/docs/connections/spec/page/), we call GoSquared's [`track`](https://www.gosquared.com/docs/tracking/api/js#pageviews) to track a pageview. By default the Segment JavaScript snippet includes a call to [`page`](/docs/connections/spec/page/) so you don't need to add it manually. +When you call [`page`](/docs/connections/spec/page/), we call GoSquared's [`track`](https://www.gosquared.com/docs/tracking/api/js#pageviews){:target="_blank"} to track a pageview. By default the Segment JavaScript snippet includes a call to [`page`](/docs/connections/spec/page/) so you don't need to add it manually. Page calls will be tracked from any Segment library, but GoSquared's real-time analytics will be most accurate using front-end website tracking. ## Identify -When you call [`identify`](/docs/connections/spec/identify/), we call GoSquared's [`identify`](https://www.gosquared.com/docs/tracking/api/js#identify). Once identified with a `userId`, that person (along with historical browsing information from before they were identified) will be visible and queryable in [GoSquared People Analytics](https://www.gosquared.com/software/people). +When you call [`identify`](/docs/connections/spec/identify/), we call GoSquared's [`identify`](https://www.gosquared.com/docs/tracking/api/js#identify){:target="_blank"}. Once identified with a `userId`, that person (along with historical browsing information from before they were identified) will be visible and queryable in [GoSquared People Analytics](https://www.gosquared.com/software/people){:target="_blank"}. GoSquared expects a slightly different set of traits from us, so we start by transforming the traits to match their format. @@ -45,11 +45,11 @@ GoSquared expects a slightly different set of traits from us, so we start by tra | `title` | `company_position` | | `industry` | `company_industry` | -GoSquared recognises certain traits as "special" and requires all other traits to be sent under a namespace of `custom`. The Segment code handles all of this, sending recognised [special properties](https://www.gosquared.com/docs/tracking/api/js#properties) and custom properties in the correct places. +GoSquared recognises certain traits as "special" and requires all other traits to be sent under a namespace of `custom`. The Segment code handles all of this, sending recognised [special properties](https://www.gosquared.com/docs/tracking/api/js#properties){:target="_blank"} and custom properties in the correct places. ## Track -When you call [`track`](/docs/connections/spec/track/), we call GoSquared's [`event`](https://www.gosquared.com/docs/tracking/api/js#events) with the same arguments. +When you call [`track`](/docs/connections/spec/track/), we call GoSquared's [`event`](https://www.gosquared.com/docs/tracking/api/js#events){:target="_blank"} with the same arguments. ## Screen @@ -62,4 +62,4 @@ GoSquared converts the [`group`](/docs/connections/spec/group/) method into an i ## Ecommerce -GoSquared supports our [Ecommerce tracking API](/docs/connections/spec/ecommerce/v2/#order-completed), so the `Order Completed` event will be tracked as a [GoSquared Transaction](https://www.gosquared.com/docs/tracking/api/js#transactions). +GoSquared supports our [Ecommerce tracking API](/docs/connections/spec/ecommerce/v2/#order-completed), so the `Order Completed` event will be tracked as a [GoSquared Transaction](https://www.gosquared.com/docs/tracking/api/js#transactions){:target="_blank"}. diff --git a/src/connections/destinations/catalog/graphjson/index.md b/src/connections/destinations/catalog/graphjson/index.md index ad4e79f0a4..4458952c4e 100644 --- a/src/connections/destinations/catalog/graphjson/index.md +++ b/src/connections/destinations/catalog/graphjson/index.md @@ -4,7 +4,7 @@ title: 'GraphJSON Destination' beta: true id: 61e8726c123c1a81273d00e4 --- -[GraphJSON](https://www.graphjson.com/guides/segment){:target="_blank"} provides self-serve analytics to better help you understand your business. +[GraphJSON](https://www.graphjson.com/){:target="_blank"} provides self-serve analytics to better help you understand your business. This destination is maintained by GraphJSON. For any issues with the destination, [contact the GraphJSON Support team](mailto:hi@graphjson.com). diff --git a/src/connections/destinations/catalog/groundswell/index.md b/src/connections/destinations/catalog/groundswell/index.md index 6e47b87c92..55db72aaa4 100644 --- a/src/connections/destinations/catalog/groundswell/index.md +++ b/src/connections/destinations/catalog/groundswell/index.md @@ -4,19 +4,19 @@ rewrite: true id: 60be57310e36edd15805ca36 --- -[Groundswell](https://www.trygroundswell.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) empowers sales teams with just-in-time notifications and account prioritization based on product usage insights. +[Groundswell](https://www.trygroundswell.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} empowers sales teams with just-in-time notifications and account prioritization based on product usage insights. This destination is maintained by Groundswell. For any issues with the destination, [contact the Groundswell Support team](mailto:support@trygroundswell.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Groundswell" in the Destinations Catalog, and select the Groundswell destination. 3. Choose which Source should send data to the Groundswell destination. -4. Connect Segment from the ["Integrations" page](https://app.trygroundswell.com/integrations) of the Groundswell web app, then copy the "API Key". +4. Connect Segment from the ["Integrations" page](https://app.trygroundswell.com/integrations){:target="_blank”} of the Groundswell web app, then copy the "API Key". 5. Enter the "API Key" in the Groundswell destination settings in Segment. 6. When you return to the Groundswell web app, you'll be prompted to select mappings between Segment traits and Groundswell properties. You'll be able to use these later to define workflows and send data to other tools. - Select whether you are identifying Companies with `Group` or `Identify` traits. diff --git a/src/connections/destinations/catalog/gtag/index.md b/src/connections/destinations/catalog/gtag/index.md index bba884279c..200e1e106a 100644 --- a/src/connections/destinations/catalog/gtag/index.md +++ b/src/connections/destinations/catalog/gtag/index.md @@ -6,7 +6,7 @@ strat: google --- > note "" -> The Gtag Destination is in a closed Early Access Preview. To join the preview, contact [Segment Support](https://segment.com/help/contact/) or your CSM. The use is governed by [(1) Segment First Access](https://segment.com/legal/first-access-beta-preview/){:target="_blank"} and Beta Terms and Conditions and [(2) Segment Acceptable Use Policy](https://segment.com/legal/acceptable-use-policy/){:target='_blank'}. +> The Gtag Destination is in a closed Early Access Preview. To join the preview, contact [Segment Support](https://segment.com/help/contact/){:target="_blank"} or your CSM. The use is governed by [(1) Segment First Access](https://segment.com/legal/first-access-beta-preview/){:target="_blank"} and Beta Terms and Conditions and [(2) Segment Acceptable Use Policy](https://segment.com/legal/acceptable-use-policy/){:target='_blank'}. ## Getting started @@ -49,12 +49,12 @@ Pass UTM parameters in the `context` object in `context.campaign`. For Google An ## Identify -Google's terms of service forbid passing Personally Identifiable Information (PII) to your Google Analytics reporting interface. For that reason Segment does not pass data from an [Identify](/docs/connections/spec/identify) call to Google unless you specifically request it. You can read about Google's best practices for avoiding this [here](https://support.google.com/analytics/answer/6366371?hl=en). +Google's terms of service forbid passing Personally Identifiable Information (PII) to your Google Analytics reporting interface. For that reason Segment does not pass data from an [Identify](/docs/connections/spec/identify) call to Google unless you specifically request it. You can read about Google's best practices for avoiding this [here](https://support.google.com/analytics/answer/6366371?hl=en){:target="_blank"}. ### User ID -Google Analytics Universal tracking method allows you to set a user ID for your identified visitors. [Read more here](https://support.google.com/analytics/answer/3123663). +Google Analytics Universal tracking method allows you to set a user ID for your identified visitors. [Read more here](https://support.google.com/analytics/answer/3123663){:target="_blank"}. -To use this feature you must enable User-ID in your Google Analytics property and create a User-ID view, [read more here](https://support.google.com/analytics/answer/3123666). +To use this feature you must enable User-ID in your Google Analytics property and create a User-ID view, [read more here](https://support.google.com/analytics/answer/3123666){:target="_blank"}. To pass the `id` from your [Identify calls](/docs/connections/spec/identify) to the Gtag destination, go to **Other Settings** and set **Send User-ID to GA** to "on" to enable this setting. @@ -87,7 +87,7 @@ Segment's device-mode Analytics.js library supports them all. To configure a custom dimension: -1. Configure the Custom Dimensions in your Google Analytics admin page. For more information about creating custom dimensions in Google Analytics, see the Google support article [here](https://support.google.com/analytics/answer/2709829?hl=en). +1. Configure the Custom Dimensions in your Google Analytics admin page. For more information about creating custom dimensions in Google Analytics, see the Google support article [here](https://support.google.com/analytics/answer/2709829?hl=en){:target="_blank"}. 2. After you've enabled Google Analytics in Segment, you can map traits and properties to your custom dimensions. 3. From your Segment Workspace, open the destinations catalog and select the Gtag destination, then Settings. Locate Custom Dimensions and declare the mapping. @@ -268,8 +268,8 @@ You can have any number of steps in the checkout funnel as you'd like. The 4 ste For client-side integrations, to use the ability to track Checkout Steps and Options, Segment uses Google Analytics' ProductAction class. You can read Google's developer docs for information on specific methods: -- [Analytics.js - Enhanced Ecommerce](https://developers.google.com/analytics/devguides/collection/gtagjs/enhanced-ecommerce) -- [Analytics.js - Ecommerce](https://developers.google.com/analytics/devguides/collection/gtagjs/ecommerce) +- [Analytics.js - Enhanced Ecommerce](https://developers.google.com/analytics/devguides/collection/gtagjs/enhanced-ecommerce){:target="_blank"} +- [Analytics.js - Ecommerce](https://developers.google.com/analytics/devguides/collection/gtagjs/ecommerce){:target="_blank"} ### Measuring promotions @@ -423,7 +423,7 @@ Since remarketing loads through Segment, Google Analytics cannot validate that t ### Multiple trackers -Although Segment does not support loading multiple trackers of the same type (for example, multiple web measurement IDs) through the destinations settings page (you will probably run into Google Analytics's [rate limits](https://developers.google.com/analytics/devguides/collection/ios/v3/limits-quotas?hl=en)), you can load a 2nd tracker on the page manually. +Although Segment does not support loading multiple trackers of the same type (for example, multiple web measurement IDs) through the destinations settings page (you will probably run into Google Analytics's [rate limits](https://developers.google.com/analytics/devguides/collection/ios/v3/limits-quotas?hl=en){:target="_blank"}), you can load a 2nd tracker on the page manually. Here's how you'd initialize configure the second tracker: @@ -434,7 +434,7 @@ analytics.ready(function(){ ``` > note "" -> **Important**: Keep in mind you will need to do the data translation/properties mapping inside this `.on()` function before you send the event to Google Analytics. See the [destination code](https://github.com/segment-integrations/analytics.js-integration-google-analytics/blob/master/lib/index.js#L161-L207) for more information. +> **Important**: Keep in mind you will need to do the data translation/properties mapping inside this `.on()` function before you send the event to Google Analytics. See the [destination code](https://github.com/segment-integrations/analytics.js-integration-google-analytics/blob/master/lib/index.js#L161-L207){:target="_blank"} for more information. To do this server side, you can create a separate [source](/docs/connections/sources/) in Segment, and within this source enter your Google Analytics credentials for the second tracker. @@ -450,7 +450,7 @@ If you need to test on `localhost`, but don't need to track between multiple sub If you want the cookie to persist on a single sub-domain, enter that sub-domain in the **Cookie Domain Name** field, like this: `swingline.initech.com`. In this case visitors to `conclusions.initech.com` or `initech.com` will not be tracked. -For more information see Google's [cookie and user identification](https://developers.google.com/analytics/devguides/collection/gtagjs/cookies-user-id) guide. +For more information see Google's [cookie and user identification](https://developers.google.com/analytics/devguides/collection/gtagjs/cookies-user-id){:target="_blank"} guide. ### Cross-domain tracking @@ -481,7 +481,7 @@ analytics.ready(function () { }); }); ``` -For more advanced cross-domain implementations Segment recommends you follow the Google's guide to [Measure activity across domains](https://developers.google.com/analytics/devguides/collection/gtagjs/cross-domain). +For more advanced cross-domain implementations Segment recommends you follow the Google's guide to [Measure activity across domains](https://developers.google.com/analytics/devguides/collection/gtagjs/cross-domain){:target="_blank"}. ### Site search @@ -495,7 +495,7 @@ To populate the Site Search report in Google Analytics, complete the following s ### Webmaster tools -When you use Segment to load Gtag, the Segment script loads the gtag.js script. If you use [Google Analytics as the verification option](https://support.google.com/webmasters/answer/9008080?hl=en) in Google Webmaster Tools, you'll need to switch to the [Meta tags verification option](https://support.google.com/webmasters/answer/79812?hl=en) instead. This will require you to find the `` tag in Webmaster Tools and place it in your master HTML template. +When you use Segment to load Gtag, the Segment script loads the gtag.js script. If you use [Google Analytics as the verification option](https://support.google.com/webmasters/answer/9008080?hl=en){:target="_blank"} in Google Webmaster Tools, you'll need to switch to the [Meta tags verification option](https://support.google.com/webmasters/answer/79812?hl=en){:target="_blank"} instead. This will require you to find the `` tag in Webmaster Tools and place it in your master HTML template. ### Cannonical urls @@ -503,9 +503,9 @@ Segment handles tracking the canonical URL to Google Analytics for you automatic ### Optimize -If you'd like to integrate with Google Analytics' [Optimize plugin](https://support.google.com/360suite/optimize/answer/6262084#optimize-ga-plugin), insert your **Optimize Container ID** in the destination settings and Segment will require the plugin when Google Analytics initializes. +If you'd like to integrate with Google Analytics' [Optimize plugin](https://support.google.com/360suite/optimize/answer/6262084#optimize-ga-plugin){:target="_blank"}, insert your **Optimize Container ID** in the destination settings and Segment will require the plugin when Google Analytics initializes. -You may want to deploy Google's [anti-flickering snippet](https://support.google.com/optimize/answer/7100284) to prevent the page from flashing / flickering when the A/B test loads, as recommended by Google. You must add this code manually, since it needs to load synchronously. +You may want to deploy Google's [anti-flickering snippet](https://support.google.com/optimize/answer/7100284){:target="_blank"} to prevent the page from flashing / flickering when the A/B test loads, as recommended by Google. You must add this code manually, since it needs to load synchronously. > note "" > Include the Optimize container ID in this snippet. diff --git a/src/connections/destinations/catalog/hawkei/index.md b/src/connections/destinations/catalog/hawkei/index.md index 5edb286bac..246e1bbe1c 100644 --- a/src/connections/destinations/catalog/hawkei/index.md +++ b/src/connections/destinations/catalog/hawkei/index.md @@ -4,22 +4,19 @@ title: Hawkei Destination hide-personas-partial: true id: 5d73347d0bbdf3a5abebca15 --- -[Hawkei](https://hawkei.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides real-time accurate error detection for your key user paths and product features. Pinpoint the root cause of an issue easily with all the meta data delivered straight to your inbox or slack channel. +[Hawkei](https://hawkei.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides real-time accurate error detection for your key user paths and product features. Pinpoint the root cause of an issue easily with all the meta data delivered straight to your inbox or slack channel. This destination is maintained by Hawkei. For any issues with the destination, [contact the Hawkei Support team](mailto:support@hawkei.io). -{% include content/beta-note.md %} - - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Hawkei" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. In the settings, enter the following fields: - * **API Key:** You can find your Api key inside the [Api Keys settings](https://app.hawkei.io/settings/api_keys). - * **Workspace:** Enter the Hawkei workspace where you want your Segment events to be sent. You can see a list of all your Hawkei workspaces in your [Workspace settings](https://app.hawkei.io/settings/spaces). + * **API Key:** You can find your Api key inside the [Api Keys settings](https://app.hawkei.io/settings/api_keys){:target="_blank”}. + * **Workspace:** Enter the Hawkei workspace where you want your Segment events to be sent. You can see a list of all your Hawkei workspaces in your [Workspace settings](https://app.hawkei.io/settings/spaces){:target="_blank”}. * **Environment:** Enter the environment you are sending events from. If you don't know what to set you should set this field to `production`. diff --git a/src/connections/destinations/catalog/headsup-ai/index.md b/src/connections/destinations/catalog/headsup-ai/index.md index 19a9340e80..3372461433 100644 --- a/src/connections/destinations/catalog/headsup-ai/index.md +++ b/src/connections/destinations/catalog/headsup-ai/index.md @@ -2,19 +2,21 @@ title: HeadsUp AI Destination rewrite: true id: 60900f0a60033befef038889 +hidden: true +private: true --- -[HeadsUp AI](https://headsup.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) allows customers to build metrics on top of their existing Segment analytics to better understand customer behavior and gauge health scores. +[HeadsUp AI](https://headsup.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} allows customers to build metrics on top of their existing Segment analytics to better understand customer behavior and gauge health scores. This destination is maintained by HeadsUp. For any issues with the destination, [contact the HeadsUp AI Support team](mailto:administration@headsup.ai). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "HeadsUp AI" in the Destinations Catalog, and select the HeadsUp AI Destination. 3. Choose which Source should send data to the HeadsUp AI destination. -4. Go to the [HeadsUp Onboarding](https://app.headsup.ai/welcome) page, find and copy the "Segment API key". +4. Go to the [HeadsUp Onboarding](https://app.headsup.ai/welcome){:target="_blank”} page, find and copy the "Segment API key". 5. Back in the Segment App, go back to the the HeadsUp AI Destination settings, and enter the "API Key". ## Identify diff --git a/src/connections/destinations/catalog/heap/index.md b/src/connections/destinations/catalog/heap/index.md index 72a988dfd1..3ddfc36a34 100644 --- a/src/connections/destinations/catalog/heap/index.md +++ b/src/connections/destinations/catalog/heap/index.md @@ -3,16 +3,16 @@ title: Heap Destination rewrite: true id: 54521fd725e721e32a72eebd --- -[Heap](https://heapanalytics.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) automatically captures every user interaction with no extra code. This includes clicks, taps, gestures, form submissions, page views, and more. The Heap Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-heap). +[Heap](https://heapanalytics.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} automatically captures every user interaction with no extra code. This includes clicks, taps, gestures, form submissions, page views, and more. The Heap Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-heap){:target="_blank”}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Heap" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. In the destination settings, enter your Heap "App ID" into the connection settings. -4. Remove Heap's snippet from your page if you're using Segment's client-side Analytics.js library to load Heap. With the Analytics.js library, Segment asynchronously loads Heap's JavaScript library onto your page. All native functionality of Heap, including auto-capturing of all events are available to you. +4. Remove Heap's snippet from your page if you're using Segment's client-side Analytics.js library to load Heap. With the Analytics.js library, Segment asynchronously loads Heap's JavaScript library onto your page. All native functionality of Heap, including auto-capturing of all events, is available to you. ## Identify diff --git a/src/connections/destinations/catalog/help-scout/index.md b/src/connections/destinations/catalog/help-scout/index.md index 0af139a685..0ea73e7071 100644 --- a/src/connections/destinations/catalog/help-scout/index.md +++ b/src/connections/destinations/catalog/help-scout/index.md @@ -4,29 +4,31 @@ rewrite: true hide-boilerplate: true id: 54521fd725e721e32a72eebf --- -[Help Scout](https://www.helpscout.com/?utm_source=partner&utm_campaign=partner-integration-marketplace-listing&utm_content=segment) is a help desk software company which provides an email-based customer support platform, knowledge base tool, and an embeddable search/contact widget for customer service professionals. +[Help Scout](https://www.helpscout.com/?utm_source=partner&utm_campaign=partner-integration-marketplace-listing&utm_content=segment){:target="_blank"} is a help desk software company which provides an email-based customer support platform, knowledge base tool, and an embeddable search/contact widget for customer service professionals. ## Getting Started -{% include content/connection-modes.md %} - 1. From the Segment web app, click **Catalog**. 2. Search for Help Scout in the Catalog, select it, and choose which of your sources to connect the destination to. 3. Click "Connect to Help Scout" to start the Help Scout authentication process. Help Scout provides a secure token that Segment uses to send data to Help Scout. If you need to change accounts, click **Disconnect**, then connect to a new Help Scout account. 4. Enable the Destination. -5. Start sending events! + +> warning "Help Scout OAuth supports one destination per user" +> Help Scout's OAuth connection to Segment supports one destination per user. If you try to create two destinations with the same user, you'll receive invalid token errors when you use the destination. ## Identify If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like this: - analytics.identify({ - userId: '019mr8mf4r', - traits: { - name: 'Kamala Khan', - email: 'kkhan@colesacademic.edu', - } - }); +```js + analytics.identify({ + userId: '019mr8mf4r', + traits: { + name: 'Kamala Khan', + email: 'kkhan@colesacademic.edu', + } + }); +``` You can use the Identify call to create or update customers in your Help Scout account. diff --git a/src/connections/destinations/catalog/hotjar/index.md b/src/connections/destinations/catalog/hotjar/index.md index 60cdb40c5c..a2698cbc26 100644 --- a/src/connections/destinations/catalog/hotjar/index.md +++ b/src/connections/destinations/catalog/hotjar/index.md @@ -14,7 +14,7 @@ Knowing who your users are and what they're doing unlocks more advanced filterin ## Getting Started -{% include content/connection-modes.md %} + 1. Navigate to **Connections** and click **Add Destination** From the Segment web app. diff --git a/src/connections/destinations/catalog/houseware/index.md b/src/connections/destinations/catalog/houseware/index.md index 05b2f569dd..d3cd009340 100644 --- a/src/connections/destinations/catalog/houseware/index.md +++ b/src/connections/destinations/catalog/houseware/index.md @@ -10,7 +10,7 @@ This destination is maintained by Houseware. For any issues with the destination ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Houseware" in the Destinations Catalog, and select the **Houseware** destination. diff --git a/src/connections/destinations/catalog/hubble-actions/index.md b/src/connections/destinations/catalog/hubble-actions/index.md new file mode 100644 index 0000000000..8fed5c1b80 --- /dev/null +++ b/src/connections/destinations/catalog/hubble-actions/index.md @@ -0,0 +1,7 @@ +--- +title: 'Hubble (Actions) Destination' +hidden: true +id: 651aac880f2c3b5a8736e0cc +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/hubble-web/index.md b/src/connections/destinations/catalog/hubble-web/index.md new file mode 100644 index 0000000000..b6da43766c --- /dev/null +++ b/src/connections/destinations/catalog/hubble-web/index.md @@ -0,0 +1,23 @@ +--- +title: Hubble (Actions) Destination +id: 651aac880f2c3b5a8736e0cc +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +[Hubble](https://hubble.team/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a unified user research tool that allows product and UX teams to collect continuous user feedback across all stages of product development through unmoderated tests, participant recruiting, and powerful in-product surveys. + +Hubble maintains this destination. For any issues with the destination, view [Hubble's documentation](https://hubble.team/documentation){:target="_blank"} or contact [Hubble Support](mailto:dev@hubble.team){:target="_blank"}. + +{% include content/ajs-upgrade.md %} + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for “Hubble (Actions)” in the catalog. +3. Choose a source you would like to connect this destination to. +4. Find your Hubble ID in [Hubble App](https://app.hubble.team/home){:target="_blank"} by navigating to **Account Settings > Integrations > Segment**. +5. Enter your Hubble ID into the **id** field in the Segment web app. + +{% include components/actions-fields.html %} \ No newline at end of file diff --git a/src/connections/destinations/catalog/hubspot/index.md b/src/connections/destinations/catalog/hubspot/index.md index 78fe377950..58d4a9f434 100644 --- a/src/connections/destinations/catalog/hubspot/index.md +++ b/src/connections/destinations/catalog/hubspot/index.md @@ -1,12 +1,14 @@ --- rewrite: true -title: HubSpot Destination +title: HubSpot (Classic) Destination hide-personas-partial: true cmode-override: true id: 54521fd725e721e32a72eec1 maintenance: true -private: true +private: false maintenance-content: New versions of the destination are available. See [HubSpot Cloud Mode (Actions)](/docs/connections/destinations/catalog/actions-hubspot-cloud/) and [HubSpot Web (Actions)](/docs/connections/destinations/catalog/actions-hubspot-web/) for more information. +hidden: false + --- [HubSpot](https://www.hubspot.com/){:target="_blank"} is an inbound marketing and sales platform that helps companies attract visitors, convert leads, and close customers. The `analytics.js` HubSpot Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/hubspot){:target="_blank"}. @@ -18,7 +20,7 @@ maintenance-content: New versions of the destination are available. See [HubSpot ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "HubSpot" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -59,7 +61,7 @@ analytics.identify('user1234', { HubSpot does not accept any trait keys that contain upper case letters or spaces. Segment converts any custom traits you send to lower case, and replaces spaces with an underscore. -HubSpot removes from the request any traits that aren't contact fields in HubSpot. To find out which fields you can set, navigate to **Settings > Data Management > Objects > Contacts** and select **Manage contact properties** under the **Setup** tab. Example field names are `firstname`, `lastname`, `company`, and `phone`. +HubSpot removes any traits from the request that aren't contact fields in HubSpot. To find out which fields you can set, navigate to **Settings > Data Management > Objects > Contacts** and select **Manage contact properties** under the **Setup** tab. Example field names are `firstname`, `lastname`, `company`, and `phone`. If you specify a company name (using `traits.company.name`), it appears as a *property* of the contact (you can find it in HubSpot's UI using **About [contact] > View > View All Properties**), but it does not appear as the user's company under **[contact]'s Company**. @@ -197,9 +199,9 @@ HubSpot Plan: API Add-On (Any Tier) ### Sending Dates as Property Values -HubSpot's API has [specific requirements](http://developers.hubspot.com/docs/faq/how-should-timestamps-be-formatted-for-hubspots-apis) regarding you to format dates before they deliver as contact properties with date types. +HubSpot's API has [specific requirements](http://developers.hubspot.com/docs/faq/how-should-timestamps-be-formatted-for-hubspots-apis){:target="_blank"} regarding you to format dates before they deliver as contact properties with date types. -To ensure proper transformation of these properties, pass them to Segment as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) formatted strings and **not** as UNIX timestamps. Here's a JavaScript example: +To ensure proper transformation of these properties, pass them to Segment as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601){:target="_blank"} formatted strings and **not** as UNIX timestamps. Here's a JavaScript example: ```js analytics.identify('userid', { @@ -213,7 +215,7 @@ When using any of Segment's server-side sources, a connector infers `traits.life ### Loading Forms SDK -Segment gives you the option to load the [HubSpot Forms SDK](https://developers.hubspot.com/docs/methods/forms/advanced_form_options) alongside their tracking library. Enable the **Load Forms SDK** setting when you your HubSpot integration. +Segment gives you the option to load the [HubSpot Forms SDK](https://developers.hubspot.com/docs/methods/forms/advanced_form_options){:target="_blank"} alongside their tracking library. Enable the **Load Forms SDK** setting when you your HubSpot integration. > info "" > The Forms SDK expects to load synchronously but analytics.js loads asynchronously. To interact with the API, run code inside an [analytics.ready](/docs/connections/sources/catalog/libraries/website/javascript/#ready) callback. For example: diff --git a/src/connections/destinations/catalog/hull/index.md b/src/connections/destinations/catalog/hull/index.md index b489a78c8e..a274c20c67 100644 --- a/src/connections/destinations/catalog/hull/index.md +++ b/src/connections/destinations/catalog/hull/index.md @@ -79,7 +79,7 @@ The following traits will be stored as first level fields on the User object - picture - username -All other attributes from the `identify` call will be stored as [custom traits](http://www.hull.io/docs/references/hull_js/#traits) on Hull. +All other attributes from the `identify` call will be stored as [custom traits](http://www.hull.io/docs/references/hull_js/#traits){:target="_blank"} on Hull. ## Track diff --git a/src/connections/destinations/catalog/humanic-ai/index.md b/src/connections/destinations/catalog/humanic-ai/index.md new file mode 100644 index 0000000000..4dc9274762 --- /dev/null +++ b/src/connections/destinations/catalog/humanic-ai/index.md @@ -0,0 +1,72 @@ +--- +title: Humanic AI Destination +id: 64b0e177091331e4a2a00c83 +--- + +[Humanic AI](https://humanic.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is revolutionizing the CRM space to make it easier than ever for growing companies to maximize revenue from their existing users. Humanic is the industry's first PLG CRM for today’s modern revenue teams. With support from top industry veterans at DoorDash, Notion, Miro, Canvas, MailChimp and more - there's no better time explore what Humanic can offer your business. + +Managing upwards of 1000+ active users can be an overwhelming task, and many CRMs struggle to keep up with the influx. If you need a reliable system that allows for user sorting based on payment or user activity, it's time to consider more robust solutions than traditional customer relationship management software. Read on for details on how the Humanic PLG CRM can help unlock revenue from your existing user base. To Sign up and explore right away [click here](https://humanic.ai/signup?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. + +This destination is maintained by Humanic. For any issues with the destination, [contact the Humanic Support team](mailto:support@humanic.ai). + +## Getting Started + +1. Navigate to **Connections > Catalog** and select the **Destinations** tab in the catalog. +2. Search for *Humanic AI* in the catalog and select the destination. +3. Choose which source should send data to the *Humanic AI* destination. +4. Go to the [Humanic dashboard](https://dashboard.humanic.ai/dashboard/profile/){:target="_blank"} and select the **API Keys** tab. Generate an API key and copy it. +5. Enter the API Key in the Humanic AI destination settings in Segment. + + +## Supported methods + +Humanic AI supports the following methods as specified in the [Segment Spec](/docs/connections/spec). + +### Page + +Send [Page](/docs/connections/spec/page) calls to record which web pages users visited. For example: + +```js +analytics.page("Pricing", { + title: "Segment Pricing", + url: "https://segment.com/pricing", + path: "/pricing", + referrer: "https://segment.com/warehouses", +}); +``` + +Segment sends Page calls to Humanic AI as a `pageview`. + +### Screen + +Send [Screen](/docs/connections/spec/screen) calls to record which mobile app screens users viewed. For example: + +```obj-c +[[SEGAnalytics sharedAnalytics] screen:@"Home" + properties:@{ @"Feed Type": @"private" }]; +``` + +Segment sends Screen calls to Humanic AI as a `screenview`. + +### Identify + +Send [Identify](/docs/connections/spec/identify) calls to create new users or update existing users with new values. For example: + +```js +analytics.identify('userId123', { + email: 'john.doe@example.com', +}); +``` + +Segment sends Identify calls to Humanic AI as an `identify` event. + +### Track + +Send [Track](/docs/connections/spec/track) calls to record user behavior in your app. For example: + +```js +analytics.track('Login Button Clicked'); +``` + +Segment sends Track calls to Humanic AI as a `track` event. + diff --git a/src/connections/destinations/catalog/hydra/index.md b/src/connections/destinations/catalog/hydra/index.md index dbad5a096c..655adfdf82 100644 --- a/src/connections/destinations/catalog/hydra/index.md +++ b/src/connections/destinations/catalog/hydra/index.md @@ -3,22 +3,20 @@ title: Hydra Destination rewrite: true id: 5cd30f824e267500018a1063 --- -[Hydra](https://hydra.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps marketing, sales operations and customer success teams implement holistic predictive analytics tailored to their own business without writing a single line of code. Hydra is capable of scanning a wide range of sources such as product usage, user demographic data, firmographic data, chat conversations, help desk tickets, emails and marketing engagement to discover signals and make predictions. +[Hydra](https://hydra.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps marketing, sales operations and customer success teams implement holistic predictive analytics tailored to their own business without writing a single line of code. Hydra is capable of scanning a wide range of sources such as product usage, user demographic data, firmographic data, chat conversations, help desk tickets, emails and marketing engagement to discover signals and make predictions. This destination is maintained by Hydra. For any issues with the destination, [contact the Hydra Support team](mailto:hello@hydra.ai). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for Hydra in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "Hydra API Key" into your Segment Settings UI which you can find from Hydra's [Settings screen, under the integrations tab](https://app.hydra.ai/settings#api_info). +3. Enter the "Hydra API Key" into your Segment Settings UI which you can find from Hydra's [Settings screen, under the integrations tab](https://app.hydra.ai/settings#api_info){:target="_blank”}. -If you would like to use `track` event data, create a `Segment Product Usage Scanner` by visiting the [Scanners screen](https://app.hydra.ai/scanners) in Hydra app. See `track` event details below for more information. +If you would like to use `track` event data, create a `Segment Product Usage Scanner` by visiting the [Scanners screen](https://app.hydra.ai/scanners){:target="_blank”} in Hydra app. See `track` event details below for more information. ## Identify @@ -55,7 +53,7 @@ analytics.track('Device deploy started', }) ``` -Track calls will be sent to Hydra as a `track` event. If you haven't already, make sure to create a `Segment Product Usage Scanner` by visiting the [Scanners screen](https://app.hydra.ai/scanners) in Hydra app. +Track calls will be sent to Hydra as a `track` event. If you haven't already, make sure to create a `Segment Product Usage Scanner` by visiting the [Scanners screen](https://app.hydra.ai/scanners){:target="_blank”} in Hydra app. Hydra uses the `feature` property to group events and the `eventFlag` property to weigh event importance. You can send any of the following as the value for the `eventFlag`: negative, neutral, positive. If you send anything other than these values, Hydra will consider the `eventFlag` to be neutral. Within Hydra, you will see this information populate in the following areas: diff --git a/src/connections/destinations/catalog/ibm-ubx/index.md b/src/connections/destinations/catalog/ibm-ubx/index.md index c01069e575..04bb2ec923 100644 --- a/src/connections/destinations/catalog/ibm-ubx/index.md +++ b/src/connections/destinations/catalog/ibm-ubx/index.md @@ -5,7 +5,7 @@ beta: true hidden: true id: 5a3ab305a1e66e00017185f9 --- -[IBM's Universal Behavior Exchange (UBX)](https://www.ibm.com/support/knowledgecenter/en/SS9JVY/UBX/kc_welcome_UBX.html) +[IBM's Universal Behavior Exchange (UBX)](https://www.ibm.com/support/knowledgecenter/en/SS9JVY/UBX/kc_welcome_UBX.html){:target="_blank"} is an API that allows users to share customer interactions, behaviors, and target audiences among IBM solutions and applications - including the *Watson Marketing Portfolio* - without the need for custom software integration. In @@ -15,20 +15,19 @@ can send it to any destination in UBX's portfolio. _**NOTE:** IBM UBX is currently in beta and this doc was last updated on May 7, 2018. This means that there may still be some bugs for us to iron out and we're excited to hear your thoughts. If you are interested in -joining or have any feedback to help us improve the IBM UBX Destination and its documentation, [let us know](https://segment.com/help/contact)!_ +joining or have any feedback to help us improve the IBM UBX Destination and its documentation, [let us know](https://segment.com/help/contact){:target="_blank"}!_ ## Getting Started _**NOTE:** To enable Segment in UBX, navigate to "Endpoints" in the UBX dashboard, select "Register new endpoint", then select "Segment". Once you've added the -Segment endpoint, contact [Segment -support](https://segment.com/help/contact) with your new endpoint's "endpoint +Segment endpoint, contact [Segment support](https://segment.com/help/contact){:target="_blank"} with your new endpoint's "endpoint authentication key" for help activating your new endpoint. Note that the endpoint in UBX will not be able to receive Segment data until you have enabled both the destination in the Segment UI *and* requested activation of the endpoint from Segment's support team._ -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "IBM UBX" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -36,8 +35,7 @@ endpoint from Segment's support team._ the Segment Settings UI. You should have received an email with this URL shortly after setting up your UBX account. If you can't locate your URL, contact UBX support (the URL is also referred to as a "base URL" in - the [IBM UBX - documentation](https://developer.ibm.com/customer-engagement/docs/watson-marketing/ibm-universal-behavior-exchange-ubx/ubxapireference/)). + the [IBM UBX documentation](https://developer.ibm.com/customer-engagement/docs/watson-marketing/ibm-universal-behavior-exchange-ubx/ubxapireference/){:target="_blank"}). To locate your endpoint authentication key, navigate to the "Endpoints" tab in UBX, then look to the far right where you'll find three vertical dots. Click on them and select "Endpoint details". @@ -51,7 +49,7 @@ endpoint from Segment's support team._ 5. Once registered, the new endpoint's status will remain "Pending" in the "Endpoints" tab until it has been activated. To activate an endpoint, include your UBX account's API URL and your endpoint authentication key in an - email to Segment using our [tech support form](https://segment.com/help/contact/). + email to Segment using our [tech support form](https://segment.com/help/contact/){:target="_blank"}. ![A screenshot of the UBX Endpoints tab showing a Segment endpoint with a status of Active.](images/endpoint-details.png) diff --git a/src/connections/destinations/catalog/impact-partnership-cloud/index.md b/src/connections/destinations/catalog/impact-partnership-cloud/index.md index f7b70f5a00..c1fdfa31a2 100644 --- a/src/connections/destinations/catalog/impact-partnership-cloud/index.md +++ b/src/connections/destinations/catalog/impact-partnership-cloud/index.md @@ -3,18 +3,18 @@ title: Impact Partnership Cloud Destination rewrite: true id: 5ed96e0b97e7ba0c0346cc04 --- -[Impact Partnership Cloud](https://impact.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) lets you expand your program and scale every type of partnership by managing the partnership lifecycle - from discovery, contracting and payments through tracking and optimization. +[Impact Partnership Cloud](https://impact.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} lets you expand your program and scale every type of partnership by managing the partnership lifecycle - from discovery, contracting and payments through tracking and optimization. -This destination is maintained by Impact. For any issues with the destination, contact the [Impact Partnership Cloud team](https://impact.com/contact/) or check out [Impact Partnership Cloud's documentation](https://app.impact.com/secure/agency/support/customer-support-portal-flow.ihtml?execution=e3s1). +This destination is maintained by Impact. For any issues with the destination, contact the [Impact Partnership Cloud team](https://impact.com/contact/){:target="_blank”} or check out [Impact Partnership Cloud's documentation](https://integrations.impact.com/impact-brand/docs/integrate-with-segment){:target="_blank”}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Impact Partnership Cloud" in the Destinations Catalog, and select the Impact Partnership Cloud destination. 3. Choose which Source should send data to the Impact Partnership Cloud destination. -4. Go to the [Impact Partnership Cloud Settings](https://app.impact.com), find and copy the "Account SID", "Auth Token", and "Campaign ID". +4. Go to the [Impact Partnership Cloud Settings](https://app.impact.com){:target="_blank"}, find and copy the "Account SID", "Auth Token", and "Campaign ID". 5. Back in the Impact Partnership Cloud destination settings in Segment, enter the "Account SID", "Auth Token", and "Campaign ID". ## Page @@ -30,7 +30,7 @@ Segment sends Page calls to Impact Partnership Cloud as a `Clicks` event, if the > success "" > **Tip!** To accurately track and attribute actions, send a Page call with every page load. -Read [Impact Partnership Cloud's documentation](https://impact-helpdesk.freshdesk.com/en/support/solutions/articles/48001173251) to learn more about how Page properties are mapped. +Read [Impact Partnership Cloud's documentation](https://integrations.impact.com/impact-brand/docs/integrate-with-segment#segment-spec-page-calls){:target="_blank"} to learn more about how Page properties are mapped. ## Screen @@ -99,4 +99,4 @@ Segment sends Track calls to Impact Partnership Cloud as a `Conversion` or `Page `Page Load` events appear as `Clicks` on Impact Partnership Cloud's Dashboard if they fit the definition of a unique click. -Read [Impact Partnership Cloud's documentation](https://impact-helpdesk.freshdesk.com/en/support/solutions/articles/48001173251) to learn more about how Track properties are mapped. +Read [Impact Partnership Cloud's documentation](https://integrations.impact.com/impact-brand/docs/integrate-with-segment#track-events-parameter-mapping-reference){:target="_blank"} to learn more about how Track properties are mapped. diff --git a/src/connections/destinations/catalog/impact/index.md b/src/connections/destinations/catalog/impact/index.md index 0a13b449ec..a02613f7e0 100644 --- a/src/connections/destinations/catalog/impact/index.md +++ b/src/connections/destinations/catalog/impact/index.md @@ -6,7 +6,7 @@ redirect_from: /connections/destinations/catalog/impact-radius/ ## Getting Started -{% include content/connection-modes.md %} + To get started, you will need to ensure your account has access to the Impact API and obtain the following keys/tokens from your Impact account: diff --git a/src/connections/destinations/catalog/index.md b/src/connections/destinations/catalog/index.md index dae02f8956..39aee1acca 100644 --- a/src/connections/destinations/catalog/index.md +++ b/src/connections/destinations/catalog/index.md @@ -50,4 +50,4 @@ redirect_from: {% endfor %} - + \ No newline at end of file diff --git a/src/connections/destinations/catalog/indicative/index.md b/src/connections/destinations/catalog/indicative/index.md index 3edd937202..37a31a7fb7 100644 --- a/src/connections/destinations/catalog/indicative/index.md +++ b/src/connections/destinations/catalog/indicative/index.md @@ -3,15 +3,15 @@ title: Indicative Destination rewrite: true id: 54521fd725e721e32a72eec4 --- -[Indicative](https://app.indicative.com/?utm_source=segment&utm_medium=partners&utm_campaign=setupguide#/login/register) is a behavioral analytics platform designed to help Marketing and Product teams optimize user engagement, conversion, and retention. +[Indicative](https://app.indicative.com/?utm_source=segment&utm_medium=partners&utm_campaign=setupguide#/login/register){:target="_blank"} is a behavioral analytics platform designed to help Marketing and Product teams optimize user engagement, conversion, and retention. ## Getting Started -{% include content/connection-modes.md %} -1. [Create an Indicative account](https://app.indicative.com/?utm_source=segment&utm_medium=partners&utm_campaign=setupguide#/login/register). -2. To integrate Segment as a data source go to **Settings > Integrations > [Segment](https://app.indicative.com/?utm_source=segment&utm_medium=partners&utm_campaign=setupguide#/onboarding/segment)** +1. [Create an Indicative account](https://app.indicative.com/?utm_source=segment&utm_medium=partners&utm_campaign=setupguide#/login/register){:target="_blank"}. + +2. To integrate Segment as a data source go to **Settings > Integrations > [Segment](https://app.indicative.com/?utm_source=segment&utm_medium=partners&utm_campaign=setupguide#/onboarding/segment){:target="_blank"}** 3. Click **Enable with Segment** under One-click Setup. @@ -19,7 +19,7 @@ id: 54521fd725e721e32a72eec4 5. To connect multiple sources to this project, simply repeat steps 2 - 4. -You're all set! Walkthrough the [Interactive Demo](https://app.indicative.com/?utm_source=segment&utm_medium=partners&utm_campaign=setupguide#/onboard/dashboard) to get ramped up quickly and easily! +You're all set! Walkthrough the [Interactive Demo](https://app.indicative.com/?utm_source=segment&utm_medium=partners&utm_campaign=setupguide#/onboard/dashboard){:target="_blank"} to get ramped up quickly and easily! For additional information, contact `support@indicative.com`. @@ -87,4 +87,4 @@ analytics.screen({ ### Property values have maximum length of 255 characters -Indicative's [documentation](https://support.indicative.com/hc/en-us/articles/360004147512-REST-API-Guide) states that the values in the properties must not exceed 255 characters. Segment will still accept the call, but any values that exceed 255 characters will be trimmed (meaning only the first 255 characters will be sent to Indicative). +Indicative's [documentation](https://support.indicative.com/hc/en-us/articles/360004147512-REST-API-Guide){:target="_blank"} states that the values in the properties must not exceed 255 characters. Segment will still accept the call, but any values that exceed 255 characters will be trimmed (meaning only the first 255 characters will be sent to Indicative). diff --git a/src/connections/destinations/catalog/infinario/index.md b/src/connections/destinations/catalog/infinario/index.md index c50e12ba05..8a0fbbed55 100644 --- a/src/connections/destinations/catalog/infinario/index.md +++ b/src/connections/destinations/catalog/infinario/index.md @@ -17,13 +17,13 @@ Aside from these restrictions, Infinario supports any JSON-serializable data as ## Identify -This call ensures the existence and updates the properties of a user (player/customer) in Infinario. The `userId` is mapped to Infinario `registered` ID, whereas the `anonymousId` is mapped to Infinario `cookie` ID. Properties of a user with special usage in Infinario can be found in [the Players guide](http://guides.infinario.com/user-guide/players/#section-player). +This call ensures the existence and updates the properties of a user (player/customer) in Infinario. The `userId` is mapped to Infinario `registered` ID, whereas the `anonymousId` is mapped to Infinario `cookie` ID. Properties of a user with special usage in Infinario can be found in [the Players guide](http://guides.infinario.com/user-guide/players/#section-player){:target="_blank"}. ## Track Tracks an event of any type, including any desired properties of that event. Most of the Segment call's context will be added as extra properties. -It is advised to reserve the `campaign` event type for events generated automatically by the Infinario campaign module. If you track your mobile app payments as the event type `hard_purchase`, you will be able to use the [automated payment validation](http://guides.infinario.com/technical-documentation/payment-validation/). +It is advised to reserve the `campaign` event type for events generated automatically by the Infinario campaign module. If you track your mobile app payments as the event type `hard_purchase`, you will be able to use the [automated payment validation](http://guides.infinario.com/technical-documentation/payment-validation/){:target="_blank"}. ## Page @@ -43,4 +43,4 @@ This call is currently only supported partially. Whenever a user is assigned to - - - -Read the [Infinario guides](http://guides.infinario.com/) to see what can you do with the data you tracked. +Read the [Infinario guides](http://guides.infinario.com/){:target="_blank"} to see what can you do with the data you tracked. diff --git a/src/connections/destinations/catalog/inflection/index.md b/src/connections/destinations/catalog/inflection/index.md index 672ef308ca..c5ac0630e6 100644 --- a/src/connections/destinations/catalog/inflection/index.md +++ b/src/connections/destinations/catalog/inflection/index.md @@ -8,7 +8,7 @@ id: 62260e5dbc37b83046a847be This destination is maintained by Inflection. For any issues with the destination, [contact the Inflection Support team](mailto:support@inflection.io). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, select **Inflection**. 2. Choose the Source from which events have to be sent to Inflection destination. @@ -21,24 +21,6 @@ This destination is maintained by Inflection. For any issues with the destinatio Inflection supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). -### Page - -Send [Page](/docs/connections/spec/page) calls to be added to *Product Activity* on Inflection App. For example: - -```js -analytics.page() -``` - - -### Screen - -Send [Screen](/docs/connections/spec/screen) calls to be added to *Product Activity* on Inflection App. For example: - -```obj-c -[[SEGAnalytics sharedAnalytics] screen:@"Home"]; -``` - - ### Identify Send [Identify](/docs/connections/spec/identify) calls to Identify a user. The traits should have the `email` trait to be processed. All the other reserved traits are optional, but will be used to populate *Person DB* if available. @@ -58,4 +40,18 @@ Send [Track](/docs/connections/spec/track) calls to be added to *Product Activit ```js analytics.track('Login Button Clicked') +``` + +### Group + +Send [Group](/docs/connections/spec/group) calls to tie a user to an org. There are two IDs that are relevant in a group call: the userId, which belongs and refers to the user, and the groupId, which belongs and refers to the specific group. A user can belong to multiple groups, each associated with a different groupId, but the user will have only one userId linked to each of these different groups. + +```js + analytics.group("0e8c78ea9d97a7b8185e8632", { +name: "Initech", +industry: "Technology", +employees: 329, +plan: "enterprise", +"total billed": 830 +}); ``` \ No newline at end of file diff --git a/src/connections/destinations/catalog/inkit/index.md b/src/connections/destinations/catalog/inkit/index.md index aeeb9fc053..18915b2595 100644 --- a/src/connections/destinations/catalog/inkit/index.md +++ b/src/connections/destinations/catalog/inkit/index.md @@ -3,56 +3,50 @@ title: Inkit Destination rewrite: true id: 5f0746ced1c79b49ddee49fd --- -[Inkit](https://inkit.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) connects to hundreds of printers with complete visibility. Instantly use global print infrastructure with Inkit's developer friendly APIs, dashboards, and reporting. Connect, track, and manage critical business communications faster than ever before. - -The Inkit Destination is in beta, which indicates ongoing development. To join the Inkit beta program, or if you have any feedback to help improve the Inkit Destination and its documentation, [contact the Inkit support team](mailto:support@inkit.com). +[Inkit](https://inkit.com){:target="_blank"} and Segment empower organizations to securely generate and distribute documents - both digitally as well as through direct mail. +For example, automatically create and send electronic documents like invoices, reports, notices, and more through a magic link or e-delivery. Or generate and send documents for e-signature, storage, postcards, letters, and more, all powered by the Inkit integration for Segment. > note "" -> Inkit maintains this destination. For any issues with the destination, [contact the Inkit support team](mailto:support@inkit.com). - +> Inkit maintains this destination. For any issues with the destination, [email the Inkit support team](mailto:support@inkit.com). ## Getting Started Add the destination: 1. From the Destinations catalog page in your Segment workspace, click **Add Destination**. -2. Search for "INKIT" in the Destinations Catalog, and select the "INKIT" destination. -3. Choose which Source should send data to the "INKIT" destination. +2. Search for "Inkit" in the Destinations Catalog, and select the "Inkit" destination. +3. Choose which Source should send data to the "Inkit" destination. Get the Inkit API Key: -1. Go to the [INKIT Integrations](https://app.inkit.io/#/account/integrations), find and copy the "API key". -2. Enter the "API Key" in the "INKIT" destination settings in Segment. +1. [Sign up](https://app.inkit.com/auth-init){:target="_blank"} and create an Inkit account. +2. Follow the instructions in the documentation to [create an API key](https://docs.inkit.com/docs/add-an-api-key-to-your-account){:target="_blank"}. +3. Enter the “API Key” in the “Inkit” destination settings in Segment. + To use a Template ID: -1. From the Destinations catalog page in your Segment workspace, click **Add Destination**. -2. Search for "INKIT" in the Destinations Catalog, and select the "INKIT" destination. -3. Choose which Source should send data to the "INKIT" destination. -4. Go to the [INKIT Templates](https://app.inkit.io/#/templates), find the desired template. -5. Click the three dots on the far right side and select "Copy Id". -6. Paste the id into the "template_id" field when setting up the destination. +1. From the Destinations catalog page in your Segment workspace, click Add Destination. +2. Search for “Inkit” in the Destinations Catalog, and select the “Inkit” destination. +3. Choose which Source should send data to the “Inkit” destination. +4. [Create a template](https://docs.inkit.com/docs/create-a-template){:target="_blank"} in Word, PDF, HTML, Excel, or PowerPoint. +5. Copy the Template ID to the “Templates” tab in the Inkit web app. +6. Paste the id into the “template_id” field when setting up the Destination in Segment. + -For more information, see INKIT [documentation](https://docs.inkit.com/docs/inkit-postcards-api). +For more information, see Inkit [documentation](https://docs.inkit.com/docs/welcome-to-inkit){:target="_blank"}. ## Expected Data +The merge fields in the template dictate what data you must pass to Inkit through the integration. The only must-have data point is the "template_id". + | Field | Type | Description | | -------- | -------- | -------- | | template_id | string | ID of the template from the Inkit UI (required) | -| first_name | string | The first name of the contact (optional but either first_name or last_name is required) | -| last_name | string | The last name of the contact (optional but either first_name or last_name is required) | -| email | string | The email address of the contact (optional) | -| company | string | The company name that the contact belongs to (optional) | -| phone | string | The phone number of the contact (optional) | -| address_line_1 | string | The primary line, or street address of the contact (64-character limit) (required) | -| address_line_2 | string | The apartment or suite number (optional) | -| address_city | string | The city of the contact's address (required) | -| address_state | string | The two-letter (2) state code of the contact's address (required) | -| address_zip | string | The ZIP Code of the contact's address (required) -| address_country | string | The two-letter (2) ISO alpha-2 country code of the contact's address (required) | +For example, you might send a letter in which you need to include the recipient's name, address, and so forth. + ## Identify If you aren't familiar with the Segment Spec, see the [Identify method documentation](/docs/connections/spec/identify/) to learn about what it does. An example call with Inkit would look like: @@ -61,14 +55,13 @@ If you aren't familiar with the Segment Spec, see the [Identify method documenta > note"" > All address elements should be satisified within the segment's user identity (exception of address_line_2 which is a custom entry) - Expected Requirements ```js analytics.identify('userId123', { template_id:"", (required) - first_name: "Elon", (required) - last_name: "Musk", (optional) + first_name: "Nick", (required) + last_name: "Fury", (optional) address_line_1: "1 Rocket Road", (required) address_line_2: "Suite 1", (optional) address_city: "Hawthorne", (required) @@ -99,8 +92,8 @@ Custom Fields Call ```js analytics.identify('userId123', { template_id:"", - email:"elon@spacex.com", - company:"SpaceX", + email:"n.fury@shield.com", + company:"SHIELD", phone:"3107099497", subscription: "premium", custom_field_example: "content" @@ -109,4 +102,7 @@ analytics.identify('userId123', { All other fields are then added to the user's profile as custom fields within Inkit's dashboard. -Segment sends Identify calls to INKIT as an `identify` event. +Segment sends Identify calls to Inkit as an `identify` event. + + +SELECT COUNT(*) FROM destination_config WHERE destination_id = '54521fd525e721e32a72ee8f' AND enabled = 1 AND id IN (SELECT config_id FROM destination_config_options_2 WHERE option_name = 'canOmitAppsFlyerId' AND value = 'false') diff --git a/src/connections/destinations/catalog/inleads-ai/index.md b/src/connections/destinations/catalog/inleads-ai/index.md new file mode 100644 index 0000000000..574523b075 --- /dev/null +++ b/src/connections/destinations/catalog/inleads-ai/index.md @@ -0,0 +1,60 @@ +--- +title: Inleads AI Destination +id: 6627b0208bbe1699ca06eef8 +--- + +[Inleads.ai](http://Inleads.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an AI-driven sales intelligence and analytics platform designed to empower startups and enterprises with comprehensive tools for growth. + +Using Inleads, you can gain deeper insights into your customer journey and drive smarter decisions with the Inleads.ai and Segment integration. With this integration, seamlessly map Segment events to Inleads.ai events, enabling you to track deals, leads and customer activities across every touchpoint. Dive into real-time sales, product, and revenue insights, powered by advanced analytics and machine learning algorithms. With Inleads.ai and Segment, unlock the full potential of your customer data to fuel your business success. + +This destination is maintained by [Inleads.ai](http://Inleads.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”}. For any issues with the destination, [contact the Inleads Support team](mailto:info@inleads.ai). + +## Getting Started + +1. From the Destinations catalog page in the Segment App, click **Add Destination**. +2. Search for **Inleads** in the Destinations Catalog, and select the **Inleads** destination. +3. Choose which Source should send data to the Inleads destination. +4. Go to the [Inleads dashboard](https://app.inleads.ai/#/settings){:target="_blank"} and find the **API Key** in Settings API Keys tab. +5. Enter the **API Key** in the Inleads destination settings in Segment. + +## Supported methods + +Inleads supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). + +### Identify + +Send [Identify](/docs/connections/spec/identify) calls to create new user profile or update existing users with new trait values. For example: + +```js +analytics.identify("inleadsUser123", { + email: "test@example.com", +}); +``` + +Segment sends Identify calls to Inleads as an `identify` event. + +### Track + +Send [Track](/docs/connections/spec/track) calls to record user behavior in your app. For example: + +```js +analytics.track("New lead created"); +``` + +Segment sends Track calls to Inleads as a `track` event. + +### Group + +Send [Group](/docs/connections/spec/group) calls to associate an individual user to group. For example: + +```js +analytics.group("0e8c78ea9d97a7b8185e8632", { + name: "Initech", + industry: "Technology", + employees: 329, + plan: "enterprise", + "total billed": 830 +}); +``` + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/innovid/index.md b/src/connections/destinations/catalog/innovid/index.md deleted file mode 100644 index b58e8671c2..0000000000 --- a/src/connections/destinations/catalog/innovid/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'Innovid Destination' -hidden: true -id: 54521fdb25e721e32a72eefc -published: false ---- diff --git a/src/connections/destinations/catalog/insider/index.md b/src/connections/destinations/catalog/insider/index.md index f97953c331..1851a691a5 100644 --- a/src/connections/destinations/catalog/insider/index.md +++ b/src/connections/destinations/catalog/insider/index.md @@ -2,8 +2,10 @@ rewrite: true title: Insider Destination id: 5f2cf019edbedc752d668f69 +hidden: true +hide-personas-partial: true --- -[Insider](https://useinsider.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) Growth Management Platform (GMP) helps digital marketers drive growth across the funnel. Insider GMP helps marketers deliver personalized journeys across the web, mobile web, mobile apps, messaging, email, and ad channels using the unified data. +[Insider](https://useinsider.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} Growth Management Platform (GMP) helps digital marketers drive growth across the funnel. Insider GMP helps marketers deliver personalized journeys across the web, mobile web, mobile apps, messaging, email, and ad channels using the unified data. This destination is maintained by Insider. For any issues with the destination, [contact the Insider Support team](mailto:pst@useinsider.com). @@ -14,7 +16,7 @@ This destination is maintained by Insider. For any issues with the destination, 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Insider" in the Destinations Catalog, and select the Insider destination. 3. Choose which Source should send data to the Insider destination. -4. Go to the [Insider dashboard](https://inone.useinsider.com/), navigate to **Settings > Integration Settings**, then find and copy the **Segment.com API Key**. +4. Go to the [Insider dashboard](https://inone.useinsider.com/){:target="_blank”}, navigate to **Settings > Integration Settings**, then find and copy the **Segment.com API Key**. 5. Enter your **Partner Name** and API Key in the Insider destination settings in Segment. ## Page diff --git a/src/connections/destinations/catalog/inspectlet/index.md b/src/connections/destinations/catalog/inspectlet/index.md index fe9b2b7955..153208c403 100644 --- a/src/connections/destinations/catalog/inspectlet/index.md +++ b/src/connections/destinations/catalog/inspectlet/index.md @@ -3,11 +3,11 @@ title: Inspectlet Destination rewrite: true id: 54521fd725e721e32a72eec3 --- -[Inspectlet](https://www.inspectlet.com/) lets you analyze user behavior instantly with Eye Tracking Heatmaps, Screen Capture (record and playback actual visitor sessions), and User-Interaction Analytics. The Inspectlet Destination is open-source. You can browse the code on [GitHub](https://github.com/segment-integrations/analytics.js-integration-inspectlet). +[Inspectlet](https://www.inspectlet.com/){:target="_blank"} lets you analyze user behavior instantly with Eye Tracking Heatmaps, Screen Capture (record and playback actual visitor sessions), and User-Interaction Analytics. The Inspectlet Destination is open-source. You can browse the code on [GitHub](https://github.com/segment-integrations/analytics.js-integration-inspectlet){:target="_blank"}. ## Getting Started - {% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Inspectlet" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/intercom/index.md b/src/connections/destinations/catalog/intercom/index.md index 04f08575e4..04b87fffc7 100644 --- a/src/connections/destinations/catalog/intercom/index.md +++ b/src/connections/destinations/catalog/intercom/index.md @@ -4,570 +4,28 @@ hide-cmodes: true hide-personas-partial: true cmode-override: true id: 54521fd725e721e32a72eec6 -private: true +private: false maintenance: true -maintenance-content: New versions of the destination are available. See [Intercom Cloud Mode (Actions)](/docs/connections/destinations/catalog/actions-intercom-cloud/) and [Intercom Web (Actions)](/docs/connections/destinations/catalog/actions-intercom-web/) for more information. ---- -[Intercom](https://www.intercom.com/){:target="_blank"} makes customer messaging apps for sales, marketing, and support, connected on one platform. The Intercom Destination is open-source. You can browse the code for [analytics.js](https://github.com/segment-integrations/analytics.js-integration-intercom){:target="_blank"}, [iOS](https://github.com/segment-integrations/analytics-ios-integration-intercom){:target="_blank"}, and [Android](https://github.com/segment-integrations/analytics-android-integration-intercom){:target="_blank"} on GitHub. +maintenance-content: This destination should only be used for Mobile connections. New versions of the destination are available for browser and server connections. See [Intercom Cloud Mode (Actions)](/docs/connections/destinations/catalog/actions-intercom-cloud/) and [Intercom Web (Actions)](/docs/connections/destinations/catalog/actions-intercom-web/) for more information. +hidden: false +--- ## Getting Started 1. From the Segment Destinations page click **Add Destination**. 2. Search for "Intercom" and select it in the results that appear. -3. Choose which Source to connect Intercom to. +3. Choose a Kotlin or Swift Mobile source to connect to Intercom. 4. Authorize your Intercom account in Segment and select the Intercom Account to sync with Segment. - - You can choose which account to sync from the drop down menu in the top right. If you are using [server-side sources](/docs/connections/sources#server), Segment starts passing data through once you activate the Destination. For other libraries continue reading below. -5. [Find your "App ID" in the Intercom UI](https://docs.intercom.com/faqs-and-troubleshooting/getting-set-up/where-can-i-find-my-app-id){:target="_blank"} or by navigating to the Gear Menu and clicking on "App Settings" followed by "API Keys". It should look something like `9iefb489`. +5. [Find your "App ID" in the Intercom UI](https://developers.intercom.com/installing-intercom/web/installation/#step-3-generate-a-config-file-with-this-command){:target="_blank"} or by navigating to the Gear Menu and clicking on "App Settings" followed by "API Keys". It should look something like `9iefb489`. -Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Intercom's `library.js` onto your page. - -This means you should remove Intercom's snippet from your page. - ### Mobile -**IMPORTANT:** The Intercom mobile components are currently in public beta. - -Before reading the specific instructions for iOS or Android below, make sure you enter your Mobile API Key in the Segment Settings UI. This is required to send data to Intercom from your mobile apps. - -#### iOS - -1. In your application, add `pod 'Segment-Intercom'` to your Podfile. -2. After adding the dependency, you must import the integration `'SEGIntercomIntegrationFactory.h'` and register it with the Segment SDK `[configuration use:[SEGIntercomIntegrationFactory instance]];`. -3. When installing Intercom, you must make sure that you have a `NSPhotoLibraryUsageDescription` entry in your `Info.plist`. This is [required by Apple](https://developer.apple.com/library/content/qa/qa1937/_index.html){:target="_blank"} for all apps that access the photo library, and is necessary due to the image upload feature. Users are prompted for the photo library permission only when they tap the image upload button. - -#### Android - -1. Add `compile 'com.segment.analytics.android.integrations:intercom:+'` to your app-level `build.gradle` file -2. Sync your project, then import the integration in your Application subclass or wherever you're initializing Segment: - ```java - import com.segment.analytics.android.integrations.intercom.IntercomIntegration; - ``` -3. Next, register the `IntercomIntegration.FACTORY` with the Segment SDK: - - ```java - analytics = new Analytics.Builder(this, "write_key") - .use(IntercomIntegration.FACTORY) - .build(); - ``` - -### React Native - -{% include content/react-dest.md %} - -## Page - -If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: - -```js -analytics.page(); -``` - -The Page call only works in device-mode through Analytics.js by triggering the Intercom `update` method, which looks for new Intercom messages that should be displayed to the current user. It is not supported by any of the server-side or mobile SDKs. - -### Intercom Respond - -If you have [Intercom's Respond package](https://www.intercom.com/help/en/articles/447-respond-to-users-and-visitors-on-the-go){:target="_blank"}, calling `page` triggers the chat widget to appear. Otherwise, you must use the [Identify method](#identify) to make the chat widget appear. - -If you have the Respond package and calling `page` still does not show your chat widget, be sure to check your "Visitors on your website" setting inside your Intercom account. - - -## Identify - -If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: - -```javascript -analytics.identify('su3r73', { - name: 'Iñigo Montoya', - email: 'avenger@example.com', - company: { - id: '123', - name: 'Iñigo & Friends Holding Company' - }, - createdAt: 'Mon Mar 26 2018 17:44:51 GMT+0000 (UTC)' -}); -``` - -When you call Identify, Segment creates or updates the user in Intercom using their [Users API](https://developers.intercom.com/reference#users){:target="_blank"}. Segment does not currently support creation of leads. - -> info "" -> Intercom associates Track events with known users. An Identify call with a `userId` is required before Track events are associated properly. Segment's bundled mobile SDKs also require that `identify` be called prior to `track`, but accepts setting an unknown user in Intercom using the `anonymousId`. - -Keep reading for more information about the Identify call depending on the source type you send it from. - -### Client - -- Passing `traits.company` creates a new Intercom Company if the `company_id` does not match a known company. See the [Intercom contact model documentation](https://developers.intercom.com/intercom-api-reference/reference/the-contact-model){:target="_blank"} for more details. -- Trait values must be no longer than 255 characters - -When you call Identify on `analytics.js`, Segment creates the `intercomSettings` object and loads Intercom's JavaScript into the page. - -Here's how Segment parameters are mapped to those in the `intercomSettings` object: - -| Segment Parameter | Intercom Parameter | Description | -| ------------------ | ------------------------------------ | ------------------------------------ | -| `userId` | `intercomSettings.user_id` | The user ID for this user. | -| `traits` | `intercomSettings.custom_attributes` | The traits associated for this user. | -| `traits.email` | `intercomSettings.email` | The email of this user. | -| `traits.name` | `intercomSettings.name` | The full name of this user. | -| `traits.company` | `intercomSettings.company` | The company associated for this user.| -| `traits.createdAt` | `intercomSettings.created_at` | The UNIX timestamp when the user was created. | - -> warning "" -> Intercom rejects trait values longer than 255 characters. - -If a user with `traits.company` is identified and the `company_id` does not match a known company, a new company is created in Intercom. If company is a string, Segment sets the `company_id` as a hash of `company_name` as an id is required to [associate the user to the company](https://developers.intercom.com/intercom-api-reference/v1.2/reference/user-model){:target="_blank"}. You can use a [Group call](/docs/connections/destinations/catalog/intercom#group) to create and update company profiles explicitly. - - -### Server - -When you call Identify from any of the server-side libraries or mobile sources in Cloud-mode, Segment maps the [special traits](/docs/connections/spec/identify#traits) (`email`, `firstName`, `lastName`, `createdAt`, and `company`) to Intercom special properties. - -To include `last_seen_user_agent`, add it to the `context.userAgent`. Similarly with `last_seen_ip` which is used for geolocation, you can include the IP address at `context.ip`. View the [last seen trait section](#last-seen) for more information. - -### Mobile - -Intercom supports both logged-in or logged-out users. You must register your users with Intercom before you can talk to them or see what they do in your app. This means that Identify must be called before Track. - -Intercom allows users to choose to track only known or only unknown users, as well as both. Segment supports the ability to track both by checking for logged in users (determined by the `userId`) and falling back to setting the user as "Unidentified" when this is not present. - -Intercom knows when your app is backgrounded and comes alive again, so you won't need to re-register your users. - -Segment maps the following Intercom standard attributes on Identify. - -| Segment Parameter | Intercom Parameter | Description | -| ----------------------------------------- | ------------------------ | ------------------------------------ | -| `traits.userId` | `user_id` | The user ID for this user. | -| `traits.email` | `email` | The email of this user. | -| `traits.name` | `name` | The full name of this user. | -| `traits.phone` | `phone` | The phone number for this user. | -| `traits.company` | `company` | The company associated for this user.| -| `traits.signedUpAt` | `created_at` | The signed up date as an NSDate (iOS) & Long (Android) | -| `integrations.intercom.language_override` | `languageOverride` | The [language override](https://docs.intercom.com/configure-intercom-for-your-product-or-site/customize-the-intercom-messenger/localize-intercom-to-work-with-multiple-languages){:target="_blank"} code for this user. | -| `integrations.intercom.unsubscribed` | `unsubscribedFromEmails` | A boolean indicating if the user has unsubscribed from emails.| -| remaining `traits` | `customAttributes` | Custom attributes for this user. | - -> info "" -> Intercom supports values of type NSString, NSNumber or NSNull on iOS and String, Long, Float, Double, Boolean, Character, Byte, Short or Integer on Android. Pass Android traits using camel case to conform with Java convention. - -#### Collect Context - -When this option is selected, Identify calls include contextual information collected by [Segment's mobile libraries](/docs/connections/sources#mobile) if it is available. This info is set as Custom Attributes on the Intercom user. - -The fields collected from the [context object](/docs/connections/spec/common/) are `device.type`, `device.manufacturer`, `device.model`, `os.name`, `os.version`, `app.name`, `app.version` and appear in Intercom as `device_type`, `device_manufacturer`, `device_model`, `os_name`, `os_version`, `app_name` and `app_version`. - - -## Track - -If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: - -```javascript -analytics.track('Product Purchased', { - order_ID: '2969302398', - category: 'boots', - product_name: 'yellow_cowboy_boots', - price: 99.95, - currency: 'EUR' -}); -``` -> info "" -> Because Intercom only associates Track events with known users, an Identify call with a `userId` is required before Track events are associated properly. - -When you make a Track call from any of the server-side libraries or mobile sources in `cloud-mode` (for example, without the beta Segment mobile Intercom SDK installed), you must include either the `userId` or `email` of an existing user in Intercom. - - -### Revenue and currency -If you send `properties.revenue` and `properties.currency`, Segment formats that according to [Intercom's Monetary Amount](https://developers.intercom.com/intercom-api-reference/reference/submit-a-data-event#metadata-object){:target="_blank"} and send it as: - -```js -price: { - amount: * 100, // since Intercom requires this in cents - currency: // defaults to 'usd' -} -``` - -The bundled mobile integrations also check `properties.total` if `properties.revenue` is not present, and assign the total value as the amount value. - -### Limited Properties -Intercom can only store [five event properties](http://docs.intercom.io/Intercom-for-user-analysis/Tracking-User-Events-in-Intercom#metadata-support){:target="_blank"} per event. That means if you send an event to Segment with more than five properties, Intercom only shows the first five properties. - -### Limited Events - -Intercom only allows a total of 120 unique _active_ event names. If you're sending Segment more than 120 unique event names, Intercom only accepts the first 120 events that their servers see, and the rest throw an error. - -In Intercom, an "Active" event is an event that hasn't been archived. If you archive an event, it makes it inactive and removes it from your 120 active events. If you need to bring your account back under the 120 event limit, archive some events from in the Intercom UI by navigating to **Settings > (workspace name) data > Events**, then click on the event to archive. - -### Server-side Race Condition - -Because Segment's server-side libraries batch calls by default, it is possible for an Identify call that would create a user record to arrive at the same time as a Track event associated with this user. If the Track event is processed before the user is created you get an error, and the event is not recorded. - -[Adding a Flush method](/docs/connections/sources/catalog/libraries/server/node#batching) immediately following the Identify, and before any additional Track events helps ensure that the Identify call reaches Intercom first to create the user. Generally, this is enough to prevent the race condition, but you can add an extra timeout if necessary. - -If you still see issues, the Identify call is most likely either not reaching Intercom at all, or is arriving too late after a subsequent [retry](/docs/connections/destinations#retries). You can use the [Event Delivery functionality](/docs/connections/event-delivery/) to check for recent errors and gain insight into error prevention. - -## Group - -If you're not familiar with the Segment Specs, take a look to understand what the [Group method](/docs/connections/spec/group/) does. An example call would look like: - -```javascript -analytics.group('companyId123', { - name: 'Segment' -}); -``` - -Segment supports Intercom companies in all sources. Users can be put into multiple groups, which associate them to multiple companies in Intercom. - -When you call Group from any of any server-side libraries or mobile sources in cloud-mode (without Segment's mobile Intercom SDK installed), you must include either the `userId` or `email` of an existing user in Intercom. - -> info "" -> In order for the Company Sessions Count to update within Intercom, the company must first be recorded in an `identify` call. - - -| Segment Parameter | Intercom Parameter | Description | -| ---------------------- | ----------------------------- | --------------------------------------------- | -| `groupId` | `companyId` | The ID for the company. | -| `traits.name` | `name` | The name of the company. | -| `traits.plan` | `plan` | The plan of the company. | -| `traits.monthly_spend` | `monthlySpend` | The monthly spend of the company. | -| `traits.company` | `intercomSettings.company` | The company associated for this user. | -| `traits.createdAt` | `intercomSettings.created_at` | The UNIX timestamp when the user was created. | -| remaining `traits` | `customAttributes` | Custom attributes for this user. | - - -> info "" -> Intercom supports values of type `NSString`, `NSNumber` or `NSNull` on iOS, and `String`, `Long`, `Float`, `Double`, `Boolean`, `Character`, `Byte`, `Short` or `Integer` on Android. Pass Android traits using camel case to conform with Java convention - - -## Reset - -Segment supports Intercom's `reset` method only for Device-mode Mobile sources. The bundled mobile SDKs `reset` method un-registers a user in Intercom. When users want to log out of your app and you call Segment's `reset` method, Segment calls: - -On iOS: - -```objc - [Intercom reset]; -``` - -On Android: - -```java - Analytics.with(context).reset(); -``` - -## Best Practices - -### Arrays and Objects - -Intercom doesn't support custom arrays or objects. This means that if you want to send a certain user `trait` or event `property` to Intercom, you must send them at the top level. - -This limitation does not apply, however, for mapping `company` objects on [Identify calls](/docs/connections/spec/identify/). Segment continues to handle that in the same way as before. This is only applicable for any custom traits or properties. - -### Disassociating Users from a Company (server-side only) - -You can disassociate a user from a company by passing in a field inside the `company` trait with `remove: true` in your Identify calls. - -```javascript -analytics.identify({ - userId: '019mr8mf4r', - traits: { - name: 'Michael Bolton', - email: 'mbolton@example.com', - plan: 'Enterprise', - company: { - id: 12345, - remove: true - }, - createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)' - } -}); -``` - -### Identity Verification - -Intercom's *identity verification* helps to make sure that conversations between you and your users are kept private and that one user can't impersonate another. Segment supports identity verification through the `analytics.js` web library and the iOS and Android mobile sources. - -For mobile apps, before enabling identity verification, read Intercom's docs on identity verification for [iOS](https://developers.intercom.com/docs/ios-identity-verification){:target="_blank"} and [Android](https://developers.intercom.com/docs/android-identity-verification){:target="_blank"}. - -If you want to enable Intercom [identity verification](https://docs.intercom.com/configure-intercom-for-your-product-or-site/staying-secure/enable-identity-verification-on-your-web-product){:target="_blank"} for `analytics.js` or bundled mobile SDKs, you can pass in the `user_hash` variable inside the integrations object. - -The `user_hash` should be a SHA256 hash of your Intercom API secret and the `userId`. The hash is not based on the email, it's based on the `userId`. Here's an example rendering an identify call with identity verification: - -```javascript -analytics.identify('<%= current_user.id %>', { - email: '<%= current_user.email %>', - createdAt: '<%= current_user.created %>' -}, { - Intercom: { - user_hash: '<%= OpenSSL::HMAC.hexdigest("sha256", "YOUR_INTERCOM_APP_SECRET", current_user.id) %>' - } -}); -``` - -`Android` example: - -```java -Traits traits = new Traits(); -Map intercomOptions = new HashMap<>(); -intercomOptions.put("userHash", "YOUR_USER_HASH"); -Options options = new Options().setIntegrationOptions("Intercom", intercomOptions); -Analytics.with(context).identify("123", traits, options); -``` - -`YOUR_INTERCOM_APP_SECRET` is found in Intercom's identity verification set up guide. - -#### Identity verification plus filtering using Destinations Object - -If using Intercom identity verification AND [selective destinations functionality](/docs/connections/sources/catalog/libraries/website/javascript#selecting-destinations-with-the-integrations-object), the context object looks like this: - -```js -{ - integrations: { - All: false, - Intercom: { - user_hash: '<%= OpenSSL::HMAC.hexdigest("sha256", "YOUR_INTERCOM_APP_SECRET", current_user.id) %>' - } - } -} -``` - -### Unsubscribe Users - -To unsubscribe users from emails, you may set a flag from **server side** libraries, `unsubscribedFromEmails`, inside `context` object: - -{% codeexample %} -{% codeexampletab Android %} -```java -Traits traits = new Traits(); -Map intercomOptions = new HashMap<>(); -intercomOptions.put("unsubscribedFromEmails", true); -Options options = new Options().setIntegrationOptions("Intercom", intercomOptions); -Analytics.with(context).identify("123", traits, options); -``` -{% endcodeexampletab %} - -{% codeexampletab iOS %} -```objc -options:@{ - @"integrations": @{ - @"intercom" : @{ - @"unsubscribed": @YES - } - } -} -``` -{% endcodeexampletab %} - -{% codeexampletab Node.js %} -```javascript -analytics.identify({ - userId: '4832094283057439285723523452345', - anonymousId:'43254364571', - context:{ - Intercom: { unsubscribedFromEmails: true } - }, - traits: { - firstName: 'John ', - lastName: 'Jacob', - email: 'jingleheimer@schmidt.com' - } -}); -``` -{% endcodeexampletab %} -{% endcodeexample %} - -> info "" -> This works from server-side libraries and bundled mobile, and does NOT work in `analytics.js`. - -### Last Seen - -By default, Intercom updates the **Last Seen** user trait whenever a user's profile is updated by Identify calls or if a Group call is sent with a user's `userId`. If you want to update a user without updating their **Last Seen** time, pass `active` with a value of `false` into the context (see example below) of your Identify or Group calls. - -This only works server-side; **Last Seen** is always updated client-side. ID or name are necessary to update a company. - -Here's a full Python example of an Identify call with `active` set to `false`: - -```python -analytics.identify(user_id='some_user_id', traits={ - "email": "ben@intercom.io", - "firstName": "Ben", - "lastName": "McRedmond" - "createdAt": 1363902294011, - "plan": "Premium" -}, context={ - "ip": "192.168.0.1", - "active": False, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.47 Safari/537.36" -}) -``` - -### Intercom Tags - -Segment's API doesn't support Intercom tags. Traits can be used instead of tags to create segments of users, and the advantage is you can use those traits in other destinations like Segment. - -### Conditionally show the Intercom chat widget (Browser only) - -You can take advantage of Intercom's `hide_default_launcher` option to selectively show the chat widget. First hide the Messenger for all users inside their UI using Messenger settings, then think about how you want to programmatically decide which users you'd like to show the widget to. Then you can pass an Intercom specific destination setting like this: - -```js -// with analytics.js -analytics.identify('teemo', { someTrait: 'x'}, { - Intercom: { hideDefaultLauncher: true } -}); -``` - -> info "" -> You can pass in the Intercom specific option using all supported calls for this destination (`page`, `identify`, and `group`). - -### Control the Intercom Chat Widget (Browser) - -If you want to control the position or toggle the visibility of the Intercom Chat Widget, use the Intercom `update` method. After the Intercom instance is loaded on the client side, you can update the widget styling. - -```js -//Set styling -window.intercomSettings = { -    alignment: 'right', -    horizontal_padding: 20, -    vertical_padding: 20 -  }; - -//Apply update -window.Intercom("update"); -``` - -### Control the Intercom Chat Widget (Mobile) - -Segment's mobile SDKs let you tap into the Intercom instance that the integration creates so that you can call any of Intercom's native methods, including all methods required to interact with the Intercom chat widget. - -Here's an example of how to grab the underlying Intercom instance on both Android and iOS. - -{% codeexample %} -{% codeexampletab Android %} -```java -analytics.onIntegrationReady("Intercom", new Callback() { - @Override public void onReady(Object instance) { - Intercom intercom = (Intercom) instance; - } -}); -``` -{% endcodeexampletab %} - -{% codeexampletab iOS %} -```objc -[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(integrationDidStart:) name:SEGAnalyticsIntegrationDidStart object:nil]; - -- (void)integrationDidStart:(nonnull NSNotification *)notification -{ - NSString *integration = notification.object; - - if ([integration.name isEqualToString:@"Intercom"]) { - // Call Intercom library methods here. - } -} -``` -{% endcodeexampletab %} -{% endcodeexample %} - -For more information, view [using destination-specific features with Analytics-Android](/docs/connections/sources/catalog/libraries/mobile/android/android-faqs/#how-can-i-use-a-destination-specific-feature), and [Analytics-iOS destination initialization](/docs/connections/sources/catalog/libraries/mobile/ios/ios-faqs/#how-do-i-know-when-a-destination-is-initialized). - -### Push notification and deep linking - -Segment's mobile SDKs don't support push notifications or deep linking out of the box. Refer to Intercom's documentation for information on [iOS push notifications](https://developers.intercom.com/installing-intercom/docs/ios-push-notifications){:target="_blank"} and [deep linking](https://developers.intercom.com/installing-intercom/docs/ios-deep-linking){:target="_blank"}, as well as [Android push notifications](https://developers.intercom.com/docs/android-fcm-push-notifications){:target="_blank"} and [deep linking](https://developers.intercom.com/docs/android-deep-linking){:target="_blank"}. - -The Android SDK bundles Intercom's Firebase push notification dependency and cannot support Google Cloud Messaging push notifications. - -## Troubleshooting - -### I'm seeing a `403 Forbidden` error - -You probably have [Intercom's identity verification](#identity-verification) setting turned on but are not passing the `user_hash` correctly or at all. - -You may also have to [allowlist your domain](https://www.intercom.com/help/en/articles/4418-list-trusted-domains-you-use-with-intercom){:target="_blank"} in Intercom's dashboard. Otherwise, events on non-whitelisted pages may be rejected with a 403 error. - - -### My Intercom Widget doesn't show up - -Make sure you are sending a `page` and `identify` call when the page is loaded. This allows Intercom to register the page and the user, which would enable the widget to appear. - -If you are sending those two calls, then check that the CSS selector for the widget is correct. The default is `#IntercomDefaultWidget`, but if you [customize your widget](https://www.intercom.com/help/en/articles/6612589-set-up-the-fully-customizable-messenger){:target="_blank"}, then be sure to update this field accordingly. - -### My client-side and server-side calls are going to one Segment source, but different Intercom projects - -Server-side calls go the the project selected when you authenticated your Intercom account while setting up the destination. Client-side calls go to the project referenced with the [App ID setting](#app-id-required-for-analyticsjs-and-mobile). -Make sure those projects are the same. - -### I'm seeing a "Cannot have more than 120 active event names" error - -Intercom only allows a total of [120 unique event names](http://docs.intercom.io/Intercom-for-user-analysis/Tracking-User-Events-in-Intercom#events-faqs){:target="_blank"}. That means if you are sending Segment more than 120 unique event names, Intercom only accepts the first 120 events that hit their servers, and the rest throw an error. - -If you want to prevent some of your events from being passed to Intercom and thus prevent the error, you can filter out Intercom in those events using the [Selecting Destinations](/docs/guides/how-to-guides/collect-on-client-or-server#selecting-destinations) feature available on all of Segment's libraries. - -## Using Intercom with Engage - -Intercom is one of the most popular Destinations used with Engage. - -You can send computed traits and audiences that you create in Engage to this Destination so that you can use this data in live chat, automated emails, and other Intercom features to personalize interactions with your customers. - -{% include content/lookback.md %} - -### User-Level Traits and Audiences in Intercom - -Engage sends [**User-Level data**](/docs/glossary#event) to Intercom using an **Identify** call that appends a trait to users' profiles, or a **Track** call when a trait is computed or an audience is entered or exited. - -#### User level computed traits - -The name of the computed trait is added to the user profile as a trait, and the trait's value is set to the value of the computed trait. When the trait is computed, Segment sends a **Track** call. For example: imagine you have a computed trait that counts the number of times a user visits your pricing page. If the user visits your pricing page five times, Segment sends an identify call with the property `pricing_page_visits: 5`. - -#### User level Audiences - -The name of the audience is added to the user's profile as a trait, with boolean value that indicates if the user is in the audience. For example, when a user first completes an order in a lookback window for the last 30 days, Engage sends an identify call with the property `order_completed_last_30days: true`. When the user no longer satisfies these criteria (for example when it's been longer than 30 days since the last purchase), Engage sets that value to `false`. - -When you first create an audience, Engage sends an `identify` call for every user in the audience. Later syncs only update users which were added or removed from the audience since the last sync. - -> info "" -> Segment does not support the creation of **Leads** in Intercom. - - -### Account-Level Traits and Audiences in Intercom - -Engage sends account-Level data to Intercom using an Identify event call that appends an account trait to the users' profiles or a Track call when a trait is computed or an audience is entered or exited. Users are added to an account using a single Group call, which appends a `groupID` to each user within the account. - -#### Account level computed traits - -When you build computed traits with Account-Level data, Engage computes for each account based on traits or aggregated user behavior. You can then export traits for each account, or for each user within an account. The name of the computed trait is added to the profiles of users who are part of the account as a user trait, and the value of the computed trait is added to the corresponding user's user trait. - -For example, imagine you have a computed trait that counts the number of times that users from a specific account visit your pricing page. If users visit your pricing page five times, Engage sends an identify call with the property `pricing_page_visits: 5`. - -#### Account level audiences - -When you build audiences with Account-Level data, Engage returns a set of accounts or a set of users that match your criteria. Engage adds the name of the audience to the profile (individual user, or user within the account) as a trait, with a boolean value to indicate if the user is in the audience. For example: when users in an account first complete an order in the last 30 days, Engage sends an identify call with the property `order_completed_last_30days: true`. When the users in this Account no longer satisfy these criteria (for example if it's been more than 30 days) Segment sets that value to `false`. - -When you first create the audience, Engage sends an Identify call for *every user in the account in that audience*. Later syncs only send updates for individual accounts and users which were added or removed since the last sync. - -> success "" -> For user-level events or traits, you can specify `None of the users`, `Any users`, or `All users` when building your audience criteria. - - -## Setting Up Engage and Intercom +#### Kotlin -To send computed traits or audiences to Intercom, you first must connect it to your Space. Once it's set up, you can select Intercom as a destination for Engage data when you create computed traits or audiences. +To find implementation details for Segment's Kotlin Intercom Destination Plugin, please review the [Intercom plugin documentation](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/destination-plugins/intercom-kotlin-android/). -1. In your Segment workspace, click Engage in the left navigation bar, and select your Space. -2. Click **Engage Settings** and select the **Destinations** tab. -3. Click **Add Destination**. -4. Search for Intercom and click it when it appears in the search results -5. Click **Configure Intercom**. -6. Click **Connect to Intercom**. -7. Log in to Intercom to allow Segment to send data to Intercom. +#### Swift -## Intercom Engage Quick Info +To find implementation details for Segment's Swift Intercom Destination Plugin, please review the [Intercom plugin documentation](/docs/connections/sources/catalog/libraries/mobile/apple/destination-plugins/intercom-swift/). -- **Engage Destination type**: Event Method (data is delivered to this Destination one-by-one on a real-time basis) -- **Traits and Audiences created by**: Identify calls add traits and audiences as traits on the user -- **Do I need to create an `audience_name` field before Engage can update those values?**: No, Engage creates the audience for you. Segment creates the name in Intercom when it passes user `identify` calls. -- **Audience appears as**: A snake-cased version of the audience name (for example, `order_completed_last_30days: true` ) with a boolean value of `true` indicates that a user is in the audience. -- **Is there a Destination rate limit**: Yes, 83 requests per 10 seconds. -- **Lookback window allowed**: Unlimited -- **Identifiers required** : `i``d` or `email` -- **Identifiers accepted** : `i``d` and `email` -- **Client or Server-Side Connection**: Server-side diff --git a/src/connections/destinations/catalog/iron-io/index.md b/src/connections/destinations/catalog/iron-io/index.md index 7fc1dc45c8..1ec17c86be 100644 --- a/src/connections/destinations/catalog/iron-io/index.md +++ b/src/connections/destinations/catalog/iron-io/index.md @@ -8,4 +8,4 @@ When you enable Iron.io in Segment, we'll start sending data to an IronMQ instan When sending data to Iron.io, we'll auto-fill a queue called "segment". You can use Iron.io as a message queue buffer in front of your webhook server or internal data processing cluster. For example, if you want to analyze your data as part of an ETL process, Iron.io can act as an intermediary buffer. -Here's a case study: [How to Build an ETL Pipeline for ElasticSearch Using Segment and Iron.io (Iron.io's blog)](http://blog.iron.io/2014/10/how-to-build-etl-pipeline-for.html?utm_source=segment&medium=docs) +Here's a case study: [How to Build an ETL Pipeline for ElasticSearch Using Segment and Iron.io (Iron.io's blog)](http://blog.iron.io/2014/10/how-to-build-etl-pipeline-for.html?utm_source=segment&medium=docs){:target="_blank"} diff --git a/src/connections/destinations/catalog/iterable-actions/index.md b/src/connections/destinations/catalog/iterable-actions/index.md new file mode 100644 index 0000000000..d5949368f5 --- /dev/null +++ b/src/connections/destinations/catalog/iterable-actions/index.md @@ -0,0 +1,9 @@ +--- +title: Iterable (Actions) Destination +hidden: false +id: 645babd9362d97b777391325 +published: false +beta: true +private: false + +--- diff --git a/src/connections/destinations/catalog/iterable/index.md b/src/connections/destinations/catalog/iterable/index.md index 39a0f264dd..4c623f9f2d 100644 --- a/src/connections/destinations/catalog/iterable/index.md +++ b/src/connections/destinations/catalog/iterable/index.md @@ -20,7 +20,7 @@ When you enable the Iterable destination from the Segment app, your data starts ## Identify -When you call `identify` with one of Segment's sources, Segment calls Iterable's [update user endpoint](https://api.iterable.com/api/docs#users_updateUser), to add data for that particular user. You can also call `identify` to update user fields. +When you call `identify` with one of Segment's sources, Segment calls Iterable's [update user endpoint](https://api.iterable.com/api/docs#users_updateUser){:target="_blank"}, to add data for that particular user. You can also call `identify` to update user fields. Iterable keys users by `email` or a user ID. This user ID will be the Segment `userId` if sent. To use a Segment `userId` for identify calls, first call identify with both a `userId` and `email`. Iterable won't accept the request and throws an error if you fail to send one of either the `userId` or `email`. @@ -59,7 +59,7 @@ This `identify` event would merge the `mobile` property for this user with any o ## Track -When you call `track` with one of Segment's sources, Segment calls Iterable's [track API endpoint](https://api.iterable.com/api/docs#events_track), and send over the event properties as the data fields in the request. The name of the `track` event appears as a Custom Event in Iterable, and will be available to trigger workflows, segment users, and view analytics. +When you call `track` with one of Segment's sources, Segment calls Iterable's [track API endpoint](https://api.iterable.com/api/docs#events_track){:target="_blank"}, and send over the event properties as the data fields in the request. The name of the `track` event appears as a Custom Event in Iterable, and will be available to trigger workflows, segment users, and view analytics. If a user does not already exist in Iterable, calling `track` for a user event will add that user into the system. You can track with either an `email` or userId (if a `userId` exists for that email). @@ -79,7 +79,7 @@ Subsequent `track` with `userId` Iterable also supports Segment's [ecommerce events](/docs/connections/spec/ecommerce/v2/). This works just as you would expect, using the `track` method. -Iterable has one important difference from the Segment Ecommerce spec. If you use the `Product Added` / `Product Removed`/ `Order Completed` events, you must include the "products" field with the cart info, as in the `Order Completed` example event. You must include [all required fields for the Purchase events in Iterable](https://api.iterable.com/api/docs#commerce_trackPurchase). This includes the total value of the purchase as `total` (best as a float, double, and possibly an integer), and an array of objects called `products`. Each product must include an `id` or `productId` as a string, and a `name`, `price`, and `quantity` on each product object in the array. These are used to map to Iterable's expected `items` array. An example might look like this: +Iterable has one important difference from the Segment Ecommerce spec. If you use the `Product Added` / `Product Removed`/ `Order Completed` events, you must include the "products" field with the cart info, as in the `Order Completed` example event. You must include [all required fields for the Purchase events in Iterable](https://api.iterable.com/api/docs#commerce_trackPurchase){:target="_blank"}. This includes the total value of the purchase as `total` (best as a float, double, and possibly an integer), and an array of objects called `products`. Each product must include an `id` or `productId` as a string, and a `name`, `price`, and `quantity` on each product object in the array. These are used to map to Iterable's expected `items` array. An example might look like this: ```js analytics.track("Order Completed", { @@ -226,3 +226,9 @@ When you delete an audience or trait in Segment it is not deleted from Iterable. #### If a user has multiple email addresses as external ids in Segment, what happens when they enter an audience or have a computed trait? Segment sends an `identify` or `track` call for each email address on the user's account. For example, if a user has three email addresses, this creates three separate users in Iterable. + +### Are you able to update a user's email through Iterable? + +Updating a user's email in Iterable is currently not possible via Segment. You will have to call updateEmail outside of Segment if you want to be able to do so: Updating a user's email address cannot be achieved with the standard Segment identify call alone. It requires sending an Update Email Request directly to the Iterable API from outside the Segment platform. + +The API request outlined [here](https://api.iterable.com/api/docs#users_updateEmail). This needs to be followed in order to ensure Iterable has the correct email address for any users who have updated their email address. A workaround to update an email in Iterable from Segment would be to hit that API endpoint using a destination function. diff --git a/src/connections/destinations/catalog/jimo/index.md b/src/connections/destinations/catalog/jimo/index.md index dca232feed..a64628ab29 100644 --- a/src/connections/destinations/catalog/jimo/index.md +++ b/src/connections/destinations/catalog/jimo/index.md @@ -1,20 +1,19 @@ --- title: Jimo Destination id: 6294dd197382c750f0fe1e2d +hidden: true --- -[Jimo](https://yourintegration.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} enables product teams to connect with end-users in any step of the product lifecycle from ideas, shaping to release, multiplying by 5 users’ engagement and loyalty over a product. +[Jimo](https://yourintegration.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="\_blank"} enables product teams to connect with end-users in any step of the product lifecycle from ideas, shaping to release, multiplying by 5 users’ engagement and loyalty over a product. Jimo maintains this destination. For any issues with the destination, [contact the Jimo Support team](mailto:support@usejimo.com). ## Getting started -{% include content/connection-modes.md %} - 1. From the Destinations catalog page in the Segment App, click **Add Destination**. -2. Search for *Jimo* in the Destinations Catalog, and select the **Jimo** destination. +2. Search for "Jimo" in the Destinations Catalog, and select the **Jimo** destination. 3. Choose which Source should send data to the Jimo destination. -4. Go to the [Jimo dashboard](https://i.usejimo.com/settings/integrations){:target="_blank"} and find and copy the API key. +4. Go to the [Jimo dashboard](https://i.usejimo.com/settings/integrations){:target="\_blank"} and find and copy the API key. 5. Enter the **API Key** in the Jimo destination settings in Segment. ## Supported methods @@ -27,7 +26,7 @@ Send [Identify](/docs/connections/spec/identify) calls to enrich your end-users ```js analytics.identify("userId123", { - email: "john.doe@example.com", + email: "john.doe@example.com" }); ``` diff --git a/src/connections/destinations/catalog/jivox/index.md b/src/connections/destinations/catalog/jivox/index.md index ea23853a0b..0d17fd6db3 100644 --- a/src/connections/destinations/catalog/jivox/index.md +++ b/src/connections/destinations/catalog/jivox/index.md @@ -2,13 +2,13 @@ title: Jivox IQ Destination id: 61a0f8fdc53f13a42eac137c --- -[Jivox](https://jivox.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) personalizes digital marketing and advertising. Using the power of big data and machine learning algorithms, Jivox IQ assembles thousands of creative and messaging variations in real-time to create millions of personalized conversations. +[Jivox](https://jivox.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} personalizes digital marketing and advertising. Using the power of big data and machine learning algorithms, Jivox IQ assembles thousands of creative and messaging variations in real-time to create millions of personalized conversations. This destination is maintained by Jivox. For any issues with the destination, [contact the Jivox Support team](mailto:support@jivox.com). ## Getting Started -{% include content/connection-modes.md %} + 1. Contact [Jivox IQ Support Team](mailto:support@jivox.com?subject=Need%20API%20key%20for%20Segment%20Destination%20configuration%20for%20) to get the API Key. 2. From the Destinations catalog page in the Segment App, click **Add Destination**. diff --git a/src/connections/destinations/catalog/journy-io/index.md b/src/connections/destinations/catalog/journy-io/index.md index 457eee3aca..c6d49f27f3 100644 --- a/src/connections/destinations/catalog/journy-io/index.md +++ b/src/connections/destinations/catalog/journy-io/index.md @@ -3,18 +3,18 @@ rewrite: true title: journy.io Destination id: 607d4f97829762f3b69a807b --- -[journy.io](https://www.journy.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) empowers your marketing, sales and support teams with actionable customer insights, needed to improve conversions, increase sales, and reduce churn, right in the tools they already use. +[journy.io](https://www.journy.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} empowers your marketing, sales and support teams with actionable customer insights, needed to improve conversions, increase sales, and reduce churn, right in the tools they already use. This destination is maintained by journy.io. For any issues with the destination, [contact the journy.io Support team](mailto:hi@journy.io). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "journy.io" in the Destinations Catalog, and select the "journy.io" destination. 3. Choose which Source should send data to the "journy.io" destination. -4. Go to the [journy.io app](https://system.journy.io), add Segment as source in the connections, choose "Manual setup" and copy the "API key". +4. Go to the [journy.io app](https://system.journy.io){:target="_blank"}, add Segment as source in the connections, choose "Manual setup" and copy the "API key". 5. Enter the "API Key" in the "journy.io" destination settings in Segment. diff --git a/src/connections/destinations/catalog/june-actions/index.md b/src/connections/destinations/catalog/june-actions/index.md new file mode 100644 index 0000000000..ed73197791 --- /dev/null +++ b/src/connections/destinations/catalog/june-actions/index.md @@ -0,0 +1,51 @@ +--- +title: June (Actions) Destination +hide-boilerplate: true +hide-dossier: false +id: 6419fce5b6e12cf44efbd34c +versions: + - name: "June (Classic)" + link: "/docs/connections/destinations/catalog/june" +private: false +hidden: false + +--- +{% include content/plan-grid.md name="actions" %} + +[June](https://june.so/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a product analytics tool for B2B SaaS companies. June auto-generates reports that focus on how companies use your product. + +June maintains this destination. For any issues with the destination, [contact the June Support team](mailto:ferruccio@june.so). + +## Getting started + + + +1. Go to the [June settings page](https://app.june.so/redirect-to-my-workspace/settings){:target="_blank"} and click **Add your first source**. To add more instances of the June Destination, click on the Segment integration card and click on **Create new key** and copy the key. +2. From the Segment web app, navigate to **Connections > Catalog**, and select the **Destinations** tab in the catalog. +3. Search for *June (Actions)* and select it. +4. Click **Configure June (Actions)**. +5. Select the source you want to connect the destination to. +6. Configure your settings. +7. Click the toggle to enable the destination. + +### Connection modes for June (Actions) destination +June (Actions) does not offer a device-mode connection. All events generated in a browser or app are sent to June through Segment's servers. + +{% capture group_identify_user_details %} + +In the default configuration, June (Actions) triggers this action when it receives a Group call. + +This action sets or updates the properties of specific groups. Use this when you want to update properties on a June company profile. + +{% endcapture %} + + +{% include components/actions-fields.html content1=group_identify_user_details section1="group" %} +## Migration from June Classic + +If you're already using Segment cloud-mode, you're not expected to have breaking changes when upgrading to the June (Actions) destination. With the exception of a few new properties added to your events in the new Actions destination, there's no difference in the data received in June when using either of the June destinations. + +You can configure the new destination to point to a different June workspace and connect it to the same source(s) as the Classic destination and manually verify it before fully switching over. + +> info "" +> Contact June support if you find features missing from the June (Actions) destination that were available in the classic June destination. diff --git a/src/connections/destinations/catalog/june/index.md b/src/connections/destinations/catalog/june/index.md index 009128b497..63880d45e0 100644 --- a/src/connections/destinations/catalog/june/index.md +++ b/src/connections/destinations/catalog/june/index.md @@ -3,16 +3,16 @@ title: June Destination rewrite: true id: 5f0c84d048d8688a7049c172 --- -[June](https://june.so/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is instant product analytics. June automatically generates graphs of the metrics you should track - just connect your Segment account. +[June](https://june.so/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is instant product analytics. June automatically generates graphs of the metrics you should track - just connect your Segment account. This destination is maintained by June. For any issues with the destination, [contact the June Support team](mailto:ferruccio@june.so). ## Getting Started -{% include content/connection-modes.md %} -1. Go to the [June settings page](https://app.june.so/redirect-to-my-workspace/settings), click **Add your first source**. To add more instances of the June Destination, click on the Segment integration card and **Add more sources**. + +1. Go to the [June settings page](https://app.june.so/redirect-to-my-workspace/settings){:target="_blank"}, click **Add your first source**. To add more instances of the June Destination, click on the Segment integration card and **Add more sources**. 2. The Segment App opens in a new window. Log in to authenticate the connection from June. 3. Select the Workspace and Source to connect with June. @@ -59,4 +59,4 @@ If you aren't familiar with the Segment Spec, take a look at the [Page method do analytics.page('Home') ``` -Segment sends Page calls to June as a `pageview` event. View `pageviews` in the [June Activity tab](https://app.june.so/redirect-to-my-workspace/pages). +Segment sends Page calls to June as a `pageview` event. View `pageviews` in the [June Activity tab](https://app.june.so/redirect-to-my-workspace/pages){:target="_blank"}. diff --git a/src/connections/destinations/catalog/kable/index.md b/src/connections/destinations/catalog/kable/index.md index d1cbf5ad4e..b40fcffa53 100644 --- a/src/connections/destinations/catalog/kable/index.md +++ b/src/connections/destinations/catalog/kable/index.md @@ -12,7 +12,7 @@ This Segment destination is maintained by Kable. For any questions or issues, pl ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog** then **Destinations**. 2. Search for **Kable** in the Destinations Catalog, and select **Kable**. diff --git a/src/connections/destinations/catalog/kahuna/index.md b/src/connections/destinations/catalog/kahuna/index.md index 4c6b5f6338..5fa8ef54b0 100644 --- a/src/connections/destinations/catalog/kahuna/index.md +++ b/src/connections/destinations/catalog/kahuna/index.md @@ -69,9 +69,9 @@ SEGAnalyticsConfiguration *config = [SEGAnalyticsConfiguration configurationWith To use the Push Notifications and In-App functionality provided by Kahuna, follow the steps in the Kahuna SDK destination guide: -- For **iOS**, follow the steps in [Enable Personalized Push](https://app.usekahuna.com/tap/docs/Content/Integration/IOS/iOS_Push.htm) in the iOS Get Started section. +- For **iOS**, follow the steps in [Enable Personalized Push](https://app.usekahuna.com/tap/docs/Content/Integration/IOS/iOS_Push.htm){:target="_blank"} in the iOS Get Started section. -- For **Android**, follow the steps in [Enable Personalized Push](https://app.usekahuna.com/tap/docs/Content/Integration/Android/Android_Push.htm) in the Android Get Started section. +- For **Android**, follow the steps in [Enable Personalized Push](https://app.usekahuna.com/tap/docs/Content/Integration/Android/Android_Push.htm){:target="_blank"} in the Android Get Started section. ## Reset diff --git a/src/connections/destinations/catalog/kameleoon/index.md b/src/connections/destinations/catalog/kameleoon/index.md index 2a6b249207..91b9027e44 100644 --- a/src/connections/destinations/catalog/kameleoon/index.md +++ b/src/connections/destinations/catalog/kameleoon/index.md @@ -2,15 +2,17 @@ title: Kameleoon Destination rewrite: true id: 609b99352cc613d05627620e +hidden: true +private: true --- -[Kameleoon's](https://kameleoon.com/en) powerful and easy-to-use A/B testing, full stack, and AI-powered personalization solutions help marketers, product owners, and developers maximize customer engagement and conversion all from a single platform. +[Kameleoon's](https://kameleoon.com/en){:target="_blank"} powerful and easy-to-use A/B testing, full stack, and AI-powered personalization solutions help marketers, product owners, and developers maximize customer engagement and conversion all from a single platform. This destination is maintained by Kameleoon. For any issues with the destination, [contact the Kameleoon Support team](mailto:support@kameleoon.com). ## Getting Started -{% include content/connection-modes.md %} + Segment's Kameleoon destination supports the following Kameleoon products: * [Kameleoon Experiment](https://www.kameleoon.com/en/platform/ab-testing-client-side){:target="_blank"} (Web Client-side) diff --git a/src/connections/destinations/catalog/kana/index.md b/src/connections/destinations/catalog/kana/index.md index fa328221ad..9e36eeceef 100644 --- a/src/connections/destinations/catalog/kana/index.md +++ b/src/connections/destinations/catalog/kana/index.md @@ -10,7 +10,7 @@ This destination is maintained by Kana. For any issues with the destination, [co ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Kana" in the Destinations Catalog, and select the "Kana" destination. @@ -92,4 +92,4 @@ These rules can be created on the [Segment Integration page](https://dashboard.u > All events will be sent from your source to Kana and stored there - no matter whether these will be used to record feature usage or not. Events which could not map to features are exposed within Kana. Any rules created afterwards will retroactively apply to these events, meaning events will reprocess against these new rules in an attempt to map them to features. If there are events you do not want to send to Kana (as they will never be used to record feature usage) then it's recommended that you [filter these events from sending](/docs/guides/filtering-data/). -[See more on how to setup rules in the Kana dashboard](https://kana-1.gitbook.io/kana-docs). \ No newline at end of file +[See more on how to setup rules in the Kana dashboard](https://kana-1.gitbook.io/kana-docs){:target="_blank"}. \ No newline at end of file diff --git a/src/connections/destinations/catalog/kevel/index.md b/src/connections/destinations/catalog/kevel/index.md index 88fb6c2c14..d1a19579d6 100644 --- a/src/connections/destinations/catalog/kevel/index.md +++ b/src/connections/destinations/catalog/kevel/index.md @@ -3,19 +3,19 @@ rewrite: true title: Kevel Destination id: 60525b44d37b46d34612c45e --- -With [Kevel](https://kevel.co)'s ad serving APIs, you can build custom ad platforms for sponsored listings, internal promotions, native ads, and more — so you can take back the Internet and drive more revenue. +With [Kevel](https://kevel.co){:target="_blank"}'s ad serving APIs, you can build custom ad platforms for sponsored listings, internal promotions, native ads, and more — so you can take back the Internet and drive more revenue. This destination is maintained by Kevel. For any issues with the destination, [contact the Kevel Support team](mailto:support@kevel.co). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Kevel" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the [Kevel App](https://app.kevel.co), click the Information icon in the top-right navigation to find your **Network ID**. -4. Still in the [Kevel app](https://app.kevel.co), go to **Settings -> API Keys** in the top navigation. Either copy an existing key, or generate a new one. +3. In the [Kevel App](https://app.kevel.co){:target="_blank"}, click the Information icon in the top-right navigation to find your **Network ID**. +4. Still in the [Kevel app](https://app.kevel.co){:target="_blank"}, go to **Settings -> API Keys** in the top navigation. Either copy an existing key, or generate a new one. 5. Back in the Kevel destination settings in the Segment app, enter the values for the **Network ID** and the **API Key**. @@ -29,4 +29,4 @@ analytics.identify('userId123', { }); ``` -Segment sends Identify calls to Kevel as [UserDB updates](https://dev.kevel.co/docs/userdb-1). Traits with `boolean` values are stored as `interests` on the UserDB Record. Other traits are stored in the `custom` property. +Segment sends Identify calls to Kevel as [UserDB updates](https://dev.kevel.co/docs/userdb-1){:target="_blank"}. Traits with `boolean` values are stored as `interests` on the UserDB Record. Other traits are stored in the `custom` property. diff --git a/src/connections/destinations/catalog/kissmetrics/index.md b/src/connections/destinations/catalog/kissmetrics/index.md index 3328b75ab7..517158b98e 100644 --- a/src/connections/destinations/catalog/kissmetrics/index.md +++ b/src/connections/destinations/catalog/kissmetrics/index.md @@ -3,11 +3,11 @@ title: Kissmetrics Destination rewrite: true id: 54521fd725e721e32a72eec7 --- -[Kissmetrics](https://www.kissmetrics.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a behavioral email and analytics platform. It pulls cross-platform behavior reports so marketers can analyze key audience growth segments. It also provides an overview of custom populations, population change and growth, so marketers can analyze populations from customers who have completed actions or events. +[Kissmetrics](https://www.kissmetrics.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a behavioral email and analytics platform. It pulls cross-platform behavior reports so marketers can analyze key audience growth segments. It also provides an overview of custom populations, population change and growth, so marketers can analyze populations from customers who have completed actions or events. ## Getting Started -{% include content/connection-modes.md %} + To enable Kissmetrics in Segment: @@ -16,7 +16,7 @@ To enable Kissmetrics in Segment: 3. In the destination settings, enter your Kissmetrics "API Key". 4. If you are using Kissmetrics using Segment's client-side analytics.js library, Segment asynchronously loads Kissmetrics JavaScript library onto the page. (This means you should remove Kissmetrics's snippet from your page.) -Your Kissmetrics source starts automatically collecting "Visited Site" events and [other automatically tracked events](https://support.kissmetrics.io/docs/javascript-settings). +Your Kissmetrics source starts automatically collecting "Visited Site" events and [other automatically tracked events](https://support.kissmetrics.io/docs/javascript-settings){:target="_blank”}. ## Page @@ -61,7 +61,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.track('Clicked Button'); ``` -When you call [`track`](/docs/connections/spec/track/) or one of its helper functions ([`trackLink`](/docs/connections/sources/catalog/libraries/website/javascript/#track-link,[`trackForm`](/docs/connections/sources/catalog/libraries/website/javascript/#track-form), we will call Kissmetrics' `record` with the exact same parameters. +When you call [`track`](/docs/connections/spec/track/) or one of its helper functions ([`trackLink`](/docs/connections/sources/catalog/libraries/website/javascript/#track-link) and [`trackForm`](/docs/connections/sources/catalog/libraries/website/javascript/#track-form),) we will call Kissmetrics' `record` with the exact same parameters. The Kissmetrics javascript library automatically tracks a bunch of events (Visited Site, Ad Campaign Hit, Search Engine Hit, Form Submit, Pageview, etc.) These will all still work when you use Kissmetrics through Segment. @@ -106,7 +106,7 @@ Kissmetrics automatically aliases anonymous visitors the first time you call [`i We will automatically call [`alias`](/docs/connections/spec/alias/) for you the first time you [`identify`](/docs/connections/spec/identify/) users from our iOS SDK. That way it works exactly like web browser tracking - you don't have to manually [`alias`](/docs/connections/spec/alias/) new users. -You can read more about how Kissmetrics recommends using [`alias`](/docs/connections/spec/alias/) [in their docs](https://support.kissmetrics.io/docs/understanding-identities). +You can read more about how Kissmetrics recommends using [`alias`](/docs/connections/spec/alias/) [in their docs](https://support.kissmetrics.io/docs/understanding-identities){:target="_blank”}. @@ -206,4 +206,4 @@ In order to enable this feature, ### E-Commerce -If you are using our ecommerce api, we will forward that data along to Kissmetrics following the [Kissmetrics Ecommerce Essentials Guide](https://support.kissmetrics.io/docs/e-commerce-javascript-code-examples). +If you are using our ecommerce api, we will forward that data along to Kissmetrics following the [Kissmetrics Ecommerce Essentials Guide](https://support.kissmetrics.io/docs/e-commerce-javascript-code-examples){:target="_blank”}. diff --git a/src/connections/destinations/catalog/kitemetrics/index.md b/src/connections/destinations/catalog/kitemetrics/index.md index ba92913229..e729c9a1de 100644 --- a/src/connections/destinations/catalog/kitemetrics/index.md +++ b/src/connections/destinations/catalog/kitemetrics/index.md @@ -3,21 +3,18 @@ title: Kitemetrics Destination rewrite: true id: 5ca6a9bcc7781c00018a4580 --- -[Kitemetrics](https://kitemetrics.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides keyword level attribution for Apple Search Ads and associates them with In-App Purchases. Kitemetrics allows you to use automation to easily manage and optimize Apple Search Ads campaigns and bids. +[Kitemetrics](https://kitemetrics.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides keyword level attribution for Apple Search Ads and associates them with In-App Purchases. Kitemetrics allows you to use automation to easily manage and optimize Apple Search Ads campaigns and bids. This destination is maintained by Kitemetrics. For any issues with the destination, [contact the Kitemetrics Support team](mailto:support@kitemetrics.com). -{% include content/beta-note.md %} - - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Kitemetrics" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Kitemetrics Account Settings -> Applications page](https://cloud.kitemetrics.com/applications). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Kitemetrics Account Settings -> Applications page](https://cloud.kitemetrics.com/applications){:target="_blank”}. 4. Once data is flowing from your source to the Kitemetrics destination, you will need to refresh your browser to view the latest data in your Kitemetrics analytics or keywords dashboard. @@ -25,7 +22,7 @@ This destination is maintained by Kitemetrics. For any issues with the destinati If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. -In order to track Apple Search Ads attribution events you will need to include the [Analytics-iAds-Attribution](https://github.com/segmentio/analytics-ios-iads-attribution) middleware library in your iOS source application. +In order to track Apple Search Ads attribution events you will need to include the [Analytics-iAds-Attribution](https://github.com/segmentio/analytics-ios-iads-attribution){:target="_blank”} middleware library in your iOS source application. If you are using Cocoa Pods, ensure the following two lines are included: diff --git a/src/connections/destinations/catalog/klaviyo/images/migrated-dest.png b/src/connections/destinations/catalog/klaviyo/images/migrated-dest.png new file mode 100644 index 0000000000..54244536bc Binary files /dev/null and b/src/connections/destinations/catalog/klaviyo/images/migrated-dest.png differ diff --git a/src/connections/destinations/catalog/klaviyo/images/migrated-settings.png b/src/connections/destinations/catalog/klaviyo/images/migrated-settings.png new file mode 100644 index 0000000000..53bf4f0610 Binary files /dev/null and b/src/connections/destinations/catalog/klaviyo/images/migrated-settings.png differ diff --git a/src/connections/destinations/catalog/klaviyo/index.md b/src/connections/destinations/catalog/klaviyo/index.md index 8aab2e5730..95bcb1a69b 100644 --- a/src/connections/destinations/catalog/klaviyo/index.md +++ b/src/connections/destinations/catalog/klaviyo/index.md @@ -5,6 +5,14 @@ cmode-override: true hide-personas-partial: true id: 54521fd825e721e32a72eec8 --- + +> warning "Segment will deprecate the Klaviyo Classic destination on June 30th, 2024" +> [Klaviyo will deprecate the endpoints used by this destination in June 2024](https://developers.klaviyo.com/en/docs/migrating_from_v1v2_to_the_new_klaviyo_apis){:target="_blank”}. Segment will not update this destination with the new endpoint, but will deprecate the destination. Users who want to send data to Klaviyo should migrate to the Klaviyo (Actions) destination. +> +> Starting on June 30th, 2024, Segment will migrate all Klaviyo classic destinations to the new Klaviyo (Actions) destination. **If you don't have an API key in the destination settings for your classic Klaviyo destination, you will need to take action.** +> +> For more information about this migration, see the [Migrate to the Klaviyo (Actions) destination](#migrate-to-the-klaviyo-actions-destination) documentation. + [Klaviyo](https://www.klaviyo.com){:target="_blank"} is a powerful email platform focused on ecommerce that helps companies make more money. It supports segmentation based on category and event triggers like product bought, page viewed, email engagement, or amount spent. It measures opens, clicks, revenue generated, breakdown of generated revenue based on custom attributes (like campaign type or amount gained per recipient), and provides trend reports, cohort analysis, and subscriber growth @@ -13,13 +21,61 @@ Klaviyo lets you send personalized newsletters, automates triggered emails, prod To configure Klaviyo as an Event Source to get data into your warehouse or other downstream tools, see the [Klaviyo Source](/docs/connections/sources/catalog/cloud-apps/klaviyo/) documentation. -## Getting started +> info "Klaviyo deprecating v1/v2 APIs" +> Klaviyo will deprecate the endpoints used by this destination on June 30, 2024. Segment will not update this destination with the new endpoint. Instead, Segment recommends customers switch to the new [Klaviyo Actions destination](/docs/connections/destinations/catalog/actions-klaviyo/), which already uses the new endpoints. For more information about the migration process, see the [Migrate to the Klaviyo (Actions) destination](#migrate-to-the-klaviyo-actions-destination) documentation. + +## Migrate to the Klaviyo (Actions) destination + +> info "" +> Segment is not deprecating Klaviyo Classic destinations that use a Web Device Mode configuration. Users that have destinations with this configuration **do not need to take any action**. +> +> This migration applies **only** to Klaviyo Classic destinations in Cloud Mode. [Engage users](#engage-specific-migration-information) might need to take additional action. + +Starting on June 20th, 2024, Segment will automatically migrate all classic Klaviyo destinations to the new Klaviyo (Actions) destination. Migrated Klaviyo (Actions) destinations will have the same name as your classic destination, with "Migrated" appended. + +For example, if you named your classic destination "Email Marketing Campaigns", Segment would name your migrated destination "Email Marketing Campaigns Migrated". + +![A screenshot showing a classic and a migrated destination, with a green box around the migrated instance.](images/migrated-dest.png) + +**If you have an API key in your classic destination's Private Key setting and your destination is not connected to a [Journey](/docs/engage/journeys), you do not need to take any action.** + +**If you do not have a Private Key in your destination's settings**, Segment will create your migrated Klaviyo (Actions) destination, create mappings for each event type, and enable the mappings, but will not enable the destination for you. -{% include content/connection-modes.md %} +To enable your new Klaviyo (Actions) destination: +1. Create a new private key by opening Klaviyo's UI and clicking [Account > Settings > API Keys > Create API Key](https://www.klaviyo.com/account#api-keys-tab){:target="_blank"}. +2. Grant the key full access to Klaviyo's Accounts, Campaigns, List, Profiles, Segments, and Subscriptions APIs. +3. Return to Segment and open the destination settings for your migrated Klaviyo destination. +4. Enter the private key into the "API Key" field. +5. Enable your migrated Actions destination. +6. Open the destination settings for your classic Klaviyo destination and disable the destination. +![A screenshot of the Settings page for a migrated Klaviyo Actions destination, with a black outline around the API Key field](images/migrated-settings.png) + +**If your destination is connected to a Journey**, Segment will create your migrated Klaviyo (Actions) destination, but will not enable it for you. All existing Journeys will remain connected to the classic Klaviyo destination. You must [build new Journeys](/docs/engage/journeys/build-journey/) that reference the new, migrated Klaviyo destination. + +Segment will disable all instances of the classic Klaviyo destination in July 2024. + +### Engage-specific migration information + +While using the Klaviyo Classic destination, you could only **add** users to a Klaviyo platform or list. The Klaviyo (Actions) destination has two Destination Actions, [Add Profile to List (Engage)](/docs/connections/destinations/catalog/actions-klaviyo/#add-profile-to-list-engage) and [Remove Profile from List (Engage)](/docs/connections/destinations/catalog/actions-klaviyo/#remove-profile-from-list-engage), which allow you to add **and** remove users from the Klaviyo platform and from lists. + +Segment's migration from the Klaviyo Classic destination to the Klaviyo (Actions) destination was focused on creating a 1-1 mapping between your Classic and Actions destinations, so Segment creates three Actions on your behalf during the migration: +- **Upsert Profile**: This mapping only supports Identify calls. Segment enables this Action by default. +- **Add Profile to List (Engage)**: This mapping only supports Track calls. Segment creates this mapping, but doesn't enable it for you. +- **Remove Profile from List (Engage)**: This mapping only supports Track calls. Segment creates this mapping, but doesn't enable it for you. + +To use the "Add Profile to List (Engage)" and "Remove Users from List (Engage)" Actions: +1. Navigate to your Engage Space and select the Audience connected to your migrated Klaviyo (Actions) destination. +2. Select **Settings**. +3. Enable the **Send Track** setting and disable the **Send Identify** setting under Connection settings and click **Save**. +4. Open your Klaviyo (Actions) destination's Mappings page. +5. Disable your **Upsert Profile** mapping and enable the **Add Profile to List (Engage)** and **Remove Profile from List (Engage)** mappings. + +## Getting started 1. From the Segment web app, click **Catalog**. 2. Search for "Klaviyo" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. Navigate to [Account > Settings > API Keys](https://www.klaviyo.com/account#api-keys-tab){:target="_blank"} in Klaviyo's UI and copy your API Key into the Segment Settings UI. + > info "" > Klaviyo requires the Private API Key to use the List API. You can find this by going to Klaviyo's UI and clicking [Account > Settings > API Keys > Create API Key](https://www.klaviyo.com/account#api-keys-tab){:target="_blank"} to generate a Private API Key and copy it into the Segment Settings UI. @@ -42,7 +98,7 @@ analytics.identify({ When you call `identify` on analytics.js, Segment calls Klaviyo's `identify` with the `traits` object. Segment then augments the `traits` object to have `traits.$id` be the `userId` since Klaviyo takes the user ID on the `traits` object itself. > info "" -> When you send data to Klaviyo using `analytics.js`, an initial `page` call is required. By default, this is already added in your [Segment snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet). +> When you send data to Klaviyo using `analytics.js`, an initial Page call is required. By default, this is already added in your [Segment snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet). In addition to the Page call, you must make an Identify call on each subdomain where you want to track users. Klaviyo sets cookies on the subdomain rather than the top-level domain, making this extra Identify call necessary for tracking. The following Segment spec'd traits map to Klaviyo [special people properties](http://www.klaviyo.com/docs){:target="_blank"}: @@ -79,6 +135,8 @@ If your `userId` is an email, or you provide an email in `traits.email`, Segment #### Enforce email as primary identifier This option is enabled by default to ensure duplicate profiles are not being created inside of Klaviyo. When enabled, Segment will never set the $id field to your `userId` when you call `.identify()` or `.track()`. Instead, Segment will only set $email as the primary identifier with your `traits.email` or `properties.email`. Please note that if you have this setting toggled on, you must send `email` in on your payloads or your events will not go through to Klaviyo. +> info "" +> For the Web Device-mode connection, this option applies **only** to the `.identify()` call. #### Fallback on Anonymous ID @@ -142,12 +200,14 @@ analytics.track({ When you call `track` on `analytics.js`, Segment calls Klaviyo's `track` with the same parameters. +If you include `properties.revenue` in a track event, Segment maps it to Klaviyo's `$value` event. + > info "" > When you're tracking client-side, some Klaviyo events require you send an Identify call before a Track call. ### Server-side Track -When you call make a Track call from one of Segment's mobile or server-side libraries, Segment keys the user with the `userId` and also provides the Klaviyo `$email` `customer_property` if your `userId` is an email, or you provide `email` as one of your event `properties`. +When you make a Track call from one of Segment's mobile or server-side libraries, Segment keys the user with the `userId` and also provides the Klaviyo `$email` `customer_property` if your `userId` is an email, or you provide `email` as one of your event `properties`. Segment also maps the following Segment spec'd properties to Klaviyo's [special people properties](https://developers.klaviyo.com/en/docs/javascript_api#identify-people){:target="_blank"}:. @@ -229,6 +289,6 @@ For user-property destinations, Segment sends an [Identify](/docs/connections/sp > warning "" > For the Klaviyo Destination, avoid using a `list_id` in the Engage Destinations settings. -When you first create an audience, Engage sends an Identify call for every user in that audience. Later audience syncs send updates for users whose membership has changed since the last sync. These syncs allow you to create Klaviyo segments from properties Engage sends to Klaviyo as long as the property's value is `true`. Memberships update continuously as user profiles fall in and out of the eligibility criteria for the Engage audience. +When you first create an audience, Engage sends an Identify call for every user in that audience. Audience syncs send updates for users whose membership has changed since the last sync. These syncs allow you to create Klaviyo segments from properties Engage sends to Klaviyo as long as the property's value is `true`. Memberships update continuously as user profiles fall in and out of the eligibility criteria for the Engage audience. Klaviyo segments aren't automatically created and need to be configured by your team in order to see those audience segments. You can build Klaviyo segments based on the trait key that corresponds to the audience or computed trait which is being included in those user's events sent to Klaviyo. -If Segment detects a `list_id` in the Klaviyo Destination settings, however, it adds users to the Klaviyo list without removing them when they no longer qualify for list membership. As a result, Segment recommends leaving the `list_id` field empty when you set up the Klaviyo Destination. +If Segment detects a `list_id` in the Klaviyo Destination settings, however, it adds users to the Klaviyo list without removing them when they no longer qualify for list membership. As a result, Segment recommends leaving the `list_id` field empty when you set up the Klaviyo Destination. \ No newline at end of file diff --git a/src/connections/destinations/catalog/knowtify/index.md b/src/connections/destinations/catalog/knowtify/index.md index 4834f780f9..712e252235 100644 --- a/src/connections/destinations/catalog/knowtify/index.md +++ b/src/connections/destinations/catalog/knowtify/index.md @@ -6,6 +6,6 @@ title: Knowtify Destination Knowtify supports sending [email events](/docs/connections/spec/email/) to other tools on the Segment platform. These events will be sent as `track` calls to the other destinations you've turned on. -To enable this feature, follow this [link](http://www.knowtify.io/integrations/segment_email_events) and enter in your Writekey. +To enable this feature, follow this [link](http://www.knowtify.io/integrations/segment_email_events){:target="_blank"} and enter in your Writekey. ![Send email events from Knowtify](images/pQTgionViG.png) diff --git a/src/connections/destinations/catalog/koala/index.md b/src/connections/destinations/catalog/koala/index.md deleted file mode 100644 index ac45605b5b..0000000000 --- a/src/connections/destinations/catalog/koala/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Koala Destination' -hidden: true -id: 6230c835c0d6535357ee950d -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/kochava/index.md b/src/connections/destinations/catalog/kochava/index.md index 87f0f4c72b..6efa954d36 100644 --- a/src/connections/destinations/catalog/kochava/index.md +++ b/src/connections/destinations/catalog/kochava/index.md @@ -3,23 +3,23 @@ title: Kochava Destination rewrite: true id: 5695db50e954a874ca44ce63 --- -[Kochava](https://www.kochava.com/) offers mobile app attribution and mobile app analytics providing holistic, unbiased measurement for precise, real-time visualization of app performance through the funnel. +[Kochava](https://www.kochava.com/){:target="_blank"} offers mobile app attribution and mobile app analytics providing holistic, unbiased measurement for precise, real-time visualization of app performance through the funnel. -_**NOTE:** The Segment-Kochava destination is only available to [Kochava paid accounts](https://support.freeappanalytics.com/server-to-server-integration/segment-integration/)._ +_**NOTE:** The Segment-Kochava destination is only available to [Kochava paid accounts](https://support.freeappanalytics.com/server-to-server-integration/segment-integration/){:target="_blank"}._ This destination is maintained by Kochava. For any issues with the destination, [contact the Kochava Support team](mailto:support@kochava.com) ## Getting Started -{% include content/connection-modes.md %} -1. If you have not already, create your app within the Kochava dashboard. Check out Kochava's documentation for information on [creating your app](http://support.kochava.com/create-manage-apps/create-edit-apps). + +1. If you have not already, create your app within the Kochava dashboard. Check out Kochava's documentation for information on [creating your app](http://support.kochava.com/create-manage-apps/create-edit-apps){:target="_blank"}. 2. From your Segment UI's Destinations page click on "Add Destination". 3. Search for "Kochava" in the Catalog, select it, and choose which of your sources to connect the destination to. 4. In the Kochava app, grab your Kochava App GUID (Globally Unique Identifier) 5. Copy the Kochava GUID into the Segment Destinations Settings UI under "API key". -Additional information from Kochava on [setting up your first campaign within Kochava](https://support.kochava.com/campaign-management/create-an-install-campaign). +Additional information from Kochava on [setting up your first campaign within Kochava](https://support.kochava.com/campaign-management/create-an-install-campaign){:target="_blank"}. ## Track @@ -34,7 +34,7 @@ Kochava is able to accommodate any post-install track event that is passed into `context.device.type` (has value of 'ios' or 'android'), `context.device.advertising_id` (IDFA on iOS and adID on Android) **and** `context.device.id` are required in all calls to Kochava. -To automatically collect `context.device.advertising_id`, on Android you must include the Google Mobile Ads component of Google Play services as [described here](https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project), and on iOS you must include the iAd framework. +To automatically collect `context.device.advertising_id`, on Android you must include the Google Mobile Ads component of Google Play services as described in the [Google Play services setup documentation](https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project){:target="_blank"}. On iOS, you must include the [AdSupport and Ad Tracking Transparency frameworks](/docs/connections/sources/catalog/libraries/mobile/ios/#ad-tracking-and-idfa). If making calls outside of Segment's iOS or Android library (eg post-install events sent from a server-side library), you'll need to ensure that you collect and send `context.device.type`, `context.device.advertising_id` **and** `context.device.id`. @@ -60,61 +60,13 @@ Analytics.track( ### Install Attributed Postback -To create a Kochava-Certified Postback that will send campaign information to Segment after attributing an `Application Installed` event, follow [Kochava's Postback set up documentation](https://support.kochava.com/campaign-management/create-a-kochava-certified-postback). - -### Apple Search Ads - -To get iAD attribution data into Kochava, you must include the [analytics-ios-iads-attribution](https://github.com/segmentio/analytics-ios-iads-attribution) dependency and version 3.6.0 or higher of the [Analytics SDK](https://github.com/segmentio/analytics-ios). - -To install it, simply add the following line to your Podfile: - -``` -pod "Analytics" -pod "Analytics-iAds-Attribution" -``` -Then import the header and initialize the configuration: - -``` -#import - -// Initialize the configuration as you would normally. -SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:@"YOUR_WRITE_KEY"]; -... - -// Configure the client with the iAD middleware to attach iAd properties. -configuration.middlewares = @[ [SEGADTracker middleware] ]; +To create a Kochava-Certified Postback that will send campaign information to Segment after attributing an `Application Installed` event, follow [Kochava's Postback set up documentation](https://support.kochava.com/campaign-management/create-a-kochava-certified-postback){:target="_blank"}. -[SEGAnalytics setupWithConfiguration:configuration]; -``` - -When it is able to retrieve iAd information, it will augment all `track` events. The attribution information is transformed to Segment context this way: - -```objc -[analytics track:@"Application Installed", - properties: nil, - options: @{ - @"context" : @{ - @"campaign" : @{ - @"provider" : @"Apple", - @"click_date" : attributionInfo[@"iad-click-date"], - @"conversion_date" : attributionInfo[@"iad-conversion-date"], - @"source" : @"iAd", - @"name" : attributionInfo[@"iad-campaign-name"], - @"content" : attributionInfo[@"iad-keyword"], - @"ad_creative" : attributionInfo[@"iad-org-name"], - @"ad_group" : attributionInfo[@"iad-adgroup-name"], - @"id" : attributionInfo[@"iad-campaign-id"], - @"ad_group_id" : attributionInfo[@"iad-adgroup-id"] - } - } - }]; -``` -Because this information in passed through the context object, this will not be received by other downstream integrations, unless explicitly mapped. Kochava is currently the only integration which supports Apple Search Ads. {% include content/personas.md %} ## Troubleshooting ### advertisingId is string of 0s -This occcurs when the user has limited ad tracking enabled on their iOS mobile device. +This occurs when the user has limited ad tracking enabled on their iOS mobile device. diff --git a/src/connections/destinations/catalog/kubit/index.md b/src/connections/destinations/catalog/kubit/index.md index 4e8d0a2c18..38c61b24a1 100644 --- a/src/connections/destinations/catalog/kubit/index.md +++ b/src/connections/destinations/catalog/kubit/index.md @@ -3,15 +3,15 @@ title: Kubit Destination rewrite: true id: 5d02baa1e63a2e0001117fb2 --- -[Kubit](https://kubit.ai) is an analytics tool which makes deep data discovery and insights accessible for everyone. Kubit Smart Analytics help product people get clear, fast answers about user engagement and retention. When you send your events through Segment, you benefit from Kubit's AI-powered behavioral analytics, diagnostics, and collaborative workspaces. +[Kubit](https://kubit.ai){:target="_blank"} is an analytics tool which makes deep data discovery and insights accessible for everyone. Kubit Smart Analytics help product people get clear, fast answers about user engagement and retention. When you send your events through Segment, you benefit from Kubit's AI-powered behavioral analytics, diagnostics, and collaborative workspaces. This destination is maintained by Kubit. For any issues with the destination, [contact the Kubit Support team](mailto:support@kubit.ai). ## Getting Started -{% include content/connection-modes.md %} -1. On Kubit's [Welcome Page](https://segment.kubit.ai/segment), click on “**Connect to Segment**”. + +1. On Kubit's [Welcome Page](https://segment.kubit.ai/segment){:target="_blank"}, click on “**Connect to Segment**”. ![A screenshot of the Kubit Segment Configuration page.](images/oauth.png) 2. In Segment, select the Source to connect to the Kubit destination. 3. Click **Allow**. diff --git a/src/connections/destinations/catalog/kubric/index.md b/src/connections/destinations/catalog/kubric/index.md index 833f4de598..d0da61f8c9 100644 --- a/src/connections/destinations/catalog/kubric/index.md +++ b/src/connections/destinations/catalog/kubric/index.md @@ -2,7 +2,7 @@ title: Kubric Destination rewrite: true --- -[Kubric](https://kubric.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) allows you to create personalised creatives for your users and deliver them using emails, push-notifications, Facebook & various other channels. +[Kubric](https://kubric.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} allows you to create personalised creatives for your users and deliver them using emails, push-notifications, Facebook & various other channels. This destination is maintained by Kubric. For any issues with the destination, [contact the Kubric Support team](mailto:tom@kubric.io). @@ -11,11 +11,11 @@ This destination is maintained by Kubric. For any issues with the destination, [ ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Kubric" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Kubric dashboard](https://app.kubric.io/profile). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Kubric dashboard](https://app.kubric.io/profile){:target="_blank”}. ## Page diff --git a/src/connections/destinations/catalog/kustomer/index.md b/src/connections/destinations/catalog/kustomer/index.md index 750795ee11..f316128aa6 100644 --- a/src/connections/destinations/catalog/kustomer/index.md +++ b/src/connections/destinations/catalog/kustomer/index.md @@ -1,15 +1,16 @@ --- title: Kustomer Destination rewrite: true +hide-personas-partial: true id: 5c73feeb9947e900010a60ac --- -[Kustomer](https://www.kustomer.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the next-generation customer management platform for the people-first enterprise. It enables support teams to get a holistic view of the customers they are engaging with, resulting in meaningful interactions between businesses and customers. +[Kustomer](https://www.kustomer.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the next-generation customer management platform for the people-first enterprise. It enables support teams to get a holistic view of the customers they are engaging with, resulting in meaningful interactions between businesses and customers. This destination is maintained by Kustomer. For any issues with the destination, [contact the Kustomer Support team](mailto:support@kustomer.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Kustomer" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -31,7 +32,7 @@ analytics.page('Pricing', { }); ``` -Page calls will sent as a `tracking event` to Kustomer on the timeline of the customer who was tracked. If the `kustomer_session_id` is included, it will cluster this tracking event into a single "session" on the customer's timeline. If no `kustomer_session_id` is supplied, we will automatically generate session IDs based on time between tracking events. (Read why Segment doesn't have session tracking [here](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/)). +Page calls will sent as a `tracking event` to Kustomer on the timeline of the customer who was tracked. If the `kustomer_session_id` is included, it will cluster this tracking event into a single "session" on the customer's timeline. If no `kustomer_session_id` is supplied, we will automatically generate session IDs based on time between tracking events. (Read why Segment doesn't have session tracking [here](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/){:target="_blank”}). ## Screen @@ -43,7 +44,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th properties:@{ @"kustomer_session_id": @"abc123" }]; ``` -Screen calls will sent as a `tracking event` to Kustomer on the timeline of the customer who was tracked. If the `kustomer_session_id` is included, it will cluster this tracking event into a single "session" on the customer's timeline. If no `kustomer_session_id` is supplied, we will automatically generate session IDs based on time between tracking events. (Read why Segment doesn't have session tracking [here](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/)). +Screen calls will sent as a `tracking event` to Kustomer on the timeline of the customer who was tracked. If the `kustomer_session_id` is included, it will cluster this tracking event into a single "session" on the customer's timeline. If no `kustomer_session_id` is supplied, we will automatically generate session IDs based on time between tracking events. (Read why Segment doesn't have session tracking [here](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/){:target="_blank”}). ## Identify @@ -77,4 +78,8 @@ analytics.track("Registered", { }); ``` -Track calls will sent as a `tracking event` to Kustomer on the timeline of the customer who was tracked. If the `kustomer_session_id` is included, it will cluster this tracking event into a single "session" on the customer's timeline. If no `kustomer_session_id` is supplied, we will automatically generate session IDs based on time between tracking events. (Read why Segment doesn't have session tracking [here](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/)). +Track calls send as a `tracking event` to Kustomer on the timeline of the customer who was tracked. If the `kustomer_session_id` is included, it clusters this tracking event into a single "session" on the customer's timeline. If no `kustomer_session_id` is supplied, Segment automatically generates session IDs based on time between tracking events. See why [Segment doesn't have session tracking](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/){:target="_blank”}. + + +## Engage limitation +The Kustomer destination only accepts standard properties such as name, email, and phone. It doesn't support custom properties. Any Audience or Computed Trait created in Engage is considered a customer property by Kustomer destination and isn't supported. diff --git a/src/connections/destinations/catalog/lantern/index.md b/src/connections/destinations/catalog/lantern/index.md deleted file mode 100644 index 17ee9b277b..0000000000 --- a/src/connections/destinations/catalog/lantern/index.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Lantern Destination -rewrite: true -redirect_from: '/connections/destinations/catalog/lazy-lantern/' -id: 5d336888e0cb6900011f1188 ---- -[Lantern](https://lantern.so/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides autonomous anomaly detection for all your product metrics. It only takes a minute to enable with Segment, no coding involved. - -Lantern is a user behavior monitoring solution for modern product teams. Lantern alerts you on Slack when something doesn't look right. You get full-coverage over your product and the confidence that you will be notified of any significant variation. - -This destination is maintained by Lantern. For any issues with the destination, contact [Lantern's support](mailto:support@lantern.so). - -## Getting Started - -{% include content/connection-modes.md %} - -### Automated Setup -1. Log into your [Lantern dashboard](https://app.lantern.so). -2. When prompted to add a source, click the Segment logo. -3. Pick a Segment workspace and source. -4. Click "Allow". - -### Manual Setup - -1. From the Segment web app, click **Catalog**. -2. Search for "Lantern" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find by contacting Lantern's support [settings page](https://app.lantern.so). - -### Next Steps - - That's it! Lantern is already at work and will deliver your fist insights in a few hours. - - In the meantime, you can connect your Slack workspace to Lantern by clicking on the "Receive Insights In Slack" button from the Lantern newsfeed page. - - Add more sources to get more insights. Go to Settings -> Sources -> Add Source to repeat the process for additional sources. - - -## Page - -If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: - -```js -analytics.page(); -``` - -Lantern will monitor `page` events and send you alerts when an anomaly occurs (sudden change in level, trend or periodicity of the metric). - - -## Screen - -If you're not familiar with the Segment Specs, take a look to understand what the [Screen method](/docs/connections/spec/screen/) does. An iOS example call would look like: - -```swift -[[SEGAnalytics sharedAnalytics] screen:@"Home"]; -``` - -Lantern will monitor `screen` events and send you alerts when an anomaly occurs (sudden change in level, trend or periodicity of the metric). - - -## Identify - -If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: - -```js -analytics.identify('userId123', { - email: 'john.doe@example.com' -}); -``` - -Lantern does not surface information that links to a user's personal identity. Lantern only analyses the volume of identify calls to detect anomalies related to the total number of unique users and perform various computation over aggregated data. - - -## Track - -If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: - -```js -analytics.track('Products Searched', { - query: 'blue hotpants' -}); -``` - -Lantern will monitor `track` events and send you alerts when an anomaly occurs (sudden change in level, trend or periodicity of the metric). diff --git a/src/connections/destinations/catalog/launchdarkly-events/index.md b/src/connections/destinations/catalog/launchdarkly-events/index.md index ebb844d5f3..f63775f8b7 100644 --- a/src/connections/destinations/catalog/launchdarkly-events/index.md +++ b/src/connections/destinations/catalog/launchdarkly-events/index.md @@ -14,12 +14,12 @@ This destination is maintained by LaunchDarkly. For any issues with the destinat ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for “LaunchDarkly” in the Destinations Catalog, and select the LaunchDarkly destination. 3. Choose which Source should send data to the LaunchDarkly destination. -4. Go to the LaunchDarkly [Account Settings](https://app.launchdarkly.com/settings/projects), and find and copy the client-side ID from your default project. +4. Go to the LaunchDarkly [Account Settings](https://app.launchdarkly.com/settings/projects){:target="_blank"}, and find and copy the client-side ID from your default project. 5. Enter this ID as the **API Key** in the “LaunchDarkly” destination settings in Segment. ## Track @@ -55,7 +55,7 @@ LaunchDarkly ingests that call as: > note "" > **Note**: The LaunchDarkly Metric must be actively recording and have a Feature Flag attached for Segment events to appear in your LaunchDarkly Project. -Segment sends Track calls to LaunchDarkly as a `track` event. It appears on your [Debugger page](https://app.launchdarkly.com/default/production/debugger/goals). +Segment sends Track calls to LaunchDarkly as a `track` event. It appears on your [Debugger page](https://app.launchdarkly.com/default/production/debugger/goals){:target="_blank"}. `track` events map to a Metric if the Segment event name exactly matches the Name of an active LaunchDarkly experiment metric. diff --git a/src/connections/destinations/catalog/leanplum/index.md b/src/connections/destinations/catalog/leanplum/index.md index 69a9675cf3..4f7e8288a5 100644 --- a/src/connections/destinations/catalog/leanplum/index.md +++ b/src/connections/destinations/catalog/leanplum/index.md @@ -3,7 +3,7 @@ title: Leanplum Destination rewrite: true id: 54521fd925e721e32a72eece --- -[Leanplum](https://www.leanplum.com/) helps mobile teams orchestrate multi-channel campaigns — from messaging to the in-app experience — all from a single mobile marketing platform. +[Leanplum](https://www.leanplum.com/){:target="_blank"} helps mobile teams orchestrate multi-channel campaigns — from messaging to the in-app experience — all from a single mobile marketing platform. > success "" > **Good to know**: This page is about the Leanplum Segment destination, which receives data from Segment. There's also a page about the [Leanplum Segment source](/docs/connections/sources/catalog/cloud-apps/leanplum/), which sends data _to_ Segment! @@ -11,7 +11,7 @@ id: 54521fd925e721e32a72eece ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Leanplum" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -32,7 +32,7 @@ CocoaPods is the dependency manager we use for Objective-C projects. If you alre `sudo gem install cocoapods` - For issues with installing CocoaPods, refer [here](https://cocoapods.org/) + For issues with installing CocoaPods, refer [here](https://cocoapods.org/){:target="_blank"} 2. Add a podfile. In your terminal, navigate to your app's directory. Add a podfile to your app by running the following command: @@ -66,7 +66,7 @@ CocoaPods is the dependency manager we use for Objective-C projects. If you alre Make sure to place your Segment Write Key within the code. This block of code also calls for Leanplum start. -For addition documentation you can also check [Leanplum docs](https://support.leanplum.com/hc/en-us/articles/213146343-App-Setup-How-to-integrate-Segment-Leanplum-iOS-). +For addition documentation you can also check [Leanplum docs](https://support.leanplum.com/hc/en-us/articles/213146343-App-Setup-How-to-integrate-Segment-Leanplum-iOS-){:target="_blank"}. ### Android @@ -99,7 +99,7 @@ For addition documentation you can also check [Leanplum docs](https://support.le ``` - If you want to use the advanced features of Leanplum, also add the additional permissions, as described [here](https://www.leanplum.com/docs#/setup/android). + If you want to use the advanced features of Leanplum, also add the additional permissions, as described [here](https://www.leanplum.com/docs#/setup/android){:target="_blank"}. 4. Add the following lines to your Application or Controller: @@ -125,7 +125,7 @@ For addition documentation you can also check [Leanplum docs](https://support.le }); ``` -That's it! Now you can use the Segment SDK and also the [advanced features](https://www.leanplum.com/docs#/docs) of the Leanplum SDK. +That's it! Now you can use the Segment SDK and also the [advanced features](https://www.leanplum.com/docs#/docs){:target="_blank"} of the Leanplum SDK. ## Page @@ -192,7 +192,7 @@ As every analytics provider deals with push notifications and in-app messaging d 7. Configure your app to use push notifications in your app delegate's `applicationDidFinishLaunching` method (you may choose any combination of formats. -You are now ready to send push notifications from your Leanplum UI! If you need some code snippets, [check out the Leanplum docs here](https://www.leanplum.com/docs/ios/messaging#push-notifications). +You are now ready to send push notifications from your Leanplum UI! If you need some code snippets, [check out the Leanplum docs here](https://www.leanplum.com/docs/ios/messaging#push-notifications){:target="_blank"}. #### Android @@ -232,8 +232,8 @@ You are now ready to send push notifications from your Leanplum UI! If you need ``` We've put together two example projects for sending push notifications through GCM and Firebase for you to check out: - - [LP-Segment-GCM-Example](https://github.com/Leanplum/Leanplum-Android-Samples/tree/master/SegmentExample) - - [LP-Segment-Firebase-Example](https://github.com/Leanplum/Leanplum-Android-Samples/tree/master/SegmentExample_Firebase) + - [LP-Segment-GCM-Example](https://github.com/Leanplum/Leanplum-Android-Samples/tree/master/SegmentExample){:target="_blank"} + - [LP-Segment-Firebase-Example](https://github.com/Leanplum/Leanplum-Android-Samples/tree/master/SegmentExample_Firebase){:target="_blank"} ### A/B Testing @@ -263,9 +263,9 @@ As with push notifications, A/B testing variables are dealt with in different wa myShip.moveWithSpeed(shootSpeed?.floatValue()) } ``` -For more information about A/B Testing Variables on iOS in Leanplum, [see their docs](https://www.leanplum.com/docs/ios/variables). +For more information about A/B Testing Variables on iOS in Leanplum, [see their docs](https://www.leanplum.com/docs/ios/variables){:target="_blank"}. -2. If you want to define any other type of data, Boolean, String, Color, Assets, Dictionary, or Array, take a look at [the Leanplum docs here](https://www.leanplum.com/docs/ios/variables#modeling-structured-data) +2. If you want to define any other type of data, Boolean, String, Color, Assets, Dictionary, or Array, take a look at [the Leanplum docs here](https://www.leanplum.com/docs/ios/variables#modeling-structured-data){:target="_blank"} #### Android @@ -286,4 +286,4 @@ For more information about A/B Testing Variables on iOS in Leanplum, [see their }); ``` -For more information about A/B Testing Variables on Android in Leanplum, [see their docs](https://www.leanplum.com/docs#/docs/android). +For more information about A/B Testing Variables on Android in Leanplum, [see their docs](https://www.leanplum.com/docs#/docs/android){:target="_blank"}. diff --git a/src/connections/destinations/catalog/learndot/index.md b/src/connections/destinations/catalog/learndot/index.md index bccbe827fa..9767f3b417 100644 --- a/src/connections/destinations/catalog/learndot/index.md +++ b/src/connections/destinations/catalog/learndot/index.md @@ -3,20 +3,17 @@ title: Learndot Destination rewrite: true id: 5d67475d07d95bd4a7937ea7 --- -[Learndot](https://www.learndot.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a product focussed customer education platform that enables companies to rapidly produce and distribute engaging training content. +[Learndot](https://www.learndot.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a product focussed customer education platform that enables companies to rapidly produce and distribute engaging training content. This destination is maintained by Learndot. For any issues with the destination, [contact the Learndot Support team](mailto:help@learndot.com). -{% include content/beta-note.md %} - - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Learndot" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Learndot admin](https://admin.learndotx.com/settings). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Learndot admin](https://admin.learndotx.com/settings){:target="_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/linkedin-audiences/index.md b/src/connections/destinations/catalog/linkedin-audiences/index.md deleted file mode 100644 index 615a40900c..0000000000 --- a/src/connections/destinations/catalog/linkedin-audiences/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'LinkedIn Audiences Destination' -hidden: true -id: 62f435d1d311567bd5bf0e8d -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/linkedin-insight-tag/index.md b/src/connections/destinations/catalog/linkedin-insight-tag/index.md index 0536864d60..1d3a73f5de 100644 --- a/src/connections/destinations/catalog/linkedin-insight-tag/index.md +++ b/src/connections/destinations/catalog/linkedin-insight-tag/index.md @@ -17,11 +17,11 @@ Here's how to get started with the LinkedIn Insight Tag! ### **1. Log into the LinkedIn Campaign Manager.** If you don't have a LinkedIn business account, sign up for one now. -Once that's complete, go to the [LinkedIn Marketing Solutions page](https://business.linkedin.com/marketing-solutions/ads). From the **Advertising** dropdown menu, select **Sign in to Campaign Manager**. +Once that's complete, go to the [LinkedIn Marketing Solutions page](https://business.linkedin.com/marketing-solutions/ads){:target="_blank"}. From the **Advertising** dropdown menu, select **Sign in to Campaign Manager**. Click the account name for which you'd like to set up website retargeting, conversion tracking, or website demographics. -### **2. [Create an Ad Account](https://www.linkedin.com/ad/accounts).** +### **2. [Create an Ad Account](https://www.linkedin.com/ad/accounts){:target="_blank"}.** ![A screenshot of the Linkedin Campaign manager accounts page.](images/w53Sm6Jpg3.png) @@ -53,3 +53,7 @@ From there, click **Configure LinkedIn Insight Tag** and select the source for w ![A screenshot of the Settings page for the LinkedIn Insight Tag destination.](images/Nmad4zYvWy.png) Select that option and paste in the LinkedIn Data Partner ID that you copied earlier. Click **Save**, then click **Activate Destination**. Our servers build the latest CDN for that source, and the LinkedIn Insight Tag loads on the sites that use that source's Segment snippet! + +## Conversion tracking + +Segment's LinkedIn Insight Tag destination is fairly unique in that all Segment does is load the LinkedIn scripts onto your website for you so you can call methods directly without having to add the script tags yourself. Any special conversion tracking needs to be done within your LinkedIn workspace as you normally would if you were setting up LinkedIn without Segment. diff --git a/src/connections/destinations/catalog/listrak-actions/index.md b/src/connections/destinations/catalog/listrak-actions/index.md new file mode 100644 index 0000000000..b2f0f41a74 --- /dev/null +++ b/src/connections/destinations/catalog/listrak-actions/index.md @@ -0,0 +1,9 @@ +--- +title: Listrak (Actions) Destination +hidden: false +id: 64b6a221baf168a989be641a +published: false +beta: true +private: false + +--- diff --git a/src/connections/destinations/catalog/liveintent-audiences/index.md b/src/connections/destinations/catalog/liveintent-audiences/index.md index 2a8f46b8b1..1f56c0768c 100644 --- a/src/connections/destinations/catalog/liveintent-audiences/index.md +++ b/src/connections/destinations/catalog/liveintent-audiences/index.md @@ -14,7 +14,7 @@ LiveIntent maintains this destination. For more information about this destinati ## Getting Started -{% include content/connection-modes.md %} + Before getting started, you need to request an API Key and AppId by sending an email to LiveIntent support at `support@liveintent.com`. diff --git a/src/connections/destinations/catalog/localytics/index.md b/src/connections/destinations/catalog/localytics/index.md index 246593ab78..7825f3d1a1 100644 --- a/src/connections/destinations/catalog/localytics/index.md +++ b/src/connections/destinations/catalog/localytics/index.md @@ -4,8 +4,8 @@ id: 54521fd925e721e32a72eed0 --- Our Localytics mobile destination code is open sourced on GitHub. Feel free to check it out: -[iOS](https://github.com/segment-integrations/analytics-ios-integration-localytics), -[Android](https://github.com/segment-integrations/analytics-android-integration-localytics). +[iOS](https://github.com/segment-integrations/analytics-ios-integration-localytics){:target="_blank"}, +[Android](https://github.com/segment-integrations/analytics-android-integration-localytics){:target="_blank"}. ## Getting Started @@ -20,7 +20,7 @@ you can include a `localytics.xml` file in your Android project's `res/values` folder to define your settings. Note that any settings entered in the Segment UI will override the equivalent values defined in your `localytics.xml` file. You can read more about the `localytics.xml` file in [Localytics's documentation -here](https://docs.localytics.com/dev/android.html#include-localytics-xml-file). +here](https://docs.localytics.com/dev/android.html#include-localytics-xml-file){:target="_blank"}. Including a settings xml file in conjunction with a Segment-Localytics iOS SDK is not yet supported. @@ -29,13 +29,7 @@ is not yet supported. [iOS](/docs/connections/sources/catalog/libraries/mobile/ios/)/[Android](/docs/connections/sources/catalog/libraries/mobile/android/) or [React Native](/docs/connections/sources/catalog/libraries/mobile/react-native/)), with the Localytics SDKs [bundled](/docs/connections/spec/mobile-packaging-sdks/) in order to send data to Localytics. You must also add the Maven Localytics repo (since Localytics doesn't publish it on Maven Central). You can see an example of how to add that -[here](https://github.com/segment-integrations/analytics-android-integration-localytics/blob/master/build.gradle#L44). - -### React Native set up - -{% include content/react-dest.md %} - -- - - +[here](https://github.com/segment-integrations/analytics-android-integration-localytics/blob/master/build.gradle#L44){:target="_blank"}. ## Identify @@ -59,7 +53,7 @@ Push notifications on Android require a bit of extra work to setup. more information about bundled integrations in our [Android documentation](/docs/connections/sources/catalog/libraries/mobile/android/#about-mobile-connection-modes). * Follow Localytics' documentation to [set up the permission in your - AndroidManifest.xml](http://docs.localytics.com/dev/android.html#modify-androidmanifest-push-android). + AndroidManifest.xml](http://docs.localytics.com/dev/android.html#modify-androidmanifest-push-android){:target="_blank"}. Specifically, the **AndroidManifest** changes regarding the `GcmReceiver`, `GcmListenerService`, `InstanceIDListenerServer`, and `PushTrackingActivity` classes. diff --git a/src/connections/destinations/catalog/logrocket/index.md b/src/connections/destinations/catalog/logrocket/index.md deleted file mode 100644 index 1544222446..0000000000 --- a/src/connections/destinations/catalog/logrocket/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'LogRocket Destination' -hidden: true -id: 635ada35ce269dbe305203ff -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/lou/index.md b/src/connections/destinations/catalog/lou/index.md index 635ae88bf0..93aba3fb4a 100644 --- a/src/connections/destinations/catalog/lou/index.md +++ b/src/connections/destinations/catalog/lou/index.md @@ -3,18 +3,18 @@ title: Lou Destination rewrite: true id: 5fac1adf1aa5eb4a01168950 --- -[Lou](https://wwww.louassist.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) turns new users into power users with self-serve onboarding, personalized product tours, and feature announcements. Launch in just minutes with no dev time required. +[Lou](https://wwww.louassist.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} turns new users into power users with self-serve onboarding, personalized product tours, and feature announcements. Launch in just minutes with no dev time required. This destination is maintained by Lou. For any issues with the destination, [contact the Lou Support team](mailto:support@louassist.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Lou" in the Destinations Catalog, and select the Lou destination. 3. Choose which Source should send data to the Lou destination. -4. Go to the [Lou dashboard](https://dashboard.louassist.com/integrations), add Segment as a new integration, and click **Generate API Key** +4. Go to the [Lou dashboard](https://dashboard.louassist.com/integrations){:target="_blank”}, add Segment as a new integration, and click **Generate API Key** 5. Enter the "API Key" in the Lou destination settings in Segment. ## Identify @@ -28,9 +28,9 @@ analytics.identify('userId123', { }); ``` -Segment sends traits in Identify calls to Lou as properties that can be used in [Custom Segments](https://dashboard.louassist.com/segments) to group users into different audiences. +Segment sends traits in Identify calls to Lou as properties that can be used in [Custom Segments](https://dashboard.louassist.com/segments){:target="_blank”} to group users into different audiences. -Lou does not accept any personally identifiable information (PII) fields from Identify calls. These fields are automatically filtered out so they do not reach Lou's servers. For a full list of PII fields that Lou removes from Identify calls, see [Lou's Segment integration documentation](https://www.louassist.com/docs/integrations/segment). +Lou does not accept any personally identifiable information (PII) fields from Identify calls. These fields are automatically filtered out so they do not reach Lou's servers. For a full list of PII fields that Lou removes from Identify calls, see [Lou's Segment integration documentation](https://www.louassist.com/docs/integrations/segment){:target="_blank”}. ## Track @@ -40,4 +40,4 @@ If you aren't familiar with the Segment Spec, take a look at the [Track method d analytics.track('Login Button Clicked') ``` -Segment sends Track calls to Lou as Events that can be used to define [Goals](https://dashboard.louassist.com/goals). +Segment sends Track calls to Lou as Events that can be used to define [Goals](https://dashboard.louassist.com/goals){:target="_blank”}. diff --git a/src/connections/destinations/catalog/lucky-orange/index.md b/src/connections/destinations/catalog/lucky-orange/index.md index 6f247af51e..c8409f29d8 100644 --- a/src/connections/destinations/catalog/lucky-orange/index.md +++ b/src/connections/destinations/catalog/lucky-orange/index.md @@ -8,7 +8,7 @@ id: 54521fd925e721e32a72eed1 > The Lucky Orange Destination supports [Lucky Orange Classic](https://classic.luckyorange.com/){:target="_blank"} only. Support for the new [Lucky Orange](https://www.luckyorange.com/){:target="_blank"} is not available at this time. -[Lucky Orange](https://www.luckyorange.com/) lets you quickly see who is on your site and interact with them in many ways. With Lucky Orange, you can chat with visitors on your site, actually watch their mouse move around the screen and click in real time, play them back as recording, generate beautiful heat maps of clicks, mouse movements (eye tracking), and scroll depth, create quick insightful polls, and more. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-lucky-orange). +[Lucky Orange](https://www.luckyorange.com/){:target="_blank"} lets you quickly see who is on your site and interact with them in many ways. With Lucky Orange, you can chat with visitors on your site, actually watch their mouse move around the screen and click in real time, play them back as recording, generate beautiful heat maps of clicks, mouse movements (eye tracking), and scroll depth, create quick insightful polls, and more. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-lucky-orange){:target="_blank"}. ## Getting Started diff --git a/src/connections/destinations/catalog/lumen/index.md b/src/connections/destinations/catalog/lumen/index.md index 7e836cc4b9..b3d4d2dcde 100644 --- a/src/connections/destinations/catalog/lumen/index.md +++ b/src/connections/destinations/catalog/lumen/index.md @@ -1,7 +1,57 @@ --- -title: 'Lumen Destination' -hidden: true +title: Lumen Destination id: 6241edffa0c775e9f59b7cab -published: false beta: true --- + +[Lumen](https://uselumen.co/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} helps companies engage the right customers with ease via data-driven messaging through push notifications, SMS, and emails to meet business and marketing objectives. + +From drip campaigns, special coupon offers, growth hacking, activating inactive customers and more, Lumen does the heavy lifting while you focus on other business operations. + + +Lumen maintains this destination. For any issues with the destination, [contact the Lumen Support team](mailto:hello@uselumen.co). + + + +## Getting Started + + + + +1. From the Destinations catalog page in the Segment App, click **Add Destination**. +2. Search for **Lumen** and select the **Lumen** destination. +3. Choose which Source should send data to the Lumen destination. +4. Go to the [Lumen dashboard](https://app.uselumen.co){:target="_blank"} and navigate to the API tab on the settings page. +5. Copy the API key. +6. Go back to Segment and paste the API Key in the Lumen destination settings. + +## Supported methods + +Lumen supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). + +### Identify + +Send [Identify](/docs/connections/spec/identify) calls to create or update a user's record. The `userId` becomes the user's primary identifier. + +```js +analytics.identify('userId123', { + email: 'john.doe@example.com' +}); +``` + +If the identifier doesn't exist, a new user record is created. If the identifier already exist, Segment updates the user record. For example: + +Segment sends Identify calls to Lumen as an `identify` event. + + +### Track + +Send [Track](/docs/connections/spec/track) calls to track a user's activity or action. For example: + +```js +analytics.track('Login Button Clicked') +``` + +Segment sends Track calls to Lumen as a `track` event. + +--- diff --git a/src/connections/destinations/catalog/lytics/index.md b/src/connections/destinations/catalog/lytics/index.md index 8e7810c733..acdb17d7e7 100644 --- a/src/connections/destinations/catalog/lytics/index.md +++ b/src/connections/destinations/catalog/lytics/index.md @@ -21,4 +21,4 @@ Paste into your Destination page: ## Features -You can see what [data fields Lytics pulls in by default](https://admin.lytics.io/#/documentation/jstag). +You can see what [data fields Lytics pulls in by default](https://admin.lytics.io/#/documentation/jstag){:target="_blank"}. diff --git a/src/connections/destinations/catalog/mabl/index.md b/src/connections/destinations/catalog/mabl/index.md index a41e748672..30f9dcc80a 100644 --- a/src/connections/destinations/catalog/mabl/index.md +++ b/src/connections/destinations/catalog/mabl/index.md @@ -3,22 +3,20 @@ rewrite: true title: Mabl Destination id: 5cdc9409f9de1d00017e3e3f --- -Only [mabl](https://mabl.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) offers scriptless cross-browser web testing, auto-healing tests, visual testing, and diagnostics in one simple service. mabl helps you improve the speed and quality of your release pipeline by allowing you to test every release, at scale, on a single platform, with no infrastructure to manage. +Only [mabl](https://mabl.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} offers scriptless cross-browser web testing, auto-healing tests, visual testing, and diagnostics in one simple service. mabl helps you improve the speed and quality of your release pipeline by allowing you to test every release, at scale, on a single platform, with no infrastructure to manage. This destination is maintained by mabl. For any issues with the destination, [contact the Mabl Support team](mailto:support@mabl.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "mabl" in the Destinations Catalog, and select the mabl destination. 3. Choose which Source should send data to the mabl destination. -4. Go to the [mabl api settings page](https://app.mabl.com/workspaces/-/settings/apis) (or navigate in the mabl app to **Settings > APIs**), find and copy the API key. +4. Go to the [mabl api settings page](https://app.mabl.com/workspaces/-/settings/apis){:target="_blank"} (or navigate in the mabl app to **Settings > APIs**), find and copy the API key. 5. Enter the API Key in the mabl destination settings in Segment. mabl processes the usage data into rolling 24 hour summaries, every hour. It can take up to an hour for usage to appear in your test coverage metrics. @@ -30,7 +28,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th ``` analytics.page() ``` -Page calls are used by mabl to build a model of the pages in your app and determine the number of unique users interacting with each page. Page calls are particularly useful because they can help inform mabl's model of a page's URL patterns. You can find this information in your workspace's [coverage page](https://app.mabl.com/workspaces/-/coverage) under the "Daily Users" column. +Page calls are used by mabl to build a model of the pages in your app and determine the number of unique users interacting with each page. Page calls are particularly useful because they can help inform mabl's model of a page's URL patterns. You can find this information in your workspace's [coverage page](https://app.mabl.com/workspaces/-/coverage){:target="_blank"} under the "Daily Users" column. ## Track @@ -41,4 +39,4 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.track('Clicked Login Button') ``` -Track calls are used by mabl to build a model of the pages in your app and determine the number of unique users interacting with each page. You can find this information in your workspace's [coverage page](https://app.mabl.com/workspaces/-/coverage) under the "Daily Users" column. +Track calls are used by mabl to build a model of the pages in your app and determine the number of unique users interacting with each page. You can find this information in your workspace's [coverage page](https://app.mabl.com/workspaces/-/coverage){:target="_blank"} under the "Daily Users" column. diff --git a/src/connections/destinations/catalog/madkudu/index.md b/src/connections/destinations/catalog/madkudu/index.md index 5c14a02116..8075dbc442 100644 --- a/src/connections/destinations/catalog/madkudu/index.md +++ b/src/connections/destinations/catalog/madkudu/index.md @@ -34,4 +34,4 @@ These events are enriched with other data, aggregated, and pushed to appropriate ## Questions? -More details available on [MadKudu's website](http://www.madkudu.com/) or email [hello@madkudu.com](mailto:hello@madkudu.com). +More details available on [MadKudu's website](http://www.madkudu.com/){:target="_blank"} or email [hello@madkudu.com](mailto:hello@madkudu.com). diff --git a/src/connections/destinations/catalog/mailchimp/index.md b/src/connections/destinations/catalog/mailchimp/index.md index c831fea8c6..033a1fbc16 100644 --- a/src/connections/destinations/catalog/mailchimp/index.md +++ b/src/connections/destinations/catalog/mailchimp/index.md @@ -9,7 +9,7 @@ id: 54521fd925e721e32a72eed3 ## Getting started -{% include content/connection-modes.md %} + 1. From the Segment web app, navigate to **Connections > Catalog** and go to the **Destinations** tab of the catalog. 2. Search for *Mailchimp*, select it, and click **Configure Mailchimp**. diff --git a/src/connections/destinations/catalog/mailmodo/index.md b/src/connections/destinations/catalog/mailmodo/index.md index 41f65761c0..8c6fdec7a2 100644 --- a/src/connections/destinations/catalog/mailmodo/index.md +++ b/src/connections/destinations/catalog/mailmodo/index.md @@ -12,7 +12,7 @@ Mailmodo maintains this destination. For any issues with the destination, [conta ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **Mailmodo** in the Destinations Catalog, and select the **Mailmodo** destination. diff --git a/src/connections/destinations/catalog/mammoth/index.md b/src/connections/destinations/catalog/mammoth/index.md index f596d63edf..348a09e6cd 100644 --- a/src/connections/destinations/catalog/mammoth/index.md +++ b/src/connections/destinations/catalog/mammoth/index.md @@ -3,20 +3,18 @@ rewrite: true title: Mammoth Destination id: 5cd3f02701645a0001cf49a0 --- -[Mammoth](https://mammoth.io/integrations/segment/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides self-serve analytics for analysts, businesses, and developers who can use Mammoth's data warehousing, data discovery & data preparation abilities to arrive at insights. +[Mammoth](https://mammoth.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides self-serve analytics for analysts, businesses, and developers who can use Mammoth's data warehousing, data discovery & data preparation abilities to arrive at insights. Mammoth allows you to blend your data from Segment with other sources of data such as databases and files. Using Mammoth, you can build multiple data pipelines, which are constructed by applying transforms through a no coding interface. Mammoth also allows for the visual discovery of the data and easy exports to databases such as MySQL, Elasticsearch, and PostgreSQL. -This destination is maintained by [Mammoth](https://mammoth.io). For any issues with Mammoth Destination, [contact the Mammoth Support team](mailto:support@mammoth.io). - -{% include content/beta-note.md %} +This destination is maintained by [Mammoth](https://mammoth.io){:target="_blank"}. For any issues with Mammoth Destination, [contact the Mammoth Support team](mailto:support@mammoth.io). ## Getting Started -{% include content/connection-modes.md %} -There are three steps to get started using Mammoth with Segment. First, [register for an account with Mammoth](https://mammoth.io/register/choose/starter). + +There are three steps to get started using Mammoth with Segment. First, [register for an demo with Mammoth](https://mammoth.io/book-a-demo/){:target="_blank"}. 1. Create a webhook dataset in Mammoth, and copy the API key. 2. Connect Segment to Mammoth. @@ -28,7 +26,7 @@ There are three steps to get started using Mammoth with Segment. First, [registe Mammoth Segment destination requires that you have a dataset on Mammoth's side. There are multiple types of datasets you can add. You should add a webhook type of dataset in Mammoth for your Segment integration. -1. Log in to [app.mammoth.io](https://app.mammoth.io). +1. Log in to [app.mammoth.io](https://app.mammoth.io){:target="_blank"}. 2. First, create a new "webhooks" dataset. If you already have a dataset, click the green button in the data library, then click the **Webhooks** option. If you don't have any datasets in your account yet, the data library shows a button to add a webhook dataset on the data library itself. Click that. @@ -59,7 +57,7 @@ Once you are configured according to the previous steps, data flows into Mammoth 2. Select the dataset and click **Open**. The default View on the dataset appears. Look for one column of data called **JSON**. 4. Now we want to flatten the JSON data. Open the *ADD TASK* menu and click **Extract from JSON**. -5. Use the *Extract from JSON* task as needed to flatten the data. *Extract from JSON* task automatically suggests the correct options, and all you need to do is hit *Apply*. You can read more about the [Extract from JSON task here](https://mammoth.io/docs/content/feature_guide/tasks/json.extract.html). +5. Use the *Extract from JSON* task as needed to flatten the data. *Extract from JSON* task automatically suggests the correct options, and all you need to do is hit *Apply*. You can read more about the [Extract from JSON task here](https://mammoth.io/docs/content/feature_guide/tasks/json.extract.html){:target="_blank"}. 6. You may need to apply the *Extract from JSON* task multiple times if the data is nested. Mammoth automatically refreshes the data about once an hour. You can also click **REFRESH** at any time to sync data immediately. diff --git a/src/connections/destinations/catalog/marketo-static-lists/index.md b/src/connections/destinations/catalog/marketo-static-lists/index.md index 420a002100..5888cd85d9 100644 --- a/src/connections/destinations/catalog/marketo-static-lists/index.md +++ b/src/connections/destinations/catalog/marketo-static-lists/index.md @@ -4,6 +4,14 @@ hide-boilerplate: true strat: adobe id: 5b73515e6170785a5e62978c --- + +> warning "Deprecation Notice" +> This destination has been deprecated. Segment created an instance of the [Marketo Static Lists (Actions)](/docs/connections/destinations/catalog/actions-marketo-static-lists/) destination for each properly configured version of the Personas Marketo Static Lists classic destination in your workspace. Settings and configurations have been migrated automatically. If your Personas Marketo Static List destination is connected to a Journey, [create a new version of your Journey](/docs/engage/journeys/build-journey/#working-with-a-published-journey) to replace the Personas destination with the new Actions destination. +> +> Segment disabled all existing Personas Marketo Static List destinations, except those connected to a Journey instance. You can still access your existing configuration, but you will not be able to make changes to it. You will also no longer be able to create new instances of Personas Marketo Static Lists. Please refer to [Marketo Static Lists (Actions)](/docs/connections/destinations/catalog/actions-marketo-static-lists/) to set up a new instance of Marketo Static Lists. +> +> For questions or issues contact [friends@segment.com](mailto:friends@segment.com). + > info "Marketo vs Marketo Static Lists Destinations" > This page is about the **Marketo Static Lists** destination developed specifically for use with Engage. Marketo has strict API usage limits on the [main Marketo destination](/docs/connections/destinations/catalog/marketo-v2/), so although the main destination can receive events from Engage, use the Marketo *Static Lists* destination with Engage instead. @@ -34,7 +42,8 @@ Every time you create an audience in Engage and connect it to Marketo Static Lis 1. Creates a list with the same name as the Engage audience in the folder designated for Engage. 2. Adds any users to that list who both fit the audience definition and have an email address. 3. If a user has multiple email addresses on their identity graph, each email address becomes a unique entry on the list. -4. After the audience is configured, Segment checks which users still fit the audience definition, and adds or removes users from the audience. +4. After the audience is configured, Segment evaluates which users meet the audience criteria, updating the audience and list, by adding or removing users accordingly. + {% include content/sync-frequency-note.md %} ## Configuring Marketo Static Lists diff --git a/src/connections/destinations/catalog/marketo-v2/index.md b/src/connections/destinations/catalog/marketo-v2/index.md index c77599fa84..c920e292d0 100644 --- a/src/connections/destinations/catalog/marketo-v2/index.md +++ b/src/connections/destinations/catalog/marketo-v2/index.md @@ -10,7 +10,7 @@ To start sending data to Marketo, there are two things you must do. **Both of th ### Enter your Marketo Credentials into your Destination settings We'll need your Munchkin Account ID, Client Secret, and Client ID. -To get your Munchkin Account ID [login to your Marketo account](https://login.marketo.com/), click Admin in the top right corner, then click Munchkin on the left side bar. +To get your Munchkin Account ID [login to your Marketo account](https://login.marketo.com/){:target="_blank"}, click Admin in the top right corner, then click Munchkin on the left side bar. ![A screenshot of a Marketo account.](images/iL42ERv0g5X+.png) @@ -60,10 +60,10 @@ Next, create a Service and get Client Secret and Client ID from that Service. ## Identify ### Cloud-mode -When you call [`Identify`](/docs/connections/spec/identify/) in Cloud-mode, Segment uses [Marketo's REST API](http://developers.marketo.com/rest-api/lead-database/leads/#create_and_update) to create and update leads server-side. +When you call [`Identify`](/docs/connections/spec/identify/) in Cloud-mode, Segment uses [Marketo's REST API](http://developers.marketo.com/rest-api/lead-database/leads/#create_and_update){:target="_blank"} to create and update leads server-side. ### Device-mode -When you call [`Identify`](/docs/connections/spec/identify/) in Device-mode, Segment uses [Marketo's Background Form Submission](https://developers.marketo.com/blog/make-a-marketo-form-submission-in-the-background/) to create and update leads client-side. +When you call [`Identify`](/docs/connections/spec/identify/) in Device-mode, Segment uses [Marketo's Background Form Submission](https://developers.marketo.com/blog/make-a-marketo-form-submission-in-the-background/){:target="_blank"} to create and update leads client-side. There are additional steps you must take to send `.identify()` calls in Device-mode. @@ -71,6 +71,9 @@ There are additional steps you must take to send `.identify()` calls in Device-m 2. Input the associated **Marketo Form ID** and **Marketo Form URL** in your Marketo V2 Destination settings. This information can be found in Form Actions > Embed Code in the Marketo Design Studio: ![A screenshot of the Embed Code popup in Marketo.](images/form-info.png) +> info "" +> **Marketo Form ID** and **Marketo Form URL** are **required** fields for the Marketo SDK to initialize on your site. If these fields are left blank, the SDK will not initialize and data will not be sent downstream. + ### Traits Regardless of connection mode, we'll map the following spec'd Segment traits to Marketo's standard fields: @@ -122,7 +125,7 @@ If you'd like any other traits from your `.identify()` call to update a field in ## Track -When you call [`Track`](/docs/connections/spec/track/), Segment maps the event to a pre-defined [Marketo Custom Activity](http://docs.marketo.com/display/public/DOCS/Understanding+Custom+Activities). There are two important things to note when sending `.track()` calls to Marketo: +When you call [`Track`](/docs/connections/spec/track/), Segment maps the event to a pre-defined [Marketo Custom Activity](http://docs.marketo.com/display/public/DOCS/Understanding+Custom+Activities){:target="_blank"}. There are two important things to note when sending `.track()` calls to Marketo: 1. You **must** map them to your Marketo Custom Activities in your Destination Settings. If you do not map a track call to a Custom Activity in your Destination Settings, we will not send the event to Marketo to help limit the amount of API calls made to Marketo. @@ -146,7 +149,7 @@ Analytics.track( ![A screenshot of the Destination Settings page in Segment for the Marketo v2 Destination.](images/c2l53wGTCVP+.png) - **Segment Event Name**. Your Segment Event name. -- **Marketo Activity ID**. When you are in [Marketo Custom Activities](http://docs.marketo.com/display/public/DOCS/Understanding+Custom+Activities), click on the Marketo Activity in the right side bar that you'd like to map your Segment Track event to. Copy and paste the ID into your Destination Settings. +- **Marketo Activity ID**. When you are in [Marketo Custom Activities](http://docs.marketo.com/display/public/DOCS/Understanding+Custom+Activities){:target="_blank"}, click on the Marketo Activity in the right side bar that you'd like to map your Segment Track event to. Copy and paste the ID into your Destination Settings. ![A screenshot of the Marketo Custom Activities page.](images/cwZqHwQfs3M+.png) - **Segment Property Name**. The name of the property in your `.track()` call. This is case sensitive so make sure the name matches exactly how you are passing it in your `.track()` call. @@ -161,7 +164,7 @@ Analytics.track( ## Page -When you call [`Page`](/docs/connections/spec/page/), Segment uses [Marketo's Munchkin.js `visitWebPage` method](http://developers.marketo.com/javascript-api/lead-tracking/api-reference/#munchkin_visitwebpage). The URL is built from your `.page()` event and properties object into the form Marketo expects, so no need to worry about doing that yourself. +When you call [`Page`](/docs/connections/spec/page/), Segment uses [Marketo's Munchkin.js `visitWebPage` method](http://developers.marketo.com/javascript-api/lead-tracking/api-reference/#munchkin_visitwebpage){:target="_blank"}. The URL is built from your `.page()` event and properties object into the form Marketo expects, so no need to worry about doing that yourself. Marketo's `visitWebPage` method requires a URL and a user agent. Any calls that are missing either of these fields will not be sent to Marketo. User agent is automatically collected Client-side but if you are sending `.page()` calls from the server, make sure to set the user agent. @@ -207,7 +210,7 @@ We do our best to limit the amount of API calls that we are making to Marketo bu firstName: 'Alex' }, integrations: { - 'Marketo': false, + 'Marketo V2': false, 'Google Analytics': true } }) @@ -234,7 +237,7 @@ You can do one of the following to prevent duplicate leads: To upload a list to Marketo, when you are in Lead Database, click All Leads. Then click "New", then "Import List" from the drop down. Select your CSV, then click "Next". Make sure "Email Address" and "userId" are the Marketo Fields selected then click "Next". Name your list or select a pre-existing list. Select "None" for Acquisition Program. Then Click "Import". -2. Manually merge leads in Marketo. Follow [these instructions to merge](http://docs.marketo.com/display/public/DOCS/Find+and+Merge+Duplicate+People) any duplicate leads found in Marketo after enabling the destination. +2. Manually merge leads in Marketo. Follow [these instructions to merge](http://docs.marketo.com/display/public/DOCS/Find+and+Merge+Duplicate+People){:target="_blank"} any duplicate leads found in Marketo after enabling the destination. 3. Make sure to call identify first. This is already a recommended best practice as [part of our spec](/docs/connections/spec/identify/). 4. Pass an email in your `.track()` and `.page()` calls. @@ -258,3 +261,17 @@ There are a few necessary steps that have to be taken to migrate from Segment's ![A screenshot of the Marketo Custom Activities field.](images/cg6YhDEPWXv+.png) 6. When enabling Marketo V2, because of the way Marketo's API works, there is potential to create duplicate leads, especially when the first enabling the destination. For ways to prevent this, check out the Preventing Duplicate Leads. + +## Send a single source's data to multiple Marketo V2 workspaces + +Segment doesn't support multiple instances of Marketo V2 for any source in Segment (for both Device-Mode and Cloud-Mode). If you need a single source's data sent to multiple Marketo V2 workspaces, follow the instructions on configuring a [Repeater destination](/docs/connections/destinations/catalog/repeater/) to route your source's data through the Repeater destination into a new source and new Marketo V2 destination instance. +To create a Repeater destination, new source, and second Marketo V2 destination: + +1. Create and connect a new [Repeater destination](https://app.segment.com/goto-my-workspace/destinations/catalog/repeater) to your source and select the intended source. +2. Click **Add destination**, name the destination, and select Fill in settings manually. +4. Create a new source, then navigate to **Settings > API Keys** and copy the **Write Key** value. +- From the Repeater destination's **Settings** page, you'll find **Write Keys** in the **Connection Settings**. This is where your second source's write key from step 4 will go. +5. Navigate back to your Repeater destination and paste in the source's `writeKey` into the write key setting. +6. Add a Marketo V2 destination to your new source with the desired configuration settings. +7. Enable the Repeater destination, new source, new Marketo V2 destination. +8. You'll begin seeing data transmitted from your originating source to the Repeater Destination (Event Delivery), then to the new source (Debugger), and finally to the Marketo V2 destination (Event Delivery). diff --git a/src/connections/destinations/catalog/marketo/index.md b/src/connections/destinations/catalog/marketo/index.md index c17832ee1c..0012bc552e 100644 --- a/src/connections/destinations/catalog/marketo/index.md +++ b/src/connections/destinations/catalog/marketo/index.md @@ -15,7 +15,7 @@ Our client-side and server-side destinations each require **different** credenti ## Page and Track -For [`Page`](/docs/connections/spec/page/) or [`Track`](/docs/connections/spec/track/) methods, Segment uses [Marketo's Munchkin.js `visitWebPage` method](http://developers.marketo.com/javascript-api/lead-tracking/api-reference/#munchkin_visitwebpage). The URL is built from the Segment event and properties object into the form Marketo expects, so no need to worry about doing that yourself. +For [`Page`](/docs/connections/spec/page/) or [`Track`](/docs/connections/spec/track/) methods, Segment uses [Marketo's Munchkin.js `visitWebPage` method](http://developers.marketo.com/javascript-api/lead-tracking/api-reference/#munchkin_visitwebpage){:target="_blank"}. The URL is built from the Segment event and properties object into the form Marketo expects, so no need to worry about doing that yourself. To associate Track events to a particular Lead in Marketo from a server side library, you will need to pass the Munchkin.js cookie with your track calls. @@ -23,7 +23,7 @@ To associate Track events to a particular Lead in Marketo from a server side lib ### Client-side -When you call [`identify`](/docs/connections/spec/identify/) on Analytics.js, we call Marketo's [`associateLead`](http://developers.marketo.com/documentation/websites/lead-tracking-munchkin-js/). Marketo **requires an email address** for this function, so if the `traits` object you include in [`identify`](/docs/connections/spec/identify/) doesn't have an email, the request won't go through. Marketo's client-side library, [Munchkin](http://developers.marketo.com/documentation/websites/lead-tracking-munchkin-js/), **requires your API private key** for authentication along with your email, so make sure that you have provided it in your Segment settings. We will not change the casing of traits on client-side identify calls. +When you call [`identify`](/docs/connections/spec/identify/) on Analytics.js, we call Marketo's [`associateLead`](http://developers.marketo.com/documentation/websites/lead-tracking-munchkin-js/){:target="_blank"}. Marketo **requires an email address** for this function, so if the `traits` object you include in [`identify`](/docs/connections/spec/identify/) doesn't have an email, the request won't go through. Marketo's client-side library, [Munchkin](http://developers.marketo.com/documentation/websites/lead-tracking-munchkin-js/){:target="_blank"}, **requires your API private key** for authentication along with your email, so make sure that you have provided it in your Segment settings. We will not change the casing of traits on client-side identify calls. ```javascript analytics.identify('1234', { @@ -114,10 +114,10 @@ Analytics.track( ) ``` -For more information about syncronising your Marketo leads, [visit their documentation](http://developers.marketo.com/documentation/soap/synclead/). +For more information about syncronising your Marketo leads, [visit their documentation](http://developers.marketo.com/documentation/soap/synclead/){:target="_blank"}. ### Custom Fields -To create a custom field in Marketo, follow Marketo's [documentation for creating a custom field](http://docs.marketo.com/display/public/DOCS/Create+a+Custom+Field+in+Marketo). Be sure that the **API Name** is `PascalCase`'d, as our destination will account for Marketo's Pascal trait standards. +To create a custom field in Marketo, follow Marketo's [documentation for creating a custom field](http://docs.marketo.com/display/public/DOCS/Create+a+Custom+Field+in+Marketo){:target="_blank"}. Be sure that the **API Name** is `PascalCase`'d, as our destination will account for Marketo's Pascal trait standards. For instance, if you configure `SomeTrait` in the **API Name** field (the **Name** value does not matter), you can pass in this field as `someTrait`, and we will convert this to `SomeTrait` when sending into Marketo. Note that if you configured **API Name** to be `someTrait`, and passed it in as `someTrait` in your call, this would fail to send. diff --git a/src/connections/destinations/catalog/markettailor/index.md b/src/connections/destinations/catalog/markettailor/index.md index 390aa01c4c..a2bddd655f 100644 --- a/src/connections/destinations/catalog/markettailor/index.md +++ b/src/connections/destinations/catalog/markettailor/index.md @@ -3,17 +3,17 @@ title: Markettailor destination rewrite: true id: 6096714984bdd26c427c9250 --- -[Markettailor](https://www.markettailor.io/), helps B2B marketers create personalized websites without code, leveraging company data, audience insights, and recommendations. +[Markettailor](https://www.markettailor.io/){:target="_blank"}, helps B2B marketers create personalized websites without code, leveraging company data, audience insights, and recommendations. Markettailor maintains this destination. For any issues with the destination, contact the Markettailor Support team. ## Getting Started -{% include content/connection-modes.md %} + 1. From the destinations catalog page in the Segment App, click **Add destination**. 2. Search for “Markettailor” in the destinations Catalog, and select the Markettailor destination. 3. Choose which Source should send data to the Markettailor destination. -4. Go to the [Markettailor Integrations page](https://app.markettailor.io/integrations), find the Segment integration, click **Authorize**, and copy the API key. +4. Go to the [Markettailor Integrations page](https://app.markettailor.io/integrations){:target="_blank"}, find the Segment integration, click **Authorize**, and copy the API key. 5. Enter the API Key in the Markettailor destination settings in Segment. ## Supported methods diff --git a/src/connections/destinations/catalog/matcha/index.md b/src/connections/destinations/catalog/matcha/index.md index 1e07897836..8f22840d3c 100644 --- a/src/connections/destinations/catalog/matcha/index.md +++ b/src/connections/destinations/catalog/matcha/index.md @@ -9,7 +9,7 @@ This destination is maintained by Matcha. For any issues with the destination, [ ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **Matcha** in the Destinations Catalog, and select the **Matcha** destination. diff --git a/src/connections/destinations/catalog/matomo/index.md b/src/connections/destinations/catalog/matomo/index.md index aa3379b220..05fd9b04a1 100644 --- a/src/connections/destinations/catalog/matomo/index.md +++ b/src/connections/destinations/catalog/matomo/index.md @@ -4,14 +4,14 @@ rewrite: true redirect_from: '/connections/destinations/catalog/piwik/' id: 54521fda25e721e32a72eee7 --- -[Matomo](https://matomo.org/), formerly Piwik, is the leading open source web analytics platform that gives you valuable insights into your website's visitors, your marketing campaigns and much more, so you can optimize your strategy and online experience of your visitors. +[Matomo](https://matomo.org/){:target="_blank"}, formerly Piwik, is the leading open source web analytics platform that gives you valuable insights into your website's visitors, your marketing campaigns and much more, so you can optimize your strategy and online experience of your visitors. Segment’s Matomo destination code is open-source and can be viewed on GitHub: - [Javascript](https://github.com/segmentio/analytics.js-integrations/blob/master/integrations/piwik/lib/index.js){:target="_blank"} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Matomo" in the Catalog, select it, and choose which of your sources to connect the destination to. Note the source must be sending events using our JavaScript library Analytics.js. @@ -93,7 +93,7 @@ For **Event Value** you can name the event property `value` or `revenue`. We'll ## Best Pratices -Matomo allows you to set [custom variables](http://matomo.org/docs/custom-variables/) with your pageviews and events. With Segment, you can set page-scoped custom variables with any `track` call you make with analytics.js. +Matomo allows you to set [custom variables](http://matomo.org/docs/custom-variables/){:target="_blank"} with your pageviews and events. With Segment, you can set page-scoped custom variables with any `track` call you make with analytics.js. Since these custom variables must be mapped to an index you define, which can change from call to call, the only way we can support these custom variables with full flexibility is to allow you to pass your map in the `context.Matomo.customVars` dictionary of each call. diff --git a/src/connections/destinations/catalog/maxia/index.md b/src/connections/destinations/catalog/maxia/index.md index 9b83df7cf0..93111cbe20 100644 --- a/src/connections/destinations/catalog/maxia/index.md +++ b/src/connections/destinations/catalog/maxia/index.md @@ -5,7 +5,7 @@ published: false hidden: true --- -[Maxia](https://www.maxia.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is an AI service that helps businesses with sales and marketing. With Maxia, you can build models that predict conversion, churn, and more - and get those predictions inside of the tools your company is already using: CRMs, Marketing Automation, Customer Success Software, and more. +[Maxia](https://www.maxia.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an AI service that helps businesses with sales and marketing. With Maxia, you can build models that predict conversion, churn, and more - and get those predictions inside of the tools your company is already using: CRMs, Marketing Automation, Customer Success Software, and more. This destination is maintained by Maxia. For any issues with the destination, [contact the Maxia Support team](mailto:support@maxia.ai). @@ -13,14 +13,14 @@ This destination is maintained by Maxia. For any issues with the destination, [c ## Getting Started -{% include content/connection-modes.md %} -1. Login to [Segment](https://app.segment.com/) and navigate to the Destinations catalog page. + +1. Login to [Segment](https://app.segment.com/){:target="_blank"} and navigate to the Destinations catalog page. 2. Search for and select "Maxia" in the Destinations Catalog. 3. Choose which Source should send data to the Maxia destination. -4. Login to [Maxia](https://app.maxia.ai/), and create a Warehouse for your Segment Data. +4. Login to [Maxia](https://app.maxia.ai/){:target="_blank"}, and create a Warehouse for your Segment Data. 5. Complete an onboarding call with the Maxia team to discuss your AI model and unlock your API key. -6. Copy the "API key" from [Maxia](https://app.maxia.ai/) and enter it in the Maxia destination settings in [Segment](https://app.segment.com/). +6. Copy the "API key" from [Maxia](https://app.maxia.ai/){:target="_blank"} and enter it in the Maxia destination settings in [Segment](https://app.segment.com/){:target="_blank"}. ## Segment Data diff --git a/src/connections/destinations/catalog/metacx/index.md b/src/connections/destinations/catalog/metacx/index.md index 6406dc7d75..55b2eae1d7 100644 --- a/src/connections/destinations/catalog/metacx/index.md +++ b/src/connections/destinations/catalog/metacx/index.md @@ -3,7 +3,7 @@ rewrite: true title: MetaCX Destination --- -[MetaCX](https://www.metacx.com) is a digital success layer that brings suppliers and buyers of SaaS together for better collaboration and outcome management, offering real-time visibility into customer success. +[MetaCX](https://www.metacx.com){:target="_blank"} is a digital success layer that brings suppliers and buyers of SaaS together for better collaboration and outcome management, offering real-time visibility into customer success. This destination is maintained by MetaCX. For any issues with the destination, contact their [success team](mailto:support@metacx.com). @@ -11,11 +11,11 @@ This destination is maintained by MetaCX. For any issues with the destination, c ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "MetaCX" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Segment IO connection](https://app.metacx.com/app/connections). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Segment IO connection](https://app.metacx.com/app/connections){:target="_blank"}. 4. If you do not already have a Segment IO connection, create one by clicking the Add Connection button at the bottom right of the page. diff --git a/src/connections/destinations/catalog/metricstory/index.md b/src/connections/destinations/catalog/metricstory/index.md new file mode 100644 index 0000000000..39f5bfea32 --- /dev/null +++ b/src/connections/destinations/catalog/metricstory/index.md @@ -0,0 +1,44 @@ +--- +title: MetricStory Destination +id: 65e8b496eec9c40dbccbf749 +beta: true +--- + +[MetricStory](https://www.metricstory.ai){:target="_blank”} lets you run AI on your product analytics, create and generate charts, and analyze data in minutes. + +MetricStoryAI maintains this destination. For any issues with the destination, contact the [MetricStory support team](support@metricstory.ai). + +## Getting started + +1. From the Destination catalog page in the Segment app, search for MetricStory. +2. Select and click **Add Destination**. +3. Select an existing source to connect to. +4. Go to the [API Keys](https://www.app.metricstory.ai/account/apikeys){:target="_blank"} page in MetricStory.ai. +5. Copy your API key +6. Enter the API key in the destination settings in Segment. + +## Supported methods +MetricStory supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). + +### Page +The Page method triggers a call to Segment's `page` method which lets users query drop off in the funnel. + +```js +analytics.page() +``` + +### Identify +The Identify call identifies users for tracking purposes within MetricStory. MetricStory uses this data to group users together in cohorts, track individual user data, and more. + +```js +analytics.identify('userId123', { + email: 'john.doe@example.com' +}); +``` + +### Track +MetricStory uses this data to understand how users are interacting with apps and lets users query data with AI through the events. + +```js +analytics.track('Login Button Clicked') +``` diff --git a/src/connections/destinations/catalog/millennial-media/index.md b/src/connections/destinations/catalog/millennial-media/index.md index 440ede0e5a..2bfe85b04a 100644 --- a/src/connections/destinations/catalog/millennial-media/index.md +++ b/src/connections/destinations/catalog/millennial-media/index.md @@ -8,4 +8,4 @@ You'll need to map from the Segment event name to the Millennial Media Pixel ID ### Getting your Pixel ID -We built this destination off [this documentation](http://docs.millennialmedia.com/conversion-tracking/S2S/mobile-web.html) refer to that or let us know if you have any questions! +We built this destination off [this documentation](http://docs.millennialmedia.com/conversion-tracking/S2S/mobile-web.html){:target="_blank"} refer to that or let us know if you have any questions! diff --git a/src/connections/destinations/catalog/mixpanel/index.md b/src/connections/destinations/catalog/mixpanel/index.md index 1421167bb3..ea42425582 100644 --- a/src/connections/destinations/catalog/mixpanel/index.md +++ b/src/connections/destinations/catalog/mixpanel/index.md @@ -4,7 +4,7 @@ hide-cmodes: true hide-personas-partial: true id: 54521fd925e721e32a72eed6 --- -[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is an event tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. +[Mixpanel](https://mixpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an event tracking and segmentation platform for your web and mobile apps. By analyzing the actions your users perform, you can gain a better understanding to drive retention, engagement, and conversion. The client-side Mixpanel Destination code is open-source. Segment's Mixpanel destination code is open source and available on GitHub. You can view these repositories: - [Analytics.js in Device-mode](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/mixpanel){:target="_blank"} @@ -15,17 +15,13 @@ Segment's Mixpanel destination code is open source and available on GitHub. You ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment app Destinations page click on **Add Destination**. 2. Search for Mixpanel in the Destinations Catalog and confirm the Source to connect to. 3. Copy your Mixpanel "API Secret" and "Token", and paste them into the Connection Settings in Segment. 4. Enable the destination to start sending your data to Mixpanel. -### Adding device-mode SDKs to React Native - -{% include content/react-dest.md %} - ## Page If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: @@ -53,7 +49,6 @@ When you use the Mixpanel destination in Cloud-mode, Segment sends events for ea When you use the Mixpanel destination in Device-mode, Segment prioritizes the options to prevent duplicate calls as follows: - - If you select "Track all Pages to Mixpanel", all `page` calls regardless of how you have customized it will send a `Loaded A Page`. Even if you have the other options enabled, Segment sends this call to prevent double counting your pageviews. - If you select "Track Categorized Pages to Mixpanel", Segment sends a `Viewed [category] Page` event. @@ -79,7 +74,7 @@ analytics.identify('userId123', { The first thing you'll want to do is to identify your users so Mixpanel knows who they are. You'll use the Identify method to accomplish this which takes the unique `userId` of a user and any `traits` you know about them. > info "" -> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/360039133851#enable-id-merge){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are _not_ using this setting, use the instructions below. +> **Important:** Mixpanel used to require that you call `alias` in all libraries to connect anonymous visitors to identified users. However, with the release of Mixpanel's new [Identity Merge feature](https://help.mixpanel.com/hc/en-us/articles/9648680824852#introduction){:target="_blank"} this is no longer necessary. To enable ID Merge, go to your Mixpanel Settings Dashboard, navigate to **Project Settings > Identity Merge** and enable the setting from that screen. If you are _not_ using this setting, use the instructions below. As soon as you have a `userId` for a visitor that was previously anonymous you'll need to [`alias`](/docs/connections/spec/alias/) their old anonymous `id` to the new `userId`. In Mixpanel only **one** anonymous user history can be merged to **one** identified user. For that reason you should only call `alias` once, right after a user registered, but before the first `identify`. @@ -126,6 +121,8 @@ Mixpanel supports multiple definitions of groups. For more information see [Mixp If the group call **does not** have a group trait that matches the Group Identifier Traits setting, then the event will be ignored. +If you'd like to connect a track call to a group call in Mixpanel, send the group's ID as a property on the track call named `$group_id`. + ### Group using Device-mode When you use Analytics.js, you must set a `userId` value, or Mixpanel will ignore Group calls. @@ -365,9 +362,9 @@ analytics.identify({ ### UTM Campaign Parameters -Since Segment's client-side javascript library (`analytics.js`) loads `mixpanel.js` in the background, you'll get the exact same functionality of Mixpanel around UTM Campaign Parameters as you would when using Mixpanel directly. +When used in Device Mode through a web source, Segment's client-side Javascript library, Analytics.js, loads `mixpanel.js` (Mixpanel’s direct SDK) in the background. As a result, you'll get the exact same functionality from Mixpanel around UTM Campaign Parameters as you would when using Mixpanel directly. -[Read more in Mixpanel's UTM docs](https://mixpanel.com/help/questions/articles/can-i-track-google-analytics-style-utm-tags-with-mixpanel) +[Read more in Mixpanel's UTM docs](https://mixpanel.com/help/questions/articles/can-i-track-google-analytics-style-utm-tags-with-mixpanel){:target="_blank"} In order to pass UTM parameters server-side, you can either pass properties or traits of `utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, and `utm_term` in your track and identify calls, or pass them in your `context` object, for example: @@ -421,7 +418,16 @@ Remember, Segment sends one event per `page` call. ### Incrementing properties -To increment at the property level, tell Segment which properties you want to increment using the **Properties to increment** setting and Segment calls Mixpanel's `increment` for you when you attach a number to the property (for example, `'items purchased': 5`) +To increment at the property level, tell Segment which properties you want to increment using the **Properties to increment** setting and Segment calls Mixpanel's `increment` for you when you attach a number to the property. For example, you need to increment the following property: + +```javascript +analytics.track('Event Name', { +feedback_day_number: 1 +} +); +``` + +Enter the `propertyname: _feedback_day_number_` in the destination settings. The property value now increases from 1. ### Reset Mixpanel Cookies @@ -484,6 +490,20 @@ If you're testing in Xcode remember you must first background the app, then the ## Appendices + +### Distinct ID + +In Device-mode, when a `distinct_id` is present in the browser, it is automatically sent to Mixpanel. In Cloud-mode, the `distinct_id` is set to Segment's `userId` if one is present. If there is no `userId` on the payload, `anonymousId` is set instead. + + +### Insert ID + +`$insert_id` is only available for cloud events. For the Mixpanel (Legacy) destination, Segment generates `$insert_id` from the messageId, event name, and Mixpanel namespace constant using the [uuidv5](https://developer.hashicorp.com/terraform/language/functions/uuidv5) function: +```javascript +const insertId = uuidv5(`${messageId}:${projectId}:${eventName}`, MIXPANEL_NAMESPACE) +``` + + ### IP If an `ip` property is passed to Mixpanel, the value will be interpreted as the IP address of the request and therefore automatically parsed into Mixpanel geolocation properties (City, Country, Region). After that IP address has been parsed, they will throw out the IP address and only hold onto those resulting geolocation properties. As such, if you want to display an IP address as a property within the Mixpanel UI or within raw data, you will simply want to slightly modify the naming convention for that property. @@ -681,3 +701,7 @@ If you delete an audience or trait in Segment, it isn't deleted from Mixpanel. T **If a user has multiple external ids in Segment, what happens when they enter an audience or have a computed trait?** Segment sends an `identify` or a `track` call for each external on the user's account. For example, if a user has three email addresses, and you are sending `identify` calls for your audience, Engage sends three `identify` calls to Mixpanel and adds the latest email address to the user profile as the email “address of record” on the Mixpanel user profile. + +**What happens if I receive a `Timestamp must be within the last 5 years` error, and my timestamp displays `1970-01-01`?** + +The Segment PHP Library (2.1.0) version requires a UNIX timestamp. If you send anything other than a UNIX timestamp, Segment converts this to the `1970-01-01` timestamp. If you're experiencing failed events due to this error and you have a connected PHP source, update your PHP Library version to 2.1.0. diff --git a/src/connections/destinations/catalog/modern-pricing/index.md b/src/connections/destinations/catalog/modern-pricing/index.md index b84538a82d..425053b221 100644 --- a/src/connections/destinations/catalog/modern-pricing/index.md +++ b/src/connections/destinations/catalog/modern-pricing/index.md @@ -6,18 +6,18 @@ id: 5d65e2aa4da0623cbe367a05 hidden: true published: false --- -[Modern Pricing](https://modernpricing.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides intelligent, real-time pricing recommendations for every potential customer visiting your web application. +[Modern Pricing](https://modernpricing.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides intelligent, real-time pricing recommendations for every potential customer visiting your web application. This destination is maintained by Modern Pricing. For any issues with the destination, [contact the Modern Pricing Support team](mailto:john@modernpricing.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Modern Pricing" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "Base64 Decoded Key" into your Segment Settings UI which you can find from your Modern Pricing [API Credentials](https://modernpricing.com/login) page. Note: You must click on the active API Key Value to view the Base64 Decoded Key. +3. Enter the "Base64 Decoded Key" into your Segment Settings UI which you can find from your Modern Pricing [API Credentials](https://modernpricing.com/login){:target="_blank"} page. Note: You must click on the active API Key Value to view the Base64 Decoded Key. ## Page diff --git a/src/connections/destinations/catalog/moengage/index.md b/src/connections/destinations/catalog/moengage/index.md index 6341e099b8..f67549c4ae 100644 --- a/src/connections/destinations/catalog/moengage/index.md +++ b/src/connections/destinations/catalog/moengage/index.md @@ -44,7 +44,7 @@ users it'll be instantaneous! Segment-MoEngage Integration is a bundled integrat ![segment_settings.png](images/segment_settings.png) ## Identify -Use [Identify](/docs/connections/sources/catalog/libraries/mobile/android/#identify){:target="_blank"} to track user-specific attributes. This is the same as tracking [user attributes](https://help.moengage.com/hc/en-us/articles/360044285511-User-Profile){:target="_blank"} on MoEngage. MoEngage supports traits supported by Segment as well as custom traits. If you set `traits.id`, MoEngage sets that as the Unique ID for that user. +Use [Identify](/docs/connections/sources/catalog/libraries/mobile/android/#identify) to track user-specific attributes. This is the same as tracking [user attributes](https://help.moengage.com/hc/en-us/articles/360044285511-User-Profile){:target="_blank"} on MoEngage. MoEngage supports traits supported by Segment as well as custom traits. If you set `traits.id`, MoEngage sets that as the Unique ID for that user. > info "" > MoEngage supports anonymous identifiers in Device-mode only. If you use the MoEngage destination in Cloud-mode, use a known user identifier. @@ -59,7 +59,7 @@ analytics.identify('12090000-00001992', { ``` ## Track -Use [track](/docs/connections/sources/catalog/libraries/mobile/android/#track){:target="_blank"} to track events and user behavior in your app. +Use [track](/docs/connections/sources/catalog/libraries/mobile/android/#track) to track events and user behavior in your app. ```javascript analytics.track('Article Completed', { @@ -71,7 +71,7 @@ analytics.track('Article Completed', { This will send the event to MoEngage with the associated properties. Tracking events is essential and will help you create segments for engaging users. ## Reset -If your app or website supports the ability for a user to logout and login with a new identity, then you'll need to call [reset](/docs/sources/website/analytics.js/#reset-logout){:target="_blank"} method in `analytics.js`. +If your app or website supports the ability for a user to logout and login with a new identity, then you'll need to call [reset](/docs/sources/website/analytics.js/#reset-logout) method in `analytics.js`. ```javascript analytics.reset(); @@ -540,8 +540,7 @@ While updating the MoEngage settings on the Segment Dashboard, you can enable th ## MoEngage Web SDK Features For information about optional features, see the documentation below: -* [Configure opt in type](https://help.moengage.com/hc/en-us/articles/210224063-Configure-Web-Push-Settings#configure-web-push-opt-in-0-6 -){:target="_blank"} +* [Configure opt in type](https://help.moengage.com/hc/en-us/articles/210224063-Configure-Web-Push-Settings#configure-web-push-opt-in-0-6){:target="_blank"} * [Self-handled opt-ins](https://developers.moengage.com/hc/en-us/articles/360061219351-Configure-Self-Handled-Opt-In){:target="_blank"} * [SDK callbacks](https://developers.moengage.com/hc/en-us/articles/4401950701076-Opted-Out-Users){:target="_blank"} diff --git a/src/connections/destinations/catalog/moesif-api-analytics/index.md b/src/connections/destinations/catalog/moesif-api-analytics/index.md index 1d71c0f7e8..25fb77e42b 100644 --- a/src/connections/destinations/catalog/moesif-api-analytics/index.md +++ b/src/connections/destinations/catalog/moesif-api-analytics/index.md @@ -3,20 +3,20 @@ rewrite: true title: Moesif API Analytics Destination id: 5ce828fe272bf500019d9dbc --- -[Moesif API Analytics](https://www.moesif.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps you drive API adoption, usage, and retention. With Moesif, track your customer journey from initial ad click to first API call while identifying at-risk customers struggling to integrate with your APIs. +[Moesif API Analytics](https://www.moesif.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps you drive API adoption, usage, and retention. With Moesif, track your customer journey from initial ad click to first API call while identifying at-risk customers struggling to integrate with your APIs. -The [Moesif SDKs and API gateway plugins](https://www.moesif.com/implementation?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) are open-source and support REST, GraphQL, and other APIs. +The [Moesif SDKs and API gateway plugins](https://www.moesif.com/implementation?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} are open-source and support REST, GraphQL, and other APIs. This destination is maintained by Moesif. For any issues with the destination, [contact the Moesif team](mailto:support@moesif.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Moesif" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. Enter the Moesif "API Key" into the destinations settings in the Segment App. You can find these by going to - your [Moesif account](https://www.moesif.com) and navigating to the extensions settings. + your [Moesif account](https://www.moesif.com){:target="_blank"} and navigating to the extensions settings. 4. Once integrated, Segment data shows up in Moesif in a few seconds. > tip "" @@ -38,7 +38,7 @@ analytics.identify('userId123', { }); ``` -Segment sends `identify()` calls to Moesif as [user updates](https://www.moesif.com/docs/getting-started/users/#the-update-user-endpoint?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) which you can see in the _Users_ section in Moesif. If you set `traits.company.id` on the user, Moesif associates them with a company. The integration maps user fields as follows: +Segment sends `identify()` calls to Moesif as [user updates](https://www.moesif.com/docs/getting-started/users/#the-update-user-endpoint?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} which you can see in the _Users_ section in Moesif. If you set `traits.company.id` on the user, Moesif associates them with a company. The integration maps user fields as follows: |Segment Field|Moesif Field| |-------------|------------| @@ -55,7 +55,7 @@ If you haven't had a chance to review our spec, take a look tounderstand what th analytics.track('Login Button Clicked') ``` -Segment sends `track()` calls to Moesif as [user actions](https://www.moesif.com/docs/getting-started/user-actions/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) which you can see in the _Events_ section in Moesif. The integration maps event fields as follows: +Segment sends `track()` calls to Moesif as [user actions](https://www.moesif.com/docs/getting-started/user-actions/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} which you can see in the _Events_ section in Moesif. The integration maps event fields as follows: |Segment Field|Moesif Field| |-------------|------------| diff --git a/src/connections/destinations/catalog/mouseflow/index.md b/src/connections/destinations/catalog/mouseflow/index.md index d5bab422d3..04563ba469 100644 --- a/src/connections/destinations/catalog/mouseflow/index.md +++ b/src/connections/destinations/catalog/mouseflow/index.md @@ -3,15 +3,15 @@ rewrite: true title: Mouseflow Destination id: 54521fd925e721e32a72eeda --- -[Mouseflow](https://mouseflow.com/) is a session replay and heatmap tool that shows how visitors click, move, scroll, browse, and pay attention on websites. It helps clients simplify their analytics to make decisions that matter. The `analytics.js` Mouseflow Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-mouseflow). +[Mouseflow](https://mouseflow.com/){:target="_blank"} is a session replay and heatmap tool that shows how visitors click, move, scroll, browse, and pay attention on websites. It helps clients simplify their analytics to make decisions that matter. The `analytics.js` Mouseflow Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-mouseflow){:target="_blank"}s. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Mouseflow" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the destination settings, enter your Site ID within the Segment Settings UI. You can find this in [your Mouseflow UI](http://help.mouseflow.com/knowledge_base/topics/how-do-i-find-my-mouseflow-site-id). +3. In the destination settings, enter your Site ID within the Segment Settings UI. You can find this in [your Mouseflow UI](http://help.mouseflow.com/knowledge_base/topics/how-do-i-find-my-mouseflow-site-id){:target="_blank"}. Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading the Mouseflow snippet on your page and sending data. @@ -21,7 +21,7 @@ If you're not familiar with the Segment Specs, take a look to understand what th ``` analytics.page() ``` -An initial `page` call is required for data to be sent to Mouseflow using Analytics.js and sends a page view. This is included by default in your [Segment snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet). +An initial `page` call is required for data to be sent to Mouseflow using Analytics.js and sends a page view. This is included by default in your [Segment snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet){:target="_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/movable-ink/index.md b/src/connections/destinations/catalog/movable-ink/index.md index 1921068bdb..5bdb1521b6 100644 --- a/src/connections/destinations/catalog/movable-ink/index.md +++ b/src/connections/destinations/catalog/movable-ink/index.md @@ -2,16 +2,17 @@ rewrite: true title: Movable Ink Destination id: 5a611c86c0ff800001f6c431 +hidden: true --- -[Movable Ink](https://movableink.com/) lets email marketers deliver jaw-dropping customer experiences. Our cloud-based software activates any data to generate intelligent content at the moment of open. +[Movable Ink](https://movableink.com/){:target="_blank"} lets email marketers deliver jaw-dropping customer experiences. Our cloud-based software activates any data to generate intelligent content at the moment of open. -This destination is maintained by [Movable Ink](https://movableink.com/). If you have any issues, contact Movable Ink at support@movableink.com. +This destination is maintained by [Movable Ink](https://movableink.com/){:target="_blank"}. If you have any issues, contact Movable Ink at support@movableink.com. {% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + Perform the following steps to get started with Segment's Movable Ink destination: 1. Ensure you have an active Movable Ink account. diff --git a/src/connections/destinations/catalog/msg91/index.md b/src/connections/destinations/catalog/msg91/index.md index 26d02369a9..1287924ece 100644 --- a/src/connections/destinations/catalog/msg91/index.md +++ b/src/connections/destinations/catalog/msg91/index.md @@ -3,7 +3,7 @@ rewrite: true title: MSG91 Destination --- -[MSG91](https://msg91.com/) provides SMS marketing/transactional automation for businesses. With Segment you can send SMS with a single call. +[MSG91](https://msg91.com/){:target="_blank"} provides SMS marketing/transactional automation for businesses. With Segment you can send SMS with a single call. This destination is maintained by MSG91. For any issues with the destination, [contact the MSG91 Support team](mailto:support@msg91.com). @@ -12,13 +12,13 @@ This destination is maintained by MSG91. For any issues with the destination, [c ## Getting Started -{% include content/connection-modes.md %} + 1. From your Segment UI's Destinations page click on "Add Destination". 2. Search for "MSG91" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [MSG91 dashboard](https://control.msg91.com/signin/) in the API page using the 'API' option in the sidebar. It's recommended that you create a brand new API key for the Segment destination. +3. Enter the "API Key" into your Segment Settings UI which you can find from your [MSG91 dashboard](https://control.msg91.com/signin/){:target="_blank"} in the API page using the 'API' option in the sidebar. It's recommended that you create a brand new API key for the Segment destination. ## Identify @@ -103,7 +103,7 @@ Track calls will be sent to MSG91 as a `Send SMS` event. ## Troubleshooting -You can check [MSG91's API doc](https://docs.msg91.com/collection/msg91-api-integration/5/send-sms/T26A6X72) to read more about APIs and also test and create API from there. +You can check [MSG91's API doc](https://docs.msg91.com/collection/msg91-api-integration/5/send-sms/T26A6X72){:target="_blank"} to read more about APIs and also test and create API from there. ### Not seeing events? @@ -118,13 +118,12 @@ Make sure you send the following properties/ traits to send SMS. }, ``` -| **Property/ Trait** | **Type** | **Description** | +| Property/ Trait | Type | Description | | --- | --- | --- | -| `phone` | Number | Phone number with coutry code, on which you want to send SMS: `167554321`, `918818888758` +| `phone` | Number | Phone number with country code, on which you want to send SMS: `167554321`, `918818888758` | `firstName` | String | First name of SMS receiver | | `message` | String | SMS content you want to get delivered on mobile number. | -| `senderID` | String | Identity which will display on mobile when SMS received. Also depeded upon [country rule](https://help.msg91.com/article/53-sender-id-in-various-countries)| +| `senderID` | String | Identity which will display on mobile when SMS received. Also dependent upon [country rule](https://help.msg91.com/article/53-sender-id-in-various-countries){:target="_blank"} | -For more parameters, visit [MSG91 API doc](https://docs.msg91.com/collection/msg91-api-integration/5/send-sms/T26A6X72) -) +For more parameters, visit [MSG91 API doc](https://docs.msg91.com/collection/msg91-api-integration/5/send-sms/T26A6X72){:target="_blank"} diff --git a/src/connections/destinations/catalog/mutiny/index.md b/src/connections/destinations/catalog/mutiny/index.md index 0a3a3211dc..7c827eb68f 100644 --- a/src/connections/destinations/catalog/mutiny/index.md +++ b/src/connections/destinations/catalog/mutiny/index.md @@ -3,18 +3,18 @@ rewrite: true title: Mutiny Destination id: 5c6edab8037dcf00014f8f9b --- -[Mutiny](https://mutinyhq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) allows you to personalize your website content based on customer's activity and 3rd party data. By integrating with [Segment](https://segment.com), you can easily and accurately track conversions and integrate 1st party data for personalization with Mutiny. +[Mutiny](https://mutinyhq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} allows you to personalize your website content based on customer's activity and 3rd party data. By integrating with [Segment](https://segment.com){:target="_blank"}, you can easily and accurately track conversions and integrate 1st party data for personalization with Mutiny. This destination is maintained by Mutiny. For any issues with the destination, [contact the Mutiny Support team](mailto:mutinylovesyou@mutinyhq.com). ## Getting Started -{% include content/connection-modes.md %} + To set up Mutiny to receive Segment data: 1. From your Segment Project's Destinations page click on "Add Destination". 2. Search for "Mutiny" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the destination settings, enter your personal "API Key" into Segment's Mutiny integration settings panel UI, which you can find from your [Mutiny dashboard](https://app.mutinyhq.com/integrations/segment). +3. In the destination settings, enter your personal "API Key" into Segment's Mutiny integration settings panel UI, which you can find from your [Mutiny dashboard](https://app.mutinyhq.com/integrations/segment){:target="_blank"}. ## Page diff --git a/src/connections/destinations/catalog/nat/index.md b/src/connections/destinations/catalog/nat/index.md index cef7aec663..b64010eea0 100644 --- a/src/connections/destinations/catalog/nat/index.md +++ b/src/connections/destinations/catalog/nat/index.md @@ -3,20 +3,18 @@ title: Nat Destination rewrite: true id: 5ebff2ce1c6481e9795533f9 --- -[Nat.app](https://nat.app?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a CRM tool for founders and sales people that makes it easy to stay in touch with users and find product market fit. +[Nat.app](https://nat.app?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a CRM tool for founders and sales people that makes it easy to stay in touch with users and find product market fit. This destination is maintained by Nat.app. For any issues with the destination, [contact the Nat team](mailto:segment@nat.app). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click "Add Destination". 2. Search for "Nat.app" in the Destinations Catalog, and select the "Nat.app" destination. 3. Choose which Source should send data to the "Nat.app" destination. -4. Go to the [Nat.app settings page](https://contacts.nat.app/settings), find and copy the "API key". +4. Go to the [Nat.app settings page](https://contacts.nat.app/settings){:target="_blank"}, find and copy the "API key". 5. Enter the "API Key" in the "Nat.app" destination settings in Segment. ## Identify diff --git a/src/connections/destinations/catalog/natero/index.md b/src/connections/destinations/catalog/natero/index.md index 62e2beb7c4..98ecd0f100 100644 --- a/src/connections/destinations/catalog/natero/index.md +++ b/src/connections/destinations/catalog/natero/index.md @@ -7,7 +7,7 @@ id: 54bee265db31d978f14a7e21 ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Natero" in the Destinations Catalog, and select the "Natero" destination. diff --git a/src/connections/destinations/catalog/new-relic/index.md b/src/connections/destinations/catalog/new-relic/index.md index b06a27baa1..f535b4bb1a 100644 --- a/src/connections/destinations/catalog/new-relic/index.md +++ b/src/connections/destinations/catalog/new-relic/index.md @@ -3,15 +3,15 @@ rewrite: true title: New Relic Destination id: 54521fd925e721e32a72eee0 --- -[New Relic](https://newrelic.com/) enables you to better understand, using their real-time analytics, the end-to-end business impact of your software performance. +[New Relic](https://newrelic.com/){:target="_blank"} enables you to better understand, using their real-time analytics, the end-to-end business impact of your software performance. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "New Relic" in the Catalog, select it, and choose which of your sources to connect the destination to. - 3. In the destination settings, enter your Insights [Account ID](https://docs.newrelic.com/docs/accounts/install-new-relic/account-setup/account-id) and your [Insert Key](https://docs.newrelic.com/docs/insights/insights-data-sources/custom-data/insert-custom-events-insights-api#register). + 3. In the destination settings, enter your Insights [Account ID](https://docs.newrelic.com/docs/accounts/install-new-relic/account-setup/account-id){:target="_blank"} and your [Insert Key](https://docs.newrelic.com/docs/insights/insights-data-sources/custom-data/insert-custom-events-insights-api#register){:target="_blank"}. 4. Once destination enabled we'll start forwarding your calls to New Relic. ## Track @@ -24,7 +24,7 @@ analytics.track('Article Completed', { }); ``` -We forward `track` calls to New Relic in order to [insert custom events using their Insights API](https://docs.newrelic.com/docs/insights/new-relic-insights/adding-querying-data/inserting-custom-events). +We forward `track` calls to New Relic in order to [insert custom events using their Insights API](https://docs.newrelic.com/docs/insights/new-relic-insights/adding-querying-data/inserting-custom-events){:target="_blank"}. Your event `properties` will be included with the event, conforming to the following rules: - booleans are transformed to strings diff --git a/src/connections/destinations/catalog/nielsen-dcr/index.md b/src/connections/destinations/catalog/nielsen-dcr/index.md index 44f612789b..75cc6524a4 100644 --- a/src/connections/destinations/catalog/nielsen-dcr/index.md +++ b/src/connections/destinations/catalog/nielsen-dcr/index.md @@ -8,7 +8,7 @@ Nielsen-DCR is supported on mobile apps and web browsers. Digital Content Ratings (DCR) responds to the shifting, complex multi-platform, multi-device and multi-distribution landscape by providing comprehensive measurement of digital content consumption—including streaming video, static web pages and mobile apps—across all major devices and platforms. -In order to get started with Nielsen-DCR and retrieve an `appid` to configure this integration, you must sign a license agreement on the [Nielsen engineering portal](https://engineeringportal.nielsen.com/docs/Main_Page). +In order to get started with Nielsen-DCR and retrieve an `appid` to configure this integration, you must sign a license agreement on the [Nielsen engineering portal](https://engineeringportal.nielsen.com/docs/Main_Page){:target="_blank"}. There will be an NDA to sign prior to accessing the download. Nielsen requires you fill out your company info and have a Nielsen representative before getting started. @@ -22,11 +22,11 @@ To get started with Nielsen-DCR and Segment, you'll want to first integrate your ### iOS -To install Nielsen DCR via Segment on iOS, please follow the instructions in the Segment-Nielsen-DCR repository [README](https://github.com/segment-integrations/analytics-ios-integration-nielsen-dcr/blob/master/README.md). +To install Nielsen DCR via Segment on iOS, please follow the instructions in the Segment-Nielsen-DCR repository [README](https://github.com/segment-integrations/analytics-ios-integration-nielsen-dcr/blob/master/README.md){:target="_blank"}. ### Android -To install Nielsen DCR via Segment on Android, please follow the instructions in the Segment-Nielsen-DCR repository [README](https://github.com/segment-integrations/analytics-android-integration-nielsen-dcr/blob/master/README.md). +To install Nielsen DCR via Segment on Android, please follow the instructions in the Segment-Nielsen-DCR repository [README](https://github.com/segment-integrations/analytics-android-integration-nielsen-dcr/blob/master/README.md){:target="_blank"}. ## Web @@ -216,13 +216,13 @@ Content originator ID. This value is only required for distributors. Segment-Nielsen-DCR iOS retrieves the application name from your app's `Info.plist` application bundle name as returned by `CFBundleName` . -For Android, we retrieve the name of the application package from the [PackageManager](https://developer.android.com/reference/android/content/Context.html#getPackageManager()). +For Android, we retrieve the name of the application package from the [PackageManager](https://developer.android.com/reference/android/content/Context.html#getPackageManager()){:target="_blank"}. #### How do you determine App Version? Segment-Nielsen-DCR retrieves the application version from your app's `Info.plist` application bundle name as returned by `CFBundleVersion`. -For Android, we retrieve the version of the application package from the [PackageManager](https://developer.android.com/reference/android/content/Context.html#getPackageManager()). +For Android, we retrieve the version of the application package from the [PackageManager](https://developer.android.com/reference/android/content/Context.html#getPackageManager()){:target="_blank"}. #### What are the Nielsen-DCR `clientId` and `subbrand` values? diff --git a/src/connections/destinations/catalog/nielsen-dtvr/index.md b/src/connections/destinations/catalog/nielsen-dtvr/index.md index d2ac799d30..870d8cc0bb 100644 --- a/src/connections/destinations/catalog/nielsen-dtvr/index.md +++ b/src/connections/destinations/catalog/nielsen-dtvr/index.md @@ -14,15 +14,14 @@ measurement of digital content consumption—including streaming TV commercial video, static web pages and mobile apps—across all major devices and platforms. In order to get started with Nielsen-DTVR and retrieve an `appid` to configure -this integration, you must sign a license agreement on the [Nielsen engineering -portal](https://engineeringportal.nielsen.com/docs/Main_Page). +this integration, you must sign a license agreement on the [Nielsen engineering portal](https://engineeringportal.nielsen.com/docs/Main_Page){:target="_blank"}. There will be an NDA to sign prior to accessing the download. Nielsen requires you fill out your company info and have a Nielsen representative before getting started. You must also go through the pre-certification process as outlined -[here](https://engineeringportal.nielsen.com/docs/DCR_Pre-Certification_Checklist) +[here](https://engineeringportal.nielsen.com/docs/DCR_Pre-Certification_Checklist){:target="_blank"} with your Nielsen representative before shipping this implementation to production. @@ -34,11 +33,11 @@ your mobile app with our [iOS](/docs/connections/sources/catalog/libraries/mobil ### iOS -To install Nielsen DTVR via Segment on iOS, please follow the instructions in the Segment-Nielsen-DTVR repository [README](https://github.com/segment-integrations/analytics-ios-integration-nielsen-dtvr/blob/master/README.md). +To install Nielsen DTVR via Segment on iOS, please follow the instructions in the Segment-Nielsen-DTVR repository [README](https://github.com/segment-integrations/analytics-ios-integration-nielsen-dtvr/blob/master/README.md){:target="_blank"}. ### Android -To install Nielsen DTVR via Segment on Android, please follow the instructions in the Segment-Nielsen-DTVR repository [README](https://github.com/segment-integrations/analytics-android-integration-nielsen-dtvr/blob/master/README.md). +To install Nielsen DTVR via Segment on Android, please follow the instructions in the Segment-Nielsen-DTVR repository [README](https://github.com/segment-integrations/analytics-android-integration-nielsen-dtvr/blob/master/README.md){:target="_blank"}. ## Web @@ -97,5 +96,5 @@ value will be `us`. diff --git a/src/connections/destinations/catalog/ninetailed/index.md b/src/connections/destinations/catalog/ninetailed/index.md index ff8aa35b2a..0c4ffcde91 100644 --- a/src/connections/destinations/catalog/ninetailed/index.md +++ b/src/connections/destinations/catalog/ninetailed/index.md @@ -3,20 +3,20 @@ title: Ninetailed Destination id: 60635bda625d1d13b153c8ca --- -[Ninetailed](https://ninetailed.io/?utm_source=segment&utm_medium=docs&utm_campaign=partners) is an API-first optimization platform for the modern web, which enables blazing fast personalization experiences and better data-driven experiences, for frameworks like ReactJS or GatsbyJS and headless CMS like Contentful. +[Ninetailed](https://ninetailed.io/?utm_source=segment&utm_medium=docs&utm_campaign=partners){:target="_blank"} is an API-first optimization platform for the modern web, which enables blazing fast personalization experiences and better data-driven experiences, for frameworks like ReactJS or GatsbyJS and headless CMS like Contentful. -By integrating with [Segment](https://segment.com), you can easily and accurately track conversions and integrate 1st party data for personalization with Ninetailed. +By integrating with [Segment](https://segment.com){:target="_blank"}, you can easily and accurately track conversions and integrate 1st party data for personalization with Ninetailed. This destination is maintained by Ninetailed. For any issues with the destination, [contact the Ninetailed Support team](mailto:support@ninetailed.io). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Ninetailed" in the Destinations Catalog, and select the Ninetailed destination. 3. Choose which Source should send data to the Ninetailed destination. -4. Copy your API Key from the Ninetailed Dashboard integrated in [your CMS](https://docs.ninetailed.io/account-and-setup/api-key?utm_source=segment&utm_medium=docs&utm_campaign=partners) (for example, Contentful). +4. Copy your API Key from the Ninetailed Dashboard integrated in [your CMS](https://docs.ninetailed.io/account-and-setup/api-key?utm_source=segment&utm_medium=docs&utm_campaign=partners){:target="_blank"} (for example, Contentful). 5. Enter the "API Key" in the "Ninetailed" destination settings in Segment. ## Identify diff --git a/src/connections/destinations/catalog/noora/index.md b/src/connections/destinations/catalog/noora/index.md index 369b34d490..e84527816b 100644 --- a/src/connections/destinations/catalog/noora/index.md +++ b/src/connections/destinations/catalog/noora/index.md @@ -3,13 +3,13 @@ title: Noora Destination rewrite: true id: 5fd719e85f1569d6af775ec1 --- -[Noora](https://noorahq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a customer product feedback management solution. It provides a centralized product feedback solution that gives you the tools to collect, aggregate and act on feedback from customers and internal teams. +[Noora](https://noorahq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a customer product feedback management solution. It provides a centralized product feedback solution that gives you the tools to collect, aggregate and act on feedback from customers and internal teams. This destination is maintained by Noora. For any issues with the destination, [contact the Noora Support team](mailto:support@noorahq.com). ## Getting Started -{% include content/connection-modes.md %} + 1. Navigate to the Contacts tab while in your Noora workspace's Admin view. 2. Click **+** to add a Contact source and choose **Connect to Segment**. diff --git a/src/connections/destinations/catalog/olark/index.md b/src/connections/destinations/catalog/olark/index.md index 71e8725546..0fa22b794a 100644 --- a/src/connections/destinations/catalog/olark/index.md +++ b/src/connections/destinations/catalog/olark/index.md @@ -5,7 +5,7 @@ id: 54521fd925e721e32a72eedc ## Getting Started When you enable Olark in the Segment web app, your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Olark's `loader0.js` onto your page. This means you should remove Olark's snippet from your page. -+ Olark's chat box will appear on your page, as configured in your [Olark account](http://www.olark.com/?r=qhl4tltg), and you can start chatting with visitors. ++ Olark's chat box will appear on your page, as configured in your [Olark account](http://www.olark.com/?r=qhl4tltg){:target="_blank"}, and you can start chatting with visitors. Olark is only supported in device mode (on the client). @@ -26,7 +26,7 @@ When you call [`identify`](/docs/connections/spec/identify/) on `analytics.js`, * We call `api.visitor.updatePhoneNumber` with `traits.phone` if you send it. * We call `api.visitor.updateCustomFields` with `traits`. -More documentation on the Olark API can be found [in Olark's docs](https://www.olark.com/documentation?r=qhl4tltg). +More documentation on the Olark API can be found [in Olark's docs](https://www.olark.com/api){:target="_blank"}. ## Track @@ -38,7 +38,7 @@ When you call [`track`](/docs/connections/spec/track/) or one of its helpers on ### Customizing the chat box -All the settings you can change [from your Olark settings pages](https://www.olark.com/help/customize), like targeted chat and your chat box design, still work exactly the same when Olark is enabled using Segment. +All the settings you can change [from your Olark settings pages](https://www.olark.com/help/customize){:target="_blank"}, like targeted chat and your chat box design, still work exactly the same when Olark is enabled using Segment. ### Olark JavaScript API diff --git a/src/connections/destinations/catalog/onesignal-new/index.md b/src/connections/destinations/catalog/onesignal-new/index.md index 320320affe..cc3f19ed19 100644 --- a/src/connections/destinations/catalog/onesignal-new/index.md +++ b/src/connections/destinations/catalog/onesignal-new/index.md @@ -13,7 +13,7 @@ This destination is maintained by OneSignal. For any issues with the destination ## Getting Started -{% include content/connection-modes.md %} + 1. Log in to the [OneSignal Dashboard](https://app.onesignal.com/){:target="_new"} 2. Navigate to **Segment App** -> **Settings** -> **Analytics** -> **Segment.com** and click **Activate**. @@ -22,7 +22,7 @@ This destination is maintained by OneSignal. For any issues with the destination > info "" -> OneSignal maps the `userId` field to the **[External User ID](https://documentation.onesignal.com/docs/onboarding-with-onesignal#step-3-connect-user-data-to-onesignal)** field in OneSignal. +> OneSignal maps the `userId` field to the **[External User ID](https://documentation.onesignal.com/docs/onboarding-with-onesignal#step-3-connect-user-data-to-onesignal){:target="_blank"}** field in OneSignal. ## Supported methods @@ -41,7 +41,7 @@ analytics.identify('userId123', { }); ``` -Segment sends Identify traits as [Player Data Tags](https://documentation.onesignal.com/docs/add-user-data-tags) in OneSignal. +Segment sends Identify traits as [Player Data Tags](https://documentation.onesignal.com/docs/add-user-data-tags){:target="_blank"} in OneSignal. > warning "" > OneSignal doesn't accept nested objects or arrays as user properties. @@ -74,11 +74,11 @@ Send Computed Traits and Audiences generated using [Engage](/docs/engage) to One ### Audiences -Engage Audiences appear as a [segment](https://documentation.onesignal.com/docs/segmentation) in OneSignal. +Engage Audiences appear as a [segment](https://documentation.onesignal.com/docs/segmentation){:target="_blank"} in OneSignal. -Track calls from Audiences create a OneSignal [segment](https://documentation.onesignal.com/docs/segmentation) with the Audience Name. +Track calls from Audiences create a OneSignal [segment](https://documentation.onesignal.com/docs/segmentation){:target="_blank"} with the Audience Name. -Identify calls from Audiences create a OneSignal [segment](https://documentation.onesignal.com/docs/segmentation) with the Audience Name and add Data Tags on all the matching user records. +Identify calls from Audiences create a OneSignal [segment](https://documentation.onesignal.com/docs/segmentation){:target="_blank"} with the Audience Name and add Data Tags on all the matching user records. ![""](images/audiences.jpg) @@ -86,7 +86,7 @@ Audiences sends Identify and Track calls to OneSignal when a user enters or exit ### Computed Traits -OneSignal stores Track and Identify calls from Engage Computed Traits as [Data Tags](https://documentation.onesignal.com/docs/add-user-data-tags) for the OneSignal User/Player's records. +OneSignal stores Track and Identify calls from Engage Computed Traits as [Data Tags](https://documentation.onesignal.com/docs/add-user-data-tags){:target="_blank"} for the OneSignal User/Player's records. ## OneSignal Destination FAQ ### Managing Segment's Reserved and Custom Traits diff --git a/src/connections/destinations/catalog/optimizely-data-platform/index.md b/src/connections/destinations/catalog/optimizely-data-platform/index.md new file mode 100644 index 0000000000..36e52dc68e --- /dev/null +++ b/src/connections/destinations/catalog/optimizely-data-platform/index.md @@ -0,0 +1,64 @@ +--- +title: Optimizely Data Platform Destination +beta: true +id: 6512d7f86bdccc3829fc4ac3 +--- + +Sync your Twilio Segment customer data to Optimizely Data Platform (ODP) for real-time segmentation, reporting, and to enrich customer profiles in ODP. + +After you set up your Optimizely Data Platform destination, Segment syncs your customer data to ODP in near real-time. + +This destination is maintained by Optimizely. For any issues with the destination, [contact Optimizely Support team](mailto:support@optimizely.com). + +## Prerequisites + +- Twilio Segment workspace +- ODP or [ODP Lite](https://support.optimizely.com/hc/en-us/articles/8359093735309-Welcome-to-ODP-Lite){:target="_blank”} account + +## Enable the integration + +1. In ODP, open the **App Directory**. +2. Select the **Twilio Segment** app. +3. Click **Install App**. +4. On the Settings tab, click **Generate** and copy the displayed token. +5. Open the Segment app and navigate to the [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”}. +6. Search for and select **Optimizely Data Platform**. +7. Click **Add destination** and select a source to connect to the Optimizely Data Platform destination. +8. Enter a name for your destination and click **Create destination**. +9. On the destination's Settings tab, enter the following information: + - **Api Key** – Paste your ODP API token from step 4 + - **Region** – Select your region + - **Enable Destination** – Toggle to **On** +10. Click **Save Changes**. + +## Configure event mappings + +After you enable the Optimizely Data Platform destination, you must map the events that you want Twilio Segment to send to ODP. + +In Twilio Segment, on the **Mappings** tab of the Optimizely Data Platform destination, Segment displays a list of pre-built mappings that you can enable or disable. For example, if you enabled the **Email Opened** mapping, each email opened event Segment ingested after you enabled the mapping would sync to ODP. + +If you want to map an event that is not listed: +1. Click **New Mapping > Custom Event**. +2. _(Optional)_: Enter a descriptive name for the event. +3. Select the event that you want to send to ODP. +4. Click **Load Test Event from Source**. This generates the raw data for the selected event and populates your mappings. The ID and timestamp field mappings auto-populate, but you can edit them as desired. +5. Select the event type and, optionally, the event action. For example, if you are configuring a custom event to track button clicks, select _button_ for the event type and _click_ for the event action. + +> info "Required fields" +> In ODP, each event requires an ID, timestamp, and event type. The event action is optional. See ODP's [Events](https://docs.developers.optimizely.com/optimizely-data-platform/docs/thebasics-events){:target="_blank”} documentation for more details. + +
      +
    1. + _(Optional)_: To ensure the custom event is configured correctly, click **Send test event to destination**. +
    2. +
    3. + Click **Save**. +
    4. +
    5. + Toggle your custom event's status to **Enabled**. +
    6. +
    + +The event data sends from Twilio Segment to ODP starting after you enable the mapping in the destination. It does not retroactively send events that occurred prior to configuring the integration and enabling the mappings. + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/optimizely-full-stack/index.md b/src/connections/destinations/catalog/optimizely-full-stack/index.md index f00299f53b..d623079c43 100644 --- a/src/connections/destinations/catalog/optimizely-full-stack/index.md +++ b/src/connections/destinations/catalog/optimizely-full-stack/index.md @@ -7,7 +7,7 @@ id: 59d3b44b8f1480000104be6b --- ## Getting Started -{% include content/connection-modes.md %} + Segment's **Optimizely Full Stack (previously Optimizely X)** destination supports the following Optimizely products: @@ -35,14 +35,14 @@ This requires that customers include a native Optimizely implementation before t 1. In your Segment source dashboard, enable the "Optimizely Full Stack" destination (*not the "Optimizely Web" destination*). 2. Include your Optimizely project's `datafile` URL in your Segment settings. 3. Create a native Optimizely instance in your server environment so you can access Optimizely decisioning methods like `activate`, `isFeatureEnabled`. -4. Finally, define any [`events`](https://docs.developers.optimizely.com/full-stack/docs/create-events) and [`attributes`](https://docs.developers.optimizely.com/full-stack/docs/define-attributes) in your Optimizely dashboard, and to associate `metrics` with the appropriate Optimizely Experiments. Segment maps `track` event names to Optimizely `eventName` - the `eventName` corresponds to an experiment `metric`. In addition, Segment maps `track` event `context.traits` to Optimizely `attributes`. +4. Finally, define any [`events`](https://docs.developers.optimizely.com/full-stack/docs/create-events){:target="_blank"} and [`attributes`](https://docs.developers.optimizely.com/full-stack/docs/define-attributes){:target="_blank"} in your Optimizely dashboard, and to associate `metrics` with the appropriate Optimizely Experiments. Segment maps `track` event names to Optimizely `eventName` - the `eventName` corresponds to an experiment `metric`. In addition, Segment maps `track` event `context.traits` to Optimizely `attributes`. > note "" > **Note:** If you are using Optimizely SDKs v1.x or v2.x: if a visitor has any `activate` or `isFeatureEnabled` calls, their `attributes` object for these calls must match the `attributes` object passed to any `track` calls for that user id so that it can be correctly attributed on the Optimizely results page. -If you are using Optimizely SDKs v3+, [Easy Event Tracking](https://blog.optimizely.com/2019/02/26/introducing-easy-event-tracking-the-easier-way-to-understand-and-optimize-the-customer-journey/) is enabled by default for decision events. Set up does not require maintaining the attributes of a user as long as the user id stays the same between Optimizely `activate` and `isFeatureEnabled` calls and Segment `track` calls to have Optimizely `metrics` populated in the Optimizely results page. If you would like to segment your Optimizely results by user `attribute`, then make sure the `attributes` passed in for the `activate` and `isFeatureEnabled` calls match the `attributes` passed in for the `track` calls for that user id. +If you are using Optimizely SDKs v3+, [Easy Event Tracking](https://blog.optimizely.com/2019/02/26/introducing-easy-event-tracking-the-easier-way-to-understand-and-optimize-the-customer-journey/){:target="_blank"} is enabled by default for decision events. Set up does not require maintaining the attributes of a user as long as the user id stays the same between Optimizely `activate` and `isFeatureEnabled` calls and Segment `track` calls to have Optimizely `metrics` populated in the Optimizely results page. If you would like to segment your Optimizely results by user `attribute`, then make sure the `attributes` passed in for the `activate` and `isFeatureEnabled` calls match the `attributes` passed in for the `track` calls for that user id. -For more details on how events are attributed on the Optimizely results page, refer to their documentation [here](https://help.optimizely.com/Analyze_Results/How_Optimizely_counts_conversions). +For more details on how events are attributed on the Optimizely results page, refer to their documentation [here](https://help.optimizely.com/Analyze_Results/How_Optimizely_counts_conversions){:target="_blank"}. ### Track @@ -61,30 +61,30 @@ Segment also handles the following mapping: `revenue` values should be passed as a Segment `property`. The value should be an integer and represent the value in cents, so, for example, $1 should be represented by `100`. > note "" -> **Note**: [Custom Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags) in Optimizely, which include all Event Tags except `revenue` and `value`, are not displayed on the Optimizely results page, however they are available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export) report. Event Tags can be strings, integers, floating point numbers, or boolean values. Optimizely rejects events with any other data types (for example, arrays). +> **Note**: [Custom Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags){:target="_blank"} in Optimizely, which include all Event Tags except `revenue` and `value`, are not displayed on the Optimizely results page, however they are available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export){:target="_blank"} report. Event Tags can be strings, integers, floating point numbers, or boolean values. Optimizely rejects events with any other data types (for example, arrays). Segment defaults to identifying users with their `anonymousId`. Enabling the "Use User ID" setting in your Segment settings means that only `track` events triggered by identified users are passed downstream to Optimizely. You may optionally fall back to `anonymousId` when `userId` is unavailable by setting `fallbackToAnonymousId` to `true`. ### Notification Listeners -Segment's server-side integration with Optimizely Full Stack does not support notification listeners for Segment`track` events. [Notification listeners](https://docs.developers.optimizely.com/full-stack/docs/notification-listeners) are still available with any native call invoked from your Optimizely client instance. +Segment's server-side integration with Optimizely Full Stack does not support notification listeners for Segment`track` events. [Notification listeners](https://docs.developers.optimizely.com/full-stack/docs/notification-listeners){:target="_blank"} are still available with any native call invoked from your Optimizely client instance. ## Android Cloud-mode Implementation ### Getting Started 1. In your Segment source dashboard, enable the "Optimizely Full Stack" destination (*not the "Optimizely Web" destination*). -2. Include the latest version of Optimizely Full Stack's native SDK in your your app-level build.gradle file and [implement Optimizely as your would natively](https://docs.developers.optimizely.com/full-stack/docs/install-the-sdk#section-android). -3. Finally, define any [`events`](https://docs.developers.optimizely.com/full-stack/docs/create-events) and [`attributes`](https://docs.developers.optimizely.com/full-stack/docs/define-attributes) in your Optimizely dashboard, and associate `metrics` with the appropriate Optimizely Experiments. Segment maps `track` event names to Optimizely `eventName` - the `eventName` corresponds to an experiment `metric`. In addition, Segment maps `identify` `traits` to Optimizely `attributes`. +2. Include the latest version of Optimizely Full Stack's native SDK in your your app-level build.gradle file and [implement Optimizely as your would natively](https://docs.developers.optimizely.com/full-stack/docs/install-the-sdk#section-android){:target="_blank"}. +3. Finally, define any [`events`](https://docs.developers.optimizely.com/full-stack/docs/create-events){:target="_blank"} and [`attributes`](https://docs.developers.optimizely.com/full-stack/docs/define-attributes){:target="_blank"} in your Optimizely dashboard, and associate `metrics` with the appropriate Optimizely Experiments. Segment maps `track` event names to Optimizely `eventName` - the `eventName` corresponds to an experiment `metric`. In addition, Segment maps `identify` `traits` to Optimizely `attributes`. When implementing Optimizely Full Stack using cloud-mode, Segment will map `track` events to Optimizely `track` events on our servers and deliver the data to your Optimizely project as usual. > note "" > **Note:** If you are using Optimizely SDKs v1.x or v2.x: if a visitor has any `activate` or `isFeatureEnabled` calls, the `attributes` object for these calls must match the `attributes` object passed to any `track` calls for that user id so that it can be correctly attributed on the Optimizely results page. -If you are using Optimizely SDKs v3+, [Easy Event Tracking](https://blog.optimizely.com/2019/02/26/introducing-easy-event-tracking-the-easier-way-to-understand-and-optimize-the-customer-journey/) is enabled by default for decision events. Set up does not require maintaining the attributes of a user as long as the user id stays the same between Optimizely `activate` and `isFeatureEnabled` calls and Segment `track` calls to have Optimizely `metrics` populated in the Optimizely results page. If you would like to segment your Optimizely results by user `attribute`, then make sure the `attributes` passed in for the `activate` and `isFeatureEnabled` calls match the `attributes` passed in for the `track` calls for that user id. +If you are using Optimizely SDKs v3+, [Easy Event Tracking](https://blog.optimizely.com/2019/02/26/introducing-easy-event-tracking-the-easier-way-to-understand-and-optimize-the-customer-journey/){:target="_blank"} is enabled by default for decision events. Set up does not require maintaining the attributes of a user as long as the user id stays the same between Optimizely `activate` and `isFeatureEnabled` calls and Segment `track` calls to have Optimizely `metrics` populated in the Optimizely results page. If you would like to segment your Optimizely results by user `attribute`, then make sure the `attributes` passed in for the `activate` and `isFeatureEnabled` calls match the `attributes` passed in for the `track` calls for that user id. -For more details on how events are attributed on the Optimizely results page, refer to their documentation [here](https://help.optimizely.com/Analyze_Results/How_Optimizely_counts_conversions). +For more details on how events are attributed on the Optimizely results page, refer to their documentation [here](https://help.optimizely.com/Analyze_Results/How_Optimizely_counts_conversions){:target="_blank"}. ### Track @@ -100,7 +100,7 @@ Segment also handles the following mapping: `revenue` values should be passed as a Segment `property`. The value should be an integer and represent the value in cents, so, for example, $1 should be represented by `100`. > note "" -> **Note:** [Custom Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags) in Optimizely, which include all Event Tags except `revenue` and `value`, are not displayed on the Optimizely results page, however they are available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export) report. Event Tags can be strings, integers, floating point numbers, or boolean values. Optimizely rejects events with any other data types (for example, arrays). +> **Note:** [Custom Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags){:target="_blank"} in Optimizely, which include all Event Tags except `revenue` and `value`, are not displayed on the Optimizely results page, however they are available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export){:target="_blank"} report. Event Tags can be strings, integers, floating point numbers, or boolean values. Optimizely rejects events with any other data types (for example, arrays). Segment defaults to identifying users with their `anonymousId`. Enabling "Use User ID" setting in your Segment dashboard means that only `track` events triggered by identified users are passed downstream to Optimizely. You may optionally fall back to `anonymousId` when `userId` is unavailable by setting `fallbackToAnonymousId` to `true`. @@ -114,7 +114,7 @@ Invoking this method invalidates the listener for the `Experiment Viewed` event. ### Notification Listeners -If you want to use Optimizely's [notification listeners](https://docs.developers.optimizely.com/full-stack/docs/notification-listeners), you must use the Optimizely native code to invoke them (in addition to using the Segment SDKs). Notification listeners require an [instantiated Optimizely client](https://docs.developers.optimizely.com/full-stack/docs/java#section-2-instantiate-optimizely) to be accessed, and so are not available for Segment `track` events when you connect to Optimizely using cloud-mode. +If you want to use Optimizely's [notification listeners](https://docs.developers.optimizely.com/full-stack/docs/notification-listeners){:target="_blank"}, you must use the Optimizely native code to invoke them (in addition to using the Segment SDKs). Notification listeners require an [instantiated Optimizely client](https://docs.developers.optimizely.com/full-stack/docs/java#section-2-instantiate-optimizely){:target="_blank"} to be accessed, and so are not available for Segment `track` events when you connect to Optimizely using cloud-mode. ## iOS Cloud-mode Implementation @@ -122,17 +122,17 @@ If you want to use Optimizely's [notification listeners](https://docs.developers ### Getting Started 1. In your Segment source dashboard, enable the "Optimizely Full Stack" destination (*not the "Optimizely Web" destination*). -2. Include the latest version of Optimizely Full Stack's native SDK in your app and [implement it as you would natively](https://docs.developers.optimizely.com/full-stack/docs/install-the-sdk#section-ios-and-tvos). -3. Finally, define any [`events`](https://docs.developers.optimizely.com/full-stack/docs/create-events) and [`attributes`](https://docs.developers.optimizely.com/full-stack/docs/define-attributes) in your Optimizely dashboard, and to associate `metrics` with the appropriate Optimizely Experiments. Segment maps `track` event names to Optimizely `eventName` - the `eventName` corresponds to an experiment `metric`. In addition, Segment maps `identify` `traits` to Optimizely `attributes`. +2. Include the latest version of Optimizely Full Stack's native SDK in your app and [implement it as you would natively](https://docs.developers.optimizely.com/full-stack/docs/install-the-sdk#section-ios-and-tvos){:target="_blank"}. +3. Finally, define any [`events`](https://docs.developers.optimizely.com/full-stack/docs/create-events){:target="_blank"} and [`attributes`](https://docs.developers.optimizely.com/full-stack/docs/define-attributes){:target="_blank"} in your Optimizely dashboard, and to associate `metrics` with the appropriate Optimizely Experiments. Segment maps `track` event names to Optimizely `eventName` - the `eventName` corresponds to an experiment `metric`. In addition, Segment maps `identify` `traits` to Optimizely `attributes`. When implementing Optimizely using cloud-mode, Segment will map `track` events to Optimizely `track` events on our servers and deliver the data to your Optimizely project as usual. > note "" > **Note:** If you are using Optimizely SDKs v1.x or v2.x: if a visitor has any `activate` or `isFeatureEnabled` calls, their `attributes` object for these calls must match the `attributes` object passed to any `track` calls for that user id so that it can be correctly attributed on the Optimizely results page. -If you are using Optimizely SDKs v3+, [Easy Event Tracking](https://blog.optimizely.com/2019/02/26/introducing-easy-event-tracking-the-easier-way-to-understand-and-optimize-the-customer-journey/) is enabled by default for decision events. Set up does not require maintaining the attributes of a user as long as the user id stays the same between Optimizely `activate` and `isFeatureEnabled` calls and Segment `track` calls to have Optimizely `metrics` populated in the Optimizely results page. If you would like to segment your Optimizely results by user `attribute`, then make sure the `attributes` passed in for the `activate` and `isFeatureEnabled` calls match the `attributes` passed in for the `track` calls for that user id. +If you are using Optimizely SDKs v3+, [Easy Event Tracking](https://blog.optimizely.com/2019/02/26/introducing-easy-event-tracking-the-easier-way-to-understand-and-optimize-the-customer-journey/){:target="_blank"} is enabled by default for decision events. Set up does not require maintaining the attributes of a user as long as the user id stays the same between Optimizely `activate` and `isFeatureEnabled` calls and Segment `track` calls to have Optimizely `metrics` populated in the Optimizely results page. If you would like to segment your Optimizely results by user `attribute`, then make sure the `attributes` passed in for the `activate` and `isFeatureEnabled` calls match the `attributes` passed in for the `track` calls for that user id. -For more details on how events are attributed on the Optimizely results page, refer to their documentation [here](https://help.optimizely.com/Analyze_Results/How_Optimizely_counts_conversions). +For more details on how events are attributed on the Optimizely results page, refer to their documentation [here](https://help.optimizely.com/Analyze_Results/How_Optimizely_counts_conversions){:target="_blank"}. ### Track @@ -148,7 +148,7 @@ Segment also handles the following mapping: `revenue` values should be passed as a Segment `property`. The value should be an integer and represent the value in cents, so, for example, $1 should be represented by `100`. > note "" -> **Note:** [Custom Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags) in Optimizely, which include all Event Tags except `revenue` and `value`, are not displayed on the Optimizely results page, however they are available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export) report. Event Tags can be strings, integers, floating point numbers, or boolean values. Optimizely rejects events with any other data types (for example, arrays). +> **Note:** [Custom Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags){:target="_blank"} in Optimizely, which include all Event Tags except `revenue` and `value`, are not displayed on the Optimizely results page, however they are available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export){:target="_blank"} report. Event Tags can be strings, integers, floating point numbers, or boolean values. Optimizely rejects events with any other data types (for example, arrays). Segment defaults to identifying users with their `anonymousId`. Enabling "Use User ID" setting in your Segment dashboard means that only `track` events triggered by identified users are passed downstream to Optimizely. You may optionally fall back to `anonymousId` when `userId` is unavailable by setting `fallbackToAnonymousId` to `true`. @@ -158,7 +158,7 @@ Invoking a Segment `identify` event sets Segment `traits` as Optimizely `attribu ### Notification Listeners -Notification listeners are not available for Segment `track` events when implementing Optimizely using Segment using cloud-mode. [Notification listeners](https://docs.developers.optimizely.com/full-stack/docs/notification-listeners) are still available with any native call invoked from your Optimizely client instance. +Notification listeners are not available for Segment `track` events when implementing Optimizely using Segment using cloud-mode. [Notification listeners](https://docs.developers.optimizely.com/full-stack/docs/notification-listeners){:target="_blank"} are still available with any native call invoked from your Optimizely client instance. ## Engage @@ -168,4 +168,4 @@ Follow these instructions on how to set up Engage and Optimizely: ## GDPR Support -Segment supports deleting/suppressing users in Optimizely using the [Segment app](/docs/privacy/user-deletion-and-suppression/). In order to do this however, you will need to create a [Personal Access Token](https://developers.optimizely.com/x/authentication/personal-token/) in Optimizely and provide it as the value of the Access Token setting. +Segment supports deleting/suppressing users in Optimizely using the [Segment app](/docs/privacy/user-deletion-and-suppression/). In order to do this however, you will need to create a [Personal Access Token](https://developers.optimizely.com/x/authentication/personal-token/){:target="_blank"} in Optimizely and provide it as the value of the Access Token setting. diff --git a/src/connections/destinations/catalog/optimizely-web/index.md b/src/connections/destinations/catalog/optimizely-web/index.md index bbd0c24f1f..d6b37d2477 100644 --- a/src/connections/destinations/catalog/optimizely-web/index.md +++ b/src/connections/destinations/catalog/optimizely-web/index.md @@ -27,7 +27,7 @@ Optimizely works differently than other Segment destinations: Because the Optimi Because of this Optimizely requires that customers implement their Web Snippet and SDKs natively, before the Segment snippet or implementation. -Although Segment maps `track`, and in some cases `page`, events to Optimizely's [`custom events`](https://help.optimizely.com/Build_Campaigns_and_Experiments/Custom_events_in_Optimizely_X), customers must implement the snippet on their site to ensure that experiments run and Optimizely decision events can be sent to Optimizely and Segment. +Although Segment maps `track`, and in some cases `page`, events to Optimizely's [`custom events`](https://help.optimizely.com/Build_Campaigns_and_Experiments/Custom_events_in_Optimizely_X){:target="_blank"}, customers must implement the snippet on their site to ensure that experiments run and Optimizely decision events can be sent to Optimizely and Segment. Segment provides specific implementation details for each Optimizely product in the sections below, in addition to details of the out-of-the-box mappings Segment's Optimizely component handles for Optimizely users. @@ -41,7 +41,7 @@ Segment provides specific implementation details for each Optimizely product in 4. In your Optimizely dashboard, copy the snippet provided at the bottom of the page. 5. Include the snippet immediately after the opening `` tag on every page where you'd like to include Optimizely's JavaScript. 6. Now, paste your Segment snippet below the Optimizely snippet on every page where you'd like to include Segment's JavaScript. -7. Finally, remember to define any [custom `events`](https://help.optimizely.com/Build_Campaigns_and_Experiments/Custom_events_in_Optimizely_X) in your Optimizely dashboard, and to add those `events` as [`metrics`](https://help.optimizely.com/Measure_success%3A_Track_visitor_behaviors/Metrics_in_Optimizely_X) with the appropriate Optimizely Experiments. In Optimizely in the Implementation tab, select 'Custom Event' and give it an API name that corresponds to the Segment `track` event name. Once the Optimizely events are created, they can be added to experiments as metrics to start tracking Segment data to an Optimizely experiment. +7. Finally, remember to define any [custom `events`](https://help.optimizely.com/Build_Campaigns_and_Experiments/Custom_events_in_Optimizely_X){:target="_blank"} in your Optimizely dashboard, and to add those `events` as [`metrics`](https://help.optimizely.com/Measure_success%3A_Track_visitor_behaviors/Metrics_in_Optimizely_X){:target="_blank"} with the appropriate Optimizely Experiments. In Optimizely in the Implementation tab, select 'Custom Event' and give it an API name that corresponds to the Segment `track` event name. Once the Optimizely events are created, they can be added to experiments as metrics to start tracking Segment data to an Optimizely experiment. ### Track @@ -60,7 +60,7 @@ Segment also handles the following mapping: `revenue` values should be passed as a Segment `property`. The value should be an integer and represent the value in cents, so, for example, $1 should be represented by `100`. > note "" -> **Note:** [Custom Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags) in Optimizely, which include all Event Tags except `revenue` and `value`, are not displayed on the Optimizely results page, however, they are available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export) report. +> **Note:** [Custom Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags){:target="_blank"} in Optimizely, which include all Event Tags except `revenue` and `value`, are not displayed on the Optimizely results page, however, they are available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export){:target="_blank"} report. ### Page @@ -68,9 +68,7 @@ Segment maps `page` calls to its own `track` events, i.e. invoking `analytics.pa ### Experiment Listeners -Upon activation of an Optimizely experiment, an "Experiment Viewed" `track` event is sent to Segment. The event includes Optimizely experiment metadata. - -Upon activation of an Optimizely experiment, an “Experiment Viewed” `track` event is sent to Segment. The event includes Optimizely experiment metadata which is sent whenever the Optimizely [`campaignDecided` listener](https://docs.developers.optimizely.com/web/docs/add-listener#section-campaign-decided) is activated. +Upon activation of an Optimizely experiment, an “Experiment Viewed” Track event is sent to Segment. The event includes Optimizely experiment metadata which is sent whenever the Optimizely [`campaignDecided` listener](https://docs.developers.optimizely.com/web/docs/add-listener#section-campaign-decided){:target="_blank"} is activated. > note "" @@ -149,14 +147,14 @@ If you're sending your experiment data to Google Analytics in the form of `track 3. The instance must be named `optimizelyClientInstance`. 4. Attach the `optimizelyClientInstance` to the `window` so Segment recognizes it. 5. Now, paste your Segment snippet below the Optimizely implementation on every page where you'd like to include Segment's JavaScript. Or, if you've implemented Optimizely in a separate file, ensure Segment loads only after Optimizely has been initialized. -6. Finally, define any [`events`](https://docs.developers.optimizely.com/full-stack/docs/create-events) and [`attributes`](https://docs.developers.optimizely.com/full-stack/docs/define-attributes) in your Optimizely dashboard, and to associate `metrics` with the appropriate Optimizely Experiments. Segment maps `track` event names to Optimizely `eventName` - the `eventName` corresponds to an experiment `metric`. +6. Finally, define any [`events`](https://docs.developers.optimizely.com/full-stack/docs/create-events){:target="_blank"} and [`attributes`](https://docs.developers.optimizely.com/full-stack/docs/define-attributes){:target="_blank"} in your Optimizely dashboard, and to associate `metrics` with the appropriate Optimizely Experiments. Segment maps `track` event names to Optimizely `eventName` - the `eventName` corresponds to an experiment `metric`. > note "" > **Note:** If you are using Optimizely SDKs v1.x or v2.x: if a visitor has any `activate` or `isFeatureEnabled` calls, their `attributes` object for these calls must match the `attributes` object passed to any `track` calls for that user id so that it can be correctly attributed on the Optimizely results page. -If you are using Optimizely SDKs v3+ or the React SDK, [Easy Event Tracking](https://blog.optimizely.com/2019/02/26/introducing-easy-event-tracking-the-easier-way-to-understand-and-optimize-the-customer-journey/) is enabled by default for decision events. Set up does not require maintaining the attributes of a user as long as the user id stays the same between Optimizely `activate` and `isFeatureEnabled` calls and Segment `track` calls to have Optimizely `metrics` populated in the Optimizely results page. If you would like to segment your Optimizely results by user `attribute`, then make sure the `attributes` passed in for the `activate` and `isFeatureEnabled` calls match the `attributes` passed in for the `track` calls for that user id. +If you are using Optimizely SDKs v3+ or the React SDK, [Easy Event Tracking](https://blog.optimizely.com/2019/02/26/introducing-easy-event-tracking-the-easier-way-to-understand-and-optimize-the-customer-journey/){:target="_blank"} is enabled by default for decision events. Set up does not require maintaining the attributes of a user as long as the user id stays the same between Optimizely `activate` and `isFeatureEnabled` calls and Segment `track` calls to have Optimizely `metrics` populated in the Optimizely results page. If you would like to segment your Optimizely results by user `attribute`, then make sure the `attributes` passed in for the `activate` and `isFeatureEnabled` calls match the `attributes` passed in for the `track` calls for that user id. -For more details on how events are attributed on the Optimizely results page, refer to their documentation [here](https://help.optimizely.com/Analyze_Results/How_Optimizely_counts_conversions). +For more details on how events are attributed on the Optimizely results page, refer to their documentation [here](https://help.optimizely.com/Analyze_Results/How_Optimizely_counts_conversions){:target="_blank"}. ### Track @@ -173,7 +171,7 @@ Segment also handles the following mapping: `revenue` values should be passed as a Segment `property`. The value should be an integer and represent the value in cents, so, for example, $1 should be represented by `100`. -**Note:** Custom [Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags) in Optimizely, which includes any Event Tag outside of `revenue` or `value`, will not be displayed on the Optimizely results page, however, they will be available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export) report. +**Note:** Custom [Event Tags](https://docs.developers.optimizely.com/full-stack/docs/include-event-tags){:target="_blank"} in Optimizely, which includes any Event Tag outside of `revenue` or `value`, will not be displayed on the Optimizely results page, however, they will be available in a [Data Export](https://docs.developers.optimizely.com/web/docs/data-export){:target="_blank"} report. ### Page @@ -217,9 +215,9 @@ analytics.track('Category Clicked', { }); ``` -If you were to send this Segment `track` event to Optimizely using any of the Segment integrations, you would only be able to use the `eventName` ‘Click' as a `metric` in Optimizely since custom event tags in Optimizely are not available on the [Results page](https://help.optimizely.com/Analyze_Results/The_Experiment_Results_page_for_Optimizely_X). +If you were to send this Segment `track` event to Optimizely using any of the Segment integrations, you would only be able to use the `eventName` ‘Click' as a `metric` in Optimizely since custom event tags in Optimizely are not available on the [Results page](https://help.optimizely.com/Analyze_Results/The_Experiment_Results_page_for_Optimizely_X){:target="_blank"}. -To send a `track` event from Segment with the context about that event from the `properties` to Optimizely, create a [custom Segment Destination Function](/docs/connections/destinations/destination-functions/) that maps the Segment `eventName` to a more specific Optimizely `eventName` and send an Optimizely `event` payload with the transformed `eventName` to the Optimizely [Event API](https://docs.developers.optimizely.com/web/docs/event-api). Using the example above, the Segment `track` event ‘Click' can be transformed to an Optimizely `event` with the `eventName` ‘Clicked Shirt'. +To send a `track` event from Segment with the context about that event from the `properties` to Optimizely, create a [custom Segment Destination Function](/docs/connections/destinations/destination-functions/) that maps the Segment `eventName` to a more specific Optimizely `eventName` and send an Optimizely `event` payload with the transformed `eventName` to the Optimizely [Event API](https://docs.developers.optimizely.com/web/docs/event-api){:target="_blank"}. Using the example above, the Segment `track` event ‘Click' can be transformed to an Optimizely `event` with the `eventName` ‘Clicked Shirt'. ### Sending effective referrer in your automatic page calls @@ -229,21 +227,22 @@ For example, let's say you run a redirect experiment on page `http://home.com` t Our Optimizely Web destination detects this and send the effective referrer value as a property of the subsequent Experiment Viewed. Segment also overrides the `context.page.referrer` with the effective referrer. -More importantly, to send the true referrer value with the initial `page` call inside the Segment snippet, you can look up `window.optimizelyEffectiveReferrer`, and if it exists, you can pass that into your `page` call. This is how you might modify your Segment snippet: +More importantly, to send the true referrer value with the initial `page` call inside the Segment snippet, you can look up `window.optimizelyEffectiveReferrer`, and if it exists, you can pass that into your `page` call. This is how you might modify your Segment snippet to pass the extra code inside [ready()](/docs/connections/sources/catalog/libraries/website/javascript/#ready) so its only called after Optimizely SDK has finished loading: ```javascript - ``` diff --git a/src/connections/destinations/catalog/orb/index.md b/src/connections/destinations/catalog/orb/index.md index 537de6ee27..d4c7e86681 100644 --- a/src/connections/destinations/catalog/orb/index.md +++ b/src/connections/destinations/catalog/orb/index.md @@ -3,18 +3,18 @@ title: Orb Destination id: 625ed45387dd6603f5380424 beta: true --- -[Orb](https://www.withorb.com/) provides scalable, reliable, and flexible billing infrastructure for usage based revenue models at companies of all sizes. +[Orb](https://www.withorb.com/){:target="_blank"} provides scalable, reliable, and flexible billing infrastructure for usage based revenue models at companies of all sizes. Orb maintains this destination. For any issues with the destination, [contact the Orb support team](mailto:support@withorb.com). ## Getting started -{% include content/connection-modes.md %} + 1. Navigate to **Connections** and click **Add Destination** in the Segment app. 2. Search for *Orb* in the Destinations Catalog, and select the **Orb** destination. 3. Choose which Source should send data to the Orb destination. -4. Go to the [Orb dashboard](https://app.billwithorb.com) and create a new API key from the configuration page. Segment recommends you to create a new API key for this integration rather than using an existing one. +4. Go to the [Orb dashboard](https://app.billwithorb.com){:target="_blank"} and create a new API key from the configuration page. Segment recommends you to create a new API key for this integration rather than using an existing one. 5. Enter the **API Key** in the Orb destination settings in Segment. 6. Enter the connection settings for the external customer ID and properties mapping fields. @@ -24,7 +24,7 @@ Orb currently supports track calls, as specified in the [Segment Spec](/docs/con ### Track -Use [Track](/docs/connections/spec/track) calls to automatically send usage events based on your customer's interactions with your application. Any Segment track call will be ingested through [Orb's ingestion pipeline](https://docs.withorb.com/docs/orb-docs/event-ingestion) and usage information will be used to calculate billable totals. For example: +Use [Track](/docs/connections/spec/track) calls to automatically send usage events based on your customer's interactions with your application. Any Segment track call will be ingested through [Orb's ingestion pipeline](https://docs.withorb.com/guides/events-and-metrics/event-ingestion){:target="_blank"} and usage information will be used to calculate billable totals. For example: ```js analytics.track({ event: "payment_confirmed", @@ -38,4 +38,4 @@ analytics.track({ ``` Similar to Segment, Orb supports a flexible event schema in the `properties` dictionary, which should be non-null and not contain nested objects. Within Orb, you can configure metrics by filtering and aggregating events. When you configure the Orb destination, you are required to specify a mapping of keys from the original Segment event to Orb’s usage event. You can also configure keys corresponding to Orb’s required fields such as `event_name` , `idempotency_key`, and `external_customer_id`. -Events ingested through the track spec are available on the Orb admin dashboard, specifically on the [Events page](https://app.billwithorb.com/events). +Events ingested through the track spec are available on the Orb admin dashboard, specifically on the [Events page](https://app.billwithorb.com/events){:target="_blank"}. diff --git a/src/connections/destinations/catalog/ortto/index.md b/src/connections/destinations/catalog/ortto/index.md deleted file mode 100644 index 252036e8da..0000000000 --- a/src/connections/destinations/catalog/ortto/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Ortto Destination' -hidden: true -id: 613ef845b8784e858199fe2d -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/owneriq-pixel/index.md b/src/connections/destinations/catalog/owneriq-pixel/index.md index c4601e17c3..234e515fe2 100644 --- a/src/connections/destinations/catalog/owneriq-pixel/index.md +++ b/src/connections/destinations/catalog/owneriq-pixel/index.md @@ -3,7 +3,7 @@ rewrite: true title: OwnerIQ Destination --- -[OwnerIQ](https://www.owneriq.com/platform-coex) allows marketers to use transparent, directly sourced, deterministic, shopping and purchasing data from retailers and brands. +[OwnerIQ](https://www.owneriq.com/platform-coex){:target="_blank"} allows marketers to use transparent, directly sourced, deterministic, shopping and purchasing data from retailers and brands. This destination is maintained by OwnerIQ. For any issues with the destination, [contact the OwnerIQ Support team](mailto:coex-support@owneriq.com). @@ -11,11 +11,11 @@ This destination is maintained by OwnerIQ. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "OwnerIQ" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the `dataGroupId`,`analyticsTagId`,`dctTagId` into your Segment Settings UI which you can find from [My Data Tab under My Audience in CoEx](https://coex.owneriq.com/app/myaudience/data-management/datasources). +3. Enter the `dataGroupId`,`analyticsTagId`,`dctTagId` into your Segment Settings UI which you can find from [My Data Tab under My Audience in CoEx](https://coex.owneriq.com/app/myaudience/data-management/datasources){:target="_blank"}. ## Page diff --git a/src/connections/destinations/catalog/pardot/index.md b/src/connections/destinations/catalog/pardot/index.md index 04f29cce3e..9ca9969c71 100644 --- a/src/connections/destinations/catalog/pardot/index.md +++ b/src/connections/destinations/catalog/pardot/index.md @@ -38,7 +38,7 @@ To connect to the Pardot API, Segment requires that you authenticate your accoun There are currently two active versions of the Pardot platform, version 3 and version 4. The major change in version 4 is the new ability to create multiple prospects in Pardot with the same email address. -Previously, this was not possible. Email was used by Pardot as a distinct identifier. In version 4 however, in order to update an *existing* prospect, you must provide either the Pardot ID for a given user OR the Salesforce FID. If one of these values is not provided in a request, Pardot will create a new prospect. More information is available on their [website](http://developer.pardot.com/kb/api-version-4/). +Previously, this was not possible. Email was used by Pardot as a distinct identifier. In version 4 however, in order to update an *existing* prospect, you must provide either the Pardot ID for a given user OR the Salesforce FID. If one of these values is not provided in a request, Pardot will create a new prospect. More information is available on their [website](http://developer.pardot.com/kb/api-version-4/){:target="_blank"}. The Segment Pardot destination provides two different options to support this new functionality. Read on to learn more. @@ -61,7 +61,7 @@ analytics.identify('YOUR_DATABASE_USER_ID', { }); ``` -Find other accepted traits in [Pardot's Prospect field reference](https://developer.pardot.com/kb/object-field-references/#prospect). +Find other accepted traits in [Pardot's Prospect field reference](https://developer.pardot.com/kb/object-field-references/#prospect){:target="_blank"}. You can provide custom fields, but they won't be updated or visible until you create them in the Pardot user interface by going to **Admin > Configure Fields > Prospect Fields**. @@ -120,7 +120,7 @@ If possible, we recommend you explore bulk updating all existing users to ensure ### Client Side -On the client-side browser Segment loads Pardot's JavaScript snippet to enable [anonymous visitor tracking](http://www.pardot.com/products/marketing-automation/benefits/website-visitor-id-and-anonymous-visitor-tracking/). +On the client-side browser Segment loads Pardot's JavaScript snippet to enable [anonymous visitor tracking](http://www.pardot.com/products/marketing-automation/benefits/website-visitor-id-and-anonymous-visitor-tracking/){:target="_blank"}. ### Troubleshooting diff --git a/src/connections/destinations/catalog/parsely/index.md b/src/connections/destinations/catalog/parsely/index.md index f5882ea961..ee81074f33 100644 --- a/src/connections/destinations/catalog/parsely/index.md +++ b/src/connections/destinations/catalog/parsely/index.md @@ -3,12 +3,12 @@ rewrite: true title: Parse.ly Destination id: 558c9f7b0a20f4e22f0fb3bc --- -[Parse.ly](https://www.parse.ly) provides web analyses and content optimization for online publishers by partnering with them to provide clear audience insights through intuitive analytics. +[Parse.ly](https://www.parse.ly){:target="_blank"} provides web analyses and content optimization for online publishers by partnering with them to provide clear audience insights through intuitive analytics. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Parsely" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -19,13 +19,13 @@ When you enable Parse.ly from the Segment web app, your changes appear in the Se Remember to remove the Parse.ly native snippet from your page. -Parsely is more useful when you implement JSON-LD metadata across your website as described [here](https://www.parse.ly/help/integration/basic). +Parsely is more useful when you implement JSON-LD metadata across your website as described [here](https://www.parse.ly/help/integration/basic){:target="_blank"}. ## Page -By default, unless you are using [Dynamic Tracking](https://www.parse.ly/help/integration/dynamic/), Parse.ly automatically tracks pageviews in the background, so you do not need to track them separately with Segment's Page method. +By default, unless you are using [Dynamic Tracking](https://www.parse.ly/help/integration/dynamic/){:target="_blank"}, Parse.ly automatically tracks pageviews in the background, so you do not need to track them separately with Segment's Page method. -If you are using dynamic tracking, you must explicitly let us know in your [integration settings](/docs/connections/destinations/catalog/parsely/#enable-dynamic-tracking). If this setting is enabled, we will disable Parse.ly's autotracking functionality and begin sending their API pageview events only in response to `analytics.page()` events. +If you are using dynamic tracking, you must explicitly let us know in your [integration settings](#enable-dynamic-tracking). If this setting is enabled, we will disable Parse.ly's autotracking functionality and begin sending their API pageview events only in response to `analytics.page()` events. **Note:** You can only track pageviews if you are using the Parsely destination with our JavaScript Analytics.js library, and not using our server side integration with Parse.ly. @@ -176,7 +176,7 @@ When a user pauses playback of a video, you should use our [Video Playback Pause ### Video Playback Interrupted -When a playback of a video is interrupted, you should use our [Video Playback Interrupted](/docs/connections/spec/video/#playback-events) event. This event just takes an `assetId` and maps to Parse.ly's `reset` method (documentation [here](https://www.parse.ly/help/integration/video_v2/)). +When a playback of a video is interrupted, you should use our [Video Playback Interrupted](/docs/connections/spec/video/#playback-events) event. This event just takes an `assetId` and maps to Parse.ly's `reset` method (documentation [here](https://www.parse.ly/help/integration/video_v2/){:target="_blank"}). **Note:** this event is only relevant for web tracking. Our server side integration does not support this event. @@ -279,4 +279,4 @@ analytics.track({ #### Track URL -The destination does not currently support Parsely's `trackURL` method. [contact us](https://segment.com/requests/integrations/) if this is important to you. +The destination does not currently support Parsely's `trackURL` method. [contact Segment](https://segment.com/requests/integrations/){:target="_blank"} if this is important to you. diff --git a/src/connections/destinations/catalog/peaka/index.md b/src/connections/destinations/catalog/peaka/index.md new file mode 100644 index 0000000000..6c2b3a0350 --- /dev/null +++ b/src/connections/destinations/catalog/peaka/index.md @@ -0,0 +1,100 @@ +--- +title: Peaka Destination +id: 651ea97b7982672f1d66b93c +beta: true +--- + +[Peaka](https://peaka.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a Zero-ETL platform that connects to any source. With Peak you can ingest high-volume event and streaming data, and replace batch with real-time access. + +By integrating Peaka with their Segment workspace, users can designate Peaka as one of their destinations. This means that events such as pages, screens, tracks, +and more send directly to Peaka's Segment data catalog. With this integration, Peaka users can begin querying their product events. + +Peaka maintains this destination. For any issues with the destination, [contact the Peaka Support team](mailto:info@peaka.com). + +## Getting started + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for **Peaka** +2. Select **Peaka** and click **Add destination**. +3. Choose which source should send data to the Peaka destination. +4. Log in to [Peaka](https://peaka.studio/){:target="_blank"}. +5. Follow the steps in the [Peaka documentation](https://www.peaka.com/docs/integrations/segment/){:target="_blank"} to create your Segment catalog and obtain your **API key**. +6. Enter the **API Key** in the **Peaka** destination settings in the Segment UI. + +## Supported methods + +Peaka supports the following methods, as specified in the [Segment Spec](/docs/connections/spec). + +### Page + +Segment sends [Page](/docs/connections/spec/page) calls to Peaka. For example: + +```js +analytics.page("Retail Page", "Home"); +``` + +You can see Page event data in your Peaka Catalog under the pages table. + +### Screen + +Segment sends [Screen](/docs/connections/spec/screen) calls to Peaka. For example: + +```obj-c +[[SEGAnalytics sharedAnalytics] screen:@"Home" + properties:@{ @"Feed Type": @"private" }]; +``` + +You can see Screen event data in your Peaka Catalog under the screens table. + +### Identify + +Segment sends [Identify](/docs/connections/spec/identify) calls to Peaka. For example: + +```js +analytics.identify("97980cfea0067", { + name: "Peter Gibbons", + email: "peter@example.com", + plan: "premium", + logins: 5, +}); +``` + +You can see Identify event data in your Peaka Catalog under the identifies table. + +### Track + +Segment sends[Track](/docs/connections/spec/track) calls to Peaka. For example: + +```js +analytics.track("User Registered", { + plan: "Pro Annual", + accountType: "Facebook", +}); +``` + +You can see Track event data in your Peaka Catalog under the tracks table. + +### Group + +Segment sends [Group](/docs/connections/spec/group) calls to Peaka. For example: + +```js +analytics.group("0e8c78ea9d97a7b8185e8632", { + name: "Initech", + industry: "Technology", + employees: 329, + plan: "enterprise", + "total billed": 830, +}); +``` + +You can see Group event data in your Peaka Catalog under the groups table. + +### Alias + +Segment sends [Group](/docs/connections/spec/alias) calls to Peaka. For example: + +```js +analytics.alias("507f191e81"); +``` + +You can see Alias event data in your Peaka Catalog under the aliases table. diff --git a/src/connections/destinations/catalog/pendo-web-actions/index.md b/src/connections/destinations/catalog/pendo-web-actions/index.md new file mode 100644 index 0000000000..3921e4e611 --- /dev/null +++ b/src/connections/destinations/catalog/pendo-web-actions/index.md @@ -0,0 +1,7 @@ +--- +title: 'Pendo Web (Actions) Destination' +hidden: true +id: 6501a4325a8a629197cdd691 +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/pendo/index.md b/src/connections/destinations/catalog/pendo/index.md index a3cd8916f1..7d6f0f35f7 100644 --- a/src/connections/destinations/catalog/pendo/index.md +++ b/src/connections/destinations/catalog/pendo/index.md @@ -3,17 +3,17 @@ rewrite: true title: Pendo Destination id: 575ef2fc80412f644ff139be --- -[Pendo](http://www.pendo.io/) is a product cloud that helps product teams deliver software users love. With Pendo, product teams can understand product usage, collect feedback, measure NPS, onboard users, and announce new features in app—all without requiring engineering resources. +[Pendo](http://www.pendo.io/){:target="_blank"} is a product cloud that helps product teams deliver software users love. With Pendo, product teams can understand product usage, collect feedback, measure NPS, onboard users, and announce new features in app—all without requiring engineering resources. -Pendo maintains this destination. For any issues with the destination, [contact the Pendo Support team](https://help.pendo.io/). +Pendo maintains this destination. For any issues with the destination, [contact the Pendo Support team](https://support.pendo.io/hc/en-us/articles/360034163971){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Pendo" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the destination settings, enter your Pendo API Key which you can find in the Pendo UI under [Site Settings](https://app.pendo.io/admin) > Basic Information > API Key. +3. In the destination settings, enter your Pendo API Key which a Pendo admin can find in the Pendo UI by going to Settings > [Subscription Settings](https://app.pendo.io/admin){:target="_blank"} > Applications, opening the relevant app, then locating the **API key** value. Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Pendo's snippet on your page and sending data. @@ -29,12 +29,12 @@ To add the Pendo destination using Cloud-mode, use the [Webhooks](/docs/connecti 1. From the Segment web app, click **Catalog**. 2. Search for **Webhooks** in the Catalog, select it, and choose which of your JavaScript sources to connect the destination to. 3. Webhook URL configuration will vary based on which Pendo environment you use and your API key: - * For US customers, add the following as your Webhook URL: `https://segment.us.pendo.io/data/segmentio/YOUR_PENDO_API_KEY` and replace `YOUR_PENDO_API_KEY` with your actual Pendo API Key, which you can find in the Pendo UI under [Site Settings](https://app.pendo.io/admin) > Basic Information > API Key. - * For EU customers, add the following as your Webhook URL: `https://segment.eu.pendo.io/data/segmentio/YOUR_PENDO_API_KEY` and teplace `YOUR_PENDO_API_KEY` with your actual Pendo API Key, which you can find in the Pendo UI under [Site Settings](https://app.eu.pendo.io/admin) > Basic Information > API Key. + * For US customers, add the following as your Webhook URL: `https://data.pendo.io/data/segmentio/YOUR_PENDO_API_KEY` and replace `YOUR_PENDO_API_KEY` with your actual Pendo API Key, which a Pendo Admin can find in the Pendo UI by going to **Settings** > [Subscription Settings](https://app.pendo.io/admin){:target="_blank"} > **Applications**, opening the relevant app, then locating the **API key** value. + * For EU customers, add the following as your Webhook URL: `https://data.eu.pendo.io/data/segmentio/YOUR_PENDO_API_KEY` and replace `YOUR_PENDO_API_KEY` with your actual Pendo API Key, which a Pendo Admin can find in the Pendo UI by going to **Settings** > [Subscription Settings](https://app.eu.pendo.io/admin){:target="_blank"} > **Applications**, opening the relevant app, then locating the **API Key** value. 4. Headers are not required in Webhook configuration. Once you're done adding in your URL, save changes. 5. Using the `track` method requires a setting enabled on your Pendo subscription (cloud-mode only). Contact Pendo to enable this feature flag for your account. -To learn more about server-side data to Pendo, see Pendo's [support documentation](https://help.pendo.io/resources/support-library/integrations/segment-integration.html#send-server-side-data-to-pendo){:target = "_blank"}. +To learn more about server-side data to Pendo, see Pendo's [support documentation](https://support.pendo.io/hc/en-us/articles/360031870352){:target = "_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/perfect-audience/index.md b/src/connections/destinations/catalog/perfect-audience/index.md index 9bcff6547c..986a5bb730 100644 --- a/src/connections/destinations/catalog/perfect-audience/index.md +++ b/src/connections/destinations/catalog/perfect-audience/index.md @@ -3,13 +3,15 @@ rewrite: true title: Perfect Audience Destination id: 54521fda25e721e32a72eee5 --- -[Perfect audience](http://www.perfectaudience.com/) is a retargeting platform that lets marketers bring back lost web visitors through Facebook ads and banner ads in the web. +[Perfect audience](http://www.perfectaudience.com/){:target="_blank"} is a retargeting platform that lets marketers bring back lost web visitors through Facebook ads and banner ads in the web. -If you notice any gaps, out-dated information or simply want to leave some feedback to help us improve our documentation, [let us know](https://segment.com/help/contact)! +If you notice any gaps, out-dated information or simply want to leave some feedback to help us improve our documentation, [let Segment know](https://segment.com/help/contact){:target="_blank"}. + + ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Perfect Audience" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/perimeterx/index.md b/src/connections/destinations/catalog/perimeterx/index.md index 1afbd9263a..1be5e1fe1f 100644 --- a/src/connections/destinations/catalog/perimeterx/index.md +++ b/src/connections/destinations/catalog/perimeterx/index.md @@ -9,7 +9,7 @@ When you enable the PerimeterX destination in the Segment app, your changes appe ## Getting Started -1. Configure your [Policy and Application within PerimeterX](https://dash.readme.io/project/pxconsole/v1.0/docs/segment). +1. Configure your [Policy and Application within PerimeterX](https://dash.readme.io/project/pxconsole/v1.0/docs/segment){:target="_blank"}. 2. Copy your Application ID and paste into your Segment PerimeterX settings ## Identify diff --git a/src/connections/destinations/catalog/perkville/index.md b/src/connections/destinations/catalog/perkville/index.md index 1b61d811e9..f3adaaa2d8 100644 --- a/src/connections/destinations/catalog/perkville/index.md +++ b/src/connections/destinations/catalog/perkville/index.md @@ -3,7 +3,7 @@ title: Perkville Destination rewrite: true id: 60de4ee01f55f299594f38ed --- -[Perkville](https://www.perkville.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a customer reward and referral platform - similar to airline mile programs - that integrates with e-commerce, point of sale, membership and scheduling systems to provide a seamless experience that drives referrals and loyalty. +[Perkville](https://www.perkville.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a customer reward and referral platform - similar to airline mile programs - that integrates with e-commerce, point of sale, membership and scheduling systems to provide a seamless experience that drives referrals and loyalty. This destination is maintained by Perkville. For any issues with the destination, [contact the Perkville Support team](mailto:support@perkville.com). @@ -12,7 +12,7 @@ The Perkville Destination is in beta, which means that they are still actively d ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Perkville" in the Destinations Catalog, and select the "Perkville" destination. diff --git a/src/connections/destinations/catalog/persistiq/index.md b/src/connections/destinations/catalog/persistiq/index.md index 5f1ac965f4..1847cfef95 100644 --- a/src/connections/destinations/catalog/persistiq/index.md +++ b/src/connections/destinations/catalog/persistiq/index.md @@ -3,20 +3,18 @@ rewrite: true title: PersistIQ Destination id: 5c75e3ca088b680001eb30fa --- -[PersistIQ](https://www.persistiq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the easiest sales engagement software to use. Sales teams use PersistIQ to connect with more prospects using targeted emails, calls, and tasks. +[PersistIQ](https://www.persistiq.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the easiest sales engagement software to use. Sales teams use PersistIQ to connect with more prospects using targeted emails, calls, and tasks. This destination is maintained by PersistIQ. For any issues with the destination, [contact the PersistIQ Support team](mailto:support@persistiq.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "PersistIQ" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find at the bottom of your [PersistIQ Integrations page](https://persistiq.com/app#/integrations). +3. Enter the "API Key" into your Segment Settings UI which you can find at the bottom of your [PersistIQ Integrations page](https://persistiq.com/app#/integrations){:target="_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/personas-display-video-360/index.md b/src/connections/destinations/catalog/personas-display-video-360/index.md index 770daa7870..c203f4f2c2 100644 --- a/src/connections/destinations/catalog/personas-display-video-360/index.md +++ b/src/connections/destinations/catalog/personas-display-video-360/index.md @@ -3,8 +3,20 @@ title: Personas Google Display & Video 360 Destination strat: google hide-settings: true id: 5d4dd5b989eda01a09b5cdb1 +engage: true --- -Google's [Display & Video (DV360)](https://marketingplatform.google.com/about/display-video-360/) service is an end-to-end campaign management tool that enables enterprise customers to plan, measure, and run display and video advertisements. + +> warning "Deprecation Notice" +> Due to Google retiring certain APIs on March 6, 2024, Segment deprecated this destination. Segment created an instance of the [Display and Video (Actions)](/docs/connections/destinations/catalog/actions-display-video-360/) destination for each properly configured version of the Personas Google Display and Video 360 classic destination in your workspace. +> +> Segment automatically migrated destination settings and configurations, but you must take additional action to ensure your migrated destination functions as intended. For more information, see [Migrate from Personas Google Display & Video 360 Destination ](/docs/connections/destinations/catalog/actions-display-video-360/#migrate-from-personas-google-display-&-video-360-destination) +> +> Segment disabled all existing Personas Display and Video 360 destinations. You can still access your existing configuration, but do not enable the destination, as it has been deprecated. You will no longer be able to create new instances of Personas Display and Video 360. Check out the [Display and Video (Actions)](/docs/connections/destinations/catalog/actions-display-video-360/) documentation if you want to set up a new instance of Google Display and Video 360. +> +> For questions or issues contact [friends@segment.com](mailto:friends@segment.com). + + +Google's [Display & Video (DV360)](https://marketingplatform.google.com/about/display-video-360/){:target="_blank"} service is an end-to-end campaign management tool that enables enterprise customers to plan, measure, and run display and video advertisements. > info "" > **Note**: You can connect to a Google Ad Manager account. For more information, see [4. Create an audience and finish DV360 configuration](#4-create-an-audience-and-finish-dv360-configuration) below. @@ -19,6 +31,9 @@ Segment's integration with DV360 enables Segment customers to sync audiences cre > info "" > **Note**: Since the release of `analytics-ios` version 4, Segment no longer collects IDFA automatically. To collect and pass IDFA to your DV360 integration, follow the steps for Ad Tracking and IDFA in the [Analytics-iOS mobile source](/docs/connections/sources/catalog/libraries/mobile/ios#ad-tracking-and-idfa) documentation. +> info "Consent mode" +> Google enforced consent on March 6, 2024 for European Economic Area (EEA) users. Learn more about [consent mode](/docs/connections/destinations/catalog/personas-display-video-360/#consent-mode) and how to set it up. + ## Details {% comment %}
    @@ -212,7 +227,7 @@ When you select the destination, you're prompted to complete the destination set | Setting | Description | | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | User Role Granted | The permission you requested from Google. Either `Advertiser`, `Partner`, or `Publisher`. **Note:** Select `Publisher` only if you plan to connect to Google Ad Manager. | -| Account ID | The ID of your DV360 or Ad Manager account. | +| Account ID | The ID of your DV360 or Ad Manager account. For help finding your Account ID, see [Display & Video 360 Help](https://support.google.com/displayvideo/answer/3423704?hl=en#zippy=){:target="_blank"}. | On Step 3: Review & Create, **deselect** the Historical Backfill option to ensure that audience sizes between Engage and DV360 align more closely. @@ -228,6 +243,15 @@ After you complete the set up process, allow up to 24 hours for Google to create Extra information from the API (settings, connection modes, etc.) are automatically pulled in here. {% include content/sync-frequency-note.md %} +## Consent mode +[Consent mode](https://support.google.com/analytics/answer/9976101?hl=en){:target="_blank"} is a feature provided by Google in the context of its products, particularly the Gtag library and Google Analytics. As of March 6, 2024, Google announced that consent mode must function for European Economic Area (EEA) users, otherwise data from EEA users won't process. + +Consent mode in the Gtag library and Google Analytics is designed to help website owners comply with privacy regulations, such as the General Data Protection Regulation (GDPR) in the European Union. It allows website owners to adjust how these tools use and collect data based on user consent. + +With consent mode, you can configure your website to dynamically adjust the tracking behavior of the Gtag library and Google Analytics based on the user's consent status. If a user provides consent to data processing, both the Gtag library and Google Analytics can collect and use that data for analysis. If a user doesn't provide consent, both tools limit data collection to essential functions, helping businesses respect user privacy preferences. + +Segment automatically sends consent as `TRUE` for this destination. Segment uses the [bulk-uploader workflow](https://developers.google.com/authorized-buyers/rtb/bulk-uploader#workflow){:target="_blank"} which requires consented data. Ensure all audiences and journeys are connected to consented audiences. + ## FAQ ### What is Segment's relationship with Google DV360 and is the data that Segment sends considered to be First or Third party? @@ -241,7 +265,7 @@ When you complete the connection between Segment and DV360, it can take from 24 ### What identifiers are needed to enable this integration? -Google's [documentation](https://developers.google.com/authorized-buyers/rtb/downloads/cookie-bulk-upload-proto) provides information about the accepted identifiers for this integration. +Google's [documentation](https://developers.google.com/authorized-buyers/rtb/downloads/cookie-bulk-upload-proto){:target="_blank"} provides information about the accepted identifiers for this integration. - To use DV360 with web traffic, you must collect `anonymous_id` through the client-side `analytics.js` Source. diff --git a/src/connections/destinations/catalog/personas-facebook-custom-audiences/index.md b/src/connections/destinations/catalog/personas-facebook-custom-audiences/index.md index 5c3e110733..f1ce669279 100644 --- a/src/connections/destinations/catalog/personas-facebook-custom-audiences/index.md +++ b/src/connections/destinations/catalog/personas-facebook-custom-audiences/index.md @@ -4,6 +4,7 @@ strat: facebook hide-boilerplate: true redirect_from: '/connections/destinations/catalog/personas-facebook-ads/' id: 5a4d24dcc5836400017188f6 +engage: true --- ## Overview @@ -15,15 +16,17 @@ This allows you to run advertising campaigns in Facebook without having to manua ## Other Facebook Destinations Supported by Segment -This page is about the **Facebook Custom Audiences** destination developed specifically for use with **EngagePersonas**. For documentation on other Facebook destinations, see the pages linked below. +This page is about the **Facebook Custom Audiences** destination developed specifically for use with [Engage](/docs/engage/). No other sources support this destination. For documentation on other Facebook destinations, see the pages linked below. -| **Facebook Destination** | Supported by Engage | -| ----------------------------------------------------------------------------------------------------------- | ------------------- | -| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/)** | Yes | -| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/)** | Yes | -| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/)** | No | -| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/)** | Yes | -| **[Facebook Conversions API](/docs/connections/destinations/catalog/actions-facebook-conversions-api/)** | Yes | +| **Facebook Destination** | Supported by Engage | +| ----------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| **[Facebook App Events](/docs/connections/destinations/catalog/facebook-app-events/){:target="_blank"}** | Yes | +| **[Facebook Offline Conversions](/docs/connections/destinations/catalog/facebook-offline-conversions/){:target="_blank"}** | Yes | +| **[Facebook Pixel](/docs/connections/destinations/catalog/facebook-pixel/){:target="_blank"}** | No | +| **[Facebook Custom Audiences](/docs/connections/destinations/catalog/personas-facebook-custom-audiences/){:target="_blank"}** | Yes | +| **[Facebook Conversions API](/docs/connections/destinations/catalog/actions-facebook-conversions-api/){:target="_blank"}** | Yes | + + ## Details @@ -74,11 +77,14 @@ Facebook offers the Facebook Pixel, which allows you to retarget these types of ### 1. Authorize Facebook Custom Audiences -- Go to your Space in your Segment Workspace. -- Go to the Destinations tab and click “Add Destination”. +- Go to your Space in your Segment Workspace and click Engage Settings. +- Go to the Destinations tab and click “Add Destination”. - Select the Facebook Custom Audiences option, and click **Configure Facebook Custom Audiences**. - Authorize Facebook Ads and select a Facebook account ID to sync to. +> info "" +> Add the destination within the Engage space and not through the connections pipeline to ensure proper configuration. + ### 2. Create an audience in Engage & connect to Facebook - Go to the Audience Builder in Engage and create a new Audience with your desired event and trait criteria. @@ -101,10 +107,13 @@ Once created, the audience should be available in Facebook in ten minutes unless ## Additional Traits Matching -> note "" -> This feature is in Public Preview and usage is subject to the terms contained in the [First Access and Beta Preview Terms](https://segment.com/legal/first-access-beta-preview/){:target="_blank"}. For access, contact your CSM or email Segment at [friends@segment.com](mailto:friends@segment.com). +> info "" +> This feature is in Public Preview and usage is subject to the terms contained in the [First Access and Beta Preview Terms](https://segment.com/legal/first-access-beta-preview/){:target="_blank"}{:target="_blank"}. For access, contact your CSM or email Segment at [friends@segment.com](mailto:friends@segment.com). + +Previously, Segment only sent email and mobile IDs to Facebook. A new beta feature can send an expanded list of identifiers or traits to Facebook, so that Facebook can try to use these additional data points to match to their user profiles. If you have this feature enabled and implemented any of these traits in your Segment tracking, Engage can send this data to Facebook. Segment can now also sync multiple emails if the profile contains more than one. Additionally as part of this feature, Segment hashes fields before sending them downstream to Facebook, if required. (See the table below for hashing requirements.) Note that the trait data implemented in your Segment tracking must match the naming convention and format specified in the table below, otherwise Segment can't send it to Facebook. -Previously, Segment only sent email and mobile IDs to Facebook. A new beta feature can send an expanded list of identifiers or traits to Facebook, so that Facebook can try to use these additional data points to match to their user profiles. If you have this feature enabled and implemented any of these traits in your Segment tracking, Engage can send this data to Facebook. Segment can now also sync multiple emails if the profile contains more than one. Additionally as part of this feature, Segment hashes fields before sending them downstream to Facebook, if required. (See the table below for hashing requirements.) Please note that the trait data implemented in your Segment tracking must match the naming convention and format specified in the table below, otherwise Segment can't send it to Facebook. +> success "" +> Visit Segment's [Trait Enrichment](/docs/engage/trait-activation/trait-enrichment/) to learn more. | **Name** | **Trait Key formats supported** | **Facebook Keys** | **FB Hashing Required** | **FB Guidelines** | @@ -127,7 +136,7 @@ Previously, Segment only sent email and mobile IDs to Facebook. A new beta featu ### Not seeing an audience in Facebook -Make sure you authorized Facebook and selected the correct account ID. +If syncs to the destination are failing, this might be due to an authorization error. Whoever created the destination account needs to accept the TOS. The account manager then needs to log in to their Facebook account, navigate to **Audiences > Search Audience** and click **Accept Terms**. ### Audience size smaller than expected @@ -135,7 +144,11 @@ Segment sends lists of users with identifiers that Facebook supports to Facebook For example, many B2B SaaS businesses have users that sign up for their products with a work email address, like `jane.doe@segment.com`. However, most Facebook users sign up for Facebook with a personal email only, like `janedoe@gmail.com`. If you only provide the work email address, and no other identifiers, then Facebook can't match your user to the Jane Doe Facebook profile. This is the case for all identifiers - Facebook must have the identifier somewhere in a user's profile, or else they can't match on it. -Please note, emails must be in a plain text format. Facebook also provides these guidelines for the emails that you send to them: trim leading, trail whitespace, and convert all characters to lowercase. +### Why are all of my audiences connected to Facebook failing with an 'Internal Error' message? + +Most likely, this is due to your Facebook account needing to be reauthorized, sometimes due to a password change. Reauthorize the Facebook destination connection. If the error persists, contact Segment Support. + +Note, emails must be in a plain text format. Facebook also provides these guidelines for the emails that you send to them: trim leading, trail whitespace, and convert all characters to lowercase. ### Do you support LTV audiences? Facebook has a feature called [value-based audiences](https://developers.facebook.com/docs/marketing-api/audiences/guides/value-based-lookalike-audiences/){:target="_blank"} where you can send an additional field like LTV, to tell Facebook how to optimize their advertising based on a customer's value. diff --git a/src/connections/destinations/catalog/personyze/index.md b/src/connections/destinations/catalog/personyze/index.md index 5aeccff885..6ae97d2776 100644 --- a/src/connections/destinations/catalog/personyze/index.md +++ b/src/connections/destinations/catalog/personyze/index.md @@ -3,20 +3,18 @@ rewrite: true title: Personyze Destination id: 5c6de64f037dcf00014f8f84 --- -[Personyze](https://www.personyze.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a complete cross-channel personalization solution for showing highly optimized content in websites, emails, and apps using targeting and recommendation engines, and a variety of content creation, editing, and A/B testing tools. +[Personyze](https://www.personyze.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a complete cross-channel personalization solution for showing highly optimized content in websites, emails, and apps using targeting and recommendation engines, and a variety of content creation, editing, and A/B testing tools. This destination is maintained by Personyze. For any issues with the destination, [contact the Personyze Support team](mailto:info@personyze.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Personyze" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Personyze dashboard](https://personyze.com/site/tracker/condition/index#cat=Account%20settings%2FMain%20settings%2FIntegrations/conditions) under Account Settings > Integrations > Segment > Get Keys +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Personyze dashboard](https://personyze.com/site/tracker/condition/index#cat=Account%20settings%2FMain%20settings%2FIntegrations/conditions){:target="_blank"} under Account Settings > Integrations > Segment > Get Keys 4. Once you've updated the API key in Segment, data from the source you selected will be shown right away in Personyze under "Manage Visitor Profiles". diff --git a/src/connections/destinations/catalog/pingdom/index.md b/src/connections/destinations/catalog/pingdom/index.md index 86a916a60e..324021cdea 100644 --- a/src/connections/destinations/catalog/pingdom/index.md +++ b/src/connections/destinations/catalog/pingdom/index.md @@ -5,6 +5,6 @@ id: 54521fda25e721e32a72eee6 ## Getting Started When you enable Pingdom in the Segment web app, your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Pingdom's JavaScript onto your page. This means you should remove Pingdom's snippet from your page if had previously put it there. -+ Pingdom will automatically start recording page load times. Go to [Pingdom](https://my.pingdom.com/rum) to view your page load performance data. ++ Pingdom will automatically start recording page load times. Go to [Pingdom](https://my.pingdom.com/rum){:target="_blank"} to view your page load performance data. Since Pingdom only records data about page load performance, it does not collect any of the data represented by our API. diff --git a/src/connections/destinations/catalog/pinterest-audiences/index.md b/src/connections/destinations/catalog/pinterest-audiences/index.md index c2650a1529..43709f0eaa 100644 --- a/src/connections/destinations/catalog/pinterest-audiences/index.md +++ b/src/connections/destinations/catalog/pinterest-audiences/index.md @@ -2,11 +2,16 @@ title: 'Pinterest Audiences Destination' id: 5f3ada4acea48a461353d5af --- +> warning "Migration of Pinterest Marketing API from v4 to v5" +> Pinterest has upgraded their Marketing API from v4 to v5 and are sunsetting their v4 API on **June 30, 2023**. To keep your account up-to-date and keep data flowing into Pinterest without interruption, please manually re-authenticate each instance of the Pinterest Audiences destination in your Segment workspace before June 30. This is the only required step for Segment customers sending data to Pinterest through the Pinterest Audiences destination. You can read more about the Pinterest v4 end of life in [Pinterest’s documentation](https://developers.pinterest.com/docs/getting-started/migration/){:target="_blank"}. + + + Pinterest Ads provides a way to target advertisements on Pinterest to a global audience. Segment's Pinterest Audiences integration allows Engage customers to sync audiences from Engage to Pinterest for better retargeting and higher-performing ads. For more information about advertising with Pinterest, see: -- [Pinterest Developers](https://developers.pinterest.com/docs/widgets/getting-started/?) -- [Pinterest for Business](https://business.pinterest.com/) +- [Pinterest Developers](https://developers.pinterest.com/docs/widgets/getting-started/?){:target="_blank"} +- [Pinterest for Business](https://business.pinterest.com/){:target="_blank"} ## Details diff --git a/src/connections/destinations/catalog/pinterest-tag/index.md b/src/connections/destinations/catalog/pinterest-tag/index.md index 7596fdc5ec..a4edb7ec33 100644 --- a/src/connections/destinations/catalog/pinterest-tag/index.md +++ b/src/connections/destinations/catalog/pinterest-tag/index.md @@ -12,7 +12,7 @@ Here's how you can get started with using the Pinterest Tag! ### **1. Log into the Pinterest business account.** -In order to access the Pinterest Tag, you will need to have a Pinterest business account. If you don't yet have one, sign up for one [here](https://ads.pinterest.com/). +In order to access the Pinterest Tag, you will need to have a Pinterest business account. If you don't yet have one, sign up for one [here](https://ads.pinterest.com/){:target="_blank"}. ### **2. From the Ads menu, select Conversions.** @@ -45,7 +45,7 @@ Select that option and put in the Pinterest Tag ID that we collected earlier. Se ## Segment Event Mapping to Pinterest Event Types -Segment automatically binds the following Segment events to the Pinterest [Event Types](https://developers.pinterest.com/docs/ad-tools/conversion-tag/?#eventcode): +Segment automatically binds the following Segment events to the Pinterest [Event Types](https://developers.pinterest.com/docs/ad-tools/conversion-tag/?#eventcode){:target="_blank"}: + (Segment Spec Event => Pinterest Tag Event Type) + Products Searched => Search @@ -60,7 +60,7 @@ In the Segment.com Pinterest Tag destination settings, one can define their own ## Segment Event Mapping to Pinterest Event Data -Segment automatically binds the following properties to Pinterest [Event Data](https://developers.pinterest.com/docs/ad-tools/conversion-tag/?#event-data-in-javascript): +Segment automatically binds the following properties to Pinterest [Event Data](https://developers.pinterest.com/docs/ad-tools/conversion-tag/?#event-data-in-javascript){:target="_blank"}: + (Segment Spec Property => Pinterest Tag Event Data) + query => search_query @@ -85,7 +85,7 @@ Segment supports Pinterest Enhanced Match in two scenarios: 1. where a user is already identified when they visit your site 2. when a user visits your site anonymously but is identified at some later point. -To support Pinterest Enhanced Match in the first scenario, go to the Pinterest Tag destination settings in the Segment web app, and click **Enable Enhanced Match to on Page Load**. This attaches the hashed email address on the initial page load conversion event. For more information see the [Pinterest enhanced-match documentation here](https://help.pinterest.com/en/business/article/enhanced-match). +To support Pinterest Enhanced Match in the first scenario, go to the Pinterest Tag destination settings in the Segment web app, and click **Enable Enhanced Match to on Page Load**. This attaches the hashed email address on the initial page load conversion event. For more information see the [Pinterest enhanced-match documentation here](https://help.pinterest.com/en/business/article/enhanced-match){:target="_blank"}. To support the second scenario, where a user visits your site anonymously, but is identified at a later point, you do not need to change any of the Pinterest destination settings. Instead, you can make an `identify()` call with the user's email address, which triggers a Pinterest `set()` method. This saves the identification parameters so they can be sent with the next event, so it's important to `set` the values as early as possible. diff --git a/src/connections/destinations/catalog/pixelme/index.md b/src/connections/destinations/catalog/pixelme/index.md index b83a76fd9a..fa2c6138bd 100644 --- a/src/connections/destinations/catalog/pixelme/index.md +++ b/src/connections/destinations/catalog/pixelme/index.md @@ -3,7 +3,7 @@ rewrite: true title: PixelMe Destination hidden: true --- -[PixelMe](https://pixelme.me/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) Smart Attribution works by gathering all your traffic from any source and attributing it instantly using UTMs. Combined with our event tracking, you can easily see which traffic is causing which conversions on your website. +[PixelMe](https://pixelme.me/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} Smart Attribution works by gathering all your traffic from any source and attributing it instantly using UTMs. Combined with our event tracking, you can easily see which traffic is causing which conversions on your website. This destination is maintained by PixelMe. For any issues with the destination, [contact the PixelMe team](mailto:team@pixelme.me). @@ -13,11 +13,11 @@ This destination is maintained by PixelMe. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "PixelMe" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can directly copy-paste from your [PixelMe dashboard](https://app.pixelme.me). +3. Enter the "API Key" into your Segment Settings UI which you can directly copy-paste from your [PixelMe dashboard](https://app.pixelme.me){:target="_blank"}. 4. To find the API Key, go to Settings > Integrations ## Page diff --git a/src/connections/destinations/catalog/planhat/index.md b/src/connections/destinations/catalog/planhat/index.md index dbfd372857..81f4b7787d 100644 --- a/src/connections/destinations/catalog/planhat/index.md +++ b/src/connections/destinations/catalog/planhat/index.md @@ -4,7 +4,7 @@ id: 55bbefd70a20f4e22f0fb3e5 --- ## Getting Started -Getting data from Segment to Planhat's [Customer Success Tool](http://www.planhat.com/) is easy. +Getting data from Segment to Planhat's [Customer Success Tool](http://www.planhat.com/){:target="_blank"} is easy. Once the Segment library is integrated with your product, toggle Planhat on in your Segment destinations, and add your Planhat API Key which you can generate in Planhat under App Settings > API Access. diff --git a/src/connections/destinations/catalog/playerzero-cloud/index.md b/src/connections/destinations/catalog/playerzero-cloud/index.md new file mode 100644 index 0000000000..b4c21f0b99 --- /dev/null +++ b/src/connections/destinations/catalog/playerzero-cloud/index.md @@ -0,0 +1,23 @@ +--- +title: PlayerZero Cloud Destination +id: 6492cbd495feedacdcf431a4 +private: true +--- +{% include content/plan-grid.md name="actions" %} + +[PlayerZero](https://www.playerzero.ai/){:target="_blank"} is an AI copilot that gives you the power to ask complex product questions in simple human language and find cause and effect relationships between customer experiences and the work your team is doing. + +This destination is maintained by PlayerZero. For any issues with the destination, [contact their Support team](mailto:support@playerzero.ai){:target="_blank"}. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Select PlayerZero Cloud, then click **Configure PlayerZero Cloud**. +4. Select an existing Source to connect to PlayerZero Cloud and click **Next**. +5. Enter a destination name and click **Create Destination**. + +Congratulations, you've completed setup and your events will begin streaming into PlayerZero. + + +{% include components/actions-fields.html %} diff --git a/src/connections/destinations/catalog/playerzero-web/index.md b/src/connections/destinations/catalog/playerzero-web/index.md deleted file mode 100644 index 5d5975f038..0000000000 --- a/src/connections/destinations/catalog/playerzero-web/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'PlayerZero Web Destination' -hidden: true -id: 634ef204885be3def430af66 -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/podsights/index.md b/src/connections/destinations/catalog/podsights/index.md index dcee6e7799..edd44cefeb 100644 --- a/src/connections/destinations/catalog/podsights/index.md +++ b/src/connections/destinations/catalog/podsights/index.md @@ -3,21 +3,19 @@ rewrite: true title: Podsights Destination id: 5d25eddde3ff660001b3adda --- -[Podsights](https://podsights.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) measures the effectiveness of podcast advertising. Through integrations with podcast hosting providers, matches downloads with on-site actions, providing advertisers household-level attribution. +[Podsights](https://podsights.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} measures the effectiveness of podcast advertising. Through integrations with podcast hosting providers, matches downloads with on-site actions, providing advertisers household-level attribution. This destination is maintained by Podsights. For any issues with the destination, [contact the Podsights Support team](mailto:hello@podights.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Podsights" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Visit your [Podsights dashboard](https://analytics.podsights.com) and navigate to Manage > Pixels. Copy your Pixel ID which will be your Segment "API Key". +3. Visit your [Podsights dashboard](https://analytics.podsights.com){:target="_blank"} and navigate to Manage > Pixels. Copy your Pixel ID which will be your Segment "API Key". 4. Drop the Pixel ID in the "API Key" field in your Segment Settings UI. diff --git a/src/connections/destinations/catalog/posthog/index.md b/src/connections/destinations/catalog/posthog/index.md index 042f5e1428..b601022555 100644 --- a/src/connections/destinations/catalog/posthog/index.md +++ b/src/connections/destinations/catalog/posthog/index.md @@ -9,7 +9,7 @@ This destination is maintained by PostHog. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "PostHog" in the Destinations Catalog, and select the PostHog destination. diff --git a/src/connections/destinations/catalog/primer/index.md b/src/connections/destinations/catalog/primer/index.md index 60f710d484..475e92a99d 100644 --- a/src/connections/destinations/catalog/primer/index.md +++ b/src/connections/destinations/catalog/primer/index.md @@ -5,9 +5,9 @@ title: Primer Destination ## Getting Started -First you will need to register an account with [Primer](https://goprimer.com) to get a Primer token. +First you will need to register an account with [Primer](https://goprimer.com){:target="_blank"} to get a Primer token. -Once the Segment iOS SDK and the Segment-Primer CocoaPod is integrated with your app, toggle Primer on in your Segment destinations, and add your Primer token, which you can find on the Primer Dashboard under Project Settings. Refer to the [Primer Documentation](http://docs.goprimer.com) for more details on how to set up Primer. +Once the Segment iOS SDK and the Segment-Primer CocoaPod is integrated with your app, toggle Primer on in your Segment destinations, and add your Primer token, which you can find on the Primer Dashboard under Project Settings. Refer to the [Primer Documentation](http://docs.goprimer.com){:target="_blank"} for more details on how to set up Primer. Since Primer needs to be initialized as early as possible, you need to supply the token when you initialize the factory that is registered with the analytics client. diff --git a/src/connections/destinations/catalog/productbird/index.md b/src/connections/destinations/catalog/productbird/index.md index 2e9d25d23b..1dcfb41ac1 100644 --- a/src/connections/destinations/catalog/productbird/index.md +++ b/src/connections/destinations/catalog/productbird/index.md @@ -3,18 +3,18 @@ title: ProductBird Destination rewrite: true id: 5fe9e8d3dc1fbccfdfbd1490 --- -[ProductBird](https://productbird.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides a way for SaaS companies to have conversations with their users at scale, allowing them to make better product decisions. +[ProductBird](https://productbird.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides a way for SaaS companies to have conversations with their users at scale, allowing them to make better product decisions. This destination is maintained by ProductBird. For any issues with the destination, [contact the ProductBird Support team](mailto:harry@getdelighted.co). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "ProductBird" in the Destinations Catalog, and select the ProductBird destination. 3. Choose which Source should send data to the ProductBird destination. -4. Go to your [ProductBird Settings](https://app.productbird.io/settings), find and copy the "Secret API Key". +4. Go to your [ProductBird Settings](https://app.productbird.io/settings){:target="_blank"}, find and copy the "Secret API Key". 5. Enter the "Secret API Key" in the ProductBird destination settings in Segment. ## Identify @@ -32,7 +32,7 @@ analytics.identify('userId123', { Use the Identify method to pass user properties into user profiles in ProductBird. -Read more about [ProductBird's Special Properties](https://docs.productbird.io/docs/#special-properties) which have reserved meanings. +Read more about [ProductBird's Special Properties](https://docs.productbird.io/docs/#special-properties){:target="_blank"} which have reserved meanings. > success "Success message." > If the ProductBird widget is implemented, ensure that the `userId` matches exactly with the corresponding ProductBird userID. diff --git a/src/connections/destinations/catalog/profitwell/index.md b/src/connections/destinations/catalog/profitwell/index.md index 131e15e641..057a9d80c6 100644 --- a/src/connections/destinations/catalog/profitwell/index.md +++ b/src/connections/destinations/catalog/profitwell/index.md @@ -1,23 +1,20 @@ --- title: ProfitWell Destination rewrite: true -beta: true id: 5d24e7d30417730001556db0 --- -[ProfitWell](https://www.profitwell.com) provides free subscription metrics to help you identify opportunities and then tools to help you reduce churn, optimize pricing, and grow your subscription business end-to-end. This integration enables ProfitWell users to use it's Retain product and Engagement Tracking capabilities. +[ProfitWell](https://www.profitwell.com){:target="_blank"} provides free subscription metrics to help you identify opportunities and then tools to help you reduce churn, optimize pricing, and grow your subscription business end-to-end. This integration enables ProfitWell users to use it's Retain product and Engagement Tracking capabilities. This destination is maintained by ProfitWell. For any issues with the destination, [contact the ProfitWell Support team](mailto:product@profitwell.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "ProfitWell" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. Drop your token into the Segment destination settings for "Public API Token". -You can find your public token in the [Retain control center](https://www2.profitwell.com/app/engagement) under preview snippet. +You can find your public token in the [Retain control center](https://www2.profitwell.com/app/engagement){:target="_blank"} under preview snippet. 4. Select "wep app" in the dropdown if you're tracking inside the app or "marketing" for your marketing site. ## Identify @@ -32,7 +29,7 @@ analytics.identify('userId123', { Identify calls will start the ProfitWell service using the customer's email to track them. If no email is provided it will start the service anonymously. -[Customers](https://www2.profitwell.com/app/customers) need to be created first within ProfitWell in order for the indentify calls to trigger their engagements. +[Customers](https://www2.profitwell.com/app/customers){:target="_blank"} need to be created first within ProfitWell in order for the indentify calls to trigger their engagements. > note "" > **Note**: The data doesn't sync into the ProfitWell UI in real time. It can take up to 24 hours to reflect. diff --git a/src/connections/destinations/catalog/proof-experiences/index.md b/src/connections/destinations/catalog/proof-experiences/index.md index 7cdba003b6..a7c05be03b 100644 --- a/src/connections/destinations/catalog/proof-experiences/index.md +++ b/src/connections/destinations/catalog/proof-experiences/index.md @@ -1,21 +1,17 @@ --- title: 'Proof Experiences Destination' -beta: true rewrite: true redirect_from: '/connections/destinations/catalog/proof/' id: 5c4ba7167eed0c0001977f25 --- -[Proof Experiences](https://useproof.com/experiences?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps B2B SaaS businesses increase new trials and demos by creating delightfully personalized experiences for their visitors and customers. +[Proof Experiences](https://useproof.com/experiences?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps B2B SaaS businesses increase new trials and demos by creating delightfully personalized experiences for their visitors and customers. This destination is maintained by Proof. For any issues with the destination, [contact the Proof Experiences Support team](mailto:help@useproof.com). -{% include content/beta-note.md %} - - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Proof Experiences" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/prosperstack/index.md b/src/connections/destinations/catalog/prosperstack/index.md index 9d90a9227d..7df9c7cbaf 100644 --- a/src/connections/destinations/catalog/prosperstack/index.md +++ b/src/connections/destinations/catalog/prosperstack/index.md @@ -4,13 +4,13 @@ rewrite: true beta: true id: 6116daebcc926a434fe41bb3 --- -[ProsperStack](https://prosperstack.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the hosted cancellation flow for subscription businesses that automatically prevents churn. Retain customers with targeted offers and interventions designed to prevent cancellations and increase customer lifetime value. +[ProsperStack](https://prosperstack.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the hosted cancellation flow for subscription businesses that automatically prevents churn. Retain customers with targeted offers and interventions designed to prevent cancellations and increase customer lifetime value. ProsperStack maintains this destination. For any issues with the ProsperStack Destination, [contact the ProsperStack Support team](mailto:support@prosperstack.com). ## Getting Started -{% include content/connection-modes.md %} + ### Automated setup diff --git a/src/connections/destinations/catalog/qualaroo/index.md b/src/connections/destinations/catalog/qualaroo/index.md index f2a3d6ade9..ffd955a5bb 100644 --- a/src/connections/destinations/catalog/qualaroo/index.md +++ b/src/connections/destinations/catalog/qualaroo/index.md @@ -3,11 +3,11 @@ rewrite: true title: Qualaroo Destination id: 54521fda25e721e32a72eee8 --- -[Qualaroo](https://qualaroo.com/home) is a user testing tool that lets you add a survey to any page on your site, so you can get targeted user feedback as the user is performing a task. The `analytics.js` Qualaroo Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-qualaroo). +[Qualaroo](https://qualaroo.com/){:target="_blank"} is a user testing tool that lets you add a survey to any page on your site, so you can get targeted user feedback as the user is performing a task. The `analytics.js` Qualaroo Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-qualaroo){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Qualaroo" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -38,7 +38,7 @@ When you call `identify` we call `_kiq.push(['identify', userId]);` with the `us ## Track -**Note:** The use of [a custom property to trigger a survey](https://help.qualaroo.com/hc/en-us/articles/201441516) made available by utilizing a Segment Track call is currently not supported due to some code changes. The below section will *not* trigger a survey at this time. +**Note:** The use of [a custom property to trigger a survey](https://help.qualaroo.com/hc/en-us/articles/201441516){:target="_blank"} made available by utilizing a Segment Track call is currently not supported due to some code changes. The below section will *not* trigger a survey at this time. If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: @@ -55,4 +55,4 @@ _**NOTE:** Qualaroo will only receive traits from Tracks calls and Identify call ## Sending Data from Qualaroo -Qualaroo makes it easy for you to get the data you collect from surveys back into Segment and off to all your other Segment destinations. Check out their awesome article about [Sending Qualaroo data into Segment](http://help.qualaroo.com/hc/en-us/articles/205436425) to get setup. +Qualaroo makes it easy for you to get the data you collect from surveys back into Segment and off to all your other Segment destinations. Check out their awesome article about [Sending Qualaroo data into Segment](http://help.qualaroo.com/hc/en-us/articles/205436425){:target="_blank"} to get setup. diff --git a/src/connections/destinations/catalog/quantcast/index.md b/src/connections/destinations/catalog/quantcast/index.md index 19561e625e..ef578a007a 100644 --- a/src/connections/destinations/catalog/quantcast/index.md +++ b/src/connections/destinations/catalog/quantcast/index.md @@ -4,7 +4,7 @@ id: 54521fda25e721e32a72eeeb --- ## Getting Started -We have both web and mobile destinations with Quantcast. The two integrations are outlined below. Our Quantcast destination code is also open source on GitHub. Feel free to check it out: [analytics-ios-integration-quantcast](https://github.com/segment-integrations/analytics-ios-integration-quantcast), [analytics.js-integration-quantcast](https://github.com/segment-integrations/analytics.js-integration-quantcast). +We have both web and mobile destinations with Quantcast. The two integrations are outlined below. Our Quantcast destination code is also open source on GitHub. Feel free to check it out: [analytics-ios-integration-quantcast](https://github.com/segment-integrations/analytics-ios-integration-quantcast){:target="_blank"}, [analytics.js-integration-quantcast](https://github.com/segment-integrations/analytics.js-integration-quantcast){:target="_blank"}. ## Web Destination When you enable Quantcast for a website from the Segment web app, your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously `loadingquant.js` onto your page. This means you should remove Quantcast's snippet from your page. @@ -15,10 +15,6 @@ Quantcast supports the `identify` and `track` methods on our API. Note: For Quantcast to load you must call our page method. There is a call to page in your JavaScript snippet by default, so as long as you don't remove it Quantcast will load whenever your snippet loads! -## React Native set up - -{% include content/react-dest.md only="android" %} - ### Page When you call `.page()`, we will automatically pass the labels. [See below for details](#labels). @@ -96,4 +92,4 @@ When you call `screen` Segment automatically logs an event like `Viewed ABC Scre ### Other Features #### Labels -The destination does not currently support labels. If this is important to you, [let us know](https://segment.com/help/contact/). +The destination does not currently support labels. If this is important to you, [let us know](https://segment.com/help/contact/){:target="_blank"}. diff --git a/src/connections/destinations/catalog/quanticmind/index.md b/src/connections/destinations/catalog/quanticmind/index.md index 8b01cc91d4..51e642e20d 100644 --- a/src/connections/destinations/catalog/quanticmind/index.md +++ b/src/connections/destinations/catalog/quanticmind/index.md @@ -3,11 +3,11 @@ rewrite: true title: QuanticMind Destination id: 54521fd725e721e32a72eec2 --- -[QuanticMind](https://quanticmind.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the performance leader in predictive advertising management software for paid search, social, display, and mobile. The `analytics.js` QuanticMind Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-quanticmind). +[QuanticMind](https://quanticmind.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the performance leader in predictive advertising management software for paid search, social, display, and mobile. The `analytics.js` QuanticMind Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-quanticmind){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "QuanticMind" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/quora-conversion-pixel/index.md b/src/connections/destinations/catalog/quora-conversion-pixel/index.md index e36ee81c29..c94e26856e 100644 --- a/src/connections/destinations/catalog/quora-conversion-pixel/index.md +++ b/src/connections/destinations/catalog/quora-conversion-pixel/index.md @@ -3,17 +3,17 @@ rewrite: true title: Quora Conversion Pixel Destination id: 5952698570a3e552b9575519 --- -[Quora Conversion Pixel](https://www.quora.com/business) enables you to attribute downstream user actions on your website to your ad campaigns running on Quora.com. Our client-side Destination code is open source. You can browse the code in GitHub [here](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/quora-conversion-pixel). +[Quora Conversion Pixel](https://www.quora.com/business){:target="_blank"} enables you to attribute downstream user actions on your website to your ad campaigns running on Quora.com. Our client-side Destination code is open source. You can browse the code in GitHub [here](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/quora-conversion-pixel){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Quora" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. Add your Quora Conversion Pixel Key to your Destination settings. To get this you will need to do the following: - i. Log into your [Quora Ads Manager Account](https://www.quora.com/ads/account). + i. Log into your [Quora Ads Manager Account](https://www.quora.com/ads/account){:target="_blank"}. ii. Navigate to the "Quora Pixel" tab in your Quora Dashboard. diff --git a/src/connections/destinations/catalog/ramen/index.md b/src/connections/destinations/catalog/ramen/index.md index 6a196ddd3f..c4f612e7f3 100644 --- a/src/connections/destinations/catalog/ramen/index.md +++ b/src/connections/destinations/catalog/ramen/index.md @@ -88,7 +88,7 @@ Ramen does not support passing in any attributes to `track` beyond the event nam ​ ### Secure Mode ​ -If you want to enable Ramen [secure mode](http://docs.ramen.is/#secure-mode) for analytics.js, you can pass in the `timestamp` and `auth_hash` variables by rendering it in your server-side templates. +If you want to enable Ramen [secure mode](http://docs.ramen.is/#secure-mode){:target="_blank"} for analytics.js, you can pass in the `timestamp` and `auth_hash` variables by rendering it in your server-side templates. ​ The `timestamp` should be a Unix timestamp (epoch seconds). The `auth_hash` is a SHA256 has of several attributes. The hash is not based on the email, it is based on: ​ diff --git a/src/connections/destinations/catalog/recombee-ai/index.md b/src/connections/destinations/catalog/recombee-ai/index.md index 6bc93101e0..0127f27813 100644 --- a/src/connections/destinations/catalog/recombee-ai/index.md +++ b/src/connections/destinations/catalog/recombee-ai/index.md @@ -5,7 +5,7 @@ hide-settings: true hide-personas-partial: true id: 6095391bd839b62fca8a8606 --- -[Recombee](https://recombee.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a Recommender as a Service, that can use your data to provide the most accurate recommendations of content or products for your users. +[Recombee](https://recombee.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a Recommender as a Service, that can use your data to provide the most accurate recommendations of content or products for your users. Use this Segment destination to send your interaction data views, purchases, plays, etc.) to Recombee. @@ -17,13 +17,13 @@ This destination is maintained by Recombee. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} -1. If you don't already have one, set up a [Recombee account](https://recombee.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners). + +1. If you don't already have one, set up a [Recombee account](https://recombee.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Recombee" in the Destinations Catalog, and select the Recombee destination. 3. Choose which Source should send data to the Recombee destination. -4. Go to the [Recombee Admin UI](https://admin.recombee.com): +4. Go to the [Recombee Admin UI](https://admin.recombee.com){:target="_blank"}: - Choose the Recombee Database where you want to send the interactions. - Click **Settings** in the menu on the left. - In the **Settings** section find the **API Identifier** of the Database and its corresponding **Private Token** @@ -32,7 +32,7 @@ This destination is maintained by Recombee. For any issues with the destination, - Paste the **Private Token** you just copied in the **API Key** field. Once you send the data from Segment to the Recombee destination you can: - - Go to the KPI console of the [Recombee Admin UI](https://admin.recombee.com) to see the numbers of the ingested interactions (updated in Real-time) + - Go to the KPI console of the [Recombee Admin UI](https://admin.recombee.com){:target="_blank"} to see the numbers of the ingested interactions (updated in Real-time) - Click the ID of an Item, User in Items, or section in the Users catalog to see a specific ingested interaction. @@ -44,7 +44,7 @@ If you aren't familiar with the Segment Spec, take a look at the [Page method do analytics.page() ``` -Segment sends Page calls to Recombee as a [Detail View](https://docs.recombee.com/api.html#add-detail-view). +Segment sends Page calls to Recombee as a [Detail View](https://docs.recombee.com/api.html#add-detail-view){:target="_blank"}. ## Track @@ -65,15 +65,15 @@ analytics.track('Video Content Playing', { Recombee Destination can process several [Semantic Events](/docs/connections/spec/semantic/): [Ecommerce](/docs/connections/spec/ecommerce/v2/): - - [Product Viewed](/docs/connections/spec/ecommerce/v2/#product-viewed) - sends a [Detail View](https://docs.recombee.com/api.html#add-detail-view) - - [Product Added](/docs/connections/spec/ecommerce/v2/#product-added) - sends a [Cart Addition](https://docs.recombee.com/api.html#add-cart-addition) - - [Product Removed](/docs/connections/spec/ecommerce/v2/#product-removed) - sends a [Delete Cart Addition](https://docs.recombee.com/api.html#delete-cart-addition) - - [Order Completed](/docs/connections/spec/ecommerce/v2/#order-completed) sends a [Purchase](https://docs.recombee.com/api.html#add-purchase) for each of the ordered products -- [Product Added to Wishlist](/docs/connections/spec/ecommerce/v2/#product-added) - sends a [Bookmark](https://docs.recombee.com/api.html#add-bookmark) -- [Product Shared](/docs/connections/spec/ecommerce/v2/#product-added) - sends a [Bookmark](https://docs.recombee.com/api.html#add-bookmark) + - [Product Viewed](/docs/connections/spec/ecommerce/v2/#product-viewed) - sends a [Detail View](https://docs.recombee.com/api.html#add-detail-view){:target="_blank"} + - [Product Added](/docs/connections/spec/ecommerce/v2/#product-added) - sends a [Cart Addition](https://docs.recombee.com/api.html#add-cart-addition){:target="_blank"} + - [Product Removed](/docs/connections/spec/ecommerce/v2/#product-removed) - sends a [Delete Cart Addition](https://docs.recombee.com/api.html#delete-cart-addition){:target="_blank"} + - [Order Completed](/docs/connections/spec/ecommerce/v2/#order-completed) sends a [Purchase](https://docs.recombee.com/api.html#add-purchase){:target="_blank"} for each of the ordered products +- [Product Added to Wishlist](/docs/connections/spec/ecommerce/v2/#product-added) - sends a [Bookmark](https://docs.recombee.com/api.html#add-bookmark){:target="_blank"} +- [Product Shared](/docs/connections/spec/ecommerce/v2/#product-added) - sends a [Bookmark](https://docs.recombee.com/api.html#add-bookmark){:target="_blank"} [Video](/docs/connections/spec/video/): -- Following events send a [View Portion](https://docs.recombee.com/api.html#set-view-portion): +- Following events send a [View Portion](https://docs.recombee.com/api.html#set-view-portion){:target="_blank"}: - [Video Playback Started](/docs/connections/spec/video/#video-playback-started) - [Video Content Playing](/docs/connections/spec/video/#video-content-playing) - [Video Playback Paused](/docs/connections/spec/video/#video-playback-paused) @@ -89,7 +89,7 @@ If you aren't familiar with the Segment Spec, take a look at the [Screen method [[SEGAnalytics sharedAnalytics] screen:@"Home"]; ``` -Segment sends Screen calls to Recombee as a [Detail View](https://docs.recombee.com/api.html#add-detail-view). +Segment sends Screen calls to Recombee as a [Detail View](https://docs.recombee.com/api.html#add-detail-view){:target="_blank"}. ## Alias @@ -100,22 +100,22 @@ If you aren't familiar with the Segment Spec, take a look at the [Alias method d analytics.alias("507f191e81"); ``` -Segment sends Alias calls to Recombee as [Merge Users](https://docs.recombee.com/api.html#merge-users) call. +Segment sends Alias calls to Recombee as [Merge Users](https://docs.recombee.com/api.html#merge-users){:target="_blank"} call. ## Delete User -Segment sends a [Delete User](https://docs.recombee.com/api.html#delete-user) call to Recombee on deleting a user. +Segment sends a [Delete User](https://docs.recombee.com/api.html#delete-user){:target="_blank"} call to Recombee on deleting a user. All the data associated with the user (including interactions) are removed from Recombee. ## Reporting successful recommendations -You can tell Recombee that a specific interaction is based on a successful recommendation (meaning that the recommendations were presented to a user, and the user clicked one of the items), by setting the ID of the successful recommendation request on the `recomm_id` property of a Segment event. You can read more about this setting in [Recombee's Reported Metrics documentations](https://docs.recombee.com/admin_ui.html#reported-metrics)) +You can tell Recombee that a specific interaction is based on a successful recommendation (meaning that the recommendations were presented to a user, and the user clicked one of the items), by setting the ID of the successful recommendation request on the `recomm_id` property of a Segment event. You can read more about this setting in [Recombee's Reported Metrics documentations](https://docs.recombee.com/admin_ui.html#reported-metrics){:target="_blank"} Recombee recognizes the `recomm_id` property in all the events that send interactions. In case of [Order Completed](/docs/connections/spec/ecommerce/v2/#order-completed), set the `recomm_id` to the object of the product (`products.$.recomm_id`) that was ordered because of a successful recommendation. -Sending the `recomm_id` gives you precise numbers about successful recommendations in the KPI section of the [Recombee Admin UI](https://admin.recombee.com). This explicit feedback also helps you optimize your recommendation models. +Sending the `recomm_id` gives you precise numbers about successful recommendations in the KPI section of the [Recombee Admin UI](https://admin.recombee.com){:target="_blank"}. This explicit feedback also helps you optimize your recommendation models. ## Recombee destination settings @@ -131,7 +131,7 @@ The private token for the database. ### Item ID Property Name (Optional) -For each [Recombee interaction](https://docs.recombee.com/api.html#user-item-interactions), you must provide a `userId` and an `itemId`. +For each [Recombee interaction](https://docs.recombee.com/api.html#user-item-interactions){:target="_blank"}, you must provide a `userId` and an `itemId`. You can set the **Item ID Property Name** to specify the Segment event property to use as the `itemId`. @@ -149,13 +149,13 @@ If you use some custom Events, you can set which Recombee interaction to send fo The value of the mapping is the name of your event, and the key can be one of: -- [Bookmark](https://docs.recombee.com/api.html#add-bookmark) -- [Cart Addition](https://docs.recombee.com/api.html#add-cart-addition) -- [Detail View](https://docs.recombee.com/api.html#add-detail-view) -- [Purchase](https://docs.recombee.com/api.html#add-purchase) -- [Rating](https://docs.recombee.com/api.html#ratings) +- [Bookmark](https://docs.recombee.com/api.html#add-bookmark){:target="_blank"} +- [Cart Addition](https://docs.recombee.com/api.html#add-cart-addition){:target="_blank"} +- [Detail View](https://docs.recombee.com/api.html#add-detail-view){:target="_blank"} +- [Purchase](https://docs.recombee.com/api.html#add-purchase){:target="_blank"} +- [Rating](https://docs.recombee.com/api.html#ratings){:target="_blank"} - a property `rating` must exist and contain a number from interval [-1.0,1.0], where -1.0 means the worst rating possible, 0.0 means neutral, and 1.0 means absolutely positive rating. -- [View Portion](https://docs.recombee.com/api.html#set-view-portion) +- [View Portion](https://docs.recombee.com/api.html#set-view-portion){:target="_blank"} - the portion (how much of the content was consumed by the user) is computed from the `position` and `total_length` properties (see [Content Event Object](/docs/connections/spec/video/#content-event-object)), or can be given as the `portion` property (a number between 0 and 1). diff --git a/src/connections/destinations/catalog/refersion/index.md b/src/connections/destinations/catalog/refersion/index.md index 8d569281ea..8221aa7212 100644 --- a/src/connections/destinations/catalog/refersion/index.md +++ b/src/connections/destinations/catalog/refersion/index.md @@ -3,15 +3,13 @@ rewrite: true title: Refersion Destination id: 5cacbf88fa2aed000104edcc --- -[Refersion](https://refersion.com/?utm_source=segment&utm_medium=partner) is a fully-loaded affiliate and influencer marketing platform that you can launch in minutes; they handle the heavy lifting so you can focus on building partnerships with your affiliates. By connecting Refersion with Segment you will easily be able to create new affiliate accounts. +[Refersion](https://refersion.com/?utm_source=segment&utm_medium=partner){:target="_blank"} is a fully-loaded affiliate and influencer marketing platform that you can launch in minutes; they handle the heavy lifting so you can focus on building partnerships with your affiliates. By connecting Refersion with Segment you will easily be able to create new affiliate accounts. This destination is maintained by Refersion. For any issues with the destination, [contact the Refersion Support team](mailto:helpme@refersion.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + You have two options to connect - either automatically within your Refersion dashboard, or manually by copying and pasting an API key into the Segment dashboard. @@ -24,7 +22,7 @@ You have two options to connect - either automatically within your Refersion das 1. From the Segment web app, click **Catalog**. 2. Search for "Refersion" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Once connected, you will be asked to input an API key - which can be found in your [Refersion dashboard](https://www.refersion.com/base/settings/integrations/api) - which is formatted as `publickey.secretkey`. You will need to click "Show" to obtain the "Secret Key" portion. +3. Once connected, you will be asked to input an API key - which can be found in your [Refersion dashboard](https://www.refersion.com/base/settings/integrations/api){:target="_blank"} - which is formatted as `publickey.secretkey`. You will need to click "Show" to obtain the "Secret Key" portion. ## Identify diff --git a/src/connections/destinations/catalog/refiner/index.md b/src/connections/destinations/catalog/refiner/index.md index 59e7e15224..6a6350aec5 100644 --- a/src/connections/destinations/catalog/refiner/index.md +++ b/src/connections/destinations/catalog/refiner/index.md @@ -3,20 +3,18 @@ rewrite: true title: Refiner Destination id: 5c9a968bd217dc000108159a --- -[Refiner](https://refiner.io?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a user qualification and lead scoring platform for B2B SaaS companies with a free trial or freemium model. Refiner helps self-service SaaS providers to identify and convert more high-revenue accounts. +[Refiner](https://refiner.io?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a user qualification and lead scoring platform for B2B SaaS companies with a free trial or freemium model. Refiner helps self-service SaaS providers to identify and convert more high-revenue accounts. This destination is maintained by Refiner. For any issues with the destination, [contact the Refiner Support team](mailto:contact@refiner.io). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Refiner" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter your Refiner "API Key" into the Segment Settings. You can find this key in on the [Refiner dashboard](https://app.refiner.io) settings under Integrations > Segment. +3. Enter your Refiner "API Key" into the Segment Settings. You can find this key in on the [Refiner dashboard](https://app.refiner.io){:target="_blank"} settings under Integrations > Segment. ## Page diff --git a/src/connections/destinations/catalog/regal-io/index.md b/src/connections/destinations/catalog/regal-io/index.md deleted file mode 100644 index a2468912f0..0000000000 --- a/src/connections/destinations/catalog/regal-io/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Regal.io Destination' -hidden: true -id: 5f33e746fad0d620b8a4b144 -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/regal/index.md b/src/connections/destinations/catalog/regal/index.md index ac710ea0ff..2d1d360ea6 100644 --- a/src/connections/destinations/catalog/regal/index.md +++ b/src/connections/destinations/catalog/regal/index.md @@ -5,7 +5,7 @@ id: 5f33e746fad0d620b8a4b144 redirect_from: '/connections/destinations/catalog/regal-voice' --- -[Regal.io](https://www.regal.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a next-gen customer engagement platform that helps brands proactively engage and convert customers before they buy elsewhere. +[Regal.io](https://www.regal.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a next-gen customer engagement platform that helps brands proactively engage and convert customers before they buy elsewhere. Regal.io maintains this destination. For any issues with the destination, contact their [Regal.io support team](mailto:support@regal.io). @@ -20,7 +20,7 @@ Regal.io maintains this destination. For any issues with the destination, contac ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Regal.io" in the Destinations Catalog, and select the "Regal.io" destination. diff --git a/src/connections/destinations/catalog/repeater/index.md b/src/connections/destinations/catalog/repeater/index.md index 34452d256e..7a8f807003 100644 --- a/src/connections/destinations/catalog/repeater/index.md +++ b/src/connections/destinations/catalog/repeater/index.md @@ -25,3 +25,17 @@ You can do this for as many sources as you need. ![A screenshot of the Write Keys field in the Repeater destination settings page.](images/write-key-settings.png) Repeater sends all events it receives to the sources you specified, identified by the write key(s) you added. + +## Replays with a Repeater destination + +Running a Replay on a Repeater destination might count toward your MTUs, especially if you are replaying historical data from the source that flows data into your Repeater destination. + +Because the API plans count by events sent through the pipeline and the Repeater destination resends an event through the entire pipeline, one event might flow through your source twice which increases the throughput count. + +Segment recommends that you notify your team before initiating a Replay if you’re using a Repeater destination. + +## Repeater FAQ + +##### What is the `context.repeatChain` field that I can see on my repeated events? + +The `context.repeatChain` array that you will see on repeated events holds two values. The first value is the MD5-hashed write key where the event originated. The second value is the MD5-hashed write key that the event was sent to through the Repeater. This behavior lets Segment verify that the event isn't sent to a pipeline that will result in an infinite loop. diff --git a/src/connections/destinations/catalog/retentive/index.md b/src/connections/destinations/catalog/retentive/index.md index 0e155669a7..2a91943210 100644 --- a/src/connections/destinations/catalog/retentive/index.md +++ b/src/connections/destinations/catalog/retentive/index.md @@ -1,6 +1,7 @@ --- title: Retentive Destination id: 6205293e7095075d8ce71a74 +hidden: true --- [Retentive](https://retentive.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="blank"} makes your help docs searchable in product so go-to-market teams can act on data that each customer struggles with. @@ -8,7 +9,7 @@ Retentive maintains this destination. For any issues with the destination, [cont ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. In the Destinations Catalog, search for "Retentive" and select the Retentive destination. diff --git a/src/connections/destinations/catalog/retently/index.md b/src/connections/destinations/catalog/retently/index.md index 2b858be07e..05271c9720 100644 --- a/src/connections/destinations/catalog/retently/index.md +++ b/src/connections/destinations/catalog/retently/index.md @@ -2,16 +2,17 @@ rewrite: true title: Retently Destination id: 5eb91ce4f1eb124fa7445dce +hidden: true --- -[Retently](https://www.retently.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a customer experience management service. Measure your customer satisfaction with your company, products, or services by sending NPS, CSAT, CES, or 5-STAR surveys and act on the received feedback. -This destination is maintained by Retently. For any issues with the destination, [contact the Retently Support team](mailto:support@retently.com). +> warning "" +> The Retently integration with Segment has been deprecated and is no longer available in our catalog. For instructions on how to send data to Retently from Segment using a webhooks destination, refer to the [Retently documentation](https://help.retently.com/en/articles/8217913-trigger-transactional-surveys-via-segment-events#h_963db1f67a){:target="_blank”}. -{% include content/beta-note.md %} +[Retently](https://www.retently.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a customer experience management service. Measure your customer satisfaction with your company, products, or services by sending NPS, CSAT, CES, or 5-STAR surveys and act on the received feedback. -## Getting Started +This destination is maintained by Retently. For any issues with the destination, [contact the Retently Support team](mailto:support@retently.com). -{% include content/connection-modes.md %} +## Getting Started The Retently destination allows you to send transactional surveys when an event is triggered in Segment. @@ -25,14 +26,14 @@ It takes only three steps to set everything up and start surveying your audience ### 2. Enter the Retently API key -1. In Retently, go to the [API token page](https://app.retently.com/settings/api/tokens). +1. In Retently, go to the [API token page](https://app.retently.com/settings/api/tokens){:target="_blank"}. 2. Give the API key a name and click "Create". 3. Copy the API key and enter it in the "API key" section, on the Retently destination settings page. ### 3. Map survey campaign with Segment events 1. In the Retently destination settings in the Segment app, go to the **Map Retently campaigns with Segment events** section. -2. In the left input field, enter the ID of the survey campaign. [Learn how to configure the survey campaign.](https://help.retently.com/en/articles/4097690-set-up-segment-transactional-email-surveys) +2. In the left input field, enter the ID of the survey campaign. [Learn how to configure the survey campaign.](hhttps://help.retently.com/en/articles/8217913-trigger-transactional-surveys-via-segment-events){:target="_blank"} 3. In the right field, list the name of one or more Segment Track events that should trigger the survey in the specified campaign. Write the name of the event exactly as it's written in the `analytics.track` method (more details in the section below). You can enter multiple Track events by separating them with a comma symbol (for example Order Placed, Dashboard Visited). @@ -46,7 +47,7 @@ When a Segment Track event fires, Retently performs the following actions: 1. Identifies the Track event name, and attempts to match it with the campaign ID from the Retently destination settings in Segment. If no campaign ID lists this track event name, then Retently dismisses the event. 2. If the Track event name matches a campaign ID, Retently looks for the `properties` object passed with the track event, and creates a new customer record in Retently using the properties listed in the object. -The only property that Retently **requires** is `email`. All other properties can be assigned as optional customer properties in Retently. To learn how to manage customer properties using Segment track events [see the Retently documentation](https://help.retently.com/en/articles/4097690-set-up-segment-transactional-email-surveys). +The only property that Retently **requires** is `email`. All other properties can be assigned as optional customer properties in Retently. To learn how to manage customer properties using Segment track events [see the Retently documentation](https://help.retently.com/en/articles/8217913-trigger-transactional-surveys-via-segment-events){:target="_blank"}. If you aren't familiar with the Segment Spec, take a look at the [Track method documentation](/docs/connections/spec/track/) to learn about what it does. An example call would look like: diff --git a/src/connections/destinations/catalog/retina/index.md b/src/connections/destinations/catalog/retina/index.md index 0c54e74eb6..660254a6c3 100644 --- a/src/connections/destinations/catalog/retina/index.md +++ b/src/connections/destinations/catalog/retina/index.md @@ -5,7 +5,7 @@ id: 5f287bfa332cce0b1ed18331 --- # Retina AI Segment Destination -[Retina AI](https://retina.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a customer intelligence partner that provides accurate **customer-level lifetime value** metrics at or before their first transaction. You can use this to improve targeting, ad relevance, conversion rates, and customer loyalty. +[Retina AI](https://retina.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a customer intelligence partner that provides accurate **customer-level lifetime value** metrics at or before their first transaction. You can use this to improve targeting, ad relevance, conversion rates, and customer loyalty. Retina AI maintains this destination. For any issues with the destination, contact the [Retina AI Support Team](mailto:info@retina.ai). @@ -15,7 +15,7 @@ Retina AI maintains this destination. For any issues with the destination, conta ## Getting Started -{% include content/connection-modes.md %} + To integrate Retina AI with Segment as a **Destination**: 1. From your Segment UI's Destinations page click on “Add Destination”. diff --git a/src/connections/destinations/catalog/revx-cloud-actions/index.md b/src/connections/destinations/catalog/revx-cloud-actions/index.md new file mode 100644 index 0000000000..6692849a32 --- /dev/null +++ b/src/connections/destinations/catalog/revx-cloud-actions/index.md @@ -0,0 +1,7 @@ +--- +title: 'RevX Cloud (Actions) Destination' +hidden: true +id: 6464ef424ac5c5f47f5f3968 +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/richpanel/index.md b/src/connections/destinations/catalog/richpanel/index.md index e37e68901a..ee9fe41406 100644 --- a/src/connections/destinations/catalog/richpanel/index.md +++ b/src/connections/destinations/catalog/richpanel/index.md @@ -3,21 +3,19 @@ title: Richpanel Destination rewrite: true id: 5ddd4f68758f3b16e86a6332 --- -[Richpanel](https://richpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the helpdesk software built for Ecommerce teams to support customers at scale in a fun, easy, collaborative way. +[Richpanel](https://richpanel.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the helpdesk software built for Ecommerce teams to support customers at scale in a fun, easy, collaborative way. This destination is maintained by Richpanel. For any issues with the destination, [contact the Richpanel Support team](mailto:support@richpanel.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Richpanel" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. If this is the first time setting up Richpanel as a destination, you'll need to install the Segment App in your Richpanel Account. 4. In your Richpanel account, go to Data Sources > Integrations and install the Segment Connector. -5. Enter the "API Key" into your Segment Settings UI which you can find from your [Richpanel data sources](https://app.richpanel.com/connectors/my/list). +5. Enter the "API Key" into your Segment Settings UI which you can find from your [Richpanel data sources](https://app.richpanel.com/connectors/my/list){:target="_blank"}. **NOTE**: Richpanel accepts anonymous users, or Visitors, but they will not appear in the Richpanel Customer Section UI unless the customer is first identified using an `identify` call or customer activity through Richpanel Channels, thereby becoming a Customer. @@ -59,7 +57,7 @@ analytics.page('Pricing', { Page calls are sent as a tracking event to Richpanel on the timeline of the customer who was tracked. If the `richpanel_session_id` is included, it clusters this tracking event into a single “session” on the customer's timeline. -If no `richpanel_session_id` is supplied, Richpanel will automatically generate sessionIDs based on time between tracking events. (Read why [Segment doesn't have session tracking](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/) for more details). `page` calls can only update `email` traits, not create them. +If no `richpanel_session_id` is supplied, Richpanel will automatically generate sessionIDs based on time between tracking events. (Read why [Segment doesn't have session tracking](https://segment.com/blog/facts-vs-stories-why-segment-has-no-sessions-api/){:target="_blank"} for more details). `page` calls can only update `email` traits, not create them. ## Track diff --git a/src/connections/destinations/catalog/ripe/index.md b/src/connections/destinations/catalog/ripe/index.md deleted file mode 100644 index cee568472c..0000000000 --- a/src/connections/destinations/catalog/ripe/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Ripe Destination' -hidden: true -id: 63913b2bf906ea939f153851 -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/rollbar/index.md b/src/connections/destinations/catalog/rollbar/index.md index fe4f5619e4..a98014ab31 100644 --- a/src/connections/destinations/catalog/rollbar/index.md +++ b/src/connections/destinations/catalog/rollbar/index.md @@ -28,4 +28,4 @@ This feature makes use of JavaScript Source Maps to translate the minified code b. Upload pre-deploy: at the beginning of your deploy script, upload a source map package using Rollbar's API. - For more detail on providing your source map, checkout [Rollbar's documentation here](https://rollbar.com/docs/source-maps/#step-2-provide-your-source-map). + For more detail on providing your source map, checkout [Rollbar's documentation here](https://rollbar.com/docs/source-maps/#step-2-provide-your-source-map){:target="_blank"}. diff --git a/src/connections/destinations/catalog/route/index.md b/src/connections/destinations/catalog/route/index.md index c05ce6c423..1dcf08aaaf 100644 --- a/src/connections/destinations/catalog/route/index.md +++ b/src/connections/destinations/catalog/route/index.md @@ -2,7 +2,7 @@ title: Route Destination --- -[Our Route destination code](https://github.com/segment-integrations/analytics.js-integration-route) is all open-source on GitHub if you want to check it out. +[Our Route destination code](https://github.com/segment-integrations/analytics.js-integration-route){:target="_blank"} is all open-source on GitHub if you want to check it out. ## Getting Started diff --git a/src/connections/destinations/catalog/saasquatch-v2/index.md b/src/connections/destinations/catalog/saasquatch-v2/index.md index 4b3cf94326..292402e29f 100644 --- a/src/connections/destinations/catalog/saasquatch-v2/index.md +++ b/src/connections/destinations/catalog/saasquatch-v2/index.md @@ -10,7 +10,7 @@ SaaSquatch maintains this destination. For any issues with the destination, [con ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **SaaSquatch v2** in the Destinations Catalog, and select the **SaaSquatch v2** destination. diff --git a/src/connections/destinations/catalog/sailthru-v2/index.md b/src/connections/destinations/catalog/sailthru-v2/index.md index d39681c934..b95e57d18f 100644 --- a/src/connections/destinations/catalog/sailthru-v2/index.md +++ b/src/connections/destinations/catalog/sailthru-v2/index.md @@ -4,14 +4,14 @@ rewrite: true redirect_from: '/connections/destinations/catalog/sailthru/' id: 5ee1302124d817af4c8341a2 --- -[Sailthru's](https://www.sailthru.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) cross-channel marketing platform helps brands deliver personalized experiences to each and every consumer across email, web, and mobile, driving higher revenue, improving customer lifetime value, and reducing churn. +[Sailthru's](https://www.sailthru.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} cross-channel marketing platform helps brands deliver personalized experiences to each and every consumer across email, web, and mobile, driving higher revenue, improving customer lifetime value, and reducing churn. Sailthru maintains this destination. For any issues with the destination, [contact the Sailthru Support team](mailto:support@sailthru.com). ## Getting Started -{% include content/connection-modes.md %} + 1. Contact the [Sailthru Support team](mailto:support@sailthru.com) to enable your account for EXTID support and request your integration-specific API Key and Secret. 2. From the Destinations catalog page in the Segment App, click **Add Destination**. diff --git a/src/connections/destinations/catalog/sailthru/index.md b/src/connections/destinations/catalog/sailthru/index.md index ddc73f4acc..717c8b0629 100644 --- a/src/connections/destinations/catalog/sailthru/index.md +++ b/src/connections/destinations/catalog/sailthru/index.md @@ -31,7 +31,7 @@ We will automatically handle the proper identification of user's in Sailthru usi #### Tags -Sailthru provides an out of band web scraper that will automatically collect contextual information from your pages to power their [personalization engine](https://getstarted.sailthru.com/site/personalization-engine/meta-tags/). If the design of your site requires passing these tags to Sailthru manually (Single Page Apps are one example) you can manually pass them using a `keywords` property in the `page` event: +Sailthru provides an out of band web scraper that will automatically collect contextual information from your pages to power their [personalization engine](https://getstarted.sailthru.com/site/personalization-engine/meta-tags/){:target="_blank"}. If the design of your site requires passing these tags to Sailthru manually (Single Page Apps are one example) you can manually pass them using a `keywords` property in the `page` event: ```js analytics.page('Page Name', { @@ -122,7 +122,7 @@ Sailthru does not allow the `extid` to be the main lookup identifier for their P If the user and their email does not exist in Sailthru, the event will throw an error. If the user exists, the purchase will be added to their profile. Be sure to call `identify` with an `email` passed in the `traits` object prior to the `Order Completed` event. If you are sending events using one of Segment's server-side libraries and want to be sure, you can also send the email value in your `track` calls under `context.traits.email`. -Once `Order Completed` is triggered, Segment will pass in `incomplete: 0` to signify that the order is now complete. Segment will map the following Sailthru [required fields](https://getstarted.sailthru.com/new-for-developers-overview/advanced-features/purchase/#Parameters_forPOST) from the [v2 Order Completed Spec](/docs/connections/spec/ecommerce/v2/#order-completed): +Once `Order Completed` is triggered, Segment will pass in `incomplete: 0` to signify that the order is now complete. Segment will map the following Sailthru [required fields](https://getstarted.sailthru.com/new-for-developers-overview/advanced-features/purchase/#Parameters_forPOST){:target="_blank"} from the [v2 Order Completed Spec](/docs/connections/spec/ecommerce/v2/#order-completed): | Sailthru Spec | Segment Spec | | --- | --- | @@ -149,7 +149,7 @@ Note that purchases cannot be edited once they are posted. ## Abandoned Cart Events -In addition to `Order Completed` events, we support the concept of [Sailthru's Abandoned Carts](https://getstarted.sailthru.com/email/transactionals/abandoned-shopping-carts/) using Segment's `Product Added` and `Product Removed` events. When these events are triggered, Segment will pass in `incomplete: 1` to signify that the order is incomplete. +In addition to `Order Completed` events, we support the concept of [Sailthru's Abandoned Carts](https://getstarted.sailthru.com/email/transactionals/abandoned-shopping-carts/){:target="_blank"} using Segment's `Product Added` and `Product Removed` events. When these events are triggered, Segment will pass in `incomplete: 1` to signify that the order is incomplete. To send transactional emails when a user abandons their cart, you must pass in a `reminder_time` and `reminder_template` on the `Product Added` and `Product Removed` events. The template passed through as `reminder_template` must match the **public name** configured in Sailthru's UI. @@ -199,14 +199,14 @@ The default status for the optout value is `none` or you can select `all`, `basi `none`: Optout(none) is a way of revalidating users back from being any type of optout. This would only be used if an end user has previously opted out and would like to opt back in to be a valid user. -You can read more about [Optout Levels here](https://getstarted.sailthru.com/managing-my-account/hosted-pages/user-optout-levels/). +You can read more about [Optout Levels here](https://getstarted.sailthru.com/managing-my-account/hosted-pages/user-optout-levels/){:target="_blank"}. ### Adding users to a list To configure a default list name, Segment exposes a setting to configure this in the UI. You can also explicitly set your own `defaultListName` through the destination option on `identify`. ### Reminder Time and Template -To configure a default reminder time and template, enter the **public name** of your template (configured in Sailthru's UI) and the time frame you will want the email to send. Some example values are 60 minutes, 24 hours, 2 weeks. Segment will handle passing in the `+` increment. To read more about how Sailthru calculates time, refer to their [time documentation](https://getstarted.sailthru.com/developers/zephyr-functions-library/time/). +To configure a default reminder time and template, enter the **public name** of your template (configured in Sailthru's UI) and the time frame you will want the email to send. Some example values are 60 minutes, 24 hours, 2 weeks. Segment will handle passing in the `+` increment. To read more about how Sailthru calculates time, refer to their [time documentation](https://getstarted.sailthru.com/developers/zephyr-functions-library/time/){:target="_blank"}. ## FAQ diff --git a/src/connections/destinations/catalog/salescamp-crm/index.md b/src/connections/destinations/catalog/salescamp-crm/index.md index 8aaa7b06d5..781916038a 100644 --- a/src/connections/destinations/catalog/salescamp-crm/index.md +++ b/src/connections/destinations/catalog/salescamp-crm/index.md @@ -5,18 +5,18 @@ id: 5d835f71811b923a6883c2eb --- ## Salescamp CRM Destination -Now it's easy to send customer data to [Salescamp](https://www.salescamp.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) from Segment. Once you've tracked your data through Segment's open source libraries Segment will translate and route your data into Salescamp in a format they understand. +Now it's easy to send customer data to [Salescamp](https://www.salescamp.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} from Segment. Once you've tracked your data through Segment's open source libraries Segment will translate and route your data into Salescamp in a format they understand. -This destination is maintained by [Salescamp](https://www.salescamp.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners). Feel free to contact us at [hello@salescamp.app](mailto:hello@salescamp.app) for any help. +This destination is maintained by [Salescamp](https://www.salescamp.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. Feel free to contact us at [hello@salescamp.app](mailto:hello@salescamp.app) for any help. ## Getting Started Segment's Salescamp destination allows you to identify leads without using rest APIs. -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Salescamp" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Salescamp's dashboard](https://dashboard.salescamp.app/settings/integrations). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Salescamp's dashboard](https://dashboard.salescamp.app/settings/integrations){:target="_blank"}. diff --git a/src/connections/destinations/catalog/salesforce-dmp/index.md b/src/connections/destinations/catalog/salesforce-dmp/index.md index 10fab771fa..ebcb04fab4 100644 --- a/src/connections/destinations/catalog/salesforce-dmp/index.md +++ b/src/connections/destinations/catalog/salesforce-dmp/index.md @@ -5,7 +5,7 @@ beta: true hidden: true --- -[Salesforce DMP](https://konsole.zendesk.com/hc/en-us) allows website operators +[Salesforce DMP](https://konsole.zendesk.com/hc/en-us){:target="_blank"} allows website operators to create a holistic databank to organize, taxonomize and make their full range of audience information actionable. It allows them to model, define and manage audience segments to improve content delivery and advertising revenue. @@ -13,11 +13,11 @@ audience segments to improve content delivery and advertising revenue. _**NOTE:** Salesforce DMP is currently in beta. This means that there may still be some bugs for us to iron out. If you are interested in joining or have any feedback to help us improve the Salesforce DMP Destination and its documentation, -[let us know](https://segment.com/help/contact)!_ +[let us know](https://segment.com/help/contact){:target="_blank"}!_ ## Getting Started -{% include content/connection-modes.md %} + Next, configure the Destination in the Segment web app: @@ -52,7 +52,7 @@ If you don't provide a `namespace` Segment can't pass events downstream to SFDMP 6. To set up SFDMP for a server-side connection, enter your SFDMP `Server-side Publisher UUID`. To locate this, we recommend that you contact your SFDMP representative. Helpful documentation can be found - [here](https://konsole.zendesk.com/hc/en-us/articles/219493027-Mobile-HTTP-API). + [here](https://konsole.zendesk.com/hc/en-us/articles/219493027-Mobile-HTTP-API){:target="_blank"}. 7. Once you've retrieved your `Server-side Publisher UUID`, follow the instructions in the Segment SFDMP settings to enter your `Pixel.gif Domain`, `Pixel.gif Site` and, optionally, your `Pixel.gif Section` in the correct diff --git a/src/connections/destinations/catalog/salesforce-live-agent/index.md b/src/connections/destinations/catalog/salesforce-live-agent/index.md index 43071193b1..2b38d01461 100644 --- a/src/connections/destinations/catalog/salesforce-live-agent/index.md +++ b/src/connections/destinations/catalog/salesforce-live-agent/index.md @@ -7,11 +7,11 @@ published: false --- > info "" -> This destination is in Private Beta, and not publicly available. For more information, contact [Segment Support](https://segment.com/help/contact/). +> This destination is in Private Beta, and not publicly available. For more information, contact [Segment Support](https://segment.com/help/contact/){:target="_blank"}. ## Getting Started -To get started, follow Salesforce's [instructions](https://help.salesforce.com/articleView?id=live_agent_create_deployments.htm&type=5) to create a live agent deployment. If you have already done this, navigate to the "deployment code" of the Live Agent deployment you would like to have Segment integrate with. It will look something like this: +To get started, follow Salesforce's [instructions](https://help.salesforce.com/articleView?id=live_agent_create_deployments.htm&type=5){:target="_blank"} to create a live agent deployment. If you have already done this, navigate to the "deployment code" of the Live Agent deployment you would like to have Segment integrate with. It will look something like this: ```html @@ -34,7 +34,7 @@ In short, **our integration cannot proactively initialize the Live Agent SDK on ## Initialization In order to begin using the Salesforce Live Agent using Segment, follow these implementation guidelines. -1. On any page where you are not collecting user information, but do want to interact with the Salesforce Live Agent API (to achieve some of the functionality outlined [here](https://developer.salesforce.com/docs/atlas.en-us.live_agent_dev.meta/live_agent_dev/live_agent_chat_buttons_API.htm) for example), you must implement all the Live Agent SDK functionality natively **except** the actual loading of their `deployment.js` JavaScript library (the first line of the sample deployment code shown earlier). This will always be handled by Segment anywhere you are loading our JavaScript SDK. +1. On any page where you are not collecting user information, but do want to interact with the Salesforce Live Agent API (to achieve some of the functionality outlined [here](https://developer.salesforce.com/docs/atlas.en-us.live_agent_dev.meta/live_agent_dev/live_agent_chat_buttons_API.htm){:target="_blank"} for example), you must implement all the Live Agent SDK functionality natively **except** the actual loading of their `deployment.js` JavaScript library (the first line of the sample deployment code shown earlier). This will always be handled by Segment anywhere you are loading our JavaScript SDK. 2. On any page where you *are* collecting user information (using some kind of pre-chat form for example) that you would like to pass to Salesforce and/or your chat agent after the user completes the form, you must ensure you **do not** call `liveagent.init` natively **anywhere on the page** and ensure that you do invoke a properly formatted Identify event, Group event (this is optional), and finally a Live Chat Conversation Started event **in that order**. ## Identify diff --git a/src/connections/destinations/catalog/salesforce-marketing-cloud-actions/index.md b/src/connections/destinations/catalog/salesforce-marketing-cloud-actions/index.md deleted file mode 100644 index f7b9cb94c4..0000000000 --- a/src/connections/destinations/catalog/salesforce-marketing-cloud-actions/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Salesforce Marketing Cloud (Actions) Destination' -hidden: true -id: 62e30bad99f1bfb98ee8ce08 -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/salesforce-marketing-cloud/index.md b/src/connections/destinations/catalog/salesforce-marketing-cloud/index.md index a7ed34e57c..542adc7e84 100644 --- a/src/connections/destinations/catalog/salesforce-marketing-cloud/index.md +++ b/src/connections/destinations/catalog/salesforce-marketing-cloud/index.md @@ -8,7 +8,7 @@ versions: - name: "Salesforce Marketing Cloud (Actions)" link: '/docs/connections/destinations/catalog/actions-salesforce-marketing-cloud/' --- -Salesforce Marketing Cloud (SFMC) provides digital marketing automation and analytics software and services. Marketers can use this software to create sophisticated multi-channel campaigns using the SFMC [Journey Builder](https://help.salesforce.com/articleView?id=mc_jb_journey_builder.htm&type=5). This is a campaign planning tool that helps you design and automate campaigns that guide customers through their journey with your brand, such as [Weekly Product Summary Emails](https://segment.com/recipes/product-summary-emails-salesforce/) that you can enable with Segment. +Salesforce Marketing Cloud (SFMC) provides digital marketing automation and analytics software and services. Marketers can use this software to create sophisticated multi-channel campaigns using the SFMC [Journey Builder](https://help.salesforce.com/articleView?id=mc_jb_journey_builder.htm&type=5){:target="_blank"}. This is a campaign planning tool that helps you design and automate campaigns that guide customers through their journey with your brand, such as [Weekly Product Summary Emails](https://segment.com/recipes/product-summary-emails-salesforce/){:target="_blank"} that you can enable with Segment. ### SFMC details @@ -22,7 +22,7 @@ Salesforce Marketing Cloud (SFMC) provides digital marketing automation and anal ### Segment and SFMC -Segment sends data to SFMC using [Data Extensions](https://help.salesforce.com/articleView?id=mc_co_salesforce_data_extensions.htm&type=5), or using API Events. +Segment sends data to SFMC using [Data Extensions](https://help.salesforce.com/articleView?id=mc_co_salesforce_data_extensions.htm&type=5){:target="_blank"}, or using API Events. - **Data Extensions** are tables that contain your data. When this data arrives in SFMC, you can use it to create targeted marketing campaigns using push notifications and emails. You can view and query Data Extensions using the Journey Builder in SFMC. During the set up process, you will create a Data Extensions for Identify calls, and one for each unique Track call. @@ -35,7 +35,7 @@ Before you start working with SFMC, work through the following sections to confi ### Confirm that Salesforce Marketing Cloud supports your source type and connection mode -{% include content/connection-modes.md %} + ### Grant Segment API access to Salesforce Marketing Cloud @@ -44,7 +44,7 @@ Before you start working with SFMC, work through the following sections to confi 3. Click **New** to create a new package. We recommend giving it a name like "Segment". 4. Click **Add Component** and select **API Integration**. 5. Select the **Server-to-Server** Integration Type. -6. Enable the following permissions. If you don't add these permissions, you'll see an [Insufficient Privileges](https://developer.salesforce.com/docs/atlas.en-us.mc-apis.meta/mc-apis/error-handling.htm) error from SFMC. +6. Enable the following permissions. If you don't add these permissions, you'll see an [Insufficient Privileges](https://developer.salesforce.com/docs/atlas.en-us.mc-apis.meta/mc-apis/error-handling.htm){:target="_blank"} error from SFMC. - **Email**: `Read`, `Write` - **Web:** `Read`, `Write` - **Automations:** `Read`, `Write`, `Execute` @@ -76,11 +76,11 @@ SFMC has strict rate limits, usually 20 requests per second. If your organizatio To use the SFMC Batch feature: 1. **Make sure you don't need to use [API Events](#segment-and-sfmc) or create contacts from Identify calls**. If you have the SFMC Batch Integration enabled, you cannot use these two features at all. -2. **Enable the SFMC Data Extensions Async API on your account**. SFMC requires that each customer specifically request access to the Salesforce API that allows Segment to send batched data to SFMC. Contact your account representative to [enable the asynchronous REST API endpoints](https://developer.salesforce.com/docs/atlas.en-us.mc-apis.meta/mc-apis/data-extensions-api.htm). **This step is required.** If you do not enable these endpoints, your data will be dropped. This setting is configured by Salesforce per account, so if the account can already access these endpoints, go to the next step. -3. **Contact Segment to enable batching for each SFMC destination**. Once you confirm that you have access to the async API endpoints, contact your Segment CSM or [Segment Product Support](http://segment.com/help/contact/) to request that batching be enabled on your Segment account. You must do this step for each instance of the SFMC destination that you create in your Segment workspace. Provide the Support team with a link to the SFMC destination you want to enable this functionality on. +2. **Enable the SFMC Data Extensions Async API on your account**. SFMC requires that each customer specifically request access to the Salesforce API that allows Segment to send batched data to SFMC. Contact your account representative to [enable the asynchronous REST API endpoints](https://developer.salesforce.com/docs/atlas.en-us.mc-apis.meta/mc-apis/data-extensions-api.htm){:target="_blank"}. **This step is required.** If you do not enable these endpoints, your data will be dropped. This setting is configured by Salesforce per account, so if the account can already access these endpoints, go to the next step. +3. **Contact Segment to enable batching for each SFMC destination**. Once you confirm that you have access to the async API endpoints, contact your Segment CSM or [Segment Product Support](http://segment.com/help/contact/){:target="_blank"} to request that batching be enabled on your Segment account. You must do this step for each instance of the SFMC destination that you create in your Segment workspace. Provide the Support team with a link to the SFMC destination you want to enable this functionality on. 4. Once you complete these enablement steps, follow the standard set up instructions for the SFMC destination below. -If possible, you should enable batching for your SFMC destination before you send it any data. If you enable batching for an existing SFMC destination that has already received Segment data, you must work with [Segment Product Support](http://segment.com/help/contact/) to migrate that data. +If possible, you should enable batching for your SFMC destination before you send it any data. If you enable batching for an existing SFMC destination that has already received Segment data, you must work with [Segment Product Support](http://segment.com/help/contact/){:target="_blank"} to migrate that data. ## Set up to send Identify calls to SFMC @@ -166,7 +166,7 @@ There are a few more things you should to know about sending data to SFMC: ## Set up to send Track calls to SFMC -You can use Segment Track calls to send rich data about what your users are doing to a Data Extension in SFMC, which you can then use to build Journeys. When you send Track calls to SFMC, Segment fires an event using SFMC's [eventing API](https://developer.salesforce.com/docs/atlas.en-us.mc-apis.meta/mc-apis/putDataExtensionRowByKey.htm). +You can use Segment Track calls to send rich data about what your users are doing to a Data Extension in SFMC, which you can then use to build Journeys. When you send Track calls to SFMC, Segment fires an event using SFMC's [eventing API](https://developer.salesforce.com/docs/atlas.en-us.mc-apis.meta/mc-apis/putDataExtensionRowByKey.htm){:target="_blank"}. ### Create a Data Extension in SFMC for each Track event @@ -272,7 +272,7 @@ To use context properties, you must create attributes in the Data Extensions tha You can send audiences and computed traits created in **Engage** to SFMC to run more effective marketing campaigns. -In order to do this, you must have access to **Engage**. To learn more, [contact Segment for a demo](https://segment.com/contact/demo). +In order to do this, you must have access to **Engage**. To learn more, [contact Segment for a demo](https://segment.com/contact/demo){:target="_blank"}. ### Set up Engage with SFMC in Segment @@ -302,8 +302,10 @@ When you add an audience to SFMC, the first sync contains all the users in that If a user leaves that audience, the value is automatically updated to `false`, but the user is not removed from the Extension. This allows you to see all users who have ever been in the audience, and then optionally create a filtered Data Extension if you want a subset. See the SFMC documentation for more details: -- [Create a Filtered Data Extension in Marketing Cloud](https://help.salesforce.com/articleView?id=mc_es_create_filtered_de.htm&r=https%3A%2F%2Fwww.google.com%2F&type=5) -- [Automatically refresh a Filtered Data Extension](https://help.salesforce.com/articleView?id=000264612&language=en_US&type=1) +- [Create a Filtered Data Extension in Marketing Cloud](https://help.salesforce.com/articleView?id=mc_es_create_filtered_de.htm&r=https%3A%2F%2Fwww.google.com%2F&type=5){:target="_blank"} +- [Automatically refresh a Filtered Data Extension](https://help.salesforce.com/articleView?id=000264612&language=en_US&type=1){:target="_blank"} + + ### Syncing Engage Computed Traits to SFMC @@ -340,4 +342,10 @@ If you select **Use email attribute from Entry Source** you can use an email or This issue usually occurs for customers that have very large volumes of customer data (10MM+ users), because multiple audiences and traits attempt to send large quantities of backfill data into SFMC at the same time, and compete for the SFMC rate limit. To help with this, avoid syncing multiple *new* audiences and *new* traits at the same time. Instead, create an audience, sync it to SFMC and wait for it to complete. Then, create and sync your next audience or trait. -You can also request a higher rate limit from your SFMC account representative. After you confirm the higher rate limit with your SFMC representative, contact [Segment Product Support](http://segment.com/help/contact) to adjust the rate limit from the Segment side for you. +You can also request a higher rate limit from your SFMC account representative. After you confirm the higher rate limit with your SFMC representative, contact [Segment Product Support](http://segment.com/help/contact){:target="_blank"} to adjust the rate limit from the Segment side for you. + +### Sending null values + +Events containing a field with a `null` value are silently rejected by SFMC's REST API. To prevent this, especially in situations where events require transformation prior to sending to SFMC, consider employing an [Insert Function](/docs/connections/functions/insert-functions/) to replace any `null` values within your events. + +If you're connected to this destination using [Reverse ETL](/docs/connections/reverse-etl/), ensure that you configure the model connected to the mapping to return non-null values to avoid any disruptions. diff --git a/src/connections/destinations/catalog/salesforce/index.md b/src/connections/destinations/catalog/salesforce/index.md index 1a6afdb1d8..9e0a49bcdc 100644 --- a/src/connections/destinations/catalog/salesforce/index.md +++ b/src/connections/destinations/catalog/salesforce/index.md @@ -6,11 +6,11 @@ maintenance: false private: true --- > warning "Deprecation Notice" -> Due to Salesforce retiring certain APIs on May 31, 2023, Segment is deprecating this destination. During the week of April 24, 2023, Segment will create an instance of the [Salesforce (Actions)](/docs/connections/destinations/catalog/actions-salesforce/) destination for each version of the Salesforce classic destination in your workspace. +> Due to Salesforce retiring certain APIs in the summer of 2025, Segment is deprecating this destination. During the week of April 24, 2023, Segment created an instance of the [Salesforce (Actions)](/docs/connections/destinations/catalog/actions-salesforce/) destination for each version of the Salesforce classic destination in your workspace. > > Settings will be migrated automatically, but you must take additional action to ensure the destination is properly enabled.For more information, see [Migrating from Salesforce Classic](/docs/connections/destinations/catalog/actions-salesforce/#migrate-from-salesforce-classic) > -> For questions or issues, or to opt out of the automatic upgrade, contact [friends@segment.com](mailto:friends@segment.com). +> For questions or issues, or to opt out of the automatic upgrade, contact [friends@segment.com](mailto:friends@segment.com). For more information about Salesforce's deprecation, see their [deprecation notice](https://help.salesforce.com/s/articleView?id=000389618&type=1){:target="_blank"} Segment's Salesforce destination allows you to create and store leads and records for other objects in Salesforce Sales Cloud. @@ -87,7 +87,7 @@ analytics.identify('YOUR_USERS_ID', { When you call `identify`, Segment checks to see if this Lead exists based on the `email` trait. If it does, Segment updates the Lead with the traits you've passed in your `identify` call, otherwise Segment creates a Salesforce Lead. > warning "" -> If you're planning to update custom fields in Salesforce with Segment, you need to make sure you create the custom Lead Field inside Salesforce *prior* to sending the data. The [Salesforce API for Leads](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_lead.htm) requires `lastName` and `company`. If either of this fields are not present in a server-side request Segment appends the string `'n/a'` to each of those fields even if you have provided those fields in a previous request. +> If you're planning to update custom fields in Salesforce with Segment, you need to make sure you create the custom Lead Field inside Salesforce *prior* to sending the data. The [Salesforce API for Leads](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_lead.htm){:target="_blank"} requires `lastName` and `company`. If either of this fields are not present in a server-side request Segment appends the string `'n/a'` to each of those fields even if you have provided those fields in a previous request. For example, if you want to collect a custom trait in Segment called `testProp`, you can create a Field Label called `testProp` which will generate an API Name as `testProp__c`. Segment appends the `__c` to any custom traits so you don't need to worry about that. Make sure to stay consistent with your casing. If you create custom fields in camelCase, make sure you send `traits` to Segment in camelCase. If you are creating custom fields in SFDC as `snake_case`, then be sure to send your `traits` in the same format. @@ -123,7 +123,7 @@ analytics.group('813', { } }); ``` -The above call will be sent like the following, in accordance with [Salesforce's API specs](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_account.htm): +The above call will be sent like the following, in accordance with [Salesforce's API specs](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_account.htm){:target="_blank"}: ```js { @@ -161,7 +161,7 @@ In order to send custom traits, you must do the same steps as you had done for t ## Trait Validation -Salesforce has documented strict validations on their semantic traits. Segment trims those traits if they go over the limit. Refer to their docs for [Account Objects](https://developer.salesforce.com/docs/atlas.en-us.200.0.api.meta/api/sforce_api_objects_account.htm#topic-title) and [Lead Objects](https://developer.salesforce.com/docs/atlas.en-us.200.0.api.meta/api/sforce_api_objects_lead.htm) to make sure you are sending the trait values under these limits if you do not want to see them trimmed off. +Salesforce has documented strict validations on their semantic traits. Segment trims those traits if they go over the limit. Refer to their docs for [Account Objects](https://developer.salesforce.com/docs/atlas.en-us.200.0.api.meta/api/sforce_api_objects_account.htm#topic-title){:target="_blank"} and [Lead Objects](https://developer.salesforce.com/docs/atlas.en-us.200.0.api.meta/api/sforce_api_objects_lead.htm){:target="_blank"} to make sure you are sending the trait values under these limits if you do not want to see them trimmed off. ## Custom Actions If you need to manually configure how your Segment events interact with Salesforce resources, you can do so using the [Actions](#actions) setting. This setting allows you to trigger standard CRUD operation (Create, Read, Update/Upsert, Delete) on your internal SFDC resources in response to your Segment events. You can configure as many of these actions as you would like. Each action must be associated with either a specific `track` event or **all** `identify` events. Actions can be further configured to map event properties to SFDC fields. Here's an example action configuration that will create a new Case in Salesforce in response to an **Issue Submitted** `track` event: @@ -186,7 +186,7 @@ To enable an integration with a Salesforce Sandbox instance: ### API Call Limits -Salesforce limits both the concurrent amount of requests and the total amount of daily requests Segment can make to their API on your behalf. Check [these limits](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_api.htm). They vary per edition and your number of bought user licenses. +Salesforce limits both the concurrent amount of requests and the total amount of daily requests Segment can make to their API on your behalf. Check [these limits](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_api.htm){:target="_blank"}. They vary per edition and your number of bought user licenses. Segment makes two API requests per `identify`. The first request is a SQL query to determine whether this object already exists. The second is to either update or create that object. @@ -210,7 +210,7 @@ You can add whatever lookup fields you want to help Segment find the object you ### Custom Fields Aren't Updating -Make sure that the traits you're passing through match the Custom Field's API name and data type! +Make sure that the traits you're passing through match the Custom Field's API name and data type. ### Password Expiration diff --git a/src/connections/destinations/catalog/salesmachine/index.md b/src/connections/destinations/catalog/salesmachine/index.md index 9aaccbf353..5efd3ee9ee 100644 --- a/src/connections/destinations/catalog/salesmachine/index.md +++ b/src/connections/destinations/catalog/salesmachine/index.md @@ -6,7 +6,7 @@ This destination is maintained by Salesmachine. ## Getting Started -In order to push segment data to Salesmachine.io, you need to provide Salesmachine.io api_token and api_secret. This tokens are available on the [administration panel](https://my.salesmachine.io/app/api/edit). +In order to push segment data to Salesmachine.io, you need to provide Salesmachine.io api_token and api_secret. This tokens are available on the [administration panel](https://my.salesmachine.io/app/api/edit){:target="_blank"}. Salemachine.io supports the `identify`, `track`, `page`, `group` and `alias` methods. diff --git a/src/connections/destinations/catalog/satismeter/index.md b/src/connections/destinations/catalog/satismeter/index.md index 854bf63acc..4e00d42fac 100644 --- a/src/connections/destinations/catalog/satismeter/index.md +++ b/src/connections/destinations/catalog/satismeter/index.md @@ -2,9 +2,9 @@ title: SatisMeter Destination id: 54c02a5adb31d978f14a7f6f --- -[Our SatisMeter destination code](https://github.com/segment-integrations/analytics.js-integration-satismeter) is all open-source on GitHub if you want to check it out. +[Our SatisMeter destination code](https://github.com/segment-integrations/analytics.js-integration-satismeter){:target="_blank"} is all open-source on GitHub if you want to check it out. -See SatisMeter in action on their [sample app](https://app.satismeter.com/sample). +See SatisMeter in action on their [sample app](https://app.satismeter.com/sample){:target="_blank"}. After you enable SatisMeter in Segment, the SatisMeter NPS survey will be shown to your customers. diff --git a/src/connections/destinations/catalog/savio/index.md b/src/connections/destinations/catalog/savio/index.md index 7cb09e5913..887fed4335 100644 --- a/src/connections/destinations/catalog/savio/index.md +++ b/src/connections/destinations/catalog/savio/index.md @@ -3,17 +3,17 @@ rewrite: true title: Savio Destination id: 5c6ddad405424a0001ecff86 --- -[Savio](https://savio.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) enables B2B SaaS teams to centrally manage customer feedback so they can make better product decisions. +[Savio](https://savio.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} enables B2B SaaS teams to centrally manage customer feedback so they can make better product decisions. This destination is maintained by Savio. For any issues with the destination, [contact the Savio Support team](mailto:support@savio.io). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Savio" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Savio dashboard](https://www.savio.io/app/accounts/integration-settings). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Savio dashboard](https://www.savio.io/app/accounts/integration-settings){:target="_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/scopeai/index.md b/src/connections/destinations/catalog/scopeai/index.md index 00bcbc385d..1ad4e4cdc4 100644 --- a/src/connections/destinations/catalog/scopeai/index.md +++ b/src/connections/destinations/catalog/scopeai/index.md @@ -3,19 +3,17 @@ rewrite: true title: ScopeAI Destination id: 5c6cb84c9d413f0001804a42 --- -[ScopeAI](https://www.getscopeai.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) improves communication between support and product teams by aggregating user feedback and tracking the impact of bugs or issues and feature requests. +[ScopeAI](https://www.getscopeai.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} improves communication between support and product teams by aggregating user feedback and tracking the impact of bugs or issues and feature requests. This destination is maintained by ScopeAI. For any issues with the destination, [contact the ScopeAI Support team](mailto:support@getscopeai.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "ScopeAI" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the Segment Settings UI under "API Key" place the Segment token that can be seen after clicking "Show Token" in the panel of the Segment integration you've created in the [ScopeAI integrations page](https://www.getscopeai.com/integrations). If you haven't yet created a Segment integration on the ScopeAI app, follow these [instructions](http://help.getscopeai.com/integrations/integrating-with-segment) to create one. +3. In the Segment Settings UI under "API Key" place the Segment token that can be seen after clicking "Show Token" in the panel of the Segment integration you've created in the [ScopeAI integrations page](https://www.getscopeai.com/integrations){:target="_blank"}. If you haven't yet created a Segment integration on the ScopeAI app, follow these [instructions](http://help.getscopeai.com/integrations/integrating-with-segment){:target="_blank"} to create one. Data will only display when there are conversations imported into ScopeAI (these must be imported through separate integrations) that have a `userId` or `email` that match with the `userId` or `email` of Segment API calls. diff --git a/src/connections/destinations/catalog/screeb-web-actions/index.md b/src/connections/destinations/catalog/screeb-web-actions/index.md new file mode 100644 index 0000000000..7995ccc398 --- /dev/null +++ b/src/connections/destinations/catalog/screeb-web-actions/index.md @@ -0,0 +1,7 @@ +--- +title: 'Screeb Web (Actions) Destination' +hidden: true +id: 64820d8030d09e775fbac372 +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/screeb/index.md b/src/connections/destinations/catalog/screeb/index.md index 463f14a346..a0d932439f 100644 --- a/src/connections/destinations/catalog/screeb/index.md +++ b/src/connections/destinations/catalog/screeb/index.md @@ -3,18 +3,18 @@ title: Screeb Destination rewrite: true id: 60ae0d1120fec1896fa8ff8b --- -[Screeb](https://screeb.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps teams to get actionnable feedback without ruining user experience. +[Screeb](https://screeb.app/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps teams to get actionnable feedback without ruining user experience. This destination is maintained by Screeb. For any issues with the destination, [contact the Screeb Support team](mailto:support@screeb.app). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Screeb" in the Destinations Catalog, and select the "Screeb" destination. 3. Choose which Source should send data to the "Screeb" destination. -4. Go to the [Screeb platform](https://admin.screeb.app/) > Integration, and install the Segment connector. +4. Go to the [Screeb platform](https://admin.screeb.app/){:target="_blank"} > Integration, and install the Segment connector. 5. Find and copy the "API Key". 6. Enter the "API Key" in the "Screeb" destination settings in Segment. @@ -30,7 +30,7 @@ analytics.identify('userId123', { Segment sends Identify calls to Screeb as an `identity` event. -The traits provided along with the identity can be listed on the [Screeb platform](https://admin.screeb.app/) > Settings. Surveys can be customized or displayed according to identity properties. +The traits provided along with the identity can be listed on the [Screeb platform](https://admin.screeb.app/){:target="_blank"} > Settings. Surveys can be customized or displayed according to identity properties. ## Track @@ -43,7 +43,7 @@ analytics.track('Login Button Clicked') Segment sends Track calls to Screeb as an `event.track` event. -The provided events can be listed on the [Screeb platform](https://admin.screeb.app/) > Settings. Surveys can be displayed according to event rules. +The provided events can be listed on the [Screeb platform](https://admin.screeb.app/){:target="_blank"} > Settings. Surveys can be displayed according to event rules. ## Alias diff --git a/src/connections/destinations/catalog/scuba-analytics/index.md b/src/connections/destinations/catalog/scuba-analytics/index.md index 46c8229ff8..44b667d0b1 100644 --- a/src/connections/destinations/catalog/scuba-analytics/index.md +++ b/src/connections/destinations/catalog/scuba-analytics/index.md @@ -8,11 +8,9 @@ id: 5d098d7fd748d200010cd081 This destination is maintained by Scuba Analytics. For any issues with the destination, [contact the Scuba Analytics Support team](mailto:support@interana.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + To set up the Scuba Analytics Integration, first you will need: The root URL for your destination cloud storage directory diff --git a/src/connections/destinations/catalog/segmetrics/index.md b/src/connections/destinations/catalog/segmetrics/index.md index 735feacb9d..044a86545e 100644 --- a/src/connections/destinations/catalog/segmetrics/index.md +++ b/src/connections/destinations/catalog/segmetrics/index.md @@ -3,22 +3,22 @@ title: SegMetrics Destination rewrite: true id: 5ec2b3adf7d3322ea12f3c04 --- -[SegMetrics](https://segmetrics.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a lead and revenue attribution tool for marketers. It combines cross-platform behavioral data from the marketing tools you already use to create a holistical customer journey of your entire marketing funnel. +[SegMetrics](https://segmetrics.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a lead and revenue attribution tool for marketers. It combines cross-platform behavioral data from the marketing tools you already use to create a holistical customer journey of your entire marketing funnel. This destination is maintained by SegMetrics. For any issues with the destination, [contact the SegMetrics Support team](mailto:support@segmetrics.io). ## Getting Started -{% include content/connection-modes.md %} -1. Go to your [Integrations tab](https://app.segmetrics.io/a/integration) in SegMetrics, and click **Connect** for the Segment Integration. -2. Go to your [Account Settings](https://app.segmetrics.io/a/account/edit) and copy your SegMetrics `Account Id` and `API Key`. + +1. Go to your [Integrations tab](https://app.segmetrics.io/a/integration){:target="_blank"} in SegMetrics, and click **Connect** for the Segment Integration. +2. Go to your [Account Settings](https://app.segmetrics.io/a/account/edit){:target="_blank"} and copy your SegMetrics `Account Id` and `API Key`. 3. From the Destinations catalog page in the Segment App, click **Add Destination**. 4. Search for “SegMetrics” in the Destinations Catalog and select the SegMetrics Destination. 5. Enter the `Account Key` and `API Key` in the SegMetrics destination settings in Segment. > info "" -> Data is available in your dashboard depending on your [SegMetrics plan](https://segmetrics.io/pricing/). +> Data is available in your dashboard depending on your [SegMetrics plan](https://segmetrics.io/pricing/){:target="_blank"}. ## Page diff --git a/src/connections/destinations/catalog/selligent-marketing-cloud/index.md b/src/connections/destinations/catalog/selligent-marketing-cloud/index.md index 95799b66b9..83debbb250 100644 --- a/src/connections/destinations/catalog/selligent-marketing-cloud/index.md +++ b/src/connections/destinations/catalog/selligent-marketing-cloud/index.md @@ -3,12 +3,12 @@ title: Selligent Marketing Cloud Destination rewrite: true id: 5e14bf9f1729d9e6ded001f6 --- -[Selligent Marketing Cloud](https://www.selligent.com/?utm_source=segment&utm_medium=integrations-page&utm_campaign=partners/) is a highly integrated, AI-powered omnichannel marketing automation platform which enables ambitious B2C marketers to maximize every moment of interaction with today’s connected consumers. Delivers ultra-personalized, highly relevant customer experiences across channels and devices, providing value swiftly and at scale. +[Selligent Marketing Cloud](https://www.selligent.com/?utm_source=segment&utm_medium=integrations-page&utm_campaign=partners/){:target="_blank"} is a highly integrated, AI-powered omnichannel marketing automation platform which enables ambitious B2C marketers to maximize every moment of interaction with today’s connected consumers. Delivers ultra-personalized, highly relevant customer experiences across channels and devices, providing value swiftly and at scale. -This Destination is maintained by *Selligent Marketing Cloud*. For any issues with the Destination, please reach out to their [Support team](https://support.selligent.com) +This Destination is maintained by *Selligent Marketing Cloud*. For any issues with the Destination, please reach out to their [Support team](https://support.selligent.com){:target="_blank"} > success "" -> **Good to know**: This page is about the Selligent Marketing Cloud Segment destination, which receives data from Segment. There's also a page about the [Selligent Marketing Cloud Segment source](/docs/connections/sources/catalog/cloud-apps/selligent-marketing-cloud/), which sends data _to_ Segment! +> **Good to know**: This page is about the Selligent Marketing Cloud Segment destination, which receives data from Segment. There's also a page about the [Selligent Marketing Cloud Segment source](/docs/connections/sources/catalog/cloud-apps/selligent-marketing-cloud/){:target="_blank"}, which sends data _to_ Segment! ## Getting Started @@ -36,7 +36,7 @@ You can then proceed to configure your destination. 5. *Organization* - You will find the organization name on the top-right hand corner next to the menu icon. ![6](images/6.png) 6. *Allowed Events* - Add the `track` event names that you would like to allowlist or send to SMC -7. *Events data list API name* - The default value is **segment_events**, if you have any issue regarding the property please contact the *Selligent Marketing Cloud* [Support team](https://support.selligent.com). +7. *Events data list API name* - The default value is **segment_events**, if you have any issue regarding the property please contact the *Selligent Marketing Cloud* [Support team](https://support.selligent.com){:target="_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/sendwithus/index.md b/src/connections/destinations/catalog/sendwithus/index.md index afa12f6d77..61a6ef8339 100644 --- a/src/connections/destinations/catalog/sendwithus/index.md +++ b/src/connections/destinations/catalog/sendwithus/index.md @@ -2,7 +2,7 @@ title: SendwithUs Destination --- -[Our SendwithUs destination code](https://github.com/segmentio/integration-sendwithus) is all open-source on GitHub if you want to check it out. +[Our SendwithUs destination code](https://github.com/segmentio/integration-sendwithus){:target="_blank"} is all open-source on GitHub if you want to check it out. ## Identify diff --git a/src/connections/destinations/catalog/sentry/index.md b/src/connections/destinations/catalog/sentry/index.md index e6cf2cb4cf..86798916ed 100644 --- a/src/connections/destinations/catalog/sentry/index.md +++ b/src/connections/destinations/catalog/sentry/index.md @@ -3,11 +3,11 @@ rewrite: true title: Sentry Destination id: 54521fda25e721e32a72eef0 --- -[Sentry](https://sentry.io) is open-source error tracking that helps developers monitor and fix crashes in real time. Iterate continuously. Boost efficiency. Improve user experience. The `analytics.js` Sentry Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/sentry). +[Sentry](https://sentry.io){:target="_blank"} is open-source error tracking that helps developers monitor and fix crashes in real time. Iterate continuously. Boost efficiency. Improve user experience. The `analytics.js` Sentry Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/sentry){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Sentry" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/serenytics/index.md b/src/connections/destinations/catalog/serenytics/index.md index 52968773e0..f673ae35d3 100644 --- a/src/connections/destinations/catalog/serenytics/index.md +++ b/src/connections/destinations/catalog/serenytics/index.md @@ -3,30 +3,28 @@ rewrite: true title: Serenytics Destination id: 5cb99b9cb26aa60001c3a896 --- -[Serenytics](https://www.serenytics.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides an all-in-one data platform to create dashboards. It comes with an embedded Redshift data warehouse, an ETL, a Python scheduler and a dashboard editor. It is dedicated to small/medium data teams looking for a full-featured data stack who don't want to create and maintain it internally. +[Serenytics](https://www.serenytics.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides an all-in-one data platform to create dashboards. It comes with an embedded Redshift data warehouse, an ETL, a Python scheduler and a dashboard editor. It is dedicated to small/medium data teams looking for a full-featured data stack who don't want to create and maintain it internally. When the Serenytics destination is enabled in Segment, messages from Segment will be stored in the Serenytics Redshift and will be available for transformation and to create dashboards. This destination is maintained by the company Serenytics. For any issues with the destination, [contact the Serenytics Support team](mailto:support@serenytics.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + From Serenytics app using OAuth: -1. In Serenytics, in the [datasources list](https://app.serenytics.com/studio/data_sources), click on the button `New data source` and select the tab `Web services and API` and click on `Segment`. +1. In Serenytics, in the [datasources list](https://app.serenytics.com/studio/data_sources){:target="_blank"}, click on the button `New data source` and select the tab `Web services and API` and click on `Segment`. 2. This will redirect you to Segment website where you choose which Segment source you want to connect to Serenytics. 3. Once you have choosen the Segment source, you are redirected to Serenytics in a newly created datasources folder called 'Segment integration'. It contains all the Serenytics datasources where your data will be available to create dashboards. From Segment Destinations Catalog: 1. From the Segment web app, click **Catalog**. 2. Search for "Serenytics" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Serenytics account page](https://app.serenytics.com/studio/account). -4. In the [Serenytics datasources list](https://app.serenytics.com/studio/data_sources), when the first message from Segment is received, a new folder named 'Segment integration' will be automatically created with datasources that contain your data. +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Serenytics account page](https://app.serenytics.com/studio/account){:target="_blank"}. +4. In the [Serenytics datasources list](https://app.serenytics.com/studio/data_sources){:target="_blank"}, when the first message from Segment is received, a new folder named 'Segment integration' will be automatically created with datasources that contain your data. diff --git a/src/connections/destinations/catalog/sherlock/index.md b/src/connections/destinations/catalog/sherlock/index.md index 390ac0a0dc..eee50a9015 100644 --- a/src/connections/destinations/catalog/sherlock/index.md +++ b/src/connections/destinations/catalog/sherlock/index.md @@ -10,7 +10,7 @@ This integration is maintained by Sherlock. For questions or help with your inte ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Sherock" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/signl4-alerting/index.md b/src/connections/destinations/catalog/signl4-alerting/index.md index f851a5a36c..e2f1facebb 100644 --- a/src/connections/destinations/catalog/signl4-alerting/index.md +++ b/src/connections/destinations/catalog/signl4-alerting/index.md @@ -3,24 +3,22 @@ title: SIGNL4 Alerting rewrite: true id: 5fbfbfc64832c185a5fd3faf --- -[SIGNL4](https://www.signl4.com) is a lightweight, app-based alerting service of operational teams supporting app push, SMS text and voice call including tracking, escalation, collaboration and duty planning. +[SIGNL4](https://www.signl4.com){:target="_blank"} is a lightweight, app-based alerting service of operational teams supporting app push, SMS text and voice call including tracking, escalation, collaboration and duty planning. When incidents happen, SIGNL4 can alert your teams, engineers, sales, marketing or workers ‘in the field'. SIGNL4 helps to know what is going on – from anywhere and anytime. This destination is maintained by Derdack SIGNL4. For any issues with the destination, [contact their support team](mailto:success@signl4.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in your Segment Workspace, click Add Destination. 2. Search for “SIGNL4” in the Destinations Catalog, and select the SIGNL4 Alerting destination. 3. Choose which Source should send data to the “SIGNL4 Alerting” destination. 4. Enter the “API Key” in the “SIGNL4 Alerting” destination settings in your Segment Workspace, this is your SIGNL4 team secret and the first part of your SIGNL4 email address. -Ife you do not have SIGNL4 installed already, you can download the SIGNL4 App from the [Google Play Store](https://play.google.com/store/apps/details?id=com.derdack.signl4) or from the [Apple App Store](https://itunes.apple.com/us/app/signl4/id1100283480). Alternatively, you can get started on the [SIGNL4 web site](https://www.signl4.com/free-trial-test/). Once registered you will get an email with your SIGNL4 API information which includes your SIGNL4 team secret. This is the first part of your SIGNL4 email address (your-team-secret@mail.signl4.com). +Ife you do not have SIGNL4 installed already, you can download the SIGNL4 App from the [Google Play Store](https://play.google.com/store/apps/details?id=com.derdack.signl4){:target="_blank"} or from the [Apple App Store](https://itunes.apple.com/us/app/signl4/id1100283480){:target="_blank"}. Alternatively, you can get started on the [SIGNL4 web site](https://www.signl4.com/free-trial-test/){:target="_blank"}. Once registered you will get an email with your SIGNL4 API information which includes your SIGNL4 team secret. This is the first part of your SIGNL4 email address (your-team-secret@mail.signl4.com). ## Page diff --git a/src/connections/destinations/catalog/simplereach/index.md b/src/connections/destinations/catalog/simplereach/index.md index b8edc35175..f9dfd97260 100644 --- a/src/connections/destinations/catalog/simplereach/index.md +++ b/src/connections/destinations/catalog/simplereach/index.md @@ -3,11 +3,11 @@ rewrite: true title: SimpleReach Destination id: 55d3c70e0a20f4e22f0fb3eb --- -SimpleReach helps brands, agencies, and publishers increase the impact of their content marketing. The SimpleReach Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-simplereach). +SimpleReach helps brands, agencies, and publishers increase the impact of their content marketing. The SimpleReach Destination is open-source. You can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-simplereach){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From your Segment UI's Destinations page click on "Add Destination". 2. Search for "SimpleReach" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/singular/index.md b/src/connections/destinations/catalog/singular/index.md index 75acd773af..3afb8972e0 100644 --- a/src/connections/destinations/catalog/singular/index.md +++ b/src/connections/destinations/catalog/singular/index.md @@ -3,17 +3,17 @@ rewrite: true title: Singular Destination id: 5c768ec31413290001ebdd2e --- -[Singular](https://www.singular.net/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a Marketing Intelligence Platform that transforms marketing data into accurate, granular and actionable insights to drive growth. By unifying marketing campaign data with attribution data, marketers can measure ROI from every touchpoint across multiple channels for a single source of truth. +[Singular](https://www.singular.net/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a Marketing Intelligence Platform that transforms marketing data into accurate, granular and actionable insights to drive growth. By unifying marketing campaign data with attribution data, marketers can measure ROI from every touchpoint across multiple channels for a single source of truth. This destination is maintained by Singular. For any issues with the destination, [contact Singular Support](mailto:support@singular.net). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Singular" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Add your Singular "API KEY", found in your Singular Dashboard under 'Settings' > 'SDK Keys', to the Segment Settings UI. +3. Add your Singular "API KEY", found in your Singular Dashboard under 'Developer Tools' > 'SDK Keys', to the Segment Settings UI. ## What's supported @@ -28,56 +28,6 @@ This destination is maintained by Singular. For any issues with the destination, Enable automatic tracking of lifecycle events (`Application Opened`, `Application Installed`, `Application Updated`) using initialization config parameters ([iOS](/docs/connections/sources/catalog/libraries/mobile/ios/#application-lifecycle-tracking), [Android](/docs/connections/sources/catalog/libraries/mobile/android/#step-2-initialize-the-client)) to track installs and sessions in Singular. The Singular "**session**" will be sent automatically by the integration as long as you are including the events above. -## Apple Search Ads Attribution - -> note "Note" -> If you are using the Device-Based Destination, there's no need to implement the code below, as the data is already collected automatically. - -To get attribution data into Singular, you must include the [analytics-ios-iads-attribution](https://github.com/segmentio/analytics-ios-iads-attribution) dependency and version 3.6.0 or higher of the [Analytics SDK](https://github.com/segmentio/analytics-ios). - -To install it, simply add the following line to your Podfile: -`pod "Analytics"` -`pod "Analytics-iAds-Attribution"` - -Then import the header and initialize the configuration: -``` -#import - -// Initialize the configuration as you would normally. -SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:@"YOUR_WRITE_KEY"]; -... - -// Configure the client with the iAD middleware to attach iAd properties. -configuration.middlewares = @[ [SEGADTracker middleware] ]; - -[SEGAnalytics setupWithConfiguration:configuration]; - -``` -When iAd information is available, the attribution information is transformed to Segment context this way: -``` -[analytics track:@"Application Installed", - properties: nil, - options: @{ - @"context" : @{ - @"campaign" : @{ - @"provider" : @"Apple", - @"click_date" : attributionInfo[@"iad-click-date"], - @"conversion_date" : attributionInfo[@"iad-conversion-date"], - @"source" : @"iAd", - @"name" : attributionInfo[@"iad-campaign-name"], - @"content" : attributionInfo[@"iad-keyword"], - @"ad_creative" : attributionInfo[@"iad-org-name"], - @"ad_group" : attributionInfo[@"iad-adgroup-name"], - @"id" : attributionInfo[@"iad-campaign-id"], - @"ad_group_id" : attributionInfo[@"iad-adgroup-id"] - } - } - }]; - -``` -Singular has explicitly mapped the `Application Installed` lifecycle event to provide the iAd Information. - - ## Tracking Custom Events If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call (in Android) would look like: diff --git a/src/connections/destinations/catalog/skalin/index.md b/src/connections/destinations/catalog/skalin/index.md index d426c97e5a..4c22a3dd32 100644 --- a/src/connections/destinations/catalog/skalin/index.md +++ b/src/connections/destinations/catalog/skalin/index.md @@ -11,7 +11,7 @@ This destination is maintained by Skalin. For any issues with the destination, [ ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **Skalin** in the Destinations Catalog, and select the **Skalin** destination. diff --git a/src/connections/destinations/catalog/slack/index.md b/src/connections/destinations/catalog/slack/index.md index 49b2fe72f4..b751a6b42a 100644 --- a/src/connections/destinations/catalog/slack/index.md +++ b/src/connections/destinations/catalog/slack/index.md @@ -4,15 +4,15 @@ title: Slack Destination maintenance: true id: 56748689e954a874ca44ccfb --- -[Slack](https://slack.com/) is a team collaboration tool where work flows. It's where the people you need, the information you share, and the tools you use come together to get things done. +[Slack](https://slack.com/){:target="_blank"} is a team collaboration tool where work flows. It's where the people you need, the information you share, and the tools you use come together to get things done. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Slack" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In your Slack custom integration settings, create a new [Incoming Webhook](https://my.slack.com/services/new/incoming-webhook/) URL by selecting a Slack channel associated with your account. +3. In your Slack custom integration settings, create a new [Incoming Webhook](https://my.slack.com/services/new/incoming-webhook/){:target="_blank"} URL by selecting a Slack channel associated with your account. 4. Enter this in your Segment UI settings under 'Incoming Webhook URL'. The Slack channel you selected will be the default channel which will receive events. ## Identify @@ -29,7 +29,7 @@ analytics.identify('userId123', { By default, your `identify` calls will not be sent through to Slack unless you have whitelisted a `trait` and the `identify` call contains that `trait`. If you allowlist multiple `traits` in the Segment app's destination settings under "Whitelisted Traits", then the `identify` call must contain all of them in order to be sent into your Slack. Following the code example above, we can allowlist the trait names of `name` and `email`. ### Identify Template -Once you've saved your whitelisted traits, you can now use them alongside [Handlebars expressions](https://handlebarsjs.com/guide/expressions.html#expressions) syntax within a template. Make sure you reference the spec for the [Identify method](/docs/connections/spec/identify/) and [common object](/docs/connections/spec/common/). `Identify` events that contain the whitelisted `traits` will appear as a Slack message with the following default template: +Once you've saved your whitelisted traits, you can now use them alongside [Handlebars expressions](https://handlebarsjs.com/guide/expressions.html#expressions){:target="_blank"} syntax within a template. Make sure you reference the spec for the [Identify method](/docs/connections/spec/identify/) and [common object](/docs/connections/spec/common/). `Identify` events that contain the whitelisted `traits` will appear as a Slack message with the following default template: ``` {% raw %} Identified user {{name}}. \n\{{traits}} @@ -75,7 +75,7 @@ If you would like to have specific events be sent to a particular channel (#chan ### Event Templates -Event templates also use [Handlebars expressions](https://handlebarsjs.com/guide/expressions.html) syntax. Make sure you reference the spec for the [Track method](/docs/connections/spec/track/) and [common object](/docs/connections/spec/common/). `Track` events will trigger a Slack message with the following default template: +Event templates also use [Handlebars expressions](https://handlebarsjs.com/guide/expressions.html){:target="_blank"} syntax. Make sure you reference the spec for the [Track method](/docs/connections/spec/track/) and [common object](/docs/connections/spec/common/). `Track` events will trigger a Slack message with the following default template: ``` {% raw %} @@ -121,7 +121,7 @@ In addition to exact event names, you can also enter regex patterns for channels /[a-zA-Z]+ing$/g ``` -More information on regex can be found [here](http://www.zytrax.com/tech/web/regex.htm). +More information on regex can be found [here](http://www.zytrax.com/tech/web/regex.htm){:target="_blank"}. ## Troubleshooting diff --git a/src/connections/destinations/catalog/slicingdice/index.md b/src/connections/destinations/catalog/slicingdice/index.md index 78eb8604da..76e6ffdcd9 100644 --- a/src/connections/destinations/catalog/slicingdice/index.md +++ b/src/connections/destinations/catalog/slicingdice/index.md @@ -3,19 +3,17 @@ rewrite: true title: SlicingDice Destination id: 5ca241b892f10000016b5696 --- -[SlicingDice](https://slicingdice.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is an all-in-one data warehouse. It's a fully managed cloud data warehouse with optional built-in tools for data integration, exploration, visualization and machine learning. +[SlicingDice](https://slicingdice.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is an all-in-one data warehouse. It's a fully managed cloud data warehouse with optional built-in tools for data integration, exploration, visualization and machine learning. This destination is maintained by SlicingDice. For any issues with the destination, [contact the SlicingDice Support team](mailto:support@slicingdice.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. Login into your SlicingDice's Control Panel account to create a connection between SlicingDice and Segment. -2. Follow the [Connecting to Segment guide](https://docs.slicingdice.com/data_warehouse_module/connecting_external_tools/segment.html) available in SlicingDice documentation to create and allow this connection. +2. Follow the [Connecting to Segment guide](https://docs.slicingdice.com/data_warehouse_module/connecting_external_tools/segment.html){:target="_blank"} available in SlicingDice documentation to create and allow this connection. ## Page diff --git a/src/connections/destinations/catalog/smartlook/index.md b/src/connections/destinations/catalog/smartlook/index.md index 6625ecc492..fca7ed8738 100644 --- a/src/connections/destinations/catalog/smartlook/index.md +++ b/src/connections/destinations/catalog/smartlook/index.md @@ -3,20 +3,19 @@ rewrite: true title: Smartlook Destination id: 5c9b332f4a9ac00001e97649 --- -[Smartlook](https://smartlook.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a product analytics tool for websites and mobile apps offering visitor recordings, heatmaps, conversion funnels and automatic event tracking. +[Smartlook](https://smartlook.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a product analytics tool for websites and mobile apps offering visitor recordings, heatmaps, conversion funnels and automatic event tracking. This destination is maintained by Smartlook. For any issues with the destination, [contact the Smartlook Support team](mailto:support@smartlook.com). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Smartlook" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "Project Key" into your Segment Settings UI which you can find from your [project settings](https://www.smartlook.com/app/dashboard/settings/projects) after clicking the **Tracking code** link. +3. Enter the "Project Key" into your Segment Settings UI which you can find from your [project settings](https://www.smartlook.com/app/dashboard/settings/projects){:target="_blank"} after clicking the **Tracking code** link. Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Smartlook's recording snippet onto your page. @@ -25,7 +24,7 @@ Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.j ## Identify If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. -Identify calls sent to Segment will be transformed and sent to [Smartlook's](https://smartlook.github.io/docs/web/identify-visitor/) `identify` method. An example call would look like: +Identify calls sent to Segment will be transformed and sent to [Smartlook's](https://smartlook.github.io/docs/web/identify-visitor/){:target="_blank"} `identify` method. An example call would look like: ``` analytics.identify('userId123', { @@ -37,7 +36,7 @@ analytics.identify('userId123', { ## Track If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. -Track calls sent to Segment will be transformed and sent to [Smartlook's](https://smartlook.github.io/docs/web/custom-events/) `track` method. +Track calls sent to Segment will be transformed and sent to [Smartlook's](https://smartlook.github.io/docs/web/custom-events/){:target="_blank"} `track` method. An example call would look like: ``` diff --git a/src/connections/destinations/catalog/snapboard/index.md b/src/connections/destinations/catalog/snapboard/index.md index d7c0f5a620..4a3d18a247 100644 --- a/src/connections/destinations/catalog/snapboard/index.md +++ b/src/connections/destinations/catalog/snapboard/index.md @@ -1,10 +1,9 @@ --- title: Snapboard Destination rewrite: true -beta: true id: 5e586181995f166e239fd271 --- -[Snapboard](https://snapboard.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) allows customers to build dashboards and internal tools without code. Snapboard pulls in your data from the apps you use (Segment, Stripe, etc) and displays them as a spreadsheet in Snapboard (which you can filter, sort, group, etc). +[Snapboard](https://snapboard.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} allows customers to build dashboards and internal tools without code. Snapboard pulls in your data from the apps you use (Segment, Stripe, etc) and displays them as a spreadsheet in Snapboard (which you can filter, sort, group, etc). You can then create any tool you want by hooking up the data to the cards/components (inputs, sliders, tables, charts, forms, todos, calendars, gallery, etc). @@ -12,18 +11,16 @@ You can then create any tool you want by hooking up the data to the cards/compon This destination is maintained by Snapboard. For any issues with the destination, [contact the Snapboard Support team](mailto:calum@snapboard.io). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Snapboard" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. Enter the "API Key" into your Segment Settings UI which you can find from your Snapboard dashboard. -You can obtain the API Key by [logging into Snapboard](https://snapboard.io/login), clicking on the circle icon in the top-left, and then clicking on the workspace name. Then click on the Settings menu item. +You can obtain the API Key by [logging into Snapboard](https://snapboard.io/login){:target="_blank"}, clicking on the circle icon in the top-left, and then clicking on the workspace name. Then click on the Settings menu item. ![settings menu](images/snapboard_settings_location.png) diff --git a/src/connections/destinations/catalog/snapchat-audiences/index.md b/src/connections/destinations/catalog/snapchat-audiences/index.md index 6de9f4d71d..4e06ae0f76 100644 --- a/src/connections/destinations/catalog/snapchat-audiences/index.md +++ b/src/connections/destinations/catalog/snapchat-audiences/index.md @@ -2,13 +2,13 @@ title: Snapchat Audience Destination id: 5f289f7639d45a397a1fb880 --- -The [Snapchat Ads](https://forbusiness.snapchat.com/advertising/targeting) product provides a way to target advertisements to a global audience and drive meaningful results. +The [Snapchat Ads](https://forbusiness.snapchat.com/advertising/targeting){:target="_blank"} product provides a way to target advertisements to a global audience and drive meaningful results. Segment's integration with Snapchat Ad's Snap Audience Match (SAM) enables Segment customers to sync audiences created in Engage with Snapchat Advertising For more information about advertising with Snapchat: -- [SAM Audiences](https://businesshelp.snapchat.com/s/article/create-sam-audience?language=en_US) -- [Snap Audience Match](https://developers.snapchat.com/api/docs/#create-an-audience-segment) (for developers) +- [SAM Audiences](https://businesshelp.snapchat.com/s/article/create-sam-audience?language=en_US){:target="_blank"} +- [Snap Audience Match](https://developers.snapchat.com/api/docs/#create-an-audience-segment){:target="_blank"} (for developers) ## Details @@ -41,7 +41,7 @@ The Snapchat Audiences destination syncs audience data from Engage to Snapchat A 4. Click the destination and confirm the identifier: `Email`, `Phone`, or `Mobile ID`. Click **Save**. - Segment sends hashed `email` or `idfa` values to Snapchat so that they can match those identifiers against Snapchat users. - - Segment also supports `phoneNumber` if it is present on the user's profile. Please make sure you pass phone numbers in a format that Snapchat supports. Read more in Snapchat's documentation regarding [Normalizing and Hashing](https://developers.snapchat.com/api/docs/#normalizing-hashing). + - Segment also supports `phoneNumber` if it is present on the user's profile. Please make sure you pass phone numbers in a format that Snapchat supports. Read more in Snapchat's documentation regarding [Normalizing and Hashing](https://developers.snapchat.com/api/docs/#normalizing-hashing){:target="_blank"}. **NOTE**: [Protocols](/docs/protocols) customers can use [Transformations](/docs/protocols/transform/) to change `phoneNumber` values to meet Snapchat's requirements. @@ -55,7 +55,7 @@ The initial synchronization of audience data may take several hours, depending o Verify the following: - You're collecting user phone numbers when users are added to the Engage Audience, and that you have configured the destination to send `Phone`. -- You're collecting phone numbers in a format that Snapchat supports. For more information, see Snapchat's documentation regarding [Normalizing and Hashing](https://developers.snapchat.com/api/docs/#normalizing-hashing). +- You're collecting phone numbers in a format that Snapchat supports. For more information, see Snapchat's documentation regarding [Normalizing and Hashing](https://developers.snapchat.com/api/docs/#normalizing-hashing){:target="_blank"}. ### Why can't I select our Ads Account during the destination setup? diff --git a/src/connections/destinations/catalog/snapengage/index.md b/src/connections/destinations/catalog/snapengage/index.md index 7edb797e1e..110b683979 100644 --- a/src/connections/destinations/catalog/snapengage/index.md +++ b/src/connections/destinations/catalog/snapengage/index.md @@ -3,11 +3,11 @@ rewrite: true title: SnapEngage Destination id: 54521fdb25e721e32a72eef6 --- -SnapEngage is an enterprise chat software for businesses. It allows you to capture more leads, drive conversions, reduce response times, and increase customer satisfaction. Our SnapEngage destination code is open source - you can check it out [here](https://github.com/segment-integrations/analytics.js-integration-snapengage). +SnapEngage is an enterprise chat software for businesses. It allows you to capture more leads, drive conversions, reduce response times, and increase customer satisfaction. Our SnapEngage destination code is open source - you can check it out [here](https://github.com/segment-integrations/analytics.js-integration-snapengage){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. diff --git a/src/connections/destinations/catalog/spideo/index.md b/src/connections/destinations/catalog/spideo/index.md index f30a14306b..88340b83e0 100644 --- a/src/connections/destinations/catalog/spideo/index.md +++ b/src/connections/destinations/catalog/spideo/index.md @@ -3,13 +3,13 @@ title: Spideo Destination id: 6279326f707f2f9bc4882b84 --- -[Spideo](https://spideo.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the leading company in video and cultural content recommendation. +[Spideo](https://spideo.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the leading company in video and cultural content recommendation. This destination is maintained by Spideo. For any issues with the destination, [contact the Spideo Support team](mailto:support@spideo.tv). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Spideo" in the Destinations Catalog, and select the "Spideo" destination. diff --git a/src/connections/destinations/catalog/split/index.md b/src/connections/destinations/catalog/split/index.md index d1fa2599b3..8eecdc6194 100644 --- a/src/connections/destinations/catalog/split/index.md +++ b/src/connections/destinations/catalog/split/index.md @@ -3,21 +3,21 @@ rewrite: true title: Split Destination id: 5c6e2b9d79daff00017ec990 --- -[Split](https://split.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) powers your product decisions with a unified solution for feature flagging and experimentation. With Split, you can safely roll out new functionality using sophisticated user targeting, measure impact of change on engineering, product, and business metrics, and rapidly iterate to refine functionality anywhere in the application stack. +[Split](https://split.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} powers your product decisions with a unified solution for feature flagging and experimentation. With Split, you can safely roll out new functionality using sophisticated user targeting, measure impact of change on engineering, product, and business metrics, and rapidly iterate to refine functionality anywhere in the application stack. -Split also maintains [integration specific documentation](https://help.split.io/hc/en-us/articles/360020742532-Segment) which include additional troubleshooting and frequently asked questions. +Split also maintains [integration specific documentation](https://help.split.io/hc/en-us/articles/360020742532-Segment){:target="_blank"} which include additional troubleshooting and frequently asked questions. -This destination is maintained by [Split](https://split.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners). For any issues with the destination, [contact the Split IO Support team](https://help.split.io/hc/en-us). +This destination is maintained by [Split](https://split.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. For any issues with the destination, [contact the Split IO Support team](https://help.split.io/hc/en-us){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for Split in the Catalog, select it, and choose which of your sources to connect the destination to. 3. Enter the "API Key" into your Segment Settings UI. -To find your key, log into Split and navigate to "Admin Settings" > "Integrations" > select your desired workspace > "Segment". There you can find the key for each configured integration. If you don't have an integration configured, be sure to configure your integration in the section "Configure as a destination in Segment" and click save to generate a key. For more information, learn more in Split's [integration documentation](https://help.split.io/hc/en-us/articles/360020742532-Segment). +To find your key, log into Split and navigate to "Admin Settings" > "Integrations" > select your desired workspace > "Segment". There you can find the key for each configured integration. If you don't have an integration configured, be sure to configure your integration in the section "Configure as a destination in Segment" and click save to generate a key. For more information, learn more in Split's [integration documentation](https://help.split.io/hc/en-us/articles/360020742532-Segment){:target="_blank"}. ## Page @@ -69,9 +69,9 @@ analytics.identify("userId1", { }); ``` -Identify calls will be sent to Split as an `identify` event. The `identify` event's userId (or anonymousId) will be mapped to the selected Split [traffic type](https://help.split.io/hc/en-us/articles/360019916311-Traffic-type). +Identify calls will be sent to Split as an `identify` event. The `identify` event's userId (or anonymousId) will be mapped to the selected Split [traffic type](https://help.split.io/hc/en-us/articles/360019916311-Traffic-type){:target="_blank"}. -Any traits you provide will be displayed in Split as traffic type attributes. Learn more about attributes in Split's [documentation](https://help.split.io/hc/en-us/articles/360020529772-Identifying-customers). +Any traits you provide will be displayed in Split as traffic type attributes. Learn more about attributes in Split's [documentation](https://help.split.io/hc/en-us/articles/360020529772-Identifying-customers){:target="_blank"}. If you would not like Split to receive `identify` calls, you can configure in your integration settings in Split. @@ -94,4 +94,4 @@ Each event may have a `value` field which you would like to use in Split metric If you would not like Split to receive `track` calls, you can configure in your integration settings in Split. -_**NOTE:** Split currently does not capture the properties of the your track events. The Split team is currently working to accept these properties for use in creating metrics in Split._ +_**NOTE:** Split currently does not capture the properties of your track events. The Split team is currently working to accept these properties for use in creating metrics in Split._ diff --git a/src/connections/destinations/catalog/sprig-cloud/index.md b/src/connections/destinations/catalog/sprig-cloud/index.md index b100f1a24d..5d714028a4 100644 --- a/src/connections/destinations/catalog/sprig-cloud/index.md +++ b/src/connections/destinations/catalog/sprig-cloud/index.md @@ -17,12 +17,12 @@ Segment placed the Classic destination framework in maintenance mode. Sprig enco ## Getting Started with Classic -{% include content/connection-modes.md %} + 1. In the Segment web app, navigate to **Catalog > Destinations**. 2. Type *Sprig* in the **Filter Destinations** field. 3. Click **Sprig**, then click **Configure Sprig**. 4. Select an existing JavaScript website source to connect to Sprig and click **Next**. 5. Enter a **Destination name**, select **Classic**, and click **Save**. -6. Type in the Environment ID and click Save Changes. You your Environment ID can be found in [Connect > JavaScript](https://app.sprig.com/connect){:target="_blank". For for information, click [here](https://docs.sprig.com/docs/products-and-environments#environments){:target="_blank"}. +6. Type in the Environment ID and click Save Changes. You your Environment ID can be found in [Connect > JavaScript](https://app.sprig.com/connect){:target="_blank"}. For for information, click [here](https://docs.sprig.com/docs/products-and-environments#environments){:target="_blank"}. 7. Select **Enable Destinations** and click **Save Changes**. diff --git a/src/connections/destinations/catalog/stackadapt/index.md b/src/connections/destinations/catalog/stackadapt/index.md index c7abbd2461..0160a9b2e9 100644 --- a/src/connections/destinations/catalog/stackadapt/index.md +++ b/src/connections/destinations/catalog/stackadapt/index.md @@ -12,10 +12,6 @@ hidden: true - - -{% include content/ajs-upgrade.md %} - [StackAdapt](https://www.stackadapt.com){:target="_blank"} is a self-serve programmatic advertising platform for by digital marketers. Ad buyers can plan, execute and manage data-driven digital advertising campaigns across all devices, inventory, and publisher partners. diff --git a/src/connections/destinations/catalog/startdeliver-v2/index.md b/src/connections/destinations/catalog/startdeliver-v2/index.md new file mode 100644 index 0000000000..c2d6421348 --- /dev/null +++ b/src/connections/destinations/catalog/startdeliver-v2/index.md @@ -0,0 +1,137 @@ +--- +title: Startdeliver-v2 Destination +id: 65ccc6147108efc0cf5c6fe1 +beta: true +--- +[Startdeliver](https://startdeliver.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} connects data from a variety of sources to provide a customer view optimized to Customer Success Managers. + +Startdeliver maintains this destination. For any issues with the destination, [contact their support team](mailto:support@startdeliver.com). + + +## Getting started + + + +1. From the Destinations catalog page in the Segment App, click **Add Destination**. +2. Search for **Startdeliver** in the Destinations Catalog, and select the **Startdeliver** destination. +3. Choose which source should send data to the Startdeliver destination. +4. Go to the [API keys](https://app.startdeliver.com/settings/apikeys){:target="_blank"} in your Startdeliver dashboard, generate an API key, make it active and grant it admin permissions. +5. Enter the API Key in the Startdeliver destination settings in Segment. +6. Create a User custom field you want to match a Segment event on [in your settings](https://app.startdeliver.com/settings/fields){:target="_blank"}. You will need a field's alias during the next step. +7. Enter the Startdeliver user custom field to match on in the Startdeliver destination settings in Segment. + +You have to [identify](/docs/connections/spec/identify/) your user with a proper `userId` so that Startdeliver can match your Segments events with correct Startdeliver users. + +Startdeliver attaches any matched events to existing users. If no matched users are found, Startdeliver creates a new user. Startdeliver uses a custom field you specified during the seventh step of the Getting Started section to match a user. + +For example, you have a user in Startdeliver and you want to attach your Segment events to that user. + +To do this, create a User custom field, like `externalId`. Now you should update your Startdeliver user with a proper value, for example, `97980cfea0067` (this is your user's ID). Don't forget to set this custom field in 7th step of the "Getting Started" section. + +When this user goes to your app, you should [identify](/docs/connections/spec/identify/) them: + +```js +analytics.identify('97980cfea0067') +``` + +After this, you can send either Page or Track events: + +```js +analytics.track('Login Button Clicked') +``` + +This event is matched with a Startdeliver user that has ID `97980cfea0067` set in a custom field `externalId`. + +Segment events will appear on Customer and User views in Startdeliver. The views will be created instantly within Startdeliver. + +For more information, view the [Startdeliver documentation](https://app.startdeliver.com/dev/app/Segment){:target="_blank"}. + + +## Page + +If you aren't familiar with the Segment Spec, take a look at the [Page method documentation](/docs/connections/spec/page/) to learn about what it does. An example call would look like: + +```js +analytics.page('Home') +``` + +Segment sends Page calls to Startdeliver as a `page` event. + +## Screen + +If you aren't familiar with the Segment Spec, take a look at the [Screen method documentation](/docs/connections/spec/screen/) to learn about what it does. An example call would look like: + +```js +analytics.screen('Home') +``` + +Segment sends Page calls to Startdeliver as a `page` event. + + +## Track + +If you aren't familiar with the Segment Spec, take a look at the [Track method documentation](/docs/connections/spec/track/) to learn about what it does. An example call would look like: + +```js +analytics.track('Login Button Clicked') +``` + +Segment sends Track calls to Startdeliver as a `track` event. + +## Identify & Group + +To enable parsing of Identify and Group events in Startdeliver, you have to enable it in the [Segment app configuration in your Startdeliver-account](https://app.startdeliver.com/settings/app/segment){:target="_blank"}. + +For Startdeliver to manage Identify and Group events, you must configure the Matching and Mapping variables in Startdeliver settings in order to choose which fields should map to a User or a Customer respectively when these events are received. If a User or a Customer is found based on these parameters it will be updated or otherwise created in Startdeliver. + +The configuration is cached for 10 minutes, so any changes made in the configuration will take up to 10 minutes to update. + +`startdeliverMatchingField` should contain an object with a Field alias that you want to match your User towards in Startdeliver, as well as a target format type. +`externalMatchingField` should be the field name from which the value will be matched towards the field above. + +This also applies to `startdeliverCustomerField` and `externalCustomerField` if you have any Customer data that you want to use to connect the user to a customer, as well as update or create a customer in Startdeliver. + +`userMapping` and `customerMapping` contains any field values that you want to append to your User or Customer respectively. This array of objects should contain a Target field-alias, source-field alias as well as a Target-type. + +```js +{ + startdeliverMatchingField: { + field: 'customfieldMatchingId', + type: 'text' + }, + externalMatchingField: { + field: 'userId' + }, + startdeliverCustomerField: { + field: 'customfieldCustomId', + type: 'number' + }, + externalCustomerField: { + field: 'traits.customerId' + }, + userMapping: [ + { + field: 'name', + externalField: 'traits.trait2', + type: 'text' + }, + { + field: 'customfieldNumber', + externalField: 'traits.trait1', + type: 'number' + }, + { + field: 'email', + externalField: 'email', + type: 'text' + } + ], + customerMapping: [ + { + field: 'name', + externalField: 'traits.customerName', + type: 'text' + } + ] +} +``` diff --git a/src/connections/destinations/catalog/startdeliver/index.md b/src/connections/destinations/catalog/startdeliver/index.md index cc732bde46..08d0858be8 100644 --- a/src/connections/destinations/catalog/startdeliver/index.md +++ b/src/connections/destinations/catalog/startdeliver/index.md @@ -3,22 +3,21 @@ rewrite: true title: Startdeliver Destination id: 5fa3ce52d18ccdfb384b13f7 --- -[Startdeliver](https://startdeliver.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) connects data from a variety of sources to provide a customer view optimized to Customer Success Managers. +[Startdeliver](https://startdeliver.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} connects data from a variety of sources to provide a customer view optimized to Customer Success Managers. Startdeliver maintains this destination. For any issues with the destination, [contact their support team](mailto:support@startdeliver.com). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Startdeliver" in the Destinations Catalog, and select the "Startdeliver" destination. 3. Choose which Source should send data to the "Startdeliver" destination. -4. Go to the [API keys](https://app.startdeliver.com/settings/apikeys) in your Startdeliver dashboard, generate an API key, make it active and grant it "Admin" permissions. +4. Go to the [API keys](https://app.startdeliver.com/settings/apikeys){:target="_blank"} in your Startdeliver dashboard, generate an API key, make it active and grant it "Admin" permissions. 5. Enter the "API Key" in the "Startdeliver" destination settings in Segment. -6. Create a User custom field you want to match a Segment event on [here](https://app.startdeliver.com/settings/fields). You will need a field's alias at the next step. +6. Create a User custom field you want to match a Segment event on [here](https://app.startdeliver.com/settings/fields){:target="_blank"}. You will need a field's alias at the next step. 7. Enter the "Startdeliver user custom field to match on" in the "Startdeliver" destination settings in Segment. @@ -46,7 +45,7 @@ This event is matched with a Startdeliver user that has ID `97980cfea0067` set i Segment events will appear on Customer and User views in Startdeliver. The views will be created instantly within Startdeliver. -For further information you can check [Startdeliver documentation](https://app.startdeliver.com/dev). +For further information you can check [Startdeliver documentation](https://app.startdeliver.com/dev){:target="_blank"}. ## Page diff --git a/src/connections/destinations/catalog/statsig/index.md b/src/connections/destinations/catalog/statsig/index.md index ce63f32e76..47231e2dc1 100644 --- a/src/connections/destinations/catalog/statsig/index.md +++ b/src/connections/destinations/catalog/statsig/index.md @@ -2,18 +2,18 @@ title: Statsig Destination id: 613ba8c0114797213a8eff94 --- -[Statsig](https://www.statsig.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps companies safely A/B test features in production before rolling them out, avoiding product debates and costly mistakes when shipping out new features. Statsig automates the grunt work so that A/B tests are always running automatically and you always know how your features are performing. +[Statsig](https://www.statsig.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} helps companies safely A/B test features in production before rolling them out, avoiding product debates and costly mistakes when shipping out new features. Statsig automates the grunt work so that A/B tests are always running automatically and you always know how your features are performing. This destination is maintained by Statsig. For any issues with the destination, [contact the Statsig Support team](mailto:support@statsig.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for “Statsig” in the Destinations Catalog, and select the “Statsig” destination. 3. Choose which Source(s) should send data to the “Statsig” destination. -4. Go to the [Statsig dashboard](https://console.statsig.com/api_keys), find and copy the Statsig "Server Secret Key”. +4. Go to the [Statsig dashboard](https://console.statsig.com/api_keys){:target="_blank"}, find and copy the Statsig "Server Secret Key”. 5. Enter the Statsig “Server Secret Key” in the “Statsig” destination settings in Segment. ## Supported methods diff --git a/src/connections/destinations/catalog/stonly/index.md b/src/connections/destinations/catalog/stonly/index.md index beae05624f..360a4db8e0 100644 --- a/src/connections/destinations/catalog/stonly/index.md +++ b/src/connections/destinations/catalog/stonly/index.md @@ -3,7 +3,7 @@ title: Stonly Destination rewrite: true id: 5f354f1a928763feb8caf724 --- -[Stonly](https://stonly.com) helps make customers more successful and employees more productive by letting you easily create interactive guides and put them inside and around your website or app – without having to code anything. +[Stonly](https://stonly.com){:target="_blank"} helps make customers more successful and employees more productive by letting you easily create interactive guides and put them inside and around your website or app – without having to code anything. This destination is maintained by Stonly. For any issues with the destination, [contact their support team](mailto:support@stonly.com). @@ -14,7 +14,7 @@ This destination is maintained by Stonly. For any issues with the destination, [ Before you start, make sure Stonly destination supports the source type and connection mode you've chosen to implement. You can learn more about [connection modes here](/docs/connections/destinations/#connection-modes). -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Stonly" within the Destinations Catalog, and select Stonly destination. diff --git a/src/connections/destinations/catalog/stories/index.md b/src/connections/destinations/catalog/stories/index.md index 530d9dc964..2809cdcd15 100644 --- a/src/connections/destinations/catalog/stories/index.md +++ b/src/connections/destinations/catalog/stories/index.md @@ -1,22 +1,20 @@ --- title: Stories Destination rewrite: true -beta: true id: 5e31eed10689db7d78002b54 --- -[Stories](https://www.getstories.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) gathers all the user events that matter on a timeline, so your teams can understand what is going on and take action in the right direction. +[Stories](https://www.getstories.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} gathers all the user events that matter on a timeline, so your teams can understand what is going on and take action in the right direction. This destination is maintained by Stories. For any issues with the destination, [contact the Stories Support team](mailto:support@getstories.io). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Stories" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Settings UI which you can retrieve from your [Stories Account](https://app.getstories.io/settings#/api). +3. Enter the "API Key" into your Settings UI which you can retrieve from your [Stories Account](https://app.getstories.io/settings#/api){:target="_blank"}. 4. You can choose whether to Sync Users or not with Stories. If you enable this setting, identified users will be automatically added and/or merged with your Stories users. Read more about [Merging Users](#merging-users) below. ## Identify diff --git a/src/connections/destinations/catalog/stormly/index.md b/src/connections/destinations/catalog/stormly/index.md index a14f62fa41..67a0a735a1 100644 --- a/src/connections/destinations/catalog/stormly/index.md +++ b/src/connections/destinations/catalog/stormly/index.md @@ -3,18 +3,18 @@ rewrite: true title: Stormly Destination id: 5f38f398c30a8412cb23b628 --- -With [Stormly](https://www.stormly.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners), you can access the insights which interest you the most. The Stormly interface guides you through several questions to help define personalization options, then provides insights into behavioral patterns, forecasts, and other information you want to know about your users. +With [Stormly](https://www.stormly.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}, you can access the insights which interest you the most. The Stormly interface guides you through several questions to help define personalization options, then provides insights into behavioral patterns, forecasts, and other information you want to know about your users. This destination is maintained by Stormly. For any issues with the destination, [contact their support team](mailto:support@stormly.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Stormly" in the Destinations Catalog, and select the Stormly destination. 3. Choose which Source should send data to the Stormly destination. -4. Go to the [Stormly projects](https://www.stormly.com/projects) page, click **Set-Up Data** and under "Use tracking code from:" choose **Segment.com**. Copy the API key that appears. +4. Go to the [Stormly projects](https://www.stormly.com/projects){:target="_blank"} page, click **Set-Up Data** and under "Use tracking code from:" choose **Segment.com**. Copy the API key that appears. 5. Enter the API Key you copied from the Stormly projects page in the Stormly destination settings in the Segment app. > info "" diff --git a/src/connections/destinations/catalog/strikedeck/index.md b/src/connections/destinations/catalog/strikedeck/index.md index 7b1a9fffa0..f70cc42c40 100644 --- a/src/connections/destinations/catalog/strikedeck/index.md +++ b/src/connections/destinations/catalog/strikedeck/index.md @@ -3,16 +3,14 @@ rewrite: true title: Strikedeck Destination id: 5c940e99e3498f000177880c --- -[Strikedeck](https://strikedeck.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a Customer Success platform which actively manages customer relationships to reduce churn, increase existing revenue and influence new sales. Strikedeck includes Customer Engagement Analytics, Health Scorecard, Notifications, Recommendations & Actions. +[Strikedeck](https://strikedeck.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a Customer Success platform which actively manages customer relationships to reduce churn, increase existing revenue and influence new sales. Strikedeck includes Customer Engagement Analytics, Health Scorecard, Notifications, Recommendations & Actions. Strikedeck maintains this documentation. For any issues with the destination, [contact the Strikedeck Support team](mailto:support@strikedeck.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Strikedeck" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/stripe-radar/index.md b/src/connections/destinations/catalog/stripe-radar/index.md index d7e7fa7674..23133ecf3b 100644 --- a/src/connections/destinations/catalog/stripe-radar/index.md +++ b/src/connections/destinations/catalog/stripe-radar/index.md @@ -4,6 +4,6 @@ title: Stripe Radar Destination ## Getting Started -In order to use Stripe Radar, all you have to do is enable it in your Segment destinations page and enter your **API Key**! Read more about Stripe Radar in their [official website](https://stripe.com/radar). +In order to use Stripe Radar, all you have to do is enable it in your Segment destinations page and enter your **API Key**! Read more about Stripe Radar in their [official website](https://stripe.com/radar){:target="_blank"}. After we initialize Stripe Radar, we will call `window.Stripe.setPublishableKey();`. diff --git a/src/connections/destinations/catalog/survicate/index.md b/src/connections/destinations/catalog/survicate/index.md index f176cfce1b..d13c948ac5 100644 --- a/src/connections/destinations/catalog/survicate/index.md +++ b/src/connections/destinations/catalog/survicate/index.md @@ -3,20 +3,19 @@ rewrite: true title: Survicate Destination id: 5c922eae1761cd0001a71707 --- -[Survicate](https://survicate.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a complete toolkit for customer feedback. From website optimization and customer satisfaction surveys to complex customer insight processes integrated with your email campaigns. +[Survicate](https://survicate.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a complete toolkit for customer feedback. From website optimization and customer satisfaction surveys to complex customer insight processes integrated with your email campaigns. This destination is maintained by Survicate. For any issues with the destination, [contact the Survicate Support team](mailto:help@survicate.com). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Survicate" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "Workspace Key" into your Segment Settings UI which you can find from your [Survicate Workspace Settings](https://panel.survicate.com/). +3. Enter the "Workspace Key" into your Segment Settings UI which you can find from your [Survicate Workspace Settings](https://panel.survicate.com/){:target="_blank"}. ## Identify diff --git a/src/connections/destinations/catalog/swrve/index.md b/src/connections/destinations/catalog/swrve/index.md index c9671cb043..f2fec22107 100644 --- a/src/connections/destinations/catalog/swrve/index.md +++ b/src/connections/destinations/catalog/swrve/index.md @@ -56,7 +56,7 @@ Swrve supports the `identify`, `track` and `screen` methods. ### Integrating Push & A/B Testing -Follow Swrve's push notification documentation [here](https://docs.swrve.com/developer-documentation/integration/android). +Follow Swrve's push notification documentation [here](https://docs.swrve.com/developer-documentation/integration/android){:target="_blank"}. ### Integrating In-app Messaging & Conversations @@ -106,7 +106,7 @@ No further action is required to integrate in-app messages or Conversations, whi ### Integrating Push & A/B Testing -Follow Swrve's push notification documentation [here](https://docs.swrve.com/developer-documentation/integration/ios). +Follow Swrve's push notification documentation [here](https://docs.swrve.com/developer-documentation/integration/ios){:target="_blank"}. ### Integrating In-app Messaging & Conversations diff --git a/src/connections/destinations/catalog/tag-injector/index.md b/src/connections/destinations/catalog/tag-injector/index.md index e7bd523cf4..b5085b13c4 100644 --- a/src/connections/destinations/catalog/tag-injector/index.md +++ b/src/connections/destinations/catalog/tag-injector/index.md @@ -11,7 +11,7 @@ _**NOTE:** Tag Injector is only available for select customers at this time._ ## Getting Started -{% include content/connection-modes.md %} + 1. Once you have access, with the link provided confirm the Source you'd like to connect to. 2. You have the following configuration options which will manipulate the page at runtime: diff --git a/src/connections/destinations/catalog/talkable/index.md b/src/connections/destinations/catalog/talkable/index.md index 6e6486ef6d..485ce19f95 100644 --- a/src/connections/destinations/catalog/talkable/index.md +++ b/src/connections/destinations/catalog/talkable/index.md @@ -3,8 +3,8 @@ title: 'Talkable Destination' redirect_from: '/connections/destinations/catalog/curebit/' id: 54521fd525e721e32a72eea6 --- -Our Talkable destination (formerly Curebit) code is open-source on GitHub if you want to [check it out](https://github.com/segment-integrations/analytics.js-integration-curebit). +Our Talkable destination (formerly Curebit) code is open-source on GitHub if you want to [check it out](https://github.com/segment-integrations/analytics.js-integration-curebit){:target="_blank"}. ## Getting Started -All you need to turn on our Talkable destination is your Talkable Site ID. If you're not sure where to look see [this Help Page](https://docs.talkable.com/index.html) from Talkable. +All you need to turn on our Talkable destination is your Talkable Site ID. If you're not sure where to look see [this Help Page](https://docs.talkable.com/index.html){:target="_blank"} from Talkable. diff --git a/src/connections/destinations/catalog/talon-one-actions/index.md b/src/connections/destinations/catalog/talon-one-actions/index.md index ad0260b632..2a48c055f1 100644 --- a/src/connections/destinations/catalog/talon-one-actions/index.md +++ b/src/connections/destinations/catalog/talon-one-actions/index.md @@ -46,6 +46,9 @@ Segment needs a Talon.One-generated API key to be able to send data to your Talo 1. Select an expiry date and click **Create API Key**. 1. Copy it for later use. +> info "Talon.One API Rate Limit" +> Talon.One limits integrations with Segment to 60 requests per second for any given client, regardless of the endpoint. To increase this limit, contact Talon.One. + ### Adding a Talon.One destination To start sending data to Talon.One from Segment, create a Talon.One diff --git a/src/connections/destinations/catalog/talonone/index.md b/src/connections/destinations/catalog/talonone/index.md index 32ab0fef1b..50fae53a79 100644 --- a/src/connections/destinations/catalog/talonone/index.md +++ b/src/connections/destinations/catalog/talonone/index.md @@ -1,26 +1,24 @@ --- rewrite: true title: Talon.One Destination -beta: true id: 5de7c705e7d93d5e24742a04 --- > warning "" > Segment and Talon.One recommend you use the [Talon.One (Action) Destination](/docs/connections/destinations/catalog/actions-talon-one/) instead. -Create flexible and targeted promotional & loyalty campaigns with [Talon.One](https://Talon.One/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners). +Create flexible and targeted promotional & loyalty campaigns with [Talon.One](https://Talon.One/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"}. Campaigns can be created and managed by non-technical users such as marketeers. There is no need to get your development team involved. Features include coupons, discounts, loyalty programs, referral tracking, geo-fencing, and bundling. This destination is maintained by Talon.One. For any issues with the destination, [contact the Talon.One Support team](mailto:support@talon.one). -{% include content/beta-note.md %} > warning "" > Data collection that affects promotions should be collected using a Segment **server-side** implementation. Client-side implementations exposes you to risks of fraud. (e.g. a user changing a custom trait relating to their profile using JS modification tools, which triggers them to receive a higher discount than they are entitled to) For more information [read this](/docs/guides/how-to-guides/collect-on-client-or-server/). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for `Talon.One` in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/tamber/index.md b/src/connections/destinations/catalog/tamber/index.md index c939231077..7b0a9f3fff 100644 --- a/src/connections/destinations/catalog/tamber/index.md +++ b/src/connections/destinations/catalog/tamber/index.md @@ -3,22 +3,21 @@ rewrite: true title: Tamber Destination id: 5c8ad1622b2a130001a7664a --- -[Tamber](https://tamber.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) enables you to build your own Google-scale recommendation features in minutes. Deploy cutting edge deep learning models, and run A/B tests to optimize results. +[Tamber](https://tamber.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} enables you to build your own Google-scale recommendation features in minutes. Deploy cutting edge deep learning models, and run A/B tests to optimize results. This destination is maintained by Tamber. For any issues with the destination, [contact the Tambler Support team](mailto:support@tamber.com). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} -1. From your [Tamber dashboard](https://dashboard.tamber.com), head to Sources > Segment and click enable. + +1. From your [Tamber dashboard](https://dashboard.tamber.com){:target="_blank"}, head to Sources > Segment and click enable. 2. Follow the instructions to configure your Destination and optionally defined a custom name for your `item` and click save. 3. You may now use either the one-click activation button to complete your set up or continue reading the below steps to manually add the Tamber Destination from within Segment using the "API Key" displayed. 4. From your Segment UI's Destinations page click on "Add Destination". 5. Search for "Tamber" in the Catalog, select it, and choose which of your sources to connect the destination to. -6. Drop the "API Key" into your Segment Settings UI. If you do not have the key from the steps above, you can find it in your [Tamber dashboard](https://dashboard.tamber.com) as the "Project Key" in your project's dashboard. +6. Drop the "API Key" into your Segment Settings UI. If you do not have the key from the steps above, you can find it in your [Tamber dashboard](https://dashboard.tamber.com){:target="_blank"} as the "Project Key" in your project's dashboard. ## Identify @@ -35,7 +34,7 @@ analytics.identify('userId123', { }); ``` -Identify calls will be sent to Tamber as a [`user-update`](https://tamber.com/docs/api/#user-update) call and increment the User count within the Tamber UI. You can also [retrieve](https://tamber.com/docs/api/#user-retrieve) and [list](https://tamber.com/docs/api/#user-list) users from Tamber. +Identify calls will be sent to Tamber as a [`user-update`](https://tamber.com/docs/api/#user-update){:target="_blank"} call and increment the User count within the Tamber UI. You can also [retrieve](https://tamber.com/docs/api/#user-retrieve){:target="_blank"} and [list](https://tamber.com/docs/api/#user-list){:target="_blank"} users from Tamber. ## Track @@ -60,6 +59,6 @@ analytics.track("Watched", { }); ``` -Track calls will be sent to Tamber as [`event-track`](https://tamber.com/docs/api/#event-track) calls and increment both Event and Item counts within the Tamber UI. You can also [retrieve](https://tamber.com/docs/api/#event-retrieve) events, and [retrieve](https://tamber.com/docs/api/#item-retrieve) or [list](https://tamber.com/docs/api/#item-list) items from Tamber. +Track calls will be sent to Tamber as [`event-track`](https://tamber.com/docs/api/#event-track){:target="_blank"} calls and increment both Event and Item counts within the Tamber UI. You can also [retrieve](https://tamber.com/docs/api/#event-retrieve) events, and [retrieve](https://tamber.com/docs/api/#item-retrieve){:target="_blank"} or [list](https://tamber.com/docs/api/#item-list){:target="_blank"} items from Tamber. -**NOTE:** [`item`](https://tamber.com/docs/api/#item) is a required property but can be renamed within the Tamber UI under Custom Field Definition for Item. Make sure that the name passed into your Track call matches what you have set in the Tamber UI. If you are using Segment's [E-Commerce](/docs/connections/spec/ecommerce/v2) or [Video](/docs/connections/spec/video) APIs, you can configure Tamber to automatically handle item loading – either during set up or at any time in the Tamber Dashboard Sources > Segment section – and ignore this information. +**NOTE:** [`item`](https://tamber.com/docs/api/#item){:target="_blank"} is a required property but can be renamed within the Tamber UI under Custom Field Definition for Item. Make sure that the name passed into your Track call matches what you have set in the Tamber UI. If you are using Segment's [E-Commerce](/docs/connections/spec/ecommerce/v2) or [Video](/docs/connections/spec/video) APIs, you can configure Tamber to automatically handle item loading – either during set up or at any time in the Tamber Dashboard Sources > Segment section – and ignore this information. diff --git a/src/connections/destinations/catalog/taplytics/index.md b/src/connections/destinations/catalog/taplytics/index.md index 2cc13b2771..77460691db 100644 --- a/src/connections/destinations/catalog/taplytics/index.md +++ b/src/connections/destinations/catalog/taplytics/index.md @@ -2,7 +2,7 @@ title: Taplytics Destination id: 54521fdb25e721e32a72eef5 --- -Our Taplytics destination code is open sourced on GitHub. Feel free to check it out: [iOS](https://github.com/segment-integrations/analytics-ios-integration-taplytics), [Android](https://github.com/segment-integrations/analytics-android-integration-taplytics). +Our Taplytics destination code is open sourced on GitHub. Feel free to check it out: [iOS](https://github.com/segment-integrations/analytics-ios-integration-taplytics){:target="_blank"}, [Android](https://github.com/segment-integrations/analytics-android-integration-taplytics){:target="_blank"}. ## Getting Started @@ -11,25 +11,21 @@ Once the Segment library is integrated with your app, add your API key and selec Follow the below steps for destination ### iOS -To get started with Taplytics on iOS, first integrate your app with the Taplytics [iOS](/docs/connections/sources/catalog/libraries/mobile/ios) library. To get the API key, [login](https://taplytics.com/) to your account, select the App on the top left then click into the Settings menu on the left side. If you want to set up Push Notifications click on the Push Notification tab in their UI and [follow the instructions](https://docs.taplytics.com/docs/guides-push-notifications). Finally, you want to ensure you have configured your app delegate to [enable push notifications](/docs/connections/sources/catalog/libraries/mobile/ios/#how-do-i-use-push-notifications). +To get started with Taplytics on iOS, first integrate your app with the Taplytics [iOS](/docs/connections/sources/catalog/libraries/mobile/ios) library. To get the API key, [login](https://taplytics.com/){:target="_blank"} to your account, select the App on the top left then click into the Settings menu on the left side. If you want to set up Push Notifications click on the Push Notification tab in their UI and [follow the instructions](https://docs.taplytics.com/docs/guides-push-notifications){:target="_blank"}. Finally, you want to ensure you have configured your app delegate to [enable push notifications](/docs/connections/sources/catalog/libraries/mobile/ios/#how-do-i-use-push-notifications). -If you want to set up deep linking, just follow [this section of their docs](https://support.taplytics.com/hc/en-us/articles/360004176632-Deep-Linking-Guide-)! +If you want to set up deep linking, just follow [this section of their docs](https://support.taplytics.com/hc/en-us/articles/360004176632-Deep-Linking-Guide-){:target="_blank"}! -For more information about setting up Taplytics on iOS, see their [docs](https://docs.taplytics.com/docs/ios-getting-started) +For more information about setting up Taplytics on iOS, see their [docs](https://docs.taplytics.com/docs/ios-getting-started){:target="_blank"} ### Android To get up and running with Taplytics on Android, there a couple of steps we will walk you through. You first want to ensure that you've integrated your mobile app with our [Android](/docs/connections/sources/catalog/libraries/mobile/android) library. -To enable its full functionality (like Push Notifications, Deep linking), there are a couple of extra steps that you have to take care of in your Android app. [This document explains how to set up Push Notifications](https://docs.taplytics.com/docs/guides-push-notifications) and [ths one explains how to set up deep linking](https://support.taplytics.com/hc/en-us/articles/360004176632-Deep-Linking-Guide-). - -### React Native set up - -{% include content/react-dest.md only="ios" %} +To enable its full functionality (like Push Notifications, Deep linking), there are a couple of extra steps that you have to take care of in your Android app. [This document explains how to set up Push Notifications](https://docs.taplytics.com/docs/guides-push-notifications) and [ths one explains how to set up deep linking](https://support.taplytics.com/hc/en-us/articles/360004176632-Deep-Linking-Guide-){:target="_blank"}. ## Identify -Use [Identify](/docs/connections/sources/catalog/libraries/mobile/ios/#identify) to track user specific attributes. It equivalent to tracking [user attributes](https://docs.taplytics.com/docs/guides-user-insights) on Taplytics. Taplytics supports traits supported by Segment as well as custom traits. If you set traits.id, we set that as the Unique ID for that user. +Use [Identify](/docs/connections/sources/catalog/libraries/mobile/ios/#identify) to track user specific attributes. It equivalent to tracking [user attributes](https://docs.taplytics.com/docs/guides-user-insights){:target="_blank"} on Taplytics. Taplytics supports traits supported by Segment as well as custom traits. If you set traits.id, we set that as the Unique ID for that user. ## Track Use [track](/docs/connections/sources/catalog/libraries/mobile/ios/#track) to track events and user behaviour in your app. diff --git a/src/connections/destinations/catalog/tapstream/index.md b/src/connections/destinations/catalog/tapstream/index.md index b272135956..201e5391f3 100644 --- a/src/connections/destinations/catalog/tapstream/index.md +++ b/src/connections/destinations/catalog/tapstream/index.md @@ -3,5 +3,4 @@ title: 'Tapstream Destination' hidden: true id: 54521fdb25e721e32a72eef7 --- - + diff --git a/src/connections/destinations/catalog/tiktok-offline-conversions/index.md b/src/connections/destinations/catalog/tiktok-offline-conversions/index.md new file mode 100644 index 0000000000..8949f7fa75 --- /dev/null +++ b/src/connections/destinations/catalog/tiktok-offline-conversions/index.md @@ -0,0 +1,7 @@ +--- +title: 'Tiktok Offline Conversions Destination' +hidden: true +id: 6447ca8bfaa773a2ba0777a0 +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/tiktok-pixel/index.md b/src/connections/destinations/catalog/tiktok-pixel/index.md new file mode 100644 index 0000000000..8dcf9ac554 --- /dev/null +++ b/src/connections/destinations/catalog/tiktok-pixel/index.md @@ -0,0 +1,7 @@ +--- +title: 'TikTok Pixel Destination' +hidden: true +id: 64c1690a9f08c84a420aba78 +published: false +beta: true +--- diff --git a/src/connections/destinations/catalog/totango/index.md b/src/connections/destinations/catalog/totango/index.md index fe4a957750..ed997bd59c 100644 --- a/src/connections/destinations/catalog/totango/index.md +++ b/src/connections/destinations/catalog/totango/index.md @@ -2,7 +2,7 @@ title: Totango Destination id: 54521fdb25e721e32a72eefa --- -Our Totango destination code is all open-source on GitHub if you want to check it out: [JavaScript](https://github.com/segment-integrations/analytics.js-integration-totango), [Server](https://github.com/segmentio/integration-totango). +Segment's Totango destination code is all open-source on GitHub: [JavaScript](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/totango){:target="_blank"}. ## Getting Started diff --git a/src/connections/destinations/catalog/track-js/index.md b/src/connections/destinations/catalog/track-js/index.md index 6968e01a2f..e83a33870e 100644 --- a/src/connections/destinations/catalog/track-js/index.md +++ b/src/connections/destinations/catalog/track-js/index.md @@ -3,21 +3,21 @@ rewrite: true title: trackJs Destination id: 54521fdb25e721e32a72eef9 --- -[Track JS](https://trackjs.com/) monitors your web applications for JavaScript errors, alerting you with amazing context about how the user, application, and network got into trouble. The `analytics.js` trackJs Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/trackjs). +[Track JS](https://trackjs.com/){:target="_blank"} monitors your web applications for JavaScript errors, alerting you with amazing context about how the user, application, and network got into trouble. The `analytics.js` trackJs Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/trackjs){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Track JS" in the Catalog, select it, and choose which of your sources to connect the destination to. - 3. Enter your Token as retrieved from your Track JS [set up page](https://my.trackjs.com/customer/login?returnUrl=%2fcustomer%2fsetup#install-locally). + 3. Enter your Token as retrieved from your Track JS [set up page](https://my.trackjs.com/customer/login?returnUrl=%2fcustomer%2fsetup#install-locally){:target="_blank"}. 4. Your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Track JS onto your page. This means you should remove Track JS' snippet from your page. 5. The Track JS Destination doesn't use any Segment API calls (e.g. identify, track, etc) so, once it's loaded, it will automatically start recording error data. ## Non-supported options -We do not currently support Track JS' ```onError``` and ```serialize``` options because they pose a [XSS vulnerability](http://en.wikipedia.org/wiki/Cross-site_scripting). +We do not currently support Track JS' ```onError``` and ```serialize``` options because they pose a [XSS vulnerability](http://en.wikipedia.org/wiki/Cross-site_scripting){:target="_blank"}. To work around this issue, however, you can directly set these options in the ```window._trackJs``` object on your page. These options will be merged with the settings you have configured in the interface once the Track JS script is loaded. diff --git a/src/connections/destinations/catalog/trackier/index.md b/src/connections/destinations/catalog/trackier/index.md index b004fdfcf0..d333825915 100644 --- a/src/connections/destinations/catalog/trackier/index.md +++ b/src/connections/destinations/catalog/trackier/index.md @@ -3,16 +3,15 @@ rewrite: true title: Trackier Destination id: 5cd62e29299eb40001acff12 --- -[Trackier](https://trackier.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is customisable performance marketing software used by ad networks, agencies and advertisers to manage publisher relations. +[Trackier](https://trackier.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is customisable performance marketing software used by ad networks, agencies and advertisers to manage publisher relations. This destination is maintained by Trackier. For any issues with the destination, [contact the Trackier Support team](mailto:support@trackier.com). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Trackier" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/tractionboard/index.md b/src/connections/destinations/catalog/tractionboard/index.md index 3b54a86bfa..4638b2ea7c 100644 --- a/src/connections/destinations/catalog/tractionboard/index.md +++ b/src/connections/destinations/catalog/tractionboard/index.md @@ -23,8 +23,8 @@ When you identify a user, we'll pass that user's information to Tractionboard wi When you track an event, we will send that event to Tractionboard as a custom event. There are certain events that trigger special actions in Tractionboard: - - `Payment Made`: This is an standard event in Segment ([Payment Made](https://help.segment.com/hc/en-us/articles/204812979-Tracking-payment-events-and-revenue#made-payment)), and it's translated to the Tractionboard payment event, that is used to get the earnings of certain user. - - `Refund Received`: This is an standard event in Segment ([Refund Received](https://help.segment.com/hc/en-us/articles/204812979-Tracking-payment-events-and-revenue#received-refund)), and it's translated to the Tractionboard refund event, that is used to subtract this amount to the revenue. + - `Payment Made`: This is an standard event in Segment ([Payment Made](https://help.segment.com/hc/en-us/articles/204812979-Tracking-payment-events-and-revenue#made-payment){:target="_blank"}), and it's translated to the Tractionboard payment event, that is used to get the earnings of certain user. + - `Refund Received`: This is an standard event in Segment ([Refund Received](https://help.segment.com/hc/en-us/articles/204812979-Tracking-payment-events-and-revenue#received-refund){:target="_blank"}), and it's translated to the Tractionboard refund event, that is used to subtract this amount to the revenue. - `cancel`: This event with the userId will update the user status to canceled, and it will count in the churn rate metric. - `signup`: We expect the signup event with the userId. Signup events are used to compose the UAC metric. diff --git a/src/connections/destinations/catalog/trafficguard/index.md b/src/connections/destinations/catalog/trafficguard/index.md index 3455fea11b..70ce548af5 100644 --- a/src/connections/destinations/catalog/trafficguard/index.md +++ b/src/connections/destinations/catalog/trafficguard/index.md @@ -3,16 +3,15 @@ rewrite: true title: TrafficGuard Destination id: 5c6f5f0b037dcf00014f8fb0 --- -[TrafficGuard](https://trafficguard.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) detects, mitigates, and reports on ad fraud before it hits digital advertising budgets. Three formidable layers of protection block both general invalid traffic (GIVT) and sophisticated invalid traffic (SIVT) to ensure that digital advertising results in legitimate advertising engagement. +[TrafficGuard](https://trafficguard.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} detects, mitigates, and reports on ad fraud before it hits digital advertising budgets. Three formidable layers of protection block both general invalid traffic (GIVT) and sophisticated invalid traffic (SIVT) to ensure that digital advertising results in legitimate advertising engagement. This destination is maintained by TrafficGuard. -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "TrafficGuard" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/trustpilot/index.md b/src/connections/destinations/catalog/trustpilot/index.md index 4be875a6a2..e714791ed4 100644 --- a/src/connections/destinations/catalog/trustpilot/index.md +++ b/src/connections/destinations/catalog/trustpilot/index.md @@ -3,17 +3,17 @@ rewrite: true title: Trustpilot Destination id: 5c6e52858392d6000101d4c1 --- -[Trustpilot](https://www.trustpilot.com/) is an open and independent review platform. On Trustpilot, people can share and discover reviews of businesses, and businesses can gain insights and showcase their service and products performance through reviews. +[Trustpilot](https://www.trustpilot.com/){:target="_blank"} is an open and independent review platform. On Trustpilot, people can share and discover reviews of businesses, and businesses can gain insights and showcase their service and products performance through reviews. -This destination is maintained by Trustpilot. For any issues with the destination, [contact the Trustpilot Support team](https://support.trustpilot.com/hc/en-us/articles/215949867-Contact-Trustpilot-s-Support-Team). +This destination is maintained by Trustpilot. For any issues with the destination, [contact the Trustpilot Support team](https://support.trustpilot.com/hc/en-us/articles/215949867-Contact-Trustpilot-s-Support-Team){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Trustpilot" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "Integration Key" into your Segment Settings UI as "API Key" which you can find on [Trustpilot integrations page](https://businessapp.b2b.trustpilot.com/#/ecommerce/segment). +3. Enter the "Integration Key" into your Segment Settings UI as "API Key" which you can find on [Trustpilot integrations page](https://businessapp.b2b.trustpilot.com/#/ecommerce/segment){:target="_blank"}. ## Track diff --git a/src/connections/destinations/catalog/tune/index.md b/src/connections/destinations/catalog/tune/index.md index 559683b883..f75203ff80 100644 --- a/src/connections/destinations/catalog/tune/index.md +++ b/src/connections/destinations/catalog/tune/index.md @@ -3,13 +3,13 @@ rewrite: true title: TUNE Destination id: 54521fd925e721e32a72eed7 --- -[TUNE](https://www.tune.com/) helps attribute mobile app events to the advertisements that a customer interacted with. We take care of sending those mobile events to TUNE so that they can be reconciled with ad views. The attributed data can then be [routed](#postbacks) back into other tools that you have enabled in Segment. +[TUNE](https://www.tune.com/){:target="_blank"} helps attribute mobile app events to the advertisements that a customer interacted with. We take care of sending those mobile events to TUNE so that they can be reconciled with ad views. The attributed data can then be [routed](#postbacks) back into other tools that you have enabled in Segment. -This destination is maintained by TUNE. Their code is publicly available for [iOS](https://github.com/TuneOSS/segment-integration-ios) and [Android](https://github.com/TuneOSS/segment-integration-android). For any issues with the destination, [contact the TUNE Support team](https://help.tune.com/contact-support/). +This destination is maintained by TUNE. Their code is publicly available for [iOS](https://github.com/TuneOSS/segment-integration-ios){:target="_blank"} and [Android](https://github.com/TuneOSS/segment-integration-android){:target="_blank"}. For any issues with the destination, [contact the TUNE Support team](https://support.tune.com/hc/en-us/requests/new){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From your Segment UI's Destinations page click on "Add Destination". 2. Search for "TUNE" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/tv-squared/index.md b/src/connections/destinations/catalog/tv-squared/index.md index 9a35673e81..252d085e37 100644 --- a/src/connections/destinations/catalog/tv-squared/index.md +++ b/src/connections/destinations/catalog/tv-squared/index.md @@ -7,7 +7,7 @@ id: 54521fdb25e721e32a72eefc ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. diff --git a/src/connections/destinations/catalog/unwaffle/index.md b/src/connections/destinations/catalog/unwaffle/index.md index 2c256b87b8..6c11ca7936 100644 --- a/src/connections/destinations/catalog/unwaffle/index.md +++ b/src/connections/destinations/catalog/unwaffle/index.md @@ -3,20 +3,19 @@ rewrite: true title: Unwaffle Destination id: 5c707b074876c300018c37ab --- -[Unwaffle](https://unwaffle.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps SaaS businesses improve their Free Trial conversion rates. By tracking every action that your trialers take, Unwaffle can discover patterns that lead to successful conversions and provide actionable recommendations to boost trial funnel performance. +[Unwaffle](https://unwaffle.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps SaaS businesses improve their Free Trial conversion rates. By tracking every action that your trialers take, Unwaffle can discover patterns that lead to successful conversions and provide actionable recommendations to boost trial funnel performance. This destination is maintained by Unwaffle. For any issues with the destination, [contact the Unwaffle Support team](mailto:info@unwaffle.com). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Unwaffle" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the Segment Settings UI "API Key" field, paste the "Public Key" for your Unwaffle Project, which you can find from your [Unwaffle KeyPair list](https://unwaffle.com/Setup/KeyPairManage.aspx). -4. Familiarize yourself with the [Basic Concepts](https://unwaffle.com/api/docs/#basic-concepts) section of the Unwaffle API Documentation, including the list of [Stock Labels](https://unwaffle.com/api/docs/#stock-labels) that must be implemented for the service to function. +3. In the Segment Settings UI "API Key" field, paste the "Public Key" for your Unwaffle Project, which you can find from your [Unwaffle KeyPair list](https://unwaffle.com/Setup/KeyPairManage.aspx){:target="_blank"}. +4. Familiarize yourself with the [Basic Concepts](https://unwaffle.com/api/docs/#basic-concepts){:target="_blank"} section of the Unwaffle API Documentation, including the list of [Stock Labels](https://unwaffle.com/api/docs/#stock-labels){:target="_blank"} that must be implemented for the service to function. ## Identify @@ -30,7 +29,7 @@ analytics.identify('12345', { }); ``` -Identify calls will be sent to Unwaffle as an [`AddParticipant`](https://unwaffle.com/api/docs/#addparticipant) event and must include a `userId`. Unwaffle does not support anonymous activity and such activity will be dropped from sending. +Identify calls will be sent to Unwaffle as an [`AddParticipant`](https://unwaffle.com/api/docs/#addparticipant){:target="_blank"} event and must include a `userId`. Unwaffle does not support anonymous activity and such activity will be dropped from sending. ## Track @@ -41,6 +40,6 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.track('TrialStart') ``` -Track calls will be sent to Unwaffle as an [`AddAction`](https://unwaffle.com/api/docs/#addaction) event. +Track calls will be sent to Unwaffle as an [`AddAction`](https://unwaffle.com/api/docs/#addaction){:target="_blank"} event. **IMPORTANT:** Unwaffle does not support anonymous activity. Ensure that you have [identified](/docs/connections/destinations/catalog/unwaffle/#identify) the user before calling Track. diff --git a/src/connections/destinations/catalog/upcall/index.md b/src/connections/destinations/catalog/upcall/index.md index dbeb14da16..107a382ab4 100644 --- a/src/connections/destinations/catalog/upcall/index.md +++ b/src/connections/destinations/catalog/upcall/index.md @@ -3,27 +3,26 @@ rewrite: true title: Upcall Destination id: 5c6ce090721aa60001ad878f --- -[Upcall](https://www.upcall.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) creates real phone conversations seconds after a lead comes in and automatically follows up at the right time and with the right message, 24/7/365. +[Upcall](https://www.upcall.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} creates real phone conversations seconds after a lead comes in and automatically follows up at the right time and with the right message, 24/7/365. This destination is maintained by Upcall. For any issues with the destination, [contact the Upcall Support team](mailto:success@upcall.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Upcall" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [Upcall dashboard](https://app2.upcall.com/company/settings/integrations/api). +3. Enter the "API Key" into your Segment Settings UI which you can find from your [Upcall dashboard](https://app2.upcall.com/company/settings/integrations/api){:target="_blank"}. ## Identify If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call in [Node](/docs/connections/sources/catalog/libraries/server/node/) would look like: -``` -analytics.identify({ + +```js +analytics.identify( userId: 'userId12345', traits: { firstName: 'Bob', diff --git a/src/connections/destinations/catalog/upollo-web-actions/index.md b/src/connections/destinations/catalog/upollo-web-actions/index.md deleted file mode 100644 index 6a86e49d6b..0000000000 --- a/src/connections/destinations/catalog/upollo-web-actions/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: 'Upollo Web (Actions) Destination' -hidden: true -id: 640267d74c13708d74062dcd -published: false -beta: true ---- diff --git a/src/connections/destinations/catalog/upollo/index.md b/src/connections/destinations/catalog/upollo/index.md new file mode 100644 index 0000000000..51c136a9ad --- /dev/null +++ b/src/connections/destinations/catalog/upollo/index.md @@ -0,0 +1,36 @@ +--- +title: Upollo Destination +id: 62fc4ed94dd68d0d189dc9b2 +beta: true +--- + +[Upollo](https://upollo.ai?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} gives unique and actionable insights that lead to conversion, retention, and expansion. + +This destination is maintained by Upollo. For any issues with the destination, [contact Upollo's Support team](mailto:support@upollo.ai). + +> info "" +> The Upollo Destination is currently in beta, which means that Upollo is still actively developing the destination. If you are interested in joining the beta program or have any feedback to help improve the Upollo Destination and its documentation, [let the Upollo team know](mailto:support@upollo.ai). + + +## Getting started + +1. From the [Upollo Connections screen](https://app.upollo.ai/settings/connections){:target="_blank"}, in the Segment connection, click **Configure**. +2. Upollo redirects you to Segment. If you're not already logged in to Segment, log in now. +3. Select the workspace and source from which you want to send data to Upollo. +4. Click **Authorize**. + +## Supported methods + +### Identify + +Send [Identify](/docs/connections/spec/identify) calls to Upollo. For example: + +```js +analytics.identify("userId123", { + email: "john.doe@example.com", + name: "John Doe", + phone: "+123456789", +}); +``` + +Segment sends Identify calls to Upollo as an `identify` event. Upollo's unique insights are shown in the Upollo dashboard with enriched data. diff --git a/src/connections/destinations/catalog/urban-airship/index.md b/src/connections/destinations/catalog/urban-airship/index.md index 13ff130774..1675f55ba2 100644 --- a/src/connections/destinations/catalog/urban-airship/index.md +++ b/src/connections/destinations/catalog/urban-airship/index.md @@ -2,7 +2,7 @@ hidden: true title: UrbanAirship Destination --- -The Urban Airship destination code is open sourced on GitHub. Feel free to check it out: [Android](https://github.com/urbanairship/android-segment-integration), [iOS](https://github.com/urbanairship/ios-segment-integration) +The Urban Airship destination code is open sourced on GitHub. Feel free to check it out: [Android](https://github.com/urbanairship/android-segment-integration){:target="_blank"}, [iOS](https://github.com/urbanairship/ios-segment-integration){:target="_blank"} ## Screen @@ -11,7 +11,7 @@ Screen calls will generate Urban Airship screen tracking events. These events ar ## Identify -When you `identify` a user, Urban Airship will use the `userId` to set the [Named User](http://docs.urbanairship.com/api/ua.html#named-users). Named Users allow you to associate multiple devices to a single user or profile that may be associated with more than one device, e.g., an end-user's Android phone and tablet. A device can have only one Named User, and a single Named User should not be associated with more than 20 devices. +When you `identify` a user, Urban Airship will use the `userId` to set the [Named User](http://docs.urbanairship.com/api/ua.html#named-users){:target="_blank"}. Named Users allow you to associate multiple devices to a single user or profile that may be associated with more than one device, e.g., an end-user's Android phone and tablet. A device can have only one Named User, and a single Named User should not be associated with more than 20 devices. ## Track diff --git a/src/connections/destinations/catalog/user-com/index.md b/src/connections/destinations/catalog/user-com/index.md index 563d9ca8c4..a6b9ed77eb 100644 --- a/src/connections/destinations/catalog/user-com/index.md +++ b/src/connections/destinations/catalog/user-com/index.md @@ -8,7 +8,7 @@ This integration is maintained by contact@userengage.com. ## Getting Started -To enable sending data to User.com you need to provide API key. You can generate and revoke keys for your app by going to **App settings > Advanced > Segment API keys** at [app.user.com](https://user.com/en/). +To enable sending data to User.com you need to provide API key. You can generate and revoke keys for your app by going to **App settings > Advanced > Segment API keys** at [app.user.com](https://user.com/en/){:target="_blank"}. Note that **all available** methods will try to select user base on `userId`, falling back to `anonymousId` if `userId` is not provided. If user with given identifier does not exist in your app it will be **created automatically**. That means you do not have to worry about request that return `404` for unknown user. @@ -40,24 +40,24 @@ Such request results in: * `custom_integer` attribute will be set to `123` in user's profile because `custom_integer` is already defined in User.com with type `number` * `custom_integer_new` attribute will be created and set to `'999'` in user profile, because it did not exists before we use default `string` type for attribute -To define custom attributes for application, visit **App settings > User data & events > Client attributes** at [app.user.com](https://user.com/en/). +To define custom attributes for application, visit **App settings > User data & events > Client attributes** at [app.user.com](https://user.com/en/){:target="_blank"}. ## Page Sending a `.page()` request increments `page_views` counter and updates `last_seen` timestamp if it is newer than the existing timestamp on a user's profile. It also records a new 'Page view' that can be used for filtering and aggregation. ## Track -Sending a `.track()` request records a new 'Event occurrence' that can be used to filter and bucket users. **NOTE**: if an event with a given name is not defined in User.com, it will be created automatically, as will its properties. This mechanism works exactly the same as custom traits that have been explained in `Identify` section. To make sure type of data recorded in database reflects your expectations, visit **App settings > User data & events > Events** or **App settings > User data & events > Event attributes** at [app.user.com](https://user.com/en/). +Sending a `.track()` request records a new 'Event occurrence' that can be used to filter and bucket users. **NOTE**: if an event with a given name is not defined in User.com, it will be created automatically, as will its properties. This mechanism works exactly the same as custom traits that have been explained in `Identify` section. To make sure type of data recorded in database reflects your expectations, visit **App settings > User data & events > Events** or **App settings > User data & events > Event attributes** at [app.user.com](https://user.com/en/){:target="_blank"}. ## Group Sending a `.group()` request allows to create or update a company profile and associate a user with it. We will use the `groupId`. If a company is not found, we will automatically create new company instance and set its `groupId` to that that identifier. The user that owns the `userId` on this event will be associated with this company. -Any custom traits of the `.group()` call will follow same logic as `Identify` method. Semantic traits that are mapped are: `address`, `description`, `email`, `employees`, `name`, `phone`. **NOTE**: to make sure types of custom traits defined in database reflect your expectations, visit **App settings > Companies > Company attributes** at [app.user.com](https://user.com/en/). +Any custom traits of the `.group()` call will follow same logic as `Identify` method. Semantic traits that are mapped are: `address`, `description`, `email`, `employees`, `name`, `phone`. **NOTE**: to make sure types of custom traits defined in database reflect your expectations, visit **App settings > Companies > Company attributes** at [app.user.com](https://user.com/en{:target="_blank"} ## Troubleshooting ### `403 Forbidden` HTTP code -Verify that API key your using in Segment is not revoked by going to **App settings > Advanced > Segment API keys** at [app.user.com](https://user.com/en/). +Verify that API key your using in Segment is not revoked by going to **App settings > Advanced > Segment API keys** at [app.user.com](https://user.com/en/){:target="_blank"}. -If problem still persist verify that domain the request from is trusted. You can edit domains you trust by going to **App settings > Advanced > Domains** at [app.user.com](https://user.com/en/). +If problems still persist verify that domain the request from is trusted. You can edit domains you trust by going to **App settings > Advanced > Domains** at [app.user.com](https://user.com/en/){:target="_blank"}. diff --git a/src/connections/destinations/catalog/user_guiding/index.md b/src/connections/destinations/catalog/user_guiding/index.md new file mode 100644 index 0000000000..d8b22d510c --- /dev/null +++ b/src/connections/destinations/catalog/user_guiding/index.md @@ -0,0 +1,49 @@ +--- +title: UserGuiding Destination +id: 6549f3d6f2f494b41bf941f8 +beta: true +--- + +[UserGuiding](https://userguiding.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a product adoption platform that helps product teams automate in-app experiences that turn new users into champions. + + +This destination is maintained by UserGuiding. For any issues with the source, [contact the UserGuiding Support team](mailto:assist@userguiding.com). + + +## Getting Started + + + +1. From your workspace's [Destination catalog page](https://app.segment.com/goto-my-workspace/destinations/catalog){:target="_blank”} search for UserGuiding. +2. Select UserGuiding, and click **Add Destination**. +3. Choose the source you want to connect UserGuiding destination to. +4. Give the destination a name. +5. Enter the API key provided in the [UserGuiding integrations page](https://panel.userguiding.com/settings/integrations/segment){:target="_blank”}. +6. Select the data residency region for your UserGuiding account. + + +## Identify + +If you're not familiar with the Segment Spec, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: + +```js +analytics.identify('user_id_123', { + email: 'john.doe@example.com', + firstname: 'john', + lastname: 'doe' +}); +``` + +Using the [Identify method](/docs/connections/spec/identify/) triggers a call to UserGuiding's [Identify](https://panel.userguiding.com/settings/installation){:target="_blank”} method. For more information about user identification in UserGuiding, see UserGuiding's [Sending user attributes and tracking user actions](https://help.userguiding.com/en/articles/5562847-sending-user-attributes-and-tracking-user-actions){:target="_blank”} documentation. + + +## Track + +If you're not familiar with the Segment Spec, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: + +```js +analytics.track('Visited Products Page') +``` + +Using the [Track method](/docs/connections/spec/track/) triggers a call to UserGuiding's `userGuiding.track` method. For more information about tracking user action in UserGuiding, see UserGuiding's [Sending user attributes and tracking user actions](https://help.userguiding.com/en/articles/5562847-sending-user-attributes-and-tracking-user-actions){:target="_blank”} documentation. + diff --git a/src/connections/destinations/catalog/useriq/index.md b/src/connections/destinations/catalog/useriq/index.md index c614bdb587..7db6127333 100644 --- a/src/connections/destinations/catalog/useriq/index.md +++ b/src/connections/destinations/catalog/useriq/index.md @@ -3,19 +3,18 @@ rewrite: true title: UserIQ Destination id: 5c742629088b680001eb30bb --- -[UserIQ](http://useriq.com) empowers companies to deliver what each user needs to be successful in every moment, starting with adoption. Our platform collects user engagement data from your product and allows you to communicate to your users when they are most engaged: within the product itself. +[UserIQ](http://useriq.com){:target="_blank"} empowers companies to deliver what each user needs to be successful in every moment, starting with adoption. Our platform collects user engagement data from your product and allows you to communicate to your users when they are most engaged: within the product itself. This destination is maintained by UserIQ. For any issues with the destination, [contact the UserIQ Support team](mailto:support@useriq.com). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "UserIQ" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your [UserIQ dashboard](https://app.useriq.com/) [Site Settings -> API Key]. +3. Enter the "API Key" into your Segment Settings UI which you can find from your [UserIQ dashboard](https://app.useriq.com/){:target="_blank"} [Site Settings -> API Key]. ## Page diff --git a/src/connections/destinations/catalog/userleap/index.md b/src/connections/destinations/catalog/userleap/index.md index cab9c06445..98b1b60e19 100644 --- a/src/connections/destinations/catalog/userleap/index.md +++ b/src/connections/destinations/catalog/userleap/index.md @@ -4,18 +4,18 @@ rewrite: true hidden: true --- -[Sprig (formerly UserLeap)](https://sprig.com/?&utm_source=segment_2021-10-20&utm_medium=int&utm_campaign=integration) is an in-context user research platform that makes it fast and effortless for product teams to learn from their actual customers in real time, through microsurveys, concept tests, and video questions. +[Sprig (formerly UserLeap)](https://sprig.com/?&utm_source=segment_2021-10-20&utm_medium=int&utm_campaign=integration){:target="_blank"} is an in-context user research platform that makes it fast and effortless for product teams to learn from their actual customers in real time, through microsurveys, concept tests, and video questions. -Sprig maintains this destination. For any issues with the destination, consult [Sprig's documentation](https://docs.sprig.com/docs/segment) or contact [support@sprig.com](mailto:support@sprig.com). +Sprig maintains this destination. For any issues with the destination, consult [Sprig's documentation](https://docs.sprig.com/docs/segment){:target="_blank"} or contact [support@sprig.com](mailto:support@sprig.com). > success "" > **Good to know**: This page is about the [non-Actions Sprig (formerly UserLeap) destination](/docs/connections/destinations/catalog/userleap/). There's also a page about the [Actions-framework](/docs/connections/destinations/actions/) Sprig Segment destination. Both of these destinations receive data from Segment. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Sprig Cloud" in the Destinations Catalog, and select the Sprig Cloud destination. 3. Choose which Source should send data to the Sprig Cloud destination. -4. Go to the [Sprig Connect page](https://app.sprig.com/connect), and find and copy the Segment **API key**. Use the Development key for a testing environment, and the Production key for your live environment. +4. Go to the [Sprig Connect page](https://app.sprig.com/connect){:target="_blank"}, and find and copy the Segment **API key**. Use the Development key for a testing environment, and the Production key for your live environment. 5. Enter the API Key that you copied in the Sprig Cloud destination settings in Segment. diff --git a/src/connections/destinations/catalog/userlike/index.md b/src/connections/destinations/catalog/userlike/index.md index f0210a0226..c493d33326 100644 --- a/src/connections/destinations/catalog/userlike/index.md +++ b/src/connections/destinations/catalog/userlike/index.md @@ -1,13 +1,15 @@ --- rewrite: true title: Userlike Destination +hidden: true +private: true --- -[Userlike](https://www.userlike.com/en/) is B2C live chat software optimized for website and messenger support - it enables real-time analysis, so you can see web visitors and actions taken. Our Userlike destination code is open source and is viewable [here](https://github.com/segment-integrations/analytics.js-integration-userlike). +[Userlike](https://www.userlike.com/en/){:target="_blank"} is B2C live chat software optimized for website and messenger support - it enables real-time analysis, so you can see web visitors and actions taken. Our Userlike destination code is open source and is viewable [here](https://github.com/segment-integrations/analytics.js-integration-userlike){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Userlike" in the Catalog, select it, and choose which of your sources to connect the destination to. - keep in mind, that the Userlike destination is only compatible with our JavaScript source. diff --git a/src/connections/destinations/catalog/userlist/index.md b/src/connections/destinations/catalog/userlist/index.md index be64f11d41..f17f68607c 100644 --- a/src/connections/destinations/catalog/userlist/index.md +++ b/src/connections/destinations/catalog/userlist/index.md @@ -3,19 +3,18 @@ rewrite: true title: Userlist Destination id: 5c75396a02254a0001da2a55 --- -[Userlist](https://userlist.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) allows you to send behavior-based messages to your SaaS users. It's great for onboarding users as well as nurturing them throughout their journey. +[Userlist](https://userlist.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} allows you to send behavior-based messages to your SaaS users. It's great for onboarding users as well as nurturing them throughout their journey. This destination is maintained by Userlist. For any issues with the destination, [contact the Userlist Support team](mailto:support@userlist.com). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Userlist" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the Userlist Segment destination settings, enter your Userlist "Push API Key". You can find this key in your [Userlist Push API settings](https://app.userlist.com/settings/push). +3. In the Userlist Segment destination settings, enter your Userlist "Push API Key". You can find this key in your [Userlist Push API settings](https://app.userlist.com/settings/push){:target="_blank"}. > info"" > **NOTE:** The Userlist Destination does not support tracking anonymous users, and returns a 400 error if you send `track` or `group` call for unidentified users. To prevent this, make sure you make an Identify call before you make Track or Group calls. You can also disregard this error if you sent calls you do not intend Userlist to process. diff --git a/src/connections/destinations/catalog/usermaven/index.md b/src/connections/destinations/catalog/usermaven/index.md new file mode 100644 index 0000000000..5765b271bf --- /dev/null +++ b/src/connections/destinations/catalog/usermaven/index.md @@ -0,0 +1,47 @@ +--- +# The end name should be similar to `Slack Destination` +title: Usermaven Destination +hide-boilerplate: true +hide-dossier: true +id: 643fdf094cfdbcf1bcccbc42 +private: true +--- + + + +{% include content/plan-grid.md name="actions" %} + + + +[Usermaven](https://www.usermaven.com){:target="_blank"} is an all-in-one analytics solution for online businesses looking to unlock growth and make data-driven decisions - without spending hours on setup. + + +## Benefits of Usermaven (Actions) + +Usermaven (Actions) provides the following benefits: + +- **Clear mapping of data.** Actions-based destinations enable you to define the mapping between the data Segment received from your source and the data Segment sends to Usermaven. +- **Pre-built mapping.** Mappings for Usermaven are prebuilt with the prescribed parameters and available for customization. +- **No 3rd party tool is involved.** Move the data directly from Segment to Usermaven without a 3rd party tool to facilitate the data sync. +- **Track events, identify users and companies.** You can track events, identify users and companies in Usermaven using Actions-based destinations. + + + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Search for "usermaven" in the Destinations Catalog, and select the destination. +3. Click **Configure Usermaven**. +4. Select an existing Source to connect to Usermaven (Actions). +5. Go to the [Usermaven App](https://app.usermaven.com){:target="_blank"}, and navigate to **Workspace Settings** > **General Settings** and copy the **API Key**. +6. Enter the "API Key" in the "Usermaven (Actions)" destination settings in Segment. + + + +{% include components/actions-fields.html %} + + diff --git a/src/connections/destinations/catalog/userpilot-cloud-actions/index.md b/src/connections/destinations/catalog/userpilot-cloud-actions/index.md new file mode 100644 index 0000000000..cf95931350 --- /dev/null +++ b/src/connections/destinations/catalog/userpilot-cloud-actions/index.md @@ -0,0 +1,44 @@ +--- +title: Userpilot Cloud (Actions) Destination +id: 647f30a35eedd03afde0a1c3 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +Userpilot helps product teams deliver personalized in-app experiences to increase growth metrics at every stage of the user journey. When you integrate Userpilot with Segment, you can send your Segment events to Userpilot, which allows you to create more personalized experiences for your users. + + +This destination is maintained by Userpilot. For any issues with the destination, [contact Userpilot's Support team](mailto:support@userpilot.co){:target="_blank"}. + + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure Userpilot Cloud (Actions)**. +4. Select an existing Source to connect to Userpilot Cloud (Actions). +5. Find your Userpilot API key and API endpoint in the [environment dashboard](https://run.userpilot.io/environment){:target="_blank"}. + +### Overview + +The Userpilot cloud-mode destination uses [Userpilot’s REST APIs](https://docs.userpilot.com/article/195-identify-users-and-track-api){:target="_blank"} to transmit user data and associated events directly to Userpilot. This lets you use Userpilot’s capabilities based on the real-time data received from your application. + +- **User Identification** Send [Identify](/docs/connections/spec/identify/) calls from Segment to Userpilot for identifying or updating user and company properties. This data is dispatched directly from your backend servers and can be used for segmenting users and triggering personalized content in real-time. + +- **Event Tracking:** Segment [Track](/docs/connections/spec/track/) calls are converted into Userpilot events. This feature captures user actions on your web application, allowing you to build a comprehensive understanding of your user's overall experience. You can trigger live, targeted content based on certain user actions like clicking a button or completing a transaction. + +Each Identify and Track call is sent to Userpilot’s server directly without being affected by the user’s browser settings. This direct server-to-server communication enables a more reliable and secure data transfer. + +Remember to follow Segment’s API rate limits to ensure your data is being sent at an acceptable rate. Always check Userpilot’s API documentation for the most recent information on how to set up Userpilot as a Cloud Mode Destination in Segment. + +{% include components/actions-fields.html %} + + +## Troubleshooting + +If you experience any issues while setting up Userpilot as a destination, follow these steps: + +- Check your Userpilot API Key. Make sure it's correctly entered in Segment. +- Verify that you've enabled Userpilot as a destination in Segment. +- If you're still having trouble, [contact Segment's support team](https://segment.com/help/contact/){:target="_blank"} for further assistance. \ No newline at end of file diff --git a/src/connections/destinations/catalog/userpilot-web-actions/index.md b/src/connections/destinations/catalog/userpilot-web-actions/index.md new file mode 100644 index 0000000000..43c6321089 --- /dev/null +++ b/src/connections/destinations/catalog/userpilot-web-actions/index.md @@ -0,0 +1,58 @@ +--- +title: Userpilot Web (Actions) Destination +id: 6480b4eeab29eca5415089d4 +beta: true +--- + +{% include content/plan-grid.md name="actions" %} + +Userpilot helps product teams deliver personalized in-app experiences to increase growth metrics at every stage of the user journey. When you integrate Userpilot with Segment, you can send your Segment events to Userpilot, which allows you to create more personalized experiences for your users. + + +This destination is maintained by Userpilot. For any issues with the destination, [contact Userpilot's Support team](mailto:support@userpilot.co){:target="_blank"}. + +## Getting started + +1. From the Segment web app, click **Catalog**, then click **Destinations**. +2. Find the Destinations Actions item in the left navigation, and click it. +3. Click **Configure Userpilot Web (Actions)**. +4. Select an existing Source to connect to Userpilot Web (Actions). +5. Find your Userpilot App Token in the [installation dashboard](https://run.userpilot.io/installation){:target="_blank"}. + + +## Page +If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: + +```js +analytics.page() +``` + +Calling the `page` from `analytics.js` triggers the `userpilot.reload` method that will check for any current running experiences on that page and fetch any new experiences that satisfy the specifed page settings. + +## Identify + +If you're not familiar with the Segment Specs, take a look to understand what the [Identify method](/docs/connections/spec/identify/) does. An example call would look like: + +```js +analytics.identify('userId123', { + email: 'john.doe@example.com' +}); +``` + +Calling `identify` from `analytics.js` will trigger the `userpilot.identify`. Segment recommends passing as much data as possible to get the most out of Userpilot. + +Data passed in an Identify call can be organized under different categories. +* Properties about the user such as `plan` or `userRole` to help targeting a specifc segment +* Properties to personalize the content of the Userpilot experiences, such as `name` or `company` +* Properties to target users based on their lifecycle, such as `createdAt`, which allows you to target newly created accounts or accounts that have yet to achieve a certain feature in the user lifecyle + + +## Track + +If you're not familiar with the Segment Specs, take a look to understand what the [Track method](/docs/connections/spec/track/) does. An example call would look like: + +```js +analytics.track('Clicked Login Button') +``` + +Calling `track` from `analytics.js` will trigger `userpilot.track`. This sends event data to Userpilot where it can be used for content triggering. diff --git a/src/connections/destinations/catalog/userpilot/index.md b/src/connections/destinations/catalog/userpilot/index.md index 36d3219b40..d45d5608b5 100644 --- a/src/connections/destinations/catalog/userpilot/index.md +++ b/src/connections/destinations/catalog/userpilot/index.md @@ -1,22 +1,20 @@ --- rewrite: true -title: Userpilot +title: Userpilot Web Plugin id: 5ca9d0c1b7119500014381d3 --- -[Userpilot](https://userpilot.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps product teams increase user adoption by allowing them to trigger highly personalized onboarding experiences across the user journey. The Segment integration will help you install and send data to Userpilot without added development time. +[Userpilot Web Plugin](https://userpilot.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} helps product teams increase user adoption by allowing them to trigger highly personalized onboarding experiences across the user journey. The Segment integration will help you install and send data to Userpilot without added development time. This destination is maintained by Userpilot. For any issues with the destination, [contact the Userpilot Support team](mailto:support@userpilot.io). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. -2. Search for "Userpilot" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "App Token" into your Segment Settings UI which you can find from your [Userpilot dashboard](https://app.userpilot.io/settings/setup) within the code snippet that looks like this `` where `73fe57o8` is the value you want to use. +2. Search for *Userpilot Web Plugin* in the Catalog, select it, and choose the source you want to connect the destination to. +3. Enter the **App Token** into your Segment Settings UI which you can find from your [Userpilot dashboard](https://app.userpilot.io/settings/setup){:target="_blank"} within the code snippet that looks like this `` where `73fe57o8` is the value you want to use. ## Page If you're not familiar with the Segment Specs, take a look to understand what the [Page method](/docs/connections/spec/page/) does. An example call would look like: @@ -41,7 +39,7 @@ Calling `identify` from `analytics.js` will trigger the `userpilot.identify`. We Data passed in the `identify` can be organized under different categories. * Properties about the user such as `plan` or `userRole` to help targetting a specifc segment. -* Properties to personlize the content of the Userpilot experiences such as `name` or `company` +* Properties to personalize the content of the Userpilot experiences such as `name` or `company`. * Properties to target users based on their lifecycle such as `createdAt`. This will allow you to target newly created accounts or accounts that have yet to achieve a certain feature in the user lifecyle. @@ -53,4 +51,4 @@ If you're not familiar with the Segment Specs, take a look to understand what th analytics.track('Clicked Login Button') ``` -Calling `track` from `analytics.js` will trigger `userpilot.track`. This will send events data to Userpilot where it can be used for content triggering. +Calling `track` from `analytics.js` will trigger `userpilot.track`. This sends event data to Userpilot where it can be used for content triggering. diff --git a/src/connections/destinations/catalog/uservoice/index.md b/src/connections/destinations/catalog/uservoice/index.md index caf1a0d7d2..853a052b94 100644 --- a/src/connections/destinations/catalog/uservoice/index.md +++ b/src/connections/destinations/catalog/uservoice/index.md @@ -3,11 +3,11 @@ rewrite: true title: UserVoice Destination id: 54521fdc25e721e32a72ef00 --- -[Uservoice](https://www.uservoice.com/) is a customer support and feedback tool that lets your users submit feedback right from your site, and helps you manage all the incoming requests. +[Uservoice](https://www.uservoice.com/){:target="_blank"} is a customer support and feedback tool that lets your users submit feedback right from your site, and helps you manage all the incoming requests. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "UserVoice" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -37,7 +37,7 @@ analytics.identify('ze8rt1u89', { }); ``` -When you call `identify` the `userId` and `traits` included in the call will be set to the current user in UserVoice. For more details on identifying users on UserVoice, check [their documentation](https://developer.uservoice.com). +When you call `identify` the `userId` and `traits` included in the call will be set to the current user in UserVoice. For more details on identifying users on UserVoice, check [their documentation](https://developer.uservoice.com){:target="_blank"}. ## Group @@ -53,7 +53,7 @@ analytics.group("0e8c78ea9d97a7b8185e8632", { }); ``` -When you call `group` the `traits` included in the call will be set to the current user's **Account** in UserVoice. For more details on grouping users on UserVoice, check [their documentation](https://developer.uservoice.com/). +When you call `group` the `traits` included in the call will be set to the current user's **Account** in UserVoice. For more details on grouping users on UserVoice, check [their documentation](https://developer.uservoice.com/){:target="_blank"}. ## Alias diff --git a/src/connections/destinations/catalog/variance/index.md b/src/connections/destinations/catalog/variance/index.md index 17f691af73..7f44de6661 100644 --- a/src/connections/destinations/catalog/variance/index.md +++ b/src/connections/destinations/catalog/variance/index.md @@ -3,7 +3,7 @@ rewrite: true title: Variance Destination id: 6099bbbc3d51136d7d293b0c --- -[Variance](https://variance.com?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) hooks into your customer data and makes it easy to access growth signals across product, marketing, and sales. The platform provides your growth team with clear, intent-based signals, from all stages of a customer's journey. +[Variance](https://variance.com?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} hooks into your customer data and makes it easy to access growth signals across product, marketing, and sales. The platform provides your growth team with clear, intent-based signals, from all stages of a customer's journey. This destination is maintained by Variance. For any issues with the destination, [contact the Variance Support team](mailto:support@variance.com). diff --git a/src/connections/destinations/catalog/vero/index.md b/src/connections/destinations/catalog/vero/index.md index 77ba398af1..b0ba1a45c6 100644 --- a/src/connections/destinations/catalog/vero/index.md +++ b/src/connections/destinations/catalog/vero/index.md @@ -2,41 +2,35 @@ title: Vero Destination id: 54521fdc25e721e32a72ef03 --- -Our Vero destination code is all open-source on GitHub if you want to check it out: [JavaScript](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/vero), [Server](https://github.com/segmentio/integration-vero). +Our Vero destination code is all open-source on GitHub if you want to check it out: [JavaScript](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/vero){:target="_blank"}, [Server](https://github.com/segmentio/integration-vero){:target="_blank"}. ## Getting Started Vero helps you send targeted emails to customers based on their behavior. When you enable Vero in the Segment web app, your changes appear in the Segment CDN in about 45 minutes, and then Analytics.js starts asynchronously loading Vero's `m.js` onto your page. This means you should remove Vero's snippet from your page. -+ Since Vero only records custom events and custom user data, no events or users will appear in Vero until you start using the API outlined below. - -Vero is supported on the client-side, server-side and mobile. - -- - - +Vero only records custom events and custom user data so no events or users will appear in Vero until you start using the API outlined below. ## Identify - ### Client Side -When you call [`identify`](/docs/connections/spec/identify/) on analytics.js, we augment `traits` to have `traits.id` set to the `userId`, and then call Vero's `user` with the augmented traits object. You should provide both a `traits.email` and a `userId` for Vero to work best. +When you call [Identify](/docs/connections/spec/identify/) on analytics.js, Segment augments `traits` to have `traits.id` set to the `userId`, and then call Vero's `user` with the augmented traits object. You should provide both a `traits.email` and a `userId` for Vero to work best. If no `email` is attached, the user is created in Vero but cannot be emailed. If you send omit the `userId`, Vero will use the email as the ID, which is is not recommended. Check out the [Vero docs](https://help.getvero.com/workflows/articles/creating-and-matching-vero-customer-ids/){:target="_blank"} for more information. -A `userId` is a required value for all types of calls. Be sure you call `identify` with a `userId` for subsequent `track` calls to populate into Vero correctly. For server side calls, you will have to manually pass in the `userId` at the top level. +A `userId` is a required value for all types of calls. Be sure you call Identify with a `userId` for subsequent `track` calls to populate into Vero correctly. For server side calls, you will have to manually pass in the `userId` at the top level. ### Server Side -When you call [`identify`](/docs/connections/spec/identify/) from one of our server-side languages, we'll call Vero's REST API and update the traits for the customer with that `userId`. If your `userId` is an email, we'll also set the trait `email` as your `userId` in the update call. - +When you call [Identify](/docs/connections/spec/identify/) from one of Segment's server-side languages, Segment calls Vero's REST API and update the traits for the customer with that `userId`. If your `userId` is an email, Segment sets the trait `email` as your `userId` in the update call. ## Track -When you call [`track`](/docs/connections/spec/track/), we'll send the event to Vero with the event `name` and `properties` you provide. Events will be matched to the current user. +When you call [Track](/docs/connections/spec/track/), Segment sends the event to Vero with the event `name` and `properties` you provide. Events will be matched to the current user. -You can also unsubscribe users by sending a `track` event, passing in the user's ID as a `property`, like so: +You can also unsubscribe users by sending a Track event, passing in the user's ID as a `property`, like so: ```javascript analytics.track('Unsubscribe', { @@ -44,35 +38,34 @@ analytics.track('Unsubscribe', { }); ``` -Note: If you'd like to explicitly specify a user's email with track events that is not an event metadata, you can send that under `context.traits.email`! +Note: If you'd like to explicitly specify a user's email with track events that is not an event metadata, you can send that under `context.traits.email`. ## Sending Data from Vero -Vero supports sending [email events](/docs/connections/spec/email) to other tools on the Segment platform. These events will be sent as `track` calls to the other destinations you've turned on. +Vero supports sending [email events](/docs/connections/spec/email) to other tools on the Segment platform. These events will be sent as Track calls to the other destinations you've turned on. To enable this feature, 1. Log into Vero and go to Settings -2. Then go to [Integrations](https://app.getvero.com/settings/integrations?integrations=all) +2. Then go to [Integrations](https://app.getvero.com/settings/integrations?integrations=all){:target="_blank"} 3. Hit 'view' next to the Segment integration 4. Enter in your Segment write key at the bottom. ![Send email events from Vero](images/1aWDVSGw9d.png) - ## Group -When you call [`group`](/docs/connections/spec/group/), the `traits` included in the call will be set to the current user's **Group** property in Vero. +When you call [Group](/docs/connections/spec/group/), the `traits` included in the call will be set to the current user's **Group** property in Vero. ## Alias -Our [`alias`](/docs/connections/spec/alias/) method can be used from your server to "re-identify" an existing user identity to a new one. +Segment's [Alias](/docs/connections/spec/alias/) method can be used from your server to "re-identify" an existing user identity to a new one. Most of the time this happens when you identify a visitor by their email address after they opt in, then later re-identify with a database ID when they become registered users. -To connect the two identities you'll need to [`alias`](/docs/connections/spec/alias/) their current identity to their new one. +To connect the two identities you'll need to [Alias](/docs/connections/spec/alias/) their current identity to their new one. -Here's a python example of using [`alias`](/docs/connections/spec/alias/) to update the identity from an email address to a database ID: +Here's a python example of using [Alias](/docs/connections/spec/alias/) to update the identity from an email address to a database ID: ```python analytics.alias('example@example.com', '8765309') @@ -82,29 +75,17 @@ analytics.alias('example@example.com', '8765309') ### Tags -The destination is capable of both adding and removing tags in Vero for a given user. Because `tags` is not a common property of events, this functionality is invoked using an [destination specific option](/docs/connections/sources/catalog/libraries/website/javascript/#selecting-destinations-with-the-integrations-object). +The destination is capable of both adding and removing tags in Vero for a given user. Because `tags` is not a common property of events, this functionality is invoked using an [destination specific option](/docs/connections/sources/catalog/libraries/website/javascript/#managing-data-flow-with-the-integrations-object). To start using this feature, pass an object called `tags` with the following properties: -
    - - - -     - - - - - - - - - - -
    `id` optionalStringThe user Id to associate tags with. If this is not specified, the destination will simply use the userId from the event itself.
    `action` requiredStringMust be either 'add' or 'remove'. Indicates whether you would like to add or remove the tags for the given user.
    `values` requiredArrayAn array of strings representing the tags to either add or remove. -
    - -Here is an example using our Node.js library: +| Field | | Type | Description | +| -------- | ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------- | +| `id` | _optional_ | String | The user Id to associate tags with. If this is not specified, the destination will simply use the userId from the event itself. | +| `action` | _required_ | String | Must be either 'add' or 'remove'. Indicates whether you would like to add or remove the tags for the given user. | +| `values` | _required_ | Array | An array of strings representing the tags to either add or remove. | + +Here is an example using Segment's Node.js library: ```javascript analytics.identify('324LKJF', { diff --git a/src/connections/destinations/catalog/vespucci/index.md b/src/connections/destinations/catalog/vespucci/index.md index 1e2c5797ea..76f8a3fd6e 100644 --- a/src/connections/destinations/catalog/vespucci/index.md +++ b/src/connections/destinations/catalog/vespucci/index.md @@ -3,7 +3,7 @@ title: Vespucci Destination rewrite: true id: 5e8761995f50ba6c68e5ea53 --- -[Vespucci](https://vespuccianalytics.com) is an unsupervised analytics solution relying on models that highlight the elements and content in your app revealing remarkable behaviors. +[Vespucci](https://vespuccianalytics.com){:target="_blank"} is an unsupervised analytics solution relying on models that highlight the elements and content in your app revealing remarkable behaviors. This destination is maintained by Vespucci. For any issues with the destination, [contact the Vespucci Support team](mailto:info@amerigotechnology.com). @@ -11,13 +11,13 @@ This destination is maintained by Vespucci. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Vespucci" in the Destinations Catalog, and select the Vespucci destination. 3. Choose which Source should send data to the Vespucci destination. -4. Go to your "Your Active Projects" section on your [Vespucci Dashboard](https://dashboard.vespuccianalytics.com). Click on the **+** button. Enter a name and select "Segment Destination" as the DataPipe. -5. [Depending on your project configuration](https://www.vespuccianalytics.com/documentation-article/getting-started){:target="_blank"}, select one of the two tracking methods and click "Create" to create your project. +4. Go to your "Your Active Projects" section on your [Vespucci Dashboard](https://docs.vespuccianalytics.com/vespucci/1_Story_Editor){:target="_blank"}. Click on the **+** button. Enter a name and select "Segment Destination" as the DataPipe. +5. [Depending on your project configuration](https://docs.vespuccianalytics.com/){:target="_blank"}, select one of the two tracking methods and click "Create" to create your project. 6. Take note of the API key associated with this project. Back in the Segment App, enter your API key in the Vespucci destination settings. ## Page diff --git a/src/connections/destinations/catalog/vidora/index.md b/src/connections/destinations/catalog/vidora/index.md index 5824684683..728d48c8f4 100644 --- a/src/connections/destinations/catalog/vidora/index.md +++ b/src/connections/destinations/catalog/vidora/index.md @@ -3,18 +3,18 @@ title: Vidora Destination rewrite: true id: 5ff67d3d4b6491271c0deae0 --- -[Vidora](https://vidora.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides a Machine Learning Platform for Marketing, AdTech, and Product teams to quickly and easily transform raw consumer data into valuable business decisions. Examples include: [next-best-action](https://www.vidora.com/general/video-building-real-time-decisioning-in-cortex-for-next-best-offer-and-next-best-action), next-best-offer, [dynamic decisioning](https://www.vidora.com/ml-in-business/dynamic-decisioning-using-real-time-machine-learning), [predictions](https://segment.com/recipes/using-predictive-purchase-behavior-to-increase-campaign-roi/), and prescriptive modeling. +[Vidora](https://vidora.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides a Machine Learning Platform for Marketing, AdTech, and Product teams to quickly and easily transform raw consumer data into valuable business decisions. Examples include: [next-best-action](https://www.vidora.com/general/video-building-real-time-decisioning-in-cortex-for-next-best-offer-and-next-best-action){:target="_blank"}, next-best-offer, [dynamic decisioning](https://www.vidora.com/ml-in-business/dynamic-decisioning-using-real-time-machine-learning){:target="_blank"}, [predictions](https://segment.com/recipes/using-predictive-purchase-behavior-to-increase-campaign-roi/){:target="_blank"}, and prescriptive modeling. This destination is maintained by Vidora. For any issues with the destination, [contact the Vidora Support team](mailto:support@vidora.com). ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Vidora" in the Destinations Catalog, and select the "Vidora" destination. 3. Choose which Source should send data to the "Vidora" destination. -4. Go to the [Vidora dashboard](https://app.vidora.com/#!/api/docs), find and copy the "API key". +4. Go to the [Vidora dashboard](https://app.vidora.com/#!/api/docs){:target="_blank"}, find and copy the "API key". 5. Enter the "API Key" in the "Vidora" destination settings in Segment. ## Track diff --git a/src/connections/destinations/catalog/visual-website-optimizer/index.md b/src/connections/destinations/catalog/visual-website-optimizer/index.md index 7c161bbcb9..9496e91ea5 100644 --- a/src/connections/destinations/catalog/visual-website-optimizer/index.md +++ b/src/connections/destinations/catalog/visual-website-optimizer/index.md @@ -3,19 +3,19 @@ rewrite: true title: VWO Destination id: 54521fdc25e721e32a72ef01 --- -[VWO](https://vwo.com/) is an all-in-one platform that helps you conduct visitor research, build an optimization roadmap, and run continuous experimentation. Their platform enables you to create a process-driven optimization, get benefits of a connected, unified view of the individual visitor and run A/B tests at scale without reducing performance. +[VWO](https://vwo.com/){:target="_blank"} is an all-in-one platform that helps you conduct visitor research, build an optimization roadmap, and run continuous experimentation. Their platform enables you to create a process-driven optimization, get benefits of a connected, unified view of the individual visitor and run A/B tests at scale without reducing performance. -The VWO Destination is open-source and you can browse the code [on GitHub](https://github.com/segment-integrations/analytics.js-integration-visual-website-optimizer). +The VWO Destination is open-source and you can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/blob/master/integrations/visual-website-optimizer/lib/index.js){:target='_blank’}. -If you notice any gaps, outdated information or simply want to leave some feedback to help us improve our documentation, [let us know](https://segment.com/help/contact)! +If you notice any gaps, outdated information or simply want to leave some feedback to help us improve our documentation, [let us know](https://segment.com/help/contact){:target="_blank"}! ## Getting Started -{% include content/connection-modes.md %} + Because the VWO destination needs to be on the page right away, there are two ways for the VWO JavaScript snippet to be loaded on your page. You can either: -1. Add the JavaScript snippet directly on your codebase by following the instructions in [these docs](https://vwo.com/knowledge/add-vwo-smartcode-to-your-website/) from the VWO documentation. Make sure to paste the snippet inside your `` tag above your Segment snippet! +1. Add the JavaScript snippet directly on your codebase by following the instructions in [these docs](https://vwo.com/knowledge/add-vwo-smartcode-to-your-website/){:target="_blank"} from the VWO documentation. Make sure to paste the snippet inside your `` tag above your Segment snippet! 2. Have Segment include the JavaScript snippet for you by toggling on the "Use Async Smart Code" setting and then including your Account ID in the "Account ID" setting. When both these settings are correctly set, you will not need to include VWO's native snippet on your page as Segment will do this on your behalf. Additionally, to enable the destination follow these instructions: diff --git a/src/connections/destinations/catalog/vitally/index.md b/src/connections/destinations/catalog/vitally/index.md index 311b84d08e..943389afe8 100644 --- a/src/connections/destinations/catalog/vitally/index.md +++ b/src/connections/destinations/catalog/vitally/index.md @@ -10,7 +10,7 @@ This destination is maintained by Vitally. For any issues with the destination, ## Getting Started -{% include content/connection-modes.md %} + Enabling Vitally as a destination in Segment can be done in one click from your Vitally account. @@ -59,7 +59,7 @@ analytics.track('enabled-slack-integration', { }) ``` -Track calls are used in Vitally to track and analyze your accounts' engagement with your product. Vitally provides out-of-the box analysis on your events, plus the ability to define your own custom metrics on top of those events, like [Success Metrics](https://docs.vitally.io/account-health-scores-and-metrics/success-metrics){:target="_blank"} and [Elements](https://docs.vitally.io/account-health-scores-and-metrics/elements). +Track calls are used in Vitally to track and analyze your accounts' engagement with your product. Vitally provides out-of-the box analysis on your events, plus the ability to define your own custom metrics on top of those events, like [Success Metrics](https://docs.vitally.io/account-health-scores-and-metrics/success-metrics){:target="_blank"} and [Elements](https://docs.vitally.io/account-health-scores-and-metrics/elements){:target="_blank"}. ## Group diff --git a/src/connections/destinations/catalog/voucherify-actions/index.md b/src/connections/destinations/catalog/voucherify-actions/index.md index 081af14668..93a5a083b8 100644 --- a/src/connections/destinations/catalog/voucherify-actions/index.md +++ b/src/connections/destinations/catalog/voucherify-actions/index.md @@ -1,8 +1,9 @@ --- title: Voucherify (Actions) Destination -private: true -hidden: true +private: false +hidden: false id: 63f529a8af3478b5a5363c53 + --- {% include content/plan-grid.md name="actions" %} @@ -21,7 +22,7 @@ The Voucherify (Actions) destination is bidirectional, which means you can confi 3. Select Voucherify (Actions) and then **Configure Voucherify (Actions)**. 4. Select an existing Source to connect to Voucherify (Actions). 5. Enter the **API Key** and **API Token** into your Segment Settings UI, which you can find from your [Voucherify dashboard](https://voucherify.io/dashboard){:target="_blank"}. -6. Enter **Custom URL**. Check your API region in Voucherify dashboard -> Project settings -> API endpoint. Then use one of [API Endpoints](https://docs.voucherify.io/docs/api-endpoints) and replace the **API** word with `segmentio` For example, if your default URL is: https://us1.api.voucherify.io, then use: https://us1.segmentio.voucherify.io. It also works for dedicated URLs. +6. Enter **Custom URL**. Check your API region in Voucherify dashboard -> Project settings -> API endpoint. Then use one of [API Endpoints](https://docs.voucherify.io/docs/api-endpoints){:target="_blank"} and replace the **API** word with `segmentio` For example, if your default URL is: https://us1.api.voucherify.io, then use: https://us1.segmentio.voucherify.io. It also works for dedicated URLs. 7. Select **Quick Setup** to start with pre-populated subscriptions, or **Customized Setup** to configure each action from scratch. 8. Click **Configure Actions**. diff --git a/src/connections/destinations/catalog/voucherify/index.md b/src/connections/destinations/catalog/voucherify/index.md index ed9f584103..d0313b0154 100644 --- a/src/connections/destinations/catalog/voucherify/index.md +++ b/src/connections/destinations/catalog/voucherify/index.md @@ -1,23 +1,21 @@ --- title: Voucherify Destination rewrite: true -beta: true id: 5e42baaecf559c535c8cbe97 hide-personas-partial: true --- -[Voucherify](https://voucherify.io?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) helps developers integrate digital promotions across any marketing channel or customer touchpoint - eventually giving full control over campaigns back to the marketing team. +[Voucherify](https://voucherify.io?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} helps developers integrate digital promotions across any marketing channel or customer touchpoint - eventually giving full control over campaigns back to the marketing team. This destination is maintained by Voucherify. For any issues with the destination, [contact the Voucherify Support team](mailto:support@voucherify.io). -{% include content/beta-note.md %} ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Voucherify" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" and "API Token" into your Segment Settings UI which you can find from your [Voucherify dashboard](https://voucherify.io/dashboard). +3. Enter the "API Key" and "API Token" into your Segment Settings UI which you can find from your [Voucherify dashboard](https://voucherify.io/dashboard){:target="_blank"}. #### Getting API Key and API Token On the Voucherify Dashboard page: diff --git a/src/connections/destinations/catalog/walkme/index.md b/src/connections/destinations/catalog/walkme/index.md index 0830e4cf55..8dea9660f1 100644 --- a/src/connections/destinations/catalog/walkme/index.md +++ b/src/connections/destinations/catalog/walkme/index.md @@ -3,22 +3,20 @@ rewrite: true title: WalkMe Destination id: 5d25d6e0885427000195bf80 --- -[WalkMe](https://www.walkme.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) Digital Adoption Platform provides guidance, engagement, insights and automation to users. +[WalkMe](https://www.walkme.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} Digital Adoption Platform provides guidance, engagement, insights and automation to users. This destination is maintained by WalkMe. For any issues with the destination, [contact the WalkMe Support team](mailto:support@walkme.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "WalkMe" in the Catalog, select it, and choose which of your sources to connect the destination to. 3. In the WalkMe settings, select an Environment (for example Production, Test etc.) 4. Enter your WalkMe system ID which you can find in your WalkMe Editor under Menu > Snippet tab. -5. You're all set! For specific steps on using Segment data within the WalkMe editor, [read here](https://support.walkme.com/?p=15147&post_type=ht_kb&preview=1&_ppp=ab530c4600). +5. You're all set! For specific steps on using Segment data within the WalkMe editor, [read here](https://support.walkme.com/?p=15147&post_type=ht_kb&preview=1&_ppp=ab530c4600){:target="_blank"}. ## Page diff --git a/src/connections/destinations/catalog/watchtower/index.md b/src/connections/destinations/catalog/watchtower/index.md index e83054d2da..6c8db8125f 100644 --- a/src/connections/destinations/catalog/watchtower/index.md +++ b/src/connections/destinations/catalog/watchtower/index.md @@ -3,7 +3,7 @@ rewrite: true title: Watchtower Destination --- -[Watchtower](https://www.watchtower.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a platform to discover, classify, and protect sensitive data, like customer PII, across cloud services & data infrastructure. This enables you to identify sensitive data that you're ingesting and sending to various business-critical systems -- so you can manage the customer data you're disseminating across services. +[Watchtower](https://www.watchtower.ai/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a platform to discover, classify, and protect sensitive data, like customer PII, across cloud services & data infrastructure. This enables you to identify sensitive data that you're ingesting and sending to various business-critical systems -- so you can manage the customer data you're disseminating across services. This destination is maintained by Watchtower. For any issues with the destination, [contact the Watchtower Support team](mailto:support@watchtower.ai). @@ -13,7 +13,7 @@ This destination is maintained by Watchtower. For any issues with the destinatio ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Watchtower" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/webengage/index.md b/src/connections/destinations/catalog/webengage/index.md index 5297cc64c8..f113f34a7c 100644 --- a/src/connections/destinations/catalog/webengage/index.md +++ b/src/connections/destinations/catalog/webengage/index.md @@ -8,7 +8,7 @@ This integration is maintained by [WebEngage Support](mailto:support@webengage.c Steps to integrate Segment with WebEngage: -You will be required to provide the API key if you intend on sending any using WebEngage's server-side component. The API key can be found in your WebEngage dashboard on the top right under **Integrations > REST API**. If you don't have a WebEngage account, you can create one [here](https://webengage.com/sign-up). +You will be required to provide the API key if you intend on sending any using WebEngage's server-side component. The API key can be found in your WebEngage dashboard on the top right under **Integrations > REST API**. If you don't have a WebEngage account, you can create one [here](https://webengage.com/sign-up){:target="_blank"}. To use the client-side web or mobile bundled SDKs, enter your License Code. WebEngage only needs the License Code you want to enable the device/packaged Integration which will allow you to use WebEngage's in-app and push notification functionality. @@ -37,7 +37,7 @@ analytics = new Analytics.Builder(this, "YOUR_SEGMENT_WRITE_KEY") #### iOS -To install the Segment-WebEngage integration, simply add this line to your [CocoaPods](http://cocoapods.org) `Podfile`: +To install the Segment-WebEngage integration, simply add this line to your [CocoaPods](http://cocoapods.org){:target="_blank"} `Podfile`: ```ruby pod "Segment-WebEngage" @@ -105,8 +105,8 @@ The `reset` call must be invoked when a user is logged out. ### Push Notifications Follow WebEngage's push notification documentation: -- [Android](https://docs.webengage.com/docs/android-push-messaging) -- [iOS](https://docs.webengage.com/docs/ios-push-messaging) +- [Android](https://docs.webengage.com/docs/android-push-messaging){:target="_blank"} +- [iOS](https://docs.webengage.com/docs/ios-push-messaging){:target="_blank"} ### In-App Notifications No further action is required to enable in-app messaging. diff --git a/src/connections/destinations/catalog/webhooks/index.md b/src/connections/destinations/catalog/webhooks/index.md index e7d85a4613..93ec0da4af 100644 --- a/src/connections/destinations/catalog/webhooks/index.md +++ b/src/connections/destinations/catalog/webhooks/index.md @@ -10,7 +10,7 @@ Segment Webhooks submit real-time user data to your own HTTP endpoints. A Webhoo ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Webhooks" in the Catalog, select it, and choose which of your sources to connect the destination to. @@ -20,7 +20,7 @@ Segment Webhooks submit real-time user data to your own HTTP endpoints. A Webhoo 6. Once enabled, Segment sends data to the configured webhook > info "" -> **Note:** With each call, Segment sends receive a [`context`](/docs/connections/spec/common/#context) object that provides information about the user's device, IP address, etc. As you start experimenting, test the Webhooks destination with [RequestBin.com](https://requestbin.com/) and [ultrahook](http://www.ultrahook.com) to see requests as they come through. +> **Note:** With each call, Segment sends receive a [`context`](/docs/connections/spec/common/#context) object that provides information about the user's device, IP address, etc. As you start experimenting, test the Webhooks destination with [RequestBin.com](https://requestbin.com/){:target="_blank"} and [ultrahook](http://www.ultrahook.com){:target="_blank"} to see requests as they come through. ## Webhooks timeouts diff --git a/src/connections/destinations/catalog/wigzo/index.md b/src/connections/destinations/catalog/wigzo/index.md index 9c839a6061..975f14eec5 100644 --- a/src/connections/destinations/catalog/wigzo/index.md +++ b/src/connections/destinations/catalog/wigzo/index.md @@ -3,7 +3,7 @@ rewrite: true title: Wigzo Destination id: 564e4f97e954a874ca44cbd3 --- -[Wigzo](https://www.wigzo.com/) is a Contextual Marketing Platform that helps marketers send smarter communication through email or in-app, by changing content dynamically based on User behavior. Using Wigzo's predictive technologies, companies can produce Dynamic content blocks which automatically populate in emails based on User behavior and Context. +[Wigzo](https://www.wigzo.com/){:target="_blank"} is a Contextual Marketing Platform that helps marketers send smarter communication through email or in-app, by changing content dynamically based on User behavior. Using Wigzo's predictive technologies, companies can produce Dynamic content blocks which automatically populate in emails based on User behavior and Context. This destination is maintained by Wigzo. For any issues with the destination, [contact the Wigzo Support team](mailto:support@wigzo.com) diff --git a/src/connections/destinations/catalog/willow/index.md b/src/connections/destinations/catalog/willow/index.md index a448686767..c9a37351a9 100644 --- a/src/connections/destinations/catalog/willow/index.md +++ b/src/connections/destinations/catalog/willow/index.md @@ -2,6 +2,7 @@ title: Willow Destination rewrite: true id: 620ebe78b4e75580b6e6b72a +hidden: true --- [Willow](https://heywillow.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank"} is a customer support platform for early stage startups. It focuses on getting your whole team (even engineering) to solve issues together with commenting and tagging, shows you everything in one place from customer messages to in-app actions, and it shows your entire customer's journey in one continuous feed from day one to today. @@ -10,7 +11,7 @@ Willow maintains this destination. For any issues with the destination, [contact ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for **Willow** in the Destinations Catalog, and select the **Willow** destination. diff --git a/src/connections/destinations/catalog/windsor/index.md b/src/connections/destinations/catalog/windsor/index.md index 1515f736ae..5bdc66604d 100644 --- a/src/connections/destinations/catalog/windsor/index.md +++ b/src/connections/destinations/catalog/windsor/index.md @@ -3,24 +3,22 @@ rewrite: true title: Windsor Destination id: 5dca74a6907ce1604b781476 --- -[Windsor](https://windsor.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) provides startups a unified dashboard for all SaaS data. It pulls analytics and email events, customer support tickets, credit card transactions, and more to give a complete view of customers. +[Windsor](https://windsor.io/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} provides startups a unified dashboard for all SaaS data. It pulls analytics and email events, customer support tickets, credit card transactions, and more to give a complete view of customers. This destination is maintained by Windsor. For any issues with the destination, [contact the Windsor Support team](mailto:support@windsor.io). -You can find more information on Windsor on [the Windsor docs site](https://docs.windsor.io). - -{% include content/beta-note.md %} +You can find more information on Windsor on [the Windsor docs site](https://docs.windsor.io){:target="_blank"}. ## Getting Started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in the Segment App, click **Add Destination**. 2. Search for "Windsor" in the Destinations Catalog, and select the Windsor destination. 3. Choose which Source should send data to the Windsor destination. -4. Go to the [Windsor app Sources page](https://app.windsor.io/sources) +4. Go to the [Windsor app Sources page](https://app.windsor.io/sources){:target="_blank"} 5. Select **Segment** and click **Generate Token**. Copy the token provided. 6. Enter the token in the Windsor destination settings in the Segment app. @@ -34,7 +32,7 @@ If you aren't familiar with the Segment Spec, take a look at the [Page method do analytics.page() ``` -Segment sends Page calls as tracked events for each [user](https://app.windsor.io/people, and also to the Windsor [feed](https://app.windsor.io/feed). Page events are hidden on Windsor by default, but can be enabled using the **Show Hidden Events** button at the top of the feed. +Segment sends Page calls as tracked events for each [user](https://app.windsor.io/people){:target="_blank"}, and also to the Windsor [feed](https://app.windsor.io/feed){:target="_blank"}. Page events are hidden on Windsor by default, but can be enabled using the **Show Hidden Events** button at the top of the feed. ## Screen @@ -45,7 +43,7 @@ If you aren't familiar with the Segment Spec, take a look at the [Screen method [[SEGAnalytics sharedAnalytics] screen:@"Home"]; ``` -Segment sends Screen calls to Windsor to the tracked events for each [user](https://app.windsor.io/people), and also as events that appear in the Windsor [feed](https://app.windsor.io/feed). +Segment sends Screen calls to Windsor to the tracked events for each [user](https://app.windsor.io/people){:target="_blank"}, and also as events that appear in the Windsor [feed](https://app.windsor.io/feed){:target="_blank"}. ## Identify @@ -63,7 +61,7 @@ analytics.identify("user-123", { Windsor **requires** a **`userId`** and **`email`** for most integrations to work correctly. Additionally, if you include a value for `phone`, Windsor can track any text messages you send. The `avatar` property lets you add an image to identify users easily on Windsor. -Segment sends Identify calls to Windsor to create new users and their properties. You can find all your users on the [Users Page](https://app.windsor.io/people) +Segment sends Identify calls to Windsor to create new users and their properties. You can find all your users on the [Users Page](https://app.windsor.io/people){:target="_blank"} ### Best practices @@ -83,7 +81,7 @@ If you aren't familiar with the Segment Spec, take a look at the [Track method analytics.track('Login Button Clicked') ``` -Segment sends Track calls to Windsor as tracked events for each [user](https://app.windsor.io/people), and as events that appear on the Windsor [feed](https://app.windsor.io/feed). +Segment sends Track calls to Windsor as tracked events for each [user](https://app.windsor.io/people){:target="_blank"}, and as events that appear on the Windsor [feed](https://app.windsor.io/feed){:target="_blank"}. To get the best experience with Windsor, Segment recommends that you follow the Segment's specs for your industry or application . diff --git a/src/connections/destinations/catalog/wishpond/index.md b/src/connections/destinations/catalog/wishpond/index.md index 1cbf9aecd8..35aff96deb 100644 --- a/src/connections/destinations/catalog/wishpond/index.md +++ b/src/connections/destinations/catalog/wishpond/index.md @@ -5,7 +5,7 @@ id: 575f018380412f644ff139bf --- This destination is maintained by Wishpond. -The [Wishpond JavaScript (browser) Integration](https://github.com/wishpond-dev/analytics.js-integration-wishpond) destination code is open source and on GitHub. Feel free to check it out. +The [Wishpond JavaScript (browser) Integration](https://github.com/wishpond-dev/analytics.js-integration-wishpond){:target="_blank"} destination code is open source and on GitHub. Feel free to check it out. ## Getting Started @@ -14,7 +14,7 @@ Wishpond works with Segment's client-side JavaScript library: Analytics.js. 1. From your Segment UI's Destinations page click on "Add Destination". 2. Search for "Wishpond" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. In the destination settings, enter your Merchant ID and Trackey Key from Wishpond's ["API Keys" dialog](https://www.wishpond.com/central/welcome?api_keys=true). These are also found in your Wishpond Account in the "API Keys" dropdown under your account name in the top right corner. +3. In the destination settings, enter your Merchant ID and Trackey Key from Wishpond's ["API Keys" dialog](https://www.wishpond.com/central/welcome?api_keys=true){:target="_blank"}. These are also found in your Wishpond Account in the "API Keys" dropdown under your account name in the top right corner. 4. Segment automatically initializes Wishpond's Tracking Code with your Tracking Key and Merchant ID when it next loads Analytics.js. When you enable Wishpond in Segment, your Wishpond account starts to receive data when you use `identify` or `track` methods. @@ -42,7 +42,7 @@ Wishpond.Tracker.identify('1e810c197e', { ``` A new lead will be created be in your 'Wishpond Leads Database'. The lead will have the attributes: name 'Jane Kim', email 'jane.kim@example.com'. -To more details how Wishpond's identify works visit [Wishpond API Docs: #identify](http://developers.wishpond.com/#identify). +To more details how Wishpond's identify works visit [Wishpond API Docs: #identify](http://developers.wishpond.com/#identify){:target="_blank"}. ## Track @@ -68,14 +68,14 @@ Wishpond.Tracker.track('Signed Up', { A new event will be added to the lead that the current session is tracking. The event title will be 'Signed Up', and it will have the properties: plan: 'Startup',source: 'Analytics Academy'. -To more details how Wishpond's identify works visit [Wishpond API Docs: #track](http://developers.wishpond.com/#tracking-events). +To more details how Wishpond's identify works visit [Wishpond API Docs: #track](http://developers.wishpond.com/#tracking-events){:target="_blank"}. - - - ## Troubleshooting/ FAQ ### Destination is not working properly -Make sure you have copied the right keys from Wishpond's ["API Keys" dialog](https://www.wishpond.com/central/welcome?api_keys=true), this destination will need `Merchant ID` and `Tracking Key`. +Make sure you have copied the right keys from Wishpond's ["API Keys" dialog](https://www.wishpond.com/central/welcome?api_keys=true){:target="_blank"}, this destination will need `Merchant ID` and `Tracking Key`. [Analytics.js]: https://segment.com//docs/connections/sources/catalog/libraries/website/javascript/ [ci-link]: https://circleci.com/gh/segment-integrations/analytics.js-integration-wishpond diff --git a/src/connections/destinations/catalog/wootric-by-inmoment/index.md b/src/connections/destinations/catalog/wootric-by-inmoment/index.md index 57c1906bbd..7395dba9c2 100644 --- a/src/connections/destinations/catalog/wootric-by-inmoment/index.md +++ b/src/connections/destinations/catalog/wootric-by-inmoment/index.md @@ -7,16 +7,16 @@ redirect_from: hide-dossier: true --- -[InMoment (formerly Wootric)](https://www.wootric.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is the modern customer feedback management platform that brands around the globe use to make experience their competitive advantage. +[InMoment (formerly Wootric)](https://www.wootric.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is the modern customer feedback management platform that brands around the globe use to make experience their competitive advantage. -The InMoment Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/wootric). +The InMoment Destination is open-source. You can browse the code [on GitHub](https://github.com/segmentio/analytics.js-integrations/tree/master/integrations/wootric){:target="_blank"}. If you notice any gaps, out-dated information or simply want to leave some feedback to help us improve our documentation, [contact InMoment Support](mailto:support@wootric.com)! ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "InMoment (Wootric)" in the Catalog, select it, and choose which of your sources to connect the destination to. diff --git a/src/connections/destinations/catalog/worthy/index.md b/src/connections/destinations/catalog/worthy/index.md index b90dca3a0f..196b28d31a 100644 --- a/src/connections/destinations/catalog/worthy/index.md +++ b/src/connections/destinations/catalog/worthy/index.md @@ -3,13 +3,13 @@ title: Worthy Destination rewrite: true ---​ -[Worthy.ai](https://worthy.ai) helps advertisers improve their marketing efficiency through using predictive analytics and signal testing. +[Worthy.ai](https://worthy.ai){:target="_blank"} helps advertisers improve their marketing efficiency through using predictive analytics and signal testing. -[Worthy.ai](https://worthy.ai) maintains this documentation. For any issues with the destination, [contact Worthy support](mailto:engineering@worthy.ai). +[Worthy.ai](https://worthy.ai){:target="_blank"} maintains this documentation. For any issues with the destination, [contact Worthy support](mailto:engineering@worthy.ai). ## Getting started -{% include content/connection-modes.md %} + 1. From the Destinations catalog page in your Segment Workspace, click **Add Destination**. 2. Search for "Worthy" in the Destinations Catalog, and select the **Worthy** destination. diff --git a/src/connections/destinations/catalog/xtremepush/index.md b/src/connections/destinations/catalog/xtremepush/index.md index adc3b08e70..8950ea82c0 100644 --- a/src/connections/destinations/catalog/xtremepush/index.md +++ b/src/connections/destinations/catalog/xtremepush/index.md @@ -2,22 +2,23 @@ rewrite: true title: Xtremepush Destination id: 5ca77adcc7781c00018a459b +versions: + - name: Xtremepush (Actions) Destination + link: /docs/connections/destinations/catalog/actions-xtremepush/ --- -[Xtremepush](https://xtremepush.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) is a complete digital engagement platform. Empowering global brands to create personalised, real-time experiences for their customers across mobile, web, email, SMS and social. Xtremepush's clients are increasing revenue through data-driven, contextually-relevant interactions. The software is flexible, reliable and quick to deploy, backed up by a team of expert strategists and technical support. +[Xtremepush](https://xtremepush.com/?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} is a complete digital engagement platform. Empowering global brands to create personalised, real-time experiences for their customers across mobile, web, email, SMS and social. Xtremepush's clients are increasing revenue through data-driven, contextually-relevant interactions. The software is flexible, reliable and quick to deploy, backed up by a team of expert strategists and technical support. This destination is maintained by Xtremepush. For any issues with the destination, [contact the Xtremepush Support team](mailto:support@xtremepush.com). -{% include content/beta-note.md %} - ## Getting Started -{% include content/connection-modes.md %} + 1. From the Segment web app, click **Catalog**. 2. Search for "Xtremepush" in the Catalog, select it, and choose which of your sources to connect the destination to. -3. Enter the "API Key" into your Segment Settings UI which you can find from your Xtremepush Project under *Settings > Integrations* as described in the [user guide](https://docs.xtremepush.com/docs/third-party-integrations). +3. Enter the "API Key" into your Segment Settings UI which you can find from your Xtremepush Project under *Settings > Integrations* as described in the [user guide](https://docs.xtremepush.com/docs/third-party-integrations){:target="_blank"}. ## Identify @@ -40,7 +41,7 @@ Some special traits will also be used as additional user identifiers: | email | email | | phone | mobile_number | -For any additional traits you want to save you should create [User Profile Attributes](https://docs.xtremepush.com/docs/attributes-tags) in your Xtremepush Project. +For any additional traits you want to save you should create [User Profile Attributes](https://docs.xtremepush.com/docs/attributes-tags){:target="_blank"} in your Xtremepush Project. If a trait does not match a custom Xtremepush User Profile Attribute and is not recognized as a User Identifier it will be ignored. @@ -54,14 +55,14 @@ analytics.track('Product Purchased', { }) ``` -Track calls will be sent to Xtremepush as a `event hits`, so you can use it to [trigger a campaign](https://docs.xtremepush.com/docs/campaign-events) for a user. +Track calls will be sent to Xtremepush as a `event hits`, so you can use it to [trigger a campaign](https://docs.xtremepush.com/docs/campaign-events){:target="_blank"} for a user. Event properties can be used as merge tags in the message content. You can also define additional rules on where to trigger the campaign based on event properties value. ## Enabling Push and In-App Notifications To enable Xtremepush push and in-app notifications you will also need to to install the relevant Xtremepush SDKs. -[Xtremepush iOS SDK Docs](https://docs.xtremepush.com/docs/ios-integration) +[Xtremepush iOS SDK Docs](https://docs.xtremepush.com/docs/ios-integration){:target="_blank"} -[Xtremepush Android SDK Docs](https://docs.xtremepush.com/docs/android-integration) +[Xtremepush Android SDK Docs](https://docs.xtremepush.com/docs/android-integration){:target="_blank"} diff --git a/src/connections/destinations/catalog/yandex-metrica/index.md b/src/connections/destinations/catalog/yandex-metrica/index.md index 51c04add89..93abff6841 100644 --- a/src/connections/destinations/catalog/yandex-metrica/index.md +++ b/src/connections/destinations/catalog/yandex-metrica/index.md @@ -3,9 +3,9 @@ rewrite: true title: Yandex.Metrica Destination id: 54521fdc25e721e32a72ef07 --- -[Yandex.Metrica](https://metrica.yandex.com/about?utm_source=segmentio&utm_medium=docs&utm_campaign=partners) enables customizable report analytics so marketers can toggle between attribution models, segment and compare audiences based on custom details like OS, number of visits, and ad blocker usage. It also supports session replay, heat maps, form analytics so marketers can review user movements such as mouseclicks, form fill ins, and keystrokes. Finally, it supports custom events tracking and purchase funnels, and automates eCommerce reports to calculate metrics like cost per order and total costs. +[Yandex.Metrica](https://metrica.yandex.com/about?utm_source=segmentio&utm_medium=docs&utm_campaign=partners){:target="_blank”} enables customizable report analytics so marketers can toggle between attribution models, segment and compare audiences based on custom details like OS, number of visits, and ad blocker usage. It also supports session replay, heat maps, form analytics so marketers can review user movements such as mouseclicks, form fill ins, and keystrokes. Finally, it supports custom events tracking and purchase funnels, and automates eCommerce reports to calculate metrics like cost per order and total costs. -Our Yandex.Metrica destination code is open sourced on GitHub. Feel free to check it out here for [JavaScript](https://github.com/segment-integrations/analytics.js-integration-yandex-metrica). +Our Yandex.Metrica destination code is open sourced on GitHub. Feel free to check it out here for [JavaScript](https://github.com/segment-integrations/analytics.js-integration-yandex-metrica){:target="_blank"}. ## Getting Started diff --git a/src/connections/destinations/catalog/youbora/index.md b/src/connections/destinations/catalog/youbora/index.md index d3a0c990d8..861ba8bdac 100644 --- a/src/connections/destinations/catalog/youbora/index.md +++ b/src/connections/destinations/catalog/youbora/index.md @@ -74,9 +74,8 @@ analytics.track('Video Playback Seek Completed'); ### Video Playback Buffer Started/Completed -When the video content buffers during playback, use the [Video -Playback Buffer Started](/docs/connections/spec/video/#playback-events) and [Video Playback -Buffer Completed](/docs/connections/spec/video/#playback-events) events. Segment maps the +When the video content buffers during playback, use the [Video Playback Buffer Started](/docs/connections/spec/video/#playback-events) and +[Video Playback Buffer Completed](/docs/connections/spec/video/#playback-events) events. Segment maps the properties from these events to the following Youbora video metadata fields: **Example** @@ -205,8 +204,8 @@ The following example shows a working implementation: ```js