Skip to content

Commit 76814c3

Browse files
authored
Merge pull request #115 from segmentio/repo-sync
repo sync
2 parents 825f05a + 52ed6f2 commit 76814c3

File tree

3 files changed

+40
-34
lines changed

3 files changed

+40
-34
lines changed

src/connections/destinations/catalog/braze/index.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ The `inAppMessages` parameter will be an array of [`appboy.ab.InAppMessage`](htt
284284

285285
#### iOS
286286

287-
1. Follow the directions to register for push at in [Segment's iOS library](/docs/connections/sources/catalog/libraries/mobile/ios/) docs.
287+
1. Follow the directions to register for push at in [Segment's iOS library](/docs/connections/sources/catalog/libraries/mobile/ios/ios-faqs/#how-do-i-use-push-notifications) docs.
288288
2. Add the following to your application:didFinishLaunchingWithOptions
289289
290290
```

src/connections/destinations/catalog/salesforce/index.md

+31-25
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,27 @@ title: Salesforce Destination
33
strat: salesforce
44
---
55

6+
> info ""
7+
> Segment is aware of Salesforce's plans to enforce multi-factor authentication in 2022, and is evaluating solutions to ensure uninterrupted connectivity with your Salesforce account.
68
79
Segment's Salesforce destination allows you to identify leads without using SOAP APIs.
810

911
### API Access
1012

11-
You'll need to provide API access to Segment using a Salesforce user credentials. Since we use Salesforce's SOAP API, you'll need to provide an email, password, and security token to get access to their API.
13+
Segment uses the Salesforce SOAP API to connect. This API requires the following credentials of a registered Salesforce user:
14+
- email
15+
- password
16+
- security token
1217

13-
Since we don't want to ask for the password of one of your actual user accounts, we recommend you create a new Salesforce user account for Segment. We realize an extra user account costs money, so feel free to use an existing account if you wish.
18+
Segment recommends that you create a separate user account specifically for this destination, if possible.
1419

15-
If you decide to create a new user account for the Segment API, create this user by going to *Setup > Administration set up > Users > New User*, and creating a new user with a System Administrator profile. This profile is required to give us enough permissions to access the API.
20+
If you decide to create a new user account for the Segment API, create this user by going to *Setup > Administration set up > Users > New User*, and creating a new user with a System Administrator profile. This profile is required to give Segment enough permissions to access the API.
1621

17-
Also make sure that IP Security is disabled in this Salesforce user account. This is because our servers often change and its hard to predict their IPs.
18-
19-
- - -
22+
Also make sure that IP Security is disabled in this Salesforce user account. This is because Segment's servers often change and its hard to predict their IPs.
2023

2124
## Identify
2225

23-
Our destination makes it simple to integrate Salesforce. This destination supports the most important pain point for Salesforce users: getting your prospective customers into Salesforce as Leads from your website or mobile app. Creating/updating Leads is the default behavior of `identify` events. If you would like to customize this you can do so leveraging [Actions](#custom-actions)
26+
This destination supports the most important pain point for Salesforce users: getting your prospective customers into Salesforce as Leads from your website or mobile app. Creating/updating Leads is the default behavior of `identify` events. If you would like to customize this you can do so using [Actions](#custom-actions)
2427

2528
### Identifying a Lead
2629

@@ -47,7 +50,7 @@ analytics.identify('YOUR_USERS_ID', {
4750
});
4851
```
4952

50-
Additionally, if you're using another destination, like Intercom, that requires the company trait to be an object, you can pass the name of the company as follows and our destination will still map it as expected.
53+
Additionally, if you're using another destination, like Intercom, that requires the company trait to be an object, you can pass the name of the company as follows and the destination still maps it as expected.
5154

5255
Also, you can send the address data in a object as well.
5356

@@ -74,19 +77,21 @@ analytics.identify('YOUR_USERS_ID', {
7477
});
7578
```
7679

77-
When you call `identify`, we'll check to see if this Lead exists based on the `email` trait. If it does, we'll update the Lead with the traits you've passed in your `identify` call, otherwise we'll create a Salesforce Lead.
80+
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.
7881

79-
**IMPORTANT**: 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 we will automatically append the string `'n/a'` to each of those fields even if you have provided those fields in a previous request.
82+
> warning ""
83+
> 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.
8084
81-
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`. We will append 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.
85+
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.
8286

83-
**NOTE**: Our Salesforce destination requires **every event to include a 'Salesforce': true in an integrations object**. Segment will not attempt to send any events to Salesforce that do not include this in their payload. The Salesforce SOAP API has very strict API limits so to prevent users from unintentionally hitting their limits, we require this in all events.
87+
> info ""
88+
> The Salesforce destination requires **every event to include a 'Salesforce': true in an integrations object**. Segment will not attempt to send any events to Salesforce that do not include this in their payload. The Salesforce SOAP API has very strict API limits so to prevent users from unintentionally hitting their limits, Segment requires this in all events.
8489
85-
By default we do not send identify calls to Salesforce, given their strict API limits, which is why we ask you to explicitly define which identify calls are sent to Salesforce.
90+
By default Segment does not send identify calls to Salesforce, given their strict API limits.
8691

8792
## Group
8893

89-
`.group()` calls will now create or update **Account Objects** inside Salesforce. When we receive a group call, similar to the `.identify()` call, we will first check using the `groupId` to see if the Account Object already exists in your SF account. Depending on the response, we will update that object or create a new one. Creating/updating Accounts is the default behavior of `group` events. If you would like to customize this you can do so leveraging [Actions](#custom-actions)
94+
`.group()` calls create or update **Account Objects** inside Salesforce. When Segment receives a group call, similar to the `.identify()` call, it first checks using the `groupId` to see if the Account Object already exists in your Salesforce account. Depending on the response, Segment updates that object or create a new one. Creating/updating Accounts is the default behavior of `group` events. If you would like to customize this you can do so using [Actions](#custom-actions)
9095

9196
Take this sample `.group()` call that you might send to Segment:
9297

@@ -129,26 +134,27 @@ The above call will be sent like the following, in accordance with [Salesforce's
129134
}
130135
```
131136

132-
*NOTE*: By default we will map `address` to the Account's **billing** address. If you'd like to map the address to the Account's **shipping** address, you can do so inside your Salesforce settings in Segment. You can also opt to map it to *both* billing and shipping.
137+
> info ""
138+
> By default Segment maps `address` to the Account's **billing** address. To map the address to the Account's **shipping** address, you can do so inside your Salesforce settings in Segment. You can also opt to map it to *both* billing and shipping.
133139
134140
#### Required Steps
135141

136142
- You must be using V2 of this destination.
137143
- You must pass in `traits.name` as this is a required field imposed by Salesforce for Account Objects.
138144
- You must pass `{ 'Salesforce': true }` in the `options`.
139-
- You must include `AccountNumber` as part of your page layout for us to be able to look up for the Account Objects using `groupId`:
145+
- You must include `AccountNumber` as part of your page layout for Segment to be able to look up for the Account Objects using `groupId`:
140146
- Log into your Salesforce account and go to `setup`
141147
- Go to `Build` > `Customize` > `Accounts` > `Page Layout`
142148
- Drag the `Account Number` Field to the `Account Detail`
143149
- Click `Save`
144150

145151
#### Custom traits
146152

147-
In order to send custom traits, you must do the same steps as you had done for the `.identify()` call. You have to **predefine** them inside Salesforce. We will send any custom traits by appending `__c`.
153+
In order to send custom traits, you must do the same steps as you had done for the `.identify()` call. You have to **predefine** them inside Salesforce. Segment appends `__c` to any custom traits.
148154

149155
## Trait Validation
150156

151-
Salesforce has documented strict validations on their semantic traits. We will trim all of 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.
157+
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.
152158

153159
## Custom Actions
154160
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:
@@ -160,15 +166,15 @@ Upsert actions either create or update a resource in Salesforce. For these to wo
160166

161167
![upsert action example](images/upsert-action-example.png)
162168

163-
In this example, we creating or updating a Contact in Salesforce based on whether or not the `userId` property in `identify` events maps to a Contact with a custom `UserId__c` field value in SFDC. Additionally, the Salesforce Contact record field values `Email` and `Phone` are populated by the Segment event `traits.email` and `traits.phone` respectively.
169+
In this example, creating or updating a Contact in Salesforce based on whether or not the `userId` property in `identify` events maps to a Contact with a custom `UserId__c` field value in SFDC. Additionally, the Salesforce Contact record field values `Email` and `Phone` are populated by the Segment event `traits.email` and `traits.phone` respectively.
164170

165171
## Troubleshooting
166172

167173
### Creating Other Resources
168174

169-
To reduce the complexity of our API, our Salesforce destination intentionally only supports creating leads using the `identify` call. We make it extremely easy to create and update leads with our destination.
175+
To reduce the complexity of the API, the Salesforce destination intentionally only supports creating leads using the `identify` call.
170176

171-
To create resources of other types, such as Accounts or custom objects, we recommend integrating with Salesforce directly
177+
To create resources of other types, such as Accounts or custom objects, Segment recommends that you integrate with Salesforce directly
172178

173179

174180
### Sandbox Mode
@@ -177,11 +183,11 @@ To enable an integration with a Salesforce Sandbox instance, toggle the Sandbox
177183

178184
### API Call Limits
179185

180-
Salesforce limits both the concurrent amount of requests and the total amount of daily requests we 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.
186+
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.
181187

182-
We make 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.
188+
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.
183189

184-
Also, every thirty minutes, our servers make two queries: one to renew our connection's sessionId and another to describe your Salesforce object model so to determine which Salesforce objects are available.
190+
Also, every thirty minutes, Segment's servers make two queries: one to renew the connection's sessionId and another to describe your Salesforce object model so to determine which Salesforce objects are available.
185191

186192

187193
### How can I check how many Salesforce API calls I have left today?
@@ -196,7 +202,7 @@ You can either decrease the amount of Salesforce calls Segment makes using conte
196202

197203
### Lookup Fields
198204

199-
You can add whatever lookup fields you want to help us find the object you want to update.
205+
You can add whatever lookup fields you want to help Segment find the object you want to update.
200206

201207

202208
### Custom Fields Aren't Updating

0 commit comments

Comments
 (0)