<?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: Birinder Lobana</title>
    <description>The latest articles on DEV Community by Birinder Lobana (@birinderlobana).</description>
    <link>https://dev.to/birinderlobana</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%2F849516%2Fc31a599e-4870-4d9d-a4dd-ad470b2d1081.jpg</url>
      <title>DEV Community: Birinder Lobana</title>
      <link>https://dev.to/birinderlobana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/birinderlobana"/>
    <language>en</language>
    <item>
      <title>Engage Customers with a QR Code Virtual Line-Up</title>
      <dc:creator>Birinder Lobana</dc:creator>
      <pubDate>Fri, 30 Dec 2022 20:46:01 +0000</pubDate>
      <link>https://dev.to/birinderlobana/engage-customers-with-a-qr-code-virtual-line-up-26hm</link>
      <guid>https://dev.to/birinderlobana/engage-customers-with-a-qr-code-virtual-line-up-26hm</guid>
      <description>&lt;p&gt;As a customer, there is nothing worse than waiting in a long line-up to enter a store. This is especially true during the current boxing week! With a QR code enabled virtual lineup, customers can  maintain their position while exploring the neighbouring stores. &lt;/p&gt;

&lt;p&gt;Many stores across North America have started implementing virtual lineups. However, most virtual lineups miss a huge opportunity to engage with their customers. In this article, I will showcase a QR code enabled virtual line-up implementation that allows SMS reminders while capturing customers' contact information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Here's what you will need for this workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A QR Code generation tool&lt;/li&gt;
&lt;li&gt;A landing page with a web form&lt;/li&gt;
&lt;li&gt;A CRM tool or equivalent to save customer data&lt;/li&gt;
&lt;li&gt;Ability to send SMS reminders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may choose various available packages for the workflow mentioned above. For this implementation, I will be using Openscreen's node &lt;a href="https://docs.openscreen.com/" rel="noopener noreferrer"&gt;SDK&lt;/a&gt; which provides all the necessary tools for this workflow, including the ability to send SMS messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;p&gt;Here's a high level diagram of the workflow: &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5r6fuimv3duysnr3kwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5r6fuimv3duysnr3kwa.png" alt="UML diagram of a qr code workflow"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Generate a Dynamic QR Code
&lt;/h3&gt;

&lt;p&gt;Openscreen's SDK makes it extremely straight forward to generate unique dynamic QR codes. These QR codes will generate a unique scanId upon each scan, which will be to fetch the scan data. Openscreen Dynamic QR codes provide high scanability even at a distance. Combined with a simple process to enter the line-up, stores can attract more customers. &lt;br&gt;
The intent or the destination of this QR code should be a custom landing page with a web-form for your store. Upon scanning this QR code, there will be some backend processing to determine whether a customer is already in the line-up or not. If you are a new customer, you will be directed to the landing page, otherwise, you will see your current position in the line-up. &lt;br&gt;
Here's how you can create a dynamic QR code:&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="c1"&gt;// Initiate the Openscreen node SDK &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Openscreen&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@openscreen/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;config&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;os&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Openscreen&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OS_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OS_API_SECRET&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Obtain ProjectID from Openscreen Dashboard&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;projectId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR PROJECT ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 

  &lt;span class="c1"&gt;// Create an asset for a new listing sign being hosted for 123 Main Street &lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Store Lineup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Store Line up For Outlet Mall&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;qrCodes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
      &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.my-qrcode-app.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;intentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DYNAMIC_REDIRECT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}]&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Returns a scannable QR Code image in png format&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;qrCodeId&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;asset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;qrCodes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&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;qrCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;qrCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;qrCodeId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;saveQrImageDataToFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;qrCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-dynamic-qr-code.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// View the new asset that you have created &lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Asset:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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;h3&gt;
  
  
  Create a Web Form
&lt;/h3&gt;

&lt;p&gt;The purpose of this form is to capture only the most essential information from the customer - keep it short and simple. Remember to capture the customer's consent to receive future emails. &lt;/p&gt;

&lt;p&gt;After the form is created, you will need to create a UI to display the current spot in the lineup. Stores can use this opportunity to advertise their best selling items on this landing page. &lt;/p&gt;

&lt;h3&gt;
  
  
  Create Your Virtual Lineup Backend
&lt;/h3&gt;

&lt;p&gt;The backend for your virtual lineup involves three major steps - storing the contact data from the front end, storing and retrieving current position and the ability to send SMS reminders if customers reach position less than 5. Using Openscreen's SDK, you can create a contact based on the customer input, and send SMS messages to that contact. &lt;/p&gt;

&lt;p&gt;Here's how you can create an Openscreen contact and send SMS using a template:&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="c1"&gt;// Initiate the Openscreen node SDK and include the project ID that you recieved using the Openscreen dashboard &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Openscreen&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@openscreen/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;config&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;os&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Openscreen&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OS_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OS_API_SECRET&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Obtain projectId from the Openscreen Dashboard&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;projectId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Capture scanId from the QR code scan&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scanId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

  &lt;span class="c1"&gt;// Create a new contact &lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;contact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;contacts&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   
    &lt;span class="nx"&gt;cellPhone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;consent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.openscreen.com/legal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="na"&gt;consentedAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
      &lt;span class="na"&gt;consentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SMS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="c1"&gt;// Obtain contactId from the response&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;contactId&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Create an SMS template&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;smsTemplate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;smsTemplates&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;smsTemplateName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Position&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are now at position 5, please make your way to the {{asset.name}} now.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="c1"&gt;// Send SMS to contact&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sendSMS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scanId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;sms&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;contactId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;contactId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;smsTemplateName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Position&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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;h2&gt;
  
  
  Increase Engagement and Satisfaction
&lt;/h2&gt;

&lt;p&gt;With a simple implementation of a QR code line-up, you are able to  to engage customers, increase customer satisfaction and potentially attract more customers to your store. QR code line-ups also make your store stand-out. With the high scanability of QR codes, you can even attract the physical line-ups of your neighbouring stores! It's truly a win-win situation!&lt;/p&gt;

&lt;p&gt;If this implementation is of interest to you, feel free to &lt;a href="https://www.openscreen.com/contact-us" rel="noopener noreferrer"&gt;contact&lt;/a&gt; Openscreen for similar customized solutions.&lt;/p&gt;

&lt;p&gt;Read More: &lt;a href="https://dev.to/birinderlobana/5-best-practices-to-use-qr-more-codes-effectively-m5f"&gt;Use QR Codes More Efficiently&lt;/a&gt;, &lt;a href="https://dev.to/birinderlobana/scan-to-cart-qr-codes-2gdc"&gt;Scan to Cart QR Codes&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How NuvoLinQ Automated their Fulfilment and Customer Support Processes using Openscreen Track</title>
      <dc:creator>Birinder Lobana</dc:creator>
      <pubDate>Wed, 14 Dec 2022 20:54:41 +0000</pubDate>
      <link>https://dev.to/birinderlobana/how-nuvolinq-automated-their-fulfilment-and-customer-support-processes-using-openscreen-track-2f0k</link>
      <guid>https://dev.to/birinderlobana/how-nuvolinq-automated-their-fulfilment-and-customer-support-processes-using-openscreen-track-2f0k</guid>
      <description>&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.nuvolinq.com/"&gt;NuvoLinQ&lt;/a&gt; supplies and supports routers and sim cards that provide internet services for IoT devices.  With connectivity in over 175 countries, they provide essential connections to businesses whose network access is mission critical to their operations. They needed a solution that could simplify fulfilment and digitize support for their devices in the field.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution - Openscreen Track
&lt;/h2&gt;

&lt;p&gt;Leveraging &lt;a href="https://openscreen.com/openscreen-track"&gt;Openscreen Track's&lt;/a&gt; dynamic QR Codes, and its asset and contact management capabilities, NuvoLinQ launched ScanLinQ to simplify router fulfilment and digitize customer service.  &lt;/p&gt;

&lt;p&gt;With Openscreen Track, Nuvolinq was able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a unique, trackable QR code for every router and sim&lt;/li&gt;
&lt;li&gt;Retrieve the last known status information for routers&lt;/li&gt;
&lt;li&gt;Easily identify offline routers and send details to their cloud management system&lt;/li&gt;
&lt;li&gt;Have customers submit a support ticket with only a camera scan&lt;/li&gt;
&lt;li&gt;Allow technicians to diagnose and report router details to the support team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jTGRg2d2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grs4w6muhgdd6wmbenfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jTGRg2d2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grs4w6muhgdd6wmbenfz.png" alt="Image description" width="544" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Results
&lt;/h2&gt;

&lt;p&gt;NuvoLinQ was able to transform their fulfilment and customer support experience by configuring simple yet sophisticated workflows leveraging Openscreen Track.  The resulting solution allowed NuvoLinQ to decrease response time, decrease downtime and increase customer satisfaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Openscreen Track
&lt;/h2&gt;

&lt;p&gt;Openscreen Track leverages dynamic QR Codes, asset management, scan capture and contact management to track people and products as they move through your supply chain. NuvoLinQ is one of many use-cases of Openscreen Track. For more information, visit &lt;a href="https://www.openscreen.com"&gt;www.openscreen.com&lt;/a&gt; or &lt;a href="https://www.openscreen.com/contact-us"&gt;contact us&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>qrcode</category>
      <category>productivity</category>
      <category>programming</category>
      <category>cloud</category>
    </item>
    <item>
      <title>5 Best Practices to Use QR More Codes Effectively</title>
      <dc:creator>Birinder Lobana</dc:creator>
      <pubDate>Tue, 01 Nov 2022 14:39:48 +0000</pubDate>
      <link>https://dev.to/birinderlobana/5-best-practices-to-use-qr-more-codes-effectively-m5f</link>
      <guid>https://dev.to/birinderlobana/5-best-practices-to-use-qr-more-codes-effectively-m5f</guid>
      <description>&lt;p&gt;QR codes offer the unique ability to digitize real-world advertisements and engagements. The COVID-19 pandemic showed us how QR codes can be a quick and effective way to perform several digital tasks.&lt;/p&gt;

&lt;p&gt;While QR codes are being used in several advertisement campaigns, they are often poorly executed. Here are 5 ways you can use QR codes more effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Dynamic QR Codes
&lt;/h2&gt;

&lt;p&gt;QR codes may all look similar in their overall shape and design, but there are two distinct types of QR codes - static and dynamic. Static QR codes simply direct a user to the encapsulated data. Once a static QR code has been created, it cannot be changed.&lt;/p&gt;

&lt;p&gt;Dynamic QR codes have several advantages. The data they store can be updated at any time without having to re-create (or re-print) the QR code. Upon scanning, the user is first directed to a cloud server, then redirected to the (up to date) destination of the QR code.&lt;/p&gt;

&lt;p&gt;We often see static QR codes being used for restaurant menus; However, this use-case can be enhanced manifold if unique dynamic QR codes are used instead. A unique dynamic QR code could be added to each table, which can then be used to track orders and even pay the bill.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JEhGVb2K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hcmd8xbnxd5ce4fy0cau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JEhGVb2K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hcmd8xbnxd5ce4fy0cau.png" alt="Person scanning QR code at a restaurant for the menu" width="468" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.openscreen.com/openscreen-engage"&gt;Openscreen's&lt;/a&gt; QR code engagement solutions bring dynamic QR codes to the next level by capturing the scanning device's non-identifying data. This includes valuable information such as ISP-based location, IP address, device kind, device model and much more.&lt;/p&gt;

&lt;p&gt;Over time, this data can help you make informed decisions for your future marketing campaigns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ensure the QR Code Landing Page is Mobile-Friendly
&lt;/h2&gt;

&lt;p&gt;Since QR codes will be scanned by smartphones, it is crucial that you have a mobile friendly landing page. For the best user experience, any other links or CTA's on the landing page should also be mobile friendly. &lt;/p&gt;

&lt;p&gt;Keep in mind that iPhones, Android phones and Samsung phones, all use a different default mobile browser (safari, chrome and Samsung browser respectively), which may each render your landing page differently.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Place QR Codes in an Easy to Scan Environment
&lt;/h2&gt;

&lt;p&gt;While the operation of a QR code is instantaneous, it may take several seconds for a customer to scan your QR codes. &lt;/p&gt;

&lt;p&gt;For this reason, QR codes should not be placed on moving vehicles, changing billboards or TV commercials.&lt;/p&gt;

&lt;p&gt;The ideal location for QR codes is in an area with high pedestrian traffic. Additionally, QR codes should be placed in a relatively central position of your banner, at about eye level from the ground.&lt;/p&gt;

&lt;p&gt;In the picture below, the QR codes are placed in an inconvenient spot. This should be avoided whenever possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cVs0Ylgf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gqnzwbtuq05xtq4tanf8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cVs0Ylgf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gqnzwbtuq05xtq4tanf8.png" alt="Image displaying two banners with QR codes on the bottom-right corner" width="468" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Consider the Size and Scan-ability of the QR Code
&lt;/h2&gt;

&lt;p&gt;The size of the QR code is another key aspect in marketing campaigns. A QR code placed on a banner outdoors should be of a relatively large size to ensure scan-ability from a distance.&lt;/p&gt;

&lt;p&gt;A QR code on a curved surface, such as a wine bottle, should be as small as possible to allow high scan-ability.&lt;br&gt;
QR codes also have an error correction feature built-in. Different levels of error correction can determine how "durable" and scannable a QR code is. Read more about error correction levels &lt;a href="https://www.qrcode.com/en/about/error_correction.html#:~:text=QR%20Code%20has%20error%20correction,of%20data%20QR%20Code%20size."&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create Contacts from Your Interested Audience
&lt;/h2&gt;

&lt;p&gt;Having captured the interest of your customer and getting them to scan your QR code is only a partial victory in a marketing campaign.&lt;/p&gt;

&lt;p&gt;To make the most out of the campaign, you should prompt your audience to be added to your newsletter. You can do so with the help of an enticing promotion/coupon which would be available to customers only after providing their contact information. You can then export this information to your CRM platform and start populating a list of consented contacts. An application like &lt;a href="https://www.openscreen.com"&gt;Openscreen&lt;/a&gt; can help you curate and obtain contact information through QR codes and organizes the list in a seamless visual dashboard with easy access to your data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;One of the most important aspects of any advertising campaigns is to simply know its success rate. The above 5 practices will ensure that every single QR code campaign will generate valuable data and will have a measurable success rate. Additionally, you will be able to concentrate your resources on your most (and least) successful advertising locations.&lt;/p&gt;

&lt;p&gt;To allow you to create your first dynamic QR codes for your advertising campaigns, I invite you to check out &lt;a href="https://www.openscreen.com"&gt;Openscreen&lt;/a&gt;. It is a one-stop, developer-first platform that offers all the tools to run a successful QR code campaign.&lt;/p&gt;

&lt;p&gt;Openscreen also provides a native ability to store &lt;a href="https://docs.openscreen.com/adding-contacts-to-your-project"&gt;Customer Contact&lt;/a&gt; information from QR code scans. The data you collect from your QR code campaigns is available for you to visualize in the Openscreen dashboard.&lt;/p&gt;

&lt;p&gt;For tailored solutions, feel free to &lt;a href="https://www.openscreen.com/contact-us"&gt;contact&lt;/a&gt; Openscreen.&lt;/p&gt;

</description>
      <category>qrcode</category>
      <category>tutorial</category>
      <category>startup</category>
      <category>datascience</category>
    </item>
    <item>
      <title>QR Code Engagement Workflows Using a Python SDK</title>
      <dc:creator>Birinder Lobana</dc:creator>
      <pubDate>Mon, 27 Jun 2022 17:38:27 +0000</pubDate>
      <link>https://dev.to/birinderlobana/qr-code-engagement-workflows-using-a-python-sdk-5e1n</link>
      <guid>https://dev.to/birinderlobana/qr-code-engagement-workflows-using-a-python-sdk-5e1n</guid>
      <description>&lt;p&gt;Since the beginning of the pandemic, we have seen QR Codes pop-up virtually everywhere. In fact, there has been a 94% &lt;a href="https://www.bluebite.com/nfc/qr-code-usage-statistics" rel="noopener noreferrer"&gt;growth&lt;/a&gt; in QR code usage since 2018!&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://www.emarketer.com/content/brands-leverage-qr-codes" rel="noopener noreferrer"&gt;eMarketer&lt;/a&gt;, the number of US smartphone users scanning QR codes will increase from 83.4 million in 2022 to a projected 99.5 million by 2025. This is an excellent opportunity for customer engagement agencies to adopt QR Code engagement solutions. &lt;/p&gt;

&lt;h2&gt;
  
  
  Openscreen's QR Engage
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.openscreen.com/" rel="noopener noreferrer"&gt;Openscreen&lt;/a&gt; is an end-to-end engagement and insights platform to drive revenue and client loyalty. Openscreen offers a comprehensive python &lt;a href="https://docs.openscreen.com/overview" rel="noopener noreferrer"&gt;SDK&lt;/a&gt; which can help you create powerful customer engagement workflows. &lt;/p&gt;

&lt;p&gt;In the example below, we will create a Dynamic QR code which would lead to a web-form, and enter submissions into a draw. A random winner is chosen and an SMS is sent to the winner. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgj2ng71j4ok68esriyyo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgj2ng71j4ok68esriyyo.jpg" alt="Openscreen's QR Engage at the Gatineau Olympiques Minor League Hockey game"&gt;&lt;/a&gt;&lt;br&gt;
Here's what you will need for this workflow: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A free Openscreen &lt;a href="https://openscreen.com/signup" rel="noopener noreferrer"&gt;account&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.python.org/downloads/release/python-3100/" rel="noopener noreferrer"&gt;Python 3.10+&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Openscreen's Python &lt;a href="https://docs.openscreen.com/overview" rel="noopener noreferrer"&gt;SDK&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A custom webform to capture customer's contact information&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Environment Set-up
&lt;/h2&gt;

&lt;p&gt;Before we begin implementing our workflow, we will store the following identifiers in a .env file. They are available on your Openscreen Dashboard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ACCOUNT_ID='xxxxxxxxxxxxxxxxxxxxxx'
OS_ACCESS_KEY='xxxxxxxxxxxxxxxxxxxxxx'
OS_ACCESS_SECRET='xxxxxxxxxxxxxxxxxxxxxx'
PROJECT_ID='xxxxxxxxxxxxxxxxxxxxxx'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The following code will authenticate your application:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h2&gt;
  
  
  Create A Dynamic QR Code
&lt;/h2&gt;

&lt;p&gt;Openscreen's python SDK uses several core objects to ensure the scalability of QR code enabled workflows. &lt;/p&gt;

&lt;p&gt;An Asset is a core object that stores information about a physical or a digital object. The Asset object represents the QR Code. One Asset can have several QR codes associated with it - think of a lottery ticket (the asset) with multiple QR Codes.&lt;/p&gt;

&lt;p&gt;Creating an Asset and associating a dynamic QR code can be done in a single call. In the code below, I am creating a billboard (Asset) for a real-estate listing. A person scanning this QR code should be led to your web-form requesting information about the customer. After the form is submitted, you can display the information about the listing.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Capturing QR Code Scans
&lt;/h2&gt;

&lt;p&gt;One unique advantage of using &lt;a href="https://www.openscreen.com/openscreen-engage" rel="noopener noreferrer"&gt;Dynamic QR Codes&lt;/a&gt; is that they are traceable. Openscreen's SDK generates a scan object, identified by a scanId each time a dynamic QR is scanned. Additionally, this scanId can be appended as a query string parameter to the destination URL of the QR code. This allows us to create workflows surrounding a single QR code scan!&lt;/p&gt;

&lt;p&gt;The following flag sets the scanId in the query string parameter of the QR code destination URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dynamic_redirect_type: 'SCAN_ID_IN_QUERY_STRING_PARAMETER'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Creating a Contact
&lt;/h2&gt;

&lt;p&gt;Once the QR code is scanned, a scan object is generated, while the user is led to your custom web form. After the user submits the form, your application should fetch the user-details and the scanId from the URL. This will allow you to create a contact against the scanId:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Note: Openscreen requires contacts to have a consent before you can communicate with the contact. &lt;/p&gt;

&lt;p&gt;Be sure to store this scanId which was used to create this contact. In the above code, I am storing the scanId as one of the custom attributes in the contact object.&lt;/p&gt;

&lt;p&gt;This is the extent of your campaign, where you are able to capture consented customer contacts. You can choose to export these contacts to a CRM tool, or to a CSV file. &lt;/p&gt;

&lt;h2&gt;
  
  
  Send SMS
&lt;/h2&gt;

&lt;p&gt;To choose a winner of your campaign, you can find a random contact from your list of contacts. You can fetch all your contacts in this project by calling the &lt;a href="https://docs.openscreen-dev.com/library/contact#get_contacts_by_account_id" rel="noopener noreferrer"&gt;&lt;code&gt;GetContactsByProjectId&lt;/code&gt;&lt;/a&gt; function.  In order to send SMS to this contact, you will need to fetch the scanId. In our case, it is available as one of the custom attributes: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The above workflow is an excellent example of how QR code enabled solutions can boost customer engagement. In this case, there was a prize incentive, but the model can be reused to showcase new products while providing unique coupon codes, communicate about upcoming events and incentivize ticket purchases, and much more. At the end of the campaigns, you receive a list of consented customer contacts for your future campaigns. &lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://dev.to/birinderlobana/how-to-add-crm-to-your-qr-code-application-2nmo"&gt;How to Add CRM to Your QR Code Application&lt;/a&gt;, &lt;a href="https://dev.to/birinderlobana/scan-to-cart-qr-codes-2gdc"&gt;Scan to Cart QR Codes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>engagement</category>
      <category>python</category>
      <category>qrcode</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Scan to Cart QR Codes</title>
      <dc:creator>Birinder Lobana</dc:creator>
      <pubDate>Tue, 14 Jun 2022 16:50:50 +0000</pubDate>
      <link>https://dev.to/birinderlobana/scan-to-cart-qr-codes-2gdc</link>
      <guid>https://dev.to/birinderlobana/scan-to-cart-qr-codes-2gdc</guid>
      <description>&lt;p&gt;It is difficult to believe how disruptive the pandemic has been. Innovation in the field of contactless technologies is a direct outcome of the pandemic. Being mobile-friendly, QR codes have become the primary tool for contactless applications.&lt;/p&gt;

&lt;p&gt;QR codes are being used for a variety of use-cases, and with more of the population being aware of QR codes usage, they can now be used to their true potential. &lt;/p&gt;

&lt;p&gt;Here's one way that Brands can utilize QR codes to enhance product knowledge and potentially increase conversion rates.&lt;/p&gt;

&lt;h2&gt;
  
  
  QR Code for Scanning Items to Shopping Cart
&lt;/h2&gt;

&lt;p&gt;A 'Scan-to-Cart' QR Code simply gives the ability to add an item to a retailer's shopping cart. The process should be a single-step procedure without requiring to sign-in.&lt;/p&gt;

&lt;p&gt;Dynamic QR Codes enhance this workflow since they are trackable and capture valuable data from each scan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqxe7hp89gvt5lrpf6dj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqxe7hp89gvt5lrpf6dj.jpg" alt="Items sold out due to supply-chain shortage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are several use-cases where such a QR code can be used:&lt;/p&gt;

&lt;h3&gt;
  
  
  Scan to Cart QR Codes on Promotional Flyers
&lt;/h3&gt;

&lt;p&gt;I am sure you see a pile of promotional flyers in your mail on a regular basis. By using scan-to-cart QR codes next to these items, brands can enhance shopping experience and potentially increase conversion. Additionally, brands can incentivize scanning the QR codes by offering extra discounts for scanned items.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfrruf0ewehqsr38ldux.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfrruf0ewehqsr38ldux.jpg" alt="Missed opportunity in promotional flyers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More importantly, brands can track all the flyers that captured a scan, allowing them to know whether a flyer was seen or not. &lt;/p&gt;

&lt;p&gt;Combined with unique QR codes on flyers for each postal code, brands can analyze several data points, such as, frequently scanned items, areas with high number of 'successful' flyers,  density of iPhone vs Android users, and much more!&lt;/p&gt;

&lt;h3&gt;
  
  
  Scan to Cart QR Codes for In-Store Items
&lt;/h3&gt;

&lt;p&gt;Scan to cart QR codes can be used to shop for highly popular items. Imagine a clothing store which would only allow customers to try-on clothes, and all purchase orders must be  made online. This could be made easier by adding Scan to cart QR codes near the display items. &lt;/p&gt;

&lt;p&gt;This would allow brands to scale down the size of their stores, reducing costs and allow maintaining a larger stock in their warehouses.&lt;/p&gt;

&lt;p&gt;Similarly, brands could display QR codes for outfits on mannequins, allowing users to quickly purchase a complete outfit.&lt;/p&gt;

&lt;p&gt;This would be extremely useful at a furniture store like &lt;a href="https://www.ikea.com/" rel="noopener noreferrer"&gt;Ikea&lt;/a&gt;, where you could simply scan a QR code near a display furniture item and add all the required pieces for that configuration to your shopping cart.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scan to Cart QR Codes for 'Sold-Out' Items
&lt;/h3&gt;

&lt;p&gt;If you are at a store and your favourite item is sold out in-store, a Scan-to-Cart QR code might just be what you need. The purpose of this QR code is to add the exact item to your online shopping cart, if it is available online. If not, the dynamic QR code can programatically direct to a webform to notify customers when the item is available. &lt;/p&gt;

&lt;p&gt;As a side benefit, you will be able to capture customers' contact information and maintain future communications. &lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;p&gt;Generating dynamic QR codes is the key ability needed for the above examples. The destination or the intent of these QR codes need to change based on pre-defined conditions. &lt;/p&gt;

&lt;p&gt;&lt;a href="//www.openscreen.com"&gt;Openscreen’s&lt;/a&gt; comprehensive QR code &lt;a href="//docs.openscreen.com/overview"&gt;SDK&lt;/a&gt; makes it easy to generate dynamic QR codes required for the above examples. You can also create your own workflows which can be highly valuable for innovative customer engagement and tracking assets, while capturing customer contacts. &lt;/p&gt;

&lt;p&gt;Using Openscreen's SDK, the following code will generate a Dynamic QR Code:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;See a list of helpful public gists &lt;a href="https://gist.github.com/birinder-lobana" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I hope you see the potential of using QR code &lt;a href="https://www.openscreen.com/contact-us" rel="noopener noreferrer"&gt;solutions&lt;/a&gt; in the advertising and customer engagement industries. It only takes a few lines of code to create a QR code workflow which can help gather valuable data for brands while creating seamless customer experiences. &lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://medium.com/@blobana/engage-customers-and-prevent-counterfeiting-with-this-simple-hack-6b45257d8d9" rel="noopener noreferrer"&gt;Engage Customers and Prevent Counterfeiting with this Simple Hack&lt;/a&gt;&lt;/p&gt;

</description>
      <category>qrcode</category>
      <category>startup</category>
      <category>writing</category>
      <category>customerengagement</category>
    </item>
    <item>
      <title>How to Use Dynamic Redirects to Improve Your QR Code Campaigns</title>
      <dc:creator>Birinder Lobana</dc:creator>
      <pubDate>Fri, 13 May 2022 17:23:03 +0000</pubDate>
      <link>https://dev.to/birinderlobana/how-to-use-dynamic-redirects-to-improve-your-qr-code-campaigns-3ao6</link>
      <guid>https://dev.to/birinderlobana/how-to-use-dynamic-redirects-to-improve-your-qr-code-campaigns-3ao6</guid>
      <description>&lt;p&gt;QR Codes or Quick Response codes have become increasingly  popular since the pandemic. As per a &lt;a href="https://scanova.io/blog/qr-code-statistics/"&gt;report&lt;/a&gt; by Gartner, 80% of the order, checkout, and payment services will become contactless by 2024. In this article, I will cover briefly about how QR codes work, types of QR codes and how certain re-direct types can help gather more data-points for your QR code campaigns. In the examples shown below, I will refer to &lt;a href="https://www.openscreen.com"&gt;Openscreen&lt;/a&gt; as they offer a comprehensive QR code &lt;a href="https://docs.openscreen.com/overview"&gt;SDK&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  How do QR Codes Work?
&lt;/h2&gt;

&lt;p&gt;QR codes work by encapsulating human readable data into a unique pattern. These QR codes are printable and help to digitize the real world. There are broadly two types of QR Codes:&lt;/p&gt;

&lt;h2&gt;
  
  
  Static QR Codes
&lt;/h2&gt;

&lt;p&gt;These are the most basic QR codes which simply direct the user to the destination or intent. For the purpose of smart interactions, static QR codes should not be used. They should only really be used in workflows involving a 'non-smart' scanner expecting a plain text output, example a UPC. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e-AfKkpV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ete1eq0oyqo2zyvqp6f2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e-AfKkpV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ete1eq0oyqo2zyvqp6f2.jpg" alt="Image description" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic QR Codes
&lt;/h2&gt;

&lt;p&gt;Dynamic QR Codes direct user to the intent using a two-step redirect. Upon scan, the QR code first directs to a cloud server which captures scan data from the scanning device including location, IP address, device kind, device model and much more. An example of Openscreen's scan object can be seen below&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Additionally, dynamic QR codes can be tracked, updated, and modified over their lifecycle. They can redirect a user to a different location based on the status of a QR Code, who the scanner is, and much more. You can now guess the opportunity that static QR codes miss! Sadly, a vast majority of QR codes in North America &lt;a href="https://blog.openscreen.com/why-qr-codes-underachieve/"&gt;are static&lt;/a&gt;.

&lt;h2&gt;
  
  
  Types of Dynamic Redirects
&lt;/h2&gt;

&lt;p&gt;Each scan from Openscreen's Dynamic QR codes is identified by a unique &lt;code&gt;scanId&lt;/code&gt;. Often this &lt;code&gt;scanId&lt;/code&gt; is the 'main player' for any QR code related workflows. Openscreen offers the following redirect types which help identify information regarding the QR codes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SCAN_ID_IN_PATHPARAMETER&lt;/code&gt;: The user is redirected to the QR Code intent and a Scan Object is captured. The Scan ID will be added to the URL as a path parameter. This means that when a user scans the QR Code, the scanId will be appended to the intent (URL) that the scanner is directed to upon scan. For example, if the intent of the web application that you created has the URL '&lt;a href="https://www.myrealestatelisting.com"&gt;https://www.myrealestatelisting.com&lt;/a&gt;'. The user will be taken to a final destination of '&lt;a href="https://www.myrealestatelisting.com/scanId"&gt;https://www.myrealestatelisting.com/scanId&lt;/a&gt;'. Example: '&lt;a href="https://www.myrealestatelisting.com/c262c53e-3ec0-4f48-823e-de5539dd85dc"&gt;https://www.myrealestatelisting.com/c262c53e-3ec0-4f48-823e-de5539dd85dc&lt;/a&gt;'. Choosing this QR Code parameter will allow your application to understand which QR Code was scanned when taking the user to your web application.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SCAN_ID_IN_QUERY_STRING_PARAMETER&lt;/code&gt;: In this case, the &lt;code&gt;scanId&lt;/code&gt; will be added to the URL as a query string parameter. For example, if the intent of the web application that you created has the URL '&lt;a href="https://www.myrealestatelisting.com"&gt;https://www.myrealestatelisting.com&lt;/a&gt;'. The user will be taken to a final destination of '&lt;a href="https://www.myrealestatelisting.com/?scanId"&gt;https://www.myrealestatelisting.com/?scanId&lt;/a&gt;'. Example: '&lt;a href="https://www.myrealestatelisting.com/?c262c53e-3ec0-4f48-823e-de5539dd85dc"&gt;https://www.myrealestatelisting.com/?c262c53e-3ec0-4f48-823e-de5539dd85dc&lt;/a&gt;'. Choosing this QR Code parameter will allow your application to understand which QR Code was scanned when taking the user to your web application.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NO_SCAN_ID&lt;/code&gt;: This is the default value where the user is redirected to the QR Code intent and a Scan Object is generated. The &lt;code&gt;scanId&lt;/code&gt; is not used in this redirect. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Knowing which QR Code was scanned will allow you to create &lt;a href="https://openscreen.com/openscreen-engage"&gt;asset &amp;amp; contact&lt;/a&gt; relationships, dynamically update your QR Code, and much more. It is especially applicable for QR code enabled ad-campaigns, real-estate listings and &lt;a href="https://blog.openscreen.com/direct-mail-magic-with-qr-codes/"&gt;direct mail&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Do these re-direct types help your QR code workflow? Share in the comments below!&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://dev.to/birinderlobana/how-to-add-crm-to-your-qr-code-application-2nmo"&gt;How to integrate with a CRM tool in your QR Code campaign&lt;/a&gt; &lt;/p&gt;

</description>
      <category>qrcode</category>
      <category>node</category>
      <category>startup</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Add CRM to Your QR Code Application</title>
      <dc:creator>Birinder Lobana</dc:creator>
      <pubDate>Wed, 20 Apr 2022 21:46:09 +0000</pubDate>
      <link>https://dev.to/birinderlobana/how-to-add-crm-to-your-qr-code-application-2nmo</link>
      <guid>https://dev.to/birinderlobana/how-to-add-crm-to-your-qr-code-application-2nmo</guid>
      <description>&lt;p&gt;Since the beginning of the pandemic, we have seen QR Codes pop-up virtually everywhere. In fact, there has been a &lt;a href="https://www.bluebite.com/nfc/qr-code-usage-statistics"&gt;94% growth&lt;/a&gt; in QR code usage since 2018! However, QR Codes are still vastly under-utilized. In this article, I will cover a powerful use-case which can help you gather contact data using Openscreen's dynamic QR Code generator &lt;a href="https://docs.openscreen.com/overview/"&gt;SDK&lt;/a&gt; and a customer relationship management (&lt;a href="https://www.klaviyo.com/"&gt;CRM&lt;/a&gt;) tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use QR Codes?
&lt;/h2&gt;

&lt;p&gt;Interactions with smart products has increased by 81% since 2018, and &lt;a href="https://www.openscreen.com/"&gt;dynamic QR Codes&lt;/a&gt; are a great way to digitize your real-world advertisements. Additionally, you can gather valuable and &lt;a href="https://docs.openscreen.com/retrieving-scans"&gt;rich data&lt;/a&gt; from each QR code scan. Openscreen's SDK allows you to use the scan data to create &lt;a href="https://docs.openscreen.com/adding-contacts-to-your-project"&gt;contacts&lt;/a&gt;, which can be used for future campaigns - more on this later! &lt;/p&gt;

&lt;h2&gt;
  
  
  Using a QR Code SDK
&lt;/h2&gt;

&lt;p&gt;In the examples below, I will cover how to use Openscreen's SDK to create a QR Code, capture scan data and connect to a CRM tool.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nodejs.org/en/"&gt;node.js&lt;/a&gt; and &lt;a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm"&gt;npm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/dotenv"&gt;dotenv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/axios"&gt;Axios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;An Openscreen &lt;a href="https://app.openscreen.com/signup"&gt;account&lt;/a&gt; (free)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;After installing node.js and npm, navigate to your desired directory and use the command below to install Openscreen's &lt;a href="https://docs.openscreen.com/getting-started"&gt;SDK&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i @openscreen/sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can now install the other dependencies as below:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i axios
npm i dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Environment Details
&lt;/h3&gt;

&lt;p&gt;Create a new folder for your project. Within your folder create a &lt;code&gt;.env&lt;/code&gt; file to store your &lt;code&gt;OS_API_KEY&lt;/code&gt; and &lt;code&gt;OS_API_SECRET&lt;/code&gt;. You can find these details in your Openscreen &lt;a href="https://openscreen.com/signin"&gt;dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Generate Your First Smart QR Code
&lt;/h3&gt;

&lt;p&gt;The code below will return a smart QR Code image in your project directory. An advantage to using dynamic QR codes is that the destination URL for this QR code can be updated at any point using the &lt;a href="https://docs.openscreen.com/library/qrCode#update_qr_code"&gt;&lt;code&gt;update()&lt;/code&gt;&lt;/a&gt; method. &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;This QR Code should now be directed to a web form where the scanner's contact data can be captured. Upon submitting the form, two API calls are triggered - creating a contact for Openscreen and adding the contact in the CRM profile list: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
You may find the complete code &lt;a href="https://gist.github.com/birinder-lobana/42786606dda1272b6d13eb2898a272aa"&gt;here&lt;/a&gt;. &lt;br&gt;
By creating a contact with Openscreen, you will have access to a database of contacts linked to your QR Code projects. Additionally, this unlocks features such as a direct 'scan to SMS' which can send pre-defined SMS templates to a contact upon successful scan. 

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using a few lines of code, we were able to generate a dynamic QR code linked to a web form, allowing us to populate contacts to a CRM tool. We additionally saved these contacts in Openscreen, which allows us to run future QR code related campaigns with the same audience. &lt;/p&gt;

&lt;p&gt;See other examples and use-cases in the Openscreen Code-locker github &lt;a href="https://github.com/Openscreen-Inc/code-locker"&gt;repository&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Do you know of an interesting use-case for QR codes? Share below!&lt;/p&gt;

</description>
      <category>node</category>
      <category>tutorial</category>
      <category>qrcode</category>
      <category>npm</category>
    </item>
  </channel>
</rss>
