You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET Core中基于Twilio SMS构建预约提醒:如何将用户回复短信关联至特定ID?

在.NET Core中用Twilio SMS关联用户回复到特定预约ID的方案

针对你遇到的「一个手机号对应多用户、单用户多预约,需要把用户回复关联到特定预约」的问题,我整理了几个不用发链接的实用方案,都是在Twilio生态内就能搞定的:

  • 利用Twilio短信的关联SID(官方推荐)
    当你通过Twilio发送预约提醒短信时,每条短信都会生成一个唯一的MessageSid。你可以把这个MessageSid和对应的预约ID、用户信息一起存入你的数据库。
    当用户回复这条短信时,Twilio给你的Webhook回调请求里会包含ParentMessageSid字段——这个字段就是你之前发送的那条提醒短信的MessageSid。你只需要用这个ParentMessageSid去数据库里匹配,就能直接关联到对应的预约ID了。

    用.NET Core发送短信的示例代码大概是这样:

    using Twilio;
    using Twilio.Rest.Api.V2010.Account;
    using Twilio.Types;
    
    var twilioClient = new TwilioClient("你的AccountSid", "你的AuthToken");
    var appointmentId = "你的预约ID"; // 比如从数据库取的预约唯一标识
    
    var message = await MessageResource.CreateAsync(
        to: new PhoneNumber("用户的手机号"),
        from: new PhoneNumber("你的Twilio号码"),
        body: "提醒:你明天10:00有个皮肤科预约,回复Y确认,N取消",
        statusCallback: new Uri("https://你的后端回调地址/api/appointment/reply") // 可选,用来跟踪发送状态
    );
    
    // 把message.Sid和appointmentId存入数据库,比如用EF Core
    await _dbContext.SmsLogs.AddAsync(new SmsLog
    {
        MessageSid = message.Sid,
        AppointmentId = appointmentId,
        PhoneNumber = "用户的手机号",
        SentTime = DateTime.UtcNow
    });
    await _dbContext.SaveChangesAsync();
    

    当用户回复时,你的Webhook接口可以这样处理:

    [HttpPost("api/appointment/reply")]
    public async Task<IActionResult> HandleSmsReply([FromForm] TwilioReplyModel reply)
    {
        // 从Twilio的回调里拿到ParentMessageSid
        var parentMessageSid = reply.ParentMessageSid;
        // 去数据库查对应的预约ID
        var smsLog = await _dbContext.SmsLogs.FirstOrDefaultAsync(l => l.MessageSid == parentMessageSid);
        if (smsLog != null)
        {
            var appointmentId = smsLog.AppointmentId;
            // 根据用户的回复内容(reply.Body)处理确认/取消逻辑
            if (reply.Body.Equals("Y", StringComparison.OrdinalIgnoreCase))
            {
                // 标记预约为已确认
            }
            else if (reply.Body.Equals("N", StringComparison.OrdinalIgnoreCase))
            {
                // 取消预约
            }
        }
        return Ok();
    }
    
    // 对应的TwilioReplyModel可以包含你需要的字段,比如ParentMessageSid、Body、From等
    public class TwilioReplyModel
    {
        public string ParentMessageSid { get; set; }
        public string Body { get; set; }
        public string From { get; set; }
        // 其他需要的字段
    }
    
  • 在短信内容中加入预约识别码
    这个方法更直观,适合用户单日有多个预约的场景。你可以在提醒短信里加入短的、唯一的预约编号,比如:

    提醒1:明天10:00皮肤科预约,回复Y123确认,N123取消
    提醒2:明天14:00牙科预约,回复Y456确认,N456取消

    用户回复时会带上这个编号,你在Webhook里解析回复内容(比如提取出123、456),直接匹配到对应的预约ID。这种方式的好处是用户能明确知道自己操作的是哪个预约,避免混淆。

  • 用Twilio Studio保留上下文变量
    如果你用Twilio Studio来构建预约提醒的流程,可以在发送短信的步骤中设置自定义变量(比如把预约ID存在Flow的变量里)。当用户回复时,Studio的流程会自动保留这个上下文变量,你可以在流程的「Make HTTP Request」步骤里把预约ID和用户回复一起发送到你的.NET Core后端,不用自己处理SID的匹配逻辑,非常省心。

这些方案都不需要给用户发送链接,完全通过Twilio的原生功能或者短信内容来实现关联,适配你提到的复杂场景。

内容的提问来源于stack exchange,提问作者dotnetbuddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 14:07:52