<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nikita Pushkarski</title>
    <description>The latest articles on DEV Community by Nikita Pushkarski (@pushkarski).</description>
    <link>https://dev.to/pushkarski</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F62013%2Fe707a8e5-5dc5-4730-951c-a7e0b1459a64.jpeg</url>
      <title>DEV Community: Nikita Pushkarski</title>
      <link>https://dev.to/pushkarski</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pushkarski"/>
    <language>en</language>
    <item>
      <title>`sudo code` in WSL2 doesn't work? Short guide to the rescue</title>
      <dc:creator>Nikita Pushkarski</dc:creator>
      <pubDate>Mon, 30 Aug 2021 23:47:10 +0000</pubDate>
      <link>https://dev.to/pushkarski/sudo-code-in-wsl2-doesn-t-work-short-guide-to-the-rescue-4fb4</link>
      <guid>https://dev.to/pushkarski/sudo-code-in-wsl2-doesn-t-work-short-guide-to-the-rescue-4fb4</guid>
      <description>&lt;p&gt;If you are one of those guys who are on Windows and have been struggling with making the &lt;code&gt;sudo code .&lt;/code&gt; or &lt;code&gt;sudo code {file_path}&lt;/code&gt; commands work, you've come to the right place.&lt;/p&gt;

&lt;h2&gt;
  
  
  DISCLAIMER
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;I myself know the basics of vi/vim, but it's much more convenient for me to create/format/update configs using VS Code. I'm sure there are a lot of people out there who can do things in vi/vim faster than I do in VS Code. Good for them. This short how-to aims only to reach people who, like me, like to use WSL2 and VS Code. This article doesn't seek to compare text editors, ignite pointless holy wars, or sth like that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;WSL2 gave us a wonderful opportunity to launch VS Code right from the Linux subsystem. That means that you can open some Linux-related config file not in vi/vim/nano, but in VS Code, then change and save it there AS ROOT. And it works. &lt;a href="https://code.visualstudio.com/blogs/2019/09/03/wsl2"&gt;On paper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In reality, I wasn't able to use it in the way I've just described. After a couple of tweaks, the 'code .' command started to work properly, but I was still far from saving Linux files in VS Code. By spending some additional time, I made it work, finally.&lt;/p&gt;

&lt;h2&gt;
  
  
  My setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10 21H1 build 19043&lt;/li&gt;
&lt;li&gt;WSL2 with Ubuntu 20.04.3 LTS&lt;/li&gt;
&lt;li&gt;VS Code 1.59.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without further ado, here are the steps you need to perform on your Windows machine to tame this naughty WSL2.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repeat after me
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In VS Code, install the &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl"&gt;Remote - WSL extension&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In Windows, add the following line to your PATH environment variable: &lt;code&gt;C:\Users\Your User Name\AppData\Local\Programs\Microsoft VS Code&lt;/code&gt;. Don't forget to substitute your user name here! &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pf5T05Qf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/psi44r27df4dqeuyu5fp.jpg" alt="Windows PATH environment variable"&gt;
&lt;/li&gt;
&lt;li&gt;In WSL2, add the following lines to the &lt;code&gt;~/.profile&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;alias code="code.exe"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;alias sudo="sudo "&lt;/code&gt; &amp;lt;-- there's a space before a closing quote, don't omit it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Restart your WSL2 session or open a new one.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;code .&lt;/code&gt; to open the current folder in VS Code;
run &lt;code&gt;code {file_path}&lt;/code&gt; to open the specified file in VS Code.&lt;/li&gt;
&lt;li&gt;You're awesome!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Useful links
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://code.visualstudio.com/blogs/2019/09/03/wsl2"&gt;Official docs on using VS Code in WSL2&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://linuxhandbook.com/run-alias-as-sudo/"&gt;The explanation of the "sudo " trick&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wsl</category>
      <category>windows</category>
      <category>bash</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Telegram SIP Connector + Voximplant = Calls to Soft/Cellphones</title>
      <dc:creator>Nikita Pushkarski</dc:creator>
      <pubDate>Wed, 29 Apr 2020 10:34:43 +0000</pubDate>
      <link>https://dev.to/pushkarski/telegram-sip-connector-voximplant-calls-to-soft-cellphones-lp7</link>
      <guid>https://dev.to/pushkarski/telegram-sip-connector-voximplant-calls-to-soft-cellphones-lp7</guid>
      <description>&lt;p&gt;I'm glad to meet each and every of you, fellow devs! My name is Nikita, I'm a lead technical writer at Voximplant. Recently, my colleague released a &lt;a href="https://dev.to/imaximova/how-we-used-jointjs-in-voximplant-kit-29b0"&gt;great article here&lt;/a&gt; on how we got through yet another JS-related challenge. As of today, I'm going to show something that is maybe not so exciting, but still fun; I welcome you to a guide on how to use a SIP connector of a messenger app Telegram to enable it to initiate and accept phone calls. &lt;/p&gt;

&lt;h1&gt;
  
  
  What's the Buzz?
&lt;/h1&gt;

&lt;p&gt;There's a SIP connector in a form of a bot in the Telegram ecosystem (@siptg). In the meanwhile, Voximplant is a communications platform. Do you know what it means? Correct, they are meant to be integrated.&lt;/p&gt;

&lt;p&gt;For the sake of clarity, even though Telegram is not the most popular messenger worldwide, it's quite a favorite one amongst techies and/or people who concern about their privacy. It is &lt;a href="https://wearesocial.com/global-digital-report-2019"&gt;used globally&lt;/a&gt; (see slide 83), especially in India, Hong Kong, Ethiopia, Saudi Arabia, Russia, Iran, etc. and recently has reached &lt;a href="https://telegram.org/blog/400-million"&gt;400 million monthly users&lt;/a&gt;.   &lt;/p&gt;

&lt;p&gt;Without further ado, let's get practical and follow the steps below :)&lt;/p&gt;

&lt;h1&gt;
  
  
  Registering a Softphone in Voximplant
&lt;/h1&gt;

&lt;p&gt;The SIP connector can operate in two modes: softphone and gateway. We're going to consider the former, as it allows registering the bot as an inner user of your Voximplant application. This is why we have to create an application and users within it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to your account &lt;a href="https://manage.voximplant.com/"&gt;https://manage.voximplant.com/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Go the &lt;a href="https://manage.voximplant.com/applications"&gt;Applications&lt;/a&gt; section and create a &lt;em&gt;sip&lt;/em&gt; application.&lt;/li&gt;
&lt;li&gt;Being in the application, switch to the &lt;em&gt;Users&lt;/em&gt; tab to create a &lt;em&gt;usertelegram&lt;/em&gt; user. Don't forget to specify a password, we'll need it soon:&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6zBwMdsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ir10sisxrgknsl82y183.jpg"&gt;
&lt;/li&gt;
&lt;li&gt;Also, create a &lt;em&gt;userbob&lt;/em&gt; user, we'll get back to it later.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Please be aware that @siptg converts users' names to a lower case during outbound calls. This is why you have to name users exactly as it is shown in this tutorial. Otherwise, the telegram bot will be accepting inbound calls, but won't be establishing outbound calls.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now let's configure the messenger side.&lt;/p&gt;

&lt;p&gt;The softphone itself is represented by @siptg, whereas its settings are available at @siptg_bot-open it. Press &lt;em&gt;Start&lt;/em&gt;, send the &lt;em&gt;/tariff&lt;/em&gt; command, and choose &lt;em&gt;Free&lt;/em&gt; (it's suitable for testing purposes, even though it has some limitation, e.g., after 5 failed calls the softphone becomes temporarily blocked. The exact time of unblocking can be seen via the same command, &lt;em&gt;/tariff&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Next, send the &lt;em&gt;/softphone&lt;/em&gt; command and tap &lt;em&gt;New&lt;/em&gt;. Here, sequentially specify the user's credentials and tap &lt;em&gt;Apply&lt;/em&gt;. The &lt;em&gt;server&lt;/em&gt; field consists of &lt;em&gt;sip.&lt;/em&gt; + Voximplant account + &lt;em&gt;.voximplant.com&lt;/em&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tvwLanPB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3ty91a6da9z45bsns76u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tvwLanPB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3ty91a6da9z45bsns76u.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If everything is correct, a registered user will be marked green:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QRGSb0Gu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ejvx3amigxlt1pbt8aq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QRGSb0Gu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ejvx3amigxlt1pbt8aq.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great! It's time to check if Telegram can accept...&lt;/p&gt;
&lt;h1&gt;
  
  
  ...inbound calls
&lt;/h1&gt;

&lt;p&gt;To do so, we need to open the &lt;em&gt;sip&lt;/em&gt; Voximplant application and create a JS scenario and a rule in it. The JS scenario is going to be simple: when a call from a &lt;em&gt;sip&lt;/em&gt; application user lands in the cloud, the cloud calls the second user of the same application and connect them. It looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;VoxEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AppEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CallAlerting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;

   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;VoxEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callerid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

   &lt;span class="nx"&gt;VoxEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;easyProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the scenario with the name &lt;em&gt;callUser&lt;/em&gt;. Being in the &lt;em&gt;sip&lt;/em&gt; application, switch to the &lt;em&gt;Routing&lt;/em&gt; tab to create a &lt;em&gt;call user rule&lt;/em&gt; with the following settings (pay attention to the pattern):&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RtRXB5J5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xojpyuf1v2vrppv02tag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RtRXB5J5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xojpyuf1v2vrppv02tag.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember &lt;em&gt;userbob&lt;/em&gt;, created at the very beginning? Well, you need to log in with its credentials to &lt;a href="https://phone.voximplant.com/"&gt;our webphone&lt;/a&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7kJO6XF6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yjf69cyy817ukdst26ur.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7kJO6XF6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yjf69cyy817ukdst26ur.png"&gt;&lt;/a&gt;&lt;br&gt;
Type in &lt;em&gt;usertelegram&lt;/em&gt; and click &lt;em&gt;Call&lt;/em&gt;, then you'll receive an incoming call to all your devices where Telegram is opened.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s85oFcrm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0k5gv8kcs5bkh0e8i6p0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s85oFcrm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0k5gv8kcs5bkh0e8i6p0.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Outbound Calls to Voximplant Users
&lt;/h1&gt;

&lt;p&gt;The same scenario and the rule are applicable here, there is no need to create anything else.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As mentioned before, Voximpalnt user names should be in lower case. If the name is &lt;em&gt;userBob&lt;/em&gt;, when you pass it to the @siptg softphone, it will convert it to &lt;em&gt;userbob&lt;/em&gt;, a non-existing user of your application. Thus, the call will fail.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open @siptg, send the message "userbob" to it, and the bot will show you an &lt;span&gt;incoming call interface&lt;/span&gt;. It doesn't make a lot of sense, but still.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--axVrgXlY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s7lhc7kut5ggr4jkzo50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--axVrgXlY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s7lhc7kut5ggr4jkzo50.png"&gt;&lt;/a&gt;&lt;br&gt;
Click the green button and the call will be forwarded to the webphone, where &lt;em&gt;userbob&lt;/em&gt; is logged in.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QuHqOgDr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tozpsue1vgfi84dtzpmf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QuHqOgDr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tozpsue1vgfi84dtzpmf.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Outbound Calls to Mobile Numbers
&lt;/h1&gt;

&lt;p&gt;To enable outbound calls to mobile numbers, you'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;another scenario and a rule for it,&lt;/li&gt;
&lt;li&gt;a valid callback number (Caller ID). It could be your own number that you &lt;a href="https://manage.voximplant.com/settings/caller_ids"&gt;verified in the Control panel&lt;/a&gt; or a number that is rented from Voximplant. &lt;strong&gt;IMPORTANT: test numbers can't be used for this purpose.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go to the &lt;em&gt;sip&lt;/em&gt; application and create a &lt;em&gt;callPSTN&lt;/em&gt; scenario with the following code (look at line 4 where you need to substitute your callback number):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;VoxEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AppEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CallAlerting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;

   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;VoxEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callPSTN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;real callback number&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

   &lt;span class="nx"&gt;VoxEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;easyProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, create a &lt;em&gt;call PSTN rule&lt;/em&gt; with the default pattern:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lqVLLkH9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p1vibwbksxsa9h3nmuno.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lqVLLkH9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p1vibwbksxsa9h3nmuno.png"&gt;&lt;/a&gt;&lt;br&gt;
IMPORTANT: move this new rule to the bottom of the rule list. This way, the rule will have the lowest priority and will be executed only if a rule with the &lt;code&gt;user.*&lt;/code&gt; pattern is not triggered.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uNDzo9Ma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4d0wwudtatgpp6ei0lh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uNDzo9Ma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4d0wwudtatgpp6ei0lh1.png"&gt;&lt;/a&gt;&lt;br&gt;
Ok then, now you can send a target phone number to @siptg, it shows you an incoming call interface, you click the green button, and, finally, the call goes to the target number.&lt;/p&gt;

&lt;h1&gt;
  
  
  Use the Force
&lt;/h1&gt;

&lt;p&gt;Integration with a messenger can be beneficial for a business, since it's yet another way to reach your customers, to wit, an omnichannel approach. It's also applicable if Telegram serves as your corporate messenger. In general, it comes in handy when you use Telegram and a person you want to reach out to-doesn't. As a result, you both won't be changing your communication environment as a call is initiated from the messenger and is placed to a soft/cellphone.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>integration</category>
      <category>calls</category>
    </item>
  </channel>
</rss>
