首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过Twilio和Google功能发送SMS

无法通过Twilio和Google功能发送SMS
EN

Stack Overflow用户
提问于 2018-02-28 14:41:53
回答 2查看 1K关注 0票数 0

我试图使用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来关闭它。

我的密码(用密匙和电话号码编辑):

代码语言:javascript
复制
//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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-28 16:22:18

你有

module.exports = new twilio.Twilio(accountSid, authToken);

在一条线上,再往下走

module.export = function(req, res) { ... }

尝试将export更改为exports

票数 0
EN

Stack Overflow用户

发布于 2018-03-13 04:55:09

很长一段时间以来,有一件事让我感到震惊,那就是twilio是如何将请求体发送到云功能的。它将它发送到body对象中,因此要访问请求主体,它将如下所示

req.body.body

在此基础上,它将其作为JSON字符串传递,因此我不得不使用JSON.parse()

例如,我开始工作:

代码语言:javascript
复制
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请求模块。

希望这对你有一点帮助,但不确定这是不是你的问题所在:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49032152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档