如何在Python替代运行时的Gmail插件中获取commonEventObject里的formInputs
解决Gmail插件无法获取commonEventObject中formInputs的问题
问题核心
当前按钮点击请求仅返回hostApp和platform,原因是按钮未关联任何用户输入的表单控件——formInputs仅在存在表单控件且按钮触发时提交表单数据的场景下,才会被包含在请求中。
解决方案步骤
1. 在卡片中添加带name属性的表单控件
需要在插件卡片内添加表单元素(如文本输入框、复选框等),并为每个控件设置唯一的name属性,该属性会作为formInputs中的键。示例卡片结构:
{ "sections": [ { "widgets": [ { "textInput": { "name": "user_input", "label": "请输入内容", "hintText": "输入的内容会随按钮提交" } }, { "buttonList": { "buttons": [ { "text": "提交表单", "onClick": { "action": { "function": "https://myendpointaddress.run.app/click_action", "parameters": [] } } } ] } } ] } ] }
注意:表单控件必须设置
name,否则无法在formInputs中捕获对应值。
2. 修改Flask端点代码解析formInputs
更新Flask代码,解析请求JSON数据并提取formInputs:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/click_action', methods=['POST']) def click_action(): # 解析请求JSON request_data = request.get_json() # 获取commonEventObject common_event = request_data.get('commonEventObject', {}) # 提取formInputs form_inputs = common_event.get('formInputs', {}) # 打印或处理表单数据 print("表单输入数据:", form_inputs) # 示例:提取名为user_input的控件值 user_input = form_inputs.get('user_input', {}).get('stringInputs', {}).get('value', [])[0] if form_inputs.get('user_input') else None print("用户输入内容:", user_input) return jsonify({"status": "success"}), 200
3. 验证请求结构
用户在表单输入内容并点击按钮后,请求的commonEventObject会包含formInputs,结构示例:
"commonEventObject": { "hostApp": "GMAIL", "platform": "WEB", "formInputs": { "user_input": { "stringInputs": { "value": ["用户输入的具体内容"] } } } }
关键说明
formInputs仅在存在用户交互的表单控件时才会被发送,无表单控件的按钮点击不会携带该字段。- 不同类型表单控件(如复选框、下拉框)在
formInputs中的结构略有差异,需根据控件类型解析对应值(比如复选框对应boolInputs)。
内容的提问来源于stack exchange,提问作者Max Kessler
相关产品推荐
相关产品推荐

