Commit graph

208 commits

Author SHA1 Message Date
Abhishek Kumar
ee216c0e40 chore: refactor AGENTS.md 2026-05-20 15:56:52 +05:30
Mohamed-Mamdouh
5f28c1b2a9
feat: add Tuner Integration to Dograh (#311)
* Add tuner integration

* bump pipecat version

* chore: update pipecat submodule to match upstream and use tuner-pipecat-sdk 0.2.0

Update pipecat submodule from 0.0.109.dev23 to 13e98d0d9 (the exact commit
upstream dograh-hq/dograh uses after v1.30.1). This installs pipecat-ai as
1.1.0.post277 via setuptools_scm, satisfying tuner-pipecat-sdk 0.2.0's
pipecat-ai>=1.0.0 requirement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* wire tuner

* feat: refactor integrations into self contained packages

* chore: simplify ensure_public_access_token

* fix: remove NodeSpec and make DTOs the source of truth

* feat: send relevant signal to mcp using to_mcp_dict

* fix: fix tests

* cleanup: remove nango integrations

* feat: add agents.md for integrations

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Abhishek Kumar <abhishek@a6k.me>
2026-05-20 14:37:33 +05:30
palinko91
afa78fe859
fix(stt): align Speechmatics language registry with official transcription codes (#317) 2026-05-19 19:00:38 +05:30
Abhishek
151bf77e40
feat: add agent skills to review PR (#320) 2026-05-19 17:02:26 +05:30
Sabiha Khan
8778bb453e
chore: mandate telnyx signature verification (#319) 2026-05-19 16:50:27 +05:30
Paulo Busato Favarato
75839f9de5
feat(mcp): generic MCP tool source with per-node function filtering (#301)
* feat(mcp): generic MCP tool source with per-node function filtering

Adds a Model Context Protocol tool category: connect a customer MCP
server and expose its tools to the agent, with optional per-node
allow-listing of individual MCP functions.

- ToolCategory.MCP enum + alembic migration
- MCP definition validator and collision-safe function-name namespacing
- McpToolSession wrapper: graceful-degrade, per-call open/close lifecycle
- CustomToolManager MCP branch (schemas + proxy handlers)
- Per-node mcp_tool_filters threaded through DTO/graph/engine
- Best-effort discovered_tools catalog cache + POST /tools/{uuid}/mcp/refresh
- UI: MCP create/edit config, tabbed ToolSelector with per-node toggles

* feat: refactor for code standardisation and documentation

---------

Co-authored-by: Abhishek Kumar <abhishek@a6k.me>
2026-05-19 16:10:00 +05:30
Abhishek Kumar
fc04f31639 fix: force FORCE_TURN_RELAY for local IPs in setup 2026-05-16 18:37:38 +05:30
Abhishek
2381a803ad
feat: add openai realtime models (#298)
* feat: add openai realtime models

* chore: bump pipecat

* fix: resample telephony audio for openai realtime

* fix: sampling rate fix for openai realtime

* chore: clean up dead code
2026-05-16 18:05:23 +05:30
Abhishek
45b00cd5d0
chore: remove looptalk (#299)
* chore: remove looptalk

Remove looptalk in the current version. We will be rethinking looptalk in a fresh way.

* chore: formatting fix
2026-05-16 17:45:12 +05:30
Sabiha Khan
0523dcb079 fix: provider resolution in telephony cost calculation post workflow integration calls 2026-05-16 13:19:26 +05:30
Nir Simionovich
7df73beea3
Resolve an issue with direct socket connections using the wrong event… (#289)
* Resolve an issue with direct socket connections using the wrong event data.

* Resolve the formatting issus in the provider file

* chore: fix import ordering with ruff

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Nir Simionovich <nirs@cloudonix.io>
Co-authored-by: Abhishek Kumar <abhishek@a6k.me>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 18:20:14 +05:30
Abhishek Kumar
b728cc4922 chore: fix ARI documentation 2026-05-13 21:53:18 +05:30
Sabiha Khan
ebeffdbc40
fix(ari): pre-register ext channel id and defer bridge to its StasisS… (#284)
* fix(ari): pre-register ext channel id and defer bridge to its StasisStart

Two race conditions in the inbound ARI flow could leave a call silent:

1. Bridging both channels immediately after creating the ext media leg
   raced against the ext channel entering the Stasis application; slow
   chan_websocket handshakes produced "Channel not in Stasis application"
   422 errors on addChannel.

2. Asterisk could fire StasisStart for the ext channel before the
   externalMedia POST response returned, so _is_ext_channel returned
   False and the event was dropped as an unknown outbound call.

Fixes:
- Generate the ext channel id as dograh-ext-<uuid> client-side and pass
  it to Asterisk via the channelId query param. Mark the ext channel,
  set its channel->run mapping, register the pending bridge entry, and
  persist gathered_context.ext_channel_id all before the POST.
- Defer the bridge to a new _complete_bridge_after_ext_ready handler
  triggered by the ext channel's own StasisStart. Both channels are
  guaranteed in Stasis by then, so addChannel cannot 422.
- On POST failure or channelId mismatch, roll back the pending entry
  and ERROR loudly.

* fix: replace in-memory dict with redis storage
2026-05-13 18:33:34 +05:30
Sabiha Khan
b670004725
feat: verify telnyx webhook signature optionally (#279) 2026-05-12 19:47:28 +05:30
Abhishek
7f0dac1ad5
feat: configurable ElevenLabs base URL for Data Residency (#278)
* feat: configurable ElevenLabs base URL for Data Residency (#269)

Adds a `base_url` field to `ElevenlabsTTSConfiguration` so users on an
ElevenLabs Data Residency plan (EU, etc.) can point Dograh at the
regional endpoint instead of the hardcoded global one. Defaults to
`https://api.elevenlabs.io`, preserving existing behaviour. The
service factory rewrites the HTTP scheme to WSS when constructing the
WebSocket TTS service.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: fix drift

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 19:01:13 +05:30
Abhishek Sharma
137b5e9f89
Verify Telnyx webhook signatures (#271)
* Verify Telnyx webhook signatures

* feat: harden telnyx webhook signature verification

---------

Co-authored-by: a692570 <a692570@users.noreply.github.com>
Co-authored-by: Sabiha Khan <sabihak89@gmail.com>
2026-05-12 18:37:31 +05:30
Sabiha Khan
a1902829db
fix: prior pre-pr drift check failures (#276)
* fix: prior pre-pr drift check failures

* docs: update api reference openapi json
2026-05-12 14:17:40 +05:30
Sabiha Khan
4a6752e62b
feat(telephony/telnyx): add call transfer via conference bridge (#274)
Conference-based transfer for Telnyx with a two-step flow:
- transfer_call dials the destination with a per-transfer webhook URL.
- On call.answered, the webhook seeds a conference with the destination's
  live call_control_id and publishes DESTINATION_ANSWERED.
- TelnyxConferenceStrategy joins the caller into the conference on
  pipeline teardown (EndTaskReason.TRANSFER_CALL).
- On post-answer destination hangup, the webhook hangs up the caller —
  Telnyx's create_conference doesn't accept end_conference_on_exit on
  the seed leg, so we tear down the bridge ourselves.

TransferContext gains optional workflow_run_id (for webhook→provider
resolution in multi-config orgs) and conference_id (set on answer,
rd by the strategy).

Also fixes the transfer tool's provider lookup to go through
get_telephony_provider_for_run instead of the deprecated org-default
shim, which was returning the wrong provider in multi-config orgs.
2026-05-12 13:44:39 +05:30
Abhishek Kumar
4afe426f12 chore: fix tests 2026-05-11 17:21:02 +05:30
Abhishek
e2fe1f3cd4
feat: enable FORCE_TURN_RELAY to diagnose turn connectivity for local deployment setups (#272)
* filter out local sdp candidates on non local environment

* feat: add FORCE_TURN_RELAY variable

* add FORCE_TURN_RELAY option in docker-compose

* fix: fix github workflow
2026-05-11 17:13:01 +05:30
Sabiha Khan
01c201bf09
feat: add telnyx webhook api key in telephony config (#270) 2026-05-09 18:03:42 +05:30
Abhishek Kumar
45a81c88e0 chore: add more fixtures 2026-05-08 16:28:09 +05:30
Abhishek Kumar
5a358d4d29 feat: add workflow graph constraints fixtures 2026-05-08 16:02:51 +05:30
Abhishek Kumar
6d93be3ef6 fix: number pool initialization in multi telephony setup
If there are multiple telephony configurations, the form number should be initialized from the campaigns given telephonic configuration rather than the organization default telephonic configuration.
2026-05-08 14:48:53 +05:30
Sabiha Khan
d2a119c38a
feat: add headless mode, redesign floating widget, refactor lifecycle callbacks (#268)
* feat: add headless widget for deployment

* feat: call callbacks at the right time

* feat: add onCallConnected & onCallDisconnected callback

* feat: add a button with text for floating widget

* feat: add headless widget for deployment

* feat: call callbacks at the right time

* feat: add onCallConnected & onCallDisconnected callback

* feat: add a button with text for floating widget

* docs: web widget

* fix: format issue in pre-pr drift check

* fix: fix CD to rely on pipecat dev dependey

* chore: update message

---------

Co-authored-by: Abhishek Kumar <abhishek@a6k.me>
2026-05-07 12:23:41 +05:30
Abhishek Kumar
31e2c135b0 fix: add missing call_id in gathered_context for telnyx 2026-05-06 19:51:13 +05:30
Abhishek Kumar
025bc14392 feat: add voicemail detection in realtime branch 2026-05-06 17:50:02 +05:30
Abhishek
d4b6afb020
feat: add logs in campaigns for failure or pausing (#265)
* feat: add logs in campaigns on failure

* chore: bump pipecat

* chore: update format.sh

* chore: fix github workflow

* fix: fix formatting errors
2026-05-05 19:23:50 +05:30
Abhishek Kumar
abfb678b4d chore: bump pipecat 2026-05-05 15:59:12 +05:30
Abhishek
0e12c41fc7
chore: bump pipecat version and fix tests (#263)
* chore: bump pipecat version and fix tests

* chore: add github workflow to run tests

* fix: install reqirements.dev.txt in test script

* fix: fix api-test action

* feat: add integration test

* test: add integration tests

* test: add test for function call mute strategy
2026-05-04 21:35:37 +05:30
Abhishek Kumar
0d7b225f76 chore: updatae documentation for api trigger 2026-05-04 12:46:11 +05:30
Abhishek Kumar
91a62178c1 chore: add telephony configuration docs 2026-05-02 17:37:48 +05:30
Abhishek
7fd3b96470
feat: agent stream for cloudonix OPBX (#261)
* feat: agent stream for cloudonix OPBX

* feat: make cloudonix app name optional

* feat: create application while configuring telephony config

* fix: get telephony configuration from stamped workflow run

* fix: fix vobiz hangup URL
2026-05-02 15:53:58 +05:30
Abhishek
14bc66d21d
fix: normalise telnyx event types (#259) 2026-04-30 15:42:55 +05:30
Sabiha Khan
085ab0a7ae
fix: honor telnyxs per-call codec in bidirectional stream (#256)
Telnyx's bidirectional stream uses different codecs per direction:
  - Dograh → Telnyx: what we declare via `stream_bidirectional_codec`
  - Telnyx → Dograh: whatever the PSTN leg negotiated (PCMA for UK,
    Europe, India termination; PCMU for US), announced as
    `media_format.encoding` on the WebSocket start message.

We hardcoded both directions on the serializer to PCMU, so any call
whose PSTN leg used PCMA arrived as A-law bytes that we decoded
through a μ-law table → static for the entire call.

`handle_websocket` now extracts `media_format.encoding` from the
start message and threads it through `transport_kwargs`. The
serializer uses it for the Telnyx → Dograh direction; the
Dograh → Telnyx direction stays pinned to PCMU to match the
unchanged `stream_bidirectional_codec` in the dial/answer payloads.

Note: pipecat's `TelnyxFrameSerializer` names its params from the
call's POV, not Dograh's — `inbound_encoding` is what we send into
the call, `outbound_encoding` is what we receive. Easy to mix up.
2026-04-29 19:20:52 +05:30
Abhishek
e16f6438bd
feat: refactor telephony to support multiple telephony configurations (#251)
Co-authored-by: Sabiha Khan <sabihak89@gmail.com>
2026-04-29 11:39:57 +05:30
dilipevents2007-cpu
2218ba8ad9
feat: add Plivo telephony provider support (#245)
* Add Plivo telephony provider support

* add Plivo telephony UI, fix audio config, and improve inbound call handling

---------

Co-authored-by: Dilip Tiwari <digitalapache20@gmail.com>
Co-authored-by: Sabiha Khan <sabihak89@gmail.com>
Co-authored-by: Abhishek <abhishek@a6k.me>
2026-04-25 20:41:46 +05:30
Abhishek Kumar
4171ad7a54 feat: add test mode for API trigger 2026-04-25 16:30:26 +05:30
Abhishek Kumar
16587fd7e1 chore: fix duplicate workflow issue 2026-04-24 13:17:04 +05:30
Sabiha Khan
f7c1f63e1b
feat: add posthog signup and signin events, enable backend posthog events for oss version (#249) 2026-04-24 12:02:52 +05:30
Abhishek
00a1a22b74
feat: refactor node spec and add mcp tools (#244)
* refactor: carve out extraction panel

* refactor: create spec versions for node types

* refactor: create a GenericNode and remove custom nodes

* feat: add python and typescript sdk

* add dograh sdk

* fix: fetch draft workflow definition over published one

* fix: fix routes of SDKs to use code gen

* chore: remove doclink dependency to reduce image size

* chore: format files

* chore: bump pipecat

* feat: let mcp fetch archived workflows on demand

* chore: fix tests

* feat: add sdk documentation

* chore: change banner and add badge
2026-04-21 07:56:16 +05:30
Abhishek
79bc91b1e0
feat: add mcp server to Dograh OSS (#240)
* feat: add mcp server

* update mcp endpoint
2026-04-16 13:03:29 +05:30
Abhishek Kumar
e31b38122e fix: fix interruption handling for Gemini Live
1. Fixes #236
2. Fix run_inference for variable extraction for Gemini Live
2026-04-15 19:29:07 +05:30
Abhishek Kumar
7fab959e26 feat: add redial option in campaigns 2026-04-13 23:25:43 +05:30
Abhishek
7c245051d2
feat: add recording audio option in tool and node transitions (#232)
* feat: allow uploading recording as part of node transition

* feat: allow recordings in tool transitions

* chore: fix tests
2026-04-10 17:53:42 +05:30
Sabiha Khan
3f19a16e7f
feat: add posthog events (#231)
* feat: add posthog events

* fix: workflow_duplicated event

* chore: add events to enum
2026-04-10 17:52:21 +05:30
Abhishek Kumar
8b3dc02722 fix: render prompt template for variable extraction 2026-04-09 15:20:56 +05:30
Abhishek Kumar
87c8c5e2c8 feat: add full document mode in knowledge base 2026-04-09 13:49:20 +05:30
Abhishek Kumar
9decdb2f4b fix: send volume in cartesia 2026-04-08 23:20:14 +05:30
Abhishek Kumar
1f5229e2df chore: update prompt for pre-recorded audio generation 2026-04-08 22:23:14 +05:30