/* eslint-disable camelcase */ // import { SavedVoiceProvider } from "@digiresilience/bridge-db"; import Twilio from "twilio"; import { CallInstance } from "twilio/lib/rest/api/v2010/account/call"; import { Zammad, getOrCreateUser } from "./zammad.js"; import { createLogger } from "@link-stack/logger"; const logger = createLogger('bridge-worker-common'); type SavedVoiceProvider = any; export const twilioClientFor = ( provider: SavedVoiceProvider, ): Twilio.Twilio => { const { accountSid, apiKeySid, apiKeySecret } = provider.credentials; if (!accountSid || !apiKeySid || !apiKeySecret) throw new Error( `twilio provider ${provider.name} does not have credentials`, ); return Twilio(apiKeySid, apiKeySecret, { accountSid, }); }; export const createZammadTicket = async ( call: CallInstance, mp3: Buffer, ): Promise => { const title = `Call from ${call.fromFormatted} at ${call.startTime}`; const body = `

See the attached recording.

`; const filename = `${call.sid}-${call.startTime}.mp3`; const zammad = Zammad( { token: "EviH_WL0p6YUlCoIER7noAZEAPsYA_fVU4FZCKdpq525Vmzzvl8d7dNuP_8d-Amb", }, "https://demo.digiresilience.org", ); try { const customer = await getOrCreateUser(zammad, call.fromFormatted); await zammad.ticket.create({ title, group: "Finances", note: "This ticket was created automaticaly from a recorded phone call.", customer_id: customer.id, article: { body, subject: title, content_type: "text/html", type: "note", attachments: [ { filename, data: mp3.toString("base64"), "mime-type": "audio/mpeg", }, ], }, }); } catch (error: any) { if (error.isBoom) { logger.error({ output: error.output }, 'Zammad ticket creation failed'); throw new Error("Failed to create zamamd ticket"); } } };