Skip to content

Develop - #7

Merged
boffart merged 133 commits into
masterfrom
develop
Aug 6, 2026
Merged

Develop#7
boffart merged 133 commits into
masterfrom
develop

Conversation

@boffart

@boffart boffart commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

No description provided.

weblate and others added 30 commits September 6, 2024 07:00
Currently translated at 100.0% (7 of 7 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/fi/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/en/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/az/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/cs/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/da/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/de/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/el/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/es/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/fr/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/it/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/ja/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/ka/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/nl/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/pl/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/pt/
Currently translated at 100.0% (26 of 26 strings)

Translation: MIKOPBX/ModuleAutoDialer
Translate-URL: https://weblate.mikopbx.com/projects/mikopbx/moduleautodialer/pt_BR/
Alexey Portnov and others added 29 commits February 17, 2026 01:45
1C sends BOM (\xEF\xBB\xBF) at the start of HTTP request body,
causing json_decode to return null. Added getJsonBody() helper
that strips BOM before decoding, applied to all POST/PUT endpoints.
1. Dialplan: fire EVENT_FAIL_ORIGINATE AGI when bridgePeer is empty
   (e.g. call blocked by channel limit in all-outgoing-custom),
   so the module is notified immediately instead of hanging forever.

2. ConnectorDB: auto-reset TaskResults stuck in CreateCallFile state
   for over 120 seconds — safety net against any lost AGI/AMI events.
1. Add fallback FAIL result in EVENT_END_CALL handler when no condition
   matched (e.g. DIALSTATUS != ANSWER and state was not START_DIAL_IN),
   preventing records from staying open with null result forever.

2. Expand stuck call cleanup to catch any state (not just CreateCallFile)
   that stays unclosed for over 120 seconds.
Active call states (afterDialOut, startDial, EVENT_POLLING) are no
longer reset by timeout — a real call can last longer than 120s.
Only CreateCallFile (120s) and endCall (300s) are auto-reset.
Reject tasks with empty innerNum at API level and skip call file
creation in WorkerDialer as a safety net.
- Ensure ConnectorDB::invoke() always returns array when unserialize fails, preventing TypeError that disables the module
- Skip TTS request when text is empty in RHVoice and Yandex synthesizers
- Add explicit -t wav flag to sox command in RHVoiceSynthesize so sox
  correctly reads WAV files saved with .raw extension instead of
  guessing format from extension (caused intermittent beeps/silence)
- Validate cached TTS files are >300 bytes (WAV header is ~44 bytes),
  delete and regenerate corrupt cache entries in both RHVoice and Yandex
- Delete broken output files after failed sox conversion to prevent
  them from being cached permanently
- Add YandexRecognize class for speech-to-text via Yandex SpeechKit API (LPCM format)
- Add needRecognize flag and recognizeLabel on playback_record actions
- Add confirmation question type (type=confirmation) with STT results playback
- Add restart action to repeat survey from beginning with RETRY_COUNTER reset
- Add confirm-stt.php AGI script to collect STT results and generate TTS confirmation
- Add yandexFolderId setting to module config and web UI
- Add Clients.name as NAME parameter in findClientByPhone for polling templates
- Fix nextQuestion="0" treated as empty due to PHP falsy check
- Update web UI: toggle for needRecognize, recognizeLabel input, confirmation toggle, restart action dropdown
…t question only

- Collapse accordion by default, compact timeout/defPress fields (4-wide)
- Replace <br> with divider between press sections, bold section headers
- Show confirmation toggle only on last question, update on reorder/add/remove
- Inline needRecognize toggle with label field, show label only when enabled
- Document Yandex Cloud Folder ID and service account setup
- Add needRecognize, recognizeLabel, restart action, confirmation question type
- Add polling example with STT and confirmation
- Update polling-results response with recognizedText and recognizeLabel fields
… handling

- CRM settings: URL, login, password (Basic Auth) on settings tab
- New action type "send_crm" for confirmation questions: sends polling
  results to CRM via POST, speaks back response using TTS template
- New AGI agi-bin/send-crm.php for CRM HTTP requests
- New REST endpoint POST /crm-test returning timestamp
- Fix saveResult.php: fallback to CALLERID(num) when M_OUT_NUMBER empty
  (fixes polling results not saving for incoming calls routed to polls)
- Fix getRecognizedResults: use DTMF result as fallback when STT empty,
  search by recognizeLabel instead of recognizedText
- Add exten => t (timeout) handler for all polling question contexts
Move timeout extension (t) generation with defPress logic into
genPolingActionsContexts() to prevent double registration that caused
Asterisk warnings: "Unable to register extension 't' priority 1, already in use"
…ransliteration

RHVoice could return HTTP 200 with nearly empty WAV (~1600 bytes) for texts
containing Latin characters (e.g. car plate "O501ET44"). The file passed the
300-byte cache threshold and was served to all subsequent calls as silence.

Changes:
- Raise cache validation threshold from 300 to 16000 bytes (1 sec of audio)
- Add up to 3 retry attempts on failed TTS generation
- Increase HTTP timeout from 3s to 10s for long texts
- Transliterate Latin to Cyrillic before sending to RHVoice
- Log each failed attempt with file size and text snippet
WorkerAMI's waitUserEvent(true) blocks on fgets() indefinitely — after
signal interruption it re-enters the blocking loop via ping(), never
checking needRestart. Fix: disconnect AMI in signalHandler to break
the blocking read. Also prevent process title overflow (SHUTDOWN_
prepended only once) and add safe.php watchdog to kill -9 any stuck
SHUTDOWN processes.
@boffart
boffart merged commit ecccaf8 into master Aug 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants