Ring Groups in bare Asterisk?

Hello,

I am running asterisk 13.4 on my Linux server at home. I do not use freepbx or any other GUI, I just set it up with the config files and CLI. I have been finding SIP phones at the flea market and connecting them up. I’d like to ultimately replace my (expensive) land line. The house is wired with CAT5 to every room, but it is currently dedicated to POTS. Would be much nicer if the POTS could be repurposed to Ethernet.

For this, I need the various phones in the house to behave like a land line. When somebody calls in to our home number, all the phones need to ring.

I understand that the way to accomplish this is via a “ring group”. But I have been unable to find out how to set one up. All the documentation I have been able to find is about FreePBX or other GUIs.

How does one set up “ring groups” with the bare config files?

There are two ways of implementing this:

  1. a ringall strategy queue
  2. use of the & operator in dial strings with the the Dial application.

The term ring group is a FreePBX one.

1 Like

Makes sense. Neither of these strategies are much fun though. The queues look enormously complicated. And it doesn’t take many & signs in a Dial() for my eyes to glaze over, especially since I’ve been naming my phones with their MAC addresses :).

You can use Dialgroups:

https://wiki.asterisk.org/wiki/display/AST/Asterisk+15+Function_DIALGROUP

Or Queues:

https://wiki.asterisk.org/wiki/display/AST/Asterisk+15+Application_Queue

Or build a dial string:

https://wiki.asterisk.org/wiki/display/AST/Asterisk+15+Application_Dial

Really you only have to set up any of these once so don’t worry that you are using those mac addresses as endpoint names.

The dialgroups look interesting. Can a dialgroup be set up outside any particular extension ( e.g. in the “[general]” section of extensions.conf ), and then used for a particular extension?

DialGroup is new to me, but, as all functions are expanded before an application is run, I would say it is simply a way of managing a special sort of variable, rather than anything known to the Dial application.

E.g. the add operator will just append & and the argument to the hidden variable (although it might test for duplicates). Del would be more difficult to simulate simply.

Summary

You can instruct Asterisk to dial multiple SIPs for incoming calls:

exten => s,1, Dial(SIP/0001&SIP/0002&SIP/0003&SIP/0004/w,28,t)

All the phones listed will ring at the same time, but the issue is that once a person picks up the other phones cannot listen in to that call if someone picks up a handset on another phone. You would need to either conference in the other SIP, or park the call in a meeting room.

You can use variables. Define a Variable with all the SIPs you want to be apart of your ring group and than use the variable name in the Dial Command:

[globals]
MYPHONES=SIP/121201&SIP/121202&SIP/121203

[IcomingLine1212]
exten => s,1, Dial(${MYPHONES}/w,28,t)

It probably does not make sense to use the phone MAC address of for the SIP Line. If you have multiple phones sharing the same extensions than append an sequential index number (ie Extension 1212 SIP/121201, SIP/121202, SIP/121203…) Or assign names to each phone using DNS/DHCP, and use the names in your config.

Using the MAC address is recommended practice. It means hackers cannot guess the user part of the credentials.

1 Like

I don’t see the advantage to using variables. Unless there is a concatenate function. Because the variable is the same mind-numbing list of devices that I would just put in the
Dial command.

You don’t need a function to concatenate: just concatenate the variable references, with any necessary separator.