acceptCall method
Future<void>
acceptCall({
- required String callId,
- String sessionType = 'realtime',
- RealtimeModel? model,
- String? instructions,
- List<
Modality> ? outputModalities, - RealtimeSessionAudio? audio,
- List<
RealtimeFunctionTool> ? tools, - ToolChoice? toolChoice,
- dynamic maxOutputTokens,
- List<
String> ? include, - Tracing? tracing,
- Map<
String, dynamic> ? prompt, - 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);
}
}