全部产品
云市场

第十课:服务型机器人的使用方法

更新时间:2019-09-18 15:38:57

image.png
大概框架如上图所示

1. 创建服务型机器人应用

在Studio里面创建一个服务型机器人应用,编写代码并配置好 参数面板 ,然后发布到企业应用市场。

参数的获取,按照正常的应用写法获取参数。 rpa.params[“myInput”]参数的返回,调用提供的API,把应用的结果返回。rpa.workbench.task_result(resStr)


image.png
image.png
image.png

2.获取应用

应用调起者登陆控制台,并在企业应用市场里找到已发布的应用,并点击 获取应用
image.png

3.查看应用接口

应用调起者登陆控制台,并在企业应用市场里找到已发布的应用,并点击 查看接口

接口url中的rpahost用控制台的域名替换

image.png

4.获取AK信息

应用调起者在控制台的 系统设置 查看AK信息
image.png

5.调用服务型机器人应用

详情说明请查看服务型机器人使用说明
用Postman调用接口,说明一下服务型机器人应用调用的过程,具体步骤如下:

  1. 新建一个POST请求,请求地址为服务型机器人应用的接口链接,记得替换rpahost为自己控制台的域名
  2. 在Headers中填写AK信息
  3. 在Body中填写请求的信息,按表单方式提交数据
  4. 根据请求结果中的taskId查询当前的任务运行状态
  5. 根据请求结果中的resultUrl查询请求结果

查询任务运行状态和任务的运行结果都是GET请求,记得在Headers中填写AK信息。如果请求时写了回调地址且回调地址可用时,运行结果返回给回调地址,过后再主动查询是不会得到运行结果的,意思是主动查询和写回调地址只能二选一,目前是这样的。

image.png
image.png
image.png
image.png

python实现服务型机器人应用调用的示例:

  1. from rpa.core import *
  2. from rpa.utils import *
  3. import rpa
  4. import requests
  5. from urllib3 import encode_multipart_formdata
  6. import json
  7. from datetime import datetime
  8. RPAHOST = "rpa-demo.allinbots.com"
  9. ACCESSKEY = "54f7261d92756a85"
  10. ACCESSKEYSECRET = "b485d705-91e9-426d-b8d2-3f0b3c19551e"
  11. def start():
  12. """
  13. 1、从控制台获取服务型机器人的接口,记得修改rpahost
  14. 2、从控制台的系统设置中获取AK信息
  15. 3、向接口连接发一个post请求,将AK信息添加到头参数中,body中可以传参数和调起制定电脑的服务型机器人
  16. 4、从返回的json数据中提取resultUrl,向这个resultUrl发一个get请求,获取服务型机器人执行后的结果
  17. """
  18. rpa.datatable.clear()
  19. # url为服务型机器人的接口
  20. url = "http://{rpahost}/rpa/api/ak/server/call/40e1d35a-1967-409a-a67f-8077329d7adb".format(rpahost=RPAHOST)
  21. # headers里添加ak信息
  22. headers = {"accessKey": ACCESSKEY,
  23. "accessKeySecret": ACCESSKEYSECRET,
  24. "Content-Type":"application/x-www-form-urlencoded"}
  25. # body里appParams对于服务型机器人应用中的数据面板中的参数,robotName对应开启服务型机器人电脑的名字
  26. body = {"config":r'{"appParams":"{\"myInput\":\"码栈\"}","robotName":"GUOJING622E","callbackUrl": "http://129.204.89.219/rpa/received"}'}
  27. write_datatable("body:{}".format(json.dumps(body)))
  28. # 发送一个port请求,调用服务型机器人应用
  29. r = requests.post(url, headers=headers,data=body)
  30. write_datatable("r.headers: {}".format(r.headers))
  31. write_datatable("r.status_code: {}".format(r.status_code))
  32. write_datatable("r.text: {}".format(r.text))
  33. if "没有空闲的服务机器人" in json.loads(r.text)["msg"]:
  34. rpa.alert.msgbox("提示", "没有空闲的服务机器人")
  35. # 获取返回的json数据,数据中包含参看服务型机器人的状态taskId,和获取服务型机器人应用结果的请求的接口resultUrl
  36. body = json.loads(r.text)
  37. write_datatable('body["data"]: {}'.format(body["data"]))
  38. result_url = "http://{rpahost}".format(rpahost=RPAHOST) + body["data"]['resultUrl']
  39. write_datatable("resultUrl: {}".format(result_url))
  40. robot_status_url = "http://{rpahost}/rpa/api/ak/server/task/status/".format(rpahost=RPAHOST) + body["data"]["taskId"]
  41. write_datatable("robot_status_url: {}".format(robot_status_url))
  42. while True:
  43. # 查看服务型机器人的状态
  44. r_robot_status = requests.get(robot_status_url, headers=headers)
  45. write_datatable("r_robot_status.text: {}".format(r_robot_status.text))
  46. r_robot_status_data = json.loads(r_robot_status.text)
  47. write_datatable("{}".format(r_robot_status_data["data"]))
  48. robot_status = r_robot_status_data["data"]["status"]
  49. write_datatable("robot status:{}".format(robot_status))
  50. # 当机器人运行状态为completion时,任务运行完成,可以查看任务运行结果
  51. if "completion" in robot_status:
  52. r_result = requests.get(result_url, headers=headers)
  53. write_datatable("r_result.text:{}".format(r_result.text))
  54. r_result_data = json.loads(r_result.text)['data']
  55. if r_result_data != None:
  56. write_datatable("运行结果: {}".format(r_result_data))
  57. break
  58. # 在数据视图中添加记录
  59. def write_datatable(str):
  60. now = datetime.today().strftime("%Y-%m-%d %H:%M:%S")
  61. rpa.datatable.addrow([now,str])
  62. rpa.datatable.scrollindex(len(rpa.datatable))

6.上传文件接口的使用说明

调用地址:http://rpa-demo.allinbots.com/rpa/api/ak/server/uploadFile
请求方式:multipart/form-data

请求头记得添加AK信息记得修改成自己的RPA服务端的域名

参数key **类 **请求方 **是否必 **
file File FormParam 上传的文件

用Postman调用文件上传接口的示例:
image.png
image.png

python实现文件上传的示例:

  1. from rpa.core import *
  2. from rpa.utils import *
  3. import rpa
  4. import requests
  5. from urllib3 import encode_multipart_formdata
  6. import json
  7. from datetime import datetime
  8. def upload():
  9. rpa.datatable.clear()
  10. filepath = r'C:\temp\test.xlsx' # 待上传的文件
  11. rpahost= "http://rpa-demo.allinbots.com" # 服务器的域名,用于与文件的url拼接
  12. request_url = "http://rpa-demo.allinbots.com/rpa/api/ak/server/uploadFile"
  13. #ak信息从控制台的 系统设置 中获取
  14. headers = {"accessKey":"54f7261d92756a85",
  15. "accessKeySecret":"b485d705-91e9-426d-b8d2-3f0b3c19551e",
  16. "Content-Type":"application/x-www-form-urlencoded"}
  17. _data = {}
  18. filename = "test.xls"
  19. url = rpahost + post_files(request_url, headers, _data, filename, filepath)
  20. write_datatable(url)
  21. def post_files(url,header,data,filename,filepath):
  22. """
  23. url: 请求地址
  24. header: 请求头
  25. data: 请求body
  26. filename: 上传文件的文件名
  27. filepath:上传文件的完整路径
  28. return: 文件上传成功后的下载链接
  29. """
  30. data['file']= (filename,open(filepath,'rb').read())
  31. encode_data = encode_multipart_formdata(data)
  32. data = encode_data[0]
  33. header['Content-Type'] = encode_data[1]
  34. r = requests.post(url, headers=header, data=data)
  35. write_datatable("r.headers: {}".format(r.headers))
  36. write_datatable("r.status_code: {}".format(r.status_code))
  37. write_datatable("r.text: {}".format(r.text))
  38. result_data = json.loads(r.text)["data"]
  39. if result_data:
  40. return result_data["url"]
  41. else:
  42. return None
  43. # 在数据视图中添加记录
  44. def write_datatable(str):
  45. now = datetime.today().strftime("%Y-%m-%d %H:%M:%S")
  46. rpa.datatable.addrow([now,str])
  47. rpa.datatable.scrollindex(len(rpa.datatable))

服务人机器人调用DEMO.rpp.zip
服务人机器人应用DEMO.rpp.zip