<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>chat &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/chat/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Sat, 19 Apr 2025 07:27:56 +0000</lastBuildDate>
	<language>en-GB</language>
	<copyright>© Terence Eden. 🄯 CC BY-SA. See https://shkspr.mobi/blog/copyright-and-copyleft/</copyright>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>chat &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Whatever happened to URI Schemes?]]></title>
		<link>https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/</link>
					<comments>https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#respond</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Wed, 19 Apr 2017 11:07:59 +0000</pubDate>
		<category><![CDATA[chat]]></category><category><![CDATA[standards]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=25036</guid>

					<description><![CDATA[A few days ago, I ranted about how chat apps have poor support for URI schemes.  By &#34;Chat Apps&#34;, I&#039;m talking about the new wave of messengers - WhatsApp, WeChat, Telegram, Wire, and the like.  What do I mean by &#34;URI Scheme&#34;?  You&#039;re probably familiar with:   https://example.com   The &#34;scheme&#34; is https - it tells the computer &#34;Open the web browser and load the specified resource.&#34;  You may also be …]]></description>
										<content:encoded>&lt;p&gt;A few days ago, &lt;a href="https://twitter.com/edent/status/851156962641313792"&gt;I ranted about how chat apps have poor support for URI schemes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;By "Chat Apps", I'm talking about the new wave of messengers - WhatsApp, WeChat, Telegram, Wire, and the like.&lt;/p&gt;

&lt;p&gt;What do I mean by "URI Scheme"?  You're probably familiar with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://example.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "&lt;a href="https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax"&gt;scheme&lt;/a&gt;" is &lt;code&gt;https&lt;/code&gt; - it tells the computer "Open the web browser and load the specified resource."&lt;/p&gt;

&lt;p&gt;You may also be aware of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mailto:me@example.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tells the computer to open the email app and fill in "me@example.com" as the destination address.&lt;/p&gt;

&lt;p&gt;Also fairly common are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tel:+447700900123&lt;/code&gt; open the phone dialler and prepare to dial this number.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sms:+447700900123&lt;/code&gt; open the text message app and use this number.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;skype:terence.eden&lt;/code&gt; open the Skype app and contact the specified user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are &lt;a href="https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml"&gt;hundreds of URI schemes&lt;/a&gt; in use.  &lt;a href="http://stackoverflow.com/questions/8464632/what-are-the-uri-url-schemes-for-most-im-networks"&gt;Older chat apps like ICQ and AIM made use of schemes&lt;/a&gt; - yet &lt;em&gt;modern&lt;/em&gt; chat apps mostly ignore them. Why?&lt;/p&gt;

&lt;p&gt;At the moment, there's is literally no way I can send you a link which says "This is my account on Wire, chat to me using the app."&lt;/p&gt;

&lt;h2 id="uri-support"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#uri-support"&gt;URI Support&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Firstly, it's not all bad news!  There are a few apps which &lt;em&gt;do&lt;/em&gt; have rudimentary URI support.&lt;/p&gt;

&lt;h3 id="whatsapp"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#whatsapp"&gt;WhatsApp&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;There is an &lt;em&gt;undocumented&lt;/em&gt; URI Scheme:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;whatsapp://send/?phone=447700900123&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In repeated testing with friends, it performed inconsistently. Sometimes it would open a chat window, other times it gave an error.&lt;/p&gt;

&lt;h3 id="telegram"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#telegram"&gt;Telegram&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Again, an &lt;em&gt;undocumented&lt;/em&gt; URI Scheme. This is how to look up users by username:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tg://resolve?domain=edent&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In tests it worked reliably across all platforms.&lt;/p&gt;

&lt;h3 id="wechat"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#wechat"&gt;WeChat&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;The popular Chinese messenger has the bare minimum of a scheme:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;weixin://&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That will launch the app, if installed. That's it. There's no way to target a specific user.&lt;/p&gt;

&lt;h2 id="when-it-all-goes-wrong"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#when-it-all-goes-wrong"&gt;When it all goes wrong&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;We take it for granted that everyone who clicks on a link has a web browser and email client installed. If they're on mobile, they probably have the ability to make phone calls and send SMS.&lt;/p&gt;

&lt;p&gt;So what happens if you don't have a chat app installed?  This hot mess:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2017/04/tg.png" alt="A web browser showing an error message that it didn't understand a protocol" width="366" height="431" class="aligncenter size-full wp-image-25045"&gt;

&lt;p&gt;It's pretty much the same on Android or iPhone - the user is sent to an unhelpful error page.&lt;/p&gt;

&lt;h2 id="why-not-use-an-http-resolver"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#why-not-use-an-http-resolver"&gt;Why not use an HTTP resolver?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Both Telegram &amp;amp; WhatsApp let you look up a user on their website and then redirect you to the app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://t.me/edent"&gt;&lt;code&gt;https://t.me/edent&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://api.whatsapp.com/send?phone=447700900123"&gt;&lt;code&gt;https://api.whatsapp.com/send?phone=447700900123&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you open that in your browser, it will take you to the provider's site and they will then redirect you to their app.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2017/04/telegram-fs8.png" alt="The telgram website attempts to redirect the user to the app" width="320" height="320" class="aligncenter size-full wp-image-25047"&gt;

&lt;p&gt;This introduces a number of problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An extra step which adds latency.

&lt;ul&gt;
&lt;li&gt;It forces everything through the browser - so you have to wait for that to load, resolve, and close before you can chat.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Leaks metadata.

&lt;ul&gt;
&lt;li&gt;Your ISP now knows that you're doing a lookup.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Increases vendor lock in.

&lt;ul&gt;
&lt;li&gt;What if Telegram decides that it will only allow lookups from registered users?&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Security

&lt;ul&gt;
&lt;li&gt;What if Telegram lies about the resolved account?&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;It doesn't actually work

&lt;ul&gt;
&lt;li&gt;There's no way for a website to tell if the user has an app installed.&lt;/li&gt;
&lt;li&gt;The user is often redirected to a URI they can't open.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For now, it seems that using an HTTP resolver is the least worst option. It can easily be shared and understood by users - and it doesn't tie the receiver in to a specific technology like Android Intents.&lt;/p&gt;

&lt;p&gt;But, for the future - perhaps there's a better way?&lt;/p&gt;

&lt;h2 id="federation"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#federation"&gt;Federation&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Given that WhatsApp, Wire, Allo, Facebook and many others &lt;a href="https://en.wikipedia.org/wiki/Signal_Protocol"&gt;all use the Open Whisper Systems protocol&lt;/a&gt;, it seem bizarre to me that they can't communicate with each other.  Imagine if your iPhone couldn't make calls to your friend's Nokia - unacceptable!&lt;/p&gt;

&lt;p&gt;Similarly, all the major voice/video calling apps are converging on WebRTC to pipe your call around the world.  The app is &lt;em&gt;merely&lt;/em&gt; the user interface.  You may prefer to use OutLook, I prefer Gmail - but they both use email as the underlying communications platform.&lt;/p&gt;

&lt;p&gt;I've explained before why &lt;a href="https://shkspr.mobi/blog/2017/02/can-i-own-my-identity-on-the-internet/"&gt;using a mobile phone number is a poor choice of identifier&lt;/a&gt; (mostly because the user doesn't own it and can't transfer it overseas) - but given that's what most people use now, it makes sense to include it as an option.&lt;/p&gt;

&lt;h2 id="problem-statement"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#problem-statement"&gt;Problem Statement&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;I want to share a link with someone so they can talk to me on my preferred chat app.&lt;/p&gt;

&lt;h2 id="solution"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#solution"&gt;Solution&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Let's create a new URI scheme - &lt;code&gt;chat:&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It is short and it doesn't tie itself to a specific action (&lt;code&gt;videocall:&lt;/code&gt;, &lt;code&gt;text:&lt;/code&gt;, &lt;code&gt;voice:&lt;/code&gt;), or to a specific protocol (Signal, WebRTC).&lt;/p&gt;

&lt;p&gt;When clicking on a &lt;code&gt;chat:&lt;/code&gt; link, your device will either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open up your chat client.&lt;/li&gt;
&lt;li&gt;If you have several installed, give you a choice of chat client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's take a look at some examples:&lt;/p&gt;

&lt;h3 id="just-a-phone-number"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#just-a-phone-number"&gt;Just a phone number&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;chat:+447700900123&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An internationally formatted &lt;a href="https://en.wikipedia.org/wiki/E.164"&gt;E.164&lt;/a&gt; phone number.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;+CountryCode&lt;/code&gt; at the start is mandatory.&lt;/li&gt;
&lt;li&gt;This is to disambiguate between users with similar numbers but provided by different countries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This assumes that both parties are on the same chat app.&lt;/p&gt;

&lt;p&gt;If I'm on WhatsApp and my friend only has WeChat installed - what happens?  Well, part of Federation means that you can talk &lt;em&gt;across&lt;/em&gt; different chat apps.&lt;/p&gt;

&lt;h3 id="named-account-at-a-provider"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#named-account-at-a-provider"&gt;Named account at a provider&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;chat:me@example.com&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This will open the "example.com" chat app.&lt;/li&gt;
&lt;li&gt;Possible confusion with an email address (see later)?&lt;/li&gt;
&lt;li&gt;Might be more sensible to use &lt;code&gt;account@com.example&lt;/code&gt;? But users are unlikely to understand that.&lt;/li&gt;
&lt;li&gt;It could be &lt;code&gt;chat:@shkspr.mobi&lt;/code&gt; and let my domain manage where I want the chat to be directed.&lt;/li&gt;
&lt;li&gt;Could just use "me@whatsapp" - does a hierarchy need to be imposed?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="a-name-can-also-be-a-number"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#a-name-can-also-be-a-number"&gt;A name can also be a number&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;chat:+447700900123@whatsapp&lt;/code&gt;&lt;/p&gt;

&lt;h3 id="with-specific-actions"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#with-specific-actions"&gt;With specific actions&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;chat:me@example.com?body=URL%20Encoded%20String&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This pre-fills a message to be sent to the specific user.&lt;/li&gt;
&lt;li&gt;Identical syntax to email's &lt;code&gt;mailto:&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Could also include base64 encoded data for images and other attachments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="with-multiple-participants"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#with-multiple-participants"&gt;With multiple participants&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;chat:me@example.com,+447700900123,alice@example.org&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start a chat with several participants.&lt;/li&gt;
&lt;li&gt;Again, identical to email's &lt;code&gt;mailto&lt;/code&gt; syntax.&lt;/li&gt;
&lt;li&gt;Could also be combined with the &lt;code&gt;?body=&lt;/code&gt; above.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="ephemeral-support"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#ephemeral-support"&gt;Ephemeral Support&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;chat:me@example.com?timeout=60&amp;amp;body=This message will self destruct&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requests that the receiving client will discard the message after a &lt;code&gt;timeout&lt;/code&gt; specified in seconds.&lt;/li&gt;
&lt;li&gt;It is up to the receiver to comply with this request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="and-then"&gt;&lt;a href="https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/#and-then"&gt;And Then...&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Are URI Schemes the future once more? I think they have to be.  Messaging app providers will shut down (MySpace), people will migrate away from platforms (ICQ), phone numbers and email addresses will change - but people will still want to chat with the minimum of fuss.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=25036&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/04/whatever-happened-to-uri-schemes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
