加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

twilio – 无法使用无服务器框架发送xml响应

发布时间:2020-12-16 22:47:56 所属栏目:百科 来源:网络整理
导读:我正在使用twilio,当调用我的twilio号码时它会调用webhook,我使用lambda函数作为webhook, twilio期待来自webhook的xml(以前称为twiml)响应,我无法从lambda函数发送xml响应 我正在使用无服务器框架 这是我的代码 功能: module.exports.voice = (event,contex
我正在使用twilio,当调用我的twilio号码时它会调用webhook,我使用lambda函数作为webhook,

twilio期待来自webhook的xml(以前称为twiml)响应,我无法从lambda函数发送xml响应

我正在使用无服务器框架

这是我的代码
功能:

module.exports.voice = (event,context,callback) => {

  console.log("event",JSON.stringify(event))
  var twiml = new VoiceResponse();

  twiml.say({ voice: 'alice' },'Hello,What type of podcast would you like to listen? ');
  twiml.say({ voice: 'alice' },'Please record your response after the beep. Press any key to finish.');

  twiml.record({
    transcribe: true,transcribeCallback: '/voice/transcribe',maxLength: 10
  });

  console.log("xml: ",twiml.toString())

  context.succeed({
    body: twiml.toString()
  });
};

阳明:

service: aws-nodejs

provider:
  name: aws
  runtime: nodejs6.10
  timeout: 10

iamRoleStatements:
    - Effect: "Allow"
      Action: "*"
      Resource: "*"

functions:
  voice:
    handler: handler.voice
    events:
      - http:
          path: voice
          method: post
          integration: lambda
          response:
            headers:
              Content-Type: "'application/xml'"
          template: $input.path("$")
          statusCodes:
                200:
                    pattern: '.*' # JSON response
                    template:
                      application/xml: $input.path("$.body") # XML return object
                    headers:
                      Content-Type: "'application/xml'"

响应:

enter image description here


enter image description here

如果我在代码中犯了一些错误,请告诉我
还在github上创建了一个issue

谢谢,
Inzamam Malik

解决方法

你不需要乱用serverless.yml.这是一个简单的方法:

在serverless.yml中……

functions:
  voice:
    handler: handler.voice
    events:
      - http:
          path: voice
          method: post

(不需要响应,标题,内容类型,模板和statusCodes)

然后,您可以在函数中设置statusCode和Content-Type.

所以删除这部分……

context.succeed({
    body: twiml.toString()
  });

…并将其替换为:

const response = {
    statusCode: 200,headers: {
      'Content-Type': 'text/xml',},body: twiml.toString(),};

callback(null,response);

Lambda代理集成(默认情况下)将其组合成适当的响应.

我个人觉得这种方式更简单,更易读.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读