Repeat Caller ready for review/testing

Repeat Caller 1.0.1 is ready for wider testing and feedback. It promises nothing more at this stage.

It has been tested in normal use and throughout its development, but this is currently an unsigned module that hasn’t been put under heavy load, so please apply the safety features defensively (snooze, suppression, self-trigger protection, etc).

Repeat Caller repeatcaller is a new community module that turns qualifying inbound call activity into actionable incidents and alerts on FreePBX and PBXact 16 or 17. It supports two distinct modes that occur within the selected time window: Repeat and Invert. Repeat mode detects when the same caller reaches the configured threshold. Invert mode detects when there are fewer than the configured number of matching calls.

WARNING :warning: DO NOT attempt to install this on FreePBX 15 or below, please. It is versions 16 and 17 only.

This was a real, recent end user request, and they were happy for the work to be shared with the wider community under a GPLv3 licence, fully open source.

A customer needed FreePBX to detect when normal behaviour starts to look abnormal, to count the calls and raise an alert when repetition becomes an incident.

Repeat mode works with fixed windows of time and inbound routes. It looks for patterns in the CDR to see if something keeps happening:

• Why has the same person called three times in an hour?
• Why does someone keep hitting our out-of-hours voicemail without leaving a message?
• Why is the same caller trying multiple numbers?

Invert mode asks why something expected never happened at all:

• Why didn’t on-site security call in on the hour as always?
• Why hasn’t our vulnerable client called for a chat today?
• Why has a number that normally gets plenty of calls received nothing this morning?

A phone system can’t reliably answer those questions, but it can recognise when they need to be asked. The GitHub repository contains everything you need to get started:

After reading the README, one way to install the module is by running the following as root:

Install from GitHub. Git commands require the modules/repository directory context. After cloning, switch back to a neutral directory before running fwconsole commands.

FreePBX 16 / PBXact 16 (CentOS 7)

Check whether Git is installed:

rpm -q git

If Git is not installed:

yum install -y git

FreePBX 17 / PBXact 17 (Debian 12)

Check whether Git is installed:

dpkg -l git

If Git is not installed:

apt update
apt install -y git

Then run the following commands as root:

cd /var/www/html/admin/modules
git clone https://github.com/kierknoby/repeatcaller.git repeatcaller
cd ~
fwconsole ma install repeatcaller
fwconsole chown
fwconsole reload

I am keen to hear your thoughts and anything you find in wider testing. Something that seemed so niche soon became pretty interesting, and across our customer base I have seen a lot more “repeat caller” activity than initially expected. When someone needs to get hold of someone, they really do keep trying.

This was a fair bit of work and I will keep on improving it. Not just by maintaining it for our customer, who contributed financially towards its development, but by continuing to develop it for everyone. It is a relatively complex and challenging module, so I am expecting to see plenty of edge cases and patch releases in 1.0.x before developing new features. Please let me know your ideas though.

If you like the module, I would really appreciate a :star: on GitHub, as well as any comments and messages.

Cheers,
Kieran

Demo screenshot below.

Mixed-language Alert Call prompts outside en / en_GB

While it all sounds rather amusing with Allison Smith cutting in as the translator, my multi-language skills still aren’t the best. As I work through this issue, if anyone can confirm what is relayed correctly in their chosen language that would be ever so helpful.

My basic grasp of French, Spanish, and German, suggests it’s a relatively straightforward fix.

Thanks! K

This module can be used as patrol unit somehow?

Invert mode has received the most attention so far. When someone is expected to call in, and that doesn’t happen, an alert will be sent.

As an example: A security guard follows a set route within company premises and makes calls from specific telephones along a precise circuit to prove that he has indeed carried out his night patrol.

When those calls don’t come in to HQ within the timeframe specified, an alert will be sent. You could also use it for an excursion group that were supposed to call in once they had reached the destination along their route.

I think a monitoring business could build essential call handling services from this functionality alone.

The module is great for what it does but it’s not a watchguard system. The module has no concept of routes, checkpoints, etc. There’s just an alert, no escalation, management or integration with security systems. A PBX/phone based watchguard system is a legacy or niche solution. Modern solutions don’t rely on cooperative interaction so much like picking up a phone and dialing places. RFID does a lot of the work. However, it lacks a lot of things that would make it a viable solution for this use case.

Again, this module looks to be a great reporting tool but it in no way meets the requires of being a real-time monitoring tool. Monitoring systems generally take action when an event happens not 15-20 minutes later.

At low level, low scale it can be a fine watchguard or delayed monitoring option where not all the features or options of those types of solutions are really needed.

Again, looks like it will be a great reporting tool on inbound calling trends.

Thanks. I didn’t really think too much about the invert side of the module, the interest took me by surprise. It was originally intended as a tick box rather than a core feature. You’re right, and any sort of dependency on it should be treated with caution.

This module and its features are a welcome addition. It can’t compete with dedicated applications indeed.

FreePBX is an IP PBX. It’s not designed for security.

Good job so.

I’m still working on patching (translating!) the multilingual Alert Calls issue.

Repeat Caller builds its generated Alert Call from the sound files already installed on the PBX. The problem is that language packs don’t always provide the same vocabulary in a form that can be assembled as a direct translation, and I’m not even asking much of it.

A sound pack may contain plenty of call-related phrases, but not necessarily the standalone words needed to construct something as basic as “4 calls in 5 minutes” without changing the meaning or causing confusion.

Some of the nearest alternatives are tied specifically to queues and voicemail, for example. Using those would produce incorrect / incoherent audio. Rather than generate mixed-language or nonsensical alerts, I’m taking the approach that a language will only be used natively where the standard installed prompts can produce a coherent message. I am stripping it back and changing the message for each language, which takes hours before ending up in a dead end. If it doesn’t work out, the complete generated Alert Call will fall back to the English default.

I’m checking the available prompts individually before finalising the change. French is looking good so far, but Spanish and German are missing what I think are necessary sound files.

Sorry it’s taking so long for anyone waiting, it’s a very tedious and tiring process with little reward. I am trying my best. If anyone objects to the fall-back approach, please let me know. Adding new sound files is something for much later down the line.

English set example:

  • Repeat, known caller
    “Warning. This alert has been initiated for 4 calls within 5 minutes from 02079460123, calling number 01614960999. Press 1 to accept or 2 to decline.”

  • Repeat, unknown caller
    “Warning. This alert has been initiated for 4 calls within 5 minutes from an unknown caller, calling number 01614960999. Press 1 to accept or 2 to decline.”

  • Invert, caller-scoped
    “Warning. This alert has been initiated for less than 3 calls within 5 minutes from 02079460123, calling number 01614960999. Press 1 to accept or 2 to decline.”

  • Invert, no caller scope
    “Warning. This alert has been initiated for less than 3 calls within 5 minutes, calling number 01614960999. Press 1 to accept or 2 to decline.”

  • Accepted
    “Thank you. Goodbye.”

  • Declined
    “Thank you. Goodbye.”

  • Invalid response
    “Sorry. Please try again.”
    Then the accept/decline prompt is offered again.

  • No response / timeout
    The call then repeats up to 2 times.

  • Accepted elsewhere / no longer available
    “The incoming call is no longer available or was answered by someone else. Thank you. Goodbye.”

If anyone has any suggestions, please let me know.

K

Repeat Caller repeatcaller 1.0.2 patch release, 24 August 2026 :wrench:

  • Improves Alert Call language handling for non-English Asterisk sound languages.
  • Adds a concise native French Alert Call profile using standard installed prompts without incorrect queue quantity or voicemail substitutions.
  • Uses native non-English Alert Call audio only where installed standard Asterisk and FreePBX prompts reproduce the complete established behavior.
  • Uses one coherent English generated-message fallback for incomplete language profiles, without module-owned translated recordings or mixed-language audio.
  • Prevents mixed-language generated Alert Call audio by using a coherent English fallback when prompt discovery is unavailable or a complete native prompt set is not installed.
  • Preserves the selected System Recording language before generated Alert Call audio begins.
  • Discovers prompts recursively within each exact requested locale directory while preserving nested Asterisk prompt paths; candidate fallback is explicit.
  • Uses the selected Alert Call language when speaking counts, durations, telephone numbers, and DIDs.
  • Adds an Alert Call Language table showing installed locales, available codecs, resolved playback languages, and clear original, adapted, or fallback status independently of the highlighted active FreePBX language.
  • Adds per-language sample playback that rotates through Repeat, Invert, and acceptance scenarios using the same prompt resolution as live Alert Calls.
  • Adds regression coverage for multilingual Alert Call behaviour while preserving existing en and en_GB behaviour.

It’s a solid foundation for which most languages can be brought in over time, while sensibly using a default en fallback rather than nonsensical Alert Calls. Update instructions are in the README.