语法与规则
编写指令时放在手边参考的页面,汇总了可用选项、保存被拒绝的情况、限额和进阶示例。
| 语法 | 说明 | 不填写时 |
|---|---|---|
:save | 存放响应的名称。JSON 用 {{ 名称.字段 }} 读取 | JSON 存放在 connected 中,文本输出在指令所在位置 |
:method | get 或 post | get |
:body | 以 POST 方式发送的数据。需要与 :method post 一起使用 | 不带数据调用 |
:content_type | 发送数据的格式。JSON body 使用 application/json | 表单格式(application/x-www-form-urlencoded) |
:headers | 以 JSON 对象填写额外的请求头。例如::headers {"X-Store-Id": "123"}如果不是 JSON 格式,则不会调用,按失败处理。认证用的请求头请使用认证信息登记 | 只发送默认请求头 |
:basic_auth | 以 Basic 方式登记的认证信息名称 | 不带认证调用 |
:auth_credentials | 以 Token 方式登记的认证信息名称 | 不带认证调用 |
:cache_max_age | 响应复用时间,单位为秒。如果每个收件人的值都相同,可以设置得长一些以减少调用次数 | 默认缓存规则(参考设置响应复用) |
:no_cache | 每次都重新调用。用于像库存这样必须始终是最新的值 | 使用缓存 |
default: | 值为空时显示的文案(个性化消息中已有的过滤器) | 以空白发送 |
{% abort_message %} | 不向该收件人发送 | 即使为空也发送 |
保存被拒绝的情况
Section titled “保存被拒绝的情况”| 保存被拒绝的情况 | 解决方法 |
|---|---|
| Liquid 语法错误,不支持的过滤器或标签 | 请检查括号是否成对以及过滤器名称 |
| 不支持的选项,选项值错误 | :method 只能使用 get 或 post:cache_max_age 以秒为单位填写(例如:3600)暂不支持 :retry(即将支持) |
| 超过每条消息的调用次数 | 标题、内容等所有字段合计最多只能写 3 个。 |
| for 循环中的指令 | 请在循环外调用一次,再循环遍历响应数组(见下方示例 4) |
| 调用地址的域名中包含个性化变量 | 调用地址的域名中不能使用个性化变量 请固定域名,只在路径或查询中使用变量 |
| 只使用保存的名称而没有写字段 | 请像 {{ point.amount }} 这样写到字段,而不是 {{ point }} |
| 认证信息问题 | 请确认名称是否已登记,方式(Basic · Token)与选项(:basic_auth · :auth_credentials)是否匹配,允许的域名是否与调用地址完全一致 |
| 项目 | 限额 |
|---|---|
| 每条消息的调用次数 | 标题、内容等所有字段合计 3 个 · 每个指令计为 1 个。即使因为字段不同而重复写了同一地址,也分别计算 · {% if %} 分支中的指令无论是否执行都会计算· 旅程自动化中每个消息动作 3 个 |
| 每次调用的最长等待时间 | 2 秒 |
| 响应大小 | 1MB |
| 调用地址长度 | 变量替换后 2048 个字符 |
| 响应缓存保留时间 | · GET 默认 5 分钟 · POST 仅在指定 :cache_max_age 时· :cache_max_age 可指定范围为 300 秒(5 分钟)~ 14400 秒(4 小时)。超出范围的值会按最接近的限值应用 |
| 认证信息登记数量 | 每个项目 10 个 |
以下示例适合在掌握基本用法后参考。
示例 1:在标题和内容中使用同一个值
Section titled “示例 1:在标题和内容中使用同一个值”用 :save 保存的名称只能在写有该指令的字段内使用。如果要在标题和内容这样的不同字段中使用,请在每个字段中分别写指令。地址相同时会复用缓存的响应。
标题
{% connected_content https://api.example.com/products/{{ tags.wishlist_sku }} :save product %}您收藏的 {{ product.name }} 降价了。内容
{% connected_content https://api.example.com/products/{{ tags.wishlist_sku }} :save product %}现在只需 {{ product.price | number_with_delimiter }} 即可入手。示例 2:将前一个响应用于下一次调用
Section titled “示例 2:将前一个响应用于下一次调用”指令从上到下依次执行,因此可以把先保存的值用在下一个调用地址中。前一个调用结束后才会开始下一个调用,所以等待时间会累加。
{% connected_content https://api.example.com/me?uid={{ userId }} :save me %}{% connected_content https://api.example.com/orders/{{ me.id }} :save orders %}{{ me.name }},您共有 {{ orders.total }} 笔订单示例 3:根据条件调用不同的 API
Section titled “示例 3:根据条件调用不同的 API”在 {% if %} 中也可以调用,两个分支使用同一个名称也没有问题。名称中存放的是实际执行的那一侧的响应。
{% if tags.vip %} {% connected_content https://api.example.com/vip-deals :save deals %}{% else %} {% connected_content https://api.example.com/normal-deals :save deals %}{% endif %}今日特价:{{ deals.title }}示例 4:用循环显示响应列表
Section titled “示例 4:用循环显示响应列表”指令在循环外只调用一次,再用循环显示获取到的列表。
{% connected_content https://api.example.com/reco?uid={{ userId }} :save reco %}为您推荐的商品:
{% for item in reco.items %}- {{ item.title }} {{ item.price | number_with_delimiter }}{% endfor %}