跳转到内容

编写指令与发送

在消息中编写指令,通过测试发送确认值后再保存。

指令分为调用 API 的行和使用响应的行。

指令示例、各部分的含义与发送结果


  • 路径和查询字符串中可以使用 {{ userId }}、{{ tags.* }} 等个性化变量。域名部分不能使用。
  • 像电子邮件地址这样可能包含 @、+、& 的值,请用 url_encode 包起来。否则值在传递时可能会被破坏。
✓ Do
{% connected_content https://api.example.com/coupon?uid={{ userId }} %}
{% connected_content https://api.example.com/member?email={{ email | url_encode }} :save member %}
✕ Don’t

域名中包含变量时无法保存。

{% connected_content https://{{ tags.domain }}/coupon %}

请求方式需要填写注意事项
GET只需填写地址-
POST:method post + :body如果只写 :body 而没有 :method post,可以保存,但 body 会被忽略,并以 GET 方式调用
POST · 接收 JSON 的 API:method post + :body + :content_type application/json漏写 :content_type application/json 时,API 无法读取数据,值会以空白发送

POST 示例

收件人的值会填入 :body 中 {{ userId }} 的位置。如果收件人的 userId 是 abc123,就会发送 uid=abc123。

{% connected_content https://api.example.com/recommend :method post :body uid={{ userId | url_encode }} :save rec %}
推荐商品:{{ rec.product_name }}

以 JSON 格式发送时,body 也请按 键=值 的格式填写,并用 url_encode 包住值。FlareLane 会将其转换为 JSON 后发送,即使值中含有引号等特殊字符也不会被破坏。选项较多时,可以分行填写。

✓ Do

即使姓名是 金 "Flare" Lane,也会正确发送为 {"uid": "…", "name": "金 \"Flare\" Lane"}。

{% connected_content https://api.example.com/recommend
:method post
:content_type application/json
:body uid={{ userId | url_encode }}&name={{ name | url_encode }}
:save rec %}
✕ Don’t

如果直接写 JSON,值中含有引号的收件人的 body 会被破坏,API 会返回 400 错误,值以空白发送。

{% connected_content https://api.example.com/recommend
:method post
:content_type application/json
:body {"name": "{{ name }}"}
:save rec %}

  • 将在使用准备步骤中复制好的认证信息附加在地址后面。
  • 一个指令中不能同时使用 Basic 和 Token。
登记的方式选项
Basic:basic_auth 认证名称
Token:auth_credentials 认证名称

响应是 JSON 还是纯文本,由 API 的 Content-Type 响应头决定。请对照开发团队提供的响应示例确认。两种格式的读取方式不同。

区分JSON 响应纯文本响应
值填入的位置写有 {{ 名称.字段 }} 的位置写有指令的位置(整个响应)
:save指定名称。省略时为 connected即使指定,也会输出在指令所在位置
在多处使用可以不可以。如有需要,请让开发团队提供 JSON 响应({"code": "SAVE20-8F3K"})
HTTP 状态码{{ 名称.__http_status_code__ }}不可用

用 :save 指定名称,然后在名称后加点(.)读取字段。同一个值可以在多处使用,之后要增加读取的值也很方便。

{% connected_content https://api.example.com/points?uid={{ userId }} :save point %}
您有 {{ point.amount }} 积分即将过期,请在 {{ point.expires_at }} 前使用。
响应发送的消息
{"amount": 12000, "expires_at": "9月30日"}您有 12000 积分即将过期,请在 9月30日 前使用。

请直接在值要出现的位置写指令。下面的示例通过公开的天气服务填入用户所在城市的当前气温。

今天 {{ tags.city }} 的气温是 {% connected_content https://wttr.in/{{ tags.city }}?format=%t %},出门前请注意穿着!
用户属性响应发送的消息
tags.city = Seoul+17°C今天 Seoul 的气温是 +17°C,出门前请注意穿着!

调用失败时,值的位置会留空。建议从以下三种方式中选择一种提前写好。

想要实现语法须知
显示替代文案(推荐)default:值为空时填入预先设定的文案。
只在有值时显示该句{% if %}可以避免句子读起来别扭。条件语句中也请用字段而不是名称来判断。
不向该收件人发送abort_message用于像优惠券码这样没有值就没有发送意义的情况。计为发送失败,不收费。

如果只想在有值时显示,或者不发送,可以用条件语句判断调用是否失败。判断方法有两种。

判断方法条件须知
字段是否为空point.amount == blank调用失败,或调用成功但该字段为空时,结果为真。
HTTP 状态码point.__http_status_code__ != 200调用失败时状态码为空,结果为真。
该值包含在 JSON 对象响应中,请勿用于返回文本响应的 API。
✕ Don’t

条件语句中也请用字段而不是名称来判断。只写名称会导致消息无法保存。

{% if point == blank %}{% abort_message %}{% endif %}

再次调用同一地址时,不会每次都调用 API,而是在一定时间内复用之前收到的响应。大多数情况下保持默认行为即可,只在需要更改时填写选项。


区分行为
GET 调用同一地址的响应复用 5 分钟。同一项目内,其他消息或活动调用得到的响应也会复用
POST 调用只有填写了 :cache_max_age 时才复用,并且 body 也相同才视为同一次调用
每个收件人值不同地址、body 或 headers 中包含 userId、email、phoneNumber、dob 时不复用
失败的响应不复用,下次调用时重新请求
  • 例如:只包含 tags.city 的天气调用会在同一城市之间复用响应,即使收件人很多,也只按城市数量调用。
  • 同时处理的收件人较多时,即使是同一地址也可能被调用多次。缓存只是减少调用次数,并不保证只调用一次。

适用情况需要填写
像库存这样必须始终是最新值时:no_cache
每个收件人的值都相同,希望复用更久以减少调用次数时:cache_max_age 3600(单位:秒,3600 秒 = 1 小时)
希望复用 POST 响应时:cache_max_age(POST 只有填写此选项才会复用)

:cache_max_age 可设置的范围请查看限额汇总。

  • 建议在发送前通过测试发送确认最终消息。
  • 测试发送与实际发送相同。
    • 会实际调用您的 API。
    • 同样会进行第 5 步的自动检查。
    • 如果指定的号码或电子邮件没有关联的用户,{{ userId }} 等用户信息可能为空。

测试发送页面

第 5 步:发送、定时或保存旅程

Section titled “第 5 步:发送、定时或保存旅程”
  • 在即时发送,以及保存定时发送、周期性发送、旅程自动化、电子邮件模板时,系统会自动检查指令。不符合编写规则时,无法保存或发送。
  • 编写规则请查看保存被拒绝的情况。