const express = require("express");
const Telnyx = require("telnyx");
const app = express();
app.use(express.json());
const client = new Telnyx({
apiKey: process.env.TELNYX_API_KEY,
});
// Answer incoming calls with deepfake detection enabled
app.post("/webhooks/call-initiated", async (req, res) => {
const { call_control_id } = req.body.payload;
await client.calls.actions.answer(call_control_id, {
deepfake_detection: {
enabled: true,
timeout: 15,
rtp_timeout: 30,
},
});
res.sendStatus(200);
});
// Handle deepfake detection results
app.post("/webhooks/deepfake-result", async (req, res) => {
const { call_control_id, result, score, consistency } =
req.body.payload;
console.log(
`Detection result: ${result}, score: ${score}, consistency: ${consistency}%`
);
if (result === "fake" && score > 0.8) {
// High-confidence deepfake — hang up or route to fraud queue
await client.calls.actions.hangup(call_control_id, {});
console.log("Deepfake detected — call terminated.");
} else if (result === "real") {
// Human caller — proceed normally
console.log("Human caller verified.");
}
// silence_timeout — caller didn't speak; handle as needed
res.sendStatus(200);
});
// Handle detection errors gracefully
app.post("/webhooks/deepfake-error", async (req, res) => {
const { call_control_id, error_message } = req.body.payload;
console.log(`Deepfake detection error: ${error_message}`);
// Continue the call normally if detection fails
res.sendStatus(200);
});
app.listen(3000, () => console.log("Webhook server running on port 3000"));