我正在使用twilio,当调用我的twilio号码时它会调用webhook,我使用lambda函数作为webhook, twilio期待来自webhook的xml(以前称为twiml)响应,我无法从lambda函数发送xml响应 我正在使用无服务器框架 这
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'"
响应:
如果我在代码中犯了一些错误,请告诉我
还在github上创建了一个issue
谢谢,
Inzamam Malik
在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代理集成(默认情况下)将其组合成适当的响应.
我个人觉得这种方式更简单,更易读.