feat(whatsapp-call): add call recording, transcription, beforeunload termination and documentation

This commit is contained in:
Tanmay Deep Sharma
2026-03-24 13:13:49 +05:30
parent d6eb945d25
commit 504a32214e
19 changed files with 1943 additions and 193 deletions
+16 -4
View File
@@ -18,6 +18,10 @@ const isVoiceCallMessage = message => {
return CONTENT_TYPES.VOICE_CALL === message?.content_type;
};
const isWhatsappCall = message => {
return message?.content_attributes?.data?.call_source === 'whatsapp';
};
const shouldSkipCall = (callDirection, senderId, currentUserId) => {
return callDirection === 'outbound' && senderId !== currentUserId;
};
@@ -36,6 +40,10 @@ function extractCallData(message) {
export function handleVoiceCallCreated(message, currentUserId) {
if (!isVoiceCallMessage(message)) return;
// WhatsApp calls are managed by their own store (whatsappCalls),
// don't add them to the Twilio calls store.
if (isWhatsappCall(message)) return;
const { callSid, callDirection, conversationId, senderId } =
extractCallData(message);
@@ -56,14 +64,18 @@ export function handleVoiceCallUpdated(commit, message, currentUserId) {
const { callSid, status, callDirection, conversationId, senderId } =
extractCallData(message);
const callsStore = useCallsStore();
callsStore.handleCallStatusChanged({ callSid, status, conversationId });
// Vuex message/conversation status updates apply to all call sources
const callInfo = { conversationId, callStatus: status };
commit(types.UPDATE_CONVERSATION_CALL_STATUS, callInfo);
commit(types.UPDATE_MESSAGE_CALL_STATUS, callInfo);
// Twilio-specific store interactions — skip for WhatsApp calls
if (isWhatsappCall(message)) return;
const callsStore = useCallsStore();
callsStore.handleCallStatusChanged({ callSid, status, conversationId });
const isNewCall =
status === 'ringing' &&
!shouldSkipCall(callDirection, senderId, currentUserId);