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

RPGLE中使用IBM i QSYS2 SQL HTTP函数调用Twilio发短信报21604错误

RPGLE调用QSYS2 SQL HTTP函数对接Twilio发短信报21604错误解决方案

核心错误根因

你写的两段代码都存在直接触发报错的问题,具体如下:

  • 两段代码的Content-Type头均存在拼写错误:你配置的是application/x-www-form-urlencode,末尾缺少字母d,正确值为application/x-www-form-urlencoded。该拼写错误会导致Twilio服务端不会按表单格式解析请求体,所有传入的参数都会被丢弃,直接返回「缺少To号码」的21604错误。
  • 变量传参版本额外错误:Twilio的消息发送接口不支持JSON格式请求体,你用JSON_OBJECT生成JSON串作为请求内容,即使Content-Type拼写正确,服务端也无法解析到任何参数。
  • 全硬编码版本额外错误:收发信号码未加+开头的完整国家码前缀,不符合Twilio的号码格式规范,即使请求头正确也会触发号码校验错误。

排查修正步骤

  • 第一步修正Content-Type拼写:将options配置里的application/x-www-form-urlencode改为application/x-www-form-urlencoded,不要多字少字。
  • 第二步修正请求体格式:放弃JSON格式请求体,必须拼接为key=value&key=value的标准URL编码表单格式;短信内容、号码等参数值建议用QSYS2.URL_ENCODE函数做转义,避免特殊字符(空格、&、中文等)导致参数解析失败。
  • 第三步修正号码格式:所有传入的To、From号码必须以+开头,后跟完整国家码+手机号,例如中国手机号格式为+86185xxxxxxxx,美国Twilio号码格式为+194xxxxxxxx,不能省略+号。
  • 第四步校验鉴权配置:你用的basicAuth格式是正确的,注意账号SID和鉴权Token之间的逗号前后不要加空格,避免鉴权失败。
  • 额外环境校验:确认IBM i分区已开启TLS 1.2及以上版本支持、有访问外网的权限,Twilio接口不支持低版本TLS协议。

可直接运行的正确代码示例

dcl-s account_Sid varchar(40) inz('AC替换为你的Twilio账号SID');
dcl-s auth_Token varchar(40) inz('替换为你的Twilio鉴权Token');
dcl-s url varchar(2000);
dcl-s request varchar(2000);
dcl-s response varchar(5000);
dcl-s options varchar(1000);
dcl-s to_num varchar(20) inz('+86185xxxxxxxx'); // 替换为实际收件人号码,带+和国家码
dcl-s from_num varchar(20) inz('+194xxxxxxxx');  // 替换为你在Twilio申请的发信号码
dcl-s sms_content varchar(1000) inz('This is a test text');

// 拼接URL编码表单格式请求体
exec sql
  values 'To=' concat QSYS2.URL_ENCODE(:to_num)
         concat '&From=' concat QSYS2.URL_ENCODE(:from_num)
         concat '&Body=' concat QSYS2.URL_ENCODE(:sms_content)
  into :request;

// 拼接请求地址
url = 'https://api.twilio.com/2010-04-01/Accounts/' 
       concat account_Sid 
       concat '/Messages.json';

// 配置请求头和鉴权,注意Content-Type拼写
options = '{"basicAuth":"' concat account_Sid concat ',' concat auth_Token concat '",'
          concat '"header":"content-type,application/x-www-form-urlencoded"}';

// 发起POST请求
exec sql
  values QSYS2.HTTP_POST(:url, :request, :options)
  into :response;

// 调试时可放开下面行打印返回结果
// dsply response;

调试技巧

如果修正后仍有问题,可以先把拼接完成的request、options、url变量值打印出来,用接口调试工具构造完全一致的请求发送,先排除参数拼接错误,再排查IBM i侧的系统配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:31:11