【问题标题】:twilio send sms not working in meteortwilio 发送短信在流星中不起作用
【发布时间】:2017-08-13 02:58:45
【问题描述】:

我正在使用 twilio 节点发送短信。但我收到错误:

sendSms 未定义

这是我在服务器文件夹中的 twilio 文件:

import twilio from "twilio";
sms = {
    accountSid: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    authToken: "your_auth_token"
};

const client = new twilio(sms.accountSid, sms.authToken);
console.log('client twilio *********** ',client)
sendSms=(phoneNum,randomNum)=> {
    client
    .sendSms({
        body: "MicroTM one time password:" + randomNum,
        to: phoneNum,
        from: "+16062631146"
    })
    .then((message, err) => {
        if (!err) {
            console.log(message);
        } else {
            console.log(err);
        }
    });
}

现在当我控制台 twilio 时,我找不到 sendSms 函数。 以下是日志:

client twilio ***********  Twilio {
I20170813-08:14:44.200(5.5)?   username: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
I20170813-08:14:44.201(5.5)?   password: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
I20170813-08:14:44.202(5.5)?   accountSid: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
I20170813-08:14:44.204(5.5)?   httpClient: {},
I20170813-08:14:44.204(5.5)?   region: undefined,
I20170813-08:14:44.205(5.5)?   _accounts: undefined,
I20170813-08:14:44.206(5.5)?   _api: undefined,
I20170813-08:14:44.207(5.5)?   _chat: undefined,
I20170813-08:14:44.208(5.5)?   _fax: undefined,
I20170813-08:14:44.209(5.5)?   _ipMessaging: undefined,
I20170813-08:14:44.209(5.5)?   _lookups: undefined,
I20170813-08:14:44.210(5.5)?   _monitor: undefined,
I20170813-08:14:44.210(5.5)?   _notify: undefined,
I20170813-08:14:44.211(5.5)?   _preview: undefined,
I20170813-08:14:44.211(5.5)?   _pricing: undefined,
I20170813-08:14:44.212(5.5)?   _taskrouter: undefined,
I20170813-08:14:44.212(5.5)?   _trunking: undefined,
I20170813-08:14:44.212(5.5)?   _video: undefined,
I20170813-08:14:44.213(5.5)?   _messaging: undefined,
I20170813-08:14:44.213(5.5)?   _wireless: undefined,
I20170813-08:14:44.214(5.5)?   _sync: undefined }

这是我的 package.json 文件:

{
  "name": "MicroTM",
  "private": true,
  "scripts": {
    "start": "meteor run"
  },
  "dependencies": {
    "babel-runtime": "^6.20.0",
    "bcrypt": "^1.0.2",
    "busboy": "^0.2.14",
    "fibers": "^2.0.0",
    "lodash": "^4.17.4",
    "meteor-node-stubs": "~0.2.4",
    "moment": "^2.18.1",
    "twilio": "^3.6.2"
  }
}

package.json 文件可能存在一些问题,因为我找不到 twilio api 的任何问题。

编辑:

这是我调用发送短信功能的客户端:

Template.register.events({
    'submit form': function(event) {
        event.preventDefault();
        let fullName = event.target.fullName.value,
            phoneNum = event.target.phoneNum.value,
            email = event.target.emailsignup.value,
            password = event.target.passwordsignup.value,
            confirmPass = event.target.passwordsignup_confirm.value;
            console.log(phoneNum,email,password,confirmPass);
        let randomNum = Math.floor(1000 + Math.random() * 9000);
        let data = {
            fullName: fullName,
            phoneNum: phoneNum, 
            email:email, 
            password:password, 
            confirmPass:confirmPass,
            otp:randomNum,
            isVerified: false,
            createdAt: Date.now()
        };
        if(password != confirmPass){
            swal({
              title: 'passwords are not matching!',
            })
        }
        else{
            Meteor.call('registerUser',data,function (err,res) {
                if(!err){
                    //console.log('inside result ******* ',data)
                    sendSms(data.phoneNum,randomNum);
                    Router.go('verify')
                }
                else{
                    console.log('error ******* ', err)
                }
            })
        }
    }
})

还请找到我遇到的错误的屏幕截图:

【问题讨论】:

  • 确保客户端在函数中可用
  • 如何在客户端调用服务器函数??
  • 你的意思是我应该把发送短信功能放在客户端和服务器都可以访问的地方
  • 我认为这是不可能的,但是您可以确保使用ajaxsocket.io 从客户端向服务器发送一些事件并传递参数,在服务器上接收到它之后您可以调用sendSms 函数并将接收到的参数传递给服务器。

标签: javascript node.js meteor twilio twilio-api


【解决方案1】:

在使用其他 twilio 方法时遇到同样的问题。

尝试使用方法client.messages.create()

client.messages.create({
        body: "MicroTM one time password:" + randomNum,
        to: phoneNum,
        from: "+16062631146"
    })
    .then((message, err) => {
        if (!err) {
            console.log(message);
        } else {
            console.log(err);
        }
    });

还要确保使用较新版本的 twilio 并将版本保存到包中:

npm install twilio --save

编辑:另外,您似乎正在从一个由于该特定文件中的方法不可用而无法访问的文件调用sendSms method。尝试在您访问sendSms 的地方检查函数的范围。或者尝试在此处发布更多代码以了解更多信息。

EDIT2:您不能在客户端调用在服务器上定义的方法,但您可以确保使用ajaxsocket.io 发送任何事件并将参数从客户端传递到服务器。在服务器上接收后,您可以调用并将您的参数传递给sendSms 方法。这可能对您有所帮助。

【讨论】:

  • 感谢您的回答,但仍然没有运气......获得相同的控制台。尝试了 client.messages.create 和 npm install twilio --save
  • 我正在从客户端(前端)传递这些参数,这些参数工作正常。
  • 你可以编辑你的答案,以便我能够理解更多
  • 您确定方法适用于您的所有文件吗?查看编辑。
  • 这里是 Twilio 开发人员传道者。 Twilio 客户端没有 sendSms 方法的问题是因为该方法在版本 2 模块中可用,但已在版本 3 中删除。client.messages.create 是您所需要的。祝你好运!
【解决方案2】:

您声明 sendSms 以这种方式运行,因此它将仅在当前范围内可见。

替换为:

Meteor.sendSms=(phoneNum,randomNum)=> {
  ...
}

它可以在任何地方访问。

【讨论】:

  • 我猜服务器上不存在窗口
  • @AnkushRishi,哦,谢谢,你是对的。我已经编辑了我的答案。
  • 它正在使用 Meteor 运行,但我仍然没有得到 sendSms 功能。可能这是一个范围错误
  • @AnkushRishi 你应该叫它Meteor.sendSms(...) 而不是sendSms(...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
相关资源
最近更新 更多