Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/gradient_labs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
from .webhook import *
from .note import *
from .traffic_group import *
from .voice_call_context import *
34 changes: 34 additions & 0 deletions src/gradient_labs/_voice_call_context_read.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from typing import Optional
from dataclasses import dataclass
from dataclasses_json import dataclass_json

from ._http_client import HttpClient
from .voice_call_context import VoiceCallContext


@dataclass_json
@dataclass(frozen=True)
class VoiceCallContextReadParams:
lookback_seconds: Optional[int] = None
include_large_fields: Optional[bool] = None


def read_voice_call_context(
*,
client: HttpClient,
phone_number: str,
params: Optional[VoiceCallContextReadParams] = None,
) -> VoiceCallContext:
path = f"voice/latest-call-context/{phone_number}"
query_parts = []
if params is not None:
if params.lookback_seconds is not None:
query_parts.append(f"lookback_seconds={params.lookback_seconds}")
if params.include_large_fields is not None:
query_parts.append(
f"include_large_fields={str(params.include_large_fields).lower()}"
)
if query_parts:
path = f"{path}?{'&'.join(query_parts)}"
rsp = client.get(path=path, body={})
return VoiceCallContext.from_dict(rsp)
22 changes: 22 additions & 0 deletions src/gradient_labs/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,12 @@
)
from ._traffic_group_target_delete import delete_traffic_group_target

from ._voice_call_context_read import (
read_voice_call_context,
VoiceCallContextReadParams,
)
from .voice_call_context import VoiceCallContext

from ._http_client import HttpClient, API_BASE_URL
from .tool import *
from .note import Note
Expand Down Expand Up @@ -786,3 +792,19 @@ def delete_traffic_group_target(
traffic_group_id=traffic_group_id,
target_id=target_id,
)

# ==================== Voice Call Context ====================

def read_voice_call_context(
self,
*,
phone_number: str,
params: Optional[VoiceCallContextReadParams] = None,
) -> VoiceCallContext:
"""read_voice_call_context returns the most recent voice call context for a
given phone number, for use in data-dip integrations with contact-centre platforms."""
return read_voice_call_context(
client=self.http_client,
phone_number=phone_number,
params=params,
)
23 changes: 23 additions & 0 deletions src/gradient_labs/voice_call_context.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from typing import Optional
from datetime import datetime
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, config
from marshmallow import fields


@dataclass_json
@dataclass(frozen=True)
class VoiceCallContext:
started_at: datetime = field(
metadata=config(
encoder=datetime.isoformat,
decoder=datetime.fromisoformat,
mm_field=fields.DateTime(format="iso"),
)
)
summary: Optional[str] = None
transcript: Optional[str] = None
handoff_reason: Optional[str] = None
last_executed_procedure: Optional[str] = None
last_executed_procedure_url: Optional[str] = None
gradient_labs_url: Optional[str] = None
Loading