如何在 Node.JS 中删除调用者在 Twilio 中所做的最后(最近)录音

How to delete the last (most recent) recording made by caller in Twilio in Node.JS

我有一个功能可以让你录音,如果你不满意就删除你的录音。您可以按 * 删除最后的录音。

我的录音密码是:

exports.handler = function(context, event, callback) {
    const twiml = new Twilio.twiml.VoiceResponse();
    twiml.say('Welcome! Please record your announcement after the beep!');
    twiml.say('After your recording, hang up if you are satisfied or press star to delete the newest recording.');
    twiml.record({
      finishOnKey: '*',
      recordingStatusCallback: '/delete',
      action: '/delete'
    });

 callback(null, twiml);
};

最后一条录音删除代码(/delete):

exports.handler = function(context, event, callback) {

  const twiml = new Twilio.twiml.VoiceResponse();
  const id = event.RecordingSid;
  console.log(id);
  console.log(typeof id);
  const accountSid = 'AC1775ae53d952710bb1b4e47ea19c009c';
  const authToken = {my_token};
  const client = require('twilio')(accountSid, authToken);

client.recordings(id)
      .remove(function(err, data) {
            if (err) {
                twiml.say("there is an error");
                console.log(err.status);
                throw err.message;
            } else {
                console.log("deleted successfully.");
                twiml.say("deleted successfully");
            }
      })
     .then(recording => console.log(recording.sid))
     .done();
twiml.say('Your announcement is deleted');

  callback(null, twiml);
};

现在,我得到了正确的 ID,没有错误,但是当我检查录音日志时,录音仍然存在。这是为什么?我需要给它一些时间让它删除吗?
来自 console.log(recording.sid) 的日志也没有显示,我不确定为什么它没有执行应该删除录音的整个代码块。
提前致谢!

这里是 Twilio 开发人员布道者。

当您将 recordingStatusCallback 设置为 /delete 以及 <Gather>action 时,Twilio 将尝试两次调用 /delete;录制完成时一次,用户响应 <Gather>.

时一次

recordingStatusCallback 旨在与调用本身异步工作,因此我将专注于 action

录制完成后(用户按 *),Twilio 将向 <Record> action 属性发出请求。在该请求中,作为请求正文的一部分,您将收到 RecordingURL(即使录制状态尚未完成)。您应该将此 RecordingURL 传递给 <Gather> 的结果(或将其存储在会话中)并使用它来执行 DELETE 请求或提取 Recording SID 以用于Twilio Node模块如果需要删除录音。

这有什么帮助吗?

我想通了! 这是 /delete:
的正确代码 我更改的主要内容是将我的回调移动到 remove(function(...)) 中,因此该函数仅在 HTTP 请求完成后 returns。

exports.handler = function(context, event, callback) {


  const twiml = new Twilio.twiml.VoiceResponse();
  const id = event.RecordingSid;
  var client = context.getTwilioClient();
  console.log(client);
  const URL = event.RecordingUrl;

    client.recordings(id)
    .remove(function(err, data) {
                if (err) {
                    twiml.say("there is an error");
                    console.log(err.status);
                    throw err.message;
                } else {
                    console.log("deleted successfully.");
                    twiml.say("deleted successfully");
                    callback(null, twiml);
                }
    })
    .then(recording => console.log(recording.sid))
    .done();
    twiml.say('Your announcement is deleted');


};