Class MetaMessageService

java.lang.Object
com.bytedesk.social.meta.MetaMessageService

@Service public class MetaMessageService extends Object
Meta平台消息服务 用于发送各种类型的消息到Meta平台 限制: 标准消息时间范围指的是 24 小时的时段,在此期间,您可向用户发送消息 消息模板: https://developers.facebook.com/docs/messenger-platform/send-messages/templates https://developers.facebook.com/docs/messenger-platform/send-messages
  • Field Details

    • restTemplate

      private final org.springframework.web.client.RestTemplate restTemplate
    • GRAPH_API_BASE_URL

      private static final String GRAPH_API_BASE_URL
      See Also:
    • API_VERSION

      private static final String API_VERSION
      See Also:
  • Constructor Details

    • MetaMessageService

      public MetaMessageService()
  • Method Details

    • sendTextMessage

      public boolean sendTextMessage(String pageId, String recipientId, String text, String pageAccessToken)
      发送基础文本消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      text - 消息文本
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendImageMessage

      public boolean sendImageMessage(String pageId, String recipientId, String imageUrl, String pageAccessToken)
      发送图片消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      imageUrl - 图片URL
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendMultipleImagesMessage

      public boolean sendMultipleImagesMessage(String pageId, String recipientId, List<String> imageUrls, String pageAccessToken)
      发送多张图片消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      imageUrls - 图片URL列表
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendAudioMessage

      public boolean sendAudioMessage(String pageId, String recipientId, String audioUrl, String pageAccessToken)
      发送音频消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      audioUrl - 音频URL
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendVideoMessage

      public boolean sendVideoMessage(String pageId, String recipientId, String videoUrl, String pageAccessToken)
      发送视频消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      videoUrl - 视频URL
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendFileMessage

      public boolean sendFileMessage(String pageId, String recipientId, String fileUrl, String pageAccessToken)
      发送文件消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      fileUrl - 文件URL
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendButtonTemplateMessage

      public boolean sendButtonTemplateMessage(String pageId, String recipientId, String text, List<Map<String,Object>> buttons, String pageAccessToken)
      发送按钮模板消息 https://developers.facebook.com/docs/messenger-platform/reference/templates/button
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      text - 消息文本
      buttons - 按钮列表
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendTypingOnAction

      public boolean sendTypingOnAction(String pageId, String recipientId, String pageAccessToken)
      发送输入中状态
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendMarkSeenAction

      public boolean sendMarkSeenAction(String pageId, String recipientId, String pageAccessToken)
      发送已读状态
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendRequest

      private boolean sendRequest(String url, Map<String,Object> requestBody, String recipientId)
      发送请求到Meta平台
      Parameters:
      url - API端点URL
      requestBody - 请求体
      recipientId - 接收者ID
      Returns:
      发送结果
    • validateMessageParams

      private boolean validateMessageParams(String pageId, String recipientId, String pageAccessToken)
      发送消息前的通用验证
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      pageAccessToken - 页面访问令牌
      Returns:
      验证结果
    • prepareMessageRequest

      private Map.Entry<String,Map<String,Object>> prepareMessageRequest(String pageId, String recipientId, String pageAccessToken)
      发送消息前的通用准备
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      pageAccessToken - 页面访问令牌
      Returns:
      请求URL和请求体
    • sendMessage

      public boolean sendMessage(String pageId, String recipientId, String messageType, Object messageContent, String pageAccessToken)
      发送消息的通用方法
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      messageType - 消息类型
      messageContent - 消息内容
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendMessageWithFallback

      public boolean sendMessageWithFallback(String pageId, String recipientId, String messageType, Object messageContent, String pageAccessToken, String fallbackMessage)
      发送消息并处理错误
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      messageType - 消息类型
      messageContent - 消息内容
      pageAccessToken - 页面访问令牌
      fallbackMessage - 失败时的备用消息
      Returns:
      发送结果
    • sendCouponTemplateMessage

      public boolean sendCouponTemplateMessage(String pageId, String recipientId, String title, String couponCode, String subtitle, String couponUrl, String couponUrlButtonTitle, String couponPreMessage, String imageUrl, String payload, String pageAccessToken)
      发送优惠券模板消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      title - 优惠券标题
      couponCode - 优惠券代码
      subtitle - 优惠券副标题
      couponUrl - 优惠券URL
      couponUrlButtonTitle - 优惠券按钮标题
      couponPreMessage - 优惠券前置消息
      imageUrl - 图片URL
      payload - 额外信息
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendCustomerFeedbackTemplateMessage

      public boolean sendCustomerFeedbackTemplateMessage(String pageId, String recipientId, String title, String subtitle, String buttonTitle, List<Map<String,Object>> feedbackScreens, String privacyUrl, Integer expiresInDays, String pageAccessToken)
      发送客户反馈模板消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      title - 模板标题
      subtitle - 模板副标题
      buttonTitle - 按钮标题
      feedbackScreens - 反馈屏幕配置
      privacyUrl - 隐私政策URL
      expiresInDays - 过期天数(1-7)
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendTemplateMessage

      public boolean sendTemplateMessage(String pageId, String recipientId, String templateType, Map<String,Object> templatePayload, String pageAccessToken, String messageTag)
      发送通用模板消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      templateType - 模板类型
      templatePayload - 模板负载
      pageAccessToken - 页面访问令牌
      messageTag - 消息标签(可选)
      Returns:
      发送结果
    • sendGenericTemplateMessage

      public boolean sendGenericTemplateMessage(String pageId, String recipientId, List<Map<String,Object>> elements, String pageAccessToken)
      发送常规模板消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      elements - 模板元素列表(最多10个)
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendMediaTemplateMessageWithAttachmentId

      public boolean sendMediaTemplateMessageWithAttachmentId(String pageId, String recipientId, String mediaType, String attachmentId, List<Map<String,Object>> buttons, String pageAccessToken)
      发送媒体模板消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      mediaType - 媒体类型(image|video)
      attachmentId - 附件ID
      buttons - 按钮列表(最多3个)
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendMediaTemplateMessageWithUrl

      public boolean sendMediaTemplateMessageWithUrl(String pageId, String recipientId, String mediaType, String facebookUrl, List<Map<String,Object>> buttons, String pageAccessToken)
      发送媒体模板消息(使用Facebook URL)
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      mediaType - 媒体类型(image|video)
      facebookUrl - Facebook媒体URL
      buttons - 按钮列表(最多3个)
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • isValidFacebookUrl

      private boolean isValidFacebookUrl(String url)
      验证是否为有效的Facebook网址
      Parameters:
      url - 要验证的URL
      Returns:
      是否为有效的Facebook网址
    • sendProductTemplateMessage

      public boolean sendProductTemplateMessage(String pageId, String recipientId, List<String> productIds, String pageAccessToken)
      发送商品模板消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      productIds - 商品ID列表(最多10个)
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendReceiptTemplateMessage

      public boolean sendReceiptTemplateMessage(String pageId, String recipientId, String recipientName, String orderNumber, String currency, String paymentMethod, String orderUrl, String timestamp, Map<String,String> address, Map<String,Object> summary, List<Map<String,Object>> adjustments, List<Map<String,Object>> elements, String pageAccessToken)
      发送回执模板消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      recipientName - 收件人姓名
      orderNumber - 订单号
      currency - 货币代码
      paymentMethod - 支付方式
      orderUrl - 订单链接
      timestamp - 订单时间戳
      address - 地址信息
      summary - 订单汇总
      adjustments - 调整项列表
      elements - 订单项目列表
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendStructuredInformationTemplateMessage

      public boolean sendStructuredInformationTemplateMessage(String pageId, String recipientId, List<String> countries, String privacyUrl, Integer expiresInDays, List<Map<String,Object>> addressOverrides, List<Map<String,Object>> contactOverrides, String purpose, String pageAccessToken)
      发送结构化信息模板消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      countries - 国家代码列表
      privacyUrl - 隐私政策URL
      expiresInDays - 过期天数(1-7)
      addressOverrides - 地址字段覆盖
      contactOverrides - 联系信息字段覆盖
      purpose - 模板用途(默认SHIPPING)
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendAttachmentConfirmationTemplate

      public void sendAttachmentConfirmationTemplate(String pageId, String recipientId, String attachmentUrl, String pageAccessToken)
      发送附件确认模板消息(测试功能) 向用户发送一个带有确认按钮的模板消息,询问用户是否确认附件
      Parameters:
      pageId - Meta页面ID
      recipientId - 接收者ID
      attachmentUrl - 附件URL
      pageAccessToken - 页面访问令牌
    • sendTextMessageWithQuickReplies

      public boolean sendTextMessageWithQuickReplies(String pageId, String recipientId, String text, List<Map<String,Object>> quickReplies, String pageAccessToken)
      发送带快速回复的文本消息
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      text - 消息文本
      quickReplies - 快速回复列表
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendNotificationMessagesSubscription

      public boolean sendNotificationMessagesSubscription(String pageId, String recipientId, String title, String imageUrl, String payload, String timezone, String pageAccessToken)
      发送营销消息订阅请求
      Parameters:
      pageId - 页面ID
      recipientId - 接收者ID
      title - 订阅标题
      imageUrl - 图片URL
      payload - 额外信息
      timezone - 时区
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • sendNotificationMessage

      public boolean sendNotificationMessage(String pageId, String notificationMessagesToken, Object messageContent, String pageAccessToken)
      发送营销消息
      Parameters:
      pageId - 页面ID
      notificationMessagesToken - 通知消息令牌
      messageContent - 消息内容(可以是文本或附件)
      pageAccessToken - 页面访问令牌
      Returns:
      发送结果
    • setPageLevelPersistentMenu

      public boolean setPageLevelPersistentMenu(String pageId, List<Map<String,Object>> persistentMenu, String pageAccessToken)
      设置页面级固定菜单
      Parameters:
      pageId - 页面ID
      persistentMenu - 固定菜单配置
      pageAccessToken - 页面访问令牌
      Returns:
      设置结果
    • setUserLevelPersistentMenu

      public boolean setUserLevelPersistentMenu(String pageId, String psid, List<Map<String,Object>> persistentMenu, String pageAccessToken)
      设置用户级固定菜单
      Parameters:
      pageId - 页面ID
      psid - 用户PSID
      persistentMenu - 固定菜单配置
      pageAccessToken - 页面访问令牌
      Returns:
      设置结果
    • setGetStartedButton

      public boolean setGetStartedButton(String pageId, String pageAccessToken)
      设置"开始"按钮 这是使用固定菜单的必需条件
      Parameters:
      pageId - 页面ID
      pageAccessToken - 页面访问令牌
      Returns:
      设置结果