测试过,不支持带端口的接口,去掉端口试下,如果还不行 应该就是没有配置ssl证书的原因https://developers.weixin.qq.com/community/develop/doc/000a68f7440958d95f00286fd6f400 可以参考
请问服务接口调用要怎么配置呢?请问下服务接口调用要怎么操作,在postman里可以正常调用,但是在平台上调试没有反馈。请问针对下述的接口要怎么在平台上做配置呢 我的接口是http://124.220.201.83:9122/ext/api/v2/processService/running?processServiceId=1783236056957184&accessKey=p0eHVw0i&signature=smxjRN8pJXkyS5Ajk%2B6lZg8WInc%3D&signatureMethod=1.0 要传的请求体是 { "params": [], "output": [], "version": "v1.0.8", "comments": "/", "resolution": "2560x1440", "outputParams": [], "assignUser": "" }
2023-08-08已解决,统一回复下。 先贴一下目前自己调试的接口。 # -*- coding: utf-8 -*- import re from flask import Flask, request, jsonify, make_response app = Flask(__name__) @app.route('/api/data', methods=['POST' , 'GET']) def get_data(**kwargs): # 根据请求内容类型获取数据 if request.content_type == 'application/json': input_param = request.json.get('a') data = request.json else: data = request.form json_str = next(iter(data)) # 去除额外的引号和转义字符 json_str = json_str.replace("'", "").replace("\\", "") # 使用正则表达式匹配所有参数的键和值 matches = re.findall(r'"([a-zA-Z]+)":\s*"([^"]+)"', json_str) # 将匹配结果转换成字典 params_dict = dict(matches) # 提取'a'、'b'、'c'等参数的值 a_value = params_dict.get('a', None) # b_value = params_dict.get('b', None) # c_value = params_dict.get('c', None) input_param = a_value # 构建响应 # 如果input_param为空,返回错误码,否则返回输入参数 if input_param: response = {"err_code": 0, "data_list": [{"b": input_param}]} else: response = {"err_code": -1, "data_list": [{"b": "输入参数为空"}]} headers = {"Content-Type": "application/json"} # 设置响应头 print(request.remote_addr) # 把原始请求的所有信息打印出来 print(request.headers) # 输出请求的数据 print(data) # print(matches) # print(params_dict) print(request.content_type) print(input_param) print(response) return jsonify(response), headers # 返回响应并包含响应头 if __name__ == '__main__': app.run(host='0.0.0.0', port=9000) 1、调试的请求与机器人实际的请求是不一样的,希望官方可以解决一下。 调试接口的请求,分别打印出来:请求头+请求数据+content_type类型+请求参数值+返回的json值 # print(request.headers) Host: 82.156.156.216:9000 Connection: close Content-Length: 14 Accept: application/json Content-Type: application/json {'a': '你好'} application/json 你好 {'err_code': 0, 'data_list': [{'b': '你好'}]} 82.156.156.216 - - [19/Jul/2023 17:10:55] "POST /api/data HTTP/1.0" 200 - 实际的机器人请求为如下:包括请求头+请求参数(ImmutableMultiDict对象)+自己通过正则表达式提取出的请求参数+content_type类型+请求参数值+返回的json值 Host: 82.156.156.216:9000 Connection: close Content-Length: 282 User-Agent: Mozilla/4.0 Accept: */* Appid: 637616 Bid: 637616 Requestid: 1aea0b4c Uid: o9U-85vJFgD35SZqN349lzOwljDQ Content-Type: application/x-www-form-urlencoded Pragma: no-cache ImmutableMultiDict([('{"_3rdparth_proxy_http_header_":{"appid":"637616","bid":"637616","open_id":"o9U-85vJFgD35SZqN349lzOwljDQ","requestid":"1aea0b4c","uid":"o9U-85vJFgD35SZqN349lzOwljDQ"},"a":"123","encryptText":"rxRSYavLozf2S5W9FnHfkr1bFmhUO4V1n1sF7xkSYOJInd3mts9dDxdSzJTYoZRO7mQfatiLVA94uSYiiFjVNg', '="}')]) [('appid', '637616'), ('bid', '637616'), ('requestid', '1aea0b4c'), ('uid', 'o9U-85vJFgD35SZqN349lzOwljDQ'), ('a', '123')] {'appid': '637616', 'bid': '637616', 'requestid': '1aea0b4c', 'uid': 'o9U-85vJFgD35SZqN349lzOwljDQ', 'a': '123'} application/x-www-form-urlencoded 123 {'err_code': 0, 'data_list': [{'b': '123'}]} 2、官方文档有些滞后了,希望可以同步更新一下。 最后复读机的效果: [图片] 2023-07-20 又发现了一个问题。 先贴修改后的代码吧 # -*- coding: utf-8 -*- import json import re from urllib.parse import unquote from flask import Flask, request, jsonify, make_response app = Flask(__name__) @app.route('/api/data', methods=['POST' , 'GET']) def get_data(**kwargs): # 根据请求内容类型获取数据 if request.content_type == 'application/json': input_param = request.json.get('a') data = request.json else: data = request.form # 将ImmutableMultiDict转换为字符串 req_str = str(data) escaped_a = req_str.replace("',", "\\',") escaped_a = escaped_a.replace("'=", "\\'=") # 使用正则表达式匹配所有参数的键和值 matches = re.findall(r'"([a-zA-Z]+)":\s*"([^"]+)"', escaped_a) # 将匹配结果转换成字典 params_dict = dict(matches) # 提取'a'、'b'、'c'等参数的值 a_value = params_dict.get('a', None) # b_value = params_dict.get('b', None) # c_value = params_dict.get('c', None) input_param = a_value # 构建响应 # 如果input_param为空,返回错误码,否则返回输入参数 if input_param: response = {"err_code": 0, "data_list": [{"b": input_param}]} else: response = {"err_code": -1, "data_list": [{"b": "输入参数为空"}]} headers = {"Content-Type": "application/json"} # 设置响应头 print(request.remote_addr) # 把原始请求的所有信息打印出来 print(request.headers) # 输出请求的数据 print(data) # print(matches) # print(params_dict) print(request.content_type) print(input_param) print(response) return jsonify(response), headers # 返回响应并包含响应头 if __name__ == '__main__': app.run(host='0.0.0.0', port=9000) 以上是修改后的代码,如果机器人有多个参数请求的话,会发现chengshi与jidu、zhibiaomingcheng之间穿插了一个encrypttext,如果在用之前的处理方式就取不到后边的参数。需要先将ImmutableMultiDict转换为字符串,在使用正则表达式匹配所有参数的键和值,将匹配结果转换成字典,最后提取'a'、'b'、'c'等参数的值。如此可解决多参数入参的问题。 ImmutableMultiDict([('{"_3rdparth_proxy_http_header_":{"appid":"z8N4QmokUby0eAjIXqZmaNA0AdnTMu","bid":"637616","open_id":"QiIptcHkwmX","requestid":"2b7e2c6a","uid":"QiIptcHkwmX"},"chengshi":"济南市","encryptText":"rxRSYavLozf2S5W9FnHfkksFptN1tItyRhS2QYEbPsOafxKGFgC47It3L3WPnwY6qZZKxkSv2HxTsIdC31Ojtw', '=","jidu":"2022年4季度","zhibiaomingcheng":"GDP"}')])
第三方接口调用,调试通过,但是调试无法回复,提示未配置回复是怎么回事?机器人ID:fair7a905 [图片][图片][图片][图片]
2023-07-19解决了吗?遇到了同样的问题
高级技能第三方服务接口,调试一直报错,应该怎么查日志?参考文档配置第三方服务接口调用,调试一直失败,帮忙看看是什么原因 https://developers.weixin.qq.com/doc/aispeech/platform/3rdparty_api.html 接口:https://655mhvvaj2.hk.aircode.run/openai?q=test 机器人ID: burst2a06b 账号ID: yYXB1Lthx3C 错误消息: [图片]
2023-07-17在为机器人设置服务接口调用后,会从 OpenAI 后端向指定的 URL 发起带有配置的参数的 GET 请求。API后端应在收到请求后,返回 JSON 响应,形式如下: { "err_code": 0, // 状态码,仅做对话流程中的状态控制,可在获得响应后区分下一步操作 "data_list": [ { // 目前返回信息需要包裹在 `data_list` 中唯一对象内,里面的值是可以读取到槽位内的,供后续流程或回答使用 "param_a": "content_a", // 参数,可在获得响应后填充进对应语义槽 "param_b": "content_b" } ] } 注意:需要在接口返回的 reponse-header中 ,添加 [代码]Content-Type: application/json[代码] 响应信息,否则在对话过程中, 机器人将不能正确接受接口返回值
微信智能对话平台,机器人回答调用第三方的api,总是返回的null?之前返回成功,answer也没有值 [图片] [图片] [图片]
2023-07-12