Message extensions
Author: f | 2025-04-25
Add message extension to Teams app. Add message extension to tab app; Add message extension to bot app; To add a message extension to a tab app, follow these steps: Help with chrome extension message passing. Related questions. 5 Chrome extension - Message Passing. 1 Chrome Extension Development : Message passing Problem. 2 Help with chrome extension message passing. 0 Chrome Extension Message Passing -
Chrome extension message passing repeating messages
Google Ads message extensions were rolled out in October 2016 without a lot of fanfare.At the time, we assessed which of our clients would be a good fit for this kind of extension and approached those clients to see if they’d be willing to give message extensions a try.But many of them resisted – often with legitimate concerns.More recently, however, we’re taking another look at message extensions.Some additional features and options have been added since their initial rollout, making them more flexible and appealing.Still, I expect to hear many of the same objections.Therefore, I will use this article to review what message extensions are and address the most common concerns we hear.What Are Google Ads Message Extensions?Message extensions allow customers to message you directly from your Google ad.Customers simply have to click on the call to action, such as “Send us a text” or “Message us for help.”Then, customers are taken to their messaging app where they can send you a text message.You can even pre-populate the initial message for customers, such as “Tell me more about your offer” or “I’d like to make a reservation.”Here’s an example of a message extension (on the left) and a pre-populated message in a messaging app (on the right):Once you receive the message, someone on your team can respond.You can add message extensions to your account at the account, campaign or ad group levels, just as with other extensions.And as with most other extensions, you’re charged whenever someone clicks the messaging extension on your ad.Now that we’ve reviewed what message extensions are, let’s take a closer look at some of the objections we hear about them.1. ‘I Don’t Have Staff to Monitor Messaging 24/7’Allowing customers to message you directly from your ads can sound daunting.After all, not every company has the capability to. Add message extension to Teams app. Add message extension to tab app; Add message extension to bot app; To add a message extension to a tab app, follow these steps: Help with chrome extension message passing. Related questions. 5 Chrome extension - Message Passing. 1 Chrome Extension Development : Message passing Problem. 2 Help with chrome extension message passing. 0 Chrome Extension Message Passing - Chrome Extension: Message passing confusion. 0 Message Passing issues in Chrome Extension. 1 Message passing in Chrome Extension. 15 Message Passing Example From Chrome Extensions. 1 Getting basic message passing to work in Chrome extension. 3 Chrome Extension: Message passing confusion. 0. Message Passing issues in Chrome Extension. 1. Message passing in Chrome Extension. 2. Message Passing doesnt works. 0. Message Passing receiving end. 15. Message Passing Example From Chrome Extensions. 1. Getting basic message passing to work in Chrome extension. Title author description ms.localizationpriority ms.topic ms.author ms.date Message extensions surbhigupta Learn how to build message extensions and the scenarios where they are used. Explore samples on action and search based message extensions. medium overview anclear 01/23/2025 Build message extensionsMessage extensions enable users to engage with your web service through buttons and forms within the Microsoft Teams client. Users can search or initiate actions in an external system from the compose message area, the command box, or directly from a message. The results of these interactions can be returned to the Teams client as a richly formatted card.The article provides an overview of message extensions, use cases, functionality, action and search commands, and link unfurling.The following image displays the locations from where message extensions can be invoked:Note@mentioning message extensions in the compose box isn't supported.Message extension options aren't supported for group chats with external users.Desktop:::image type="content" source="../assets/images/messaging-extension-invoke-locations.png" alt-text="Screenshot shows the message extensions invoke location on Teams desktop.":::Mobile:::image type="content" source="../assets/images/messaging-extension-invoke-location-mobile.png" alt-text="Screenshot shows the message extensions invoke location on Teams mobile.":::Scenarios where message extensions are usedScenarioExampleYou need an external system to perform an action and return the result to your conversation.Reserve a resource and allow the channel to know the reserved time slot.You need to search for something in an external system and share the results with the conversation.Search for a work item in Azure DevOps and share it with the group as an Adaptive Card.You want to complete a complex task involving multiple steps or large amounts of information in an external system and share the results with a conversation.Create a bug in your tracking system based on a Teams message, assign that bug, and send a card to the conversation thread with the bug's details.Understand how message extensions workA message extension is composed of a web service hosted by you and an app manifest that defines the location where your web service is invoked within the Teams client. The web service utilizes the Bot Framework's messaging schema and secure communication protocol, so you must register your web service as a bot in the Bot Framework.NoteThough it's possible to manually create the web service, we recommend to use Bot Framework SDK to work with the protocol.In the app manifest (previously called as Teams app manifest), a single message extension is defined with up to 10 different commands. Each command defines a type, such as action or search and the locations in the client from where the message extension is invoked. The invoke locations include the compose message area, command bar, and message. On invoke, the web service receives an HTTPS message with a JSON payload with all the relevant information. Respond with a JSON payload to inform the Teams client of the next interaction to enable.Message extension commands typesThere are two types of message extension commands, action command and search command. The message extension command type defines the UI elements and interaction flows available to your web service. Certain interactions, such as authentication and configuration, are available for both commands types.Action commandsActionComments
Google Ads message extensions were rolled out in October 2016 without a lot of fanfare.At the time, we assessed which of our clients would be a good fit for this kind of extension and approached those clients to see if they’d be willing to give message extensions a try.But many of them resisted – often with legitimate concerns.More recently, however, we’re taking another look at message extensions.Some additional features and options have been added since their initial rollout, making them more flexible and appealing.Still, I expect to hear many of the same objections.Therefore, I will use this article to review what message extensions are and address the most common concerns we hear.What Are Google Ads Message Extensions?Message extensions allow customers to message you directly from your Google ad.Customers simply have to click on the call to action, such as “Send us a text” or “Message us for help.”Then, customers are taken to their messaging app where they can send you a text message.You can even pre-populate the initial message for customers, such as “Tell me more about your offer” or “I’d like to make a reservation.”Here’s an example of a message extension (on the left) and a pre-populated message in a messaging app (on the right):Once you receive the message, someone on your team can respond.You can add message extensions to your account at the account, campaign or ad group levels, just as with other extensions.And as with most other extensions, you’re charged whenever someone clicks the messaging extension on your ad.Now that we’ve reviewed what message extensions are, let’s take a closer look at some of the objections we hear about them.1. ‘I Don’t Have Staff to Monitor Messaging 24/7’Allowing customers to message you directly from your ads can sound daunting.After all, not every company has the capability to
2025-03-31Title author description ms.localizationpriority ms.topic ms.author ms.date Message extensions surbhigupta Learn how to build message extensions and the scenarios where they are used. Explore samples on action and search based message extensions. medium overview anclear 01/23/2025 Build message extensionsMessage extensions enable users to engage with your web service through buttons and forms within the Microsoft Teams client. Users can search or initiate actions in an external system from the compose message area, the command box, or directly from a message. The results of these interactions can be returned to the Teams client as a richly formatted card.The article provides an overview of message extensions, use cases, functionality, action and search commands, and link unfurling.The following image displays the locations from where message extensions can be invoked:Note@mentioning message extensions in the compose box isn't supported.Message extension options aren't supported for group chats with external users.Desktop:::image type="content" source="../assets/images/messaging-extension-invoke-locations.png" alt-text="Screenshot shows the message extensions invoke location on Teams desktop.":::Mobile:::image type="content" source="../assets/images/messaging-extension-invoke-location-mobile.png" alt-text="Screenshot shows the message extensions invoke location on Teams mobile.":::Scenarios where message extensions are usedScenarioExampleYou need an external system to perform an action and return the result to your conversation.Reserve a resource and allow the channel to know the reserved time slot.You need to search for something in an external system and share the results with the conversation.Search for a work item in Azure DevOps and share it with the group as an Adaptive Card.You want to complete a complex task involving multiple steps or large amounts of information in an external system and share the results with a conversation.Create a bug in your tracking system based on a Teams message, assign that bug, and send a card to the conversation thread with the bug's details.Understand how message extensions workA message extension is composed of a web service hosted by you and an app manifest that defines the location where your web service is invoked within the Teams client. The web service utilizes the Bot Framework's messaging schema and secure communication protocol, so you must register your web service as a bot in the Bot Framework.NoteThough it's possible to manually create the web service, we recommend to use Bot Framework SDK to work with the protocol.In the app manifest (previously called as Teams app manifest), a single message extension is defined with up to 10 different commands. Each command defines a type, such as action or search and the locations in the client from where the message extension is invoked. The invoke locations include the compose message area, command bar, and message. On invoke, the web service receives an HTTPS message with a JSON payload with all the relevant information. Respond with a JSON payload to inform the Teams client of the next interaction to enable.Message extension commands typesThere are two types of message extension commands, action command and search command. The message extension command type defines the UI elements and interaction flows available to your web service. Certain interactions, such as authentication and configuration, are available for both commands types.Action commandsAction
2025-04-03• RFC 1522 - MIME (Multipurpose Internet Mail Extensions) Part Two: Message Header Extensions for Non-ASCII Text • RFC 1631 - The IP Network Address Translator (NAT) • RFC 1700 - Assigned Numbers • RFC 1725 - Post Office Protocol - Version 3Supported Protocols Cont. • RFC 1738 - Uniform Resource Locators (URL) • RFC 1866 - Hypertext Markup Language - 2.0 • RFC 1867 - Form-based File Upload in HTML • RFC 1869 - SMTP Service Extensions RFC 1918 - Address Allocation for Private Internets • RFC 1939 - Post Office Protocol (POP) - Version 3 • RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0 • RFC 1951 - DEFLATE Compressed Data Format Specification version 1.3 • RFC 1952 - GZIP file format specification version 4.3 • RFC 2044 - UTF-8, a transformation format of Unicode and ISO 10646 • RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies • RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types • RFC 2047 - MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text • RFC 2048 - Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures • RFC 2049 - Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples • RFC 2060 - Internet Message Access Protocol (IMAP) - Version 4 Rev 1 • RFC 2068 - Hypertext Transfer Protocol -- HTTP/1.1 • RFC 2070 - Internationalization of the Hypertext Markup Language • RFC 2131 - Dynamic Host Configuration Protocol • RFC 2236 - Internet Group Management Protocol, Version 2 • RFC 2279 - UTF-8, a transformation format of ISO 10646 • RFC 2396 - Uniform Resource Identifiers (URI): Generic Syntax • RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 • RFC 2617 - HTTP Authentication: Basic and Digest Access AuthenticationThe End!
2025-04-25Skip to main content This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support. Extend a Teams message extension across Microsoft 365 Article10/17/2024 In this article -->Message extensions allow users to interact with your web service using buttons and forms. Users can search or initiate actions in an external system from Microsoft Teams and Outlook by extending your Teams apps across Microsoft 365. There are two types of message extensions:Search-based message extensions: Allow users to search an external system and share results through the compose message area of the client.Action-based message extensions: Allow users with a modal pop-up to collect or display information, process the interaction, and send the information back to the client as a rich card.NoteTeams search-based message extensions are generally available for Outlook and action-based message extensions are available in preview for Outlook.Outlook mobile users on Android and iOS can receive and take actions on cards from your apps that were sent to them by users on Outlook on the web and Outlook for Windows.Teams message extension across Microsoft 365 also supports link unfurling that display cards to launch Stageview and dialogs.PrerequisitesTo extend your Teams message extension to Outlook, ensure the following:Check for message extensions support within Outlook for Windows desktop, web, and mobile, see the support table in extend Teams apps across Microsoft 365.A Microsoft 365 Developer Program sandbox tenant. For action based message extension, enroll your developer tenant for Microsoft 365 Targeted Releases.A test environment with Microsoft 365 apps installed from the Microsoft 365 Apps Current Channel.(Optional) Microsoft Visual Studio Code with the Teams Toolkit extension.Build or extend a message extensionTo extend your Teams message extension to Outlook, you can either build a new message extension app with Teams Toolkit or extend an existing Teams message extension app to Outlook.Build a message extension app for OutlookExtend an existing Teams message extension app to OutlookYou can build a Teams message extension app for Outlook through Teams Toolkit extension for Visual Studio Code. To build a message extension app for Outlook, ensure the following:Upload your app in TeamsPreview your message extension in OutlookYou can build either a search-based or an action-based message extension.Search-based message extensionAction-based message extensionOpen Visual Studio Code.Select Command Palette... under the View option or Ctrl+Shift+P.Select Teams: Create a New App.Select Message Extension from the dropdown list.Select Custom Search Results to download the sample code for a Teams search-based message extension using the latest app manifest (previously called Teams app manifest).You can also download the sample code from the left pane, under DEVELOPMENT, select View Samples. A Samples tab appears, in the search field enter NPM Search Connector.Select a preferred programming language.Select a
2025-04-06Greater.If your target market are heavy mobile users, then this ad extension might be an excellent fit.3. ‘They’re Hard to Measure’OK, this isn’t really an objection we hear from our clients, but it’s something that we used to think.When message extensions were initially rolled out, they were almost impossible to track and measure.But since then, the situation has improved somewhat.Now, you can define how many message exchanges must occur before it counts as a conversion.For example, say someone wants to make a hotel reservation. You’ve studied past message exchanges and you know that it typically takes at least three messages for a reservation to be made.Therefore, you can set three messages as your threshold for the exchange to count as a conversion.This isn’t a perfect measuring method of course. But it’s still better than what we had before (which was nothing).Is It Time to Give Message Extensions Another Try?Given the changes in message extensions – and the further growth in mobile and messaging use – it might be time to give message extensions another try.You might find that they’re an excellent fit for your business.More Resources:Everything You Need to Know About Ad ExtensionsA Guide to Every Automated Google Ad TypeGoogle Enhances Click-to-Message Ads With Email Forwarding and Auto RepliesImage CreditsFeature Image: Dreamstime.comMessage Extensions Image: ©2019 Google LLC, used with permission. Google and the Google logo are registered trademarks of Google LLC
2025-04-01_getMessage('alt.binaries.te...', '1486783640.8004...')#4 /site/nzedb/NZBContents.php(132): nzedb\NNTP->getMessages('alt.binaries.te...', '1486783640.8004...', false)#5 /site/nzedb/Nfo.php(368): nzedb\NZBContents->getNfoFromNZB('be2f52efff0b7ed...', '4220157', '156', 'alt.binaries.te...')#6 /site/misc/update/nix/multiprocessing/.do_not_run/switch.php(243): nzedb\Nfo->processNfoFiles(Object(nzedb\NNTP), '', 'b')#7 {main} thrown in /site/app/extensions/util/yenc/adapter/Ydecode.php on line 52PHP Fatal error: Uncaught exception 'Exception' with message 'Error getting data from yydecode.' in /site/app/extensions/util/yenc/adapter/Ydecode.php:52Stack trace:#0 /site/app/extensions/util/yenc/adapter/Ydecode.php(60): app\extensions\util\yenc\adapter\Ydecode::decode('\r\n=ybegin part=...', true)#1 /site/app/extensions/util/Yenc.php(64): app\extensions\util\yenc\adapter\Ydecode::decodeIgnore('\r\n=ybegin part=...')#2 /site/nzedb/NNTP.php(1452): app\extensions\util\Yenc::decodeIgnore('\r\n=ybegin part=...')#3 /site/nzedb/NNTP.php(629): nzedb\NNTP->_getMessage('alt.binaries.te...', '1486776814.5265...')#4 /site/nzedb/NZBContents.php(132): nzedb\NNTP->getMessages('alt.binaries.te...', '1486776814.5265...', false)#5 /site/nzedb/Nfo.php(368): nzedb\NZBContents->getNfoFromNZB('e63afed6c67c168...', '4207497', '156', 'alt.binaries.te...')#6 /site/misc/update/nix/multiprocessing/.do_not_run/switch.php(243): nzedb\Nfo->processNfoFiles(Object(nzedb\NNTP), '', 'e')#7 {main} thrown in /site/app/extensions/util/yenc/adapter/Ydecode.php on line 52PHP Fatal error: Uncaught exception 'Exception' with message 'Error getting data from yydecode.' in /site/app/extensions/util/yenc/adapter/Ydecode.php:52Stack trace:#0 /site/app/extensions/util/yenc/adapter/Ydecode.php(60): app\extensions\util\yenc\adapter\Ydecode::decode('=ybegin part=1 ...', true)#1 /site/app/extensions/util/Yenc.php(64): app\extensions\util\yenc\adapter\Ydecode::decodeIgnore('=ybegin part=1 ...')#2 /site/nzedb/NNTP.php(1452): app\extensions\util\Yenc::decodeIgnore('=ybegin part=1 ...')#3 /site/nzedb/NNTP.php(629): nzedb\NNTP->_getMessage('alt.binaries.te...', '1486790285.1521...')#4 /site/nzedb/NZBContents.php(132): nzedb\NNTP->getMessages('alt.binaries.te...', '1486790285.1521...', false)#5 /site/nzedb/Nfo.php(368): nzedb\NZBContents->getNfoFromNZB('a2dbc9e82d193c3...', '4252459', '156', 'alt.binaries.te...')#6 /site/misc/update/nix/multiprocessing/.do_not_run/switch.php(243): nzedb\Nfo->processNfoFiles(Object(nzedb\NNTP), '', 'a')#7 {main} thrown in /site/app/extensions/util/yenc/adapter/Ydecode.php on line 52PHP Fatal error: Uncaught exception 'Exception' with message 'Error getting data from yydecode.' in /site/app/extensions/util/yenc/adapter/Ydecode.php:52Stack trace:#0 /site/app/extensions/util/yenc/adapter/Ydecode.php(60): app\extensions\util\yenc\adapter\Ydecode::decode('\r\n=ybegin part=...', true)#1 /site/app/extensions/util/Yenc.php(64): app\extensions\util\yenc\adapter\Ydecode::decodeIgnore('\r\n=ybegin part=...')#2 /site/nzedb/NNTP.php(1452): app\extensions\util\Yenc::decodeIgnore('\r\n=ybegin part=...')#3 /site/nzedb/NNTP.php(629): nzedb\NNTP->_getMessage('alt.binaries.te...', 'part1of1.kCQsQ$...')#4 /site/nzedb/NZBContents.php(132): nzedb\NNTP->getMessages('alt.binaries.te...', 'part1of1.kCQsQ$...', false)#5 /site/nzedb/Nfo.php(368): nzedb\NZBContents->getNfoFromNZB('993e72d7cf0f7bb...', '4249282', '156', 'alt.binaries.te...')#6 /site/misc/update/nix/multiprocessing/.do_not_run/switch.php(243): nzedb\Nfo->processNfoFiles(Object(nzedb\NNTP), '', '9')#7 {main} thrown in /site/app/extensions/util/yenc/adapter/Ydecode.php on line 52.....">PHP Fatal error: Uncaught exception 'Exception' with message 'Error getting data from yydecode.' in /site/app/extensions/util/yenc/adapter/Ydecode.php:52 [45/2874]Stack trace:#0 /site/app/extensions/util/yenc/adapter/Ydecode.php(60): app\extensions\util\yenc\adapter\Ydecode::decode('=ybegin part=1 ...', true)#1 /site/app/extensions/util/Yenc.php(64): app\extensions\util\yenc\adapter\Ydecode::decodeIgnore('=ybegin part=1 ...')#2 /site/nzedb/NNTP.php(1452): app\extensions\util\Yenc::decodeIgnore('=ybegin part=1 ...')#3 /site/nzedb/NNTP.php(629): nzedb\NNTP->_getMessage('alt.binaries.te...', '1486783640.8004...')#4 /site/nzedb/NZBContents.php(132): nzedb\NNTP->getMessages('alt.binaries.te...', '1486783640.8004...', false)#5 /site/nzedb/Nfo.php(368): nzedb\NZBContents->getNfoFromNZB('be2f52efff0b7ed...', '4220157', '156', 'alt.binaries.te...')#6 /site/misc/update/nix/multiprocessing/.do_not_run/switch.php(243): nzedb\Nfo->processNfoFiles(Object(nzedb\NNTP), '', 'b')#7 {main} thrown in /site/app/extensions/util/yenc/adapter/Ydecode.php on line 52PHP Fatal error: Uncaught exception 'Exception' with message 'Error getting data from yydecode.' in /site/app/extensions/util/yenc/adapter/Ydecode.php:52Stack trace:#0 /site/app/extensions/util/yenc/adapter/Ydecode.php(60): app\extensions\util\yenc\adapter\Ydecode::decode('\r\n=ybegin part=...', true)#1 /site/app/extensions/util/Yenc.php(64): app\extensions\util\yenc\adapter\Ydecode::decodeIgnore('\r\n=ybegin part=...')#2 /site/nzedb/NNTP.php(1452): app\extensions\util\Yenc::decodeIgnore('\r\n=ybegin part=...')#3 /site/nzedb/NNTP.php(629): nzedb\NNTP->_getMessage('alt.binaries.te...', '1486776814.5265...')#4 /site/nzedb/NZBContents.php(132): nzedb\NNTP->getMessages('alt.binaries.te...', '1486776814.5265...', false)#5 /site/nzedb/Nfo.php(368): nzedb\NZBContents->getNfoFromNZB('e63afed6c67c168...', '4207497', '156', 'alt.binaries.te...')#6 /site/misc/update/nix/multiprocessing/.do_not_run/switch.php(243): nzedb\Nfo->processNfoFiles(Object(nzedb\NNTP), '', 'e')#7 {main} thrown in /site/app/extensions/util/yenc/adapter/Ydecode.php on line 52PHP Fatal error: Uncaught exception 'Exception' with message 'Error getting data from yydecode.' in /site/app/extensions/util/yenc/adapter/Ydecode.php:52Stack trace:#0 /site/app/extensions/util/yenc/adapter/Ydecode.php(60): app\extensions\util\yenc\adapter\Ydecode::decode('=ybegin part=1 ...', true)#1 /site/app/extensions/util/Yenc.php(64): app\extensions\util\yenc\adapter\Ydecode::decodeIgnore('=ybegin part=1 ...')#2 /site/nzedb/NNTP.php(1452): app\extensions\util\Yenc::decodeIgnore('=ybegin part=1 ...')#3 /site/nzedb/NNTP.php(629): nzedb\NNTP->_getMessage('alt.binaries.te...', '1486790285.1521...')#4
2025-04-21