我有一个树莓派的设置,需要能够接收JSON(从Salesforce)。 我不是很熟悉JSON,但我相信这是可能的REST API。
反正,我已经下载的烧瓶中加入应该能为我做这些的。 当它收到这个JSON,我需要它有一个Python脚本,或在为这个剧本我已经有设置相同的工作方式工作。 (这是脚本: 在这里 )。 该脚本远程控制一些电源插座,我想Salesforce来能够把一个一个,触发时。 到目前为止,我可以控制从一个网络接口电源,即使用URL变量,或者从形式POST。 这一切运作良好。
我只是在最后阶段,也是一个我至少经历,会是什么JSON的Salesforce可以像发送样子? 如何解析这个并使其控制通过Python电源插座?
你的计划是这样的:
[Salesforce的<---> [烧瓶API] < - > [树莓PI]
Salesforce的将创建一个必须被发送到您的水壶API,随着树莓交互JSON消息。
我看你有树莓PI的相互作用准备,所以你应该创建瓶端点从外部触发。
作为一对夫妇烧瓶端点中的一个示例:
# define a "power ON api endpoint"
@app.route("/API/v1.0/power-on/<deviceId>",methods=['POST'])
def powerOnDevice(deviceID):
payload = {}
#get the device by id somehow
device = devices.get(deviceId)
# get some extra parameters
# let's say how long to stay on
params = request.get_json()
try:
device.turn_on(params['durationinminutes'])
payload['success'] = True
return payload
except:
payload['success'] = False
# add an exception description here
return payload
# define a "power OFF api endpoint"
@app.route("/API/v1.0/power-off/<deviceId>",methods=['POST'])
def powerOffDevice(deviceID):
payload = {}
#get the device by id somehow
device = devices.get(deviceId)
try:
device.turn_off()
payload['success'] = True
return payload
except:
payload['success'] = False
# add an exception description here
return payload
在销售队伍方面,你需要创建一个对象结构来跟踪设备,但是我想表明什么是发送JSON消息,您的水壶API所需的APEX代码。
你将有一个DevicesController类,将有将从visualforce网页触发方法让我们说Devices.page
举个例子你就必须在设备上打开的方法:
// this should return something but for the sake of simplicity
public void turnDeviceOn(String externalDeviceId, Integer durationInMinutes){
# generate json message
JSONGenerator gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeIntegerField('durationinminutes', durationInMinutes);
gen.writeEndObject();
# generate http request
HttpRequest req = new HttpRequest();
req.setMethod('POST');
# this endpoint must be added as a remote endpoint in Salesforce org setup!
req.setEndpoint('http://yourapiurl/API/v1.0/power-on/'+externalDeviceId);
req.setBody(gen.getAsString());
HTTPResponse res = h.send(req);
}
请注意,这是一个基本的Salesforce < - >瓶API的例子。 你需要添加一个认证机制,并更好地控制对整个流程。
编辑:
既然你问,如果这可以被添加到您的代码, 我已经分叉的回购和整合这瓶端点码到您的power.py文件。 最好的解决办法是,你应该把它放在一个分隔的类并在不同的文件处理路由,但可全在一起,使你的想法。 您可以克隆它,安装瓶模块:
pip install flask
并与执行:
python power.py
然后加入测试端点:
curl -X POST http://localhost:5000/API/v1.0/power-on/<deviceid>