I had a problem with actionable messages generated by Microsoft Teams not working properly in Outlook desktop. In the overall scheme of things, this isn’t a huge issue, but it became an irritation because nothing was obviously wrong. The problem was that I could interact with actionable messages using any other client than Outlook desktop. Here’s the story.
Actionable Messages in Yammer and Teams
Actionable messages contain a JSON payload in the message body to allow the recipient to respond to an application based on the content (hence the name) using “action buttons” associated with the commands necessary to execute an action, like respond to a message. The technology has been available for several years. For example, a Yammer actionable message allows the recipient to react to a message posted to a community or post a response of their own (Figure 1).
Figure 1: Responding to a Yammer conversation using an actionable message
Much the same happens for Teams Missed Activity messages, where recipients can respond to chats or channel conversations (Figure 2). Teams generates these messages based on the option selected by the user in the Notifications section of Teams settings.
Figure 2: Responding to a Teams chat using an actionable message
Apart from the magic involved in interpreting the JSON payload and presenting it in an attractive manner in Outlook desktop, OWA, and Outlook mobile, the other major technology needed is the HTTP response to update the target application with the action chosen by the recipient.
Deploying the Actionable Message Debugger
The problem I had was that Outlook desktop stubbornly refused to allow interaction with Teams missed activity messages while OWA and Outlook mobile worked properly. Instead of being able to reply to Teams conversations from Outlook desktop, the messages offered to use a deeplink to launch the application positioned in the conversation (for instance, Teams missed activity messages included only a Reply in Teams button). Although Teams actionable messages had problems, Yammer actionable messages worked normally.
Figure 3: Deploying the Actionable Messages Debugger for Outlook
Soon afterwards, the debugger showed up in Outlook. I don’t know why, but suddenly things started to work properly. Apparently, the mere presence of the debugger or using the add-in to examine the properties of a message (Figure 4) resolved the problem. Or did it?
Figure 4: Using the Actionable Messages Debugger for Outlook
I
Of course, software doesn’t work on a whim (or maybe it does, which would explain some oddities observed over the years). Authentication is a more fundamental reason. After all, an actionable message must be capable of posting its command for the magic to work. I had switched my Teams desktop client to another tenant (I have guest accounts in too many tenants; shared channels should help, when they become available).
It’s logical to assume that if Outlook desktop finds that the same account used to connect to Exchange Online is not connected to Teams, it will assume that it cannot process actions and so revert to the Reply to Teams command. If the user takes this option, they must authenticate to access Teams. OWA and Outlook Mobile seem to use connections to the home tenant, so they’re unaffected by switching to other host tenants. The issue doesn’t affect Yammer: its browser client probably works like OWA.
I hate not understanding why features do not work as they should. At least now I have a reasonable explanation and can go and do something more productive.
Debugging Information
You probably will not use the debugger unless you’re developing an Outlook add-in or need to gather information for a support call. The information presented by the debugger will mean a lot to those who understand what the JSON content should look like and how it should behave, but maybe not for others. To demonstrate what you might find, here’s an example of an actionable card error captured by the debugger:
{
-
"ActionableMessageStamping": {
-
"Errors": [
"Adaptive card signature validation failed - Sender of the email does not match sender in the signed card. Originator:78c6dd9c-1fe2-40ba-ae94-19729f11547d, OAMAppName:xxxGroup"
],
"Infos": [ ]
},
"CardEnabledForMessage": false,
"ClientName": "Outlook",
"ClientVersion": "16.0.14827.20088",
"InternetMessageId":
"<DB9PR04MB8445D745EBCC517C2CA20D8EFD509@DB9PR04MB8445.eurprd04.prod.outlook.com>",
"EntityExtractionSuccess": true,
"SignedAdaptiveCard": true,
-
"MessageCardPayload": {
"found": false,
"type": null
},
-
"AuthHeader": {
"results": "dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=office365itpros.com;",
"authAs": "Internal"
}
}
Organization Control for Actionable Messages
The Exchange Online organization configuration contains a setting (SmtpActionableMessagesEnabled) to control the use of “action buttons.” The default is True, meaning that email clients allow users to respond to buttons inserted in email by Microsoft 365 applications. If you wanted, you can run Set-OrganizationConfig to set the value to False to disable actionable messages.
I can’t think of a good reason to disable actionable messages, but you never know when the need might arise. That’s I can’t think of a good reason to disable actionable messages, but you never know when the need might arise. That’s the joy of discovering poorly documented parts of Microsoft 365, just like finding out why Teams missed activity messages won’t work when you switch to use a guest account in another tenant.
Learn more about how Office 365 really works on an ongoing basis by subscribing to the Office 365 for IT Pros eBook. Our monthly updates keep subscribers informed about what’s important across the Office 365 ecosystem.
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
2 Replies to “The Strange Case of Outlook Desktop and Actionable Messages”