fix(voice): address codex review feedback on Call-model PR
- Guard against delayed conference-start retries rolling a progressed call back to ringing (Conference::Manager#mark_ringing!). - Scope conference-status webhook Call lookup to the resolved inbox (VoiceController#find_call_for_conference!). - Require explicit call_sid on the agent TwiML leg and on ConferenceController#create/destroy so multi-call conversations can't attach the wrong call (no more most-recent-active fallback). - Scope StatusUpdateService Call lookup to the webhook's account for defense-in-depth. - Update UPDATE_MESSAGE_CALL_STATUS mutation to match the voice_call message by call_sid; helper/voice.js now passes callSid. Prevents an older call's status update from clobbering the newest bubble.
This commit is contained in:
@@ -91,13 +91,13 @@ RSpec.describe Api::V1::Accounts::ConferenceController, type: :request do
|
||||
expect(conference_service).to have_received(:mark_agent_joined)
|
||||
end
|
||||
|
||||
it 'falls back to the most recent active call on the conversation when call_sid is missing' do
|
||||
it 'rejects the request when call_sid is missing' do
|
||||
post "/api/v1/accounts/#{account.id}/inboxes/#{voice_inbox.id}/conference",
|
||||
headers: agent.create_new_auth_token,
|
||||
params: { conversation_id: conversation.display_id }
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(conference_service).to have_received(:ensure_conference_sid)
|
||||
expect(response).to have_http_status(:unprocessable_content)
|
||||
expect(conference_service).not_to have_received(:ensure_conference_sid)
|
||||
end
|
||||
|
||||
it 'does not allow accessing calls from inboxes without access' do
|
||||
|
||||
Reference in New Issue
Block a user