如何让IBM Watson实例读取IBM Cloud Functions调用Give API返回的数据
实现IBM Watson读取IBM Cloud Functions返回的表单标题数据
一、现有Cloud Functions函数(修正后)
原函数存在参数获取逻辑错误,已修正为规范的参数传递方式:
import requests import json def main(args): # 获取传入的API密钥与令牌 api_key = args.get('api_key') api_token = args.get('api_token') api_url = 'https://juntospornaturaleza.profonanpe.org.pe/give-api/forms/' # 发送请求至Give API headers = { 'Authorization': f'Token {api_key}:{api_token}', 'Content-Type': 'application/json' } response = requests.get(api_url, headers=headers) response.raise_for_status() # 捕获HTTP请求异常 # 解析响应并提取表单标题 data = response.json() form_titles = [form['info']['title'] for form in data['forms']] # 返回处理结果 return {'form_titles': form_titles}
函数执行结果
触发函数后,返回的有效数据如下:
{ "form_titles": [ "#RecuperoMiMar", "#AnimalFans", "Apadrina una taricaya, conserva Pacaya" ] }
二、实现Watson读取返回数据的步骤
1. 配置Cloud Functions权限
确保你的Watson服务(如Watson Assistant、Watson Discovery)拥有调用该Cloud Functions动作的权限:
- 进入IBM Cloud控制台的Cloud Functions页面,找到目标动作。
- 在「权限」标签页中,添加对应的Watson服务ID,授予
functions:action:invoke权限。
2. 以Watson Assistant为例调用并读取数据
- 打开Watson Assistant技能编辑器,选择需要触发数据读取的对话框节点。
- 添加「调用动作」,选择「调用IBM Cloud Functions动作」,选中你部署的目标函数。
- 在参数配置栏中,填入
api_key和api_token的值(建议通过IBM Cloud Secrets Manager存储敏感信息,避免硬编码)。 - 调用完成后,Watson会自动获取返回的
form_titles数组,你可以在后续节点中通过$form_titles变量访问该数据,例如遍历数组展示每个表单标题。
3. 其他Watson服务适配方式
如果使用Watson Discovery处理文本:
- 可以在Cloud Functions函数中新增代码,调用Watson Discovery的文档上传API,将
form_titles作为文本内容传入Discovery集合。 - 或者在Discovery中配置Webhook,触发Cloud Functions动作并直接接收返回数据。
关键注意事项
- 敏感信息禁止硬编码,建议存储在Cloud Functions环境变量或IBM Cloud Secrets Manager中,通过
os.getenv('API_KEY')方式读取。 - 确保Watson服务与Cloud Functions处于同一IBM Cloud区域,降低跨区域调用延迟。
- 完善错误处理逻辑,例如当Give API请求失败时,返回明确的错误信息,便于Watson处理异常场景。
内容的提问来源于stack exchange,提问作者Ben oscco arias
相关产品推荐
相关产品推荐

