# PubSub
Consumes events from a given Salesforce PubSub channel.
## Overview
The Salesforce PubSub input allows you to consume events from a subscription channel using the Salesforce PubSub GRPC streaming API.
### Key Features
- **Custom Event Support**: Consume from any subscription channel with streaming enabled, including custom events
- **Automatic State Tracking**: Maintains state to resume consumption after service disruptions
- **Historical Event Processing**: Processes all available events in the channel on initialization
- **Efficient Data Collection**: Only collects new events on subsequent runs
### How It Works
The input uses state tracking to efficiently collect events:
1. **Initial Run**: Collects all events available in the channel (as far back as the channel's storage retention allows)
2. **Subsequent Runs**: Collects only events that occurred after the last successful run
3. **State Management**: Updates the replay ID with each successfully processed event to track progress
## Prerequisites
Before configuring the Salesforce PubSub input, ensure you have:
1. **Salesforce Account**: Access to a Salesforce organization with PubSub API enabled
2. **PubSub Channel**: A subscription channel with streaming and storage enabled
3. **Administrative Access**: Permissions to create External Client Apps and manage OAuth settings
## Setup Instructions
### Step 1: Creating a Salesforce External Client App
1. Log in to your Salesforce account
2. Navigate to **Setup** > **Apps** > **External Client Apps** > **External Client App Manager**
3. Click **New External Client App** on the top right
4. Fill in **Basic Information** section:
- **External Client App Name**: Your App Name. E.g., "Monad Salesforce PubSub"
- **Contact Email**: Your email address
- **Distribution State**: Leave as default "local"
5. In **API (Enable OAuth Settings)** section:
- Check **Enable OAuth**
- **Callback URL**: `https://app.monad.com`
- This can be anything and is not used. It is required by Salesforce.
- **OAuth Scopes**: Add the following scopes:
- `Manage user data via APIs (api)`
- `Perform requests at any time (refresh_token, offline_access)`
6. Enable **Enable Client Credentials Flow**
7. All other settings can be left as default
8. Click **Create**
### Step 2: Configuring OAuth Policies
1. After creating the app, you will be redirected to the app's detail page
2. Click **Edit** on the top right
3. In the **OAuth Policies** section:
- Enable **Enable Client Credentials Flow**
- Set **Run As** to an appropriate user with access to the PubSub channel
4. All other settings can be left as default
5. Click **Save**
### Step 3: Retrieving Client Credentials
1. From the new External Client App's detail page, navigate to **Settings** > **OAuth Settings**
2. Click **Consumer Key and Secret**
- Verification may be required before viewing the secrets
3. Copy the **Consumer Key** and **Consumer Secret**.
- These will be used as the Client ID and Client Secret in the input configuration.
## Configuration
### Required Settings
| Setting | Type | Description | How to Find |
|---------|------|-------------|-------------|
| **DomainURL** | string | Domain URL for your Salesforce instance | **Setup** > **Company Settings** > **My Domain** → **Current My Domain URL** |
| **OrganizationID** | string | Organization ID for your Salesforce instance | **Setup** > **Company Settings** > **Company Information** → **Salesforce.com Organization ID** |
| **Topic** | string | Pub/Sub topic to subscribe to | **Setup** > **Events** > **Event Manager** > **Subscription Channel** |
### Required Secrets
| Secret | Description |
|-----------|-------------|
| **Client ID** | OAuth Client ID from the External Client App (Consumer Key) |
| **Client Secret** | OAuth Client Secret from the External Client App (Consumer Secret) |
## Technical Details
### API Integration
This input uses the [Salesforce Pub/Sub API](https://developer.salesforce.com/docs/platform/pub-sub-api/overview) via GRPC endpoints:
- **Primary Method**: `Subscribe` - Consumes events from the subscription channel
- **Supporting Methods**:
- `GetTopic` - Verifies topic accessibility and configuration
- `GetSchema` - Retrieves the schema for message decoding
### Authentication & Rate Limiting
- **Authentication**: OAuth 2.0 Client Credentials flow
- **Rate Limiting**: Automatically respects Salesforce's API rate limits
- **Connection Management**: Maintains persistent GRPC streaming connections
## Troubleshooting
### Common Issues
1. **No Events Returned**
- Check that the channel has streaming enabled in **Setup** > **Events** > **Event Manager**
2. **Missing Events or Gaps in Events**
- Ensure the channel has storage enabled to retain events in **Setup** > **Events** > **Event Manager**
3. **Authentication Errors**
- Verify **Enable Client Credentials Flow** is enabled in both the External Client App Settings and OAuth Policies
## Related Articles
- [Salesforce Pub/Sub API Documentation](https://developer.salesforce.com/docs/platform/pub-sub-api/references/methods/getschema-rpc.html)
- [Salesforce GRPC AVRO Schema](https://developer.salesforce.com/docs/platform/pub-sub-api/guide/grpc-api.html)
- [Salesforce Protobuf](https://github.com/forcedotcom/pub-sub-api/blob/main/pubsub_api.proto)