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

如何授权Zadarma API?解决n8n调用时401未授权问题

解决Zadarma API外呼401未授权问题(n8n环境)

核心问题分析

你遇到的401错误大概率来自签名生成逻辑的疏漏,结合Zadarma官方签名规则,你的代码存在以下几个关键问题:

  1. 未定义API_USER_KEY变量,导致认证头缺失关键信息
  2. 查询参数未强制按字典序排序(Zadarma要求参数必须按键名字典序排列)
  3. Base64编码可能产生多余换行,破坏签名完整性

修正后的签名生成代码

API_USER_KEY='{{$json["api_user_key"]}}'
API_SECRET_KEY='{{$json["api_secret_key"]}}'
METHOD='/v1/request/callback/'
FROM='{{$json["from"]}}'
TO='{{$json["to"]}}'
SIP='{{$json["sip"] || ""}}'
PRED='{{$json["predicted"] || ""}}'

# 按字典序收集参数片段
QS_PARTS=()
[ -n "$FROM" ] && QS_PARTS+=("from=${FROM}")
[ -n "$PRED" ] && QS_PARTS+=("predicted=${PRED}")
[ -n "$SIP" ] && QS_PARTS+=("sip=${SIP}")
[ -n "$TO" ] && QS_PARTS+=("to=${TO}")

# 排序后拼接成完整查询字符串
IFS='&' QS="${QS_PARTS[*]}"
unset IFS

# 生成查询字符串的MD5哈希(小写)
MD5Q=$(printf "%s" "$QS" | md5sum | awk '{print $1}')
# macOS环境请替换为:MD5Q=$(printf "%s" "$QS" | openssl md5 | awk '{print $2}')

# 生成签名,避免Base64自动换行
SIG=$(printf "%s%s%s" "$METHOD" "$QS" "$MD5Q" | openssl dgst -sha1 -hmac "$API_SECRET_KEY" -binary | base64 -A)
# macOS环境请替换Base64部分为:| base64 -b 0

URL="https://api.zadarma.com${METHOD}?${QS}"
AUTH="${API_USER_KEY}:${SIG}"

printf '{"url":"%s","authorization":"%s"}' "$URL" "$AUTH"

n8n配置步骤

  1. 添加Shell节点,粘贴上述代码,确保输入JSON包含api_user_key、api_secret_key、from、to等必填字段
  2. 添加HTTP Request节点,设置请求方法为GET,URL填写{{$json["url"]}}
  3. 在HTTP Request节点的Headers中新增Authorization头,值填写{{$json["authorization"]}}
  4. 执行流程测试,验证外呼请求是否成功

额外排查点

  • 确认API_USER_KEY和API_SECRET_KEY无复制错误或多余空格
  • 检查from号码格式是否符合Zadarma要求(需带国家码,如+123456789)
  • 验证SIP账号在Zadarma平台已激活且具备外呼权限
  • 可本地用Zadarma官方签名逻辑对比生成结果,确认签名正确性

内容的提问来源于stack exchange,提问作者Mookie loves Cookie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 12:55:54