docs: add notebook for langchain-salesforce package (#29800)

**Description:**  
This PR adds a Jupyter notebook that explains the features,
installation, and usage of the
[`langchain-salesforce`](https://github.com/colesmcintosh/langchain-salesforce)
package. The notebook includes:
- Setup instructions for configuring Salesforce credentials  
- Example code demonstrating common operations such as querying,
describing objects, creating, updating, and deleting records

**Issue:**  
N/A

**Dependencies:**  
No new dependencies are required.

**Tests and Docs:**  
- Added an example notebook demonstrating the usage of the
`langchain-salesforce` package, located in `docs/docs/integrations`.

**Lint and Test:**  
- Ran `make format`, `make lint`, and `make test` successfully.

---------

Co-authored-by: Chester Curme <chester.curme@gmail.com>
This commit is contained in:
Cole McIntosh 2025-02-16 06:34:57 -07:00 committed by GitHub
parent 60f58df5b3
commit 6874c9c1d0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 324 additions and 0 deletions

View File

@ -0,0 +1,19 @@
# Salesforce
[Salesforce](https://www.salesforce.com/) is a cloud-based software company that
provides customer relationship management (CRM) solutions and a suite of enterprise
applications focused on sales, customer service, marketing automation, and analytics.
[langchain-salesforce](https://pypi.org/project/langchain-salesforce/) implements
tools enabling LLMs to interact with Salesforce data.
## Installation and Setup
```bash
pip install langchain-salesforce
```
## Tools
See detail on available tools [here](/docs/integrations/tools/salesforce/).

View File

@ -0,0 +1,300 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "563f3174",
"metadata": {},
"source": [
"# Salesforce\n",
"\n",
"Tools for interacting with Salesforce.\n",
"\n",
"## Overview\n",
"\n",
"This notebook provides examples of interacting with Salesforce using LangChain.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Setup\n",
"\n",
"1. Install the required dependencies:\n",
"```bash\n",
" pip install langchain-salesforce\n",
"```\n",
"\n",
"2. Set up your Salesforce credentials as environment variables:\n",
"\n",
"```bash\n",
" export SALESFORCE_USERNAME=\"your-username\"\n",
" export SALESFORCE_PASSWORD=\"your-password\" \n",
" export SALESFORCE_SECURITY_TOKEN=\"your-security-token\"\n",
" export SALESFORCE_DOMAIN=\"test\" # Use 'test' for sandbox, remove for production\n",
"```\n",
"\n",
"These environment variables will be automatically picked up by the integration.\n",
"\n",
"## Getting Your Security Token\n",
"If you need a security token:\n",
"1. Log into Salesforce\n",
"2. Go to Settings\n",
"3. Click on \"Reset My Security Token\" under \"My Personal Information\"\n",
"4. Check your email for the new token"
]
},
{
"cell_type": "markdown",
"id": "dd32d0d8",
"metadata": {},
"source": [
"## Instantiation"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "117ecaf8",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"\n",
"from langchain_salesforce import SalesforceTool\n",
"\n",
"username = os.getenv(\"SALESFORCE_USERNAME\", \"your-username\")\n",
"password = os.getenv(\"SALESFORCE_PASSWORD\", \"your-password\")\n",
"security_token = os.getenv(\"SALESFORCE_SECURITY_TOKEN\", \"your-security-token\")\n",
"domain = os.getenv(\"SALESFORCE_DOMAIN\", \"login\")\n",
"\n",
"tool = SalesforceTool(\n",
" username=username, password=password, security_token=security_token, domain=domain\n",
")"
]
},
{
"cell_type": "markdown",
"id": "28c1a13e",
"metadata": {},
"source": [
"## Invocation"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e75623af",
"metadata": {},
"outputs": [],
"source": [
"def execute_salesforce_operation(\n",
" operation, object_name=None, query=None, record_data=None, record_id=None\n",
"):\n",
" \"\"\"Executes a given Salesforce operation.\"\"\"\n",
" request = {\"operation\": operation}\n",
" if object_name:\n",
" request[\"object_name\"] = object_name\n",
" if query:\n",
" request[\"query\"] = query\n",
" if record_data:\n",
" request[\"record_data\"] = record_data\n",
" if record_id:\n",
" request[\"record_id\"] = record_id\n",
" result = tool.run(request)\n",
" return result"
]
},
{
"cell_type": "markdown",
"id": "d761883a",
"metadata": {},
"source": [
"## Query\n",
"This example queries Salesforce for 5 contacts."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5fb2e42b",
"metadata": {},
"outputs": [],
"source": [
"query_result = execute_salesforce_operation(\n",
" \"query\", query=\"SELECT Id, Name, Email FROM Contact LIMIT 5\"\n",
")"
]
},
{
"cell_type": "markdown",
"id": "b917c89e",
"metadata": {},
"source": [
"## Describe an Object\n",
"Fetches metadata for a specific Salesforce object."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ef6ca50c",
"metadata": {},
"outputs": [],
"source": [
"describe_result = execute_salesforce_operation(\"describe\", object_name=\"Account\")"
]
},
{
"cell_type": "markdown",
"id": "40ed4656",
"metadata": {},
"source": [
"## List Available Objects\n",
"Retrieves all objects available in the Salesforce instance."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a7114bbc",
"metadata": {},
"outputs": [],
"source": [
"list_objects_result = execute_salesforce_operation(\"list_objects\")"
]
},
{
"cell_type": "markdown",
"id": "6619fe12",
"metadata": {},
"source": [
"## Create a New Contact\n",
"Creates a new contact record in Salesforce."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1e15980d",
"metadata": {},
"outputs": [],
"source": [
"create_result = execute_salesforce_operation(\n",
" \"create\",\n",
" object_name=\"Contact\",\n",
" record_data={\"LastName\": \"Doe\", \"Email\": \"doe@example.com\"},\n",
")"
]
},
{
"cell_type": "markdown",
"id": "f8801882",
"metadata": {},
"source": [
"## Update a Contact\n",
"Updates an existing contact record."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2f4bd54c",
"metadata": {},
"outputs": [],
"source": [
"update_result = execute_salesforce_operation(\n",
" \"update\",\n",
" object_name=\"Contact\",\n",
" record_id=\"003XXXXXXXXXXXXXXX\",\n",
" record_data={\"Email\": \"updated@example.com\"},\n",
")"
]
},
{
"cell_type": "markdown",
"id": "46dd7178",
"metadata": {},
"source": [
"## Delete a Contact\n",
"Deletes a contact record from Salesforce."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "31830f80",
"metadata": {},
"outputs": [],
"source": [
"delete_result = execute_salesforce_operation(\n",
" \"delete\", object_name=\"Contact\", record_id=\"003XXXXXXXXXXXXXXX\"\n",
")"
]
},
{
"cell_type": "markdown",
"id": "7f094544",
"metadata": {},
"source": [
"## Chaining"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0e997f71",
"metadata": {},
"outputs": [],
"source": [
"from langchain.prompts import PromptTemplate\n",
"from langchain_openai import ChatOpenAI\n",
"from langchain_salesforce import SalesforceTool\n",
"\n",
"tool = SalesforceTool(\n",
" username=username, password=password, security_token=security_token, domain=domain\n",
")\n",
"\n",
"llm = ChatOpenAI(model=\"gpt-4o-mini\")\n",
"\n",
"prompt = PromptTemplate.from_template(\n",
" \"What is the name of the contact with the id {contact_id}?\"\n",
")\n",
"\n",
"chain = prompt | tool.invoke | llm\n",
"\n",
"result = chain.invoke({\"contact_id\": \"003XXXXXXXXXXXXXXX\"})"
]
},
{
"cell_type": "markdown",
"id": "b8467ae7",
"metadata": {},
"source": [
"## API reference\n",
"[langchain-salesforce README](https://github.com/colesmcintosh/langchain-salesforce/blob/main/README.md)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -429,6 +429,11 @@ packages:
repo: langchain-ai/langchain
downloads: 9521
downloads_updated_at: '2025-02-13T23:35:48.490391+00:00'
- name: langchain-salesforce
path: .
repo: colesmcintosh/langchain-salesforce
downloads: 0
downloads_updated_at: '2025-02-13T23:35:48.490391+00:00'
- name: langchain-discord-shikenso
path: .
repo: Shikenso-Analytics/langchain-discord