<?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: Janeth Graziani</title>
    <description>The latest articles on DEV Community by Janeth Graziani (@janeth).</description>
    <link>https://dev.to/janeth</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%2F73023%2Fd57a8701-9543-4dd9-9a6e-9ddf6d50e798.jpeg</url>
      <title>DEV Community: Janeth Graziani</title>
      <link>https://dev.to/janeth</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/janeth"/>
    <language>en</language>
    <item>
      <title>Exploring Data Warehousing and ELT Tools</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Tue, 07 May 2024 16:58:52 +0000</pubDate>
      <link>https://dev.to/janeth/what-is-data-warehousing-4a1k</link>
      <guid>https://dev.to/janeth/what-is-data-warehousing-4a1k</guid>
      <description>&lt;h2&gt;
  
  
  What is a Data Warehouse?
&lt;/h2&gt;

&lt;p&gt;Think of data warehouses or data lakes similar to Amazon warehouses where finished goods are sent for distribution. In the case of data, warehouses are a centralized location where company data from different department databases are sent and stored for analysis via business intelligence tools (BI). These BI tools then collect, analyze, and visualize data from various sources, and provide valuable insights to decision-makers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Data Warehousing
&lt;/h2&gt;

&lt;p&gt;The process of “data warehousing” involves collecting and sending data into one centralized location. Data is taken from different department databases or source systems via the ELT process (Extraction, Loading, Transformation) and sent into a staging environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftd6jspus42n7twepjd8v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftd6jspus42n7twepjd8v.png" alt="Data Lifecycle Diagram" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Data Warehousing Tools
&lt;/h1&gt;

&lt;p&gt;There are a variety of tools that assist in the Extract and Load process including &lt;a href="https://www.youtube.com/watch?v=OyhWNIRUehE&amp;amp;t=7s,%20AWS%20Glue"&gt;Airbyte&lt;/a&gt;, Data Factory amongst others. Airbyte, a popular data integration tool, offers source connectors that enable the retrieval of data from popular APIs, databases, and SaaS platforms directly into data warehouses and lakes, including Teradata VantageCloud warehouses and lakehouses. &lt;/p&gt;

&lt;p&gt;Airbyte Cloud, the hosted version, streamlines data ingestion with its fully managed service, eliminating the need for infrastructure setup and management.&lt;/p&gt;

&lt;p&gt;Once the data is loaded into Teradata's warehouse or lakehouse staging environment, the transformation process begins to extract valuable and actionable insights using Teradata's ClearScape Analytics™ functions. These functions simplify data exploration, feature engineering, model training, path analysis, and more.&lt;/p&gt;

&lt;p&gt;Extraction Tools like Airbyte also help maintain data consistency between source systems and the warehouse by continuously monitoring for updates or modifications.&lt;/p&gt;

&lt;h1&gt;
  
  
  Learn more about Airbyte Cloud and the Teradata Vantage Connector
&lt;/h1&gt;

&lt;p&gt;Read about it &lt;a href="http://ms.spr.ly/6057Y3flv"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watch the video overview:&lt;br&gt;
&lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=OyhWNIRUehE&amp;amp;t=7s&amp;lt;br&amp;gt;%0A"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2zm3f9v4l6v5n6t90lq.png" alt="Teradata Vantage Connector on Airbyte Cloud" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>dataengineering</category>
      <category>elt</category>
      <category>airbyte</category>
    </item>
    <item>
      <title>How to Build a Sustainable Developer Community: A 5-Phase Framework</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Wed, 05 Apr 2023 13:53:23 +0000</pubDate>
      <link>https://dev.to/janeth/how-to-build-a-sustainable-developer-community-a-5-phase-framework-gd0</link>
      <guid>https://dev.to/janeth/how-to-build-a-sustainable-developer-community-a-5-phase-framework-gd0</guid>
      <description>&lt;p&gt;Authors: &lt;a href="https://www.linkedin.com/in/janethledezma/"&gt;Janeth Graziani&lt;/a&gt; &amp;amp; &lt;a href="https://www.linkedin.com/in/jacoblee93/"&gt;Jacob Lee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building a developer community can have numerous benefits for your company, from reducing support and onboarding costs to increasing adoption and generating valuable feedback. In this post, we’ll share our approach to engaging and growing a developer community in a sustainable way, based on a 5-phase framework. Whether you’re starting from scratch or looking to improve an existing community, we hope our insights will empower your team to scale your community in a sustainable way.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobsk8pqv04j28kiu3xwy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobsk8pqv04j28kiu3xwy.png" alt="Discord community with 40k+ members" width="800" height="591"&gt;&lt;/a&gt;&lt;br&gt;
Let’s dive in! &lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Setting Goals and Tone&lt;/li&gt;
&lt;li&gt;Phase 1: Identifying your Developer Audience&lt;/li&gt;
&lt;li&gt;Phase 2: Conducting In-Depth Research &lt;/li&gt;
&lt;li&gt;Phase 3: Crafting a Strategy&lt;/li&gt;
&lt;li&gt;Phase 4: Executing and Engaging&lt;/li&gt;
&lt;li&gt;Phase 5: Measuring and Iterating&lt;/li&gt;
&lt;li&gt;Sustainability and Beyond!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting Goals and Tone
&lt;/h2&gt;

&lt;p&gt;No matter how large or small your company is, there are many, many benefits of building a vibrant developer community: reducing support and onboarding costs for new users, increasing adoption of your platform through referrals, retaining existing users, generating valuable feedback for your high-level product roadmaps, encouraging novel use-cases of your product, and more. Figuring out what you value most will help you better measure your results and prioritize initiatives effectively.&lt;/p&gt;

&lt;p&gt;Setting the tone early for your community is crucial. It can establish an identity for your community and its members, and help make process-related decisions later on. A welcoming approach that ensures all members, regardless of their experience level, feel heard is essential. This fosters an environment that encourages low response times for support questions, particularly for new members. As the community grows globally, prioritizing, empowering, and training others who follow your example can help during times when you are unavailable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 1: Identifying your Developer Audience
&lt;/h2&gt;

&lt;p&gt;The first phase of this process involves identifying the specific group of developers you want to target. The developer community as a whole is huge- there are currently 28.7 million developers in the world, and that number is growing every day! It is therefore essential to pinpoint a specific group to allow you to focus your efforts initially.  &lt;/p&gt;

&lt;p&gt;You can choose a target developer community based on many different criteria, including region, tech stack, shared interests, or language. For companies with a live product, this group often starts with a self-selected group of users, but it’s still worth taking note of underlying similarities among your most passionate existing fans to see where your community can grow into.&lt;/p&gt;

&lt;p&gt;Once you have successfully identified the audience you would like to focus on, you can move on to the second phase of the strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 2: Conducting In-Depth Research
&lt;/h2&gt;

&lt;p&gt;The goal of this phase is to understand your developer audience's pain points, values, and interests, and the best way to do this is to be embedded in your target community. Find where they congregate and go in with genuine interest to understand what they value, what tools they use, and their developer pain points. Some examples of this include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attending existing community events, conferences, meetups, and online webinars&lt;/li&gt;
&lt;li&gt;Identifying and talking with respected people within the existing community&lt;/li&gt;
&lt;li&gt;Pay particular attention to people excited about engaging with and helping others and their style! Get to know them by name&lt;/li&gt;
&lt;li&gt;Reading online forums and spaces where the community congregates like Reddit, Dev.to, Hackernews etc&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 3: Crafting a Strategy
&lt;/h2&gt;

&lt;p&gt;Once you have in-depth understanding of your target developer audience you can use this expertise to help your team craft a strategy to engage and help the developers within that audience. Use what you learned about your audience's values, interests and pain points, and bear in mind your initial goals and ways that you can guide the community towards them. Some examples could include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planning a content calendar covering topics that addresses the identified interests, pain points, and values&lt;/li&gt;
&lt;li&gt;Planning Meetups and events that will pique their interest&lt;/li&gt;
&lt;li&gt;Planning workshops that teach a valuable skill or tool that they can apply to their development workflows&lt;/li&gt;
&lt;li&gt;Planning incentives like custom swag or other special recognition that you can offer your most passionate champions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this phase, you want to consider ways you can encourage potential members to take part in your community and give back to it. Providing them a place to meet, support, and network with like-minded individuals is a given, but offering learning opportunities, social clout, or material benefit can also be powerful.&lt;/p&gt;

&lt;p&gt;Planning is important, but execution is everything and that leads us into our next phase of our strategy. &lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 4: Execute and Engage
&lt;/h2&gt;

&lt;p&gt;The ultimate goal of this stage is to build trust and genuine relationships within the community. &lt;/p&gt;

&lt;p&gt;Execution involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sticking to the planned schedule for content publishing and delivering &lt;/li&gt;
&lt;li&gt;Setting firm dates and times for events and meetups and delivering&lt;/li&gt;
&lt;li&gt;Encouraging growth by guiding new community members from your events and content to your online platforms and integrating them in a welcoming way&lt;/li&gt;
&lt;li&gt;Sharing updates and roadmaps to keep the community excited and engaged&lt;/li&gt;
&lt;li&gt;Providing opportunities for competition and collaboration within the community&lt;/li&gt;
&lt;li&gt;Ensuring consistent staff presence to ensure community members feel heard&lt;/li&gt;
&lt;li&gt;Elevating and recognizing active and helpful community members to encourage a sense of pride in their efforts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By executing on your strategy and engaging with your audience you are building a strong foundation based on availability, consistency, and demonstrated value. You want your community members to feel proud to contribute to and be a part of your community (while being wary of elitism!), and therefore spontaneously encourage others to join. When done correctly, this creates a powerful feedback loop of growth!&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 5: Measure and Iterate
&lt;/h2&gt;

&lt;p&gt;Finally, it's necessary to measure the success of your hard work in relation to your initial goals and go back to Phase 3 to adjust your strategy as needed. Some metrics could include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content: Traffic to site, social media engagement, downloads of projects&lt;/li&gt;
&lt;li&gt;Events: NPS (% of promoters - detractors) from surveys, special signup codes&lt;/li&gt;
&lt;li&gt;Online Community Growth: Measure the number of new community members coming from meetups, conferences and other engagements. Bespoke invite codes can be useful here!&lt;/li&gt;
&lt;li&gt;Product and tool adoption: Track the usage of your product or tool and identify trends that may suggest an initiative is working&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is vital to take stock and use metrics that map to your initial goals for your community in some way to inform your community engagement strategy. This will enable you to improve your approach over time. Remember that building a sustainable community takes effort, iteration, and consistency but with the right strategy and commitment to measurement and improvement you will always move towards building a sustainable community.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sustainability and Beyond!
&lt;/h2&gt;

&lt;p&gt;Sustainability is achieved when community members can take the lead in the initiatives your team has modeled. This can involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Community members publishing tutorials, open-source code snippets, and apps&lt;/li&gt;
&lt;li&gt;Community members providing support and sharing resources &lt;/li&gt;
&lt;li&gt;Community members volunteering to become moderators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reaching this point is a huge milestone, and you’ll notice that your team’s role will start to change. While the amount of direct involvement they’ll have with day-to-day tasks like answering support questions will decrease, it is important not to distance yourself from the community and maintain a firm, consistent presence. Your team will take on more management-type duties where they actively look out for and spotlight quality community content, create guidelines for contribution, and keep an eye out for rising stars who can make up the next wave of champions. &lt;/p&gt;

&lt;p&gt;However, don’t let the fact that your community has a feedback loop going lull you to sleep: keep your foot on the pedal and continue to foster engagement and growth through your content calendar or other strategies that have led you this far!&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank you!
&lt;/h2&gt;

&lt;p&gt;We hope reading about our process helps you form strategies for building communities of your own! No two communities are exactly alike, but this general framework can help you stay organized and measure the success of what’s working and what isn’t. We’ll be following up next week with another article on what this process looked like at Autocode, so stay tuned. In the meantime if you have any questions or comments, feel free to reach out to us on Twitter &lt;a href="https://twitter.com/janeth_graziani"&gt;@janeth_graziani&lt;/a&gt; and &lt;a href="https://twitter.com/Hacubu"&gt;@Hacubu&lt;/a&gt;. Thanks for reading!&lt;/p&gt;

</description>
      <category>developer</category>
      <category>community</category>
      <category>discord</category>
      <category>node</category>
    </item>
    <item>
      <title>A guide to connecting your apps via webhooks with Autocode #tutorial</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Wed, 09 Nov 2022 17:34:45 +0000</pubDate>
      <link>https://dev.to/janeth/a-guide-to-connecting-your-apps-via-webhooks-with-autocode-tutorial-15m7</link>
      <guid>https://dev.to/janeth/a-guide-to-connecting-your-apps-via-webhooks-with-autocode-tutorial-15m7</guid>
      <description>&lt;p&gt;Applications use webhooks to notify external apps when a specific event occurs. For example, webhooks are how &lt;a href="https://stripe.com/docs/api/webhook_endpoints" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt; notifies you via email when a new customer has subscribed, how &lt;a href="http://developers.webflow.com/#webhook-events" rel="noopener noreferrer"&gt;Webflow&lt;/a&gt; saves new lead information into Airtable when a form is submitted, and how &lt;a href="https://shopify.dev/api/admin-rest/2022-04/resources/webhook" rel="noopener noreferrer"&gt;Shopify&lt;/a&gt; alerts you via Slack when a new purchase has been made.&lt;br&gt;
Knowing how to configure webhook integrations can help you save time and increase efficiency in your workplace.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FAPIs%2520and%2520Webhooks%2520%281%29.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FAPIs%2520and%2520Webhooks%2520%281%29.png" alt="Illustration of a Stripe webhook"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this guide we will cover the fundamentals of building endpoints on Autocode to configure webhooks.&lt;br&gt;
To reinforce our learning, we will build an endpoint and configure a webhook so that when a form is submitted on &lt;a href="https://tally.so/" rel="noopener noreferrer"&gt;Tally.so&lt;/a&gt; a custom SMS message and email is automatically sent. &lt;/p&gt;
&lt;h2&gt;
  
  
  What we’ll learn:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is a webhook?&lt;/li&gt;
&lt;li&gt;What is an endpoint?&lt;/li&gt;
&lt;li&gt;Real world webhook example&lt;/li&gt;
&lt;li&gt;Creating an endpoint with SMS and Email functionality on Autocode

&lt;ul&gt;
&lt;li&gt;API autocomplete&lt;/li&gt;
&lt;li&gt;API requests &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Example: Configuring our endpoint as a webhook on Tally.so&lt;/li&gt;
&lt;li&gt;Customizing SMS and email messages using event data on Autocode

&lt;ul&gt;
&lt;li&gt;Inspecting Requests&lt;/li&gt;
&lt;li&gt;event payloads&lt;/li&gt;
&lt;li&gt;saving a payload&lt;/li&gt;
&lt;li&gt;consuming event payload data
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What is a Webhook?
&lt;/h2&gt;

&lt;p&gt;Webhooks deliver instant event driven messages from one application to another. The key definition here is “event driven” messages. &lt;/p&gt;

&lt;p&gt;When an event happens in an application, such as a purchase happening in Stripe, a payload of data is sent to a webhook URL. This webhook will act like a “listener”, meaning it will receive the payload of data from that event. It can also handle the event - meaning it can execute code to launch requests to multiple APIs. &lt;/p&gt;

&lt;p&gt;In order for us to configure a webhook, the application must support webhooks. Many of the applications we use at work, such as Github, Salesforce, Hubspot, and Slack, have the ability to extend their applications via webhooks, but some don't.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is an endpoint?
&lt;/h2&gt;

&lt;p&gt;An endpoint is a file with code hosted on Autocode.com. Once deployed, this code is executable via an HTTP request to the automatically generated endpoint URL. Your endpoint URL consists of your Autocode username followed by the project name and development environment. For example:&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_15.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_15.png" alt="Endpoint URL autogenerated by Autocode"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Real world webhook example
&lt;/h2&gt;

&lt;p&gt;Webhooks remove information lag and offer a better customer experience. For example, let's say you're using Stripe and you want to reach out to a customer as soon as they subscribe to your service.&lt;br&gt;
By setting a webhook on Stripe to push updates to your customer success team, you can ensure a quick response from your team to a new subscriber.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FAPIs%2520and%2520Webhooks%2520%281%29.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FAPIs%2520and%2520Webhooks%2520%281%29.png" alt="Illustration of a Stripe webhook"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Key Terms
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webhook&lt;/strong&gt; - a way of sending data from one application another. You configure an endpoint URL as a webhook to tell an application where to send data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Endpoint&lt;/strong&gt; - a file hosted on Autocode that runs code whenever an application sends data to it via webhook configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payload&lt;/strong&gt; - the data which is sent from one application to another via a webhook&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt; - Application Programming Interface's are more complex defined instructions for how one application can communicate with another using code. You can try out the APIs that Autocode natively supports by typing await lib in the Autocode editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We now have a high level understanding of how webhooks work. However, there is no better way to learn than by doing, so let’s jump into building our endpoint on Autocode and configuring our webhook on Tally. Tally lets us build forms similar to Typeform and Google Forms, and it conveniently supports sending data to a webhook when a form is submitted!&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating an endpoint with SMS functionality on Autocode
&lt;/h2&gt;

&lt;p&gt;Log in to your &lt;a href="https://autocode.com/dashboard" rel="noopener noreferrer"&gt;Autocode dashboard&lt;/a&gt; and click the &lt;code&gt;New Web Service&lt;/code&gt; button.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_1.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_1.png" alt="Autocode dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose which account you’d like this project to live in, give it a name, and then click &lt;strong&gt;Create project&lt;/strong&gt;. The name you assign the project will form part of your endpoint’s URL.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_2.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_2.png" alt="Naming an Autocode project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’ll be redirected to Autocode’s code editor. Delete everything below line 3. On line 3 we are including our &lt;code&gt;lib&lt;/code&gt; Node.js package. This is what allows you to connect to any of the APIs in &lt;a href="https://autocode.com/lib" rel="noopener noreferrer"&gt;Autocode’s Standard Library&lt;/a&gt;  with one line of code.  &lt;/p&gt;

&lt;p&gt;Let’s begin by adding SMS functionality to our endpoint. You can search for available APIs by typing await lib. A list of available APIs will appear.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_4.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_4.png" alt="API Autocomplete on Autocode’s editor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A list of all available API integrations will pop up. Select &lt;code&gt;utils&lt;/code&gt; API option and search for the method that allows us to &lt;strong&gt;Send an SMS message (US and CA only)&lt;/strong&gt;. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_5.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_5.png" alt="Using API Autocomplete to search for SMS API on Autocode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Autocode will then pop up a window to assist in preparing the API request to this SMS API. &lt;br&gt;
You’ll be asked to input two parameters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first parameter is a phone number to send a message to. Enter your phone number here!&lt;/li&gt;
&lt;li&gt;The second parameter is the message you want to send whenever a Tally form is submitted. For now, we’ll keep things simple and just enter &lt;code&gt;A form was submitted!&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_6.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_6.png" alt="Autocode's window for configuring API requests"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have finished configuring your API request, click the blue  &lt;strong&gt;Finished Configuring&lt;/strong&gt; button, then the orange &lt;strong&gt;Save&lt;/strong&gt; button. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_7.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_7.png" alt="Autocode endpoint URL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the endpoint URL at the bottom of the editor down somewhere safe. You’ll need it later in this tutorial!&lt;/p&gt;

&lt;p&gt;It is composed with your username, project name and development environment you selected:&lt;/p&gt;

&lt;p&gt;https://&amp;lt;username&amp;gt;.autocode.dev/&amp;lt;projectname&amp;gt;@dev/. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_15.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_15.png" alt="Autocode endpoint URL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the endpoint URL at the bottom of the editor down somewhere safe. You’ll need it later in this tutorial!&lt;br&gt;
Now we’ve got our endpoint URL, let’s try sending data to it using Tally. Tally is a simple way to create forms and surveys. We’ll build and publish a sample form on Tally, then try sending data to Autocode using a webhook.&lt;br&gt;
Head over to &lt;a href="https://tally.so" rel="noopener noreferrer"&gt;Tally&lt;/a&gt;, and signup for an account.&lt;/p&gt;
&lt;h2&gt;
  
  
  Configuring a webhook on Tally
&lt;/h2&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_8.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_8.png" alt="Sign in page for Tally.so"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the purposes of the demo we will use the following lead generation template: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://tally.so/templates/lead-generation-form/l3jQmM" rel="noopener noreferrer"&gt;Lead Generation Form Template&lt;/a&gt;&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_10.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_10.png" alt="Lead Generation Form Template"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a simple form that intakes a couple inputs. Select &lt;strong&gt;Use this template&lt;/strong&gt; and then &lt;strong&gt;Publish&lt;/strong&gt; at the top menu-bar. Once we complete this example, you can return and modify it to your liking. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_9.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_9.png" alt="Selecting Publish on Tally navigation menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tally will generate a unique link to your form once you publish. Copy this link and open the form on a separate tab and then select the integrations tab. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_11.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_11.png" alt="Tally form URL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can seem Tally offers native integrations that make it easy to connect to other platforms and tools. However, it doesn’t natively support Twilio or Gmail. Luckily, we can send form submissions to our Autocode endpoint to get around this limitation.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_12.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_12.png" alt="Webhook Integrations on Tally"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the &lt;strong&gt;Webhooks&lt;/strong&gt; option and set your webhook by registering the endpoint’s URL that you created on Autcode. Make sure to not leave any spaces before or after the endpoint URL and select &lt;strong&gt;Connect.&lt;/strong&gt;&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_13.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_13.png" alt="configuring an endpoint on Autocode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you set your webhook endpoint, you will be routed back to the dashboard for your Lead Generation Form. You should make sure the webhook is turned on by toggling the &lt;code&gt;enable&lt;/code&gt; option.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_14.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_14.png" alt="Autocode endpoint URL configured as webhook for Tally lead generation form"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Test your webhook by submitting a form. You should receive a message to the number you set when configuring your parameters in Autocode.&lt;/p&gt;
&lt;h2&gt;
  
  
  Customizing SMS messages using event data
&lt;/h2&gt;

&lt;p&gt;So far, we've been able to deploy an endpoint, configure a webhook URL, and trigger a notification. Next, let’s learn how to extract data from the event payload so that each text is customized with the sender’s name, email address and job title. &lt;br&gt;
Return to the Autocode editor and click the &lt;code&gt;Tools&lt;/code&gt; button in the bottom right corner of the editor.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_15.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2Fwebhook_15.png" alt="Tools button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A window will pop up giving you access to four different tabs. &lt;br&gt;
The &lt;code&gt;Logs&lt;/code&gt; tab will display any error messages and requests made to your endpoint. &lt;/p&gt;
&lt;h2&gt;
  
  
  Inspecting Requests
&lt;/h2&gt;

&lt;p&gt;Through here we can inspect individual HTTP(S) requests and events sent to Autocode. We are also able to copy the event payloads directly into the Autocode IDE to debug and iterate on our code. &lt;br&gt;
Hover above the latest request and select &lt;code&gt;Inspect Request&lt;/code&gt;.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_16.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_16.png" alt="Inspect Requests"&gt;&lt;/a&gt;&lt;br&gt;
Here we have access to the time the event was received, complete event payload of data from Tally, headers and more. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_17.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_17.png" alt="Window to inspect request for events on Autocode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can copy this request payload to your test payload by clicking the blue &lt;strong&gt;Copy Request Payload to Test Payload&lt;/strong&gt; button. This will cause your payload’s data to automatically populate onto the&lt;code&gt;Payload&lt;/code&gt; tab in the Autocode IDE. This allows you to simulate an event by pressing the green &lt;code&gt;Run&lt;/code&gt; button at the bottom right of the editor, making iterating on code for your endpoint much faster.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_18.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_18.png" alt="Copying request event data to test payload window"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have actual event data to use as we iterate on our code, let’s get back to editing the SMS message we’re sending everytime a Tally form is submitted. &lt;br&gt;
We can use dot notation and template literals to extract the values from the event payload. We’ll format our message to send the first name, last name, email, and role for every person who submits the form via SMS.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_19.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_19.png" alt="Using dot notation to extract values from event payload of data"&gt;&lt;/a&gt;&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;// authenticates you with the API standard library&lt;/span&gt;
&lt;span class="c1"&gt;// type `await lib.` to display API autocomplete&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lib&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="s1"&gt;lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;&lt;span class="na"&gt;token&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;STDLIB_SECRET_TOKEN&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sms&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@2.0.2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`10000000000`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//your number here&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`A form was submitted here is the info:
  name: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&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="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!
  email: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&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="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
  role: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message sent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can simulate an event by pressing the green run button instead of going back to Tally, filling out and submitting the form to trigger an event.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_20.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FWebhook_20.png" alt="SMS text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding email notification
&lt;/h2&gt;

&lt;p&gt;While we’re here, let’s add logic to send an email notification to our endpoint. Let’s send a customized email to the person who submits the form with a simple confirmation message that we have received their request. &lt;br&gt;
Use API autocomplete to search for the Gmail API by typing &lt;code&gt;await lib.&lt;/code&gt; and select the method to &lt;strong&gt;compose and send a message&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Fill out the parameters accordingly click ** Finish configuring**&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;// authenticates you with the API standard library&lt;/span&gt;
&lt;span class="c1"&gt;// type `await lib.` to display API autocomplete&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lib&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="s1"&gt;lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;&lt;span class="na"&gt;token&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;STDLIB_SECRET_TOKEN&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sms&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@2.0.2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`15100000000`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//your number here&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`A form was submitted here is the info:
  name: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&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="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!
  email: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&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="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
  role: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gmail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.2.8&lt;/span&gt;&lt;span class="dl"&gt;'&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;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&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="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Hey &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&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="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; - we received your request!`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Hey &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fields&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="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,\n\nThank you for submitting a request. We will get back to you shortly!\n\n-Janeth \nDeveloper Advocate`&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this is the first time making a request to the Gmail API, click the red &lt;code&gt;required&lt;/code&gt; button to the bottom left of the editor and follow the instructions to link a &lt;strong&gt;New Resource&lt;/strong&gt;.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FXnapper-2022-11-08-12.16.45.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FXnapper-2022-11-08-12.16.45.png" alt="Link a new resource"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Submit a form with your email and you will receive an email within seconds. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FXnapper-2022-11-08-12.31.51.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2Fautocode%2Fimages%2F2022-11-08%2FXnapper-2022-11-08-12.31.51.png" alt="Email from Autocode automation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Time to start building
&lt;/h2&gt;

&lt;p&gt;Congratulations! You are now equipped with the webhook language and tools to build webhook functionality.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>api</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Build a QRCode Inventory Management System with Autocode and Airtable</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Mon, 26 Sep 2022 16:42:01 +0000</pubDate>
      <link>https://dev.to/janeth/build-a-qrcode-inventory-management-system-with-autocode-and-airtable-d9e</link>
      <guid>https://dev.to/janeth/build-a-qrcode-inventory-management-system-with-autocode-and-airtable-d9e</guid>
      <description>&lt;p&gt;If you use &lt;a href="https://airtable.com/templates/local-business/expDrHGuyjSQlrKTq/inventory-tracking"&gt;Airtable&lt;/a&gt; to keep an inventory of items in your warehouse, you can save time by scanning QR codes with your iPhone and quickly updating your Airtable base as you restock your shelves or check items in and out.&lt;/p&gt;

&lt;p&gt;In this tutorial, we’ll learn to build a system that automatically creates QR Codes for every record in an Airtable base. You’ll be able to print QR Codes for each product and attach them to your inventory shelves for easy scanning and updating information on every record.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xYuTwInG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xYuTwInG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_01.png" alt="Product Inventory Tracker in Airtable" width="800" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 1: Generate QRCodes for every row in Airtable using a formula
&lt;/h3&gt;

&lt;p&gt;We’ll use the &lt;a href="https://autocode.com/qrcode/api/generate/#__main__"&gt;QRCode&lt;/a&gt; API in an Airtable formula to automatically produce barcodes for each record (row) in Airtable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 2: Transform image file URLs to attachments in bulk with Autocode
&lt;/h3&gt;

&lt;p&gt;We’ll write a script to transform a bulk of image file URLs into image attachments in Airtable.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 1: Generate QRCodes for Every Row in Airtable using a Formula
&lt;/h2&gt;

&lt;p&gt;You can easily create QRCode images for each item in an Airtable Product Inventory Management System. As a sample for this tutorial, we’ll use this inventory tracking template. &lt;/p&gt;

&lt;p&gt;Copy the template to your Airtable Workspace by clicking this link 👇🏼&lt;/p&gt;

&lt;p&gt;&lt;a href="https://airtable.com/templates/local-business/expDrHGuyjSQlrKTq/inventory-tracking"&gt;https://airtable.com/templates/local-business/expDrHGuyjSQlrKTq/inventory-tracking&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right-click on any record in an Airtable to view the record URL.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d1wS7wNG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d1wS7wNG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_02.png" alt="Right-click on any record in an Airtable to view the record URL" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice that all record URLs include a TableId ViewID RecordID: &lt;code&gt;https://airtable.com/&amp;lt;TableID&amp;gt;/&amp;lt;ViewID&amp;gt;/&amp;lt;RecordID&amp;gt;&lt;/code&gt;;&lt;/p&gt;

&lt;p&gt;For Ex: &lt;a href="https://airtable.com/appYf6XDJS4EtYfP1/tbl5CBRYJFvT3VCif/viwCV6qE9IazFasPl/rechADzwWPVMsMBg4"&gt;https://airtable.com/appYf6XDJS4EtYfP1/tbl5CBRYJFvT3VCif/viwCV6qE9IazFasPl/rechADzwWPVMsMBg4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will use these record URLs in a formula to autogenerate QRCodes for every record using an API service hosted on Autocode:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://autocode.com/qrcode/api/generate/#__main__"&gt;https://autocode.com/qrcode/api/generate/#__main__&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it out by inputting some &lt;code&gt;text&lt;/code&gt; and &lt;code&gt;errorCorrectionLevel&lt;/code&gt;. Press &lt;strong&gt;Run&lt;/strong&gt; and take out your phone to scan the QrCode. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OaGiCOM5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OaGiCOM5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_03.png" alt="QRCode API service Docs" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great! We can use this QRCode service that we can use to automatically generate QRcodes for every record in our Airtable.  &lt;/p&gt;
&lt;h2&gt;
  
  
  Writing the Formula in Airtable
&lt;/h2&gt;

&lt;p&gt;Create a new field and title it &lt;code&gt;QRCodeLink&lt;/code&gt; (field names to to be exact) select &lt;code&gt;Formula&lt;/code&gt; for the field type. &lt;/p&gt;

&lt;p&gt;Copy and paste the QRCode URL in the formula field, followed by &lt;code&gt;?text=&lt;/code&gt;.&lt;br&gt;
Like so: &lt;code&gt;https://qrcode.api.stdlib.com/generate@0.0.3/?text=&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D-G3eQXS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_04.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D-G3eQXS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_04.png" alt="Formula field type" width="800" height="660"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2:
&lt;/h2&gt;

&lt;p&gt;Next, we’ll add a new function by first inserting an ampersand (&amp;amp;) as a separator. Then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add the &lt;code&gt;ENCODE_URL_COMPONENT(&lt;/code&gt; function followed by the URL to your Table which consists of &lt;br&gt;
"&lt;a href="https://airtable.com/TableID/ViewID/"&gt;https://airtable.com/TableID/ViewID/&lt;/a&gt;" insert an ampersand (&amp;amp;) as a separator and add &lt;code&gt;RECORD_ID()&lt;/code&gt; &lt;br&gt;
function to retrieve every row’s ID. Don’t forget to close off your function with a bracket &lt;code&gt;)&lt;/code&gt; .&lt;br&gt;
Add another ampersand (&amp;amp;) separator and add the additional parameter &lt;code&gt;'?errorCorrectionLevel=Medium'&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mine looks like this: '&lt;a href="https://qrcode.api.stdlib.com/generate@0.0.3/?text="&gt;https://qrcode.api.stdlib.com/generate@0.0.3/?text=&lt;/a&gt;' &amp;amp; ENCODE_URL_COMPONENT("&lt;a href="https://airtable.com/tbl5CBRYJFvT3VCif/viwCV6qE9IazFasPl/"&gt;https://airtable.com/tbl5CBRYJFvT3VCif/viwCV6qE9IazFasPl/&lt;/a&gt;" &amp;amp; RECORD_ID()) &amp;amp; '?errorCorrectionLevel=Medium'&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ud5axrFx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ud5axrFx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_05.png" alt="Formula field type in Airtable" width="800" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hit &lt;strong&gt;Save&lt;/strong&gt;. Now every time you add a new record to your Airtable, a QRCode will be auto generated for that record.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wpWXwW8H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wpWXwW8H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_06.png" alt="Airtable base" width="800" height="160"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Part 2: Transform Image File URLs to Attachments in Bulk with Autocode
&lt;/h3&gt;

&lt;p&gt;You now have a link to the QRCode image for every row in Airtable.&lt;/p&gt;

&lt;p&gt;Create a new Attachment field and title it exactly like so: &lt;code&gt;QRCodeImage&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zxaoIvDF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zxaoIvDF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_07.png" alt="Attachment field in Airtable base" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We now need to write a script on Autocode to transform our QrCode links to image attachments. Head on over to your &lt;a href="https://autocode.com/dashboard/"&gt;Autocode dashboard&lt;/a&gt; and sign in or create an account. &lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;&lt;em&gt;New Web Service&lt;/em&gt;&lt;/strong&gt; and give the project a name. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pLMQl6P5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_08.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pLMQl6P5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_08.png" alt="New Web Service" width="800" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will be routed to the &lt;code&gt;__main___.js&lt;/code&gt; file for your project. Delete the auto generated code and paste the following 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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lib&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="s1"&gt;lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;&lt;span class="na"&gt;token&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;STDLIB_SECRET_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;airtable&lt;/span&gt;&lt;span class="p"&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Running [Airtable → Select Records by querying a Base]...`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;airtable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selectQueryResult&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;airtable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.5.2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;baseId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&amp;amp;lt; Insert BaseId Here &amp;amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Product Inventory`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;where&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;QRCodeImage__is_null&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;'&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;offset&lt;/span&gt;&lt;span class="dl"&gt;'&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="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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Running [Airtable → Update Records by querying a Base]...`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;airtable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selectQueryResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;airtable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.5.2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;baseId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&amp;amp;lt;Insert BaseID Here&amp;amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Product Inventory`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;where&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Product ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;airtable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selectQueryResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Product ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;'&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;offset&lt;/span&gt;&lt;span class="dl"&gt;'&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="na"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;QRCodeImage&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;airtable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selectQueryResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;QRCodeLink&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;typecast&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&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;Press &lt;strong&gt;Save&lt;/strong&gt; and select the red &lt;strong&gt;Account Required button&lt;/strong&gt;, which will prompt you to link an Airtable account.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xQtD2tZU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_09.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xQtD2tZU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_09.png" alt="Code pasted onto Autocode IDE as a web service" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Link&lt;/strong&gt; then &lt;strong&gt;Link Resource&lt;/strong&gt; and follow the instructions on the modal to retrieve your Airtable API Key and select Finish.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pVI2fia1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pVI2fia1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_10.png" alt="Linked Airtable Account" width="800" height="763"&gt;&lt;/a&gt;&lt;br&gt;
Once you’ve finished Linking your accounts you need to add your base’s ID to line 12 and Line 28.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RF6s0YU0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_11.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RF6s0YU0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_11.png" alt="Help tab on Airtable" width="800" height="750"&gt;&lt;/a&gt;&lt;br&gt;
Locate your Base ID by clicking on the &lt;strong&gt;HELP&lt;/strong&gt; tab on the upper right corner of your Base. Select API documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Uf6k0VmP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Uf6k0VmP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_12.png" alt="Locate your Base ID by clicking on the **HELP** tab on the upper right corner of your Airtable Base" width="800" height="846"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the base id:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ATRrN7_e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_13.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ATRrN7_e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_13.png" alt="Copy airtable base id" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paste the base ID onto line 12 and line 28 in between the backtick quotes to set the value for baseId as seen in the screenshot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rp_itlZS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_14.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rp_itlZS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_14.png" alt="Paste base id into Autocode project" width="800" height="876"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally up your timeout to 30,000 ms. By default it is set to 10,000 ms. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DeS9tmT---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_16.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DeS9tmT---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QrCode_16.png" alt="Timeout feature on Autocode IDE" width="540" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have a large amount of records, you may need to run this script a couple of times to complete transfering all links to attachemts. &lt;br&gt;
Hit Run Test Event and watch as your Airtable becomes populated by Autocode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2NLdlF3N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2NLdlF3N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/autocode/images/2022-09-22/QRCode_15.png" alt="Product Inventory Tracker in Airtable" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  That’s it! 🤗
&lt;/h2&gt;

&lt;p&gt;You now have all the tools you need to build an inventory control system with Airtable and &lt;a href="https://autocode.com/qrcode/api/generate/#__main__"&gt;QRCode APIs&lt;/a&gt; on Autocode. I hope you found this tutorial helpful. If you have any questions, jump into our &lt;a href="https://discord.com/invite/UjJAmdN3uZ"&gt;Discord support channels&lt;/a&gt;. Our team at Autocode is ready to help.&lt;/p&gt;

</description>
      <category>airtable</category>
      <category>automation</category>
      <category>api</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Best Practices for Discord Server Moderation</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Fri, 22 Apr 2022 14:17:45 +0000</pubDate>
      <link>https://dev.to/janeth/best-practices-for-discord-server-moderation-84f</link>
      <guid>https://dev.to/janeth/best-practices-for-discord-server-moderation-84f</guid>
      <description>&lt;p&gt;Moderation is an important part of building a great Discord community where people will want to hang out. As moderators of  &lt;a href="https://autocode.com/" rel="noopener noreferrer"&gt;Autocode’s&lt;/a&gt; Discord server, we know how tough online moderation can be. That's why we want to share the tools we use to moderate our 40,000 + community.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F01_mod.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F01_mod.png" alt="Autocode’s 40,000 + member Discord server"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While there are thousands of Discord moderation bots, installing a bot won’t solve all your moderation needs. You need human intervention to ensure your server’s moderation strategy is appropriate and fair. You as a server owner and moderator need to create the environment for moderation bots to work as intended. We hope that the following tips will help you and your team create this environment to build an effective moderation system. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Table of Contents:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define Server Rules&lt;/li&gt;
&lt;li&gt;Set up channels, roles, and permissions&lt;/li&gt;
&lt;li&gt;Configure Discord tools &lt;/li&gt;
&lt;li&gt;Build a Discord bot &lt;/li&gt;
&lt;li&gt;Install features to assist with server moderation&lt;/li&gt;
&lt;li&gt;Install pre-built moderation bots from &lt;a href="https://bot.gg/" rel="noopener noreferrer"&gt;bot.gg&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Define server rules
&lt;/h2&gt;

&lt;p&gt;Moderation begins with clear and concise rules that will guide and shape your community as it grows. These rules define how your community engages with each other and allow your staff, moderators, and community leaders to intervene adequately when community guidelines are broken. &lt;/p&gt;

&lt;p&gt;We recommend that you consider setting expectations around the following topics in your server:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❗ Safety and Harassment ❗&lt;/strong&gt; -   As your public server grows you will be interacting with people from all walks of life. Make sure your community is a safe and positive environment for people and discourage harassment surrounding: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Age&lt;/li&gt;
&lt;li&gt;Race and ethnicity&lt;/li&gt;
&lt;li&gt;Religion&lt;/li&gt;
&lt;li&gt;Gender identity&lt;/li&gt;
&lt;li&gt;Sexual orientation&lt;/li&gt;
&lt;li&gt;Economic and social status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jokes, memes, comments, and bullying around any of the above mentioned should never be tolerated in a healthy and supportive community. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🗒️ Appropriate Content&lt;/strong&gt; -  Define the content, topics, and conversations that are not acceptable. This will create a community that is inclusive of all ages. Remind your community to follow Discord’s content policy, as well as any other TOS that are relevant to your community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🗨️ Channel Usage&lt;/strong&gt;- Keep your server and conversations organized by highlighting what channels are for and encouraging people to keep chats relevant to the channel’s purpose. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🖥️ Getting Support&lt;/strong&gt; -  Explain how your community can request support. It is also a good idea to point towards existing resources so that your community can be self-supportive. You may also consider introducing roles, staff, moderators, and community leaders that are available to help. Set expectations for how extensive support is. &lt;/p&gt;

&lt;p&gt;You’ll likely also need to tailor rules specific to your type of community. For example, if you run a Discord server focused on photography, what kind of photos aren’t allowed to be shared? If you run a gaming server, do you allow off-topic discussion? The answer to questions such as these should be codified within your rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set up channels, roles, and permissions
&lt;/h2&gt;

&lt;p&gt;As a Discord server moderator, you will need to have a private space to communicate with your team and with the leaders in your community. Discord’s moderation tools allow us to create channels that are only accessible to specific members and roles via permissions. &lt;/p&gt;

&lt;p&gt;Permissions allow you to control who can view a channel, send messages in the channel, manage app commands, and more. To learn how to set up super-secret channels and modify the permissions check out this &lt;a href="https://support.discord.com/hc/en-us/articles/206143877" rel="noopener noreferrer"&gt;guide&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;You should also think about how public channels’ permissions are set up. For example, consider whether it would be best to enable slow mode on some channels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Discord tools
&lt;/h2&gt;

&lt;p&gt;Once you’ve defined your rules and set up your channels, you will be ready to properly enforce these rules and protect your server. We recommend that you begin by configuring Discord’s built-in tools. Select Server Settings to find the Moderation Menu. Discord's Moderation Menu allows you to quickly set up basic protection for your server to discourage malicious people or bots from joining and causing trouble.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F02_modsettings.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F02_modsettings.png" alt="Select server settings in the Discord app to view server settings"&gt;&lt;/a&gt;&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F032_mod.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F032_mod.png" alt="The moderation menu for your Discord server is where you can set up moderation levels, content filters, and enforce 2FA "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We recommend setting a Medium or High verification level. This will require that any member joining your server have a verified email address on their Discord account. They must also wait a certain amount of time before they are allowed to send messages in channels. Encourage new members to use the waiting period to read the community guidelines and learn about the different channels.&lt;/p&gt;

&lt;p&gt;We encourage public servers to enable the setting that “Scans media content from all members.” This will prevent malicious people from posting NSFW content on your server. &lt;/p&gt;

&lt;p&gt;You should also enable the two-factor auth requirement. Your moderators will need to have two-factor authentication on their account in order to use moderation actions like banning/kicking users and deleting messages. This will help prevent hackers from taking over a moderator account to cause trouble on a server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a Discord bot
&lt;/h2&gt;

&lt;p&gt;While the moderation menu offers basic moderation abilities, as your community grows you will want to further protect your server. Users may try to disrupt your server by sending spam, posting unwanted text in channels, raiding your server, and more. Fortunately, we can solve many of these problems with help from a little bot friend. &lt;/p&gt;

&lt;p&gt;At Autocode, we recommend building a Discord moderation bot to help assist you and your team. Remember, Discord bots are meant to complement human moderation, not replace it. &lt;/p&gt;

&lt;p&gt;You can easily set up your Discord bot with Autocode by following this step-by-step tutorial &lt;a href="https://autocode.com/guides/how-to-build-a-discord-bot/#introduction" rel="noopener noreferrer"&gt;“How to build a free Discord bot with Node.js”&lt;/a&gt;. You don't need to install anything or pay anything to build and host your bot - it's free and easy to set up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=QCBV1pczkxg&amp;amp;feature=youtu.be" rel="noopener noreferrer"&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%2Fddpz4ckuf3e87qcrlq1s.png" alt="How to build a FREE Discord bot with Autocode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install features to assist with server moderation
&lt;/h2&gt;

&lt;p&gt;Once you have completed the step-by-step tutorial, you will be able to customize your bot. You can easily add custom commands and moderation features like member verification, anti-spam, anti-raid verification systems and more. &lt;/p&gt;

&lt;p&gt;One of the main advantages of creating a custom bot is that you can have a single bot handle everything, rather than having to manage multiple bots. At Autocode, we make it super easy to add  features to one bot with our large library of Snippets. Snippets allow you to use others' code inside your project, making adding features to your Discord bot super quick! &lt;/p&gt;

&lt;p&gt;Here is a short 2-minute video that explains how to install snippets into your Discord bot project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=xqyZRzcmW60" rel="noopener noreferrer"&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%2F762uti2vrszwl2k9boje.png" alt="A short 2-minute video that explains how to install snippets into your Discord bot project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here is a list of the Snippets we recommend for moderation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-spam:&lt;/strong&gt; Keep your channels clean from unwanted invite links, messages, and mentions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://autocode.com/snippet/Ronan-Films/cachsnpt_V5WDJJmWt1B1iykhLcsW4rFECQAvCWgpBPGT/" rel="noopener noreferrer"&gt;Anti Discord Invite links&lt;/a&gt; Delete messages that have or contain discord.gg/ or https//discord.gg/ so that no one can send invite links in your server. The bot will post a warning message after deleting invite links.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://autocode.com/snippet/chillihero/cachsnpt_7Cy8YoNMNT7K2wqpnaM1497cDwqwaPWeB5W2/" rel="noopener noreferrer"&gt;Anti Token Grabber Links - Auto Moderation&lt;/a&gt; Checks if the message that was sent contains any known token grabber Links. If it does, it deletes the message, sends a warning in the chat, and assigns a muted role. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://autocode.com/snippet/Ronan-Films/cachsnpt_wPHacmvZLsVfZeFKS2RUD88oLB9tVsfPNRjb/" rel="noopener noreferrer"&gt;Anti Caps Spam&lt;/a&gt; Delete any message with more than 10 characters in all caps. The bot will post a message asking the user to not use all caps.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://autocode.com/snippet/jacoblee/cachsnpt_31DrcSV7ZwtCMr3xeCYB98NSNcJT9ULUhZ8K/" rel="noopener noreferrer"&gt;Anti mentions&lt;/a&gt; When a member of your server tries to mention "&lt;a class="mentioned-user" href="https://dev.to/here"&gt;@here&lt;/a&gt;", your bot will remove their chat permissions for an hour. This will not affect the server owner or other members with admin permissions, since timeouts cannot be set on those users. Admins can remove timeouts by right-clicking the member's icon and selecting the option that appears.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Text filters:&lt;/strong&gt; Keep your server clean from profanity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://autocode.com/snippet/jacoblee/cachsnpt_ZTH89poP3cpNQDMnz9tphrsbif838sWAVKPb/" rel="noopener noreferrer"&gt;Automatically delete messages containing a word in the bad word list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://autocode.com/snippet/ctks/cachsnpt_dsJHZ42aZ5EwRf56M5RXPZsHZSMtbgkQ2WZA/" rel="noopener noreferrer"&gt;Anti Swear System | Profanity Filter&lt;/a&gt; Automatically detects profanity and deletes messages containing profanity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Anti-raid:&lt;/strong&gt; Raids are when a large number of users enter your Discord server at once to cause trouble. One way to stop raids is by protecting your server with a verification system. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://autocode.com/app/chinmay2/verificationcaptcha/" rel="noopener noreferrer"&gt;Server captcha verification bot&lt;/a&gt; Verify new members who join your server via the captcha verification system. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://autocode.com/app/creepertown/verification-bot/" rel="noopener noreferrer"&gt;Verification System&lt;/a&gt;. This app will make sure people have to click a button before getting access to your server! Prevents bots from accessing your server&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://autocode.com/snippet/ctks/cachsnpt_rRxm4nBCMwGcqLzYoYXHSLBsF4oS38mGHZz4/" rel="noopener noreferrer"&gt;Raid purge command&lt;/a&gt; remove messages after a raid with a simple command ex: !purge 20. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install pre-built moderation bots from &lt;a href="https://bot.gg/" rel="noopener noreferrer"&gt;bot.gg&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;You can invite a Discord moderation bot into your server instead of building one. Head on over to &lt;a href="https://bot.gg/" rel="noopener noreferrer"&gt;bot.gg&lt;/a&gt; and search through our growing list of bots.&lt;br&gt;&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F04_moderation.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F04_moderation.png" alt="Discord Moderation bots on bot.gg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A popular moderation bot we recommend is &lt;a href="https://bot.gg/discord/spectre/" rel="noopener noreferrer"&gt;Spectre&lt;/a&gt;. This is a handy tool that will assist your moderators. It’s equipped with moderation features that allow admins to purge chats, lock channels, and lock down the server. Your server members can easily make reports and suggestions via slash commands. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F05_mod.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F2022-04-21%2F05_mod.png" alt="Spectre Bot on bot.gg"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Moderation is a foundational part of any thriving community. Making sure clear guidelines are established, executed, and enforced will keep everyone in your community safe and comfortable.&lt;/p&gt;

&lt;p&gt;Remember that moderation starts with you, and should always be taken seriously. Moderate what you can manually with you and your moderator team, and use bots to assist where you need it. Your community will be grateful for it!&lt;/p&gt;

</description>
      <category>discord</category>
      <category>devrel</category>
      <category>community</category>
      <category>moderation</category>
    </item>
    <item>
      <title>Growing and Engaging your Discord Community: A How-To Guide</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Fri, 08 Apr 2022 22:53:44 +0000</pubDate>
      <link>https://dev.to/janeth/growing-and-engaging-your-discord-community-a-how-to-guide-26jc</link>
      <guid>https://dev.to/janeth/growing-and-engaging-your-discord-community-a-how-to-guide-26jc</guid>
      <description>&lt;p&gt;Growing and engaging a &lt;a href="https://discord.com/"&gt;Discord&lt;/a&gt; community is not an easy task and that’s why at &lt;a href="https://autocode.com/"&gt;Autocode&lt;/a&gt; we are extremely proud of the &lt;a href="https://discord.gg/d2ym64n5"&gt;40,000+ member community we’ve built&lt;/a&gt;. In this blog post, we’ll be sharing how we have created a thriving, supportive and friendly community. &lt;/p&gt;

&lt;p&gt;Whether you are a game developer, bot builder, discord community manager, or social media influencer, these tips will help you build an active community.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xgmY2GnT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/intro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xgmY2GnT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/intro.png" alt="Autocode's Discord server with 40,000+ members" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provide opportunities for competition and collaboration &lt;/li&gt;
&lt;li&gt;Ensure consistent staff presence &lt;/li&gt;
&lt;li&gt;Elevate active and helpful community members &lt;/li&gt;
&lt;li&gt;Provide opportunities to showcase members and their work &lt;/li&gt;
&lt;li&gt;Leverage the power of Discord Bots&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Provide opportunities for competition and collaboration
&lt;/h2&gt;

&lt;p&gt;One way you can boost your server’s engagement is through competition and collaboration. Here at Autocode our multi-talented Developer Relations Lead, Jacklyn Biggin, runs Autocode &lt;a href="https://omg.ac/challenge"&gt;Community Challenges&lt;/a&gt; at least once a month. These challenges are an opportunity for our community members to come together, collaborate, show off their skills, and learn new technologies via friendly competitions. &lt;/p&gt;

&lt;p&gt;We’d recommend following these guidelines when designing competitions within your server:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Encourage participation with rewards and server roles.&lt;/strong&gt; Here at Autocode, we reset our entrant and winner roles after each challenge meaning previous winners have to win the next challenge to keep their role!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be consistent.&lt;/strong&gt; You want your community to look forward to these fun events, therefore setting dates and times is important. For example, you can organize an event during the first two weeks of every month. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;a href="https://support.discord.com/hc/en-us/articles/4409494125719-Scheduled-Events"&gt;Discord’s Scheduled Events feature&lt;/a&gt;&lt;/strong&gt;, and make sure to provide an easy to access document for your community to review event rules and expectations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have a dedicated Discord channel for these challenges&lt;/strong&gt;, This is very helpful and will keep your discord server organized as well as provide a space for your community to ask questions and discuss the event.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O3h_w3nR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/01_discord.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O3h_w3nR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/01_discord.png" alt="Autocode's Discord channel for organizing community challenges" width="800" height="903"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ensure consistent staff presence
&lt;/h2&gt;

&lt;p&gt;Another great way to engage and grow your community is by ensuring you have a consistent staff presence on the server. Your staff needs to be integrated into the server as part of the community to build trust and create authentic connections. &lt;/p&gt;

&lt;p&gt;At Autocode, our captivating Media Producer, Nestor Romero, moderates question and answer sessions with Autocode team members once a week in a &lt;a href=""&gt;Stage channel&lt;/a&gt;. QnA sessions are an opportunity for community members to ask questions and allow them to connect with the team behind the platform. &lt;/p&gt;

&lt;p&gt;Here are some of the things we think about when running our Q&amp;amp;As:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Take questions ahead of time&lt;/strong&gt;. At Autocode, our community can submit questions ahead of time via a /qna command.&lt;a href="https://autocode.com/community/threads/how-to-build-discord-survey-forms-with-modals-tutorial-791b00ec/"&gt;Learn how to build a similar command here&lt;/a&gt;. The questions are stored in a Google sheet and make it super simple for our moderator to organize and prepare. Submitted questions also appear in our #community-events channel, which helps create buzz around interesting questions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GSNf8ulm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/02_discord.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GSNf8ulm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/02_discord.png" alt="Autocode's assistant Discord bot confirming questions have been submitted in #community-events Discord channel" width="800" height="785"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Broadcast this Q&amp;amp;A to your Discord server using Discord’s Stage channels&lt;/strong&gt;. &lt;a href="https://support.discord.com/hc/en-us/articles/1500005513722-Stage-Channels-FAQ#h_01F22AKG1WM0JYC69N1JW22JBZ"&gt;Stage channels&lt;/a&gt; are the perfect way to conduct audio events since Stage channels allow you to set speakers, moderators, and members can join as the audience. In addition, there are no alerts interrupting the event when someone joins or leaves the stage. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wyEDVI6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/03_discord.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wyEDVI6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/03_discord.png" alt="Stage channels are a special type of Discord voice channel you can create in your Community server" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep your Q&amp;amp;As relevant and casual&lt;/strong&gt;. Remember, they are guided conversations. Allow your community to connect with you and your team members by finding the balance between being authentic and sharing the knowledge or info relevant to your community.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prepare for the evolution of your Q&amp;amp;As.&lt;/strong&gt; While QnA sessions may start off as a way for your community to get to know your team members, over time they may evolve into monthly updates on your bot, community, or product. Let things naturally evolve in a way that works for your community.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;However, outside of events, you should still aim to have your staff online and around as much as possible. Simply having staff active in text and voice channels can make a huge difference to your server’s activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Elevate active and helpful community members
&lt;/h2&gt;

&lt;p&gt;Community leadership is necessary for your server’s engagement and growth. It’s important for your team to quickly identify the most passionate, selfless, mature, and committed individuals in your Discord community. They will be the ones to foster a healthy and supportive server.&lt;/p&gt;

&lt;p&gt;At Autocode, we recognize these leaders as our Community Heroes, and we’ve created a special role for them on our server. These Community Heroes are the backbone of our community and their presence is positive and helpful. They are the first to volunteer to test new features, help out in our support channels, and create amazing apps, websites, and Discord bots to share with others.&lt;/p&gt;

&lt;p&gt;If you’re building a similar program for your server, here are some tips we’d recommend following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a leadership role.&lt;/strong&gt; Write a guide that outlines what the role entails, rules, and expectations, and explains their privileges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create an application process&lt;/strong&gt; for this role in your community. Instead of promoting random community members, provide a path for leaders to achieve this role. This may also allow you to gain more insight into individual community members. &lt;a href="https://omg.ac/apply-for-hero"&gt;You can check out our Community Hero application here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actively invite leaders to apply.&lt;/strong&gt; Once you identify these leaders, it’s important to invite them to apply to this role. Encouraging them to apply rather than just waiting for them to can give them the confidence boost they need.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Introduce your leaders.&lt;/strong&gt; Assign your community leaders a role in your Discord server and introduce them to your community&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recruit community leaders consistently.&lt;/strong&gt; At Autocode, we review applications once a month.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NLc7Xi9d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/04_discord.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NLc7Xi9d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/04_discord.png" alt="Displaying Autocode's Community Hero role with 30 members" width="800" height="1065"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Provide opportunities to showcase members and their work
&lt;/h2&gt;

&lt;p&gt;Allowing your community to come together and showcase their work around a topic of interest can be a great way of driving more engagement in your Discord server.&lt;/p&gt;

&lt;p&gt;At Autocode, our animated Content Producer, Ethan Kellogg, leads Show and Tell sessions. During these sessions, our community can share their latest apps, Discord Bots, and websites that they’ve been working on.&lt;br&gt;
Here are some things to remember when planning these opportunities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Plan and schedule ahead of time.&lt;/strong&gt; Create a server event so that people know when your events start, but be sure to keep things casual when running them. Allow people join and leave, ask questions, or hang out for the duration of your event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be considerate of time.&lt;/strong&gt;  Utilize Discord’s server insights (&lt;a href="https://support.discord.com/hc/en-us/articles/360032807371-Server-Insights-FAQ"&gt;https://support.discord.com/hc/en-us/articles/360032807371-Server-Insights-FAQ&lt;/a&gt;)  to identify days and times during the week when your server is the most active. Try to select times to host these sessions that allow for international participation - remember that not everyone will be in the same timezone as you!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be inclusive.&lt;/strong&gt; You should encourage and allow everyone to participate. Take a quick poll before the event to see who is interested and check in with them to find out what they plan to talk about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be welcoming and encourage members to interact with each other.&lt;/strong&gt; The purpose of Show and Tell sessions are to get people invested in each other's projects and to encourage the community to share those projects in the first place. Encouraging feedback, updates, WIPs, etc. can all help achieve this goal. When planning similar events for your community, think about what your members need to be successful in your community.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage voice channels and text channels.&lt;/strong&gt; Voice channels provide the ability to screen share and give live demos. You can also encourage members to share links, screenshots, and recordings of their projects in a text channel during these events. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Leverage the power of Discord Bots
&lt;/h2&gt;

&lt;p&gt;Discord bots are undeniably one of the handiest tools you have, and we recommend using them to take your Discord server to the next level. A basic server can be transformed into a truly awesome place to hang out by building and adding fun bots to it. &lt;/p&gt;

&lt;p&gt;At Autocode, we have built a multi-purpose bot that takes care of many of our moderation needs and also keeps our community jamming to their favorite tracks.&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WGjniZcG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/05_discord.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WGjniZcG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/05_discord.png" alt="Autocode bot moderating the Discord support channel" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_DHd6xGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/06_discord.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_DHd6xGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/06_discord.png" alt="Autocode's Discord bot playing music for members" width="800" height="979"&gt;&lt;/a&gt;&lt;br&gt;
Here are some things to consider when adding Discord Bots to your Server. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Browse listing for popular Discord Bots.&lt;/strong&gt; Read their descriptions carefully to figure out if they’d be a good tool for your community. For example, &lt;a href="https://bot.gg/"&gt;Bot.gg&lt;/a&gt; is Autocode's curated Discord bot list that you can easily search through to find the perfect bot for your server. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---W1pTpd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/07_discord.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---W1pTpd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-04-08/07_discord.png" alt="Bot.gg is Autocode's curated Discord bot listing" width="800" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build your own custom bot.&lt;/strong&gt; You can start building your first bot with our guide for &lt;a href="https://autocode.com/guides/how-to-build-a-discord-bot/"&gt;building Discord bots here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test bots in a test server.&lt;/strong&gt; Make sure to create a test server when trying out bots. You want to avoid disrupting your community when installing and testing bots for the first time.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Thank you!
&lt;/h2&gt;

&lt;p&gt;Thank you for reading! I hope you have found these suggestions for how to engage your Discord community helpful! If you would like to chat about any of the mentioned suggestions, please join our &lt;a href="https://discord.gg/d2ym64n5"&gt;Discord server&lt;/a&gt; and ask our team! We’ll be happy to share! &lt;/p&gt;

</description>
      <category>community</category>
      <category>discord</category>
      <category>devrel</category>
    </item>
    <item>
      <title>Grow your server by building these 5 Discord bots</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Mon, 04 Apr 2022 18:52:04 +0000</pubDate>
      <link>https://dev.to/janeth/grow-your-server-by-building-these-5-discord-bots-3672</link>
      <guid>https://dev.to/janeth/grow-your-server-by-building-these-5-discord-bots-3672</guid>
      <description>&lt;p&gt;Discord bots are awesome – they are very much like little helpers that can improve and grow your Discord server. You can transform your server into a truly awesome place to hang out by building and adding &lt;a href="https://autocode.com/guides/how-to-build-a-discord-bot/"&gt;Discord bots&lt;/a&gt; to it. And as your server grows, it can become more challenging to manually manage and moderate it. Fortunately, &lt;a href="https://autocode.com/app/bugattiworld/fancymodbot/"&gt;moderation bots&lt;/a&gt; can help here too! We have handpicked some of the best &lt;a href="https://autocode.com/app/"&gt;Discord bot templates&lt;/a&gt; available on Autocode to help you improve and grow your server! &lt;/p&gt;

&lt;p&gt;These bot templates are free and work right out of the box! The best part is that they are easily customizable with code to fit your Discord community needs and they come with amazing community support.&lt;/p&gt;

&lt;p&gt;If you get stuck or want to customize any of these bots, you can reach out to a helpful community of 40,000 members on the &lt;a href="https://discord.gg/6Ac5sKYH"&gt;Autocode Discord Server&lt;/a&gt; where someone is always willing to help. &lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Music Bot&lt;/strong&gt; - Stream high-quality music from Youtube and Spotify with an audio player interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic Discord Music Bot&lt;/strong&gt; - Stream tracks from Youtube with prefix commands &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic Discord Economy App&lt;/strong&gt; - Use prefix commands to give, steal, search, and gamble for money throughout the server &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XMod App&lt;/strong&gt; - Moderate your server with slash or prefix commands to warn, mute, kick and ban members &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Ticketing System&lt;/strong&gt; - Manage questions and requests in an efficient and organized manner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How to add bots to Discord&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support for adding Discord bots&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://autocode.com/app/ctks/music/"&gt;Advanced Music Bot&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;One of our favorite features you can unlock via bots is music streaming! You can easily listen to music with friends while you game, stream, or work! If you're new to using music bots for your server, or if you're looking for a replacement for the Groovy Discord bot and Rythm bot, the &lt;a href="https://autocode.com/app/ctks/music/"&gt;Advanced Music Bot&lt;/a&gt; is just what you need! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4ZFAk2QP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/01_top5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4ZFAk2QP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/01_top5.png" alt="Advanced Music Bot’s audio player interface" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced Music Bot Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports Spotify playlists, tracks, albums&lt;/li&gt;
&lt;li&gt;Supports Youtube &lt;/li&gt;
&lt;li&gt;24/7 playback&lt;/li&gt;
&lt;li&gt;Features a player menu with buttons similar to the popular Hydra bot for pausing/resuming, stopping, looping, and skipping through songs&lt;/li&gt;
&lt;li&gt;Creates automatic queues of songs from the track links sent into the designated playlist channel &lt;/li&gt;
&lt;li&gt;Displays upcoming tracks in the queue as well as the track cover image
&lt;/li&gt;
&lt;li&gt;Completely customizable with access to source code&lt;/li&gt;
&lt;li&gt;Includes a video tutorial for guided setup &lt;a href="https://www.youtube.com/watch?v=Gt-21iScTN4"&gt;https://www.youtube.com/watch?v=Gt-21iScTN4&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Free!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you and your friends love streaming music from Youtube and Spotify then this is the perfect tool to increase activity on your server! Have your friends add their favorite songs to the queue and jam out together! &lt;a href="https://autocode.com/app/ctks/music/"&gt;Head on over to Autocode and try it out&lt;/a&gt;! &lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://autocode.com/app/discord/basic-discord-music-bot"&gt;Basic Discord Music Bot&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;If you need a Discord bot that uses prefix commands to play music instead of an audio player, the Basic Discord Music Bot template is complete with the commands you need! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3PB-8Oaz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/02_top5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3PB-8Oaz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/02_top5.png" alt="User Jacoblee93 invoking Basic Discord Music Bot with !play prefix command in a server" width="694" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ijNGueCi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/03_top.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ijNGueCi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/03_top.png" alt="User Jacoblee93 invoking Basic Discord Music Bot with !enqueue prefix command in a server" width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic Discord Music Bot Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Play audio tracks from YouTube in a Discord voice channel of your choice&lt;/li&gt;
&lt;li&gt;Easy setup and allows you to search for tracks or enter a direct YouTube link&lt;/li&gt;
&lt;li&gt;Features system for queueing tracks in advance &lt;/li&gt;
&lt;li&gt;Complete with the following prefix commands:

&lt;ul&gt;
&lt;li&gt;!play &amp;lt;query&amp;gt; ; - Play or search for a track&lt;/li&gt;
&lt;li&gt;!play - Resume a paused track or play the latest track from the &lt;code&gt;queue&lt;/code&gt; if the player is disconnected&lt;/li&gt;
&lt;li&gt;!pause - Pause the currently playing track&lt;/li&gt;
&lt;li&gt;!disconnect - Disconnect the bot from the voice channel&lt;/li&gt;
&lt;li&gt;!queue - Retrieve the current track and queued tracks&lt;/li&gt;
&lt;li&gt;!enqueue - Add a track to the queue&lt;/li&gt;
&lt;li&gt;!skip - Skip currently playing track and play the next track in the queue&lt;/li&gt;
&lt;li&gt;!clearqueue - Clear the current queue&lt;/li&gt;
&lt;li&gt;!help - Bring up a help menu&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Customizable with access to source code&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=35v8-1IWhPQ"&gt;Includes a video tutorial for building this Music Bot from scratch&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Free!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Get your server jamming to the latest and best tracks with your customizable Discord Music Bot. &lt;a href="https://autocode.com/app/discord/basic-discord-music-bot"&gt;Install it free&lt;/a&gt;! &lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://autocode.com/app/starsblaster/economy-app/"&gt;Basic Discord Economy App&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Build and grow a fun, interactive, and rewarding server with this Basic Discord Economy app template. Keep your community entertained as they use prefix commands to give, steal, search, and gamble for money throughout the server. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4cp0mjv_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/04_top.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4cp0mjv_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/04_top.png" alt="User Hnht invoking Basic Discord Economy App with .bal prefix command in a server" width="548" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F3CZVM0R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/05_top.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F3CZVM0R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/05_top.png" alt="User MinkKRT invoking Basic Discord Economy App with .rob prefix command in a server" width="701" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nFsoKtae--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/06_top.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nFsoKtae--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/06_top.png" alt="User Hnht invoking Basic Discord Economy App with .give prefix command in a server" width="792" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic Discord Economy App Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to set up currency system complete with the following commands:

&lt;ul&gt;
&lt;li&gt;!createbank - Register yourself and create a bank account.&lt;/li&gt;
&lt;li&gt;!give &amp;lt;@user&amp;gt; $100 - Give a friend money from your account&lt;/li&gt;
&lt;li&gt;!rob &amp;lt;@user&amp;gt; - Steal money from a friend. You may fail and lose money!&lt;/li&gt;
&lt;li&gt;!search - Search for  money&lt;/li&gt;
&lt;li&gt;!gamble - Attempt to gamble and have a chance of winning, drawing, or losing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Features rate-limiting for search and rob command. &lt;/li&gt;
&lt;li&gt;Easily add additional extensions including a leaderboard to view a list of users with the most money on your server + more&lt;/li&gt;
&lt;li&gt;Completely customizable with access to source code&lt;/li&gt;
&lt;li&gt;Free!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encourage and grow engagement in your Discord server with the Basic Discord Economy App. &lt;a href="https://autocode.com/app/starsblaster/economy-app/"&gt;Install it here&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://autocode.com/app/bugattiworld/fancymodbot/"&gt;XMod App&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;To prepare for the growth of your server you will want to install the Xmod App. This bot will give you and your server’s admins access to commands that will make it super simple to fight off spammers and abusive users. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MF2eExGq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/07_top.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MF2eExGq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/07_top.png" alt="XMod logging a banned Discord user, reason and name of the person invoking the command in an embedded message" width="674" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XMod Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to setup moderation bot with the following commands:

&lt;ul&gt;
&lt;li&gt;/ban &amp;lt;user&amp;gt; &amp;lt;reason&amp;gt; - will ban the mentioned Discord user.&lt;/li&gt;
&lt;li&gt;/kick &amp;lt;user&amp;gt; &amp;lt;reason&amp;gt; - will kick the mentioned Discord user.&lt;/li&gt;
&lt;li&gt;/mute &amp;lt;user&amp;gt; &amp;lt;reason&amp;gt; - will mute a Discord user by applying a mute role&lt;/li&gt;
&lt;li&gt;/unban &amp;lt;user_id&amp;gt; - will unban a banned Discord user by id&lt;/li&gt;
&lt;li&gt;/unmute &amp;lt;user&amp;gt; - will unmutes a Discord user by removing their mute role &lt;/li&gt;
&lt;li&gt; /warn &amp;lt;user&amp;gt; &amp;lt;warning&amp;gt; - will send the mentioned Discord user a warning&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Set up prefix, slash commands, or both!&lt;/li&gt;
&lt;li&gt;The warned, kicked, muted, and banned user will receive a direct message&lt;/li&gt;
&lt;li&gt;Includes a logging system to keep a record of who was banned, muted, kicked, and warned and by whom&lt;/li&gt;
&lt;li&gt;Completely customizable with access to source code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://autocode.com/app/bugattiworld/fancymodbot/"&gt;Install the XModd app template&lt;/a&gt; and maintain a fun and enjoyable environment as your server grows with easy-to-use moderation commands! &lt;/p&gt;

&lt;h2&gt;
  
  
  5. &lt;a href="https://autocode.com/app/magma69/ticketing/"&gt;Advanced Ticketing System&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;As your server grows you will notice that the number of questions you receive will increase! Thanks to the Advanced Ticketing System you will be ready to handle all questions and requests in an organized manner. This template is a free, open-source, and fully customizable alternative to popular paid bots like Ticket Tool, TicketsBot, and Helper.gg.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lYVqf8_h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/08_top.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lYVqf8_h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/08_top.png" alt="Advanced Ticketing System’s panel with five buttons for giveaways, claiming rewards, reports and general help" width="730" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced Ticketing System features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reaction panels with Buttons - allow for your community members to open support tickets with a single click &lt;/li&gt;
&lt;li&gt;Create tickets based on a topic including giveaways, claiming rewards, reports, and general help&lt;/li&gt;
&lt;li&gt;Complete with slash commands - your moderators/admins can claim, rename, and close support tickets with a quick slash command&lt;/li&gt;
&lt;li&gt;Transcripts - automatically saves a transcript of opened and closed tickets in a channel of your choice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start managing support tickets in your server efficiently by installing this &lt;a href="https://autocode.com/app/magma69/ticketing/"&gt;Discord bot template&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  How to add bots to Discord
&lt;/h2&gt;

&lt;p&gt;To install any one of these Discord Bot templates, first, make a free account at &lt;a href="https://autocode.com/"&gt;Autocode&lt;/a&gt; if you don’t already have one. &lt;/p&gt;

&lt;p&gt;Read the instructions in the ReadMe.md section of the template you’d like to use to create your Discord bot. &lt;/p&gt;

&lt;p&gt;Once you read through the instructions and are ready to install, select the green Install Free button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4egOhUG8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/09_top.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4egOhUG8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/2022-03-29/09_top.png" alt="Install Free and View Source buttons displayed for every app template on Autocode.com" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, Link your Discord account by clicking the red required button. If this is your first time linking a Discord account on Autocode, select Link a New Resource. And follow the instructions in the popup window carefully as it will walk you through the following steps to create a Discord Application and link it to your Autocode account. Or watch the video here: &lt;a href="https://youtu.be/zvKzM_mb_v4?t=49"&gt;https://youtu.be/zvKzM_mb_v4?t=49&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Support for adding Discord bots
&lt;/h2&gt;

&lt;p&gt;I hope that you have found our top 5 Discord bots for improving and growing your server helpful! If you are interested in finding additional open-source templates for assigning roles, creating reaction roles, leveling systems, web dashboards, and scheduling events check out the &lt;a href="https://autocode.com/apps/"&gt;templates published by our community here&lt;/a&gt;. If you come across any issues while installing or customizing these Discord bot templates, please join our &lt;a href="https://discord.gg/6Ac5sKYH"&gt;Discord server&lt;/a&gt; and ask our #support-request channel. Or send a DM to janeth#2189!&lt;/p&gt;

</description>
      <category>discord</category>
      <category>bots</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>How to Program Discord Message Embeds with Buttons</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Tue, 18 Jan 2022 04:16:38 +0000</pubDate>
      <link>https://dev.to/janeth/how-to-program-discord-message-embeds-with-buttons-49dm</link>
      <guid>https://dev.to/janeth/how-to-program-discord-message-embeds-with-buttons-49dm</guid>
      <description>&lt;p&gt;Hey there Autocoder! If you are reading this tip of the week to level up your Discord bot development skills, I assume that you have already completed our first guide &lt;a href="https://autocode.com/guides/how-to-build-a-discord-bot/" rel="noopener noreferrer"&gt;“How to build a free Discord bot with Node.js.”&lt;/a&gt; If you have not, I highly recommend you complete it first. It covers creating a Discord bot, linking accounts, creating slash commands, and so much more that we will build on top of.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you'll learn
&lt;/h2&gt;

&lt;p&gt;Today we will learn how to &lt;a href="https://autocode.com/autocode/threads/how-to-program-discord-message-embeds-with-buttons-tutorial-e2bebfed/" rel="noopener noreferrer"&gt;program buttons&lt;/a&gt;. We will add functionality to our Discord bot so that it replies to a prefix command like &lt;strong&gt;!addrole&lt;/strong&gt;. It will post a message embed into the Discord channel where the command was invoked. The embed will contain buttons and upon selection, a role will be added to the user pressing the button. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F%21role.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F%21role.png" alt="Embed Example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A Discord bot built on Autocode using this &lt;a href="https://autocode.com/guides/how-to-build-a-discord-bot/" rel="noopener noreferrer"&gt;guide&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;The ambition to level up your Discord Bot development!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Let’s get started!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Mocking up Embed Messages with Buttons
&lt;/h2&gt;

&lt;p&gt;First, let’s mock up the message our bot will send. Head on over to the &lt;a href="https://autocode.com/tools/discord/embed-builder" rel="noopener noreferrer"&gt;embed builder&lt;/a&gt;. For this example, we'll set a simple embed message with a title, description, and two buttons.&lt;/p&gt;

&lt;p&gt;In the Components section, select &lt;code&gt;Button&lt;/code&gt;, give it a &lt;code&gt;style&lt;/code&gt;, &lt;code&gt;label&lt;/code&gt; and a&lt;code&gt;custome_id&lt;/code&gt;  This custom id is unique to your button and you will use it again to handle the request when a user presses one of the buttons. I have set my custom id as &lt;code&gt;dev_button_id&lt;/code&gt; and &lt;code&gt;techie_button_id&lt;/code&gt; for my buttons. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2Fembed.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2Fembed.png" alt="Embed Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once your embed message looks perfect toggle the &lt;code&gt;view code&lt;/code&gt; button on the top right. This is the code that will execute when a user invokes a command.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2FViewCode.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2FViewCode.png" alt="View Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To set it up, copy this code, and head on over to your &lt;a href="https://autocode.com/dashboard" rel="noopener noreferrer"&gt;dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lib&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="s1"&gt;lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;&lt;span class="na"&gt;token&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;STDLIB_SECRET_TOKEN&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channels&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.2.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;messages&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;channel_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;content&lt;/span&gt;&lt;span class="dl"&gt;"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;components&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;components&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;style&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Developer`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`dev_button_id`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;disabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;emoji&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`🧑`&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;style&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Techie`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`techie_button_id`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;disabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;emoji&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`😎`&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&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="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;embeds&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rich&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Select Your Desired Role`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`What best describes you`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x00FFFF&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Step Two: Creating an Endpoint to Handle a Prefix Command
&lt;/h2&gt;

&lt;p&gt;Click the project you built when completing the first tutorial &lt;a href="https://autocode.com/guides/how-to-build-a-discord-bot/" rel="noopener noreferrer"&gt;“How to build a free Discord bot with Node.js.”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;New Endpoint&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Set your &lt;strong&gt;trigger&lt;/strong&gt; to Discord and your event as &lt;strong&gt;message.create.prefix&lt;/strong&gt;. A prefix input will appear, which we'll set as !role or whatever you wish your prefix command to be. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2Fprefix.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2Fprefix.png" alt="Prefix"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hit the blue &lt;strong&gt;Okay&lt;/strong&gt; to finish setting the trigger. &lt;/p&gt;

&lt;p&gt;Replace the existing code with the code generated from the embed builder in step 1 and press the orange save button.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2Fcode.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2Fcode.png" alt="Code Example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great! We've created an endpoint that will handle a request whenever a user types !role in any channel.&lt;/p&gt;

&lt;p&gt;Notice that we included the lib node package on line one which allows us to make the request to &lt;code&gt;await lib.Discord.channels['@0.2.0'].messages.create&lt;/code&gt; API. This API will post our message back to the channel that sent the prefix command because &lt;code&gt;${context.params.event.channel_id}&lt;/code&gt; is populated with the data coming in from Discord. &lt;/p&gt;

&lt;p&gt;Now we can test the prefix command by heading over to Discord and posting a message with our prefix command like so: !role&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F%21role.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2F%21role.png" alt="Embed Example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great work so far! But you’ll notice that nothing will happen when you select a button. That is because we haven’t created the endpoint that will handle our request when a message button is clicked! Let’s go do that next. &lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Create an Endpoint to Handle Button Interactions
&lt;/h2&gt;

&lt;p&gt;Head back to your project in Autocode and select a new endpoint. Set your trigger as &lt;strong&gt;Discord&lt;/strong&gt; and your event as &lt;strong&gt;message.button.interaction&lt;/strong&gt;. A &lt;code&gt;custom_id&lt;/code&gt; input will appear. This is where you place the &lt;code&gt;custom_id&lt;/code&gt; of one of your buttons. I will begin programming my developer button that has the &lt;code&gt;dev_button_id.&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;Hit the blue &lt;strong&gt;Okay&lt;/strong&gt; to finish setting the trigger.&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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2FbuttonInteraction.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2FbuttonInteraction.png" alt="Button Interaction Handler"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we need to add the code which will give our user the Developer role upon selecting the button. We will use the &lt;a href="https://autocode.com/lib/discord/guilds/#members-roles-update" rel="noopener noreferrer"&gt;members.roles.update()&lt;/a&gt; method from the discord/guilds API. &lt;/p&gt;

&lt;p&gt;Copy this block of code onto the message.button.interaction handler. &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lib&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="s1"&gt;lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;&lt;span class="na"&gt;token&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;STDLIB_SECRET_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;guilds&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.1.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;members&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;role_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;``&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// required&lt;/span&gt;
  &lt;span class="na"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// required &lt;/span&gt;
  &lt;span class="na"&gt;guild_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;guild_id&lt;/span&gt; &lt;span class="c1"&gt;// required&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channels&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.2.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;messages&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;channel_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`The Developer role has been assigned to &amp;amp;lt;@!&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;gt;!`&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="s2"&gt;```

On **line 4** in between the backticks, you will input the id for the role you wish to grant when a user presses the button. 

And a quick way to find your role’s id is by typing the role in Discord then adding a backslash before the role like this \@role.  

![Role Id](https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/roleId.png)

Your code should look like this with your unique role id on line 4. Press the orange save button.

![Button Handler Code](https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/code2.png)

On **lines 3 - 7** we are making a request to **members.roles.update.** In the argument for `&lt;/span&gt;&lt;span class="nx"&gt;role_id&lt;/span&gt;&lt;span class="s2"&gt;`, we pass in the unique id of the role we want to assign when a user selects the button. We also identify the user we want to assign with `&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;` 

On **lines 9 - 12** we then make a request to **message.create** to post a message confirming that the developer role was assigned. We post the message to the channel where the button was invoked by passing in `&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel_id&lt;/span&gt;&lt;span class="s2"&gt;` into `&lt;/span&gt;&lt;span class="nx"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;` For the `&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="s2"&gt;` argument we pass in a string and we use backticks for this  since we are using a [template literal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) to retrieve the user id with `&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="s2"&gt;` 

We use `&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="s2"&gt;` and `&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel_id&lt;/span&gt;&lt;span class="s2"&gt;` because all Discord endpoints on Autocode have a **context.params.event** property that holds all the data for the specific event. In this instance, the event is a button interaction. When that button is pressed, Discord sends a unique payload of data to your endpoint. A sample of that data can be seen when you press the `&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="s2"&gt;` button to the bottom right of Autocode. 

We use [dot notation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors) to extract  the user id from this payload like this `&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;`

![Sample Payload](https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/samplePayload.png)

Keep in mind that every endpoint receives a unique payload of data. The way you retrieved the user id for this endpoint is not the same as retrieving it when using other endpoints like message.create. You must check the sample payload or log your event to the console using `&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="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="s2"&gt;`

Great now that you’ve programmed your button, it’s time to test on Discord! 

Select the button and watch as your bot successfully gives you a role and confirm with a message.

![Developer Button](https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/DeveloperButton.png)

![Role Update](https://janethl.public.files.stdlib.com/_stdlib/provider/JanethL/images/roleUpdate.png)

Amazing! You have successfully programmed your first button on Autocode! You can now repeat the same steps to program the second button.

## Step 4: Repeating the Process to Program More Buttons

Create another endpoint for **message.button.interaction** and in the input for `&lt;/span&gt;&lt;span class="nx"&gt;custom_id&lt;/span&gt;&lt;span class="s2"&gt;`, type in the second button’s `&lt;/span&gt;&lt;span class="nx"&gt;custom_id&lt;/span&gt;&lt;span class="s2"&gt;`.

Replace the auto-generated code with the following.

```&lt;/span&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lib&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="s1"&gt;lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;&lt;span class="na"&gt;token&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;STDLIB_SECRET_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;guilds&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.1.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;members&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;role_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;``&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// required&lt;/span&gt;
  &lt;span class="na"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// required &lt;/span&gt;
  &lt;span class="na"&gt;guild_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;guild_id&lt;/span&gt; &lt;span class="c1"&gt;// required&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;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channels&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.2.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;messages&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;channel_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`The Techie role has been assigned to &amp;amp;lt;@!&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;gt;!`&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt; 



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Press the orange save button. &lt;/p&gt;

&lt;p&gt;You are on a roll! Time to test if it all works as expected! Head back to your discord server and press the second button. &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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2Ftechie.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%2Fjanethl.public.files.stdlib.com%2F_stdlib%2Fprovider%2FJanethL%2Fimages%2Ftechie.png" alt="Second Button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have learned to program buttons on Autocode! You should be very proud of yourself for leveling up your Discord bot development skills!&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Tips
&lt;/h2&gt;

&lt;p&gt;The possibilities are infinite now that you know how to program buttons and have access to &lt;a href="https://autocode.com/lib/discord/" rel="noopener noreferrer"&gt;Discord’s APIs on Autocode&lt;/a&gt;. Take some time to explore each API and discover different actions you can invoke via Discord button interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to remove a role from a user after button is pressed
&lt;/h3&gt;

&lt;p&gt;If you’d like to remove a role from a user once a button is pressed use &lt;a href="https://autocode.com/lib/discord/guilds/#members-roles-destroy" rel="noopener noreferrer"&gt;members.roles.destory()&lt;/a&gt; method from the discord/guilds API. &lt;/p&gt;

&lt;h3&gt;
  
  
  How to disable buttons after a button is pressed
&lt;/h3&gt;

&lt;p&gt;I want to disable the developer button after it has been clicked. Therefore I make a request to &lt;strong&gt;message.update&lt;/strong&gt; inside my &lt;strong&gt;message.button.interaction&lt;/strong&gt; endpoint for the specific button I want to disable. I set the &lt;code&gt;disabled&lt;/code&gt; field inside components to &lt;code&gt;true&lt;/code&gt; and paste the following code at the end of my previous code. &lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channels&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@0.2.2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;br&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;channel_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;content&lt;/span&gt;&lt;span class="dl"&gt;"&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;br&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;components&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;br&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;components&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;br&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;style&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&lt;code&gt;Developer&lt;/code&gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&lt;code&gt;dev_button_id&lt;/code&gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;disabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;emoji&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;br&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&lt;code&gt;👨&lt;/code&gt;&lt;/span&gt;&lt;br&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&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;br&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;&lt;br&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;style&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&lt;code&gt;Techie&lt;/code&gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&lt;code&gt;techie_button_id&lt;/code&gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;disabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;emoji&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;br&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&lt;code&gt;😎&lt;/code&gt;&lt;/span&gt;&lt;br&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;&lt;br&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&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;br&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;&lt;br&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;embeds&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;br&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rich&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&lt;code&gt;Select Your Desired Role&lt;/code&gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&lt;code&gt;What best describes you&lt;/code&gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x00FFFF&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;});&lt;/span&gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Thank You!&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;Thank you for building with us!  If you have additional questions regarding creating prefix commands, message embeds, updating roles, or anything else, don’t hesitate to ask us on our &lt;a href="https://discord.gg/UjJAmdN3uZ" rel="noopener noreferrer"&gt;Discord Developer server&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>discord</category>
      <category>bots</category>
      <category>coding</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Solving Coding Challenges with JavaScript Functions on Autocode</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Fri, 25 Jun 2021 17:43:10 +0000</pubDate>
      <link>https://dev.to/janeth/solving-coding-challenges-with-javascript-functions-on-autocode-4l61</link>
      <guid>https://dev.to/janeth/solving-coding-challenges-with-javascript-functions-on-autocode-4l61</guid>
      <description>&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F0%2Ad_cP9PQKZRQJOJuJ.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F0%2Ad_cP9PQKZRQJOJuJ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://janethl.medium.com/my-journey-to-becoming-a-software-engineer-91415b5e1210" rel="noopener noreferrer"&gt;In my first blog&lt;/a&gt;, I wrote about the many factors influencing my decision to join General Assembly's coding Bootcamp. I also committed to blogging about my journey and writing tutorials because teaching is the best way to reinforce learning. As promised, here is an update on my progress during the 12 week General Assembly Software Engineering Immersive program. This tutorial will cover my favorite topic in Unit 1 --- JavasScript and functions!&lt;/p&gt;

&lt;p&gt;We've been zooming through every day and week, and while it's been challenging to intake so much information in such a short period of time, I'm loving the program's curriculum and structured daily agenda. Our 12 weeks are broken down into 4 units that cover fundamental technologies for full-stack application building.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2Aaf-JKBnogTKAkwtr7r1SDw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2Aaf-JKBnogTKAkwtr7r1SDw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, we will apply some of the tips that I've learned through General Assembly to strengthen our JavaScript skills and to approach solving coding challenges.&lt;/p&gt;

&lt;p&gt;Let's get started! 🧑🏽‍💻👩🏽‍💻 👇🏼&lt;/p&gt;

&lt;h3&gt;
  
  
  Intro to JavaScript Functions
&lt;/h3&gt;

&lt;p&gt;JavaScript is an essential programming language. These days, you can do everything with it: from selecting and manipulating elements on a website to setting up Node.js servers that can handle millions of requests per second. But before we can begin leveraging the power of JavaScript, we need to master functions.&lt;/p&gt;

&lt;p&gt;Functions are fundamental building blocks of JavaScript. They are reusable blocks of code that we can leverage throughout our applications as many times as we need to create our desired functionality. Today we will practice solving &lt;strong&gt;3&lt;/strong&gt; &lt;strong&gt;challenge JavaScript problems with functions.&lt;/strong&gt; We will follow four steps to solve each problem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Carefully read the problem to understand it&lt;/li&gt;
&lt;li&gt; Use pseudocode to craft a plan for solving the problem&lt;/li&gt;
&lt;li&gt; Code it out on &lt;a href="https://autocode.com/" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Test and Deploy your solution on &lt;a href="https://autocode.com/" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've chosen to code on &lt;a href="http://AUtocode.com" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt; to help us better understand the power of functions. &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt; is an online code editor and hosting platform that will allow us to easily publish our functions and make them accessible via the web without worrying about setting up hosting through third-party services. Autocode will automatically turn our JavaScript functions into HTTP(S) &lt;strong&gt;endpoints&lt;/strong&gt;. 🤯&lt;/p&gt;

&lt;p&gt;Let's get started! 👩🏽‍💻&lt;/p&gt;

&lt;h3&gt;
  
  
  First ... set up your free account on Autocode
&lt;/h3&gt;

&lt;p&gt;Head on over to &lt;a href="https://autocode.com/signup/" rel="noopener noreferrer"&gt;Autocode.com&lt;/a&gt; and sign up for a free account. Choose a subdomain where your projects will be hosted and set a password.&lt;/p&gt;

&lt;p&gt;Once you've signed up, navigate to your &lt;a href="https://autocode.com/manage/apps/" rel="noopener noreferrer"&gt;&lt;strong&gt;Project Management&lt;/strong&gt;&lt;/a&gt; dashboard and click &lt;strong&gt;New Project.&lt;/strong&gt;&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2ABV5FW62F10fbUNptvYqrHA.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2ABV5FW62F10fbUNptvYqrHA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will be creating endpoints for each of the 3 functions that we will be coding. An endpoint is a means for you and other external apps to communicate with your system to perform certain actions by making HTTP requests to the URL representing it.&lt;/p&gt;

&lt;p&gt;You'll be brought into &lt;a href="http://autocode.com" rel="noopener noreferrer"&gt;Autocode's&lt;/a&gt; IDE; this is where we will write the logic to solve 3 challenge problems.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AdRMuW1bQMjZhdG7y6BSD6g.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AdRMuW1bQMjZhdG7y6BSD6g.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From here, there are a few pieces to point out;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The &lt;strong&gt;Event selector is at the top&lt;/strong&gt;. Here you can choose what type of event will execute the code in your endpoint. For this tutorial, we will use the default, which is a normal HTTP request.&lt;/li&gt;
&lt;/ul&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AKjU5lg-b60EaoLpy2Eeltw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AKjU5lg-b60EaoLpy2Eeltw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  When you press the green "Run" button, you will be prompted to name your project. Name it &lt;code&gt;functions&lt;/code&gt; for the tutorial and hit &lt;strong&gt;Save new project&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AdEKyBiCfpaTAK_Uv-VfVww.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AdEKyBiCfpaTAK_Uv-VfVww.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You'll notice the endpoint URL show up at the bottom of the file. This is where your endpoints will live on the web.&lt;/li&gt;
&lt;/ul&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AH-2hrjs3FVlX0j3iOyOirw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AH-2hrjs3FVlX0j3iOyOirw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The Endpoint viewer window shows up in the bottom right. This will show you the results of your endpoint execution. You can use it to view logs as well.&lt;/li&gt;
&lt;li&gt;  All Autocode endpoints are immediately available on the web once they're saved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Great, now that you have set up your coding environment, we can begin with &lt;strong&gt;Challenge Problem #1!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's tackle it together! 🤜🏼🤛🏼&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge Problem #1: Greatest Common Factor:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Carefully read the problem to understand it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write a function that returns the greatest common factor between &lt;code&gt;**num1**&lt;/code&gt; and &lt;code&gt;**num2**.&lt;/code&gt; This means that the function should return the largest number that divides both &lt;code&gt;**num1**&lt;/code&gt; and &lt;code&gt;**num2**.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For example, if we pass in the number 6 and number 10 into our function, our function should return 2. Inputting 4 and 8 should return 4 etc...&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="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 2&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 4&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's prepare our coding environment. Head back to &lt;a href="http://autocode.com" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt;. Create a new endpoint by right-clicking the &lt;code&gt;functions&lt;/code&gt; folder on the left of the browser and selecting &lt;code&gt;New endpoint file&lt;/code&gt;.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AvBYfxXUxi6G0qBW3JXLezg.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AvBYfxXUxi6G0qBW3JXLezg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Name your file &lt;code&gt;functions/greatestCommonFactor.js&lt;/code&gt; as I have:&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AwTMzPcKLuNVcebf3q6d6dA.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AwTMzPcKLuNVcebf3q6d6dA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will notice that your new file is pre-populated with a sample hello world function.&lt;/p&gt;

&lt;p&gt;Let's take a moment to analyze and understand how this function is created.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AB0Rsu1x9H0wFnC3C-hBCoQ.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AB0Rsu1x9H0wFnC3C-hBCoQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The comment in &lt;code&gt;line 1--6&lt;/code&gt; defines the &lt;code&gt;parameter&lt;/code&gt;types that the function takes and the &lt;code&gt;return&lt;/code&gt; type. In this sample, the function is expecting a &lt;code&gt;name&lt;/code&gt;parameter of type &lt;code&gt;string&lt;/code&gt; and it will return a &lt;code&gt;body&lt;/code&gt; of type &lt;code&gt;object.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;line 7&lt;/code&gt; is exporting our function with a&lt;code&gt;module.exports&lt;/code&gt; method. Let's check it out. Change the name in &lt;code&gt;line 7&lt;/code&gt; to your name as I have in the screenshot.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AaTPhMtE1uJdg3ah4V8HP2Q.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AaTPhMtE1uJdg3ah4V8HP2Q.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Press the green &lt;code&gt;run&lt;/code&gt; button to test out this sample function. You will see your code executed in the Endpoint viewer window with "Hello &lt;code&gt;&amp;lt;yourName&amp;gt;&lt;/code&gt;, welcome to Autocode!" message.&lt;/p&gt;

&lt;p&gt;You can also click the autogenerated endpoint URL on the bottom left, and a new window will open in the browser to display the message:&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AOUnHV4h7tqdhWiHx3GQOEw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AOUnHV4h7tqdhWiHx3GQOEw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can test passing a &lt;code&gt;name&lt;/code&gt; parameter into your function via the URL and press enter to reload the page as I have: &lt;code&gt;?name=Student&lt;/code&gt;&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2ALtoSi6MgrI4hoq7Tx4okwg.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2ALtoSi6MgrI4hoq7Tx4okwg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's that simple to deploy reusable functions through &lt;a href="http://Autocode" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt;! If you would like to dive deeper into Autocode's framework, check out &lt;a href="https://github.com/acode/FunctionScript" rel="noopener noreferrer"&gt;FunctionScript on Github&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Now that we understand how to set up functions on &lt;a href="http://autocode.com" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt; let's begin solving our first challenge problem!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Use pseudocode to craft a plan for solving the problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, let's begin planning our execution with pseudocode. Pseudocode is a technique that helps programmers plan out an algorithm in a manner that is easy to understand. Pseudocode does not use any coding syntax, but it fully describes the necessary logic to build our functions. This facilitates implementation because we'll translate each line into code using the JavaScript Syntax...easy, right?&lt;/p&gt;

&lt;p&gt;Let's try it!&lt;/p&gt;

&lt;p&gt;Reread the problem as many times as needed and begin pseudocoding when ready:&lt;/p&gt;

&lt;p&gt;Write a function that returns the greatest common factor between &lt;code&gt;**num1**&lt;/code&gt; and &lt;code&gt;**num2**.&lt;/code&gt;This means that the function should return the largest number that divides both &lt;code&gt;**num1**&lt;/code&gt; and &lt;code&gt;**num2**.&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;For example, if we pass in the number 6 and number 10 into our function, our function should return 2. Inputting 4 and 8 should return 4 etc...&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="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 2&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 4&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pseudocode:&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;//First we need to define the functions expected parameters and return types in a comment&lt;/span&gt;

&lt;span class="c1"&gt;//Then we use module.exports to export our function and pass in two numbers (num1, num2) as parameters&lt;/span&gt;

&lt;span class="c1"&gt;//We will set a for loop with the iterator (i) set to num1&lt;/span&gt;

&lt;span class="c1"&gt;//As long as i is greater or equal to 1 continue the for loop&lt;/span&gt;

&lt;span class="c1"&gt;//Everytime the for loop continues decrement i by 1&lt;/span&gt;

&lt;span class="c1"&gt;//As we decrement we check to see if num1 modulo i is equal to zero and if num2 modulo i is equal to zero&lt;/span&gt;

&lt;span class="c1"&gt;//If both conditions are met then we will return i&lt;/span&gt;

&lt;span class="c1"&gt;//If the conditions aren't met then we have our for loop continue decrementing until both are both are met&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Code it out on&lt;/strong&gt; &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Autocode&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that we've planned out how to solve our challenge problem, we're ready to code it out.&lt;/p&gt;

&lt;p&gt;Delete the sample hello world function inside the IDE.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AB0Rsu1x9H0wFnC3C-hBCoQ.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AB0Rsu1x9H0wFnC3C-hBCoQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Translate your pseudocode approach to JavaScript syntax inside the IDE as I have:&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="cm"&gt;/**
* My greatestCommonFactor function 
* @param {number} num1 First number
* @param {number} num2 Second number
* @returns {number} i
*/&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;num2&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="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;num1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num1&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;num2&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;i&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Test and Deploy your solution on&lt;/strong&gt; &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Autocode&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the &lt;strong&gt;Payload&lt;/strong&gt; button on the bottom right. Set test parameters by creating an object setting &lt;code&gt;num1&lt;/code&gt; and &lt;code&gt;num2&lt;/code&gt; as your keys and give them any two numbers you'd like. I've chosen &lt;code&gt;1550 and 1000&lt;/code&gt;.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A1FMQ7qtdwjZrS0oNugj2Gw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A1FMQ7qtdwjZrS0oNugj2Gw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the green &lt;strong&gt;Run&lt;/strong&gt; button once you've set your test parameters. The greatest common factor of &lt;code&gt;1550&lt;/code&gt; and &lt;code&gt;1000&lt;/code&gt; is in fact &lt;code&gt;50&lt;/code&gt;! Great Job. ⭐️&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A136yVQo99stV8FMI1oPFzA.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A136yVQo99stV8FMI1oPFzA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see your function live by clicking the autogenerated URL on the bottom left via your functions docs. To view the docs, select &lt;strong&gt;Advanced Settings&lt;/strong&gt; in the bottom left cornerand then &lt;strong&gt;Generated API Reference.&lt;/strong&gt;&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A0-seeSrkHB0kQt89-39YEA.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A0-seeSrkHB0kQt89-39YEA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can test passing in different numbers in the parameters sections and &lt;strong&gt;Run&lt;/strong&gt; yourfunctionto check the greatest common factor as times as your heart desires.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AP62uCXw3wgtdmbsxl45ljA.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AP62uCXw3wgtdmbsxl45ljA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breakdown of our Solution to challenge problem #1:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 1--6:&lt;/strong&gt; We set type &lt;code&gt;number&lt;/code&gt; for &lt;code&gt;num1&lt;/code&gt; and &lt;code&gt;num2&lt;/code&gt; and a return type of &lt;code&gt;number&lt;/code&gt; for &lt;code&gt;i&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 8:&lt;/strong&gt; We export our async function with &lt;code&gt;module.exports&lt;/code&gt; and pass in our two parameters &lt;code&gt;(num1, num2).&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 9:&lt;/strong&gt; We use a &lt;code&gt;for loop&lt;/code&gt; and declare &lt;code&gt;num1&lt;/code&gt; to be our iterator &lt;code&gt;i&lt;/code&gt;, as long as &lt;code&gt;i&lt;/code&gt; is greater or equal to &lt;code&gt;1&lt;/code&gt; we run our for loop and decrement by &lt;code&gt;1.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 10:&lt;/strong&gt; Our &lt;code&gt;if&lt;/code&gt; statement checks to see if &lt;code&gt;num1&lt;/code&gt; modulo &lt;code&gt;i&lt;/code&gt; is equal to zero, and if &lt;code&gt;num2&lt;/code&gt; modulo &lt;code&gt;i&lt;/code&gt; equal to zero.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 11:&lt;/strong&gt; If either condition&lt;code&gt;num1 % i === 0&lt;/code&gt; or &lt;code&gt;num2 % i === 0&lt;/code&gt; returns &lt;code&gt;false&lt;/code&gt; our loop continues and the following &lt;code&gt;return&lt;/code&gt; statement is ignored. When our &lt;code&gt;if&lt;/code&gt; condition returns &lt;code&gt;true,&lt;/code&gt;that means that both conditions are met, and then we &lt;code&gt;return&lt;/code&gt; the iterator &lt;code&gt;i&lt;/code&gt;. The iterator &lt;code&gt;i&lt;/code&gt; is our greatest common factor between &lt;code&gt;num1&lt;/code&gt; and &lt;code&gt;num2&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;We did it! 🙌 Congrats! We solved Problem #1. The rest should be a breeze now that you are familiar with Autocode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge Problem #2:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Take your time reading the problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write a function that takes in a name as a string and returns a string representing their nickname. A nickname is the name up to the second vowel repeated twice. See the examples.&lt;/p&gt;

&lt;p&gt;Examples:&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Jacob&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 'JACO-JACO'&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pikachu&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 'PIKA-PIKA'&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;janeth&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 'JANE-JANE'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Begin strategizing with pseudocode!&lt;/strong&gt;&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;//First define the functions expected parameter and return type in a comment above the function&lt;/span&gt;

&lt;span class="c1"&gt;//Use module.exports to export the function and pass in a a name as a string&lt;/span&gt;

&lt;span class="c1"&gt;//Create a variable that defines all vowels inside an array&lt;/span&gt;

&lt;span class="c1"&gt;//Create a variable to keep count of vowels and set it equal to 0&lt;/span&gt;

&lt;span class="c1"&gt;//Use for loop to count through every letter in the string (name)&lt;/span&gt;

&lt;span class="c1"&gt;//Create an intermediate variable to save every character in the string&lt;/span&gt;

&lt;span class="c1"&gt;//Inside the for loop condition use indexOf() method to check and count if character is in the index of vowels&lt;/span&gt;

&lt;span class="c1"&gt;//Use toUpperCase() method to convert string to uppercase&lt;/span&gt;

&lt;span class="c1"&gt;//return a string with characters from index 0 to i (including i)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Code it out on&lt;/strong&gt; &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Autocode&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a new endpoint by right-clicking the &lt;code&gt;functions&lt;/code&gt; folder on the left of the browser and select &lt;code&gt;New endpoint file&lt;/code&gt;.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AboDwU39I-hbeJ_BpSXTgXg.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AboDwU39I-hbeJ_BpSXTgXg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Name your file &lt;code&gt;functions/nickname.js&lt;/code&gt; and translate your pseudocode to JavaScript Syntax.&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="cm"&gt;/**
* My nickname function 
* @param {string} name 
* @returns {string} str
*/&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;vowels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AEIOUaeiou&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;vowelCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;char&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; 
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vowels&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="nx"&gt;vowelCount&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vowelCount&lt;/span&gt; &lt;span class="o"&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="k"&gt;break&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="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&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="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;str&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;&lt;strong&gt;Step 3: Test and Deploy your solution on&lt;/strong&gt; &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Autocode&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pass in a test &lt;code&gt;name&lt;/code&gt;parameter and select the green &lt;code&gt;Run&lt;/code&gt; button on &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt; to view the results on the console.&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AgYL3SWgG7GFo3hH70ID11w.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AgYL3SWgG7GFo3hH70ID11w.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And sure enough, when testing different names result in nicknames! 😃&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AR9c5YsLOwDgQNw7xZNznqA.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AR9c5YsLOwDgQNw7xZNznqA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Jacob); // =&amp;gt; 'JACO-JACO'&lt;/p&gt;

&lt;p&gt;(pikachu); // =&amp;gt; 'PIKA-PIKA'&lt;/p&gt;

&lt;p&gt;(janeth); // =&amp;gt; 'JANE-JANE'&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breakdown of our Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 1--5&lt;/strong&gt;: We set a parameter type &lt;code&gt;string&lt;/code&gt; for &lt;code&gt;name&lt;/code&gt; and a return type of &lt;code&gt;string&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 7:&lt;/strong&gt; Weexport our async function with &lt;code&gt;module.exports&lt;/code&gt; and pass in our &lt;code&gt;(name)&lt;/code&gt; parameter&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 8:&lt;/strong&gt; We define our vowels and use the split method to break our string of vowels into an array&lt;/p&gt;

&lt;p&gt;vowels = [ 'A', 'E', 'I'...,'a', 'e', 'i'...]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 9:&lt;/strong&gt; We set our count equal to zero&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 10:&lt;/strong&gt; We use a &lt;code&gt;for loop&lt;/code&gt; to iterate through every character in &lt;code&gt;name&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 11:&lt;/strong&gt; We set an intermediate variable to return every character in the string&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 12:&lt;/strong&gt; The if condition checks to see if a character is found in the index of vowels: &lt;code&gt;vowels.indexOf(char)&lt;/code&gt; and returns the char location in the vowels array. If the char isn't in the index of vowels, then a -1 is returned, and the loop continues to the next character. If its location is greater than -1, then the logic continues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 13:&lt;/strong&gt; If the location is greater than &lt;code&gt;-1&lt;/code&gt; we increment our &lt;code&gt;vowelCount&lt;/code&gt; by one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 14:&lt;/strong&gt; We check to see if the &lt;code&gt;vowelCount&lt;/code&gt; is 2, if &lt;code&gt;false&lt;/code&gt; is returned, we skip the &lt;code&gt;if&lt;/code&gt; statement and move on to the next letter, if &lt;code&gt;true&lt;/code&gt; is returned that means that we have now counted two vowels, and we break out of the &lt;code&gt;for loop.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 20:&lt;/strong&gt; We use the &lt;code&gt;slice()&lt;/code&gt; method to grab the characters starting at &lt;code&gt;index 0&lt;/code&gt; and ending at &lt;code&gt;i&lt;/code&gt;, we add &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;i&lt;/code&gt; because the &lt;code&gt;slice&lt;/code&gt; method doesn't include the end value. We also use &lt;code&gt;toUpperCase()&lt;/code&gt; method to convert all the letters in our string to uppercase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 21:&lt;/strong&gt; We &lt;code&gt;return&lt;/code&gt; the string plus a dash plus another string to have our result resemble the examples in the question&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge Problem #3: Odd Ones Out
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Read Carefully.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write a function that takes in an array of strings and returns a new array containing only elements that appeared an even number of times in the input array.&lt;/p&gt;

&lt;p&gt;Examples:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;
&lt;span class="nf"&gt;oddOnesOut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; [ 'b', 'd' ]&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fish&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fish&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cat&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;
&lt;span class="nf"&gt;oddOnesOut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; [ 'fish' ] &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 1: Pseudo Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's strategize!&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;//Create a helper function to count our elements in an array&lt;/span&gt;

&lt;span class="c1"&gt;//The helper function has one parameter that takes in an array of strings&lt;/span&gt;

&lt;span class="c1"&gt;//Use a for loop in the helper function to count our elements in the array&lt;/span&gt;

&lt;span class="c1"&gt;//Create and export a second function with a for loop to count the even elements&lt;/span&gt;

&lt;span class="c1"&gt;//Push the even elements into a new array&lt;/span&gt;

&lt;span class="c1"&gt;//Return that new array&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Code it out on&lt;/strong&gt; &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Autocode&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a new endpoint by right-clicking the &lt;code&gt;functions&lt;/code&gt; folder on the left of the browser and select &lt;code&gt;New endpoint file&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Name it &lt;code&gt;functions/oddOnesOut.js.&lt;/code&gt; Delete the sample function and translate your pseudocode to JavaScript syntax as I have:&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="cm"&gt;/**
* My oddOnesOut function 
* @param {array} array 
* @returns {array} str
*/&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;elementCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;countObj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;countObj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="nx"&gt;countObj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="nx"&gt;countObj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;countObj&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;elementCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&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;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&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;&lt;strong&gt;Step 3: Test and Deploy your solution on&lt;/strong&gt; &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Autocode&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pass in a test &lt;code&gt;array&lt;/code&gt; parameter inside the payload window:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{"array": ['fish', 'fish', 'dog', 'cat', 'dog', 'dog']}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Select the green &lt;code&gt;Run&lt;/code&gt; button on &lt;a href="http://Autocode.com" rel="noopener noreferrer"&gt;Autocode&lt;/a&gt; to view the results on the console:&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AX5eMeFn0MC4zWTLCDQq81g.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AX5eMeFn0MC4zWTLCDQq81g.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your function will filter the odd elements out and return the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;["fish"]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Great job!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breakdown of Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 1--5&lt;/strong&gt;: We set a parameter type &lt;code&gt;array&lt;/code&gt; for &lt;code&gt;array&lt;/code&gt; and a return type of &lt;code&gt;array&lt;/code&gt; for &lt;code&gt;str&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 7:&lt;/strong&gt; We define a helper function &lt;code&gt;elementCount&lt;/code&gt; that takes in an &lt;code&gt;array&lt;/code&gt; of strings&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 8:&lt;/strong&gt; Wedeclare a &lt;code&gt;countObj&lt;/code&gt; variable and initialize it to an empty object. This is where we store the different counts of elements in an array.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 10:&lt;/strong&gt; We iterate through the array using a &lt;code&gt;for loop&lt;/code&gt;. We declare &lt;code&gt;0&lt;/code&gt; to be our iterator (&lt;code&gt;i&lt;/code&gt;), as long as &lt;code&gt;i&lt;/code&gt; is smaller than the length of our array, we run our for loop and increment by &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 11:&lt;/strong&gt; We set &lt;code&gt;key&lt;/code&gt; as an intermediate variable that will give access to the element as we go through the &lt;code&gt;for loop&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 13:&lt;/strong&gt; We add a condition that checks to see if our &lt;code&gt;countObject&lt;/code&gt; at index &lt;code&gt;key&lt;/code&gt; is undefined. This condition will return &lt;code&gt;true&lt;/code&gt; if the &lt;code&gt;countobject&lt;/code&gt; does not contain the &lt;code&gt;Key&lt;/code&gt; (element) that we're passing in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 14:&lt;/strong&gt; Whenthe condition returns &lt;code&gt;true&lt;/code&gt; we set &lt;code&gt;countObj[Key]&lt;/code&gt; equal to &lt;code&gt;1&lt;/code&gt; If the condition is &lt;code&gt;false&lt;/code&gt; which means that our &lt;code&gt;key&lt;/code&gt; is already in the object, then we ignore this statement and move on to the next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 15- 16:&lt;/strong&gt; If our &lt;code&gt;key&lt;/code&gt; is already stored in the &lt;code&gt;countObj&lt;/code&gt; then we increment our key count by &lt;code&gt;1.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 20:&lt;/strong&gt; We return the &lt;code&gt;coutObj&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 23:&lt;/strong&gt; We export our second function that takes in an array of elements we want to count&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 24:&lt;/strong&gt; We declare a variable &lt;code&gt;count&lt;/code&gt; and set it to the object returned from the previous helper function &lt;code&gt;elementCount(array)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 25:&lt;/strong&gt; We define a variable &lt;code&gt;result&lt;/code&gt; and initialize it to an empty array where we will be pushing the elements that show up an even number of times&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 27:&lt;/strong&gt; We use a &lt;strong&gt;for...in loop&lt;/strong&gt; to iterate through the &lt;code&gt;count&lt;/code&gt; object and check if the key has a value of modulo 0.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A **for...in&lt;/em&gt;* loop is good for looping through all the key-value pairs in an Object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 28:&lt;/strong&gt; We set a variable &lt;code&gt;value&lt;/code&gt; to &lt;code&gt;count[key]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 29:&lt;/strong&gt; Check to see if the &lt;code&gt;key&lt;/code&gt; has a &lt;code&gt;value&lt;/code&gt; modulo &lt;code&gt;0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 30:&lt;/strong&gt; If the condition is true, then we push that &lt;code&gt;key&lt;/code&gt; to our &lt;code&gt;result&lt;/code&gt; variable&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Line 34:&lt;/strong&gt; Return the &lt;code&gt;result&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank you for reading and following my Journey!
&lt;/h3&gt;

&lt;p&gt;That's it for now and thank you for reading! I hope you found this tutorial helpful. I'd love to hear from you if you have any questions. Feel welcome to email me at &lt;a href="mailto:ledezmajane@berkeley.edu"&gt;ledezmajane@berkeley.edu&lt;/a&gt;. I'll be happy to help!&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Build a Meetup Slack App with Standard Library and Node.js</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Tue, 29 Jan 2019 22:20:40 +0000</pubDate>
      <link>https://dev.to/janeth/how-to-build-a-meetup-slack-app-with-standard-library-and-nodejs-1clf</link>
      <guid>https://dev.to/janeth/how-to-build-a-meetup-slack-app-with-standard-library-and-nodejs-1clf</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@janeth_10755/how-to-build-a-meetup-slack-app-with-standard-library-52f96b27d95a"&gt;In this guide&lt;/a&gt;, you will learn how to set up a Slack application that will display information from &lt;a href="https://www.meetup.com/meetup_api/"&gt;Meetup’s API&lt;/a&gt;, which serves stored data from Meetup to other application software.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://meetup.com/"&gt;Meetup&lt;/a&gt; is a popular website where individuals with similar interests form groups to organize events in their local cities. Once we’ve successfully made a request to Meetup’s API, we will receive a response from Meetup, we’ll pull specific data from the JSON payload, and display that data in Slack. We will design our Slack application’s attachment so that it displays the event’s name, description, date and time, location, and more!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OY7mVOio--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AbppC-vl7i0Mg0medcD-eAA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OY7mVOio--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AbppC-vl7i0Mg0medcD-eAA.png" alt="" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it Works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you submit &lt;code&gt;/nextmeetup 94709&amp;amp;javascript&lt;/code&gt; (or any zip code and a topic of interest) in Slack’s message box; a webhook will be triggered. The webhook, built and hosted on Standard Library, will first make a request to Meetup’s API, which will return a JSON payload with results from the query.&lt;/p&gt;

&lt;p&gt;The webhook will then create Slack messages for each event, and post those to a specified channel.&lt;/p&gt;

&lt;p&gt;No need to get overwhelmed! Let’s take it a step at a time!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What You’ll Need:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stdlibworkspace.slack.com/app"&gt;1x Slack Account&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.meetup.com/meetup_api/"&gt;1x Meetup Account&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stdlib.com/"&gt;1x Standard Library Account&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 1: Set up your Slack Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Make sure you’re signed in to &lt;a href="https://slack.com/signin"&gt;Slack&lt;/a&gt; and visit your Slack Apps Dashboard at &lt;a href="https://api.slack.com/apps"&gt;https://api.slack.com/apps&lt;/a&gt;. You’ll see a screen that looks like the following.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DL0lPzot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AuCcRB20AOnwQzUONRrBOCA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DL0lPzot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AuCcRB20AOnwQzUONRrBOCA.png" alt="" width="800" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create New App&lt;/strong&gt;. You’ll be presented with a modal to enter your App Name and the Development Slack Workspace you’d like to add it to.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wK6iARoX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2A5d3PFVbTiD9NO0OwFtWNmw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wK6iARoX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2A5d3PFVbTiD9NO0OwFtWNmw.png" alt="" width="800" height="673"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From here, click &lt;strong&gt;Create App&lt;/strong&gt;, you’ll find yourself on a &lt;strong&gt;Basic Information&lt;/strong&gt; page.&lt;/p&gt;

&lt;p&gt;Scroll down to &lt;strong&gt;Display Information&lt;/strong&gt;. This is where you can give your Slack app a name, description, and an image if you’d like.&lt;/p&gt;

&lt;p&gt;Keep the &lt;strong&gt;Basic Information&lt;/strong&gt; page open in your browser; we’ll be using it in a second to retrieve your Slack app’s credentials to connect this application to the backend logic hosted on Standard Library — the code running your application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 2: Create a Free Standard Library Account&lt;/strong&gt;&lt;br&gt;
We’ll be hosting our Slack application’s code on &lt;a href="https://stdlib.com/"&gt;Standard Library&lt;/a&gt;— the code that will be requesting and receiving specific information from Meetups API. So head on over to &lt;a href="https://code.stdlib.com/"&gt;Code on Standard Library&lt;/a&gt; and claim your free account.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gJR3OnZr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AZVSgFcah91qujGB3L_vlsQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gJR3OnZr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AZVSgFcah91qujGB3L_vlsQ.png" alt="" width="800" height="435"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 3: Copy and Modify the Slack App Code Template on Standard Library&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you’ve logged in or signed up, you will land on &lt;strong&gt;“Featured API Source.”&lt;/strong&gt; These are application code templates available on Standard Library for anyone to easily copy and modify apps. You’re going to select the Slack application code template and modify it to create your API that will power your Slack app.&lt;/p&gt;

&lt;p&gt;Enter a unique name for your API project and hit &lt;strong&gt;Okay&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Brief Explanation of the Slack App Sourcecode Template:&lt;/strong&gt;&lt;br&gt;
Ok great! Let’s pause for a moment to understand what we are looking at. The left sidebar is an API project scaffold that Standard Library has set up for you to build Slack apps.&lt;/p&gt;

&lt;p&gt;The code template for Slack Apps has four directories. For this tutorial, we will only work within the &lt;code&gt;functions&lt;/code&gt; directory which comes equipped with three more folders &lt;code&gt;actions/&lt;/code&gt;, &lt;code&gt;commands/&lt;/code&gt;, and &lt;code&gt;events/&lt;/code&gt;, as well as a single file &lt;code&gt;__main__.js&lt;/code&gt;. The instructions for Slack actions, slash commands, and events for your app live inside those folders.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0D9IakAy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2AcP1iJyYLN2Ph0y2h5TG--w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0D9IakAy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2AcP1iJyYLN2Ph0y2h5TG--w.png" alt="" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you deploy your API, Standard Library will automatically generate HTTPS endpoints (URLs) for each directory. The resulting URLs will allow us to configure webhooks that listen and respond to Slack’s &lt;a href="https://api.slack.com/actions"&gt;actions&lt;/a&gt;, slash &lt;a href="https://api.slack.com/slash-commands"&gt;commands&lt;/a&gt;, and &lt;a href="https://api.slack.com/events-api"&gt;events&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All five folders (including the functions folder are set up with a &lt;code&gt;__main__.js&lt;/code&gt; file (the directory’s main endpoint). These endpoints &lt;code&gt;__main__.js&lt;/code&gt; dispatch the appropriate functions when they receive a message from Slack. For this tutorial, the file &lt;code&gt;__main__.js&lt;/code&gt; will be dispatching the &lt;code&gt;commands&lt;/code&gt; endpoint when we call our API via our Slack Bot. Now, let’s return to our bot setup!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 4: Add a Command to your Standard Library API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;commands&lt;/code&gt;: The &lt;code&gt;commands&lt;/code&gt; directory is the endpoint for all Slack slash commands. Create an additional command by placing your cursor over the commands directory and right-clicking. Select &lt;strong&gt;New File&lt;/strong&gt; and name your slash command file &lt;strong&gt;nextmeetup.js&lt;/strong&gt; and click &lt;strong&gt;Okay&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HVSDWDG8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2AgeSV4j5FZ6emgHtCELFJmw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HVSDWDG8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2AgeSV4j5FZ6emgHtCELFJmw.png" alt="" width="314" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yiwkw8DZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AsGE606411SaPRgzYFd03bw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yiwkw8DZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AsGE606411SaPRgzYFd03bw.png" alt="" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, you will notice a “hello world” JavaScript function inside (&lt;code&gt;__main__.js&lt;/code&gt;), which is automatically generated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zpX4mrea--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AGkrX57wXnpND0lx2WriNpw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zpX4mrea--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AGkrX57wXnpND0lx2WriNpw.png" alt="" width="800" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Replace the contents of nextmeetup.js with the following:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;A Brief Explanation of the Code:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you submit &lt;code&gt;/nextmeetup&lt;/code&gt; via your Slack app, a GET request is made to Meetup’s API :&lt;/p&gt;

&lt;p&gt;Every request to Meetups API has to be authenticated with an API key, so we pass our Meetup key from our &lt;code&gt;env.json&lt;/code&gt; file into our request. We also send our GET request with the two parameters, zip and topic.&lt;/p&gt;

&lt;p&gt;The Meetup API returns an array of meetup event objects, which we can view from Code on Standard Library logs by logging our response: &lt;code&gt;console.log(response.data).&lt;/code&gt; Your logs tab is located underneath the debug section.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;response.data&lt;/code&gt; is an array of events that match your query, and we want to create two attachments for each event (one for location and one for details). We have a function called &lt;code&gt;formatAttachement&lt;/code&gt; that we can call on each of the events. The results get put in an array called &lt;code&gt;attachments&lt;/code&gt; that gets sent to Slack.&lt;/p&gt;

&lt;p&gt;Once you’ve copied and pasted the code into your file &lt;code&gt;nextmeetup.js&lt;/code&gt;, save the changes and navigate to the &lt;code&gt;env.json&lt;/code&gt; file on the left bar menu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 5: Fill your env.json File with App Credentials and Keys&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Inside the &lt;code&gt;env.json&lt;/code&gt; you will notice environment variables for your API. You can set different values for local, dev, and release (production) environments. This file will hold all of your unique access keys to your Standard Library account, Meetup account and Slack app credentials.&lt;/p&gt;

&lt;p&gt;We’ll only be making modifications to the &lt;code&gt;"dev"&lt;/code&gt; environment variables — make sure you’re modifying the right set! Note that &lt;code&gt;"dev”&lt;/code&gt; values are for your development environment and &lt;code&gt;"release"&lt;/code&gt; values should only be populated when you’re ready to release your app. &lt;code&gt;“local”&lt;/code&gt; variables can be left blank when deploying from Code on Standard Library, but they should be filled out when working with &lt;a href="https://github.com/stdlib/lib"&gt;the command line tools&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nGFY8j2I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A_va8F737nTtt4YQz1UkVmQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nGFY8j2I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A_va8F737nTtt4YQz1UkVmQ.png" alt="" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s start off by filling in the &lt;code&gt;“STDLIB_TOKEN”&lt;/code&gt; variable. Place your cursor in between the quotation marks (see screen) and either right-click and select &lt;strong&gt;Insert Library Token&lt;/strong&gt;… or use the shortcut &lt;strong&gt;⌘ + K&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P6Nt4WUZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A_ag63zSwWkqTyaIFz0IL7A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P6Nt4WUZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A_ag63zSwWkqTyaIFz0IL7A.png" alt="" width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Library Token&lt;/strong&gt; to fill in &lt;code&gt;"dev"&lt;/code&gt; environment.&lt;/p&gt;

&lt;p&gt;Now go back to the &lt;strong&gt;Basic Information&lt;/strong&gt; page of your Slack App and scroll down to App Credentials:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--llf8a19c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2Aau6CIMLpBSL1CWT1jmfU2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--llf8a19c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2Aau6CIMLpBSL1CWT1jmfU2w.png" alt="" width="800" height="683"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy your &lt;strong&gt;Client ID&lt;/strong&gt;, &lt;strong&gt;Client Secret&lt;/strong&gt;, and &lt;strong&gt;Verification Token&lt;/strong&gt;. Paste them into their respective fields in &lt;code&gt;“dev”&lt;/code&gt; section of the &lt;code&gt;env.json&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Add the name you gave your Slack app for the &lt;code&gt;SLACK_APP_NAME&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ex: &lt;code&gt;SLACK_APP_NAME:Meetup-bot&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;“SLACK_REDIRECT”&lt;/code&gt; value will be an https endpoint generated by Standard Library once you deploy your API. Even though we haven’t yet deployed, go ahead an fill it in now using this structure: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://&amp;lt;username&amp;gt;.lib.id/&amp;lt;apiname&amp;gt;@dev/auth/&lt;/code&gt; — with your standard library username and your API name. Once we deploy the code you can return to confirm that you filled this value properly.&lt;/p&gt;

&lt;p&gt;My &lt;code&gt;SLACK_REDIRECT&lt;/code&gt; looks like this: &lt;code&gt;https://Janethl.lib.id/slack-meetup-bot@dev/auth/&lt;/code&gt; — make sure you add authentication path with a slash at the end.&lt;/p&gt;

&lt;p&gt;Your Slack app’s capabilities and permissions will already be set up with the following scopes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;“SLACK_OAUTH_SCOPE”:bot,commands,chat:write:bot,chat:write:user,files:write:user,channels:history&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--11JQ0KEF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A0X5t9lHx2LAYpRkK9CN9LA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--11JQ0KEF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A0X5t9lHx2LAYpRkK9CN9LA.png" alt="" width="800" height="221"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The last variable that you will need to add is your Meetup API key. Meetup requires that every request is authenticated with an API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 6: Retrieve your Meetup API Key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Login or create an account at Meetup.com. Head on over to &lt;a href="https://secure.meetup.com/meetup_api/key/"&gt;https://secure.meetup.com/meetup_api/key/&lt;/a&gt; to retrieve your unique API key. Click the lock to reveal your API key and copy it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--azLfGbzl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2Avuj-sYFO0zY1Dz_vhVAW8Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--azLfGbzl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2Avuj-sYFO0zY1Dz_vhVAW8Q.png" alt="" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Return to your &lt;code&gt;env.json&lt;/code&gt; file on Code on Standard Library. Add your Meetup key as a &lt;code&gt;"key"&lt;/code&gt; value, exactly as I have done in the image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s6ynz4wN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A0EMXyrLMXN20pPCZxxT9VQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s6ynz4wN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A0EMXyrLMXN20pPCZxxT9VQ.png" alt="" width="800" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure to save the changes with &lt;strong&gt;‘⌘ + s’&lt;/strong&gt; (or hit Save in the bottom right).&lt;/p&gt;

&lt;p&gt;On the sidebar menu pen the &lt;code&gt;__main__.js&lt;/code&gt; file located below the events directory. Deploy the code of your Slack app to Standard Library by clicking &lt;code&gt;“Run”&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lw-aUNSx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AWaQZVihS6bnbMUoEc_VI3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lw-aUNSx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AWaQZVihS6bnbMUoEc_VI3w.png" alt="" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Shortly after deploying your code, Standard Library generates an HTTPS API endpoint URL where your code lives. This address consists of your  and the name you gave your API followed by @ and the name of the environment: &lt;a href="https://janethl.lib.id/slack-meetup-bot@dev/"&gt;https://janethl.lib.id/slack-meetup-bot@dev/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We now have the URL that will allow us to send and receive messages from our Slack app to Meetup’s API. Now we need to set our URL as webhook in Slack, so let’s head back to the Slack app dashboard&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 7: Create a New Slash Command and Set a Webhook&lt;/strong&gt;&lt;br&gt;
We now need to set our Slack app to respond to a slash command (&lt;code&gt;/&lt;/code&gt;). For this, we need to set up a webhook on Slacks API page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a Webhook?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Perhaps we can understand what a webhook is by comparing it to an API. APIs are request based — meaning that they operate when a request is made from a third party application. A webhook is event-based — the code will run when a specific event triggers it.&lt;/p&gt;

&lt;p&gt;To set a webhook, a service provider must allow it’s consumers to register a URL where the provider can send information when an event happens. In this example, Slack enables us to register our URL address, and once registered a slash command can trigger our webhook, which will execute the code in our URL.&lt;/p&gt;

&lt;p&gt;Now that we understand this, let’s head on over to Slack’s API page to set our webhook. Find and select &lt;strong&gt;Slash Commands&lt;/strong&gt; on the sidebar menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u44Z6LVR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AH_XGjlR9BajGbaTxQg725Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u44Z6LVR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AH_XGjlR9BajGbaTxQg725Q.png" alt="" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After clicking Create New Command, you’ll be asked to enter your command details, for this example use:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0l_PXxI---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2A9Re2ufh4kQ7Mqwju5VzuqA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0l_PXxI---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2A9Re2ufh4kQ7Mqwju5VzuqA.png" alt="" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Command:&lt;code&gt;/nextmeetup&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;RequestURL:&lt;code&gt;https://&amp;lt;username&amp;gt;.lib.id/ &amp;lt;apiname&amp;gt;@dev/commands/:bg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Short Description: &lt;code&gt;retrieves Meetup events&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Usage Hint:&lt;code&gt;[&amp;lt;zip&amp;gt;&amp;amp;&amp;lt;topic&amp;gt;]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Hit &lt;strong&gt;“Save”&lt;/strong&gt; once complete&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 8: Enable OAuth &amp;amp; Permissions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Return to your Slack App, On the sidebar menu, click &lt;strong&gt;OAuth &amp;amp; Permissions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once there, you’ll want to enter in a &lt;strong&gt;Redirect URL&lt;/strong&gt; as follows: &lt;code&gt;https://&amp;lt;username&amp;gt;.lib.id/ &amp;lt;apiname&amp;gt;@dev/auth/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;click &lt;strong&gt;“Add”&lt;/strong&gt; and &lt;strong&gt;“Save URLS.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This Redirect URL should match the URL that we set on the &lt;code&gt;env.json&lt;/code&gt; file on Code on Standard Library.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 9: Add a Bot to Your Slack App&lt;/strong&gt;&lt;br&gt;
Return to your Slack App page, and click &lt;strong&gt;Bot Users&lt;/strong&gt; on the left sidebar. Click &lt;strong&gt;Add Bot User&lt;/strong&gt;. Keep the default settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hHgAFKnK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A53q6eUPb3ZyrHAOrbnZ77A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hHgAFKnK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2A53q6eUPb3ZyrHAOrbnZ77A.png" alt="" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The final step is to authorize the app. In your browser, type: &lt;code&gt;https://&amp;lt;username&amp;gt;.lib.id/&amp;lt;apiname&amp;gt;@dev/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0BicmNjQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2Ax51ydAC1DzfQ0_a7-xVwFQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0BicmNjQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2Ax51ydAC1DzfQ0_a7-xVwFQ.png" alt="" width="800" height="161"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Add to Slack&lt;/strong&gt; button. You will be taken to another authorization screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dMeXdRqz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2AmBM2juH7s_3gmwr-Tk12ZA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dMeXdRqz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1080/1%2AmBM2juH7s_3gmwr-Tk12ZA.png" alt="" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Authorize&lt;/strong&gt;. You should see a success message!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IpDxAQDv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AhNNkRmEsXWsTfsNKnGJzSQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IpDxAQDv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AhNNkRmEsXWsTfsNKnGJzSQ.png" alt="" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Step 10: Test Your Slack Meetup Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7EVi8jWk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AE1_Xx2c0554VwS_5jkGBVg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7EVi8jWk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1440/1%2AE1_Xx2c0554VwS_5jkGBVg.png" alt="" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’re all done. Try it out! Your Slack App is now available for use in the Slack workspace you authorized it for. Your Slack app should respond to a /nextmeetup&amp;lt;94709&amp;gt;&amp;amp; as I show in the screenshot above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That is it &amp;amp; Thank You!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I hope you found this tutorial helpful. I would love for you to comment here, e-mail me at Janeth [at] stdlib [dot] com, or follow Standard Library on Twitter, &lt;a class="mentioned-user" href="https://dev.to/stdlibhq"&gt;@stdlibhq&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Janeth Ledezma is a Developer Advocate for Standard Library and Cal grad — go bears! When she isn’t learning the Arabic language, or working out, you can find her exploring NorCal on her CBR500R. 🏍💨🤗 Follow her journey with Standard Library through Twitter @mss_ledezma.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>app</category>
      <category>code</category>
    </item>
    <item>
      <title>Build a Slack Bot in 5 Minutes to Qualify Leads with Standard Library and Node.js</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Fri, 07 Dec 2018 00:56:45 +0000</pubDate>
      <link>https://dev.to/janeth/build-a-slack-bot-in-5-minutes-to-qualify-leads-with-standard-library-and-nodejs-eoi</link>
      <guid>https://dev.to/janeth/build-a-slack-bot-in-5-minutes-to-qualify-leads-with-standard-library-and-nodejs-eoi</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/swlh/build-a-slack-bot-in-5-minutes-to-qualify-leads-from-typeform-with-standard-library-and-node-js-145e7a11cd9d" rel="noopener noreferrer"&gt;Are you overwhelmed by hundreds of users signing up daily to use your online services?&lt;/a&gt; Do you need a better way to track and qualify leads? If so, look no further! Here are all the tools you'll need to help you and your team 😉.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What We'll Build:&lt;/strong&gt; We'll create a Slack bot that alerts your channel when a visitor enters data into a Typeform embedded on your site. Our Slack bot will flag individuals as "High priority!" if they belong to a company with over 50 employees. Our bot will also display individuals' full name, email, title, location, Linkedin, company name, number of employees in company x, the amount raised, estimated annual revenue, and company domain as seen in the example below 🤓.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AisUkfvgV4_OiHTXqCMVGSQ.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AisUkfvgV4_OiHTXqCMVGSQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So… Let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  What You'll Need Beforehand
&lt;/h2&gt;

&lt;p&gt;1x &lt;a href="https://slack.com/signin" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; free account&lt;br&gt;
1x &lt;a href="https://www.typeform.com/" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; free account&lt;br&gt;
1x &lt;a href="https://clearbit.com/" rel="noopener noreferrer"&gt;Clearbit&lt;/a&gt; free account&lt;br&gt;
1x &lt;a href="https://stdlib.com/" rel="noopener noreferrer"&gt;Standard Library&lt;/a&gt; free account&lt;br&gt;
5x minutes (300x seconds)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you're not familiar with &lt;a href="https://stdlib.com/" rel="noopener noreferrer"&gt;Standard Library&lt;/a&gt;, you're in for a treat! Standard Library is turning everyone in your organization into a developer with &lt;a href="https://code.stdlib.com" rel="noopener noreferrer"&gt;Code on Standard Library&lt;/a&gt; - an embeddable development environment for easily building APIs, webhooks, and workflow automation tasks.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Minute 1: Prepare Your Slack App on Slack's API Page
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://slack.com/signin" rel="noopener noreferrer"&gt;Sign in to your Slack account&lt;/a&gt; and visit your Slack Apps page at &lt;a href="https://api.slack.com/apps" rel="noopener noreferrer"&gt;https://api.slack.com/apps&lt;/a&gt;. Click on &lt;strong&gt;Create New App.&lt;/strong&gt; You'll be presented with a modal to enter your App Name and the Development Slack Workspace you'd like to add it to. From here, click on Create App, and you'll find yourself on a &lt;strong&gt;Basic Information&lt;/strong&gt; page.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2A8k1cFASIfP7x62fq9Ua1Fw.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2A8k1cFASIfP7x62fq9Ua1Fw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find &lt;strong&gt;"Incoming Webhooks"&lt;/strong&gt; under the &lt;strong&gt;"Features"&lt;/strong&gt; category on the left side menu bar, and toggle the button on to activate Incoming Webhooks.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AOqJwSpGuwWN6apgU1cPMMw.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AOqJwSpGuwWN6apgU1cPMMw.png"&gt;&lt;/a&gt;&lt;br&gt;
Toggle the Button On&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AP4ZWIHBU11jfhijOQu2DbQ.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AP4ZWIHBU11jfhijOQu2DbQ.png"&gt;&lt;/a&gt;&lt;br&gt;
Select Add New Webhook to Workspace.&lt;/p&gt;

&lt;p&gt;Next, select &lt;strong&gt;"Add New Webhook to Workspace"&lt;/strong&gt; and authorize your Slack App to post on a channel.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2Av_BpksCWUhShcaCwhkMBAw.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2Av_BpksCWUhShcaCwhkMBAw.png"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Once authorized, &lt;a href="https://slack.com/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; automatically generates a unique URL that you will use to send messages into Slack via HTTP request with a JSON payload from Clearbit. Copy and Save this URL; we will need it shortly.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AlzfoG0UDOGxYBpN8LLpzpw.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AlzfoG0UDOGxYBpN8LLpzpw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check to make sure that you've set up your Slack app properly. If you have, you should see a message like the one below on your Slack channel. If not, repeat this step 😉.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AAB8OUN843kctTSjp-UVlxQ.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AAB8OUN843kctTSjp-UVlxQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Minute 2: Set Up and Deploy the Signupalertsbot API using Code on Standard Library
&lt;/h1&gt;

&lt;p&gt;Now that you've set up your &lt;a href="https://slack.com/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; app and activated incoming webhooks, you need to deploy the code that will connect &lt;a href="https://www.typeform.com/" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt;, &lt;a href="https://clearbit.com/" rel="noopener noreferrer"&gt;Clearbit&lt;/a&gt;, and &lt;a href="https://slack.com/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; via webhooks. To do this, we'll be using &lt;a href="https://stdlib.com/" rel="noopener noreferrer"&gt;Standard Library's&lt;/a&gt; API platform and the online editor for APIs - if you're not a programmer don't worry! You won't need to write any of the code. We've provided the code for you, and it automatically handles high priority sign ups and cases where &lt;a href="https://clearbit.com/" rel="noopener noreferrer"&gt;Clearbit&lt;/a&gt; does not have information on an email!&lt;/p&gt;

&lt;p&gt;Head on over to &lt;a href="http://stdlib.com/@janethl/src/signupalertsbot/0.0.0" rel="noopener noreferrer"&gt;Code on Standard Library&lt;/a&gt;. If you click that link, a &lt;a href="http://stdlib.com/@janethl/src/signupalertsbot/0.0.0" rel="noopener noreferrer"&gt;template for the Signupalertsbot API will automatically open&lt;/a&gt;. If not, navigate to the &lt;strong&gt;"Community API Sources"&lt;/strong&gt; tab and search for &lt;strong&gt;"janethl/signupalertsbot".&lt;/strong&gt; Open to the env.json file on the left sidebar menu, and you'll find three environment variables that you'll need to fill in.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AjnO-8wbXYwxXo2td-tfKBw.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AjnO-8wbXYwxXo2td-tfKBw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter the &lt;a href="https://slack.com/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; webhook URL from Part 1 into SLACK_WEBHOOK_URL under the dev section.&lt;/p&gt;

&lt;h1&gt;
  
  
  Minute 3: Copy and Paste Your Clearbit API Key
&lt;/h1&gt;

&lt;p&gt;Next, you'll want to log in, or sign up for a &lt;a href="https://clearbit.com/" rel="noopener noreferrer"&gt;free Clearbit&lt;/a&gt; account at &lt;a href="https://clearbit.com/" rel="noopener noreferrer"&gt;https://clearbit.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once signed into your Clearbit's dashboard, navigate to the API Key tab and copy the first key - the secret API key.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AASySYoq1KUWSEbJDomhGJA.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AASySYoq1KUWSEbJDomhGJA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note that below your keys, Clearbit has suppression settings to exclude certain contacts from your enrichment project to satisfy GDPR.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now return to &lt;a href="https://stdlib.com/" rel="noopener noreferrer"&gt;Code on Standard Library&lt;/a&gt; and populate the "CLEARBIT_API_KEY"variable inside env.json.&lt;/p&gt;

&lt;p&gt;Finally, populate the "STDLIB_LIBRARY_TOKEN" variable by right-clicking between the two quotes and select &lt;strong&gt;Insert Library Token&lt;/strong&gt; from the drop-down menu.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2APoMF5BtXA_IYoWNT8NZLtw.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2APoMF5BtXA_IYoWNT8NZLtw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that your three environment variables are filled in, save these changes by clicking the orange &lt;strong&gt;"Save"&lt;/strong&gt; button on the bottom right.&lt;/p&gt;

&lt;p&gt;You are now ready to deploy your API. Return to the &lt;strong&gt;main&lt;/strong&gt;.js file and click the green "Run" button on the bottom right.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2ApPtOCtgfBt_PLzU5r1umiw.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2ApPtOCtgfBt_PLzU5r1umiw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've deployed your API onto Standard Library, you'll notice a &lt;strong&gt;"Parameter Error"&lt;/strong&gt; because your functions/&lt;strong&gt;main&lt;/strong&gt;.js endpoint requires two parameters. The two parameters; event_type, form_response, will be provided by Typeform. The final step is to take the &lt;strong&gt;"API Endpoint URL"&lt;/strong&gt; for your API and set it as a webhook on &lt;a href="https://www.typeform.com/" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Minute 4: Set a Webhook on Typeform
&lt;/h1&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AGtXpwlsQqB5rB2J2m3P1yg.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AGtXpwlsQqB5rB2J2m3P1yg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've logged in to &lt;a href="https://www.typeform.com/" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt;, select &lt;strong&gt;"New typeform"&lt;/strong&gt; from the dashboard. Find and select the &lt;strong&gt;"Contact Form"&lt;/strong&gt; template.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2Az1JIZK6Gjcv4YUtE5MgLtA.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2Az1JIZK6Gjcv4YUtE5MgLtA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For now, let's use this template as is; you can return at any time to modify the style and questions to your liking. Select &lt;strong&gt;"Integrate"&lt;/strong&gt; on the top menu.&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AMHK4AJ3nLg52h0IJDMaIyA.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2AMHK4AJ3nLg52h0IJDMaIyA.png"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Navigate to the upper middle tab and select &lt;strong&gt;"Integrate"&lt;/strong&gt; and then &lt;strong&gt;"WEBHOOKS."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Input your Standard Library API's endpoint url onto the Destination URL and toggle the &lt;strong&gt;"Webhooks"&lt;/strong&gt; button on.&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%2Fcdn-images-1.medium.com%2Fmax%2F1800%2F1%2AmLnq3K-NfSxhfv9jtXqzGA.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%2Fcdn-images-1.medium.com%2Fmax%2F1800%2F1%2AmLnq3K-NfSxhfv9jtXqzGA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Minute 5: Test Your Slack Bot
&lt;/h1&gt;

&lt;p&gt;Your Slack Bot is ready to test! Select the &lt;strong&gt;"View"&lt;/strong&gt; button on the upper right corner of your Typeform.&lt;/p&gt;

&lt;p&gt;Input a valid e-mail to test it out and answer the sample questions. Once submitted you should get notified by your Slack bot. 🙌&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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2ANSZpiJzDC07mncLhKqOFOA.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%2Fcdn-images-1.medium.com%2Fmax%2F1440%2F1%2ANSZpiJzDC07mncLhKqOFOA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  That’s it! 🤗
&lt;/h1&gt;

&lt;p&gt;Thank you for taking the time to read and test this out! If you found this tutorial helpful please let me know! &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>bots</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Build a Lead Generator in 5 Minutes with Typeform, Clearbit, Airtable and Standard Library</title>
      <dc:creator>Janeth Graziani</dc:creator>
      <pubDate>Thu, 27 Sep 2018 07:55:49 +0000</pubDate>
      <link>https://dev.to/janeth/build-a-lead-generator-in-5-minutes-with-typeform-clearbit-airtable-and-standardlibrary-86h</link>
      <guid>https://dev.to/janeth/build-a-lead-generator-in-5-minutes-with-typeform-clearbit-airtable-and-standardlibrary-86h</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@janeth_10755/build-a-lead-generator-in-5-minutes-with-typeform-clearbit-airtable-and-standard-library-2d8847846839" rel="noopener noreferrer"&gt;Looking to generate leads for your business&lt;/a&gt;, or qualify them after you've received some information from a service like Typeform? This tutorial is for you! We're going to be using Typeform as a lead intake form, and then use Standard Library to both connect to the Clearbit API to qualify those leads and store the updated lead information in AirTable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=doSjS1SR1Ss" rel="noopener noreferrer"&gt;&lt;img src="https://media2.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%2F6ylgfnz6rgf51vs9v6yr.png" width="800" height="406"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;When a lead submits a Typeform your Airtable Base is instantly populated with lead's data gathered by Clearbit.&lt;/p&gt;

&lt;p&gt;To do this, we'll be using &lt;a href="https://stdlib.com" rel="noopener noreferrer"&gt;Standard Library's&lt;/a&gt; simple API-centric cloud platform and the online editor for APIs, &lt;a href="https://code.xyz" rel="noopener noreferrer"&gt;Code.xyz&lt;/a&gt; - if you're not familiar with APIs yet, don't fret! All we mean is you'll be writing a little bit of your own custom business logic.&lt;/p&gt;

&lt;p&gt;Marketers, CSMs, Sales Executives, this one's for you! 😉&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;What You'll Need Beforehand&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;1x &lt;a href="https://www.typeform.com/" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; free account - A platform for building dynamic online forms including landing pages, polls, quizzes and more.&lt;br&gt;
1x &lt;a href="https://clearbit.com/" rel="noopener noreferrer"&gt;Clearbit&lt;/a&gt;free account - Clearbit's Enrichment API takes an e-mail and returns a person's employment, title, website, Linkedin and more.&lt;br&gt;
1x &lt;a href="https://airtable.com/" rel="noopener noreferrer"&gt;Airtable&lt;/a&gt; free account - AirTable is a combination of a spreadsheet &amp;amp; database.&lt;br&gt;
1x &lt;a href="https://stdlib.com" rel="noopener noreferrer"&gt;Standard Library&lt;/a&gt; free account - A Platform for building and deploying APIs, linking software tools, powering Slack apps, automating tasks, and more. &lt;br&gt;
5x minutes (300x seconds) of your time - These tools, used together, will save you hours of work!&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;How it Works&lt;/strong&gt;🤓
&lt;/h1&gt;

&lt;p&gt;When a lead submits his/her e-mail via your embedded Typeform, a webook will trigger an API you've built on Standard Library that sends a notification via &lt;strong&gt;HTTP POST&lt;/strong&gt; request. The request body (containing the response data from Clearbit's Enrichment API) will be sent in &lt;strong&gt;JSON&lt;/strong&gt; format to populate your Airtable base.&lt;/p&gt;

&lt;p&gt;So let's get to it!&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Minute 1: Fire Up Code.xyz From your Browser&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;We will link Typeform, Clearbit, and Airtable via &lt;a href="https://code.xyz" rel="noopener noreferrer"&gt;Code.xyz&lt;/a&gt; - the online API editor built by the team at &lt;a href="https://stdlib.com" rel="noopener noreferrer"&gt;Standard Library&lt;/a&gt;. You'll be deploying your function to Standard Library with zero setup or installations on your local machine.&lt;/p&gt;

&lt;p&gt;Once you've logged in to Code.xyz, click on the "&lt;strong&gt;Community API Sources.&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxsq5s6asxtbqs4if0szp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxsq5s6asxtbqs4if0szp.png" width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find and select &lt;strong&gt;"typeform-clearbit-airtable by @JanethL."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F34vr6c2egon4i81lhlud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F34vr6c2egon4i81lhlud.png" width="800" height="184"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Make sure to give your API a unique name, for example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fqje5t2p61tp1o10624mo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fqje5t2p61tp1o10624mo.png" width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once loaded, you will be taken to the &lt;code&gt;__main__.js&lt;/code&gt; located under the &lt;code&gt;functions&lt;/code&gt; directory (folder). This is the code that will connect your Typeform to Clearbit's Enrichment API and to Airtable. Once it is deployed live onto Standard Library, an https url endpoint is generated. You'll need the endpoint to set your webhook on Typeform. But let's not get too far ahead - first, we need to finish setting up your Standard Library API with your unique Clearbit and Airtable keys.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fyvtglcv70lvzrf0sfie8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyvtglcv70lvzrf0sfie8.png" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open up the &lt;code&gt;env.json&lt;/code&gt; file. You'll see three different variables:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ffqcg93z6p5v8et0t2q78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ffqcg93z6p5v8et0t2q78.png" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's start by finding your Clearbit API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minute 2: Copy and Paste Your Clearbit API Key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First you'll want to log in, or sign up for a free Clearbit account at &lt;a href="https://clearbit.com/" rel="noopener noreferrer"&gt;https://clearbit.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2l5m7ja7szrwc234c5ei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2l5m7ja7szrwc234c5ei.png" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note that below your keys, Clearbit has suppression settings to exclude certain contacts from your enrichment project to satisfy *&lt;/em&gt;(GDPR)*&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now return to Code.xyz and populate the &lt;code&gt;"CLEARBIT_API_KEY":&lt;/code&gt; variables inside &lt;code&gt;env.json.&lt;/code&gt; We now have two remaining variables to populate. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minute 3: Find Your API Keys on Airtable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you've logged in or signed up for Airtable, select the account icon on the top right corner to see your account information. Click generate API key and copy and paste that key into &lt;code&gt;"AIRTABLE_API_KEY": ""&lt;/code&gt; inside your &lt;code&gt;env.json&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6tg06cijlps1nfykho98.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6tg06cijlps1nfykho98.png" width="800" height="360"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, for the last variable, click the link below and once routed to my Airtable Base sample, select &lt;strong&gt;Copy base&lt;/strong&gt; on the upper right corner. It's your base now!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://airtable.com/invite/l?inviteId=invcdodb7YgOFx7uS&amp;amp;inviteToken=540e9ae9d02ff30b0c089aab4efa8db6d426cdcd42c61f67b25a820fa98ca3ce" rel="noopener noreferrer"&gt;https://airtable.com/invite/l?inviteId=invcdodb7YgOFx7uS&amp;amp;inviteToken=540e9ae9d02ff30b0c089aab4efa8db6d426cdcd42c61f67b25a820fa98ca3ce&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've added a copy of my base onto your workspace, enter your "LeadGenerator" base. On the upper right corner click &lt;strong&gt;Help&lt;/strong&gt; and then select &lt;strong&gt;API documentation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ffjsy1jetqr1wp8xqdirm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ffjsy1jetqr1wp8xqdirm.png" width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find and select your Airtable base key as I have done in the screenshot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvkirxcjr83h7e35pb45u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvkirxcjr83h7e35pb45u.png" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you've copied and pasted your Base's key into your env.json, your env.json file should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fc254ksvq4vuluqrm66ia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fc254ksvq4vuluqrm66ia.png" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You are finally ready to deploy your API to Standard Library. Return to the &lt;code&gt;__main__.js&lt;/code&gt; file and hit the green "Run" button on the bottom right corner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8xjag2u8z33lxvt3tu8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8xjag2u8z33lxvt3tu8q.png" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We see a Parameter Error. Don't worry - this is normal. This notification means that we expect this API / webhook response to accept parameters we haven't provided in this test run (event_type and form_response). They'll be provided by the Typeform Webhook automatically.&lt;/p&gt;

&lt;p&gt;Notice that Standard Library has automatically generated an API endpoint url underneath the &lt;strong&gt;RESULTS&lt;/strong&gt; area.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmwczzw02qjrl7u6wfw5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmwczzw02qjrl7u6wfw5y.png" width="800" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy that https endpoint, we will need it to set a web-hook on Typeform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minute 4: Set a Webhook on Typeform &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Head over to Typeform to bring your lead generator to Life.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9ii84xct4hu2sv6m5lw6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9ii84xct4hu2sv6m5lw6.png" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've logged in or signed up, select ** "New typeform" ** from the dashboard. Find and select the &lt;strong&gt;"Contact Form"&lt;/strong&gt; template.&lt;/p&gt;

&lt;p&gt;For now, let's use this template as is; you can return at anytime to modify the style and questions to your liking. Select &lt;strong&gt;"Integrate"&lt;/strong&gt; on the top menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F70jnu2ogqkjucuglh11v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F70jnu2ogqkjucuglh11v.png" width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the upper middle tab and select "Integrate" and then ** "WEBHOOKS".**  &lt;/p&gt;

&lt;p&gt;Input your API's endpoint url onto the Destination URL and toggle the &lt;strong&gt;"Webhooks"&lt;/strong&gt; button on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F05a37c9wiaxvmcntjv37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F05a37c9wiaxvmcntjv37.png" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minute 5: Test Your Lead Generator&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Your Lead Generator is ready to test!  Select the "View" button on the upper right corner of your Typeform. &lt;/p&gt;

&lt;p&gt;Input a valid e-mail to test it out and answer the sample questions. If you've linked up Typeform, Clearbit, and Airtable properly your Airtable Base should automatically populate:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=doSjS1SR1Ss" rel="noopener noreferrer"&gt;&lt;img src="https://media2.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%2F6ylgfnz6rgf51vs9v6yr.png" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;That's it! *&lt;/em&gt;  🤗&lt;br&gt;
Thank you for taking the time to read and try this out! If you found this tutorial helpful please let me know! If you'd like to connect Clearbit, Typeform, and Airtable to any other tools or software, please reach out- I'd love to help. Just drop your name, e-mail, and request in the Typeform below and I'll get back to you as soon as possible!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://janeth24.typeform.com/to/JNUy9O" rel="noopener noreferrer"&gt;Click here to be routed to my Typeform&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Janeth is the Community Manager for Standard Library and UC Berkeley grad- go bears! 🐻 She speaks Spanish, English, Arabic and a little JavaScript 😉&lt;/em&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>marketing</category>
      <category>software</category>
    </item>
  </channel>
</rss>
