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

Oracle APEX调用Twilio发送模板WhatsApp时Content Variables参数报错

问题:Oracle APEX调用Twilio发送带内容模板的WhatsApp消息报错21656

调用APEX_WEB_SERVICE.MAKE_REST_REQUEST发送带内容模板的WhatsApp消息时,返回以下错误:

{"code":21656,"message":"The Content Variables parameter is invalid.","more_info":"https://www.twilio.com/docs/errors/21656","status":400}

原代码如下:

DECLARE
  l_url        VARCHAR2(4000) := 'https://api.twilio.com/2010-04-01/Accounts/ACXXXX/Messages.json';
  l_username   VARCHAR2(100) := 'ACXXXX';
  l_password   VARCHAR2(100) := 'edXXX';
  l_clob       CLOB;
BEGIN
  -- Send POST request using APEX_WEB_SERVICE
  l_clob := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
    p_url         => l_url,
    p_http_method => 'POST',
    p_username    => l_username,
    p_password    => l_password,
    p_parm_name   => APEX_UTIL.STRING_TO_TABLE('To,From,ContentSid,ContentVariables', ','),
    p_parm_value  => APEX_UTIL.STRING_TO_TABLE(
                      'whatsapp:+905554443322,whatsapp:+905553332211,HX5f23e0b8005cb01e555a3887d17,{"1":"Mustafa Turhan","2":"0d039dea3bf260bda8951e63"}', ','
                    )
  );

  -- Log response
  DBMS_OUTPUT.put_line('Response:');
  DBMS_OUTPUT.put_line(DBMS_LOB.SUBSTR(l_clob, 4000, 1));

EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('Error: ' || SQLERRM);
END;

解决方法

错误原因是APEX_UTIL.STRING_TO_TABLE按逗号分割参数值时,ContentVariables的JSON字符串内部包含逗号,导致该参数被错误拆分成多个不完整的片段,Twilio无法识别。以下两种方法可以解决:

方法1:直接构造表单格式请求体

手动拼接x-www-form-urlencoded格式的请求体,避免参数拆分错误:

DECLARE
  l_url        VARCHAR2(4000) := 'https://api.twilio.com/2010-04-01/Accounts/ACXXXX/Messages.json';
  l_username   VARCHAR2(100) := 'ACXXXX';
  l_password   VARCHAR2(100) := 'edXXX';
  l_clob       CLOB;
  l_body       VARCHAR2(4000);
BEGIN
  -- 构造x-www-form-urlencoded格式请求体
  l_body := 'To=whatsapp:%2B905554443322' ||
            '&From=whatsapp:%2B905553332211' ||
            '&ContentSid=HX5f23e0b8005cb01e555a3887d17' ||
            '&ContentVariables={"1":"Mustafa Turhan","2":"0d039dea3bf260bda8951e63"}';
  
  -- 发送POST请求
  l_clob := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
    p_url         => l_url,
    p_http_method => 'POST',
    p_username    => l_username,
    p_password    => l_password,
    p_body        => l_body,
    p_headers     => APEX_UTIL.STRING_TO_TABLE('Content-Type:application/x-www-form-urlencoded', ':')
  );

  -- 输出响应
  DBMS_OUTPUT.put_line('Response:');
  DBMS_OUTPUT.put_line(DBMS_LOB.SUBSTR(l_clob, 4000, 1));

EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('Error: ' || SQLERRM);
END;

方法2:使用请求对象添加参数

通过APEX_WEB_SERVICE.T_REQUEST对象逐个添加参数,避免逗号拆分问题:

DECLARE
  l_url        VARCHAR2(4000) := 'https://api.twilio.com/2010-04-01/Accounts/ACXXXX/Messages.json';
  l_username   VARCHAR2(100) := 'ACXXXX';
  l_password   VARCHAR2(100) := 'edXXX';
  l_clob       CLOB;
  l_request    APEX_WEB_SERVICE.T_REQUEST;
BEGIN
  -- 初始化请求对象
  l_request := APEX_WEB_SERVICE.init_request;
  
  -- 逐个添加参数,不会被逗号拆分
  APEX_WEB_SERVICE.add_parameter(
    p_request => l_request,
    p_name    => 'To',
    p_value   => 'whatsapp:+905554443322'
  );
  APEX_WEB_SERVICE.add_parameter(
    p_request => l_request,
    p_name    => 'From',
    p_value   => 'whatsapp:+905553332211'
  );
  APEX_WEB_SERVICE.add_parameter(
    p_request => l_request,
    p_name    => 'ContentSid',
    p_value   => 'HX5f23e0b8005cb01e555a3887d17'
  );
  APEX_WEB_SERVICE.add_parameter(
    p_request => l_request,
    p_name    => 'ContentVariables',
    p_value   => '{"1":"Mustafa Turhan","2":"0d039dea3bf260bda8951e63"}'
  );
  
  -- 发送POST请求
  l_clob := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
    p_url         => l_url,
    p_http_method => 'POST',
    p_username    => l_username,
    p_password    => l_password,
    p_request     => l_request
  );

  -- 输出响应
  DBMS_OUTPUT.put_line('Response:');
  DBMS_OUTPUT.put_line(DBMS_LOB.SUBSTR(l_clob, 4000, 1));

EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('Error: ' || SQLERRM);
END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:50:20