Added raw responses and extract utils.
This commit is contained in:
parent
34beb51c2c
commit
8eda80c61a
166
models/raw.go
Normal file
166
models/raw.go
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
type AnalyticsConversationWithAttributes struct {
|
||||||
|
ConversationEnd string `json:"conversationEnd"`
|
||||||
|
ConversationId string `json:"conversationId"`
|
||||||
|
ConversationStart string `json:"conversationStart"`
|
||||||
|
DivisionIds []string `json:"divisionIds"`
|
||||||
|
ExternalTag string `json:"externalTag"`
|
||||||
|
MediaStatsMinConversationMos float32 `json:"mediaStatsMinConversationMos"`
|
||||||
|
MediaStatsMinConversationRFactor float32 `json:"mediaStatsMinConversationRFactor"`
|
||||||
|
OriginatingDirection string `json:"originatingDirection"`
|
||||||
|
Participants []struct {
|
||||||
|
ExternalContactId string `json:"externalContactId"`
|
||||||
|
ParticipantId string `json:"participantId"`
|
||||||
|
ParticipantName string `json:"participantName"`
|
||||||
|
Purpose string `json:"purpose"`
|
||||||
|
Sessions []struct {
|
||||||
|
ANI string `json:"ani"`
|
||||||
|
Direction string `json:"direction"`
|
||||||
|
DNIS string `json:"dnis"`
|
||||||
|
EdgeId string `json:"edgeId"`
|
||||||
|
MediaType string `json:"mediaType"`
|
||||||
|
ProtocolCallId string `json:"protocolCallId"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
Recording bool `json:"recording"`
|
||||||
|
RemoteNameDisplayable string `json:"remoteNameDisplayable"`
|
||||||
|
SessionDnis string `json:"sessionDnis"`
|
||||||
|
SessionId string `json:"sessionId"`
|
||||||
|
MediaEndpointStats []struct {
|
||||||
|
Codecs []string `json:"codecs"`
|
||||||
|
EventTime string `json:"eventTime"`
|
||||||
|
MaxLatencyMs int `json:"maxLatencyMs"`
|
||||||
|
MinMos float32 `json:"minMos"`
|
||||||
|
MinRFactor float32 `json:"minRFactor"`
|
||||||
|
ReceivedPackets int `json:"receivedPackets"`
|
||||||
|
} `json:"mediaEndpointStats"`
|
||||||
|
Metrics []struct {
|
||||||
|
EmitDate string `json:"emitDate"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Value int `json:"value"`
|
||||||
|
} `json:"metrics"`
|
||||||
|
Segments []struct {
|
||||||
|
Conference bool `json:"conference"`
|
||||||
|
DisconnectType string `json:"disconnectType"`
|
||||||
|
Q850ResponseCodes []int `json:"q850ResponseCodes"`
|
||||||
|
SegmentEnd string `json:"segmentEnd"`
|
||||||
|
SegmentStart string `json:"segmentStart"`
|
||||||
|
SegmentType string `json:"segmentType"`
|
||||||
|
WrapUpCode string `json:"wrapUpCode"`
|
||||||
|
} `json:"segments"`
|
||||||
|
} `json:"sessions"`
|
||||||
|
Attributes map[string]any `json:"attributes"`
|
||||||
|
} `json:"participants"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AnalyticsConversationWithoutAttributesQuery struct {
|
||||||
|
Conversations []AnalyticsConversationWithoutAttributes `json:"conversations"`
|
||||||
|
TotalHits int `json:"totalHits"`
|
||||||
|
}
|
||||||
|
type AnalyticsConversationWithoutAttributes struct {
|
||||||
|
ConversationId string `json:"conversationId"`
|
||||||
|
ConversationStart string `json:"conversationStart"`
|
||||||
|
ConversationEnd string `json:"conversationEnd"`
|
||||||
|
MediaStatsMinConversationMos float32 `json:"mediaStatsMinConversationMos"`
|
||||||
|
MediaStatsMinConversationRFactor float32 `json:"mediaStatsMinConversationRFactor"`
|
||||||
|
OriginatingDirection string `json:"originatingDirection"`
|
||||||
|
DivisionIds []string `json:"divisionIds"`
|
||||||
|
Participants []struct {
|
||||||
|
ParticipantId string `json:"participantId"`
|
||||||
|
ParticipantName string `json:"participantName"`
|
||||||
|
Purpose string `json:"purpose"`
|
||||||
|
ExternalContactId string `json:"externalContactId"`
|
||||||
|
Sessions []struct {
|
||||||
|
MediaType string `json:"mediaType"`
|
||||||
|
SessionId string `json:"sessionId"`
|
||||||
|
ANI string `json:"ani"`
|
||||||
|
Direction string `json:"direction"`
|
||||||
|
DNIS string `json:"dnis"`
|
||||||
|
SessionDNIS string `json:"sessionDnis"`
|
||||||
|
EdgeId string `json:"edgeId"`
|
||||||
|
RemoteNameDisplayable string `json:"remoteNameDisplayable"`
|
||||||
|
Segments []struct {
|
||||||
|
SegmentStart string `json:"segmentStart"`
|
||||||
|
SegmentEnd string `json:"segmentEnd"`
|
||||||
|
WrapUpCode string `json:"wrapUpCode"`
|
||||||
|
DisconnectType string `json:"disconnectType"`
|
||||||
|
SegmentType string `json:"SegmentType"`
|
||||||
|
Q850ResponseCodes []int `json:"q850ResponseCodes"`
|
||||||
|
Conference bool `json:"conference"`
|
||||||
|
} `json:"segments"`
|
||||||
|
Metrics []struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Value int `json:"value"`
|
||||||
|
EmitDate string `json:"emitDate"`
|
||||||
|
} `json:"metrics"`
|
||||||
|
MediaEndpointStats []struct {
|
||||||
|
Codecs []string `json:"codecs"`
|
||||||
|
MinMos float32 `json:"minMos"`
|
||||||
|
MinRFactor float32 `json:"minRFactor"`
|
||||||
|
MaxLatencyMs int `json:"maxLatencyMs"`
|
||||||
|
ReceivedPackets int `json:"receivedPackets"`
|
||||||
|
} `json:"mediaEndpointStats"`
|
||||||
|
Recording bool `json:"recording"`
|
||||||
|
ProtocolCallId string `json:"protocolCallId"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
} `json:"sessions"`
|
||||||
|
} `json:"participants"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type NotificationConversationWithAttributes struct {
|
||||||
|
Address string `json:"address"`
|
||||||
|
Divisions []struct {
|
||||||
|
Division struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
SelfUri string `json:"selfUri"`
|
||||||
|
} `json:"division"`
|
||||||
|
Entities []struct {
|
||||||
|
DateDivisionUpdated string `json:"dateDivisionUpdated"`
|
||||||
|
Id string `json:"id"`
|
||||||
|
SelfUri string `json:"selfUri"`
|
||||||
|
} `json:"entities"`
|
||||||
|
} `json:"divisions"`
|
||||||
|
ExternalTag string `json:"externalTag"`
|
||||||
|
Id string `json:"id"`
|
||||||
|
Participants []struct {
|
||||||
|
Address string `json:"address"`
|
||||||
|
Attributes map[string]any `json:"attributes"`
|
||||||
|
Calls []struct {
|
||||||
|
AfterCallWorkRequired bool `json:"afterCallWorkRequired"`
|
||||||
|
Confined bool `json:"confined"`
|
||||||
|
ConnectedTime string `json:"connectedTime"`
|
||||||
|
Direction string `json:"direction"`
|
||||||
|
DisconnectReasons []struct{} `json:"disconnectReasons"`
|
||||||
|
DisconnectType string `json:"disconnectType"`
|
||||||
|
DisconnectedTime string `json:"disconnectedTime"`
|
||||||
|
Held bool `json:"held"`
|
||||||
|
Id string `json:"id"`
|
||||||
|
InitialState string `json:"initialState"`
|
||||||
|
Muted bool `json:"muted"`
|
||||||
|
Other map[string]any `json:"other"`
|
||||||
|
PeerId string `json:"peerId"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
Recording bool `json:"recording"`
|
||||||
|
RecordingState string `json:"recordingState"`
|
||||||
|
SecurePause bool `json:"securePause"`
|
||||||
|
Self map[string]any `json:"self"`
|
||||||
|
State string `json:"state"`
|
||||||
|
} `json:"calls"`
|
||||||
|
ConnectedTime string `json:"connectedTime"`
|
||||||
|
EndTime string `json:"endTime"`
|
||||||
|
ExternalContactId string `json:"externalContactId"`
|
||||||
|
ExternalContactInitialDivisionId string `json:"externalContactInitialDivisionId"`
|
||||||
|
Id string `json:"id"`
|
||||||
|
MediaRoles []string `json:"mediaRoles"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Purpose string `json:"purpose"`
|
||||||
|
QueueId string `json:"queueId"`
|
||||||
|
Wrapup map[string]any `json:"wrapup"`
|
||||||
|
WrapupExpected bool `json:"wrapupExpected"`
|
||||||
|
WrapupRequired bool `json:"wrapupRequired"`
|
||||||
|
} `json:"participants"`
|
||||||
|
RecentTransfers []map[string]any `json:"recentTransfers"`
|
||||||
|
RecordingState string `json:"recordingState"`
|
||||||
|
SecurePause bool `json:"securePause"`
|
||||||
|
UtilizationLabelId string `json:"utilizationLabelId"`
|
||||||
|
}
|
||||||
387
util/extract.go
Normal file
387
util/extract.go
Normal file
@ -0,0 +1,387 @@
|
|||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"huron.connectingnow.net/fholland/gorm_models/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes) (models.DBConversation, []models.DBParticipant, []models.DBSession, []models.DBSegment) {
|
||||||
|
|
||||||
|
var startTime *time.Time
|
||||||
|
|
||||||
|
parsedStartTime, err := time.Parse(time.RFC3339, base.ConversationStart)
|
||||||
|
if err != nil {
|
||||||
|
startTime = nil
|
||||||
|
} else {
|
||||||
|
startTime = &parsedStartTime
|
||||||
|
}
|
||||||
|
|
||||||
|
var endTime *time.Time
|
||||||
|
parsedEndTime, err := time.Parse(time.RFC3339, base.ConversationEnd)
|
||||||
|
if err != nil {
|
||||||
|
startTime = nil
|
||||||
|
} else {
|
||||||
|
startTime = &parsedEndTime
|
||||||
|
}
|
||||||
|
|
||||||
|
divisionIdsBytes, err := json.Marshal(base.DivisionIds)
|
||||||
|
if err != nil {
|
||||||
|
divisionIdsBytes = nil
|
||||||
|
}
|
||||||
|
divisionIdsBytesStr := string(divisionIdsBytes)
|
||||||
|
|
||||||
|
currentTime := time.Now()
|
||||||
|
|
||||||
|
conversation := models.DBConversation{
|
||||||
|
DivisionIds: &divisionIdsBytesStr,
|
||||||
|
End: endTime,
|
||||||
|
Id: base.ConversationId,
|
||||||
|
MinMos: &base.MediaStatsMinConversationMos,
|
||||||
|
MinRFactor: &base.MediaStatsMinConversationRFactor,
|
||||||
|
OriginatingDirection: &base.OriginatingDirection,
|
||||||
|
Start: startTime,
|
||||||
|
SemiLiveUpdate: ¤tTime,
|
||||||
|
}
|
||||||
|
var participants []models.DBParticipant
|
||||||
|
var sessions []models.DBSession
|
||||||
|
var segments []models.DBSegment
|
||||||
|
|
||||||
|
for _, p := range base.Participants {
|
||||||
|
|
||||||
|
participant := models.DBParticipant{
|
||||||
|
ConnectedTime: nil,
|
||||||
|
ConversationId: base.ConversationId,
|
||||||
|
EndTime: nil,
|
||||||
|
ExternalContactId: &p.ExternalContactId,
|
||||||
|
Id: p.ParticipantId,
|
||||||
|
Name: &p.ParticipantName,
|
||||||
|
Purpose: &p.Purpose,
|
||||||
|
}
|
||||||
|
participants = append(participants, participant)
|
||||||
|
|
||||||
|
for _, sess := range p.Sessions {
|
||||||
|
mediaEndpointStatsBytes, err := json.Marshal(sess.MediaEndpointStats)
|
||||||
|
if err != nil {
|
||||||
|
mediaEndpointStatsBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
metricsBytes, err := json.Marshal(sess.Metrics)
|
||||||
|
if err != nil {
|
||||||
|
metricsBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
session := models.DBSession{
|
||||||
|
Ani: sess.ANI,
|
||||||
|
Direction: sess.Direction,
|
||||||
|
Dnis: sess.DNIS,
|
||||||
|
EdgeId: sess.EdgeId,
|
||||||
|
Id: fmt.Sprintf("%s_%s", p.ParticipantId, sess.SessionId),
|
||||||
|
MediaEndpointStats: string(mediaEndpointStatsBytes),
|
||||||
|
MediaType: sess.MediaType,
|
||||||
|
Metrics: string(metricsBytes),
|
||||||
|
ParticipantId: p.ParticipantId,
|
||||||
|
ProtocolCallId: sess.ProtocolCallId,
|
||||||
|
Provider: sess.Provider,
|
||||||
|
Recording: sess.Recording,
|
||||||
|
RemoteNameDisplayable: sess.RemoteNameDisplayable,
|
||||||
|
SessionDnis: sess.SessionDNIS,
|
||||||
|
}
|
||||||
|
sessions = append(sessions, session)
|
||||||
|
|
||||||
|
for _, seg := range sess.Segments {
|
||||||
|
|
||||||
|
segmentStart, err := time.Parse(time.RFC3339, seg.SegmentStart)
|
||||||
|
if err != nil {
|
||||||
|
segmentStart = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
segmentEnd, err := time.Parse(time.RFC3339, seg.SegmentEnd)
|
||||||
|
if err != nil {
|
||||||
|
segmentEnd = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
q850ResponseCodesBytes, err := json.Marshal(seg.Q850ResponseCodes)
|
||||||
|
if err != nil {
|
||||||
|
q850ResponseCodesBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
segment := models.DBSegment{
|
||||||
|
Id: fmt.Sprintf("%s_%s", session.Id, seg.SegmentType),
|
||||||
|
Conference: seg.Conference,
|
||||||
|
DisconnectType: seg.DisconnectType,
|
||||||
|
Q850ResponseCodes: string(q850ResponseCodesBytes),
|
||||||
|
SegmentEnd: segmentEnd,
|
||||||
|
SegmentStart: segmentStart,
|
||||||
|
SegmentType: seg.SegmentType,
|
||||||
|
SessionId: sess.SessionId,
|
||||||
|
WrapUpCode: seg.WrapUpCode,
|
||||||
|
}
|
||||||
|
|
||||||
|
segments = append(segments, segment)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return conversation, participants, sessions, segments
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExtractLive(base models.NotificationConversationWithAttributes) (models.DBConversation, []models.DBParticipant, []models.DBCall) {
|
||||||
|
currentTime := time.Now()
|
||||||
|
|
||||||
|
conversation := models.DBConversation{
|
||||||
|
Id: base.Id,
|
||||||
|
Address: &base.Address,
|
||||||
|
ExternalTag: &base.ExternalTag,
|
||||||
|
RecordingState: &base.RecordingState,
|
||||||
|
SecurePause: &base.SecurePause,
|
||||||
|
UtilizationLabelId: &base.UtilizationLabelId,
|
||||||
|
LiveUpdate: ¤tTime,
|
||||||
|
}
|
||||||
|
|
||||||
|
var participants []models.DBParticipant
|
||||||
|
var calls []models.DBCall
|
||||||
|
|
||||||
|
for _, partPayload := range base.Participants {
|
||||||
|
attributesBytes, err := json.Marshal(partPayload.Attributes)
|
||||||
|
if err != nil {
|
||||||
|
attributesBytes = nil
|
||||||
|
}
|
||||||
|
attributesBytesStr := string(attributesBytes)
|
||||||
|
|
||||||
|
mediaRolesBytes, err := json.Marshal(partPayload.MediaRoles)
|
||||||
|
if err != nil {
|
||||||
|
mediaRolesBytes = nil
|
||||||
|
}
|
||||||
|
mediaRolesBytesStr := string(mediaRolesBytes)
|
||||||
|
|
||||||
|
wrapupBytes, err := json.Marshal(partPayload.Wrapup)
|
||||||
|
if err != nil {
|
||||||
|
wrapupBytes = nil
|
||||||
|
}
|
||||||
|
wrapupBytesStr := string(wrapupBytes)
|
||||||
|
|
||||||
|
var connectedTime *time.Time
|
||||||
|
parsedConnectedTime, err := time.Parse(time.RFC3339, partPayload.ConnectedTime)
|
||||||
|
if err != nil {
|
||||||
|
connectedTime = nil
|
||||||
|
} else {
|
||||||
|
connectedTime = &parsedConnectedTime
|
||||||
|
}
|
||||||
|
|
||||||
|
var endTime *time.Time
|
||||||
|
parsedEndTime, err := time.Parse(time.RFC3339, partPayload.EndTime)
|
||||||
|
if err != nil {
|
||||||
|
endTime = nil
|
||||||
|
} else {
|
||||||
|
endTime = &parsedEndTime
|
||||||
|
}
|
||||||
|
|
||||||
|
participant := models.DBParticipant{
|
||||||
|
ConversationId: base.Id,
|
||||||
|
Id: partPayload.Id,
|
||||||
|
Address: &partPayload.Address,
|
||||||
|
Attributes: &attributesBytesStr,
|
||||||
|
ConnectedTime: connectedTime,
|
||||||
|
EndTime: endTime,
|
||||||
|
ExternalContactId: &partPayload.ExternalContactId,
|
||||||
|
ExternalContactInitialDivisionId: &partPayload.ExternalContactInitialDivisionId,
|
||||||
|
MediaRoles: &mediaRolesBytesStr,
|
||||||
|
Name: &partPayload.Name,
|
||||||
|
Purpose: &partPayload.Purpose,
|
||||||
|
QueueId: &partPayload.QueueId,
|
||||||
|
Wrapup: &wrapupBytesStr,
|
||||||
|
WrapupExpected: &partPayload.WrapupExpected,
|
||||||
|
WrapupRequired: &partPayload.WrapupRequired,
|
||||||
|
}
|
||||||
|
participants = append(participants, participant)
|
||||||
|
|
||||||
|
for _, callPayload := range partPayload.Calls {
|
||||||
|
var connectedTime *time.Time
|
||||||
|
parsedConnectedTime, err := time.Parse(time.RFC3339, callPayload.ConnectedTime)
|
||||||
|
if err != nil {
|
||||||
|
connectedTime = nil
|
||||||
|
} else {
|
||||||
|
connectedTime = &parsedConnectedTime
|
||||||
|
}
|
||||||
|
|
||||||
|
var disconnectedTime *time.Time
|
||||||
|
parsedDisconnectedTime, err := time.Parse(time.RFC3339, callPayload.DisconnectedTime)
|
||||||
|
if err != nil {
|
||||||
|
disconnectedTime = nil
|
||||||
|
} else {
|
||||||
|
disconnectedTime = &parsedDisconnectedTime
|
||||||
|
}
|
||||||
|
|
||||||
|
otherBytes, err := json.Marshal(callPayload.Other)
|
||||||
|
if err != nil {
|
||||||
|
otherBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
selfBytes, err := json.Marshal(callPayload.Self)
|
||||||
|
if err != nil {
|
||||||
|
selfBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
disconnectReasonsBytes, err := json.Marshal(callPayload.DisconnectReasons)
|
||||||
|
if err != nil {
|
||||||
|
disconnectReasonsBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
call := models.DBCall{
|
||||||
|
ParticipantId: partPayload.Id,
|
||||||
|
AfterCallWorkRequired: callPayload.AfterCallWorkRequired,
|
||||||
|
Confined: callPayload.Confined,
|
||||||
|
ConnectedTime: connectedTime,
|
||||||
|
DisconnectedTime: disconnectedTime,
|
||||||
|
Direction: callPayload.Direction,
|
||||||
|
DisconnectReasons: string(disconnectReasonsBytes),
|
||||||
|
DisconnectType: callPayload.DisconnectType,
|
||||||
|
Held: callPayload.Held,
|
||||||
|
Id: callPayload.Id,
|
||||||
|
InitialState: callPayload.InitialState,
|
||||||
|
Muted: callPayload.Muted,
|
||||||
|
Other: string(otherBytes),
|
||||||
|
Provider: callPayload.Provider,
|
||||||
|
Recording: callPayload.Recording,
|
||||||
|
RecordingState: callPayload.RecordingState,
|
||||||
|
SecurePause: callPayload.SecurePause,
|
||||||
|
Self: string(selfBytes),
|
||||||
|
State: callPayload.State,
|
||||||
|
}
|
||||||
|
|
||||||
|
calls = append(calls, call)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return conversation, participants, calls
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExtractWithAttributes(base models.AnalyticsConversationWithAttributes) (models.DBConversation, []models.DBParticipant, []models.DBSession, []models.DBSegment) {
|
||||||
|
|
||||||
|
var startTime *time.Time
|
||||||
|
parsedStartTime, err := time.Parse(time.RFC3339, base.ConversationStart)
|
||||||
|
if err != nil {
|
||||||
|
startTime = nil
|
||||||
|
} else {
|
||||||
|
startTime = &parsedStartTime
|
||||||
|
}
|
||||||
|
|
||||||
|
var endTime *time.Time
|
||||||
|
parsedEndTime, err := time.Parse(time.RFC3339, base.ConversationEnd)
|
||||||
|
if err != nil {
|
||||||
|
endTime = nil
|
||||||
|
} else {
|
||||||
|
endTime = &parsedEndTime
|
||||||
|
}
|
||||||
|
|
||||||
|
divisionIdsBytes, err := json.Marshal(base.DivisionIds)
|
||||||
|
if err != nil {
|
||||||
|
divisionIdsBytes = nil
|
||||||
|
}
|
||||||
|
divisionIdsBytesStr := string(divisionIdsBytes)
|
||||||
|
|
||||||
|
currentTime := time.Now()
|
||||||
|
|
||||||
|
conversation := models.DBConversation{
|
||||||
|
DivisionIds: &divisionIdsBytesStr,
|
||||||
|
End: endTime,
|
||||||
|
Id: base.ConversationId,
|
||||||
|
MinMos: &base.MediaStatsMinConversationMos,
|
||||||
|
MinRFactor: &base.MediaStatsMinConversationRFactor,
|
||||||
|
OriginatingDirection: &base.OriginatingDirection,
|
||||||
|
Start: startTime,
|
||||||
|
JobUpdate: ¤tTime,
|
||||||
|
}
|
||||||
|
var participants []models.DBParticipant
|
||||||
|
var sessions []models.DBSession
|
||||||
|
var segments []models.DBSegment
|
||||||
|
|
||||||
|
for _, p := range base.Participants {
|
||||||
|
|
||||||
|
attributesBytes, err := json.Marshal(p.Attributes)
|
||||||
|
if err != nil {
|
||||||
|
attributesBytes = nil
|
||||||
|
}
|
||||||
|
attributesBytesStr := string(attributesBytes)
|
||||||
|
|
||||||
|
participant := models.DBParticipant{
|
||||||
|
ConnectedTime: nil,
|
||||||
|
ConversationId: base.ConversationId,
|
||||||
|
EndTime: nil,
|
||||||
|
ExternalContactId: &p.ExternalContactId,
|
||||||
|
Id: p.ParticipantId,
|
||||||
|
Name: &p.ParticipantName,
|
||||||
|
Purpose: &p.Purpose,
|
||||||
|
Attributes: &attributesBytesStr,
|
||||||
|
}
|
||||||
|
participants = append(participants, participant)
|
||||||
|
|
||||||
|
for _, sess := range p.Sessions {
|
||||||
|
mediaEndpointStatsBytes, err := json.Marshal(sess.MediaEndpointStats)
|
||||||
|
if err != nil {
|
||||||
|
mediaEndpointStatsBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
metricsBytes, err := json.Marshal(sess.Metrics)
|
||||||
|
if err != nil {
|
||||||
|
metricsBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
session := models.DBSession{
|
||||||
|
Ani: sess.ANI,
|
||||||
|
Direction: sess.Direction,
|
||||||
|
Dnis: sess.DNIS,
|
||||||
|
EdgeId: sess.EdgeId,
|
||||||
|
Id: fmt.Sprintf("%s_%s", p.ParticipantId, sess.SessionId),
|
||||||
|
MediaEndpointStats: string(mediaEndpointStatsBytes),
|
||||||
|
MediaType: sess.MediaType,
|
||||||
|
Metrics: string(metricsBytes),
|
||||||
|
ParticipantId: p.ParticipantId,
|
||||||
|
ProtocolCallId: sess.ProtocolCallId,
|
||||||
|
Provider: sess.Provider,
|
||||||
|
Recording: sess.Recording,
|
||||||
|
RemoteNameDisplayable: sess.RemoteNameDisplayable,
|
||||||
|
SessionDnis: sess.SessionDnis,
|
||||||
|
}
|
||||||
|
sessions = append(sessions, session)
|
||||||
|
|
||||||
|
for _, seg := range sess.Segments {
|
||||||
|
|
||||||
|
segmentStart, err := time.Parse(time.RFC3339, seg.SegmentStart)
|
||||||
|
if err != nil {
|
||||||
|
segmentStart = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
segmentEnd, err := time.Parse(time.RFC3339, seg.SegmentEnd)
|
||||||
|
if err != nil {
|
||||||
|
segmentEnd = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
q850ResponseCodesBytes, err := json.Marshal(seg.Q850ResponseCodes)
|
||||||
|
if err != nil {
|
||||||
|
q850ResponseCodesBytes = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
segment := models.DBSegment{
|
||||||
|
Id: fmt.Sprintf("%s_%s", session.Id, seg.SegmentType),
|
||||||
|
Conference: seg.Conference,
|
||||||
|
DisconnectType: seg.DisconnectType,
|
||||||
|
Q850ResponseCodes: string(q850ResponseCodesBytes),
|
||||||
|
SegmentEnd: segmentEnd,
|
||||||
|
SegmentStart: segmentStart,
|
||||||
|
SegmentType: seg.SegmentType,
|
||||||
|
SessionId: sess.SessionId,
|
||||||
|
WrapUpCode: seg.WrapUpCode,
|
||||||
|
}
|
||||||
|
|
||||||
|
segments = append(segments, segment)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return conversation, participants, sessions, segments
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user