acceptCall method

Future<void> acceptCall({
  1. required String callId,
  2. String sessionType = 'realtime',
  3. RealtimeModel? model,
  4. String? instructions,
  5. List<Modality>? outputModalities,
  6. RealtimeSessionAudio? audio,
  7. List<RealtimeFunctionTool>? tools,
  8. ToolChoice? toolChoice,
  9. dynamic maxOutputTokens,
  10. List<String>? include,
  11. Tracing? tracing,
  12. Map<String, dynamic>? prompt,
  13. dynamic truncation,
})

Accept an incoming SIP call and configure the realtime session that will handle it.

Mirrors POST /v1/realtime/calls/{call_id}/accept

Notes:

  • sessionType must be "realtime" per API (kept configurable for symmetry).
  • If you set outputModalities to Modality.text, the model will respond with text only.
  • Audio formats are translated to the Calls wire format: pcm16 → {type:"audio/pcm", rate:24000}, g711_ulaw → audio/pcmu, g711_alaw → audio/pcma

Implementation

Future<void> acceptCall({
  required String callId,
  String sessionType = 'realtime',
  RealtimeModel? model,
  String? instructions,
  List<Modality>? outputModalities, // Calls key: output_modalities
  RealtimeSessionAudio? audio,
  // Tools & guidance
  List<RealtimeFunctionTool>? tools,
  ToolChoice? toolChoice,
  dynamic maxOutputTokens, // int | "inf"
  List<String>? include, // e.g. ["item.input_audio_transcription.logprobs"]
  Tracing? tracing, // "auto" or object
  Map<String, dynamic>? prompt, // {id, variables?, version?}
  dynamic truncation, // "auto" or {type:"retention_ratio", retention_ratio:0.5}
}) async {
  final payload = <String, dynamic>{
    'type': sessionType, // must be "realtime"
    if (model != null) 'model': model.toJson(),
    if (instructions != null) 'instructions': instructions,
    if (maxOutputTokens != null) 'max_output_tokens': maxOutputTokens,
    if (outputModalities != null) 'output_modalities': outputModalities.map((m) => m.toJson()).toList(),
    if (tools != null) 'tools': tools.map((t) => t.toJson()).toList(),
    if (toolChoice != null) 'tool_choice': toolChoice.toJson(),
    if (include != null) 'include': include,
    if (tracing != null) 'tracing': tracing.toJson(),
    if (prompt != null) 'prompt': prompt,
    if (truncation != null) 'truncation': truncation,
    if (audio != null) 'audio': audio.toJson(),
  };

  final res = await postJson('/realtime/calls/$callId/accept', payload);
  if (res.statusCode != 200) {
    throw OpenAIRequestException.fromHttpResponse(res);
  }
}