You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grandstream PBX提取数据转JSON并通过Webhook发送的实现问题

解决方法

1. 正确解码并拆分字节数据

Grandstream PBX输出的字节数据需先解码为字符串,再按实际分隔符拆分成36个值的列表。先确认PBX输出的分隔符(常见为逗号、空格或制表符),再执行以下代码:

# 替换为你从PBX提取的字节数据
byte_data = b'value1,value2,...,value36'
# 解码为UTF-8字符串并去除首尾空白
raw_str = byte_data.decode('utf-8').strip()
# 按分隔符拆分,此处假设为逗号,需根据实际情况修改
values = raw_str.split(',')

2. 验证键值列表长度匹配

确保你的键列表和拆分后的数值列表长度均为36,避免字典组合时出现数据错位或报错:

# 替换为你的36个键名列表
keys = ['key_name_1', 'key_name_2', ..., 'key_name_36']
# 打印长度进行确认
print(f"键列表长度: {len(keys)}, 值列表长度: {len(values)}")

若长度不一致,要么是分隔符选择错误,要么是键列表存在遗漏/冗余,需先修正此问题。

3. 组合成目标字典

使用zip将键与值配对,转换为字典结构:

payload = dict(zip(keys, values))
# 可选操作:若部分值需要类型转换(如字符串转数字),手动处理
# 示例:payload['call_duration'] = int(payload['call_duration'])

4. 发送符合要求的POST请求

核心是发送JSON格式的请求,而非表单或纯文本。使用requests库时,直接用json参数传入字典,它会自动完成JSON序列化与请求头设置:

import requests

# 替换为你的Zoho Flow Webhook地址
webhook_url = 'https://flow.zoho.com/your-webhook-endpoint'
# 发送请求
response = requests.post(webhook_url, json=payload)

# 打印响应信息用于排查问题
print(f"响应状态码: {response.status_code}")
print(f"响应内容: {response.text}")

若需手动构造请求,也可使用json.dumps序列化字典,同时指定Content-Type请求头:

import json
headers = {'Content-Type': 'application/json'}
response = requests.post(webhook_url, data=json.dumps(payload), headers=headers)

5. 排查Zoho Flow端配置

若请求发送成功(状态码为200/201)但仍报错,检查以下内容:

  • Zoho Flow的Webhook是否设置为接收JSON格式
  • 发送的键名是否与Zoho Flow中配置的字段完全匹配(注意大小写、拼写)
  • 部分字段是否要求特定数据类型(如数字、布尔值),需在Python中提前转换类型

内容的提问来源于stack exchange,提问作者Wagner Franceschi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:15:13