{"id":14704,"date":"2023-07-20T02:08:17","date_gmt":"2023-07-20T09:08:17","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/?p=14704"},"modified":"2023-08-04T02:46:02","modified_gmt":"2023-08-04T09:46:02","slug":"teams-toolkit-for-visual-studio-code-update-july-2023","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/teams-toolkit-for-visual-studio-code-update-july-2023\/","title":{"rendered":"Teams Toolkit for Visual Studio Code update &#8211; July 2023"},"content":{"rendered":"<p>Welcome to the July 2023 update for Teams Toolkit for Visual Studio Code! In this update, we will share what\u2019s new in the upcoming pre-release of Teams Toolkit for Visual Studio Code, including:<\/p>\n<ul>\n<li><span class=\"ui-provider dcl dcm cik dcn dco dcp dcq dcr dcs dct dcu dcv dcw dcx dcy dcz dda ddb ddc ddd dde ddf ddg ddh ddi ddj ddk ddl ddm ddn ddo ddp ddq ddr dds\" dir=\"ltr\">Open your existing SharePoint Framework projects<\/span><\/li>\n<li><span class=\"ui-provider dcl dcm cik dcn dco dcp dcq dcr dcs dct dcu dcv dcw dcx dcy dcz dda ddb ddc ddd dde ddf ddg ddh ddi ddj ddk ddl ddm ddn ddo ddp ddq ddr dds\" dir=\"ltr\">Implement link unfurling in Teams and Outlook<\/span><\/li>\n<li><span class=\"ui-provider dcl dcm cik dcn dco dcp dcq dcr dcs dct dcu dcv dcw dcx dcy dcz dda ddb ddc ddd dde ddf ddg ddh ddi ddj ddk ddl ddm ddn ddo ddp ddq ddr dds\" dir=\"ltr\">Create a Microsoft Teams bot from an OpenAPI specification<\/span><\/li>\n<\/ul>\n<p>In addition, we will also cover the following improvements:<\/p>\n<ul>\n<li><span class=\"ui-provider dcl dcm cik dcn dco dcp dcq dcr dcs dct dcu dcv dcw dcx dcy dcz dda ddb ddc ddd dde ddf ddg ddh ddi ddj ddk ddl ddm ddn ddo ddp ddq ddr dds\" dir=\"ltr\">Send notifications at scale with TeamsFx SDK<\/span><\/li>\n<li><span class=\"ui-provider dcl dcm cik dcn dco dcp dcq dcr dcs dct dcu dcv dcw dcx dcy dcz dda ddb ddc ddd dde ddf ddg ddh ddi ddj ddk ddl ddm ddn ddo ddp ddq ddr dds\" dir=\"ltr\">Improved single sign-on experience in <code>React with Fluent UI<\/code> template<\/span><\/li>\n<\/ul>\n<h2>Open your existing SharePoint Framework projects<\/h2>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/SPFx-Existing-App-1.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-14727\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/SPFx-Existing-App-1.png\" alt=\"Image SPFx Existing App\" width=\"2757\" height=\"1956\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/SPFx-Existing-App-1.png 2757w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/SPFx-Existing-App-1-300x213.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/SPFx-Existing-App-1-1024x726.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/SPFx-Existing-App-1-768x545.png 768w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/SPFx-Existing-App-1-1536x1090.png 1536w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/SPFx-Existing-App-1-2048x1453.png 2048w\" sizes=\"(max-width: 2757px) 100vw, 2757px\" \/><\/a><\/p>\n<p>Currently, Teams Toolkit only supports developers extending Teams platform with SharePoint Framework by creating a new application and developers enjoy automation brought with the toolkit. There have been increasing requests by the community to bring existing SPFx solutions created from other tooling, such as Yeoman generator, into Teams Toolkit.<\/p>\n<p>We are thrilled to announce this feature is coming to the July prerelease of Teams Toolkit.<\/p>\n<p>&nbsp;<\/p>\n<h2>Implement link unfurling in Teams and Outlook<\/h2>\n<p><img decoding=\"async\" width=\"2690\" height=\"1865\" class=\"wp-image-14705\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-2.png\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-2.png 2690w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-2-300x208.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-2-1024x710.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-2-768x532.png 768w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-2-1536x1065.png 1536w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-2-2048x1420.png 2048w\" sizes=\"(max-width: 2690px) 100vw, 2690px\" \/><\/p>\n<p>Link unfurling is a Teams platform feature that allows developers to create a web service to subscribe to receive an invoke when URLs containing a particular domain are pasted into the compose message area and &#8220;unfurl&#8221; the URL into a detailed card, providing more information than the standard website preview card.<\/p>\n<p>Now Teams Toolkit has crafted a new app template to get you started building link unfurling features fast. With the app template, you can:<\/p>\n<ul>\n<li>Unfurl links into an Adaptive Card in Teams and Outlook.<\/li>\n<li>Unfurl previews for your shared links even before a user discovers or installs your app in Teams with <a href=\"https:\/\/learn.microsoft.com\/en-us\/microsoftteams\/platform\/messaging-extensions\/how-to\/link-unfurling?tabs=desktop%2Cjson%2Cadvantages#zero-install-for-link-unfurling\">Zero Install capabilities<\/a>.<\/li>\n<li>Extend the application template with rich platform capabilities such as <a href=\"https:\/\/learn.microsoft.com\/en-us\/microsoftteams\/platform\/tabs\/tabs-link-unfurling\">Stage Views<\/a>.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Create a Microsoft Teams bot from an OpenAPI Specification<\/h2>\n<p><img decoding=\"async\" width=\"2049\" height=\"988\" class=\"wp-image-14707\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-4.png\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-4.png 2049w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-4-300x145.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-4-1024x494.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-4-768x370.png 768w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-4-1536x741.png 1536w\" sizes=\"(max-width: 2049px) 100vw, 2049px\" \/><\/p>\n<p>Many developers start building Teams integrations based on existing APIs. While we offer app templates and samples to help developers get started, we have still seen many of them spend a lot of time understanding the complexities of Teams platform capabilities.<\/p>\n<p>We are thrilled to announce the Public Preview of <code>api2Teams<\/code> &#8211; It is a command line tool to generate a complete conversational style command and response Teams application based on your OpenAPI specification file and represent the API response in the form of Adaptive Cards. You can open the generated Teams bot in Teams Toolkit for Visual Studio to test the app in Teams and continue your work from there.<\/p>\n<p>We hope this is the best way to start integrating your APIs with the Teams conversational experience.<\/p>\n<p>Follow the <a href=\"https:\/\/github.com\/OfficeDev\/TeamsFx\/wiki\/OpenAPI-spec-to-Teams-App#quick-start\">quick start<\/a> guide to try it today, open a <a href=\"https:\/\/github.com\/OfficeDev\/TeamsFx\/discussions\">discussion<\/a> or create an <a href=\"https:\/\/github.com\/OfficeDev\/TeamsFx\/issues\">issue<\/a> in GitHub if you want to leave feedback for us.<\/p>\n<p>&nbsp;<\/p>\n<h2>Send notifications at Scale with TeamsFx SDK<\/h2>\n<p>Teams Toolkit provides an easy way for developers to get started with sending notifications into Teams with a bot. However, we have got a challenging question:\u201d How do I handle sending notifications at scale\u201d? Specifically, developers are having challenges with the performance of these operations:<\/p>\n<ul>\n<li>Listing where are all the bot apps installed. Imagine the bot app could be installed in a tenant with over 300K users.<\/li>\n<li>Send notifications to a specific installation.<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"1372\" height=\"737\" class=\"wp-image-14706\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-3.png\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-3.png 1372w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-3-300x161.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-3-1024x550.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/07\/word-image-14704-3-768x413.png 768w\" sizes=\"(max-width: 1372px) 100vw, 1372px\" \/><\/p>\n<p>Given this, we have made a couple of updates in TeamsFx SDK:<\/p>\n<ul>\n<li>Rename existing internal class <code>ConversationReferenceStore<\/code> to <code>DefaultConversationReferenceStore<\/code>.<\/li>\n<li>Deprecate existing interface <code>NotificationStorage<\/code>.<\/li>\n<li>Add new interface <code>ConversationReferenceStore<\/code> with pagination API support.<\/li>\n<\/ul>\n<pre class=\"prettyprint language-ts\"><code class=\"language-ts\">export interface ConversationReferenceStore {\r\n\r\n\u00a0 \/**\r\n\u00a0 \u00a0* Add a conversation reference to the store. If overwrite, update existing one, otherwise add when not exist.\r\n\u00a0 \u00a0* @returns true if added or updated, false if not changed.\r\n\u00a0 \u00a0*\/\r\n\r\n\u00a0 add(\r\n\u00a0 \u00a0 key: string,\r\n\u00a0 \u00a0 reference: Partial&lt;ConversationReference&gt;,\r\n\u00a0 \u00a0 options: ConversationReferenceStoreAddOptions\r\n\u00a0 ): Promise&lt;boolean&gt;;\r\n\r\n\u00a0 \/**\r\n\u00a0 \u00a0* Remove a conversation reference from the store.\r\n\u00a0 \u00a0* @returns true if exist and removed, false if not changed.\r\n\u00a0 \u00a0*\/\r\n\r\n\u00a0 remove(\r\n\u00a0 \u00a0 key: string,\r\n\u00a0 \u00a0 reference: Partial&lt;ConversationReference&gt;\r\n\u00a0 ): Promise&lt;boolean&gt;;\r\n\r\n\u00a0 \/**\r\n\u00a0 \u00a0* List stored conversation reference by page.\r\n\u00a0 \u00a0* @returns a paged list.\r\n\u00a0 \u00a0*\/\r\n\r\n\u00a0 list(\r\n\u00a0 \u00a0 pageSize?: number,\r\n\u00a0 \u00a0 continuationToken?: string\r\n\u00a0 ): Promise&lt;PagedData&lt;Partial&lt;ConversationReference&gt;&gt;&gt;;\r\n}\r\n\r\nexport interface ConversationReferenceStoreAddOptions {\r\n\u00a0 overwrite?: Boolean;\r\n}<\/code><\/pre>\n<ul>\n<li>Add new options for users to set customized conversation reference store, and deprecate existing option to set customize notification target storage.<\/li>\n<\/ul>\n<pre class=\"prettyprint language-ts\"><code class=\"language-ts\">export interface NotificationOptions {\r\n\r\n\u00a0 botAppId?: string;\r\n\u00a0 store?: ConversationReferenceStore;\r\n\r\n\r\n\u00a0 \/**\r\n\u00a0 \u00a0* @deprecated Please use NotificationOptions.store instead.\r\n\u00a0 \u00a0*\/\r\n\r\n\u00a0 storage?: NotificationTargetStorage;\r\n\r\n}<\/code><\/pre>\n<h2>Improved single sign-on experience in <code>React with Fluent UI<\/code> template<\/h2>\n<p>The \u201cReact with Fluent UI\u201d app template has adopted <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/active-directory\/develop\/v2-oauth2-auth-code-flow\">Authorization Code<\/a> Flow to implement single sign-on with the intention of making our app template as lightweight as possible.<\/p>\n<p>There\u2019s a known limitation to using it with mobile platforms such as iOS and a few Android versions where users have to sign in again as the state was not stored due to <a href=\"https:\/\/webkit.org\/blog\/10218\/full-third-party-cookie-blocking-and-more\/\">third-party cookies being blocked by the browser<\/a>.<\/p>\n<p>To help developers achieve a full SSO experience, we are now updating the app template with the on-behalf-of (OBO) flow implementation for SSO, which requires you to implement a backend service and pass your token to it.<\/p>\n<p>The updated app template can help you get started, and you can dive deeper into the SSO in this <a href=\"https:\/\/learn.microsoft.com\/en-us\/microsoftteams\/platform\/tabs\/how-to\/authentication\/tab-sso-code#pass-the-access-token-to-server-side-code\">document<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h2>We \ud83d\udc96 your feedback<\/h2>\n<p>Thank you for all your feedback that has helped make this release possible. Build with us <a href=\"https:\/\/github.com\/officedev\/teamsfx\">on GitHub<\/a>, share feedback <a href=\"https:\/\/github.com\/officedev\/teamsfx\/issues\">as an issue<\/a>, or email our team directly at <a href=\"mailto:ttkfeedback@microsoft.com\">ttkfeedback@microsoft.com<\/a>.<\/p>\n<p>We are excited for you to try <a href=\"https:\/\/learn.microsoft.com\/en-us\/microsoftteams\/platform\/toolkit\/install-teams-toolkit?tabs=vscode#install-a-pre-release-version\">Teams Toolkit for Visual Studio Code Prelease<\/a> and \u201c<a href=\"https:\/\/www.npmjs.com\/package\/@microsoft\/api2teams\">api2teams<\/a>\u201d. Please share your experience with us.<\/p>\n<p>More resources:<\/p>\n<ul>\n<li>Visit our <a href=\"https:\/\/developer.microsoft.com\/en-us\/microsoft-365\">Microsoft 365 Dev Center.<\/a><\/li>\n<li>Follow us on <a href=\"https:\/\/twitter.com\/Microsoft365Dev\">Microsoft 365 Developer (@Microsoft365Dev) \/ Twitter<\/a> for the latest news and announcements.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In this update, we share the latest with Microsoft Teams app development using Teams Toolkit for Visual Studio Code.<\/p>\n","protected":false},"author":43243,"featured_media":14752,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[128,9],"tags":[23,44],"class_list":["post-14704","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-teams","category-sharepoint-framework","tag-teams-toolkit","tag-visual-studio-code"],"acf":[],"blog_post_summary":"<p>In this update, we share the latest with Microsoft Teams app development using Teams Toolkit for Visual Studio Code.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/14704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/43243"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=14704"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/14704\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/14752"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=14704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=14704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=14704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}