我试图根据Twilio的例子(https://github.com/TwilioDevEd/ipm-quickstart-node)创建一个简单的聊天应用程序。我能够快速启动并运行。
我想修改一下
http://localhost:3000
),它会触发Twilio的webhook。 我已正确设置AWS Lambda和AWS API网关。
以下是我的Lambda代码示例:
'use strict';
var TWILIO = require('twilio');
var AccessToken = require('twilio').AccessToken;
var IpMessagingGrant = AccessToken.IpMessagingGrant;
var http = require("http");
module.exports.handler = function(event, context, cb) {
var accountSid = 'TWILIO-ACCOUNT-SID';
var authToken = 'TWILIO-AUTH-TOKEN';
var IpMessagingClient = TWILIO.IpMessagingClient;
var client = new TWILIO.IpMessagingClient(accountSid, authToken);
var service = client.services('TWILIO-SERVICE-SID');
service.channels(event.ChannelSid).messages.create({
body: 'what say you ?',
from: FROM
}).then(function(response) {
console.log("this is success");
console.log(response);
//return context.done();
return context.succeed(response);
//return cb(null, response);
}).fail(function(error) {
console.log("this is failure");
console.log(error);
//return context.done();
return context.fail(JSON.parse(error.errorMessage));
//return cb(null, error);
});
};
在客户端,Twilio给了我一个50056
错误(https://www.twilio.com/docs/api/errors/50056),其中说" Webhook取消了命令的处理"。根据文档,我的函数可能没有返回HTTP 200
状态,这在我尝试使用PostMan ping它时收到200状态代码时没有意义。
检查AWS Cloudfront日志,如果我尝试通过Web界面聊天触发AWS Lambda函数,则甚至不会调用Lambda函数。
另一方面,如果我尝试通过PostMan等工具对此AWS Lambda函数进行PING,则AWS Cloudfront日志会显示该函数已被调用,但由于Channel Sid不正确,因此不会进行任何回复。 / p>
如何解决50056
错误?或者,Twilio的IP消息传递webhooks是否可能不允许PINGing AWS API端点?
谢谢!
答案 0 :(得分:2)
回答我自己的问题:
- 如果我将Twilio webhook更改为GET
请求,它就可以了!
所以我怀疑AWS Lambda没有快速响应POST请求,或者Twilio的webhook对POST请求的期望也非常快。