First cut
This commit is contained in:
30
server/src/sms/reply.ts
Normal file
30
server/src/sms/reply.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { logger, maskPhone } from '../logger.js';
|
||||
|
||||
const TELNYX_API_KEY = process.env.TELNYX_API_KEY || '';
|
||||
|
||||
export async function sendSms(to: string, from: string, body: string): Promise<void> {
|
||||
if (!TELNYX_API_KEY) {
|
||||
logger.warn({ event: 'sms.send_skipped', to: maskPhone(to) }, 'No TELNYX_API_KEY, skipping SMS send');
|
||||
logger.info({ event: 'sms.would_send', body }, 'SMS body (dev mode)');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const resp = await fetch('https://api.telnyx.com/v2/messages', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${TELNYX_API_KEY}`,
|
||||
},
|
||||
body: JSON.stringify({ from, to, text: body }),
|
||||
});
|
||||
|
||||
if (!resp.ok) {
|
||||
logger.error({ event: 'sms.send_failed', status: resp.status }, 'Failed to send SMS');
|
||||
} else {
|
||||
logger.info({ event: 'sms.sent', to: maskPhone(to) }, 'SMS sent');
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error({ event: 'sms.send_error', error: (err as Error).message }, 'SMS send error');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user