如何使用 Typescript 在 Twilio API 的电话验证中传递发布请求

问题描述

我尝试过,但仍然显示错误帖子正文中缺少必需的参数 To 我也是数据。但它显示相同的错误如何解决此问题。

Twilio 代码

import axios from 'axios'
import qs from 'qs';
import * as Twilio from 'twilio';

export function sendOtpForValidUser(user_phone_number: string){

const data = JSON.stringify({
    "To":user_phone_number,"Channel":'sms'
})
console.log(data)
return axios.post(`https://verify.twilio.com/v2/Services/${serviceid}/Verifications`,data,{
    headers: {
        'Authorization': 'Basic ' + Buffer.from(accountSid + ':' + authToken).toString('base64'),'content-type': 'application/x-www-form-urlencoded;charset=utf-8'
    },}).then(message => {
    console.log('Message',message.status)
    var status = message.status
    return status
})
    .catch(error => {
        console.log(error)
        var status = error.data
        return status
    })


}

错误

{
      code: 20001,message: 'Missing required parameter To in the post body',more_info: 'https://www.twilio.com/docs/errors/20001',status: 400
    }

如何解决这个问题。我改变了这种格式的数据 qs.stringify(),JSON.stringfy() 但它是同样的错误

解决方法

当我尝试使用 Twilio Notify API(但使用 Node-Fetch 而不是 Axios)执行类似操作时,这对我有用。

const fetch = require('node-fetch');

const params = new URLSearchParams();
params.append('Body','Hello from Node-Fetch - It Works!');
params.append('ToBinding','{ "binding_type": "sms","address": "+1407xxxxxx" }');
params.append('ToBinding',"address": "+1601xxxxxx" }');

let headers = {Authorization: 'Basic ' + new Buffer.from(process.env.TWILIO_ACCOUNT_SID + ":" + process.env.TWILIO_AUTH_TOKEN).toString("base64")};

console.log(`To String Output: ${params.toString()}`);

fetch('https://notify.twilio.com/v1/Services/ISxxxx/Notifications',{method: 'POST',headers: headers,body: params})
    .then(res => res.json())
    .then(json => console.log(json))
    .catch(err => console.log(err))
,

这里是 Twilio 开发者布道者。

您在此处包含了 Twilio Node 库,但并未使用它。当您已经包含 Twilio 时,您不必使用 axios 来构建此 API 调用。您可以像这样发送新的验证:

import * as Twilio from 'twilio';

const client = Twilio(accountSid,authToken);

export function sendOtpForValidUser(userPhoneNumber: string){
  return client.verify.services(serviceSid).verifications.create({
    to: userPhoneNumber,channel: 'sms'
  })
  .then(message => {
    console.log('Message',message.status)
    var status = message.status
    return status
  }) 
  .catch(error => {
    console.log(error)
    var status = error.data
    return status
  });
}