为了账号安全,请及时绑定邮箱和手机立即绑定

强制 Twilio 语音回调到 JSON 以促进 Spring 中的反序列化

强制 Twilio 语音回调到 JSON 以促进 Spring 中的反序列化

慕桂英4014372 2023-06-14 14:37:32
我正在使用 Java SDK 使用类似于Call.creator(to, from, callbackAddress)我提供了一个 URL ( callbackAddress),一旦呼叫连接,它将接收回调。有什么方法可以将此回调配置为 JSON 而不是"application/x-www-form-urlencoded; charset=UTF-8"?我尝试这样做的原因是因为我正在使用 Spring,最终我试图在我的 RestController 中的反序列化 Pojo 中接收请求参数(body下面示例中的参数),这是 SpringMVC 中的标准。使用 jackson 更容易做到这一点,它需要一个 JSON 请求正文作为第二个问题,Twilio SDK 中是否有一个类已经封装了请求中的所有参数,或者我必须创建这样的类?这是一个虚拟休息控制器来说明我正在尝试做什么。请注意,“出城”错误的逻辑只是一个愚蠢的演示,用于说明为什么我需要访问请求参数。我找到的关于回调的所有示例总是忽略请求参数并返回静态 TwiML@RestController@RequestMapping(value = "/twilio", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)public class TwilioCallbackController {  @PostMapping  public String handleCallback(RequestBody body /*this arg should have all request params*/) {     log.info("received callback for callId {}", body.getCallSid())      if (!body.toCity().equals("my-city")) {        throw new Exception("outside of city");     }     return createTwiML(body);  }}
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

Twilio 开发者传播者在这里。

无法让 Twilio 以 JSON 格式向您发送 webhook,它将作为表单编码参数发送。但是,让 Spring 解析它们应该没有问题。

您可以通过为每个参数创建一个具有 getter 和 setter 的类来创建一个将参数解析到其中的类。

因此,例如,您可以创建以下类:

public class TwilioWebhook {

  private String CallSid;

  private String From;


  public String getCallSid() {

    return CallSid;

  }


  public void setText(String CallSid) {

    this.CallSid = CallSid;

  }

}

然后您可以使用它从传入的 webhook 参数中解析 CallSid,例如:


@RestController

@RequestMapping(value = "/twilio", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)

public class TwilioCallbackController {

  @PostMapping

  public String handleCallback(TwilioWebhook request) {

     log.info("received callback for callId {}", request.getCallSid()) 

     // rest of the controller.

  }

}

您可以通过添加到类来解析所有参数TwilioWebhook。您可以在Twilio 语音请求文档中看到 Twilio 将发送的所有参数。不过,Twilio SDK 中没有一个类可以为您执行此操作。


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信