I've wanted this for so very long
Putting my texting into IRC, even if I don't send many messages, has long been a dream of mine. Periodically I would look into solutions, and be disappointed. This week I picked up the torch again and came across two options. The first option is pretty hacky, but I'm going to bring it up for those who can't currently do the second, and to show that the second best solution still left a lot to be desired.
GTalkSMS seemed like a ray of light when I found it. And it does work... But it is hacky...
How does GTalkSMS work?
Well, it is an android app that monitors for incoming SMS messages (among a handful of other features). The hackyness comes into play with how the SMS messages get to IRC.
GTalkSMS requires two jabber accounts -- each account listing the other as a friend.
- You feed GTalkSMS the server/port/user/pass for the first account, and it will then connect to jabber as that account.
- You teach it the name of the second account; this account will get notifications sent to it and be authorized to use 'commands'.
So it pretty much acts as a relay, and forces your phone to use battery to be connected to jabber.
Note: Getting to IRC at this point would involve connecting to just the second account in BitlBee. If You were connected to both, it would be spammy whenever you send a command to GTalkSMS... Which means you need a throwaway jabber account for this solution.
So... What else can I find?
The above really didn't appeal to me, so I went back to researching. After a while I came across purple-hangouts, and found that it did in fact handle SMS.
Hangouts Plugin for libpurple
A replacement prpl for Hangouts in Pidgin/libpurple to support the proprietary protocol that Google uses for its Hangouts service. So far it supports all the fun things that aren't part of the XMPP interface, such as Group Chats, synchronised history between devices and SMS support via Google Voice.
I'm going to fast forward through this step, as I already had a working BitlBee service running.
I did have to uninstall the
bitlbee package, and replace it with
bitlbee-libpurpe, on my Debian sid VPS.
This dropped right into place with the same config and non libpurple plugins (bitlbee-facebook and bitlbee-steam).
When restarting BitlBee, to make sure the update worked, I ran into a snafu I've had with Debian's BitlBee install.
Namely, it seems like the
systemd implementation of the daemon is borked.
To enact a restart of BitlBee I have to manually kill the PIDs, as
service bitlbee stop does not work.
Yes, I know
systemctl is the current command, but
service is pretty much an alias.
After killing the PIDs, I then
service bitlbee stop and
service bitlbee start.
I suspect it is still using
initd type files.
On Debian, you will need the following dependencies:
The installation instructions give a nice little code block for your copypasta pleasure, which I'll put below (using aptitude, as I prefer it).
sudo aptitude install libpurple-dev libjson-glib-dev libglib2.0-dev libprotobuf-c-dev protobuf-c-compiler mercurial make; hg clone https://bitbucket.org/EionRobb/purple-hangouts/ && cd purple-hangouts; make && sudo make install
Yes... this does force you to use
Note: EionRobb points out you can use
hg-git, as well as downloading the source zip off of bitbucket.
I will have to give
hg-git a try next time.
Anyway, installing was pretty easy, and I restarted BitlBee again to make sure it propagated.
Configuring Google Voice and Google Fi
With a Google Voice set to use Hangouts, you are pretty much done. Just make the Hangouts app your default SMS app.
In addition to setting the Hangouts app to be the default, you will need to adjust a Fi specific setting. From Google's Using Hangouts with Project Fi page:
- On your phone, open the Hangouts app
- In the upper left corner, touch the Menu icon
- Touch Settings
- Touch the Google Account you use with Project Fi
- Under “Project Fi calls and SMS,” check the box next to “Messages” and confirm
Added account to BitlBee
At this point I removed my gtalk protocol account from BitlBee (
acc gtalk del) and readded it as a hangouts protocol account,
acc add hangouts email@example.com.
After connecting (
acc hangouts on) you will get a privmsg from
2016-12-24 22:41:58 purple_request_0 Authorization Code
2016-12-24 22:41:58 purple_request_0 URL_HERE
2016-12-24 22:41:58 purple_request_0 Please follow the YouTube video to get the OAuth code
I'll leave you to going through the video (link redacted, as it is a private youtube video).
Once you have the oauth key, you paste it in and reply to
And now your are connected!
Fixing buddy nicks
At this point, you will notice that your buddies' nicks are messed up.
To fix this you will want to do
acc hangouts set nick_format %full_name, and then
acc hangouts off, followed by
acc hangouts on, to refresh the nicks.
Don't forget to use the
save command to be on the safe side.
Note: Alternatively, if you have pre-read these instructions, you could do this setting after adding the account and before connecting *wink*
Cell Phone Nicks
Unfortunately, at this point cell phones are not connected to the contact in purple-hangouts.
So if you have a friend named Alice who's number is 555-555-5555, you will have both
You can go through and
rename the cell buddies to have a better nick with
rename _155555555555 AliceA_phone.
At this point you should be able to see sweet, sweet IRC side SMS messages! I would like to thank Eion Robb and Mike 'Maiku' Ruprecht for making this beautiful tool. I've been looking for something like this for years.
- ☑ Life Goal: SMS via IRC
- ☐ Life Goal: Get all friends to use IRC
My personal IRC setup involves
WeeChat running inside it 24/7/365.
With WeeChat, I use
pushover.pl (you can find it with the /script command) to send pushover notices to my phone on hilight/privmsg, when I am
I then have my
/away auto set by
screen_away.py when I am detached from tmux, and not connected to my weechat relay.
So, how to I stop my phone from making a bing sound twice, once for the SMS and once for pushover?
Since 99% of renamed cells have a default prefix ('_155555555555') (I'm assuming the '1', as I'm in the US), and I use a standard convention when I set the nick ('name_phone'), this is doable using
/set plugins.var.perl.pushover.blacklist = "*_phone,_1*"
/save for good measure.