簡體   English   中英

使用 Twilio 無服務器 SDK 提供音頻文件

[英]Serve audio file using Twilio serverless SDK

I'm trying to develop a Twilio function using the serverless SDK that can serve audio files directly to HTTP requests, following the guide here which I've got working fine using the service editor in the Twilio console. 但是,我現在嘗試使用無服務器 SDK 在本地開發服務,但完全相同的設置不起作用。

我在assets/hello.mp3有 mp3 音頻文件作為私有資產,並且節點 function functions/handler.js /handler.js 是公共的。 我的 function 是:

const fs = require('fs');

exports.handler = function(context, event, callback) {
  var phrase = event.phrase;
  
  var filePath = Runtime.getAssets()[`/${phrase}.mp3`].path;
  var buffer = fs.readFileSync(filePath);
  var stat = fs.statSync(filePath);
  
  var response = new Twilio.Response();
  
  response.setBody(buffer);
  response.appendHeader('Content-Type', 'audio/mpeg');
  response.appendHeader('Content-Length', stat.size);
  
  return callback(null, response);
};

文檔中示例的唯一修改是我允許用戶使用 GET 參數phrase指定文件名。

每當我嘗試向http://localhost:3000/handler?phrase=hello請求時,Chrome 檢測到它正在接收音頻文件,但沒有加載或播放它。 回應是:

{type: "Buffer",…}
    data: [255, 243, 68, 196, 0, 17, 82, 130, 20, 0, 24, 68, 185, 52, 68, 74, 44, 234, 110, 238, 250, 23, 204,…]
    type: "Buffer"

這向我表明緩沖區被解析為 JSON 數據而不是原始音頻數據。 但是,我已經嘗試了所有我能想到的buffer.toString()變體、不同的編碼和文件流,但沒有任何解決方法。 沒有錯誤,並且 HTTP 狀態代碼為 200。 HTTP 響應標頭為:

HTTP/1.1 200 OK
X-Powered-By: Express
Surrogate-Control: no-store
Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate
Pragma: no-cache
Expires: 0
Content-Type: audio/mpeg; charset=utf-8
Content-Length: 27077
ETag: W/"69c5-hX8H/5UaULdPYVqq2abJK7EeJmg"
Date: Mon, 22 Aug 2022 21:03:35 GMT
Connection: keep-alive
Keep-Alive: timeout=5

我嘗試了很多示例,其中人們在使用 Node 提供非文本數據時遇到了類似的問題,但是 Twilio 響應 object 似乎相當嚴格,我無法讓它們中的任何一個工作。 感謝您的任何建議!

另外,我嘗試像這樣設置 function 的原因是我有很多可能的句子,我可能想在通話中播放,所以我想將幾個短語存儲為資產並將它們連接起來一起在 function 中。 我希望剪輯是私有資產,因此 function 可以以最小的延遲訪問它們,並且連接需要非常快,所以我不想連續使用大量 TwiML <Play>動詞,這可能會引入暫停詞之間。

這似乎是Twilio Serverless Toolkit中處理二進制文件的錯誤。 我將相同的 JavaScript 上傳到 Functions 服務並成功運行。

解決方法是部署您的 function 並遠程測試,而不是本地測試。

這顯然不理想,您能否在這里提出問題(以便您隨時了解情況),我們會盡力解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM