我试图使用Twilio、firebase和Google函数以及邮递员发送一个文本(一次通过代码)。
我在函数目录中运行了$ npm保存twilio@3.0.0 -rc.13。
当我运行$ firebase部署时,它就完成了。但是在邮递员上,当我发邮件、投递一个JSON {“电话”:"555-5555“}时,我会得到一个”错误:无法处理请求“。
我能够发送一个短信在Twilio可编程短信从我的Twilio号码到一个实际的外部号码直接到移动电话。我正在使用Sid和AuthToken的实时凭据。
这是Twilio,Google功能和一些配置的问题吗?
下面是函数的日志:
//白旗符号//函数执行时间为1452 ms,结束时状态为:“崩溃”
//红色警告符号// TypeError: cloudFunction /var/tmp/worker/worker.js:676:7 at /var/tmp/worker/worker.js:660:9 at _combinedTickCallback (cloudFunction/process/next_tick.js:73:7)在process._tickDomainCallback (内部/process/next_tick.js:128:9)
而且,google的eslint强制一致的返回,这就是为什么我在请求中添加了“返回”--一次性密码. is。我似乎不能通过在eslintrc中添加“一致性-返回”:0来关闭它。
我的密码(用密匙和电话号码编辑):
//one-time-password/functions/service_account.js
has my keys copied and pasted.
//one-time-password/functions/twilio.js
const twilio = require('twilio');
const accountSid = 'redacted';
const authToken = 'redacted';
module.exports = new twilio.Twilio(accountSid, authToken);
//one-time-password/functions/request-one-time-password.js
const admin = require('firebase-admin');
const twilio = require('./twilio');
module.export = function(req, res) {
if(!req.body.phone) {
return res.status(422).send({ error: 'You must provide a phone number!'});
}
const phone = String(req.body.phone).replace(/[^\d]/g, '');
admin.auth().getUser(phone).then(userRecord => {
const code = Math.floor((Math.random() * 8999 + 1000));
// generate number between 1000 and 9999; drop off decimals
twilio.messages.create({
body: 'Your code is ' + code,
to: phone,
from: '+redacted'
}, (err) => {
if (err) { return res.status(422).send(err); }
admin.database().ref('users/' + phone).update({ code: code, codeValid: true }, () => {
res.send({ success: true });
})
});
return;
}).catch((err) => {
res.status(422).send({ error: err })
});
}
/////////////////////////////////
//one-time-password/functions/index.js
const admin = require('firebase-admin');
const functions = require('firebase-functions');
const createUser = require('./create_user');
const serviceAccount = require('./service_account.json')
const requestOneTimePassword = require('./request_one_time_password');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://one-time-password-650d2.firebaseio.com"
});
exports.createUser = functions.https.onRequest(createUser);
exports.requestOneTimePassword =
functions.https.onRequest(requestOneTimePassword);发布于 2018-02-28 16:22:18
你有
module.exports = new twilio.Twilio(accountSid, authToken);
在一条线上,再往下走
module.export = function(req, res) { ... }。
尝试将export更改为exports。
发布于 2018-03-13 04:55:09
很长一段时间以来,有一件事让我感到震惊,那就是twilio是如何将请求体发送到云功能的。它将它发送到body对象中,因此要访问请求主体,它将如下所示
req.body.body
在此基础上,它将其作为JSON字符串传递,因此我不得不使用JSON.parse()
例如,我开始工作:
export const functionName= functions.https.onRequest((req, res) => {
cors(req, res, () => {
let body = JSON.parse(req.body.body);
console.log(body);
console.log(body.service_id);
res.send();
});
});这也可能取决于您正在使用的Twilio服务。我在使用他们的Studio请求模块。
希望这对你有一点帮助,但不确定这是不是你的问题所在:
https://stackoverflow.com/questions/49032152
复制相似问题