diff --git a/CHANGELOG.md b/CHANGELOG.md index 14ba01347..526775b16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added `DailyTransport.send_dtmf()` to send dial-out DTMF tones. + +- Added `DailyTransport.sip_call_transfer()` to forward SIP and PSTN calls to + another address or number. For example, transfer a SIP call to a different + SIP address or transfer a PSTN phone number to a different PSTN phone number. + +- Added `DailyTransport.sip_refer()` to transfer incoming SIP/PSTN calls from + outside Daily to another SIP/PSTN address. + - Added `KoalaFilter` which implement on device noise reduction using Koala Noise Suppression. (see https://picovoice.ai/platform/koala/) diff --git a/pyproject.toml b/pyproject.toml index 75889d51c..85db84a84 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ azure = [ "azure-cognitiveservices-speech~=1.41.1", "openai~=1.57.2" ] canonical = [ "aiofiles~=24.1.0" ] cartesia = [ "cartesia~=1.0.13", "websockets~=13.1" ] cerebras = [ "openai~=1.57.2" ] -daily = [ "daily-python~=0.13.0" ] +daily = [ "daily-python~=0.14.0" ] deepgram = [ "deepgram-sdk~=3.7.7" ] elevenlabs = [ "websockets~=13.1" ] fal = [ "fal-client~=0.4.1" ] diff --git a/src/pipecat/transports/services/daily.py b/src/pipecat/transports/services/daily.py index 7456ef816..c0e8a8dd8 100644 --- a/src/pipecat/transports/services/daily.py +++ b/src/pipecat/transports/services/daily.py @@ -491,6 +491,21 @@ class DailyTransportClient(EventHandler): self._client.stop_dialout(participant_id, completion=completion_callback(future)) await future + async def send_dtmf(self, settings): + future = self._loop.create_future() + self._client.send_dtmf(settings, completion=completion_callback(future)) + await future + + async def sip_call_transfer(self, settings): + future = self._loop.create_future() + self._client.sip_call_transfer(settings, completion=completion_callback(future)) + await future + + async def sip_refer(self, settings): + future = self._loop.create_future() + self._client.sip_refer(settings, completion=completion_callback(future)) + await future + async def start_recording(self, streaming_settings, stream_id, force_new): future = self._loop.create_future() self._client.start_recording( @@ -955,6 +970,15 @@ class DailyTransport(BaseTransport): async def stop_dialout(self, participant_id): await self._client.stop_dialout(participant_id) + async def send_dtmf(self, settings): + await self._client.send_dtmf(settings) + + async def sip_call_transfer(self, settings): + await self._client.sip_call_transfer(settings) + + async def sip_refer(self, settings): + await self._client.sip_refer(settings) + async def start_recording(self, streaming_settings=None, stream_id=None, force_new=None): await self._client.start_recording(streaming_settings, stream_id, force_new)