Node js twillio webhook - 去电不起作用
Node js twillio webhook - outgoing call not working
我的目标是让 twillio 调用一个 webhook,然后让一些节点 js 函数记录用户所说的内容,然后向另一个 phone 号码拨出电话并播放该录音。
但是,我似乎无法设置拨出电话。该代码在常规节点 js 文件中工作,但一旦它作为 webhook 的一部分被调用,它就不会工作:
const accountSid =
const authToken =
const client = require('twilio')(accountSid, authToken);
exports.handler = function(context, event, callback) {
console.log(event.CallSid, event.RecordingUrl);
console.log()
console.log("RECORDING URL: " + event.RecordingUrl + ".mp3");
let audioURL = event.RecordingUrl
audioURL+=".mp3";
const response = new Twilio.twiml.VoiceResponse();
response.say({ voice: 'woman', language: 'en-US' }, 'Thank you.');
client.calls
.create({
from: '+14********',
to: '+14***********',
url: 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-8.mp3'
})
callback(null, response);
};
这里是 Twilio 开发人员布道者。
这里的问题是您发出异步请求进行调用,然后立即调用 callback
。这会终止 Twilio 函数的执行,因为它会立即取消出站 API 请求。有关详细信息,请参阅 documentation on Twilio Function execution。
要解决此问题,您应该只在 create
函数完成后调用 callback
。
作为额外提示,您还可以从 context
对象获取经过身份验证的客户端,而无需自己加载 accountSid 或 authToken。
此外,在您的示例中,您为出站呼叫提供的 URL 似乎是 mp3。您的 URL 应该 return TwiML,或者您可以将 TwiML 作为 API 请求的一部分发送。
我会像这样更新你的功能:
exports.handler = function(context, event, callback) {
console.log(event.CallSid, event.RecordingUrl);
console.log()
console.log("RECORDING URL: " + event.RecordingUrl + ".mp3");
let audioURL = event.RecordingUrl
audioURL+=".mp3";
const client = context.getTwilioClient();
const response = new Twilio.twiml.VoiceResponse();
response.say({ voice: 'woman', language: 'en-US' }, 'Thank you.');
client.calls
.create({
from: '+14********',
to: '+14***********',
twiml: `<Response><Play>${audioUrl}</Play></Response>`
})
.then(() => {
callback(null, response);
})
.catch(error => {
callback(error);
});
};
我的目标是让 twillio 调用一个 webhook,然后让一些节点 js 函数记录用户所说的内容,然后向另一个 phone 号码拨出电话并播放该录音。
但是,我似乎无法设置拨出电话。该代码在常规节点 js 文件中工作,但一旦它作为 webhook 的一部分被调用,它就不会工作:
const accountSid =
const authToken =
const client = require('twilio')(accountSid, authToken);
exports.handler = function(context, event, callback) {
console.log(event.CallSid, event.RecordingUrl);
console.log()
console.log("RECORDING URL: " + event.RecordingUrl + ".mp3");
let audioURL = event.RecordingUrl
audioURL+=".mp3";
const response = new Twilio.twiml.VoiceResponse();
response.say({ voice: 'woman', language: 'en-US' }, 'Thank you.');
client.calls
.create({
from: '+14********',
to: '+14***********',
url: 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-8.mp3'
})
callback(null, response);
};
这里是 Twilio 开发人员布道者。
这里的问题是您发出异步请求进行调用,然后立即调用 callback
。这会终止 Twilio 函数的执行,因为它会立即取消出站 API 请求。有关详细信息,请参阅 documentation on Twilio Function execution。
要解决此问题,您应该只在 create
函数完成后调用 callback
。
作为额外提示,您还可以从 context
对象获取经过身份验证的客户端,而无需自己加载 accountSid 或 authToken。
此外,在您的示例中,您为出站呼叫提供的 URL 似乎是 mp3。您的 URL 应该 return TwiML,或者您可以将 TwiML 作为 API 请求的一部分发送。
我会像这样更新你的功能:
exports.handler = function(context, event, callback) {
console.log(event.CallSid, event.RecordingUrl);
console.log()
console.log("RECORDING URL: " + event.RecordingUrl + ".mp3");
let audioURL = event.RecordingUrl
audioURL+=".mp3";
const client = context.getTwilioClient();
const response = new Twilio.twiml.VoiceResponse();
response.say({ voice: 'woman', language: 'en-US' }, 'Thank you.');
client.calls
.create({
from: '+14********',
to: '+14***********',
twiml: `<Response><Play>${audioUrl}</Play></Response>`
})
.then(() => {
callback(null, response);
})
.catch(error => {
callback(error);
});
};