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

希腊短信最佳实践、合规性和功能

希腊短信市场概况

区域设置名称: 希腊
ISO 代码: 生长素
地区 欧洲
移动国家代码 (MCC) 202
拨号代码 +30

市场状况:希腊拥有成熟的移动市场,短信采用率很高。该国的主要移动运营商包括 Cosmote、Vodafone 和 Wind。虽然 WhatsApp 和 Viber 等 OTT 消息应用程序在个人通信中很受欢迎,但短信对于商业通信仍然至关重要,尤其是用于身份验证和通知。移动市场显示 Android 和 iOS 设备之间的分配相对均衡,Android 在市场份额上略有优势。


希腊的主要短信功能和能力

希腊支持大多数标准短信功能,包括字母数字发件人 ID 和串联消息,但双向短信功能有限。

双向短信支持

在希腊,大多数主要短信提供商都不支持双向短信。这意味着企业应该围绕单向通信流程设计短信策略。

串联消息(分段短信)

支持:是的,支持串联,但可用性可能因发件人 ID 类型而异。
消息长度规则:GSM-7 编码的标准短信长度为 160 个字符,Unicode (UCS-2) 编码的标准短信长度为 70 个字符。
编码注意事项:GSM-7 支持基本拉丁字符,而希腊字符和特殊符号则需要 UCS-2。

MMS 支持

MMS 消息会自动转换为带有内嵌 URL 链接的 SMS。此转换可确保交付兼容性,同时仍允许企业通过链接资源共享丰富的媒体内容。

收件人电话号码兼容性

号码可携性

希腊提供号码可携性。这意味着接收者在移动运营商之间切换时可以保留自己的电话号码。虽然这不会对传送或路由产生很大影响,但保持最新的路由表以获得最佳传送率非常重要。

向固定电话发送短信

在希腊,无法向固定电话号码发送短信。尝试向固定电话号码发送消息将导致发送失败,并且通常会从 SMS API 生成 400 响应错误(错误代码 21614)。这些消息不会出现在日志中,也不会产生费用。

希腊短信合规与监管指南

希腊遵守希腊电信和邮政委员会 (EETT) 监督的严格电信法规。由于希腊是欧盟成员国,因此短信营销和通信必须符合希腊电信法和 GDPR 要求。

明确同意要求

  • 发送营销信息前必须获得书面或电子同意
  • 必须保留同意记录并方便获取
  • 在选择加入时必须明确说明沟通目的
  • 建议在营销活动中使用双重选择

文档的最佳实践

  • 存储时间戳和同意来源
  • 保留选择加入方法的详细记录
  • 保留同意记录至少 2 年
  • 定期审核同意数据库

HELP/STOP 和其他命令

  • 所有营销信息必须包含明确的退出说明
  • STOP 命令必须同时支持希腊语和英语
  • 必须尊重的常见希腊关键词:
    • 停止 (停止)
    • ΒΟΗΘΕΙΑ(帮助)
  • 消息应在收到后 24 小时内处理

请勿致电/请勿打扰登记

希腊设有一个由 EETT 管理的国家“禁止致电”登记处。

  • 企业在发送营销信息之前必须对照登记册检查号码
  • 应每月进行一次注册检查
  • 维护选择退出的号码的内部抑制列表
  • 根据 STOP 请求立即实施删除

时区敏感度

希腊使用东欧时间 (EET/EEST)

  • 建议发送时间:当地时间 09:00 – 20:00
  • 限制时间:避免在 22:00 – 08:00 之间发送
  • 周末注意事项:将周末消息限制为仅紧急通信
  • 节日意识:尊重希腊国家和宗教节日

希腊的电话号码选项和短信发件人类型

字母数字发件人 ID

运营商网络能力:完全支持
注册要求:需预先注册并提供文件:

  • 公司注册文件
  • 品牌所有权证明
  • 用例描述
  • 预计月销量

发件人 ID 保存:是的,注册 ID 会在网络上保存

长代码

国内与国际

  • 国内长代码:支持但可用性有限
  • 国际长代码:不支持 A2P 消息传递

发件人 ID 保存:国内号码保留,国际号码可能被修改 配置时间:国内号码为 3-5 个工作日 用例:适用于双向通信和交易信息

短代码

支持:可通过希腊移动运营商获得 配置时间:批准和激活需 8-12 周 使用案例

  • 大规模营销活动
  • 时间敏感的通知
  • 优质费率服务
  • 双重身份验证

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

禁止内容

  • 未获得希腊牌照的赌博
  • 成人内容
  • 加密货币促销
  • 未经适当授权的政治信息
  • 未取得适当许可的药品

内容过滤

运营商过滤规则

  • 包含特定关键字的邮件可能会被屏蔽
  • URL 必须来自批准的域
  • 每个号码的消息频率限制

避免阻塞的提示

  • 避免过多标点
  • 使用注册的 URL 缩短服务
  • 保持一致的发件人 ID
  • 将消息频率保持在合理范围内

在希腊发送短信的最佳做法

信息传递策略

  • 尽可能将消息控制在 160 个字符以内
  • 包含明确的号召性用语
  • 慎重使用个性化标记
  • 保持一致的品牌声音

发送频率和时间

  • 每位收件人每月最多可发送 4-5 条消息
  • 至少间隔 24 小时发送消息
  • 尊重安静时间和假期
  • 围绕高峰参与时间规划活动

本土化

  • 本地号码默认使用希腊语
  • 考虑在旅游区提供双语信息
  • 对希腊字母使用正确的字符编码
  • 尊重文化差异和节日

退出管理

  • 24 小时内处理退出
  • 维护集中退出数据库
  • 在每条营销信息中都包含退出说明
  • 定期清理联系人列表

测试和监控

  • 在所有主要的希腊运营商上进行测试
  • 监控承运商的运送费率
  • 跟踪参与度指标
  • 定期测试退出功能

希腊的 SMS API 集成

Twilio

Twilio 提供强大的 SMS API,对希腊数字和字母数字发件人 ID 提供出色的支持。身份验证使用帐户 SID 和身份验证令牌凭据。

import { Twilio } from 'twilio';

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

async function sendSMSToGreece(
  to: string,
  message: string,
  senderId: string
): Promise<void> {
  try {
    // Ensure number is in E.164 format for Greece (+30)
    const formattedNumber = to.startsWith('+30') ? to : `+30${to}`;
    
    const response = await client.messages.create({
      body: message,
      from: senderId, // Alphanumeric sender ID or Twilio number
      to: formattedNumber,
      // Optional parameters for delivery tracking
      statusCallback: 'https://your-webhook.com/status'
    });
    
    console.log(`Message sent successfully! SID: ${response.sid}`);
  } catch (error) {
    console.error('Error sending message:', error);
    throw error;
  }
}

辛奇

Sinch 为希腊市场提供全面的短信功能,支持交易信息和营销信息。

import axios from 'axios';

class SinchSMSClient {
  private readonly apiToken: string;
  private readonly serviceId: string;
  private readonly baseUrl = 'https://sms.api.sinch.com/xms/v1';

  constructor(apiToken: string, serviceId: string) {
    this.apiToken = apiToken;
    this.serviceId = serviceId;
  }

  async sendSMS(to: string, message: string, senderId: string): Promise<void> {
    try {
      const response = await axios.post(
        `${this.baseUrl}/${this.serviceId}/batches`,
        {
          from: senderId,
          to: [to],
          body: message,
          // Greek character support
          encoding: 'AUTO'
        },
        {
          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)在希腊提供可靠的短信传递服务,并大力支持当地法规。

import messagebird from 'messagebird';

class MessageBirdClient {
  private client: any;

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

  sendSMS(
    to: string,
    message: string,
    senderId: string
  ): Promise<any> {
    return new Promise((resolve, reject) => {
      this.client.messages.create({
        originator: senderId,
        recipients: [to],
        body: message,
        // Enable delivery reports
        reportUrl: 'https://your-webhook.com/delivery',
        // Greek language support
        type: 'unicode'
      }, (err: any, response: any) => {
        if (err) {
          reject(err);
        } else {
          resolve(response);
        }
      });
    });
  }
}

API 速率限制和吞吐量

  • 默认速率限制
    • Twilio:每秒 250 条消息
    • Sinch:每秒 100 条消息
    • MessageBird:每秒 60 条消息

吞吐量管理策略

// Example rate limiting implementation
class RateLimiter {
  private queue: Array<() => Promise<void>> = [];
  private processing: boolean = false;
  private readonly rateLimit: number;
  private readonly interval: number;

  constructor(rateLimit: number, intervalMs: number) {
    this.rateLimit = rateLimit;
    this.interval = intervalMs;
  }

  async add(task: () => Promise<void>): Promise<void> {
    this.queue.push(task);
    if (!this.processing) {
      this.processing = true;
      await this.processQueue();
    }
  }

  private async processQueue(): Promise<void> {
    while (this.queue.length > 0) {
      const batch = this.queue.splice(0, this.rateLimit);
      await Promise.all(batch.map(task => task()));
      await new Promise(resolve => setTimeout(resolve, this.interval));
    }
    this.processing = false;
  }
}

错误处理和报告

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

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

  logError(error: SMSError): void {
    this.errors.push(error);
    // Implement your logging logic here
    console.error(`SMS Error [${error.code}]: ${error.message}`);
  }

  async retryFailedMessages(
    smsClient: any,
    maxRetries: number = 3
  ): Promise<void> {
    // Implement retry logic for failed messages
  }
}

回顾和其他资源

关键要点

  1. 合规重点
    • 注册字母数字发件人 ID
    • 24 小时内尊重退出请求
  2. 技术考虑
  3. 下一步

滚动至顶部