你已经很接近了,除了twiml.record()之后你不能做任何事情,只能用callback(null, twiml);返回
那么,你可以做的是:
- 创建 TwiML Bin,以便在录制结束时挂断电话。
这是 bin 的代码,它只会返回一个空响应,然后会挂断电话。
<?xml version="1.0" encoding="UTF-8"?>
<Response />
当您保存 bin 时,您可以复制 bin 的 URL,您将在函数中需要它。该 URL 类似于 https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- 将您的功能代码更改为类似的内容(您可以添加更多可以在文档中找到的选项,我会将链接放在此答案的末尾)。
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse();
// twiml.say("Welcome... Please leave a message, and we will call you back.");
twiml.record({
maxLength: 20,
action: 'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
recordingStatusCallback: 'https://your_webhook_url',
recordingStatusCallbackMethod: 'POST',
recordingStatusCallbackEvent: 'in-progress, completed, absent'
});
callback(null, twiml);
};
如果您查看代码,您会看到 action 指向您创建的 TwiML Bin,这是 Twilio 的引擎在录制完成后将进入的位置。如果省略action URL,记录完成后,Twilio 将返回此功能,您将进入循环(如果您愿意,可以尝试)。
接下来,由于录制可能已完成,但录制文件可能无法访问,您需要使用 recordingStatusCallback,这是您服务器上的一个 URL,一个 webhook,Twilio 会让您知道。请求参数之一将是RecordingUrl,“录制音频的 URL”。 (文档:https://www.twilio.com/docs/voice/twiml/record#attributes-recording-status-callback-parameters)
接下来,您设置方法 POST 或 GET 在 Twilio 访问您的 webhook 时使用。
接下来,您说明您希望 Twilio 针对哪些事件点击您的 webhook。
您可以在此处阅读 Twilio 文档中的所有内容:
(https://www.twilio.com/docs/voice/twiml/record#attributes)
注意:如果您认为可以在使用录制 URL 之前等待一段时间,您只能向
action 提供您的 webhook 并自行处理挂断问题(使用您的 TwiML 响应应用程序),无需 TwiML bin 和
recordingStatusCallback... things。
RecordingUrl 也是对
action 的请求的参数,除了,就像我说的那样,文件可能不会立即可用。
如何获取“来电号码”:
与RecordingUrl 一起,您会得到CallSid 类似CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 的东西,您可以使用它来获取(从您的应用程序发出另一个请求)有关呼叫的信息,包括带有此代码的from 号码:
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';
const client = require('twilio')(accountSid, authToken);
client.calls('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
.fetch()
.then(call => console.log(call.from));
(https://www.twilio.com/docs/voice/api/call?code-sample=code-fetch-a-call&code-language=Node.js&code-sdk-version=3.x)