我正在尝试使用Twilio,firebase和Google Functions以及使用Postman发送文本(一次性密码)。
我在函数目录中运行$ npm install --save twilio@3.0.0 -rc.13。
当我运行$ firebase部署时,它就完成了。但是在Postman上,当我做POST,Body并提供一个JSON {" phone":" 555-5555" },我得到一个"错误:无法处理请求。"
我可以将Twilio可编程短信中的文本从我的Twilio号码发送到直接连接到手机的实际外线号码。我使用Sid和AuthToken的实时凭证。
这是Twilio,Google Functions和一些配置的问题吗?
以下是功能日志
//白旗标志// 功能执行花了1452毫秒,完成状态:'崩溃'
//红色警告标志// TypeError:handler不是函数 在cloudFunction(/user_code/node_modules/firebase-functions/lib/providers/https.js:26:41) 在/var/tmp/worker/worker.js:676:7 在/var/tmp/worker/worker.js:660:9 at _combinedTickCallback(internal / process / next_tick.js:73:7) at process._tickDomainCallback(internal / process / next_tick.js:128:9)
此外,google eslint强制一致返回,这就是为什么我把" return;"在request-one-time-password.js中。我似乎无法通过在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);
答案 0 :(得分:0)
你有
module.export = function(req, res) { ... }
在一行上,然后向下
export
。
尝试将exports
更改为<div>
<table class="table table-striped table-hover table-bordered" id="OutstandingInvoicesTable">
<thead>
<tr>
<th>ID</th>
<th>Date</th>
<th>Description</th>
<th>Debit</th>
<th>Credit</th>
<th>Pay</th>
</tr>
</thead>
<tbody>
<tr>
<td>377</td>
<td>7/9/2013</td>
<td title='Payment on account from system'>Payment on</td>
<td class="pTransactionRight">$0.00</td>
<td class="pTransactionRight">$231.56</td>
<td>
<label class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="checkbox_PaymentChecked_377"/>
<span class="custom-control-indicator"></span>
</label>
</td>
</tr>
</tbody>
</table>
</div>
。
答案 1 :(得分:0)
长时间绊倒我的一件事是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 HTTP请求模块。
希望这会有所帮助,但不确定这是否是您的确切问题:(