NetNewsWire/Frameworks/Account/AccountTests/Feedly/feedly-4-addfeedsandfolders/global.all.json

452 lines
103 KiB
JSON

{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/global.all",
"updated": 1572579462680,
"items": [
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:d7:5941944c",
"keywords": [
"slack",
"developer",
"apps",
"bots",
"security"
],
"originId": "https://medium.com/p/3d509a15f41b",
"fingerprint": "f6ee9ae8",
"content": {
"content": "<h4>The happy path for building engaging Slack\u00a0apps</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*7wV-S0Hoz2l00zbeExJ8QA.gif\"><figcaption>Illustration and design by Casey Labatt\u00a0Simon.</figcaption></figure><p>Since launching five years ago, the Slack Platform has evolved\u200a\u2014\u200aas has our customer base. We\u2019ve grown to 12 million Daily Active Users with half of those users based outside the U.S. and working in non-technical roles. As Slack users become more diverse and global, our priority is to give you the tools to build for\u00a0them.</p><p>Today at Spec, our developer conference, we announced the Slack app toolkit\u200a\u2014\u200athe happy path for building engaging apps on Slack. Over time, we expect that all Slack apps will be built with these components.</p><p>The Slack app toolkit provides the fundamentals for building apps that are easy for any type of customer to discover, understand, and use\u200a\u2014\u200aso you can drive deeper adoption of what you\u00a0create.</p><p>The toolkit has four components, and we\u2019re making enhancements to\u00a0each:</p><ul><li><strong>Permissions</strong>, the way your app requests access to data on a workspace</li><li><strong>Block Kit</strong>, the UI framework for Slack\u00a0apps</li><li><strong>Surfaces</strong>, the places where people interact with Block Kit in\u00a0Slack</li><li><strong>Actions</strong>, simple shortcuts users can perform with your app\u200a\u2014\u200alike create a task or file a\u00a0ticket.</li></ul><p>Let\u2019s dive in and explore what\u2019s\u00a0new.</p><h3><strong>Permissions: Building enterprise-ready apps</strong></h3><p>To gain adoption in the enterprise, apps must first be approved by security-conscious admins. Previously, the bot token issued you a broad set of scopes, without the option to specify exactly what you\u00a0needed.</p><p>Granular permissions are now available for the bot token, enabling you to request only the information your app needs to function, and nothing more. Access less information, and make it simpler for admins to understand what your app can see and do in a workspace.</p><p>Granular permissions also offer a more reliable experience for you and your users. The updated bot token wraps in app functionality that was previously dispersed across both bot and user tokens. Apps using granular permissions will continue to work even when the original user who installed it leaves a workspace.</p><p>You can access <a href=\"https://api.slack.com/auth/basics\">granular permissions</a> in open beta today, and by doing so, unlock access to forward-looking platform features.</p><h3><strong>Block Kit: Slack\u2019s app UI framework</strong></h3><p>Earlier this year, we released <a href=\"https://medium.com/slack-developer-blog/block-party-d72c70a01911\">Block Kit</a>, the UI framework for Slack apps made up of stackable \u201cblocks,\u201d or bits of app UI. With Block Kit, you can build richer, more actionable experiences for your app\u00a0users.</p><p>Thanks to your feedback, we continue to enhance <a href=\"https://api.slack.com/block-kit\">Block Kit</a> and the <a href=\"https://api.slack.com/tools/block-kit-builder\">Builder</a>. New blocks, like input, multi-line input, multi-selects and radio buttons are available today; checkboxes are coming\u00a0soon.</p><h3><strong>Surfaces: Your app in more\u00a0places</strong></h3><p>Let\u2019s talk about where you can build with Block Kit in Slack. You can already construct app messages with Block Kit, but we want to enable you to create more engaging, persistent experiences\u200a\u2014\u200ato make apps simpler to discover, understand, and\u00a0use.</p><p>Today we announced that Block Kit is now available in two new <a href=\"https://api.slack.com/surfaces\">surfaces</a>, giving your app more real estate within\u00a0Slack.</p><h4><strong><em>App home</em></strong></h4><p>Now you can go beyond conversation-based interactions with the <a href=\"https://api.slack.com/surfaces/tabs\">home tab</a>\u200a\u2014\u200aa fully customizable, interactive surface to showcase what your app can\u00a0do.</p><p>People who click on your app in the sidebar will automatically land in this new space. They won\u2019t need to remember slash commands or how to interact with a conversational bot\u200a\u2014\u200athough power users can still do that, if they\u2019d\u00a0like.</p><p>Let\u2019s say you want your app to welcome a new user and explain what your app does. You can use the home tab for quick, contextual onboarding. Or you might dynamically display information about someone\u2019s specific work with your app\u200a\u2014\u200alike upcoming tasks, pending expenses, or recent survey\u00a0results.</p><p>For example, <a href=\"https://slack-platform.slack.com/apps/ADZ494LHY-google-calendar\">Google Calendar\u2019s</a> home tab displays your meetings and events for the day\u200a\u2014\u200aincluding actions to Join Zoom meeting, View details, Change response, or Delete\u00a0event.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*5zEyXu1htySYlRhG_QeGMg.png\"><figcaption><em>Google Calendar in the home tab uses Block Kit buttons, overflow menus, datepicker, dividers, and section blocks to display user-specific daily meetings and\u00a0events.</em></figcaption></figure><p>The <a href=\"https://api.slack.com/reference/app-home\">home tab open beta</a> begins rolling out today, continuing over the next\u00a0week.</p><h4><strong><em>Modals</em></strong></h4><p>Let\u2019s say you want to collect a series of inputs from someone in Slack\u200a\u2014\u200alike submitting expenses or reporting a bug. <a href=\"https://api.slack.com/surfaces/modals\">Modals</a> are a new Block-Kit-enabled interactive surface that enable more advanced workflows for apps in\u00a0Slack.</p><p>If you\u2019re familiar with <a href=\"https://medium.com/slack-developer-blog/building-more-intricate-workflows-in-slack-with-dialogs-74f122ed887c\">dialogs</a>, modals replace this functionality\u200a\u2014\u200aand add so much more. You can configure up to 100 blocks in a modal for a more actionable, personalized experience. Aside from collecting structured user input, you can also use a modal to display information; for example, you can use modals to report on metrics, track project status, or display a robust\u00a0FAQ.</p><p>For instance, <a href=\"https://slack.com/apps/AG7JZU4NN\">Streak</a>, a CRM for Gmail, uses informational modals to allow people to dynamically search, view, edit and share details about current sales\u00a0deals.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*GIOZShwLcNoTlHR2v8J5SA.gif\"><figcaption>Streak leverages Block Kit in modals for a robust, informative, and action-oriented app experience.</figcaption></figure><p>You can also string modals together in a multi-step workflow that enables booking flows\u200a\u2014\u200alike booking travel, ordering food, or registering for courses\u200a\u2014\u200awith less context switching.</p><p><a href=\"https://slack.com/apps/A26V67T7A\">Bridge</a>, a learning and development platform, offers an enrollment flow that enables people in Slack to search, browse, and enroll in their company\u2019s course offerings.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/0*7NSF7jIiMZ5p-0ru\"><figcaption><em>The Bridge app, now available in the Slack App Directory, uses multi-step and dynamic\u00a0modals.</em></figcaption></figure><p>Modals give you a focused space for clear, proactive communication so your users know exactly what your app is doing. For instance, will they lose their work? Will their submission post to a public channel? Did they successfully complete the workflow? A speed bump or confirmation modal is perfect for\u00a0this.</p><p><a href=\"https://slack.com/apps/AN0G1JK36\">Qualtrics</a>, an experience management platform, applied this best practice to their Slack app. After sending a questionnaire through the Qualtrics app, users will see a handy confirmation that it was sent. This modal includes dynamic details based on user input\u200a\u2014\u200alike the people or channels the study was sent\u00a0to.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*gogkER6RReBVFo--rLUhVw.gif\"><figcaption><em>The Qualtrics app displays a dynamic confirmation modal as the final step in their Slack workflow.</em></figcaption></figure><p><a href=\"https://api.slack.com/block-kit/surfaces/modals\">Modals</a> are available to all developers and customers today.</p><h3><strong>Actions: Apps in\u00a0context</strong></h3><p><a href=\"https://api.slack.com/interactivity/actions\">Actions</a> are simple shortcuts that people can use to quickly complete a task with your app\u200a\u2014\u200alike reporting a bug, requesting time off, or starting a\u00a0meeting.</p><p>Last year, we launched the first kind of app action: the ability to turn a Slack message into a task, ticket, sales lead, and more. Now we\u2019re extending actions to more places beyond messages\u200a\u2014\u200aenabling users to take quick action in the context of their work from anywhere in\u00a0Slack.</p><p>Soon you\u2019ll be able to access actions across a collection of intuitive places in Slack\u200a\u2014\u200alike pinned to a channel, searchable in the quick switcher, and accessible from a universal actions menu.Through these touchpoints, your app will be more accessible to users, precisely where and when they need\u00a0it.</p><p><a href=\"https://api.slack.com/interactivity/actions\">Stay tuned</a> for updates on actions in more places next\u00a0year.</p><h3><strong>But wait, there\u2019s\u00a0more!</strong></h3><p>In addition to the Slack app toolkit, you\u2019ll soon benefit from more app visibility in Slack. One of these improvements is a redesigned app launcher\u200a\u2014\u200aa prominent place to browse installed and recommended apps for your\u00a0team.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*ktpLYkfGzC04cr7h7a-7fw.png\"><figcaption><em>The redesigned app launcher will be easy to find in Slack. Click to view apps installed in your workspace, and scroll for a list of recommended apps.</em></figcaption></figure><h3><strong>Getting started</strong></h3><p>Start building with the Slack app toolkit by visiting the <a href=\"https://api.slack.com/start/building\">Slack API</a> documentation. Want to go deeper with our product and engineering teams? <a href=\"https://event.on24.com/wcc/r/2098870/ADBFDBB01214C6F3F43667F2385A8CCE/686173?partnerref=slackapi\">Register for our upcoming webinars</a> to get your hands on the keyboard with these new features and your questions answered\u00a0live.</p><p><em>Questions? Email us at </em><a href=\"mailto:feedback@slack.com\"><em>feedback@slack.com</em></a><em> or send a tweet to @SlackAPI.</em></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3d509a15f41b\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/introducing-the-slack-app-toolkit-3d509a15f41b\">Introducing the Slack app toolkit</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Introducing the Slack app toolkit",
"updated": 1571761861999,
"author": "Ellie Powers",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/introducing-the-slack-app-toolkit-3d509a15f41b?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1571761862000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:d6:5941944c",
"keywords": [
"slack",
"shared-channels",
"bots",
"announcements",
"how-to"
],
"originId": "https://medium.com/p/414ed5460168",
"fingerprint": "fcbcb109",
"content": {
"content": "<h4>Simplify coordination and unlock adoption with apps in shared\u00a0channels</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*eqPvgEZA5iH0AXOnXSbO7g.png\"></figure><p>Shared channels, now <a href=\"https://slackhq.com/slack-shared-channels?utm_medium=blog&utm_source=blog&utm_campaign=cd_blog_blog_all_en_all_cr-sharedchannel_platform_blog_ym-201909\">available for all Slack customers</a>, is a new feature that enables teams from different organizations to work together in Slack as productively as they work with their own companies. Shared channels work just like regular channels, only now they connect two organizations: Company A can communicate in the same Slack channel as its partners at Company B. New people coming into a project can readily access a project\u2019s archive, share updates and files, loop in the right people and quickly make decisions\u200a\u2014\u200aall from a single place in\u00a0Slack.</p><p>Just as in regular channels, Slack apps can help <a href=\"https://community.slack.com/apps/collection/shared-channels\">enable this work</a>. Besides opening up new use cases, shared channels can also unlock organic discovery of your app: When someone uses an app in a shared channel, others in the channel can see how it helps people work\u200a\u2014\u200aregardless of whether both workspaces have installed it.</p><p>Read on to learn how to get ready for shared channels.</p><h3><strong>How apps help move work forward in shared\u00a0channels</strong></h3><p>People in shared channels connect to the organizations they work with, like agencies, contractors, partners, vendors or customers. You can build an app specific to these use cases, helping teams\u00a0to:</p><p><strong>Handle contracts or payments: </strong>Teams in shared channels often work with external agencies and contractors. Keep things humming along with apps for negotiating, signing and finalizing contracts or\u00a0POs.</p><p><strong>Get notified on key updates</strong>,<strong> </strong>like incidents, company metrics or upcoming deadlines. Notification-based apps can make sure everyone has the information they need, when they need\u00a0it.</p><p>With <strong>Zoom</strong>, for instance, someone can quickly spin up a call and post the recording back into the channel for others to digest\u00a0later.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/800/1*6VCDPKtlkt20mp0foSWhrw.png\"></figure><p>Or, with <strong>Google Calendar for Teams</strong>, people in a shared channel can receive helpful summaries of the week\u2019s upcoming Google Calendar\u00a0events.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/800/1*pPMM59u163j7nJGlNvNEmw.png\"></figure><p><strong>Manage and approve projects: </strong>Project management apps can help two teams add tasks, assign owners or mark to-do\u2019s as complete\u200a\u2014\u200aso nothing falls through the\u00a0cracks.</p><p>For instance, let\u2019s say you built an app to help execute a brand campaign with your creative agency. When your agency\u2019s external designers complete a task, the app could automatically post the designer\u2019s comments inside Slack for your team to\u00a0review.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/912/1*Xl4hzbSat8Q4EJwNu0pRgQ.png\"></figure><p>In this way, your team can collaborate in real time with people <em>outside </em>the shared channel, too\u200a\u2014\u200aso you can communicate with your external agency\u2019s designers as naturally as you do with your own colleagues.</p><h3><strong>Adapting to a shared channels\u00a0world</strong></h3><p>Shared channels can introduce your app to new faces and related edge cases. To get ready, you\u2019ll first want to adopt the <a href=\"https://api.slack.com/docs/conversations-api\">Conversations API</a>. Aside from helping your app perform well in shared channels, these Web API methods include performance improvements to help your app scale in <em>any</em>\u00a0channel.</p><p>Second, subscribe to new channel_shared and channel_unshared events to be notified when someone shares or unshares a channel. And if you\u2019re starting fresh, know that our <a href=\"https://slack.dev/node-slack-sdk/\">Node</a> and <a href=\"https://slack.dev/python-slackclient/\">Python SDKs</a>, as well as <a href=\"https://slack.dev/bolt/tutorial/getting-started\">Bolt</a>\u200a\u2014\u200athe official Slack app development framework\u200a\u2014\u200ahave been updated to play nicely with shared channels.</p><p>Finally, you can test your app in a shared channel by requesting <a href=\"http://api.slack.com/go/sandbox\">sandboxes for Slack Enterprise Grid</a>. Visit the shared channels <a href=\"https://api.slack.com/shared-channels#supporting_shared_channels\">Slack API documentation</a> to get started. We can\u2019t wait to see what you\u00a0build!</p><p><strong><em>See </em></strong><a href=\"https://medium.com/slack-developer-blog/spec-product-announcements-3d509a15f41b\"><strong><em>what else was announced this year at Spec</em></strong></a><strong><em>, the Slack developer conference.</em></strong></p><p><em>Feedback or questions? Let us know </em><a href=\"http://twitter.com/slackapi\"><em>on\u00a0Twitter</em></a><em>.</em></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=414ed5460168\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/building-apps-for-shared-channels-414ed5460168\">Building apps for shared channels</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Building apps for shared channels",
"updated": 1571761815276,
"author": "Slack API",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/building-apps-for-shared-channels-414ed5460168?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1571761815000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:d5:5941944c",
"keywords": [
"slack",
"slack-platform",
"chatbots"
],
"originId": "https://medium.com/p/ee83de4d93a5",
"fingerprint": "8ade97bd",
"content": {
"content": "<figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*l1V04plPDDmESB96ZXi_FQ.jpeg\"></figure><p>It\u2019s been just over a year since the Slack Platform team <a href=\"https://medium.com/slack-developer-blog/a-growing-community-b29ed908565b\">toured Asia</a>, and we\u2019re overdue to visit again. From October 31st to November 14th, <a href=\"https://slack.dev/events/apac-2019?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">you can join us at ten different cities in\u00a0Asia</a>.</p><p>We\u2019re excited to meet all of the builders and developers changing the way people work and collaborate. We\u2019ll be stopping in ten different cities all over Asia and Australia this November to talk about all the exciting developments from <a href=\"https://slack.com/spec?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">Spec</a>. In addition to discussing the latest Slack platform functionality, there will be plenty of time to meet the Platform team, and share your ideas and feedback on the Slack\u00a0roadmap.</p><p>We\u2019ll also be joining with our friends running one of the many local <a href=\"https://slackcommunity.com?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">Slack Platform Community</a> Chapters in the\u00a0area.</p><p>We\u2019re excited to hear from you, in turn, about what you\u2019re building. You\u2019ll get plenty of time with our developer relations team to show us what you have in the works, ask questions, and share feedback on our platform\u00a0roadmap.</p><h4>A note on sustainability</h4><p>Whilst we love visiting the community of Slack developers throughout the world, and think that there\u2019s no substitute for occasional face to face meetings, we\u2019re also conscious of the environmental impact of international travel, especially when it involves\u00a0flying.</p><p>With this in mind, we\u2019re adopting a new policy when it comes to our regular developer tours. To start with, we\u2019ll be calculating the CO2 output of all our air travel and purchasing carbon offsets at 200% of that output. Wherever possible, we\u2019ll book accommodation that is based in LEED certified buildings, or is otherwise sustainably designed.</p><p>Finally, we know everyone loves swag, but it\u2019s usually made of hard or impossible to recycle materials and hangs around the bottom of your backpack until it breaks. So going forward, all our printed materials will be made of 100% recycled paper and we\u2019ll only give out items that we consider to have a long term value to the community, such as our <a href=\"https://slack.dev/guides/Build.pdf\">Build book</a> and our <a href=\"https://slack.dev/guides/AppUIGuidelines.pdf\">App UI Guidelines</a>. One exception we\u2019ll make is for stickers, as they\u2019re small and have a minimal environmental footprint.</p><h3>Registration details</h3><h4>Australia</h4><ul><li><a href=\"https://slackcommunity.com/events/details/slack-sydney-presents-slack-platform-community-sydney-kick-off/#/?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">Sydney, October\u00a031st</a></li><li><a href=\"https://slackcommunity.com/events/details/slack-melbourne-presents-tiny-spec-melbourne?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">Melbourne, November\u00a07th</a></li></ul><h4>India</h4><ul><li><a href=\"https://slackcommunity.com/events/details/slack-bangalore-presents-tiny-spec-bangalore?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">Bangalore, November\u00a07th</a></li><li><a href=\"https://slackcommunity.com/events/details/slack-delhincr-presents-tiny-spec-delhi?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">New Delhi, November\u00a09th</a></li><li><a href=\"https://slackcommunity.com/events/details/slack-pune-presents-tiny-spec-pune?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">Pune, November\u00a012th</a></li></ul><h4>Singapore</h4><ul><li><a href=\"https://www.meetup.com/Chatbots-SG/events/265475440/\">Singapore, November\u00a07th</a></li></ul><h4>South Korea</h4><ul><li><a href=\"https://slackcommunity.com/events/details/slack-seoul-presents-tiny-spec-seoul?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">Seoul, November\u00a012th</a></li></ul><h4>Taiwan</h4><ul><li><a href=\"https://slackcommunity.com/events/details/slack-taipei-presents-tiny-spec-taipei?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\">Taipei, November\u00a014th</a></li></ul><h4>Japan</h4><ul><li>Tokyo, November 12th\u200a\u2014\u200alink coming\u00a0soon!</li><li>Osaka, November 7th\u200a\u2014\u200alink coming\u00a0soon!</li></ul><p><em>Looking for an event or a chapter closer to home? Visit us at </em><a href=\"https://slackcommunity.com?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\"><em>slackcommunity.com</em></a><em> to find your local community group\u200a\u2014\u200ayou can also </em><a href=\"https://slackcommunity.com/chapter-leader-guidelines/?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q411-devtour\"><em>apply to lead a chapter</em></a><em> if there isn\u2019t one in your\u00a0town.</em></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ee83de4d93a5\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/join-the-slack-platform-team-in-cities-around-asia-this-november-ee83de4d93a5\">Join the Slack Platform team in cities around Asia this November</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Join the Slack Platform team in cities around Asia this November",
"updated": 1572025869198,
"author": "Colm Doyle",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/join-the-slack-platform-team-in-cities-around-asia-this-november-ee83de4d93a5?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1570573696000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:d4:5941944c",
"keywords": [
"growplatform",
"personal-growth",
"slack",
"how-to",
"developer-stories"
],
"originId": "https://medium.com/p/30810619845",
"fingerprint": "ab590028",
"content": {
"content": "<h3>\ud83d\udd13Unlock better UX for your Slack App with App Home Opened\u00a0\ud83d\udee0</h3><h4>3 Ways to improve your user experience with the new and awesome Slack Event app_home_opened!</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*lqXUwCyK3vakSn12-R6fwg.png\"></figure><p><a href=\"https://api.slack.com/events/app_home_opened?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-q308-unlock-better-ux\">App_home_opened</a> is an essential Slack event for app developers that want to better understand how users interact with their app in order to improve their app\u2019s user experience.</p><p>By subscribing to this event, Slack will notify your app <em>whenever</em> a user opens a direct message with your app (You can think of this as equivalent to an impression on a web\u00a0page).</p><p>We first read about this event in Halp\u2019s post \u201c<a href=\"https://medium.com/slack-developer-blog/thoughtful-app-onboarding-3751306aaecf\">Thoughtful app onboarding</a>\u201d, which details how to subscribe to this event and focuses on using it to effectively onboard different types of users. For a reference, here\u2019s how we configured this <a href=\"https://api.slack.com/events/app_home_opened?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-q308-unlock-better-ux\">event</a> with Node.js and\u00a0<a href=\"https://botkit.ai\">botkit</a>.</p><pre>const Botkit = require('botkit');</pre><pre>const controller = Botkit.slackbot();</pre><pre>controller.on('app_home_opened', async (bot, message) => {</pre><pre> // Your code here</pre><pre>});</pre><p>In this article, we\u2019ll discuss further use cases for app_home_opened and give a description of how we implemented these features in our app,\u00a0Grow.</p><p><a href=\"https://getgrow.io/?utm_source=slack.com&utm_campaign=developer_blog\">Grow</a> is a Slack-first platform that facilitates personal growth through continuous and actionable feedback with your team. We use app_home_opened to:</p><ul><li><strong>Better understand how users interact with our app: </strong>Grow users select from our list of \u201cnudges\u201d to schedule reminders for themselves throughout the week. We use app_home_opened to understand how effective each nudge is, which is critical towards helping us design better\u00a0nudges.</li><li><strong>Pre-load common actions for user convenience: </strong>Through app_home_opened, we noticed that many users would open our app but then not do anything. Through further user testing, we found that some users don\u2019t remember or even like using commands (even \u201chi\u201d or \u201chelp\u201d). We addressed this by pre-loading common actions when users open the app, which has led to a significant increase in our baseline engagement.</li><li><strong>Effectively roll out new features and tips to users: </strong>It can difficult to spread the news about new features that might benefit many of your users. Many of our users follow us on social media or subscribe to our product update newsletter, but for those that do not, we\u2019ve found the best way to notify them is by rolling out feature updates during app_home_opened. Sending users <em>unprompted</em> feature updates is often viewed as being \u201cspammy\u201d while prompting after app_home_opened seems more respectful and convenient.</li></ul><h3>Better Understand How Users Interact With Your\u00a0App</h3><p>One interesting metric you can now approximate is how often a user opens your app and then leaves without doing anything (similar to a website\u2019s bounce rate). We roughly approximated this by measuring whether or not a user performed any action in our app within an hour of their app_home_opened event.</p><p>You can also use this event as an approximate \u201cread\u201d receipt. If your app sends scheduled messages (Note: always get user/team consent before scheduling messages!), it is reasonable to assume that receiving an app_home_opened event, after you sent the message, means that the user has read the scheduled message.</p><p>Grow\u2019s scheduled messages often have a specific \u201ccall to action\u201d (e.g. give or request feedback). By analyzing how often a user reading the message converts into the suggested call to action, we can improve our messages in a data-driven way. We are able to A/B test with different messaging copy and block layouts to find the most effective combination.</p><h3>Pre-load Common Actions for User Convenience</h3><p>When we first started looking at the data, we were surprised by how often users opened our app and then did nothing. Based on our own user testing, we found that many newer users of Slack are just not that familiar with the concept of bots and shy away from slash commands or even \u201chi\u201d or\u00a0\u201chelp\u201d.</p><p>In an effort to improve our \u201cbounce\u201d rate, we started sending users a user message with give and request drop-downs (our two most common actions) when we received an app_home_opened event.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*_5mAkwnswhmhhwuNtGVg4A.gif\"><figcaption>User getting a \u201cwelcome back\u201d when opening\u00a0Grow</figcaption></figure><p>A word of warning: Slack will send you the app_home_openedevent every time a user opens your app. If your app has no concept of state, then you could end up sending the same user the same message over and over again. This is a poor user experience!</p><p>We designed guardrails to prevent this in two\u00a0ways.</p><p>First, we store the timestamp of the user\u2019s last app_home_opened event. If a new app_home_opened event timestamp is less than an hour from the last one we received for that user, we do not send the user a\u00a0message.</p><p>Second, we use <a href=\"https://api.slack.com/methods/conversations.history?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-q308-unlock-better-ux\">Slack\u2019s conversation history API</a> to extract the last message in the conversation. If the user has no conversation history (i.e. messages.length === 0), we kick off an onboarding flow similar to what was described in <a href=\"https://medium.com/slack-developer-blog/thoughtful-app-onboarding-3751306aaecf\">Halp\u2019s\u00a0article</a>.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*RXUxNVivaQHtviyq7l-7Wg.gif\"><figcaption>User getting an onboarding message</figcaption></figure><p>This approach does <strong>not</strong> work for ephemeral messages, since those are not returned by the conversation history call. We send all of our direct messages as non-ephemeral so that we can utilize app_home_opened more effectively.</p><p>If the timestamp of the last message is before the last app_home_opened event we stored for the user, then we assume the user has not read the last message we sent. We avoid overwhelming the user by not sending any more messages.</p><p>Also, if we know that the last message in the conversation history already has a clear call to action, we avoid sending another message with actions. Giving a user too many possible actions can be overwhelming or frustrating.</p><p>To implement this logic, we use a pattern where we encode a message type constant into the block_id of the first block over every\u00a0message.</p><pre>const messageTypes = {</pre><pre> OTHER: 'OTHER',</pre><pre> GIVE_REQUEST: 'GIVE_REQUEST',</pre><pre> // Your other message types here\u2026</pre><pre>};</pre><pre>const blockMessage = [</pre><pre> {</pre><pre> block_id: JSON.stringify({ messageType: <br> messageTypes.GIVE_REQUEST }),</pre><pre> type: 'divider',</pre><pre> },</pre><pre>];</pre><pre>function determineMessageType(message) {</pre><pre> if (message.blocks &amp;&amp; message.blocks.length) {</pre><pre> const blockIDJSON = JSON.parse(message.blocks[0].block_id);</pre><pre> // Slack generates a string block ID if one is not <br> provided</pre><pre> if (typeof blockIDJSON !== 'object') { <br> return messageTypes.OTHER;<br> }</pre><pre> const { messageType } = blockIDJSON;</pre><pre> if (messageTypes[messageType]) {<br> return messageType;<br> }</pre><pre> }</pre><pre> return messageTypes.OTHER;</pre><pre>}</pre><h3><strong>Effectively Roll Out New Features and Tips to Your\u00a0Users</strong></h3><p>Another benefit of knowing a user\u2019s last app_home_opened timestamp is that you can now tell if you\u2019ve released a new feature since the last time they\u2019ve engaged with your product. You could also have a rotating list of helpful tips for\u00a0users.</p><p>Again, a word of caution, this event fires every time a user opens your app, so avoid overloading the user. For example, if User A sends a message to User B in your app, you probably don\u2019t want to send an additional message to User B when they open User A\u2019s message. Having too many things to focus on could be confusing to the user. We mitigate these types of issues by using the last message type logic described above.</p><h3><strong>Wrapping Up</strong></h3><p>We hope you\u2019re as excited as we are about using app_home_opened as a powerful tool for better understanding how users interact with your app, pre-loading common actions for user convenience, and effectively rolling out new features and tips to your\u00a0users.</p><p>Comment below if you\u2019re excited about app_home_openedor if you have any questions! We\u2019d love to hear how you\u2019re using the app_home_opened event (or other features) to create great Slack experiences.</p><p><em>Check out Grow\u2019s use of app_home_opened. Get started by </em><a href=\"https://slack.com/apps/ABQJ20E2Z-grow?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-q308-unlock-better-ux\"><em>visiting their listing</em></a><em> in the Slack </em><a href=\"https://slack.com/apps?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-q308-unlock-better-ux\"><em>App Directory</em></a><em>.</em></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=30810619845\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/unlock-better-ux-for-your-slack-bot-with-app-home-opened-30810619845\">\ud83d\udd13Unlock better UX for your Slack Bot with App Home Opened \ud83d\udee0</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Unlock better UX for your Slack Bot with App Home Opened",
"updated": 1568217885179,
"author": "Richard Q Hill",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/unlock-better-ux-for-your-slack-bot-with-app-home-opened-30810619845?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1568217885000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:d3:5941944c",
"keywords": [
"salesforce",
"specs",
"xkcd",
"slack",
"announcements"
],
"originId": "https://medium.com/p/bac42b6a8a0c",
"fingerprint": "903e2c6d",
"content": {
"content": "<h4>Slack\u2019s two-day developer conference will feature product announcements, workshopping, app building and\u00a0more</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*UeoxsFMyZcManQ9NOifC6g.jpeg\"></figure><p>Last year, we introduced <a href=\"https://slackhq.com/whats-next-for-spec-our-conference-for-builders\">Spec</a>, our first developer conference (<a href=\"https://medium.com/slack-developer-blog/catching-up-on-all-things-spec-851f8c5136fb\">check out the recap</a>). Now, for Spec 2019, we\u2019re going even bigger, with more speakers, more sessions, more opportunities to connect\u200a\u2014\u200aand more conference. Spec will be hosted in San Francisco on Oct. 22 and\u00a023.</p><p>We just rolled out our <a href=\"https://slack.com/spec/agenda\">full agenda for Spec 2019</a> with two separate tracks and keynotes from Randall Munroe, the creator of the popular webcomic<strong> </strong><a href=\"https://xkcd.com/\">xkcd</a>, and Sarah Franklin, EVP and GM, Developer Relations and Trailhead at Salesforce. Here\u2019s a preview of the action-packed two days we\u2019ve got\u00a0planned.</p><h4>Day 1: New releases, secure apps and community</h4><p>Kick things off by learning about the latest Slack platform functionality. VP and GM of Platform at Slack, Brian Elliott, and Slack\u2019s director of Product, Ellie Powers, will be sharing the newest Slack Platform features and product announcements that allow developers to build better, more deeply integrated apps.</p><p>Last year at Spec, we introduced Actions and <a href=\"https://api.slack.com/block-kit\">Block Kit</a>, our UI framework that enables richer app experiences in Slack. But how do you know when it\u2019s time for a redesign? This year, we present <strong>Future-proofing your app with Block Kit,</strong> where you\u2019ll learn how to identify when it\u2019s time to redesign your app, and how to approach a migration. Our panel of experts will include Katie Chen, staff Product designer at Slack; Pete Michel, principal architect at Guru; and Netali Jakubovitz, product manager at\u00a0Doodle.</p><p>In <strong>Slack on security: Demystifying how to build a trustworthy app</strong>, members of Slack\u2019s own security team will walk you through best practices for building secure apps, including actionable steps to unlock enterprise adoption.</p><p>Wrap up the day with a soon-to-be-announced workshop (trust us, it\u2019ll be worth the wait!) and then roll down your sleeves for Franklin\u2019s closing keynote. Slack\u2019s director of Developer Relations, Bear Douglas, will host a conversation with Franklin on the expanding role of developers and the lessons learned building a sustainable, equitable community.</p><p>Day one will wrap up with a reception before it\u2019s time to turn in, get some rest and get ready for Day\u00a0Two.</p><h4>Day 2: Explore creativity and curiosity with\u00a0xkcd</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/500/1*GqI6NG7H_MRdCvazs_yzfA.png\"><figcaption>Randall Munroe, xkcd creator, is also the author of the newly released book \u201cHow To: Absurd Scientific Advice for Common Real-World Problems.\u201d <a href=\"http://xkcd.com\">xkcd</a> comic used with permission; license via Creative\u00a0Commons.</figcaption></figure><p>Ever wonder how Slack builds Slack? Join us for Day Two of Spec to hear from our co-founder and CTO Cal Henderson on how Slack engineers are thinking through\u200a\u2014\u200aand solving\u200a\u2014\u200athe big challenges affecting our shared customers. This morning keynote will be full of expert insights to help you achieve scale, accessibility and delight when building.</p><p>Version one of any product, however, is just that: the beginning. Creating a successful app begins with your first release, and continues with each iteration. In <strong>Continuous discovery and innovation in Slack, </strong>Aubrey Tatarowicz<strong>,</strong> a senior software engineer at <a href=\"https://troops.ai/\">Troops.ai</a>, will share how Troops uses continuous deployment, feature flagging, and customer communication to test and launch incremental product\u00a0updates.</p><p>In <strong>Building delightful experiences in Slack for large-scale organizations</strong>, <strong>Samir Diwan</strong>, the co-founder and CEO of <a href=\"https://www.polly.ai/\">Polly</a>, will detail the journey of building enterprise-grade experiences for Intuit and other large Slack customers. Diwan will share special considerations for catering to large organizations, including handling rate limits and keeping up with the ever-evolving needs of complex customers.</p><p>On Day Two we\u2019ll also look at how developers can take a hands-on approach to driving app adoption. At <strong>Driving adoption and engagement with outstanding onboarding</strong>, <strong>Rea Loretta</strong>, the co-founder and CEO of <a href=\"https://toast.ninja/\">Toast</a>, and <strong>Fletcher Richman</strong>, the co-founder and CEO of <a href=\"https://halp.com/\">Halp</a>, will show you how they\u2019ve been able to maximize user engagement. Then, it\u2019s time to start building. Learn how to show first-time users a welcome message, display a help message when needed, and give them the option to dismiss it or opt out entirely.</p><p>Spec 2019 will conclude with Munroe of xkcd joining the \u201cvoice of Slack,\u201d Anna Pickard, Head of Brand Communications, in a conversation about creativity, curiosity and the value in asking big\u200a\u2014\u200aeven absurd\u200a\u2014\u200aquestions. We\u2019re pretty sure you\u2019ll leave feeling inspired to keep asking\u00a0them.</p><h3>Register for Spec\u00a02019</h3><p>This is just a small sampling of what we have in store; check out the <a href=\"https://slack.com/spec/agenda\">full agenda</a>. <strong>Early bird pricing ends Sept. 20, so make sure to </strong><a href=\"https://www.cvent.com/events/spec-by-slack-2019/registration-1ff0aeafb373430898f7951b05e11d6a.aspx\"><strong>register soon </strong></a><strong>to take advantage.</strong></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bac42b6a8a0c\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/spec-is-back-with-more-conference-than-ever-before-bac42b6a8a0c\">Spec is back with more conference than ever before</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Spec is back with more conference than ever before",
"updated": 1567626878333,
"author": "Slack API",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/spec-is-back-with-more-conference-than-ever-before-bac42b6a8a0c?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1567528532000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:d2:5941944c",
"keywords": [
"build-app",
"ideas",
"automation",
"slack-apps",
"slack"
],
"originId": "https://medium.com/p/3a0aeda2bee6",
"fingerprint": "f0727414",
"content": {
"content": "<h4>Make your life easier with Slack tools and\u00a0APIs</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*E2A0XUAnQalObAHhe6LtXA.png\"></figure><p>Let\u2019s face it. Doing the same task over and over again is a boring waste of time, but we can\u2019t just avoid this work. That\u2019s why in our team, we started thinking about ways of making things faster and lessening any human interaction for effortless results. Saving time is key for everyone in the\u00a0end.</p><p>Your recurring and boring tasks may vary, but at work, it\u2019s likely that you check your support email inbox, and get asked to generate reports. We deal with this too, and agree that doing daily repetition is challenging and\u00a0tedious.</p><p>At CleverPPC, we track and manage our customers\u2019 Google Ads campaigns several times a day manually. If you\u2019ve used Google Ads before, you might have felt overwhelmed by the huge amount of options and graphs that Google offers. Usually, we only need to check on a single metric, and the page load and other fields slow down our quick search. Quite frustrating, right?</p><p>To fix this challenge, we decided to use Google Ads API to monitor these metrics where we work the most: Slack. Instead of loading each page, we could then track metrics and graphs pertaining to the campaign\u2019s performance in a Slack channel\u00a0easily.</p><p>Our <a href=\"https://clevergoogleads.com/slack-app?ref=medium\">Slack app</a> saved us time by tracking Google Ads accounts with a straightforward approach. It featured the ability to look at the metrics we wanted to, manage our accounts, and set reminders through a seamless structure. Integrating the Clever Google Ads app added great value to our company that others could use to their advantage as well. So, how does it work? Let\u2019s get into more\u00a0details.</p><h3>Clever Google\u00a0Ads</h3><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*1SG_7cQI6kGB0A7lI1G52Q.gif\"><figcaption>Clever Google Ads for\u00a0Slack</figcaption></figure><p>Using this app is pretty\u00a0simple:</p><ul><li>Connect your Google\u00a0account</li><li>Select the Google Ads account that you want to\u00a0track</li><li>Ask for\u00a0metrics</li><li>Receive your campaign performance instantly</li></ul><p>And what do we need to make this app\u00a0work?</p><ul><li><strong>Google OAuth2.0</strong>, for the\u00a0login</li><li><strong>Google Ads API</strong> (beta) or Google Adwords API (stable), for retrieving metrics or making\u00a0changes</li><li>An API developed by us to generate graphs using Chart.js, since a picture is worth a thousand\u00a0words</li><li><a href=\"https://slack.dev/node-slack-sdk/?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-q308-creating-slack-apps-cleverppc\"><strong>Node Slack SDK</strong></a>, to receive commands and respond accordingly</li></ul><p>The Slack API provides a huge amount of functions, and that\u2019s good, but in our case, we just needed a couple of commands. We wanted to respond to a user interaction and automatically send scheduled messages. For us, the most important API calls\u00a0are:</p><ul><li><strong>chat.postMessage</strong>, used right after a user writes something in the bot home or wants to share metrics with other channels. Also, it is needed to send automatic messages.</li><li><strong>chat.postEphemeral</strong>, quite important to ensure that an action will only be performed from a specific user. You may use it for login messages or account selections.</li><li><strong>dialog.open. </strong>This one is pretty interesting. It helps a lot with the user experience, since it will open a pop-up with a form that will disappear after the submission. This is your best option if you want some feedback from your users, as it will keep their conversations clean.</li></ul><p>Adding anything else would add great value, but on the other hand, the app\u2019s main menu would be overloaded with many different options and buttons, and we\u2019d like to avoid that. This app was not designed to replace the Google Ads dashboard, so for getting more complicated reports, we recommend using the Google Ads dashboard itself.</p><h3>Your app</h3><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/800/1*VRCHnkfPCatUP74Vy671fw.png\"><figcaption>What\u2019s your idea to save\u00a0time?</figcaption></figure><p>If you want to start creating apps or you have already developed one and want to broaden your horizons, you\u2019ll probably need a great idea. It\u2019s so frustrating to find out that no one is using your app after spending hours or days designing it,\u00a0right?</p><p>People love to save time and that\u2019s what our experience says. You may think that your tedious tasks are only for you, but hey, you can just ask around! What are the most time-consuming tasks of the QA team? Do they want to run some specific tests after somebody asks them to check the staging environment? They could do that by clicking on a Slack button, which calls your API! Voil\u00e1! There you have\u00a0it!</p><p>Also, don\u2019t focus entirely on making an app for everyone. Start with your team, use it yourself and your colleagues. Then see if it really helps you or if you\u2019d rather be doing your job the old way. If you, the creator, cannot make full use of it, who\u00a0will?</p><p>Using the app ourselves is very helpful. We can ask for feedback from our colleagues, which inspires us to add new features or shortcuts. Putting yourself into the shoes of your users is easy if you frequently use the tool you designed.</p><h3>In summary</h3><p>We all like to save as much time as possible, but not everyone can make an efficient new app. Whether you have a great idea for a new app or the time to create one, you should try to develop a Slack app. There are plenty of resources out there to help you and your team save precious time from repetitive tasks!</p><p><em>Ready to try out building your own app? Get started at </em><a href=\"https://api.slack.com/start?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-q308-creating-slack-apps-cleverppc\"><em>api.slack.com/start</em></a><em>. Have questions? Tweet us at @SlackAPI or drop us a note at feedback@slack.com.</em></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3a0aeda2bee6\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/creating-slack-apps-for-tedious-automatable-processes-3a0aeda2bee6\">Creating Slack Apps for tedious, automatable processes</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Creating Slack Apps for tedious, automatable processes",
"updated": 1566980024696,
"author": "Guillermo Mora Cordero",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/creating-slack-apps-for-tedious-automatable-processes-3a0aeda2bee6?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1566937454000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:d1:5941944c",
"keywords": [
"block-kit",
"software",
"developer-stories",
"chatbots",
"slack"
],
"originId": "https://medium.com/p/c78146d63197",
"fingerprint": "abf5f1",
"content": {
"content": "<h4>Creating NAVITIME for\u00a0Slack</h4><p><em>This article was originally posted on </em><a href=\"https://qiita.com/navitime_tech/items/85de33072486e7d323a5\"><em>our Qiita blog in Japanese</em></a><em>.</em></p><p>While developing our new Slack app, we fully utilized Block Kit to realize the rich user interface of NAVITIME for Slack. In this article, we\u2019ll discuss the lessons we learned during development:</p><ul><li>Overview of Block\u00a0Kit</li><li>How we used Block Kit for NAVITIME for\u00a0Slack</li><li>Obstacles we encountered, and a few\u00a0tips</li></ul><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*9UrOE4_ul1lBUdsumX4KjQ.png\"></figure><p>NAVITIME launched a new Slack app on July 2, 2019. Refer to <a href=\"https://static.cld.navitime.jp/totalnaviapp-storage/storage/smartphone/slack_app/slack_landing.html\">the landing page (in Japanese)</a> to learn more. NAVITIME is a popular travel and destination routing app in Japan for both locals and those visiting from\u00a0abroad.</p><h4>Disclaimer</h4><p>This article doesn\u2019t discuss the basics of creating Slack apps or how to interact with the payloads sent from Slack Platform. To learn how to get started, we recommend reading <a href=\"https://api.slack.com/\">Slack\u2019s API documents</a>.</p><h3>Block Kit\u00a0Overview</h3><p>Block Kit is a new UI framework for building rich messages on Slack. Block Kit is not a method library but instead is an interface specification for communications with Slack Platform. You don\u2019t need to install anything to start using it. Simply send Block Kit compatible JSON data to Slack\u00a0servers.</p><h4>Things you can do with Block\u00a0Kit</h4><p>Using Block Kit, you can easily build beautiful native app-like UI and organize messages with great informational density.</p><p>To learn how to build apps with Block Kit, <a href=\"https://github.com/slackapi/app-interaction-patterns\">this article</a> is a great resource for examples of using Block Kit properly.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*sNZle7K8TK6_lUXInth6TQ.png\"><figcaption>Creating a route in Slack with the Block Kit-enabled NAVITIME\u00a0app</figcaption></figure><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*4JRmIxXGbHNT0XecwJfp0g.png\"><figcaption>Viewing the route that NAVITIME\u00a0created</figcaption></figure><h4>Check your UI with Block Kit\u00a0Builder</h4><p>It can be a bit time-consuming to verify the appearance of messages by cutting and pasting JSON data. While prototyping, we recommend using <a href=\"https://api.slack.com/tools/block-kit-builder\">Block Kit Builder</a>, a useful tool offered by Slack. Block Kit Builder displays a live preview in the left pane when you edit the JSON data in the right pane as shown below. Additionally, once you\u2019ve built your message, you can instantly share the message with other people in your Slack workspaces.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*Goh1BUoWWmfXOhC7vReKmA.png\"><figcaption>The Block Kit Builder\u200a\u2014\u200aa great way to preview your\u00a0blocks</figcaption></figure><h4>Structure of Block Kit\u00a0Messages</h4><p>Block Kit messages consist of data objects called \u201cblocks.\u201d Blocks may have many elements such as buttons, a select menu, or images. There are several types of blocks and allowed element types may vary. In order to build your messages with Block Kit, you stack these elements vertically.</p><p>If you\u2019re curious about the types of block elements, refer to the corresponding official documents\u200a\u2014\u200a<a href=\"https://api.slack.com/reference/messaging/blocks\">Reference: Message layout blocks</a> and <a href=\"https://api.slack.com/reference/messaging/block-elements\">Reference: Block elements</a>.</p><h4>Simple Example of JSON Structure</h4><p>Code Example Here is a very basic Block Kit JSON\u00a0example:</p><pre>[<br> {<br> &quot;type&quot;: &quot;actions&quot;,<br> &quot;elements&quot;: [<br> {<br> &quot;type&quot;: &quot;button&quot;,<br> &quot;text&quot;: {<br> &quot;type&quot;: &quot;plain_text&quot;,<br> &quot;text&quot;: &quot;Button element 1&quot;,<br> &quot;emoji&quot;: true<br> },<br> &quot;value&quot;: &quot;click_me_123&quot;<br> },<br> {<br> &quot;type&quot;: &quot;static_select&quot;,<br> &quot;placeholder&quot;: {<br> &quot;type&quot;: &quot;plain_text&quot;,<br> &quot;text&quot;: &quot;Select element 2&quot;<br> },<br> &quot;options&quot;: [<br> {<br> &quot;text&quot;: {<br> &quot;type&quot;: &quot;plain_text&quot;,<br> &quot;text&quot;: &quot;Choice 1&quot;<br> },<br> &quot;value&quot;: &quot;value-0&quot;<br> },<br> {<br> &quot;text&quot;: {<br> &quot;type&quot;: &quot;plain_text&quot;,<br> &quot;text&quot;: &quot;Choice 2&quot;<br> },<br> &quot;value&quot;: &quot;value-1&quot;<br> }<br> ]<br> }<br> ]<br> },<br> {<br> &quot;type&quot;: &quot;divider&quot;<br> },<br> {<br> &quot;type&quot;: &quot;section&quot;,<br> &quot;text&quot;: {<br> &quot;type&quot;: &quot;mrkdwn&quot;,<br> &quot;text&quot;: &quot;You can add a button alongside text in your message. &quot;<br> },<br> &quot;accessory&quot;: {<br> &quot;type&quot;: &quot;button&quot;,<br> &quot;text&quot;: {<br> &quot;type&quot;: &quot;plain_text&quot;,<br> &quot;text&quot;: &quot;Button&quot;<br> },<br> &quot;value&quot;: &quot;click_me_123&quot;<br> }<br> }<br>]</pre><h4>UI Example</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*8zs-QdjN_LashAG7RjMitg.png\"><figcaption>An example of an interactive message in Block\u00a0Kit</figcaption></figure><p>This image is how the block kit example code appears in Slack. As you can see, there are several block elements inside the\u00a0message.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*1VLKHF4ND9eI4EapFS0fLw.png\"><figcaption>The various components of this Block Kit\u00a0message</figcaption></figure><p>To better understand the structure of the message, <a href=\"https://api.slack.com/tools/block-kit-builder?blocks=%5B%7B%22type%22%3A%22actions%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22button%22%2C%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22Button%20element%201%22%2C%22emoji%22%3Atrue%7D%2C%22value%22%3A%22click_me_123%22%7D%2C%7B%22type%22%3A%22static_select%22%2C%22placeholder%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22Select%20element%202%22%7D%2C%22options%22%3A%5B%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22Choice%201%22%7D%2C%22value%22%3A%22value-0%22%7D%2C%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22Choice%202%22%7D%2C%22value%22%3A%22value-1%22%7D%5D%7D%5D%7D%2C%7B%22type%22%3A%22divider%22%7D%2C%7B%22type%22%3A%22section%22%2C%22text%22%3A%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22You%20can%20add%20a%20button%20alongside%20text%20in%20your%20message.%20%22%7D%2C%22accessory%22%3A%7B%22type%22%3A%22button%22%2C%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22Button%22%7D%2C%22value%22%3A%22click_me_123%22%7D%7D%5D\">try it yourself using the Block Kit\u00a0Builder</a>.</p><h4>Send a message from a Slack\u00a0App</h4><p>If you try sending our example JSON blocks directly to Slack, this won\u2019t work. But if you already have a Slack app which can send plain-text messages with text attribute, you can easily send this Block Kit message by adding blocks at the top level and using your JSON block\u00a0data.</p><p>An example Block Kit JSON array on Block Kit\u00a0Builder:</p><pre>[<br> {<br> &quot;type&quot;: &quot;section&quot;,<br> &quot;text&quot;: {<br> &quot;type&quot;: &quot;mrkdwn&quot;,<br> &quot;text&quot;: &quot;this is a section block&quot;<br> }<br> }<br>]</pre><p>Next, add blocks to complete the message\u00a0payload.</p><pre>{<br> &quot;channel&quot;: &quot;Cxxxxxx&quot;,<br> &quot;text&quot;: &quot;this content will be ignored when a block exists&quot;,<br> &quot;blocks&quot;: // Insert Json created by Block Kit Builder here<br> [<br> {<br> &quot;type&quot;: &quot;section&quot;,<br> &quot;text&quot;: {<br> &quot;type&quot;: &quot;mrkdwn&quot;,<br> &quot;text&quot;: &quot;This is a section block&quot;<br> }<br> }<br> ]<br>}</pre><p>Now let\u2019s <strong>send the message </strong>using your Slack app. You will see the same message on Slack. Take note that when a message has a block, the text attribute is used as a fallback and doesn't show in the message. (Reference: <a href=\"https://api.slack.com/reference/messaging/payload\">Reference: Message payloads</a>).</p><h3>Case study: NAVITIME for\u00a0Slack</h3><p>The new app, NAVITIME for Slack, uses Block Kit a lot. Next, we\u2019ll detail a message by disassembling its data structure to blocks and elements. You may think this message is a little too complicated, but once we take it apart, you\u2019ll see it is actually very\u00a0simple.</p><p>If you\u2019d like to see the full message, open <a href=\"https://api.slack.com/tools/block-kit-builder?blocks=%5B%7B%22type%22%3A%22section%22%2C%22text%22%3A%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*%E5%87%BA%E7%99%BA%E5%9C%B0*%22%7D%2C%22accessory%22%3A%7B%22type%22%3A%22external_select%22%2C%22placeholder%22%3A%7B%22type%22%3A%22plain_text%22%2C%22emoji%22%3Atrue%2C%22text%22%3A%22%E9%A7%85%2F%E3%83%90%E3%82%B9%E5%81%9C%E3%82%92%E5%85%A5%E5%8A%9B%22%7D%2C%22min_query_length%22%3A1%7D%7D%2C%7B%22type%22%3A%22section%22%2C%22text%22%3A%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*%E5%88%B0%E7%9D%80%E5%9C%B0*%22%7D%2C%22accessory%22%3A%7B%22type%22%3A%22external_select%22%2C%22placeholder%22%3A%7B%22type%22%3A%22plain_text%22%2C%22emoji%22%3Atrue%2C%22text%22%3A%22%E9%A7%85%2F%E3%83%90%E3%82%B9%E5%81%9C%E3%82%92%E5%85%A5%E5%8A%9B%22%7D%2C%22min_query_length%22%3A1%7D%7D%2C%7B%22type%22%3A%22divider%22%7D%2C%7B%22type%22%3A%22actions%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22datepicker%22%2C%22initial_date%22%3A%222019-07-01%22%2C%22placeholder%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E6%97%A5%E4%BB%98%22%7D%7D%2C%7B%22type%22%3A%22static_select%22%2C%22placeholder%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E6%99%82%E9%96%93%E9%81%B8%E6%8A%9E%22%7D%2C%22initial_option%22%3A%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%2223%E6%99%82%22%7D%2C%22value%22%3A%22dummy%20value%2023%22%7D%2C%22options%22%3A%5B%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%220%E6%99%82%22%7D%2C%22value%22%3A%22dummy%20value%200%22%7D%2C%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%221%E6%99%82%22%7D%2C%22value%22%3A%22dummy%20value%201%22%7D%2C%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%2223%E6%99%82%22%7D%2C%22value%22%3A%22dummy%20value%2023%22%7D%5D%7D%2C%7B%22type%22%3A%22static_select%22%2C%22placeholder%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E6%99%82%E9%96%93%E9%81%B8%E6%8A%9E%22%7D%2C%22initial_option%22%3A%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%220%E5%88%86%22%7D%2C%22value%22%3A%22dummy%20value%200%22%7D%2C%22options%22%3A%5B%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%220%E5%88%86%22%7D%2C%22value%22%3A%22dummy%20value%200%22%7D%2C%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%221%E5%88%86%22%7D%2C%22value%22%3A%22dummy%20value%201%22%7D%2C%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%2259%E5%88%86%22%7D%2C%22value%22%3A%22dummy%20value%2059%22%7D%5D%7D%5D%7D%2C%7B%22type%22%3A%22actions%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22static_select%22%2C%22placeholder%22%3A%7B%22type%22%3A%22plain_text%22%2C%22emoji%22%3Atrue%2C%22text%22%3A%22%E6%97%A5%E6%99%82%E8%A8%AD%E5%AE%9A%22%7D%2C%22initial_option%22%3A%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E5%87%BA%E7%99%BA%22%7D%2C%22value%22%3A%22%E5%87%BA%E7%99%BA%22%7D%2C%22options%22%3A%5B%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E5%87%BA%E7%99%BA%22%7D%2C%22value%22%3A%22%E5%87%BA%E7%99%BA%22%7D%2C%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E5%88%B0%E7%9D%80%22%7D%2C%22value%22%3A%22%E5%88%B0%E7%9D%80%22%7D%2C%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E5%A7%8B%E7%99%BA%22%7D%2C%22value%22%3A%22%E5%A7%8B%E7%99%BA%22%7D%2C%7B%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E7%B5%82%E9%9B%BB%22%7D%2C%22value%22%3A%22%E7%B5%82%E9%9B%BB%22%7D%5D%7D%5D%7D%2C%7B%22type%22%3A%22actions%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22button%22%2C%22value%22%3A%22dummy%20value%22%2C%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E8%A9%B3%E7%B4%B0%E6%9D%A1%E4%BB%B6%E8%A8%AD%E5%AE%9A%22%7D%7D%2C%7B%22type%22%3A%22button%22%2C%22text%22%3A%7B%22type%22%3A%22plain_text%22%2C%22text%22%3A%22%E6%A4%9C%E7%B4%A2%22%7D%2C%22style%22%3A%22primary%22%7D%5D%7D%2C%7B%22type%22%3A%22context%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22%3Abulb%3A%20%60%2Fnavitime%20%E8%A1%A8%E5%8F%82%E9%81%93%E3%81%8B%E3%82%89%E6%96%B0%E5%AE%BF%60%20%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%85%A5%E5%8A%9B%E3%81%99%E3%82%8B%E3%81%A8%E7%B5%8C%E8%B7%AF%E6%A4%9C%E7%B4%A2%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%22%7D%5D%7D%5D\">open the example message in Block Kit\u00a0Builder</a>.</p><h4>Search Window</h4><p>For the parts to input departure, destination, datetime, and so on, we recreated in the select menu and buttons native-app-level appearance and usability.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*QlzlNW9xMODgRke801x8Fg.png\"><figcaption>Constructing a search feature for routes using Block Kit\u00a0elements</figcaption></figure><h4>Display Routes</h4><p>Route navigation tends to be so complicated, so we used both markdown and icon images a lot to organize the elements.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*uIR1Pz2JJ07aSAw6lMfBew.png\"><figcaption>A detailed route display enabled by Block\u00a0Kit</figcaption></figure><p><a href=\"https://api.slack.com/tools/block-kit-builder?blocks=%5B%7B%22type%22%3A%22section%22%2C%22text%22%3A%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22%E7%B5%8C%E8%B7%AF2%5Cn*15%3A36%20%E2%87%92%2015%3A59%20%5B%E5%AE%89%5D%5B%E6%A5%BD%5D%20*%20%5Cn%20*%5B%E7%99%BA%5D%20%E8%A1%A8%E5%8F%82%E9%81%93%20%E2%87%92%20%5B%E7%9D%80%5D%20%E5%93%81%E5%B7%9D*%20%5Cn23%E5%88%86%20%E4%B9%97%E6%8F%9B1%E5%9B%9E%20%5Cn330%E5%86%86%20%5BIC%5D319%E5%86%86%22%7D%7D%2C%7B%22type%22%3A%22divider%22%7D%2C%7B%22type%22%3A%22context%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22%E2%96%BD15%3A36%22%7D%2C%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*%E8%A1%A8%E5%8F%82%E9%81%93*%22%7D%5D%7D%2C%7B%22type%22%3A%22context%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22image%22%2C%22image_url%22%3A%22https%3A%2F%2Fapi.slack.com%2Fimg%2Fblocks%2Fbkb_template_images%2Fgoldengate.png%22%2C%22alt_text%22%3A%22icon_metro01.png%22%7D%2C%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*%E6%9D%B1%E4%BA%AC%E3%83%A1%E3%83%88%E3%83%AD%E9%8A%80%E5%BA%A7%E7%B7%9A*%20%5Cn%E6%B5%85%E8%8D%89%20%E8%A1%8C%5Cn12%E5%88%86%E3%83%BB%C2%A5170%20%5BIC%5D%C2%A5165%5Cn%22%7D%5D%7D%2C%7B%22type%22%3A%22context%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22%E2%96%BC15%3A48%5Cn%E2%96%BD15%3A53%22%7D%2C%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*%E6%96%B0%E6%A9%8B*%22%7D%5D%7D%2C%7B%22type%22%3A%22context%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22image%22%2C%22image_url%22%3A%22https%3A%2F%2Fapi.slack.com%2Fimg%2Fblocks%2Fbkb_template_images%2Fgoldengate.png%22%2C%22alt_text%22%3A%22icon_train02.png%22%7D%2C%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*%EF%BC%AA%EF%BC%B2%E4%B8%8A%E9%87%8E%E6%9D%B1%E4%BA%AC%E3%83%A9%E3%82%A4%E3%83%B3*%20%5Cn%E5%93%81%E5%B7%9D%20%E8%A1%8C%5Cn6%E5%88%86%E3%83%BB%C2%A5160%20%5BIC%5D%C2%A5154%5Cn%5Cn%3E%C2%A50%20%E8%87%AA%E7%94%B1%E5%B8%AD%E6%96%99%E9%87%91%5Cn%3E%C2%A5770%20%E3%82%B0%E3%83%AA%E3%83%BC%E3%83%B3%E6%96%99%E9%87%91%22%7D%5D%7D%2C%7B%22type%22%3A%22context%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22%E2%96%BC15%3A59%22%7D%2C%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*%E5%93%81%E5%B7%9D*%22%7D%5D%7D%5D\"><em>Open the full message of NAVITIME Route Search Result in Block Kit Builder</em></a><em>. Note: we replaced the icon image URLs with the ones available in Block Kit\u00a0Builder.</em></p><h3>Obstacles and\u00a0Tips</h3><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*RHuciZABXZyRVVkADnlBJw.png\"></figure><h4>Performance degradation with image\u00a0elements</h4><p>When we had context blocks with seven to ten image elements in a single message, it took seven to eight seconds to display the message in Slack. If your app needs to display messages without any delays, you may need to avoid using many images in messages. Instead, you can use many emoji instead of large\u00a0images.</p><h4>Mobile screen issues with buttons and select\u00a0menus</h4><p>On smartphones, Slack displays buttons and select menus full width. So, if you have a lot of buttons in a message, a user\u2019s mobile screen may be filled with buttons. Make sure to test your message on mobile as well in the Block Kit builder or on your\u00a0device.</p><p>In our case, we decided to prioritize our laptop users\u2019 experience as most of our smartphone users use our mobile app instead of our Slack\u00a0app.</p><h4>Block Kit elements unavailable in\u00a0Dialogs</h4><p>Originally we thought about using Dialogs to input departure, destination, and date/time. But we realized that it\u2019s not possible to take advantage of these Block Kit elements in dialogs at this time. Instead, we decided to use select menus in dialogs and place the parts which require Block Kit components outside\u00a0dialogs.</p><h4>A wish list for the future of Block\u00a0Kit</h4><p>As of July 2019, Block Kit has only five types of elements. A few common elements of web and native apps are still missing. Here\u2019s our wish list for the future, and the corresponding workarounds we\u00a0used:</p><p><strong>Radio buttons: </strong>We went with static_select select menu\u00a0instead</p><p><strong>Datetime picker:</strong> We went with static_select select menu instead. Ideally, we wanted to have a single element to input hours and\u00a0minutes</p><p><strong>More options for </strong><strong>channels_select select menu: </strong>it would be more user-friendly if we had an option like select from the channels the current user\u00a0joins</p><h4>Summary</h4><p>Let\u2019s review what we\u2019ve\u00a0covered:</p><ul><li>You can build rich messages just by having Block Kit JSON in\u00a0Slack</li><li>Be careful not to use many large images in your\u00a0messages</li><li>Be sure to test your messages on mobile\u00a0devices</li></ul><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c78146d63197\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/building-a-user-friendly-slack-app-with-block-kit-navitime-c78146d63197\">Building a user-friendly Slack app with Block Kit</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Building a user-friendly Slack app with Block Kit",
"updated": 1565111138566,
"author": "NAVITIME JAPAN Co., Ltd",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/building-a-user-friendly-slack-app-with-block-kit-navitime-c78146d63197?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1565110920000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:d0:5941944c",
"keywords": [
"productivity",
"apps",
"slack-tips-and-tricks",
"cross-functional-teams",
"slack"
],
"originId": "https://medium.com/p/f58abe11ebb0",
"fingerprint": "cf3afde0",
"content": {
"content": "<h4>Designing Dash for Slack with a customizable UI framework</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*b-ntV-zcjejxrJAT2KGh5Q.jpeg\"></figure><blockquote>Jeremy (managing partner at Postlight) and team recently launched <a href=\"https://dashforslack.com\">Dash</a>, a new Slack app. Dash gives teams an easy way to start a new Slack channel for a specific topic or conversation, set a deadline, and then archive the channel and share the outcome of the discussion when time\u2019s up. <a href=\"https://dashforslack.com/slack/direct-install\">Add Dash to your Slack workspace now</a>\u200a\u2014\u200aand read on to learn how we used Block Kit to style our app messages in\u00a0Slack.</blockquote><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*uuRuBKZGuaBVc2XP_IlvYQ.png\"></figure><h3>Using Block\u00a0Kit</h3><p>Just as we started working on Dash, we found out about <a href=\"https://api.slack.com/block-kit\">Block Kit</a>, which was in beta at the time. We were really interested to see what Block Kit could do, so we developed two versions of the app: The Block Kit version, and the non-Block Kit version. We launched with Block\u00a0Kit.</p><h4>Datepicker</h4><p>Dash exists because Slack added a datepicker when they introduced Block Kit. The datepicker allows users in Slack to do something that wasn\u2019t possible before: take actions that impact the future. In Dash\u2019s case, the datepicker is used to pick the end date for a conversation.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*kDoGkZWWLb0rTUGEuVeLEw.png\"><figcaption>The datepicker in action. We use Block Kit\u2019s layout elements to carefully place an error message when the user selects a date in the\u00a0past.</figcaption></figure><h4>Dashboard</h4><p>Dash makes unique use of Slack by providing a live<em> Dash</em>board inside your conversation with Dash bot. The Dashboard is constructed with Blocks and allows the user to close or edit the end time of any of their Dash channels from one\u00a0spot.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*Px4hNvSf6qyROD_shb8U6Q.png\"></figure><h3>Lessons learned</h3><p>Building Dash with Block Kit while Block Kit was still in active development was fun and educational. Here are some of the things we learned as we\u00a0went.</p><h4>Pick your integration points carefully</h4><p>Slack is a robust platform with many APIs a third party app can leverage. <a href=\"https://postlight.com/trackchanges/building-dash\">We built the first version of Dash using threads</a>, only to find out that many of our testers needed a tutorial on threads before they could make effective use of Dash. Experiment with as many features of Slack\u2019s API as possible to find the right fit for your\u00a0app.</p><h4>Bots can\u2019t do everything</h4><p>Slack allows you to use their API on behalf of an authenticated user or your bot. It\u2019s incredibly important to understand what features of Slack you can use as a bot and as a user, especially when dealing with private channels. We made it all the way to staging with some features that didn\u2019t function properly because the bot user wasn\u2019t able to take certain API\u00a0actions.</p><h4>Build for\u00a0speed</h4><p>You\u2019ve got three seconds to respond when Slack calls your code. Here are some important things to consider:</p><ul><li>When using Function-as-a-Service providers, solve <a href=\"https://mikhail.io/2018/08/serverless-cold-start-war/\">cold starts</a>. Serverless has a <a href=\"https://github.com/FidelLimited/serverless-plugin-warmup\">wonderful plugin for fixing cold\u00a0starts</a>.</li><li>Keep API access to a minimum, even\u00a0Slack\u2019s.</li><li>Use asynchronous, event-driven, responses and show loading states. We use <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html\">AWS Lambda\u2019s Invoke</a> feature to start background functions for complex logic, like updating the Dashboard.</li></ul><h4>Slack teams have different permissions</h4><p>Slack\u2019s feature set may seem uniform across different teams, but it is not. Some teams disallow channel creation and archiving. It\u2019s important to create Slack teams to test how different Slack team setups can impact your app\u2019s functionality.</p><h4>Log errors</h4><p>Sure, errors usually get logged in a text file somewhere. It\u2019s far more important to log those errors somewhere actionable. We use <a href=\"https://sentry.io/\">Sentry</a> for Dash and it is a lifesaver. Web app and native app errors are much more obvious to a user, but backend errors can go unnoticed. Be sure you\u2019re sending your errors to a service that can alert you when your Slack app is having an\u00a0issue.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*U3FyANRPU-eGxfLZXP-v8g.png\"></figure><h3>Rapid fire\u00a0tips</h3><p>Here are a few more miscellaneous tips that will help you build your own Slack\u00a0app.</p><ul><li>Read the <a href=\"https://api.slack.com/types\">Slack API Types</a> documentation multiple times. Some things covered in these docs aren\u2019t mentioned anywhere else in Slack\u2019s documentation.</li><li>Make sure the fields you use in the data Slack sends you are documented! Slack sometimes sends extra data that may someday be\u00a0removed.</li><li>Don\u2019t use the tokens on the app page, instead implement OAuth from the start. It\u2019s too easy to build an app that only works for one\u00a0user.</li><li>Setup at least three Slack apps (they\u2019re free!): development, staging, and production.</li><li>A serverless infrastructure is a great match for Slack. You can scale to bursts of activity much more easily. We used <a href=\"https://aws.amazon.com/lambda/\">AWS Lambda</a> with <a href=\"https://github.com/postlight/serverless-babel-starter\">our starter\u00a0kit</a>.</li><li>Log the responses you send back to Slack for easier debugging. You can copy paste the JSON right into the <a href=\"https://api.slack.com/tools/block-kit-builder\">Block Kit Builder</a> for UI\u00a0polish.</li><li>Analytics aren\u2019t just for web and native apps. We found <a href=\"https://developer.mixpanel.com/docs/nodejs\">Mixpanel\u2019s Node library</a> a great fit for our\u00a0Dash.</li><li>Extract your app strings using an internationalization library. We used\u00a0<a href=\"https://www.i18next.com/\">i18next</a>.</li><li>A not-immediately-obvious side effect of using chat.update to modify a message containing Blocks: Slack doesn\u2019t show \u201c(edited)\u201d after the message, allowing for developers to seamlessly provide app updates without\u00a0clutter.</li><li><a href=\"https://github.com/slackapi/node-slack-sdk\">Slack\u2019s Node SDK</a> is written in TypeScript. Use TypeScript in your app to have validation of the requests you send to the Slack\u00a0API.</li></ul><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*LWa3KxTzv2Z81N3rkjdgBA.png\"></figure><p><em>Check out </em><a href=\"https://dashforslack.com\"><em>Dash</em></a><em>, and let us know what you think, by emailing </em><a href=\"mailto:hello+dash@postlight.com\"><em>hello+dash@postlight.com</em></a><em>.</em></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f58abe11ebb0\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/helpful-tips-for-building-with-block-kit-f58abe11ebb0\">Helpful tips for building with Block Kit</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Helpful tips for building with Block Kit",
"updated": 1561495412492,
"author": "Jeremy Mack",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/helpful-tips-for-building-with-block-kit-f58abe11ebb0?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1561495340000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:cf:5941944c",
"keywords": [
"developer",
"slack",
"onboarding",
"apps",
"user-experience"
],
"originId": "https://medium.com/p/3751306aaecf",
"fingerprint": "37cd3f25",
"content": {
"content": "<h4>Clear and timely communication of your Slack app\u2019s value using the app_home_opened event</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*I2whozv_-kJwwXiOpxh8ow.jpeg\"></figure><p>So you\u2019ve made an awesome app! Now it\u2019s time to educate your users about\u00a0it.</p><blockquote>Tip: If you\u2019re not familiar with Slack\u2019s Events API, I highly recommend reading <a href=\"https://api.slack.com/events-api\">this</a> documentation.</blockquote><h4>Knowing the exact moment to send a\u00a0message</h4><p>Recently released, app_home_opened is an event that Slack app developers can subscribe to and triggers every time a user opens a DM with your\u00a0app.</p><p>The initial seconds of interaction with your app determine whether people view it as useful, or not. By subscribing to this new event, you now have more control over timely communication and that crucial first impression.</p><p>This can be applied in many ways. To name a\u00a0few:</p><ul><li><strong>Onboarding:</strong> Send a friendly welcome message that clearly articulates your app\u2019s value, primary ways to use it, and actionable next\u00a0steps.</li><li><strong>Tips</strong>: You can randomize a set of tips, and send them to a user every few times they open the DM. We recommend every five times, but it\u2019s totally up to you! (Make sure your app remains helpful, and not overly \u201ctalkative\u201d or\u00a0spammy.)</li><li><strong>Welcome back: </strong>If a user hasn\u2019t interacted with your app in a while, send them a message that welcomes them back and reinforces your app\u2019s value, primary ways to use it, and actionable next\u00a0steps.</li><li><strong>Product updates: </strong>Keep your users informed of the latest app improvements, new functionality or features released.</li></ul><h4>How to get\u00a0started</h4><ol><li>Find your App Settings: Go to <a href=\"https://api.slack.com\">https://api.slack.com</a> and then click on <em>Your Apps</em> and select your\u00a0app.</li><li>Click on <em>Event Subscriptions</em></li><li>Click <em>Add Workspace Event</em></li><li>Select app_home_opened and you\u2019re good to\u00a0go!</li></ol><blockquote>Tip: You will need to resubmit your app if it\u2019s listed on the <a href=\"http://slack.com/apps.\">Slack App Directory</a>. That usually doesn\u2019t take too\u00a0long.</blockquote><h4>How to\u00a0code</h4><p>If you\u2019re using node, there\u2019s a really in depth article on it <a href=\"https://slack.dev/node-slack-sdk/events-api\">here</a>. Here\u2019s a modified code snippet from the article that shows how to subscribe to the event and what the payload would look\u00a0like:</p><pre><strong>// Rough Adaptation from the link above<br>const</strong> { createEventAdapter } <strong>=</strong> require('@slack/events-api');<br><strong>const</strong> slackSigningSecret <strong>=</strong> process.env.SLACK_SIGNING_SECRET;<br><strong>const</strong> port <strong>=</strong> process.env.PORT <strong>||</strong> 3000;<br><br><em>// Initialize the adapter to trigger listeners with the full body</em><br><strong>const</strong> slackEvents <strong>=</strong> createEventAdapter(slackSigningSecret, {<br> includeBody: <strong>true</strong>,<br>});<br><br><br>slackEvents.on('app_home_opened', (event, body) <strong>=></strong> {<br> console.log(event);<br>})<br><br>(<strong>async</strong> () <strong>=></strong> {<br> <strong>const</strong> server <strong>=</strong> <strong>await</strong> slackEvents.start(port);<br> console.log(`Listening for events on ${server.address().port}`);<br>})();</pre><pre>// Alternatively, if you're using express you might do this:<br>app.post(&quot;/slack/events&quot;, slackEvents.expressMiddleware());</pre><p>And the event payload looks (roughly) like\u00a0this:</p><pre>{ channel: &quot;C1234&quot;, user: &quot;U1234&quot;, type: &quot;app_home_opened&quot; }</pre><p>The body object has more useful metadata:</p><pre>{<br> api_app_id: &quot;A123&quot;,<br> authed_users: [&quot;U123&quot;, &quot;U124&quot;],<br> event: { <br> channel: &quot;C1234&quot;, <br> user: &quot;U1234&quot;, <br> type: &quot;app_home_opened&quot;<br> },<br> event_id: &quot;123&quot;;<br> event_time: 1313.13;<br> team_id: &quot;T1234&quot;;<br> token: &quot;token&quot;;<br> type: &quot;app_home_opened&quot;;<br>}</pre><h4>Gotchas</h4><p>Remember, this event fires <em>every time </em>someone opens your app\u2019s DM. If you want a user to receive the message one time only, your app is responsible for keeping track of that\u00a0state.</p><p>Also, existing users may already work extensively with your app. However, if they haven\u2019t opened a DM lately, once you enable app_home_opened, they\u2019ll receive an onboarding message, which might cause some confusion or irritation. At <a href=\"http://halp.com\">Halp</a>, we check if a user is associated with a ticket to determine their eligibility for an onboarding message.</p><p>Another thing to think about\u200a\u2014\u200aif you post a message, should it be <a href=\"https://api.slack.com/methods/chat.postEphemeral\">ephemeral</a> or regular? We opted for a regular message, since it\u2019s preserved in chat history. This way, the user can refer back or pin the message for easy\u00a0finding.</p><h4>See it in\u00a0action</h4><p>We used the app_home_opened event to improve our app\u2019s onboarding experience. Halp is a Slack-first IT ticketing system that has a unique set of onboarding challenges: There are <strong>three different types of users </strong>that need to be onboarded at varying stages of the workflow, fulfilling distinct objectives.</p><ol><li><strong>Admins</strong> are onboarded when the they first install the app and must configure it for their workspace.</li><li>Once setup is complete, <strong>agents</strong> learn to create and manage\u00a0tickets.</li><li>When the IT team is ready for company-wide rollout, <strong>end users</strong> are taught to report issues through the\u00a0app.</li></ol><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*Oq9yXH7j0x1X2uILZJCNXQ.gif\"><figcaption>A sample message from the perspective of an agent who just clicked into the app DM for the first\u00a0time.</figcaption></figure><p>For end users, we explain that our app helps them streamline internal requests. We also tell them how to create a ticket\u200a\u2014\u200aincluding a message button for clear and actionable next\u00a0steps.</p><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*z1orRW4qyWR45iOLLDmWJA.gif\"><figcaption>A sample message from the perspective of an end user who just clicked into the app DM for the first\u00a0time.</figcaption></figure><h4>Continuously improving user experience</h4><p>App onboarding is never straightforward. You should invest a lot of time and thought into it. Luckily, Slack has given us yet another tool to help delight our\u00a0users.</p><p>We\u2019d love to hear how you\u2019re using the app_home_opend event (or other features) to create great Slack experiences.</p><p><em>Check out Halp\u2019s freshly updated onboarding flow. Get started by </em><a href=\"https://slack.com/apps/ADBM44F4G-halp\"><em>visiting their listing</em></a><em> in the Slack </em><a href=\"http://slack.com/apps\"><em>App Directory</em></a><em>.</em></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3751306aaecf\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/thoughtful-app-onboarding-3751306aaecf\">Thoughtful app onboarding</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Thoughtful app onboarding",
"updated": 1558022461028,
"author": "Komran Rashidov",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/thoughtful-app-onboarding-3751306aaecf?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1558022461000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
},
{
"id": "qEpwuGc198Q0iZ4TfiGSMxC7/u94Q/Cr0YQ2GQ5OqnE=_16e250a4e18:ce:5941944c",
"keywords": [
"slack",
"announcements"
],
"originId": "https://medium.com/p/49090a09513a",
"fingerprint": "fed6e8a3",
"content": {
"content": "<h4>We\u2019re hitting the road to meet the developers and builders creating a new way to\u00a0work</h4><figure><img alt=\"\" src=\"https://cdn-images-1.medium.com/max/1024/1*TkaJKVZUfDPF7uTGVsEwiw.png\"><figcaption><em>Illustration by </em><a href=\"https://holinaty.com/\"><em>Josh\u00a0Holinaty</em></a></figcaption></figure><p>Mark your calendar! The Slack Platform team will make their way across Europe in early June to meet Slack developers and builders in <a href=\"https://slackcommunity.com/events/details/slack-berlin-presents-build-slack-apps-that-make-your-daily-life-easier/#/?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q206-dev-tour-emea\">Berlin</a>, <a href=\"http://slackdevsparis2019.splashthat.com/blog\">Paris</a> and <a href=\"http://slackdevslondon2019.splashthat.com/blog\">London</a>. Read on for a preview of what to expect in each\u00a0city.</p><p>Join the <a href=\"https://medium.com/@WorkstreamsApp/slack-platform-community-berlin-f8776c1bfff6\">first-ever Slack Platform Community: Berlin event</a>\u200a\u2014\u200ait\u2019s a great opportunity to connect with other devs and share ideas, swap knowledge, and ask questions. The Slack DevRel team will also catch you up on all the latest Slack Platform news. Come meet the team and provide direct feedback on the direction and focus of SPC:\u00a0Berlin.</p><p>In Paris, you\u2019ll get an inside look at the story of Brainsto, an app that facilitates actionable team brainstorms directly in Slack. <a href=\"https://www.linkedin.com/in/sina-taghva-4b430486/\">Sina Tagvha</a> from Braineet, the company behind Brainsto, will go deep on how a small side project became a fully-featured app available for anyone to use. Sina will cover how using Block Kit expanded interactivity and what\u2019s next for the Brainsto app. You\u2019ll also hear from the Slack team on updates to the Platform since the last visit in November, and you\u2019ll get an in-depth look at building with Block\u00a0Kit.</p><p>In London, the Slack Platform team will be joined by speakers from Deliveroo and HSBC. <a href=\"https://www.linkedin.com/in/hugo-darwood-828123bb/\">Hugo Darwood</a> (Deliveroo) and <a href=\"https://www.linkedin.com/in/samwhite0/\">Sam White</a> (HSBC) will walk through the tools they build for their teams, and how custom Slack apps help them to be more productive. Members of the Slack Platform team will share tips and tricks for building with Block Kit, and review the latest and greatest in the Platform.</p><p>Spots are limited; secure yours on the event pages\u00a0below:</p><p><strong>Event Dates</strong></p><p><strong>4 June<br></strong><a href=\"https://slackcommunity.com/events/details/slack-berlin-presents-build-slack-apps-that-make-your-daily-life-easier/#/?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q206-dev-tour-emea\">Slack Platform Community: Berlin @ Factory Berlin\u200a\u2014\u200aMitte</a></p><p><strong>4 June<br></strong><a href=\"http://slackdevsparis2019.splashthat.com/blog\">Slack Developers: Paris @ La\u00a0Fabrique</a></p><p><strong>11 June<br></strong><a href=\"http://slackdevslondon2019.splashthat.com/blog\">Slack Developers: London @ The Steel\u00a0Yard</a></p><p><strong>Bonus points: If you\u2019re headed to JSConf EU or We Are Developers in Berlin, stop by our booth and say hello. Chat in-person with the Platform team, check out a demo, or pick up some swag. At We Are Developers, we\u2019ll host a Slack app development workshop, too!</strong></p><p><em>Want to stay updated? </em><a href=\"https://twitter.com/SlackAPI\"><em>Follow along on Twitter</em></a><em> or join the community at </em><a href=\"https://slackcommunity.com/?utm_medium=referral&utm_source=apiblog&utm_campaign=fy20-Q206-dev-tour-emea\"><em>slackcommunity.com</em></a><em>.</em></p><img width=\"1\" src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=49090a09513a\" height=\"1\"><hr><p><a href=\"https://medium.com/slack-developer-blog/join-slack-in-berlin-paris-and-london-this-june-49090a09513a\">Join Slack in Berlin, Paris, and London this June</a> was originally published in <a href=\"https://medium.com/slack-developer-blog\">Slack Platform Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>",
"direction": "ltr"
},
"title": "Join Slack in Berlin, Paris, and London this June",
"updated": 1558458448152,
"author": "Slack API",
"alternate": [
{
"href": "https://medium.com/slack-developer-blog/join-slack-in-berlin-paris-and-london-this-june-49090a09513a?source=rss----d76c0605b922---4",
"type": "text/html"
}
],
"crawled": 1572579462680,
"published": 1557887552000,
"origin": {
"streamId": "feed/https://medium.com/feed/slack-developer-blog",
"title": "Slack Platform Blog - Medium",
"htmlUrl": "https://medium.com/slack-developer-blog?source=rss----d76c0605b922---4"
},
"visual": {
"url": "http://cdn1.sbnation.com/assets/3360827/SE-sizzle.png",
"width": 1100,
"height": 619,
"contentType": "image/png"
},
"unread": true,
"categories": [
{
"id": "user/f2f031bd-f3e3-4893-a447-467a291c6d1e/category/b35dbac9-ed46-4c6f-ab82-6798caa6b43d",
"label": "Another for NetNewsWire"
}
]
}
]
}