twilio - 如何使用状态回调 twilio 获取合成链接

标签 twilio

这是我尝试过的方法,但没有用。

这家伙负责在 session 结束后创作一篇作文。

app.post('/api/endMeeting', (req, res) => {
  const roomSid = req.body.roomSid;
  userEmail = req.body.userEmail;
  const client = require('twilio')(config.twilio.apiKey, config.twilio.apiSecret, {accountSid: config.twilio.accountSid});
  client.video.rooms(roomSid).update({ status: 'completed' });
  client.video.compositions.create({
    roomSid: roomSid,
    audioSources: '*',
    videoLayout: {
      grid : {
        video_sources: ['*']
      }
    },
    statusCallback: `${process.env.REACT_APP_BASE_URL}/api/getMeeting`,
    statusCallbackMethod: 'POST',
    format: 'mp4'
  }).then(() => {
    // sendRecordingEmail(composition.sid, userEmail);
    res.status(200).send({
      message: 'success'
    });
  }).catch(err => {
    res.status(500).send({
      message: err.message
    });
  });
});

这家伙会在可用时将作文的下载链接发送给参与者。

app.post('/api/getMeeting', (req, res) => {
  if (req.query.StatusCallbackEvent === 'composition-available') {
    const client = require('twilio')(config.twilio.apiKey, config.twilio.apiSecret, {accountSid: config.twilio.accountSid});
    const compositionSid = req.query.CompositionSid;
    const uri = "https://video.twilio.com/v1/Compositions/" + compositionSid + "/Media?Ttl=3600";

    client.request({
      method: "GET",
      uri: uri,
    }).then((response) => {
      const requestUrl = request(response.data.redirect_to);
      sendRecordingEmail(requestUrl, userEmail);
      res.status(200).send("success");

    }).catch((error) => {
      res.status(500).send("Error fetching /Media resource " + error);
    });
  }
});

我可以确认合成完全是在 Twilio 控制台中创建的。 但状态回调人员似乎无法正常工作,我可以看到以下问题。

Bug from Twilio debugger

看来我在使用状态回调时犯了错误。 请让我知道问题是什么以及如何解决。 谢谢。

最佳答案

非常感谢@philnash帮忙解决这个问题。👍


我解决了上面的问题,现在可以拿到作文的下载链接了。

问题出在状态回调函数中,由于状态回调方法,我应该使用 req.body 而不是 req.query。 (在我的代码中是 POST。)

这是固定的代码。

app.post('/api/getMeeting', (req, res) => {
  if (req.body.StatusCallbackEvent === 'composition-available') {
    const client = require('twilio')(config.twilio.apiKey, config.twilio.apiSecret, {accountSid: config.twilio.accountSid});
    const compositionSid = req.body.CompositionSid;
    const uri = "https://video.twilio.com/v1/Compositions/" + compositionSid + "/Media?Ttl=3600";

    client.request({
      method: "GET",
      uri: uri,
    }).then((response) => {
      const requestUrl = response.body.redirect_to; // Getting the redirect link that user can download composition
      sendRecordingEmail(requestUrl, userEmail); // Send URL via email to the user
      res.status(200).send("success");

    }).catch((error) => {
      res.status(500).send("Error fetching /Media resource " + error);
    });
  } else {
    res.status(204).send('compositioin is not available');
  }
});

关于twilio - 如何使用状态回调 twilio 获取合成链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65348645/

相关文章:

javascript - 使用wrapAsync 将 Twilio Node 客户端包装在 Meteor 应用程序中失败

python - 使用 Twilio/Flask 转发 SMS 的模式验证警告

javascript - Twilio 测试电话号码无法使用

java - 使用 Twilio 的 REST API

Twilio Whatsapp API 获取客户姓名并显示照片

java - 如何使用 Twilio 在当前通话中添加另一个号码?

twilio - 如何将内容类型添加到 Twilio 响应?

authentication - Firebase 短信验证/身份验证

ruby-on-rails - 如何使用 Twilio 接收来自用户的文本消息并使用消息回复该文本?

python - 调用元类基函数()时出错参数 1 必须是 code 而不是 str