I have a new phone on my desk: it’s a Grandstream GXP2135, and I chose this model instead of one of the slightly lower-end ones because it looks a bit nicer than, say, a GXP1628. Featurewise, they are very comparable, in fact I don’t really need the 4 SIP accounts it has over the 2 of its smaller brother.
The sound quality is good on both ends, and in particular, it’s LOUD enough on my end even with hands-free.
Configuration can be done via the keypad and softkeys, via a provisioning system (FTP(S), HTTP(S) or TFTP) with a text configuration file which contains a bunch of codes, or via a decent enough Web interface; I chose the latter. (I’d use provisioning if I had a number of these phones to configure, but I do not.) Firmware upgrades can be automated and also retrieved via TFTP, FTP(S), HTTP(S) from a configurable location.
Calling
With its support for CTI (Computer-Telephony Integration), I can make calls from the command line, which is something I’ve been wanting to do for ages: copy/paste a number from a Web page, say, and speak:
$ call smith
Smith John work +49 1234567102
Smith Josefine mobile +49 123-456 7890
$ call +491234567890
For a few years I’ve had a program which dumps names and email addresses from my macOS address book into a JSON data structure which mutt(1)
searches through, so I added the phone numbers to that same data and created a program with the very imaginative name call
which sends of an HTTP request to the phone with a URL-encoded phone number obtained either from the command line or selected from a list
http://192.168.1.39/cgi-bin/api-make_call?passcode=s1krit&hs=1&phonenumber=%2B491234567890
The CTI integration of these phones can do all manner of things such as request status, hang up, etc., but that’s all I want from it.
Address book
If I do use the phone only, I want to be able to select from the address book. These phones can download an XML address book (from TFTP, HTTP, or HTTPS) which looks like this, and which is easy enough to generate:
<?xml version="1.0"?>
<AddressBook>
<Contact>
<LastName>Jolie</LastName>
<FirstName>Jane</FirstName>
<Phone type="Cell|Work|Home"> <!-- "type" attribute is undocumented -->
<phonenumber>+33 1 47 123 4567</phonenumber>
</Phone>
<Company>XXX</Company> <!-- undocumented -->
</Contact>
</AddressBook>
Triggers
One of the reasons for choosing a phone from this manufacturer (I have my brother in law to thank for the hint) is they have so-called action URLs the phone invokes on specific triggers. This can be phone off hook or on hook, an incoming or outgoing call, missed calls, etc.
I specify a URL and the phone performs a HTTP GET request to the address. Please note that I said “HTTP” and “address”. It’s the year 2020, and in spite of installing the latest firmware, the GXP2135 can do neither HTTPS here nor can I use a hostname. (Which is painful if we take into account that address books over XML supports both.)
These URLs can have codes embedded in them which contain information about the trigger.
http://192.168.1.23:8801/get.php?r=$remote&l=$local&dir=$calldirection
Here I use three of the possible values:
$remote
is the calling number$local
is the called number or device$calldirection
is eitherin
orout
depending on the calling direction
Some values like, $duration
will make sense only when the ActionURL is invoked on Terminated call, for instance.
See also
There’s a very large number of additional features these phones have, including something called “XML applications”, but I haven’t yet looked into those.