迁移至Azure Communication Services后,如何获取已发送的SMS消息?
如何在Azure Communication Services中获取已发送的短信(用于端到端测试)
ACS目前没有提供类似Twilio messages.list() 那样直接查询账号已发送短信列表的API,但有两种可行的替代方案来满足你的端到端测试需求:
方案1:发送短信时本地记录元数据
在调用ACS发送短信的代码中,同步记录发送的关键信息(接收号码、内容、发送时间、请求ID等)到本地存储(比如数据库、内存缓存或日志文件),测试时直接从这个存储中查询。
示例代码(Node.js):
const { AzureCommunicationSMSClient } = require("@azure/communication-sms"); const { v4: uuidv4 } = require('uuid'); // 测试场景可先用内存数组存储,生产环境建议改用数据库 const sentSmsRecords = []; module.exports = { // 发送短信并同步记录元数据 async sendAndRecordSms(fromPhone, toPhone, message) { const connectionString = process.env.AZURE_COMMUNICATION_SERVICES_CONNECTION_STRING; const smsClient = new AzureCommunicationSMSClient(connectionString); const sendResult = await smsClient.send({ from: fromPhone, to: [toPhone], message: message }); // 记录测试所需的关键信息 const record = { id: uuidv4(), to: toPhone, message: message, sentDate: new Date(), acsMessageId: sendResult.messages[0].messageId, status: sendResult.messages[0].status }; sentSmsRecords.push(record); return sendResult; }, // 模拟Twilio的查询逻辑,获取指定号码的近期已发短信 async getSentSms(phoneNumber) { // 查询10分钟内发送的消息,可根据测试需求调整时间范围 const tenMinutesAgo = new Date(Date.now() - 10 * 60 * 1000); return sentSmsRecords.filter(record => record.to === phoneNumber && record.sentDate > tenMinutesAgo ).slice(0, 10); } };
方案2:通过Azure Event Grid订阅短信状态事件
ACS会将短信的发送状态事件(成功、失败、已送达等)推送到Event Grid,你可以订阅这些事件并将数据持久化,之后通过查询存储的事件数据来获取已发送短信的信息。
步骤概要:
- 在Azure门户中为你的ACS资源配置Event Grid事件订阅,选择存储账户、事件中心或Webhook作为接收终点
- 发送短信后,ACS会触发
Microsoft.Communication.SMSMessageSent事件,事件数据包含接收号码、消息ID、发送时间、状态等核心信息 - 将接收到的事件数据存储到数据库,测试时直接查询对应号码的事件记录
这种方案适合需要长期追踪短信状态的场景,配置稍复杂,但能获取更完整的发送链路信息。
内容的提问来源于stack exchange,提问作者Emile Paquette
相关产品推荐
相关产品推荐

