CALL-E tools for Dify workflows and agents.
Source repository: https://github.com/CALLE-AI/call-e-dify-plugin
This plugin exposes safe outbound phone-call tools for CALL-E:
create_callpreviews or creates one outbound CALL-E call.get_callfetches one CALL-E call result by call ID.create_and_waitpreviews or creates one outbound CALL-E call, then polls until the call reaches a terminal status or timeout.
Phone calls are real-world side effects. Live calls require both dry_run=false and confirm_live_call=true.
- Python 3.12
- Dify Plugin CLI
- CALL-E API key (create one in the CALL-E dashboard)
Install the Dify Plugin CLI by following the official Dify plugin documentation. For request and response details, see the CALL-E API reference.
Configure these provider credentials in Dify:
| Credential | Required | Description |
|---|---|---|
api_key |
Yes | CALL-E API key. Create a key; it is stored as a secret input in Dify. |
base_url |
Yes | CALL-E API base URL. Defaults to https://api.heycall-e.com. Do not include /v1. |
When credentials are saved, the provider performs a non-mutating authentication probe:
GET /v1/calls/call_dify_credential_probe_00000000000000000000000000000000
The CALL-E API documents GET /v1/calls/{call_id} and the stable error code not_found. A documented 404 not_found response means the API key was accepted and the probe call ID does not exist, so no call is created. 401 unauthorized and 403 forbidden are reported as credential configuration errors.
Creates one CALL-E call only when both live-call controls are set:
dry_run=falseconfirm_live_call=true
Otherwise it returns a preview with the phone number masked.
Fetches one call result from GET /v1/calls/{call_id} and returns masked, parsed status fields.
Creates one call, then polls until a terminal status or timeout. This is the most convenient tool for Dify workflows that need one final result object.
- Requires E.164 destination phone numbers, for example
+15555550123. - Rejects common placeholder numbers for live calls.
- Masks phone numbers in text and JSON responses.
- Does not create recurring schedules.
- Does not expose API keys in logs or responses.
- Defaults to
dry_run=true.
For recurring workflows, keep recurrence in the host scheduler. CALL-E should receive exactly one call request per scheduled run.
Create a virtual environment and install dependencies:
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"Run the local checks:
python -m pytest
python -m compileall provider tools utils main.pyRun the plugin locally:
python main.pyFrom the parent directory:
dify plugin package ./call-e-dify-pluginThe package command creates a .difypkg file that can be uploaded to Dify or attached to a GitHub Release.
- Update
versioninmanifest.yamlandpyproject.toml. - Run tests and compile checks.
- Package with
dify plugin package ./call-e-dify-plugin. - Create a GitHub Release.
- Upload the
.difypkgas a release asset.
Use live-call tools only for numbers you own or are explicitly authorized to call. Do not use this plugin for emergency services, deception, harassment, or hidden recurring outreach. For medical, legal, financial, or emergency contexts, keep the call task bounded to administrative or informational workflows and avoid professional advice or urgent decision-making.