首页 » 博客 » 荷兰短信最佳实践、合规性和功能

荷兰短信最佳实践、合规性和功能

荷兰短信市场概览

区域设置名称: 荷兰
ISO 代码: 荷兰
地区 欧洲
移动国家代码 (MCC) 204
拨号代码 +31

市场状况:荷兰拥有高度发达的移动市场,日本 whatsapp 数据 智能手机普及率几乎达到全球平均水平。虽然 WhatsApp 等 OTT 消息应用程序在 P2P 通信中非常受欢迎,但短信对于商业消息传递仍然至关重要,尤其是用于身份验证、通知和营销。市场由三大运营商主导:KPN、VodafoneZiggo 和 T-Mobile Dutch,拥有强大的基础设施,可满足消费者和 A2P 消息传递需求。


荷兰短信的主要功能和能力

荷兰提供全面的短信功能,包括双向消息、串联支持和号码可携带性,同时对商业消息传递保持严格的合规性要求。

双向短信支持

荷兰全面支持双向短信,让企业能够与客户进行互动消息传递。除了标准合规性要求外,没有其他特殊限制,非常适合客户服务和互动用例。

串联消息(分段短信)

支持:是的,所有主要运营商都完全支持串联。
消息长度规则:GSM-7 编码的标准长度为 160 个字符,UCS-2 编码的标准长度为 70 个字符(拆分前)。
编码注意事项:GSM-7 支持标准拉丁字符,而 UCS-2 适用于包含特殊字符或非拉丁字母的消息。

MMS 支持

MMS 消息会自动转换为 SMS,并嵌入指向媒体内容的 URL 链接。这确保了可靠的交付,同时保持了与收件人共享丰富媒体内容的能力。

收件人电话号码兼容性

号码可携性

号码可携性在荷兰全面可用,允许用户在更换运营商时保留自电话号码业务线索己的电话号码。此功能已非常完善,不会对消息传递或路由产生重大影响。

向固定电话发送短信

荷兰不支持向固定电话号码发送短信。尝试向固定检查是否有拆解电话号码发送消息将导致发送失败,并且 API 将返回 400 响应,错误代码为 21614。这些消息不会出现在日志中,也不会产生费用。

荷兰短信合规与监管指南

荷兰受《GDPR》和《荷兰电信法》的约束,由消费者和市场管理局 (ACM) 监督。企业必须遵守有关数据隐私、同意管理和营销传播的严格规定。

明确同意要求

      • 发送营销信息前必须以书面或数字方式确认选择加入
      • 同意必须是自愿、具体和知情的
      • 建议在营销活动中使用双重选择
      • 必须保存同意记录并方便获取
      • 在选择加入过程中必须明确说明消息传递的目的

HELP/STOP 和其他命令

      • 必须支持荷兰语和英语关键字:
        • STOP/STOPPEN 用于选择退出
        • HELP/HULP 寻求帮助
        • INFO 了解更多信息
      • 命令必须在 24 小时内处理
      • 确认信息应以与收到的命令相同的语言发送

请勿致电/请勿打扰登记

      • 荷兰设有“Bel-me-niet 登记处”(禁止致电登记处)
      • 必须定期与注册中心同步
      • 企业必须:
        • 在活动开始前核对登记册上的数字
        • 至少每 30 天更新一次禁止列表
        • 24 小时内尊重退出请求
        • 维护内部禁止联系名单

时区敏感度

      • 允许发送时间:08:00-21:00 CET
      • 紧急通知不受时间限制
      • 考虑荷兰的假期和周末
      • 在消息传递系统中实现自动传递窗口

荷兰的电话号码选项和短信发件人类型

字母数字发件人 ID

运营商网络能力:完全支持
注册要求:无需预先注册,允许动态使用
发送者 ID 保存:是,发送者 ID 在所有主要网络中均会保存

长代码

国内与国际:均支持完整功能
发件人 ID 保存:是,保留原始发件人 ID 配置
时间:立即至 24 小时
用例

      • 交易消息传递
      • 双重身份验证
      • 客户服务沟通
      • 营销(经同意)

短代码

支持:目前不支持荷兰
配置时间:N/A
使用案例:N/A – 改用长代码或字母数字发件人 ID


受限制的短信内容、行业和用例

限制行业及内容

      • 赌博(除非获得荷兰当局许可)
      • 成人内容或服务
      • 未经授权的金融服务
      • 处方药
      • 未经适当披露的政治信息

内容过滤

运营商过滤规则

      • 链接必须来自批准的域
      • 无过多大写字母
      • 禁止误导性发件人信息
      • 最多向同一收件人发送 5 条连续消息

避免阻塞的最佳实践

      • 使用一致的发件人 ID
      • 保持规律的发送模式
      • 避免使用 URL 缩短器
      • 包括明确的退出说明
      • 保持内容专业且相关

在荷兰发送短信的最佳做法

信息传递策略

      • 尽可能将消息控制在 160 个字符以内
      • 包含明确的号召性用语
      • 使用收件人的名字进行个性化
      • 保持一致的品牌声音
      • 使用跟踪链接进行分析

发送频率和时间

      • 每位收件人每月最多发送 4-5 条消息
      • 尊重安静时间(21:00-08:00 CET)
      • 避免在重大节假日期间发送
      • 太空活动间隔至少 48 小时

本土化

      • 主要语言选项:荷兰语和英语
      • 考虑使用双语信息进行重要沟通
      • 使用正确的日期格式 (DD-MM-YYYY)
      • 考虑文化差异和偏好

退出管理

      • 实时处理退出
      • 发送退出确认
      • 维护集中抑制列表
      • 定期审核退出流程
      • 记录退出日期和方法

测试和监控

      • 在 KPN、VodafoneZiggo 和 T-Mobile 上进行测试
      • 监控承运商的运送费率
      • 跟踪参与度指标
      • 定期对消息内容进行 A/B 测试
      • 保持质量得分高于行业基准

荷兰的 SMS API 集成

Twilio

Twilio 通过其 REST API 为荷兰提供强大的 SMS 功能。身份验证使用帐户 SID 和身份验证令牌,并支持 A2P 消息传递所需的 +3197 前缀号码。

import { Twilio } from 'twilio';

// Initialize client with environment variables
const client = new Twilio(
  process.env.TWILIO_ACCOUNT_SID,
  process.env.TWILIO_AUTH_TOKEN
);

// Function to send SMS to Netherlands
async function sendDutchSMS(
  to: string,
  message: string,
  from: string
): Promise<void> {
  try {
    // Validate Dutch phone number format
    if (!to.startsWith('+31')) {
      throw new Error('Invalid Dutch phone number format');
    }

    const response = await client.messages.create({
      body: message,
      to: to,  // Must be in E.164 format: +31612345678
      from: from, // Your +3197 prefix number
    });

    console.log(`Message sent successfully: ${response.sid}`);
  } catch (error) {
    console.error('Error sending message:', error);
    throw error;
  }
}

辛奇

Sinch 提供全面的短信服务,并可通过 RESTful API 访问。他们的服务支持荷兰的交易信息和营销信息。

import axios from 'axios';

class SinchSMSClient {
  private readonly baseUrl: string;
  private readonly apiToken: string;

  constructor(serviceId: string, apiToken: string) {
    this.baseUrl = `https://sms.api.sinch.com/xms/v1/${serviceId}`;
    this.apiToken = apiToken;
  }

  async sendSMS(to: string, message: string): Promise<void> {
    try {
      const response = await axios.post(
        `${this.baseUrl}/batches`,
        {
          from: 'YourBrand', // Alphanumeric sender ID
          to: [to],
          body: message,
        },
        {
          headers: {
            'Authorization': `Bearer ${this.apiToken}`,
            'Content-Type': 'application/json',
          },
        }
      );

      console.log('Message sent:', response.data.id);
    } catch (error) {
      console.error('Sinch SMS error:', error);
      throw error;
    }
  }
}

信息鸟

MessageBird(原名Bird)提供短信API服务,强力支持荷兰电信的需求。

import messagebird from 'messagebird';

class MessageBirdClient {
  private client: any;

  constructor(apiKey: string) {
    this.client = messagebird(apiKey);
  }

  sendSMS(
    recipient: string,
    message: string,
    originator: string
  ): Promise<void> {
    return new Promise((resolve, reject) => {
      this.client.messages.create({
        originator: originator,
        recipients: [recipient],
        body: message,
        datacoding: 'auto', // Automatic encoding detection
      }, (err: any, response: any) => {
        if (err) {
          reject(err);
        } else {
          resolve(response);
        }
      });
    });
  }
}

API 速率限制和吞吐量

      • Twilio:每秒 250 条消息
      • Sinch:每秒 100 条消息
      • MessageBird:每秒 60 条消息

吞吐量管理策略

      • 实施指数退避重试
      • 使用队列系统(Redis/RabbitMQ)处理大量数据
      • 尽可能批量发送消息
      • 监控速率限制标头

错误处理和报告

interface SMSError {
  code: string;
  message: string;
  timestamp: Date;
  recipient: string;
}

class SMSErrorHandler {
  private errors: SMSError[] = [];

  logError(error: SMSError): void {
    this.errors.push(error);
    console.error(`SMS Error [${error.code}]: ${error.message}`);
    
    // Implement specific error handling based on code
    switch(error.code) {
      case 'invalid_number':
        // Clean up invalid numbers from database
        break;
      case 'rate_limit_exceeded':
        // Implement backoff strategy
        break;
      case 'delivery_failed':
        // Queue for retry
        break;
    }
  }
}

回顾和其他资源

关键要点

      1. 合规第一
        • 始终获得明确同意
        • 24 小时内尊重退出请求
        • 维护适当的文件
      2. 技术要求
        • 使用 +3197 前缀号码进行 A2P 消息传递
        • 实施适当的错误处理
        • 监控配送率
      3. 最佳实践
        • 在工作时间内发送(08:00-21:00 CET)
        • 本地化内容(荷兰语/英语)
        • 定期跨运营商测试

下一步

    1. 审查荷兰电信法
    2. 实施适当的同意管理
    3. 设置监控和报告。
滚动至顶部