2023-02-13 12:41:30 +00:00
|
|
|
import Twilio from "twilio";
|
2024-04-21 09:44:30 +02:00
|
|
|
import config from "@digiresilience/bridge-config";
|
2023-02-13 12:41:30 +00:00
|
|
|
import { withDb, AppDatabase } from "../db";
|
|
|
|
|
|
|
|
|
|
interface VoiceLineUpdateTaskOptions {
|
|
|
|
|
voiceLineId: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const voiceLineUpdateTask = async (
|
2024-04-21 09:44:30 +02:00
|
|
|
payload: VoiceLineUpdateTaskOptions,
|
2023-02-13 12:41:30 +00:00
|
|
|
): Promise<void> =>
|
|
|
|
|
withDb(async (db: AppDatabase) => {
|
|
|
|
|
const { voiceLineId } = payload;
|
|
|
|
|
const voiceLine = await db.voiceLines.findById({ id: voiceLineId });
|
|
|
|
|
if (!voiceLine) return;
|
|
|
|
|
|
|
|
|
|
const provider = await db.voiceProviders.findById({
|
|
|
|
|
id: voiceLine.providerId,
|
|
|
|
|
});
|
|
|
|
|
if (!provider) return;
|
|
|
|
|
|
|
|
|
|
const { accountSid, apiKeySid, apiKeySecret } = provider.credentials;
|
|
|
|
|
if (!accountSid || !apiKeySid || !apiKeySecret)
|
|
|
|
|
throw new Error(
|
2024-04-21 09:44:30 +02:00
|
|
|
`twilio provider ${provider.name} does not have credentials`,
|
2023-02-13 12:41:30 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const client = Twilio(apiKeySid, apiKeySecret, {
|
|
|
|
|
accountSid,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
await client.incomingPhoneNumbers(voiceLine.providerLineSid).update({
|
|
|
|
|
voiceUrl: `${config.frontend.url}/api/v1/voice/twilio/record/${voiceLineId}`,
|
|
|
|
|
voiceMethod: "POST",
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export default voiceLineUpdateTask;
|