Evo Voice

<back to all web services

LiveAnswerCallback

The following routes are available for this service:
All Verbs/nodes/live-answer/callback
import 'package:servicestack/servicestack.dart';
import 'dart:typed_data';

class LiveAnswerCallbackTranscriptMessage implements IConvertible
{
    DateTime? date;
    String? role;
    String? senderName;
    String? targetName;
    String? functionName;
    String? functionArgs;
    String? content;

    LiveAnswerCallbackTranscriptMessage({this.date,this.role,this.senderName,this.targetName,this.functionName,this.functionArgs,this.content});
    LiveAnswerCallbackTranscriptMessage.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        date = JsonConverters.fromJson(json['date'],'DateTime',context!);
        role = json['role'];
        senderName = json['senderName'];
        targetName = json['targetName'];
        functionName = json['functionName'];
        functionArgs = json['functionArgs'];
        content = json['content'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'date': JsonConverters.toJson(date,'DateTime',context!),
        'role': role,
        'senderName': senderName,
        'targetName': targetName,
        'functionName': functionName,
        'functionArgs': functionArgs,
        'content': content
    };

    getTypeName() => "LiveAnswerCallbackTranscriptMessage";
    TypeContext? context = _ctx;
}

class LiveAnswerCallbackAttachment implements IConvertible
{
    String? fileName;
    String? contentType;
    String? uri;
    String? data;

    LiveAnswerCallbackAttachment({this.fileName,this.contentType,this.uri,this.data});
    LiveAnswerCallbackAttachment.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        fileName = json['fileName'];
        contentType = json['contentType'];
        uri = json['uri'];
        data = json['data'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'fileName': fileName,
        'contentType': contentType,
        'uri': uri,
        'data': data
    };

    getTypeName() => "LiveAnswerCallbackAttachment";
    TypeContext? context = _ctx;
}

class LiveAnswerCallback implements IConvertible
{
    String? sessionId;
    String? flowId;
    String? nodeId;
    String? clientId;
    String? conversationId;
    int? aiMinutes;
    String? from;
    String? to;
    List<LiveAnswerCallbackTranscriptMessage>? transcript;
    DateTime? startDate;
    DateTime? endDate;
    List<LiveAnswerCallbackAttachment>? attachments;
    String? completed;
    String? callRecordingUrl;

    LiveAnswerCallback({this.sessionId,this.flowId,this.nodeId,this.clientId,this.conversationId,this.aiMinutes,this.from,this.to,this.transcript,this.startDate,this.endDate,this.attachments,this.completed,this.callRecordingUrl});
    LiveAnswerCallback.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        sessionId = json['sessionId'];
        flowId = json['flowId'];
        nodeId = json['nodeId'];
        clientId = json['clientId'];
        conversationId = json['conversationId'];
        aiMinutes = json['aiMinutes'];
        from = json['from'];
        to = json['to'];
        transcript = JsonConverters.fromJson(json['transcript'],'List<LiveAnswerCallbackTranscriptMessage>',context!);
        startDate = JsonConverters.fromJson(json['startDate'],'DateTime',context!);
        endDate = JsonConverters.fromJson(json['endDate'],'DateTime',context!);
        attachments = JsonConverters.fromJson(json['attachments'],'List<LiveAnswerCallbackAttachment>',context!);
        completed = json['completed'];
        callRecordingUrl = json['callRecordingUrl'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'sessionId': sessionId,
        'flowId': flowId,
        'nodeId': nodeId,
        'clientId': clientId,
        'conversationId': conversationId,
        'aiMinutes': aiMinutes,
        'from': from,
        'to': to,
        'transcript': JsonConverters.toJson(transcript,'List<LiveAnswerCallbackTranscriptMessage>',context!),
        'startDate': JsonConverters.toJson(startDate,'DateTime',context!),
        'endDate': JsonConverters.toJson(endDate,'DateTime',context!),
        'attachments': JsonConverters.toJson(attachments,'List<LiveAnswerCallbackAttachment>',context!),
        'completed': completed,
        'callRecordingUrl': callRecordingUrl
    };

    getTypeName() => "LiveAnswerCallback";
    TypeContext? context = _ctx;
}

abstract class IVirtualDirectory
{
}

abstract class IVirtualPathProvider
{
    IVirtualDirectory? rootDirectory;
    String? virtualPathSeparator;
    String? realPathSeparator;
}

abstract class IVirtualFile
{
    IVirtualPathProvider? virtualPathProvider;
    String? Extension;
    int? length;
}

// @flags()
class CacheControl
{
    static const CacheControl None = const CacheControl._(0);
    static const CacheControl Public = const CacheControl._(1);
    static const CacheControl Private = const CacheControl._(2);
    static const CacheControl MustRevalidate = const CacheControl._(4);
    static const CacheControl NoCache = const CacheControl._(8);
    static const CacheControl NoStore = const CacheControl._(16);
    static const CacheControl NoTransform = const CacheControl._(32);
    static const CacheControl ProxyRevalidate = const CacheControl._(64);

    final int _value;
    const CacheControl._(this._value);
    int get value => _value;
    static List<CacheControl> get values => const [None,Public,Private,MustRevalidate,NoCache,NoStore,NoTransform,ProxyRevalidate];
}

abstract class IContentTypeWriter
{
}

abstract class IResponse
{
    dynamic? originalResponse;
    IRequest? request;
    int? statusCode;
    String? statusDescription;
    String? contentType;
    Uint8List? outputStream;
    dynamic? dto;
    bool? useBufferedStream;
    bool? isClosed;
    bool? keepAlive;
    bool? hasStarted;
    Map<String,dynamic?>? items;
}

// @flags()
class RequestAttributes
{
    static const RequestAttributes None = const RequestAttributes._(0);
    static const RequestAttributes Localhost = const RequestAttributes._(1);
    static const RequestAttributes LocalSubnet = const RequestAttributes._(2);
    static const RequestAttributes External = const RequestAttributes._(4);
    static const RequestAttributes Secure = const RequestAttributes._(8);
    static const RequestAttributes InSecure = const RequestAttributes._(16);
    static const RequestAttributes AnySecurityMode = const RequestAttributes._(24);
    static const RequestAttributes HttpHead = const RequestAttributes._(32);
    static const RequestAttributes HttpGet = const RequestAttributes._(64);
    static const RequestAttributes HttpPost = const RequestAttributes._(128);
    static const RequestAttributes HttpPut = const RequestAttributes._(256);
    static const RequestAttributes HttpDelete = const RequestAttributes._(512);
    static const RequestAttributes HttpPatch = const RequestAttributes._(1024);
    static const RequestAttributes HttpOptions = const RequestAttributes._(2048);
    static const RequestAttributes HttpOther = const RequestAttributes._(4096);
    static const RequestAttributes AnyHttpMethod = const RequestAttributes._(8160);
    static const RequestAttributes OneWay = const RequestAttributes._(8192);
    static const RequestAttributes Reply = const RequestAttributes._(16384);
    static const RequestAttributes AnyCallStyle = const RequestAttributes._(24576);
    static const RequestAttributes Soap11 = const RequestAttributes._(32768);
    static const RequestAttributes Soap12 = const RequestAttributes._(65536);
    static const RequestAttributes Xml = const RequestAttributes._(131072);
    static const RequestAttributes Json = const RequestAttributes._(262144);
    static const RequestAttributes Jsv = const RequestAttributes._(524288);
    static const RequestAttributes ProtoBuf = const RequestAttributes._(1048576);
    static const RequestAttributes Csv = const RequestAttributes._(2097152);
    static const RequestAttributes Html = const RequestAttributes._(4194304);
    static const RequestAttributes Jsonl = const RequestAttributes._(8388608);
    static const RequestAttributes MsgPack = const RequestAttributes._(16777216);
    static const RequestAttributes FormatOther = const RequestAttributes._(33554432);
    static const RequestAttributes AnyFormat = const RequestAttributes._(67076096);
    static const RequestAttributes Http = const RequestAttributes._(67108864);
    static const RequestAttributes MessageQueue = const RequestAttributes._(134217728);
    static const RequestAttributes Tcp = const RequestAttributes._(268435456);
    static const RequestAttributes Grpc = const RequestAttributes._(536870912);
    static const RequestAttributes EndpointOther = const RequestAttributes._(1073741824);
    static const RequestAttributes AnyEndpoint = const RequestAttributes._(2080374784);
    static const RequestAttributes InProcess = const RequestAttributes._(-2147483648);
    static const RequestAttributes InternalNetworkAccess = const RequestAttributes._(-2147483645);
    static const RequestAttributes AnyNetworkAccessType = const RequestAttributes._(-2147483641);
    static const RequestAttributes Any = const RequestAttributes._(-1);

    final int _value;
    const RequestAttributes._(this._value);
    int get value => _value;
    static List<RequestAttributes> get values => const [None,Localhost,LocalSubnet,External,Secure,InSecure,AnySecurityMode,HttpHead,HttpGet,HttpPost,HttpPut,HttpDelete,HttpPatch,HttpOptions,HttpOther,AnyHttpMethod,OneWay,Reply,AnyCallStyle,Soap11,Soap12,Xml,Json,Jsv,ProtoBuf,Csv,Html,Jsonl,MsgPack,FormatOther,AnyFormat,Http,MessageQueue,Tcp,Grpc,EndpointOther,AnyEndpoint,InProcess,InternalNetworkAccess,AnyNetworkAccessType,Any];
}

abstract class IRequestPreferences
{
    bool? acceptsBrotli;
    bool? acceptsDeflate;
    bool? acceptsGzip;
}

abstract class IHttpFile
{
    String? name;
    String? fileName;
    int? contentLength;
    String? contentType;
    Uint8List? inputStream;
}

abstract class IRequest
{
    dynamic? originalRequest;
    IResponse? response;
    String? operationName;
    String? verb;
    RequestAttributes? requestAttributes;
    IRequestPreferences? requestPreferences;
    dynamic? dto;
    String? contentType;
    bool? isLocal;
    String? userAgent;
    Map<String,Cookie?>? cookies;
    String? responseContentType;
    bool? hasExplicitResponseContentType;
    Map<String,dynamic?>? items;
    NameValueCollection? headers;
    NameValueCollection? queryString;
    NameValueCollection? formData;
    bool? useBufferedStream;
    String? rawUrl;
    String? absoluteUri;
    String? userHostAddress;
    String? remoteIp;
    String? authorization;
    bool? isSecureConnection;
    List<String>? acceptTypes;
    String? pathInfo;
    String? originalPathInfo;
    Uint8List? inputStream;
    int? contentLength;
    List<IHttpFile>? files;
    Uri? urlReferrer;
}

class HttpResult implements IConvertible
{
    String? responseText;
    Uint8List? responseStream;
    FileInfo? fileInfo;
    IVirtualFile? virtualFile;
    String? contentType;
    Map<String,String?>? headers;
    List<Cookie>? cookies;
    String? eTag;
    Duration? age;
    Duration? maxAge;
    DateTime? expires;
    DateTime? lastModified;
    CacheControl? cacheControl;
    Func<IDisposable>? resultScope;
    bool? allowsPartialResponse;
    Map<String,String?>? options;
    int? status;
    HttpStatusCode? statusCode;
    String? statusDescription;
    dynamic? response;
    IContentTypeWriter? responseFilter;
    IRequest? requestContext;
    String? view;
    String? template;
    int? paddingLength;
    bool? isPartialRequest;

    HttpResult({this.responseText,this.responseStream,this.fileInfo,this.virtualFile,this.contentType,this.headers,this.cookies,this.eTag,this.age,this.maxAge,this.expires,this.lastModified,this.cacheControl,this.resultScope,this.allowsPartialResponse,this.options,this.status,this.statusCode,this.statusDescription,this.response,this.responseFilter,this.requestContext,this.view,this.template,this.paddingLength,this.isPartialRequest});
    HttpResult.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        responseText = json['responseText'];
        responseStream = JsonConverters.fromJson(json['responseStream'],'Uint8List',context!);
        fileInfo = JsonConverters.fromJson(json['fileInfo'],'FileInfo',context!);
        virtualFile = JsonConverters.fromJson(json['virtualFile'],'IVirtualFile',context!);
        contentType = json['contentType'];
        headers = JsonConverters.toStringMap(json['headers']);
        cookies = JsonConverters.fromJson(json['cookies'],'List<Cookie>',context!);
        eTag = json['eTag'];
        age = JsonConverters.fromJson(json['age'],'Duration',context!);
        maxAge = JsonConverters.fromJson(json['maxAge'],'Duration',context!);
        expires = JsonConverters.fromJson(json['expires'],'DateTime',context!);
        lastModified = JsonConverters.fromJson(json['lastModified'],'DateTime',context!);
        cacheControl = JsonConverters.fromJson(json['cacheControl'],'CacheControl',context!);
        resultScope = JsonConverters.fromJson(json['resultScope'],'Func<IDisposable>',context!);
        allowsPartialResponse = json['allowsPartialResponse'];
        options = JsonConverters.fromJson(json['options'],'Map<String,String?>',context!);
        status = json['status'];
        statusCode = JsonConverters.fromJson(json['statusCode'],'HttpStatusCode',context!);
        statusDescription = json['statusDescription'];
        response = JsonConverters.fromJson(json['response'],'dynamic',context!);
        responseFilter = JsonConverters.fromJson(json['responseFilter'],'IContentTypeWriter',context!);
        requestContext = JsonConverters.fromJson(json['requestContext'],'IRequest',context!);
        view = json['view'];
        template = json['template'];
        paddingLength = json['paddingLength'];
        isPartialRequest = json['isPartialRequest'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'responseText': responseText,
        'responseStream': JsonConverters.toJson(responseStream,'Uint8List',context!),
        'fileInfo': JsonConverters.toJson(fileInfo,'FileInfo',context!),
        'virtualFile': JsonConverters.toJson(virtualFile,'IVirtualFile',context!),
        'contentType': contentType,
        'headers': headers,
        'cookies': JsonConverters.toJson(cookies,'List<Cookie>',context!),
        'eTag': eTag,
        'age': JsonConverters.toJson(age,'Duration',context!),
        'maxAge': JsonConverters.toJson(maxAge,'Duration',context!),
        'expires': JsonConverters.toJson(expires,'DateTime',context!),
        'lastModified': JsonConverters.toJson(lastModified,'DateTime',context!),
        'cacheControl': JsonConverters.toJson(cacheControl,'CacheControl',context!),
        'resultScope': JsonConverters.toJson(resultScope,'Func<IDisposable>',context!),
        'allowsPartialResponse': allowsPartialResponse,
        'options': JsonConverters.toJson(options,'Map<String,String?>',context!),
        'status': status,
        'statusCode': JsonConverters.toJson(statusCode,'HttpStatusCode',context!),
        'statusDescription': statusDescription,
        'response': JsonConverters.toJson(response,'dynamic',context!),
        'responseFilter': JsonConverters.toJson(responseFilter,'IContentTypeWriter',context!),
        'requestContext': JsonConverters.toJson(requestContext,'IRequest',context!),
        'view': view,
        'template': template,
        'paddingLength': paddingLength,
        'isPartialRequest': isPartialRequest
    };

    getTypeName() => "HttpResult";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'team.evovoice.io', types: <String, TypeInfo> {
    'LiveAnswerCallbackTranscriptMessage': TypeInfo(TypeOf.Class, create:() => LiveAnswerCallbackTranscriptMessage()),
    'LiveAnswerCallbackAttachment': TypeInfo(TypeOf.Class, create:() => LiveAnswerCallbackAttachment()),
    'LiveAnswerCallback': TypeInfo(TypeOf.Class, create:() => LiveAnswerCallback()),
    'List<LiveAnswerCallbackTranscriptMessage>': TypeInfo(TypeOf.Class, create:() => <LiveAnswerCallbackTranscriptMessage>[]),
    'List<LiveAnswerCallbackAttachment>': TypeInfo(TypeOf.Class, create:() => <LiveAnswerCallbackAttachment>[]),
    'IVirtualDirectory': TypeInfo(TypeOf.Interface),
    'IVirtualPathProvider': TypeInfo(TypeOf.Interface),
    'IVirtualFile': TypeInfo(TypeOf.Interface),
    'CacheControl': TypeInfo(TypeOf.Enum, enumValues:CacheControl.values),
    'IContentTypeWriter': TypeInfo(TypeOf.Interface),
    'IResponse': TypeInfo(TypeOf.Interface),
    'RequestAttributes': TypeInfo(TypeOf.Enum, enumValues:RequestAttributes.values),
    'IRequestPreferences': TypeInfo(TypeOf.Interface),
    'IHttpFile': TypeInfo(TypeOf.Interface),
    'IRequest': TypeInfo(TypeOf.Interface),
    'HttpResult': TypeInfo(TypeOf.Class, create:() => HttpResult()),
    'Uint8List': TypeInfo(TypeOf.Class, create:() => Uint8List(0)),
    'FileInfo': TypeInfo(TypeOf.Class, create:() => FileInfo()),
    'List<Cookie>': TypeInfo(TypeOf.Class, create:() => <Cookie>[]),
    'Cookie': TypeInfo(TypeOf.Class, create:() => Cookie()),
    'Func<IDisposable>': TypeInfo(TypeOf.Class, create:() => Func<IDisposable>()),
    'IDisposable': TypeInfo(TypeOf.Class, create:() => IDisposable()),
    'Map<String,String?>': TypeInfo(TypeOf.Class, create:() => Map<String,String?>()),
    'HttpStatusCode': TypeInfo(TypeOf.Class, create:() => HttpStatusCode()),
});

Dart LiveAnswerCallback DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /nodes/live-answer/callback HTTP/1.1 
Host: team.evovoice.io 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	sessionId: String,
	flowId: String,
	nodeId: String,
	clientId: String,
	conversationId: String,
	aiMinutes: 0,
	from: String,
	to: String,
	transcript: 
	[
		{
			date: 0001-01-01,
			role: String,
			senderName: String,
			targetName: String,
			functionName: String,
			functionArgs: String,
			content: String
		}
	],
	startDate: 0001-01-01,
	endDate: 0001-01-01,
	attachments: 
	[
		{
			fileName: String,
			contentType: String,
			uri: String,
			data: String
		}
	],
	completed: String,
	callRecordingUrl: String
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	
}