First cut

This commit is contained in:
kadil
2026-04-17 16:08:31 -05:00
parent d10105ac00
commit 4ee4cb8e7c
58 changed files with 3243 additions and 1 deletions

30
server/src/sms/parse.ts Normal file
View File

@@ -0,0 +1,30 @@
export interface ParsedInboundSms {
messageId: string;
from: string;
to: string;
text: string;
hasMedia: boolean;
mediaUrls: string[];
}
export function parseTelnyxInboundMessage(body: unknown): ParsedInboundSms | null {
try {
const data = body as Record<string, unknown>;
const eventData = (data.data as Record<string, unknown>) || data;
const payload = (eventData.payload as Record<string, unknown>) || eventData;
const from = ((payload.from as Record<string, unknown>)?.phone_number as string) || (payload.from as string) || '';
const to = (Array.isArray(payload.to) ? (payload.to[0] as Record<string, unknown>)?.phone_number : (payload.to as Record<string, unknown>)?.phone_number) as string || '';
const text = (payload.text as string) || (payload.body as string) || '';
const messageId = (payload.id as string) || (eventData.id as string) || '';
const media = (payload.media as Array<{ url: string }>) || [];
const mediaUrls = media.map(m => m.url).filter(Boolean);
if (!from || !text) return null;
return { messageId, from, to, text: text.trim(), hasMedia: mediaUrls.length > 0, mediaUrls };
} catch {
return null;
}
}