如何在Twilio中无需消息模板在24小时会话内使用WhatsApp按钮或列表选项
问题解答
结论
可以实现。你看到的Twilio文档中要求使用消息模板的规则仅适用于主动向未发起过对话、或对话已超出24小时回复窗口的用户发消息的场景,只要当前处于用户主动发起的24小时会话窗口期内,无需使用预审核的消息模板,就可以直接发送带按钮、列表选项的交互式消息。
Java SDK使用方法
前置准备
引入8.x及以上版本的Twilio Java SDK,Maven依赖配置示例:
<dependency> <groupId>com.twilio</groupId> <artifactId>twilio</artifactId> <version>8.41.0</version> <!-- 可替换为最新稳定版 --> </dependency>
示例1:发送带快速回复按钮的交互式消息
import com.twilio.Twilio; import com.twilio.rest.api.v2010.account.Message; import com.twilio.type.PhoneNumber; import com.twilio.type.whatsapp.Interactive; import com.twilio.type.whatsapp.interactive.Action; import com.twilio.type.whatsapp.interactive.Button; import com.twilio.type.whatsapp.interactive.Body; import java.util.Arrays; public class WhatsAppButtonExample { public static final String ACCOUNT_SID = "你的Twilio账户SID"; public static final String AUTH_TOKEN = "你的Twilio账户认证令牌"; public static void main(String[] args) { Twilio.init(ACCOUNT_SID, AUTH_TOKEN); // 构造按钮 Button button1 = Button.builder( Button.Type.REPLY, "btn_001", // 按钮回调ID "确认订单" // 按钮显示文本 ).build(); Button button2 = Button.builder( Button.Type.REPLY, "btn_002", "修改地址" ).build(); Button button3 = Button.builder( Button.Type.REPLY, "btn_003", "取消订单" ).build(); // 构造交互式消息内容 Interactive interactive = Interactive.builder( Interactive.Type.BUTTON, Action.builder().buttons(Arrays.asList(button1, button2, button3)).build(), Body.builder().text("你提交的订单已生成,请选择后续操作:").build() ).build(); // 发送消息 Message message = Message.creator( new PhoneNumber("whatsapp:+8613xxxxxxxxx"), // 收件人号码,带国家码 new PhoneNumber("whatsapp:+1xxxxxxxxx"), // 你的Twilio WhatsApp发件号码 interactive ).create(); System.out.println(message.getSid()); } }
示例2:发送带列表选项的交互式消息
import com.twilio.Twilio; import com.twilio.rest.api.v2010.account.Message; import com.twilio.type.PhoneNumber; import com.twilio.type.whatsapp.Interactive; import com.twilio.type.whatsapp.interactive.Action; import com.twilio.type.whatsapp.interactive.Body; import com.twilio.type.whatsapp.interactive.ListSection; import com.twilio.type.whatsapp.interactive.ListItem; import java.util.Arrays; public class WhatsAppListExample { public static final String ACCOUNT_SID = "你的Twilio账户SID"; public static final String AUTH_TOKEN = "你的Twilio账户认证令牌"; public static void main(String[] args) { Twilio.init(ACCOUNT_SID, AUTH_TOKEN); // 构造列表选项 ListItem item1 = ListItem.builder("item_001", "普通快递").description("预计3-5天送达,免运费").build(); ListItem item2 = ListItem.builder("item_002", "次日达").description("预计24小时内送达,运费12元").build(); ListItem item3 = ListItem.builder("item_003", "定时配送").description("可指定送货时间段,运费20元").build(); ListSection section = ListSection.builder("配送方式").rows(Arrays.asList(item1, item2, item3)).build(); // 构造交互式消息内容 Interactive interactive = Interactive.builder( Interactive.Type.LIST, Action.builder() .button("选择配送方式") // 列表触发按钮的显示文本 .sections(Arrays.asList(section)) .build(), Body.builder().text("请选择你需要的配送方式:").build() ).build(); // 发送消息 Message message = Message.creator( new PhoneNumber("whatsapp:+8613xxxxxxxxx"), new PhoneNumber("whatsapp:+1xxxxxxxxx"), interactive ).create(); System.out.println(message.getSid()); } }
注意事项
- 所有操作必须确认对话处于用户主动发起的24小时回复窗口期内,超出窗口后发送任何交互式消息都需要使用预审核通过的模板
- 按钮、列表的内容需要符合WhatsApp平台的内容规范,避免包含违规信息
- 收发件人号码必须按照
whatsapp:+[国家码][手机号码]的格式填写,不能省略国家码
内容的提问来源于stack exchange,提问作者Chandra
相关产品推荐
相关产品推荐

