【问题标题】:Twilio C# Attach Cookie to responseTwilio C# 将 Cookie 附加到响应
【发布时间】:2021-12-07 23:43:26
【问题描述】:

我有一个 DeliveryNotice 函数,在发送 Whatsapp 消息后由 Twilio 调用。在该函数中,我想设置响应 cookie 或标头,以便当我的用户回复 Whatsapp 消息时,我能够追踪它来自哪条消息。

我尝试设置 cookie 和标头,但是当用户回复时调用 InboundMessage 函数时,我无法看到设置的 cookie 甚至设置的标头。

这是我的代码:

[HttpPost("FileDeliveryNotice")]
[Consumes("application/x-www-form-urlencoded")]
public ActionResult FileDeliveryNotice([FromForm] WhatsappFileDeliveryNotice Input)
{
    var r = Request;
    HttpContext.Response.Cookies.Append("MessageSID", Input.MessageSid);
    Response.Headers.Add("MessageSID", Input.MessageSid);
    return Ok(res);
}

[HttpPost("InboundMessage")]
[Consumes("application/x-www-form-urlencoded")]
public ActionResult InboundMessage([FromForm] WhatsappInboundMessage Input)
{
    var r = Request;
    var res = whatsappIMData.Save(Input);
    return Ok(res);
}

编辑:

TwilioClient.Init(accountSid, authToken);
var message = MessageResource.Create(
    body: messageText,
    statusCallback: new Uri($"{configuration[SDR_Core.ClassLibrary.Globals.ConfigurationGlobals.Whatsapp_Callback_Url]}Communication/Whatsapp/FileDeliveryNotice"),
    to: new Twilio.Types.PhoneNumber($"whatsapp:+6{Input.NewSendFileDetailsViewModel.MobileNumber}"),
    messagingServiceSid: tcd.TwilioMessagingServiceSID
);

【问题讨论】:

  • 您应该可以使用 Cookie 来执行此操作,尽管它们只能持续 4 小时,所以这可能是问题所在吗?这是setting cookies in C# 上的文档,可能会提示您出了什么问题。
  • 当我的用户立即回复并且 twilio webhook 调用 InboundMessage 时,标头不包含设置的标头并且 cookie 为空。代码示例使用支持 Session 的 asp.net mvc。我正在使用 .net 核心。
  • 什么时候调用 FileDeliveryNotice?
  • 第一次发送消息的时间。我编辑了我的代码以显示它。

标签: c# asp.net-core .net-core twilio whatsapp


【解决方案1】:

这里是 Twilio 开发者宣传员。

您只能在响应消息的传入 webhook 时为 Twilio 消息传递设置 cookie,而不是在您使用 REST API 发送消息或接收异步状态回调时。

所以,我的真正意思是,您只能在您的 InboundMessage 路由上设置这些 cookie,这就是您看不到这个的原因。

问题是,目前在 Twilio 中并没有真正知道要回复什么消息。这主要是因为 API 首先是基于 SMS 的,这只是按时间顺序排列的。有在 WhatsApp 中回复消息的想法,但这需要用户专门回复消息,而 Twilio 不支持。因此,最好也将消息视为与 WhatsApp 一起按时间顺序排列的消息。因此,您可以随时查看您发送的最后一条消息,了解对方可能会回复什么。

【讨论】:

  • 嗨@philnash,感谢您的回复。这似乎有点模糊。目前我的情况是这样的。我的系统发送带有是或否按钮的模板消息。如果收件人单击“是”,则交付特定于他们的文件。我坚持的部分是我知道我可以向 DeliveryNotice 函数添加参数,例如 FileId。但是我如何配对收件人响应以知道要发送给他们的文件?
  • FileDeliveryNotice 操作仅作为状态回调调用,以便为您提供有关您发送的消息的信息。它对用户的下一个回复没有真正的影响。您可以根据他们的 WhatsApp 电话号码存储您发送给用户的最后一条消息,然后当您收到入站消息时,再次使用该电话号码查找上一条消息,然后使用该信息向他们发送文件。
  • 我明白了。那时我一直在以错误的方式解决这个问题。我可以知道是否有办法在发送消息时添加传入的 webhook url,或者有没有办法在 url 中放置动态参数?目前好像只能在控制台上设置。
  • 没有办法做到这一点,不。就像我说的,你需要按时间顺序处理事情。
  • 嗨@philnash,经过一番思考,我希望你能帮我回答一个问题。如果我按时间顺序处理事情,如果我与使用相同消息服务/号码的另一个用户同时向收件人发送消息会发生什么?我是否正确地说我的 InboundMessage 函数只会注册最新的消息响应?最新消息之前的消息仍然会输出最新消息给出的响应。
猜你喜欢
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 2022-01-08
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多