From acb135f5f1b8a5b0b868a0cf2ab82144a5240d5b Mon Sep 17 00:00:00 2001 From: YCC Date: Thu, 6 Jun 2024 10:52:37 +0800 Subject: [PATCH] =?UTF-8?q?vonage=E7=9A=84=E6=9C=8D=E5=8A=A1=E7=AB=AF?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=EF=BC=8C=E7=8B=AC=E7=AB=8B=E8=BF=90=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vonage-server/README.md | 1 + vonage-server/gh-private.key | 28 ++++++++++++ vonage-server/index.js | 86 ++++++++++++++++++++++++++++++++++++ vonage-server/package.json | 10 +++++ 4 files changed, 125 insertions(+) create mode 100644 vonage-server/README.md create mode 100644 vonage-server/gh-private.key create mode 100644 vonage-server/index.js create mode 100644 vonage-server/package.json diff --git a/vonage-server/README.md b/vonage-server/README.md new file mode 100644 index 0000000..bcded1a --- /dev/null +++ b/vonage-server/README.md @@ -0,0 +1 @@ +vonage的服务端,用于生成jwt和应答语音视频请求 \ No newline at end of file diff --git a/vonage-server/gh-private.key b/vonage-server/gh-private.key new file mode 100644 index 0000000..cf18c90 --- /dev/null +++ b/vonage-server/gh-private.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbwVZh35hHmN0G +FxzvwhPWHTn+V/8jxHWkXvUnQwigE4PW0upWs1qyh8OtqiYJFPWXqQVtgzW7BnkA +FlNTJNJ0UqtI9DME2rokXfi1xM2iMGPVQTLQTCATcwFq++VGjkv5BiO6yaTLeZmi +jAFanQzHrFO5EjWwMix19rNFHikQ+ZzuxkhO72Na2zH7DMaHgHpjiv5P+6IwwSLl +Tf90iA5cdzHZOT/Yg/vbkOzNp1OJ9+MTi6OQifKw7oaZSgPG13wknYYvKe2GQyEA +GFMtrzhbb/n9G8iWqP1ka3lLTLfP+MRZuxdcTbpCD3mFOIvjmv4Tp8CW3ZIq8+ri +ZXfR+RLzAgMBAAECggEAQhb1EP2f741xB7MJ/8Axy5JGN+Ld667injb+vkSm5cmy +ERcZAWYET6nlAY0nq4XduhcpqvDYfT3/XOacP7Tpqhsj/AZGmcI35tOLA5H5EV+I +FQafyZvrpmUPznYJMPmTShztT0Zdq0szQjI3Jtxp/lXkhqyv5E496GYgZm0oTr96 +QCAefZgpbSvWCgqe2KBG4UhaeymYNwvtK4edsWs1c/l9E46CqUfm5Svw074T7kk4 +ysG112oelCxqPpyyldFnfaYSwtDoKbC9ouVjWebMyLFztxMsTexlm93UxWoAC2hA +dkfqZ7fEZua74XRDbLY8nVeBTTy8mgXWwfRMChj/cQKBgQDSp+2jCCZ6pkozBINE +ZpFP8Oxfnt0qe6XdmP5X6w+63KmP6hs/Ee4q7naUSFY2p+BifoYVvpNwUmI98cbX +p4MSD+T1zu77sSM4hSmDAJrX/YLS+ABcAK+lzZlygJGLts8LqjfvH0r992zynuE1 +eIuDp4x7SNnlZh3J7LBKBlPocQKBgQC9SCLjtCvprGmHVtLs/fu0PpYPhwZTk/Ik +RvgZt2hwJ77bU8qODNWQlgbOc0GDEHzbjLMZ5jwIGqoR6pKdAQUJ+e+f8tTUTdBV +qiBTDEX1DzECZPRcQihjX/DDdCXeOiUKnfjGCxFJ73DXLpZMGnK/A51ianlKNq9y +qv4od17DowKBgDRDvc3pQ8LCZz5pLDhYSk1PNRY0UCMuMmTchJ5Dj8+I1/kA2Gm5 +hSHZsEnx+JHu7NkDEzlp4yLHDeDYj8EJqpdcoi3qfZisxlRLlZUPHVvhZgf5x/0L +nojAjgW+qF3FqXD3dpE5bl28eadoi++8TMEJXO1pkcY8o79pngN/tmnBAoGBAJ5R +V91dNd2deCbbWFEhnwaD0r/qEECX3lC5i4r2/UPR+rE4xJNL6NWmpsrHXGRjxgtd +A/EFwfCFXPrfWQI5eB2AEA2Y7qsk6ry8L41HFryCmFuIVVtVerKj7J2O6J2XxKO8 +vffoCe3teFSDgvLkrFVYkKtgo1KPqvAeVbdDIOBBAoGAHlVrBW654zCTFQ1Ovxfn +IWr6xQVs7wJxwB39FM/tyaRgqND6YZwqzSB4Y5GX89K4iPgAKl9w2pLEJtkKb1Pb +ohkpZfQxuFHA2JA5gLLlOo/Dd0rGUxPNM7dgfNpirDpDEKscE+x0bYLz0rXG2ILb +/X6emIC7Xm9WJa9f2+3KRn0= +-----END PRIVATE KEY----- diff --git a/vonage-server/index.js b/vonage-server/index.js new file mode 100644 index 0000000..44ca0d7 --- /dev/null +++ b/vonage-server/index.js @@ -0,0 +1,86 @@ +"use strict"; + +const express = require("express"); +const fs = require("fs"); +const { tokenGenerate } = require("@vonage/jwt"); +const privateKey = fs.readFileSync("gh-private.key"); +const aclPaths = { + paths: { + "/*/rtc/**": {}, + "/*/users/**": {}, + "/*/conversations/**": {}, + "/*/sessions/**": {}, + "/*/devices/**": {}, + "/*/image/**": {}, + "/*/media/**": {}, + "/*/knocking/**": {}, + "/*/legs/**": {}, + }, +}; + + +const app = express(); +app.use(express.json()); + +const vonageNumber = "12052553394"; //用于通话的号码,今后根据前端提交来做号码切换 + +//设置跨域访问 +app.all('*', function(req, res, next) { + res.header("Access-Control-Allow-Origin", "*"); + res.header("Access-Control-Allow-Headers", "*"); + res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); + res.header("Content-Type", "application/json;charset=utf-8"); + next(); +}); + +app.get("/voice/answer", (req, res) => { + console.log("NCCO request:"); + console.log(` - callee: ${req.query.to}`); + console.log("---"); + res.json([ + { + action: "talk", + text: "Please wait while we connect you.", + }, + { + action: "connect", + from: vonageNumber, + endpoint: [{ type: "phone", number: req.query.to }], + }, + ]); +}); + +app.get("/jwt", (req, res) => { + console.log("jwt Generate:"); + const exp_time = new Date(Date.now() + 3 * 24 * 3600 * 1000); + const token=tokenGenerate("39f32a2a-e343-4ca0-9d92-5946573af5ea", privateKey, { + exp: Math.round(exp_time.getTime()/1000), + sub: "hainatravel", + acl: aclPaths, + }) + console.log(Math.round(exp_time.getTime()/1000)); + console.log(token); + console.log("---"); + res.json({ + token: token, + status: 200, + }); +}); + +app.all("/voice/event", (req, res) => { + console.log("EVENT:"); + console.dir(req.body); + console.log("---"); + res.sendStatus(200); +}); + +app.all("/voice/fallback", (req, res) => { + console.log("fallback:"); + console.dir(req.body); + console.dir(res); + console.log("---"); + res.sendStatus(200); +}); + + +app.listen(3009); diff --git a/vonage-server/package.json b/vonage-server/package.json new file mode 100644 index 0000000..cb8f638 --- /dev/null +++ b/vonage-server/package.json @@ -0,0 +1,10 @@ +{ + "dependencies": { + "@vonage/jwt": "^1.10.0", + "express": "^4.19.2" + }, + "scripts": { + "start": "node index.js", + "dev": "nodemon index.js" + } +}