Salesforce MIAW MCP服务器
将ChatGPT连接到您的Salesforce增强聊天(MIAW-应用内和网络消息),这样您的AI助手就可以无缝地将对话传递给Salesforce代理(包括代理机器人和人工代理)。
🎯 这有什么作用
此MCP(模型上下文协议)服务器使ChatGPT能够:
- 与Salesforce代理开始消息会话
- 实时发送和接收消息
- 处理人工智能聊天机器人和人类代理之间的传输
- 显示实时聊天小部件 当转移到人类代理时
- 结束聊天会话 两侧均适当
- 检测代理何时结束聊天 并通知用户
- 在整个切换过程中保持对话上下文
非常适合您的ChatGPT助手需要专家帮助或遇到超出其范围的问题。
⚡ 快速开始
先决条件
- Salesforce组织 启用了增强聊天(MIAW)
- 在消息设置中配置和部署应用内和Web频道的消息 - 已配置并发布嵌入式服务部署 确保将其配置为“自定义客户端” - 配置全渠道路由和流(代理-人工升级) - 通过配置出站全通道连接激活代理 - 已配置Live Agent消息通道
- Herold帐户
- 注册或登录 heroku.com - 创建一个应用程序来托管MCP服务器,命名为:“miaw MCP Server”
- ChatGPT Plus或团队
- 对于MCP连接器:在设置中启用开发人员模式 - 对于自定义GPT:创建自己的自定义GPT
- 已安装工具
- Git - Node.js 18+(用于本地测试,可选)
步骤1:获取Salesforce凭据
您需要从Salesforce组织中获取三条信息(最容易找到所有这些信息的是Setup→ 嵌入式服务部署→ 您的部署→ 安装代码段→ 聊天代码片段):
- SCRT网址 (Salesforce聊天运行时URL)
- 格式: https://your-org-url.my.salesforce-scrt.com
- 嵌入式服务开发人员姓名
- 例子: Target_Messaging_for_In_App_and_Web
- 组织ID
- 例子: 00DHu000000p8j3R
步骤2:从Github部署到Heroku并克隆
- 转到您制作的Heroku应用程序→ “部署”选项卡→ 所有命令向下滚动到“使用Heroku Git部署”
- 在您最喜欢的IDE中,打开一个新终端
- 通过键入“Git Clone”克隆Git存储库https://github.com/skyrmionz/miaw-mcp-server.git“然后按Enter键
- 键入:“heroku登录”,然后按Enter键→ 按照提示进行身份验证
- 通过检查您是否在“miaw-mcp-server”中来确保您在正确的目录中,如果不是,请键入:“cd miaw-mcp server”并按Enter键
cd miaw-mcp-server
git init
heroku git:remote -a chatgpt-components
git add .
git commit -am "(enter your comment here)"
git push heroku main之后,您仍然需要在Heroku应用程序中设置环境变量,这是您之前获得的:
- 再次访问Heroku应用程序→ “设置”选项卡→ 向下滚动到“配置变量”→ “显示配置变量”或开始添加环境变量。
- 添加以下环境变量:
Key: MCP_TRANSPORT | Value: http
Key: MIAW_ES_DEVELOPER_NAME | Value: (Your Embedded Service Deployment API Name)
Key: MIAW_ORG_ID | Value: (Your Org ID)
Key: MIAW_SCRT_URL | Value: (Your Org's SCRT URL)步骤3:连接到ChatGPT
部署到ChatGPT:
- 转到ChatGPT→ 个人资料→ 设置→ 应用程序和连接器→ 高级设置→ 开发者模式“开启”→ Back
- 点击右上角的“创建”
- 为图标添加图像(可选)
- 命名您的连接器
- 添加说明(ChatGPT应如何/何时使用连接器?)
- 在“MCP服务器URL”中输入您的Heroku URL:
https://your-app-name.herokuapp.com/mcp - 将身份验证设置为“无身份验证”
- 勾选“我理解并想继续…”框
- 点击“创建”按钮
- 完成!连接器将连接到您的ChatGPT
- 测试一下连接!
🚀 运作原理
对话流程
sequenceDiagram
User->>ChatGPT: "I need help with my order"
ChatGPT->>MCP Server: generate_guest_access_token()
MCP Server->>Salesforce: Request access token
Salesforce-->>MCP Server: Access token
MCP Server-->>ChatGPT: sessionId
ChatGPT->>MCP Server: create_conversation(sessionId)
MCP Server->>Salesforce: Create conversation
Salesforce-->>MCP Server: conversationId
ChatGPT->>MCP Server: list_conversation_entries(sessionId, conversationId)
MCP Server->>Salesforce: Poll for messages (every 500ms, up to 25s)
Salesforce-->>MCP Server: Chatbot greeting
MCP Server-->>ChatGPT: "Hi! How can I help?" + _roleInfo.isLiveAgent=false
ChatGPT->>User: "Hi! How can I help?"
User->>ChatGPT: "Connect me to a live agent"
ChatGPT->>MCP Server: send_message(sessionId, conversationId, text)
MCP Server->>Salesforce: Send message + Route to agent
ChatGPT->>MCP Server: list_conversation_entries(sessionId, conversationId)
MCP Server->>Salesforce: Poll for agent response
Salesforce-->>MCP Server: Live agent greeting + _roleInfo.isLiveAgent=true
MCP Server-->>ChatGPT: Agent name + isLiveAgent=true
ChatGPT->>MCP Server: show_salesforce_chat(sessionId, conversationId, agentName)
MCP Server-->>ChatGPT: Live Chat Widget displayed
Note over User,ChatGPT: User now chats directly in widget实时代理小部件
当人工代理加入对话时,ChatGPT会自动显示一个嵌入式聊天小部件:
- 实时消息 -消息立即出现
- 代理商信息 -显示代理名称和首字母
- 结束聊天按钮 -用户可以结束会话
- 自动检测 -知道代理何时结束聊天
- 风格化界面 -与ChatGPT匹配的专业聊天UI
服务器端轮询
服务器智能地处理轮询,因此ChatGPT不必:
- 当
list_conversation_entries被调用时,服务器会在内部轮询每个 500毫秒 - 等待至 25秒 (Heroku的30秒超时-5秒缓冲)
- 当出现非“自动流程”消息时立即返回
- 自动过滤掉系统消息
- ChatGPT只接收最终结果
这意味着ChatGPT总是能得到及时的代理响应,而无需复杂的轮询逻辑!
🛠️ 地方发展
# Install dependencies
npm install
# Set environment variables
cp .env.example .env
# Edit .env with your Salesforce credentials
# Build
npm run build
# Run locally (stdio mode for testing with Claude Desktop)
npm start
# Or run HTTP mode (for testing with curl)
MCP_TRANSPORT=http PORT=3000 node dist/index.js使用cURL进行测试
# Health check
curl http://localhost:3000/
# Initialize MCP
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
# List tools
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# Call generate_guest_access_token
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":3,
"method":"tools/call",
"params":{
"name":"generate_guest_access_token",
"arguments":{"appName":"Test App","clientVersion":"1.0.0"}
}
}'🐛 故障排除
“创建连接器时出错”或“连接已关闭”
解决方案: 确保您的Heroku应用程序正在使用 /mcp 端点:
https://your-app-name.herokuapp.com/mcp令牌生成时“请求失败,状态代码为400”
原因: Salesforce配置无效。
解决方案:
- 验证
MIAW_SCRT_URL正确(无尾随斜线) - 验证
MIAW_ES_DEVELOPER_NAME与Salesforce完全匹配 - 验证
MIAW_ORG_ID是您当前的组织ID
会话创建时“请求失败,状态代码为401”
原因: 会话已过期或无效。
解决方案: 使用生成新会话 generate_guest_access_token
ChatGPT说“赛琳娜回复:…”而不仅仅是消息
原因: 自定义GPT中缺少指令。
解决方案: 将“关键消息规则”部分复制到自定义GPT的指令字段中。
消息延迟到达或根本没有到达
原因: 服务器端轮询可能需要调整。
解决方案: 检查Heroku日志:
heroku logs --tail --app your-app-name查找“轮询非自动流程消息…”日志。
“请求超时”(30s+)
原因: 没有可用的代理或响应非常慢。
解决方案:
- 确保代理在Salesforce中在线
- 检查代理容量设置
- 在Salesforce中验证路由配置
结束聊天按钮不起作用/404错误
原因: API终结点路径不正确。
解决方案: 服务器现在使用正确的Salesforce MIAW API端点:
DELETE /conversation/{id}/session?esDeveloperName={name}-结束消息会话DELETE /conversation/{id}?esDeveloperName={name}-结束对话
确保你的 MIAW_ES_DEVELOPER_NAME 环境变量设置正确。
代理结束聊天,但小部件不更新
原因: 小部件未检测到“代理已结束聊天”消息。
解决方案: 服务器现在检测到来自“自动流程”的消息,其中包含:
- “代理已结束聊天”
- “聊天已结束”
- “对话已结束”
小部件将自动显示“代理已结束此聊天会话”并禁用输入。
实时聊天小部件未出现
原因: show_salesforce_chat 打电话太早或 isLiveAgent 未检测到。
解决方案:
- 检查
_roleInfo.isLiveAgent是true打电话之前show_salesforce_chat - 仅在以下情况下呼叫
mostRecentSenderRole是“代理”(不是“聊天机器人”)
📚 资源
🤝 贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
📄 许可证
MIT许可证-请参阅 许可证 详细信息文件
🙏 致谢
内置:
- @模型上下文协议/sdk
- Express.js
- 阿西奥斯
- Salesforce增强型聊天(MIAW)API
💬 支持
- 问题:
- 讨论:
- Salesforce帮助: 开拓者社区
______________________________________________________________________
由...制作❤️ Salesforce和AI社区
