Как удалить последнюю (самую последнюю) запись, сделанную абонентом в Twilio в Node.JS - PullRequest
0 голосов
/ 28 мая 2018

У меня есть функция, которая позволяет вам записывать, а затем удалять вашу запись, если вас это не устраивает.Вы можете удалить свою последнюю запись, нажав *.

Мой код для записи:

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);
};

Код для удаления последней записи (/ удаления):

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);
};

Сейчас я получаю правильныйидентификатор и никаких ошибок, но запись все еще там, когда я проверяю журнал записей.Это почему?Нужно ли дать ему время, чтобы удалить?
Журнал из console.log(recording.sid) также не отображается, и я не уверен, почему он не выполняет весь блок кода, который должен удалить запись.
Спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Я понял это!Это правильный код для / delete:
Главное, что я изменил, это переместил мой обратный вызов в функцию удаления (функция (...)), чтобы функция возвращалась только после выполнения HTTP-запроса.

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');


};
0 голосов
/ 29 мая 2018

Евангелист разработчиков Twilio здесь.

Когда вы установите recordingStatusCallback на /delete, а также action вашего <Gather>, тогда Twilio попытается сделать два вызова на /delete;один раз, когда запись завершена, и один раз, когда пользователь отвечает на <Gather>.

. recordingStatusCallback предназначен для асинхронной работы с самим вызовом, поэтому я собираюсь сосредоточиться на actionвместо этого.

Когда запись закончена (пользователь нажимает *), Twilio сделает запрос к атрибуту <Record> action.В этом запросе вы получите, как часть основного запроса, RecordingURL (даже если статус записи еще не завершен).Вы должны передать это RecordingURL до результатов <Gather> (или сохранить его в сеансе) и использовать его для выполнения запроса DELETE или извлечения SID записи для использования с модулем узла Twilio, если вам нужноудалить запись.

Помогает ли это вообще?

...