From 57a8f9ca9adef0c44209dbda656e1f1771324ac6 Mon Sep 17 00:00:00 2001 From: Tracy Boehrer Date: Thu, 14 Nov 2024 09:35:32 -0600 Subject: [PATCH 1/7] Added create bot, add OAuth, and Activity Protocol Specs --- docs/ActivityDefintion/protocol-activity.md | 1737 +++++++++++++++++ docs/ActivityDefintion/protocol-cards.md | 487 +++++ docs/HowTo/MSALAuthConfigurationOptions.md | 256 +++ docs/HowTo/azurebot-create-msi.md | 49 + docs/HowTo/azurebot-create-single-secret.md | 62 + .../HowTo/azurebot-user-authentication-fic.md | 166 ++ .../media/azure-bot-configuration-single.png | Bin 0 -> 107068 bytes .../media/azure-bot-ms-app-id-single.png | Bin 0 -> 94313 bytes docs/HowTo/media/azure-bot-ms-app-id.png | Bin 0 -> 116112 bytes .../HowTo/media/azure-bot-project-details.png | Bin 0 -> 29474 bytes docs/HowTo/media/azure-bot-resource.png | Bin 0 -> 13439 bytes .../media/entra-fic-creds-scenario-cred.png | Bin 0 -> 26863 bytes ...ntra-fic-creds-scenario-others-account.png | Bin 0 -> 16819 bytes .../media/entra-fic-creds-scenario-others.png | Bin 0 -> 32940 bytes docs/HowTo/media/entra-fic-creds.png | Bin 0 -> 52767 bytes docs/HowTo/running-an-agent.md | 44 + docs/index.md | 13 +- 17 files changed, 2812 insertions(+), 2 deletions(-) create mode 100644 docs/ActivityDefintion/protocol-activity.md create mode 100644 docs/ActivityDefintion/protocol-cards.md create mode 100644 docs/HowTo/MSALAuthConfigurationOptions.md create mode 100644 docs/HowTo/azurebot-create-msi.md create mode 100644 docs/HowTo/azurebot-create-single-secret.md create mode 100644 docs/HowTo/azurebot-user-authentication-fic.md create mode 100644 docs/HowTo/media/azure-bot-configuration-single.png create mode 100644 docs/HowTo/media/azure-bot-ms-app-id-single.png create mode 100644 docs/HowTo/media/azure-bot-ms-app-id.png create mode 100644 docs/HowTo/media/azure-bot-project-details.png create mode 100644 docs/HowTo/media/azure-bot-resource.png create mode 100644 docs/HowTo/media/entra-fic-creds-scenario-cred.png create mode 100644 docs/HowTo/media/entra-fic-creds-scenario-others-account.png create mode 100644 docs/HowTo/media/entra-fic-creds-scenario-others.png create mode 100644 docs/HowTo/media/entra-fic-creds.png create mode 100644 docs/HowTo/running-an-agent.md diff --git a/docs/ActivityDefintion/protocol-activity.md b/docs/ActivityDefintion/protocol-activity.md new file mode 100644 index 0000000..fd09e3a --- /dev/null +++ b/docs/ActivityDefintion/protocol-activity.md @@ -0,0 +1,1737 @@ +# Activity Protocol -- Activity + +## Abstract + +The Activity Protocol schema is an application-level representation of conversational actions made by humans and automated software. The schema includes provisions for communicating text, multimedia, and non-content actions like social interactions and typing indicators. + +This schema is used within the Azure Bot Service and is implemented by Microsoft chat systems and by interoperable bots and clients from many sources. + +## Table of Contents + +1. [Introduction](#introduction) +2. [Basic activity structure](#basic-activity-structure) +3. [Message activity](#message-activity) +4. [Contact relation update activity](#contact-relation-update-activity) +5. [Conversation update activity](#conversation-update-activity) +6. [End of conversation activity](#end-of-conversation-activity) +7. [Event activity](#event-activity) +8. [Invoke activity](#invoke-activity) +9. [Installation update activity](#installation-update-activity) +10. [Message delete activity](#message-delete-activity) +11. [Message update activity](#message-update-activity) +12. [Message reaction activity](#message-reaction-activity) +13. [Suggestion activity](#suggestion-activity) +13. [Trace activity](#trace-activity) +14. [Typing activity](#typing-activity) +15. [Handoff activity](#handoff-activity) +16. [Command activity](#command-activity) +17. [Command result activity](#command-result-activity) +18. [Complex types](#complex-types) +19. [References](#references) +20. [Appendix I - Changes](#appendix-i---changes) +21. [Appendix II - Non-IRI entity types](#appendix-ii---non-iri-entity-types) +22. [Appendix III - Protocols using the Invoke activity](#appendix-iii---protocols-using-the-invoke-activity) +23. [Appendix IV - Priming format](#appendix-iv---priming-format) +24. [Appendix V - Caller ID values](#appendix-v---caller-id-values) +25. [Appendix VI - Protocols using the Command activity](#appendix-vi---protocols-using-the-command-activity) + +## Introduction + +### Overview + +The Activity Protocol schema represents conversational behaviors made by humans and automated software within chat applications, email, and other text interaction programs. Each activity object includes a type field and represents a single action: most commonly, sending text content, but also including multimedia attachments and non-content behaviors like a "like" button or a typing indicator. + +This document provides meanings for each type of activity, and describes the required and optional fields that may be included. It also defines the roles of the client and server, and provides guidance on which fields are mastered by each participant, and which may be ignored. + +There are three roles of consequence in this specification: clients, which send and receive activities on behalf of users; bots, which send and receive activities and are typically automated; and the channel, which stores and forwards activities between clients and bots. + +Although this specification requires activities to be transmitted between roles, the exact nature of that transmission is not described here. + +For compactness, visual interactive cards are not defined in this specification. Instead, these are defined within the [Activity Protocol Cards](protocol-cards.md) [[9](#references)] and [Adaptive Cards](https://adaptivecards.io) [[10](#references)] specifications. These cards, and other undefined card types, may be included as attachments within Activity Protocol activities. + +### Requirements + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119) [[1](#references)]. + +An implementation is not compliant if it fails to satisfy one or more of the MUST or REQUIRED level requirements for the protocols it implements. An implementation that satisfies all the MUST or REQUIRED level and all the SHOULD level requirements for its protocols is said to be "unconditionally compliant"; one that satisfies all the MUST level requirements but not all the SHOULD level requirements for its protocols is said to be "conditionally compliant." + +Explanatory text describes the intent. Editors are encouraged to omit normative statements from explanatory text. All [numbered requirements](#numbered-requirements) are normative. All examples are non-normative. + +### Numbered requirements + +Lines beginning with markers of the form `AXXXX` are specific requirements designed to be referenced by number in discussion outside of this document. They do not carry any more or less weight than normative statements made outside of `AXXXX` lines. + +`A1000`: Editors of this specification MAY add new `AXXXX` requirements. They SHOULD find numeric `AXXXX` values that preserve the document's flow. + +`A1001`: Editors MUST NOT renumber existing `AXXXX` requirements. + +`A1002`: Editors MAY delete or revise `AXXXX` requirements. If revised, editors SHOULD retain the existing `AXXXX` value if the topic of the requirement remains largely intact. + +`A1003`: Editors SHOULD NOT reuse retired `AXXXX` values. A list of deleted values MAY be maintained at the end of this document. + +### Terminology + +activity +> An action expressed by a bot, a channel, or a client that conforms to the Activity schema. + +channel +> Software that sends and receives activities, and transforms them to and from chat or application behaviors. Channels are the authoritative store for activity data. + +bot +> Software that sends and receives activities, and generates automated, semi-automated, or entirely manual responses. Bots have endpoints that are registered with channels. + +client +> Software that sends and receives activities, typically on behalf of human users. Clients do not have endpoints. + +sender +> Software transmitting an activity. + +receiver +> Software accepting an activity. + +endpoint +> A programmatically addressable location where a bot or channel can receive activities. + +address +> An identifier or address where a user or bot can be contacted. + +field +> A named value within an activity or nested object. + +### Overall organization + +The activity object is a flat list of name/value pairs, some of which are primitive objects, and some of which are complex (nested). The activity object is commonly expressed in the JSON format, but can also be projected into in-memory data structures in .Net or JavaScript. + +The activity `type` field controls the meaning of the activity and the fields contained within it. Depending on the role that a participant is playing (client, bot, or channel), each field is mandatory, optional, or ignored. For example, the `id` field is mastered by the channel, and is mandatory in some circumstances, but ignored if it is sent by a bot. + +Fields that describe the identity of the activity and any participants, such as the `type` and `from` fields, are shared across all activities. In many programming languages, it is convenient to organize these fields on a core base type from which other, more specific, activity types derive. + +When storing or transmitting activities, some fields may be duplicated within the transport mechanism. For example, if an activity is transmitted via HTTP POST to a URL that includes the conversation ID, the receiver may infer its value without requiring it to be present within the activity body. This document merely describes the abstract requirements for these fields, and it is up to the controlling protocol to establish whether the values must be explicitly declared or if implicit or inferred values are allowed. + +When a bot or client sends an activity to a channel, it is typically a request for the activity to be recorded. When a channel sends an activity to a bot or client, it is typically a notification that the activity has already been recorded. + +## Basic activity structure + +This section defines the requirements for the basic structure of the activity object. + +Activity objects include a flat list of name/value pairs, called fields. Fields may be primitive types. JSON is used as the common interchange format and although not all activities must be serialized to JSON at all times, they must be serializable to it. This allows implementations to rely on a simple set of conventions for handling known and unknown activity fields. + +`A2001`: Activities MUST be serializable to the JSON format defined in [RFC 4627](http://www.ietf.org/rfc/rfc4627.txt) [[14](#references)], including adherence to e.g. field uniqueness constraints. + +`A2002`: Receivers MAY allow improperly-cased field names, although this is not required. Receivers MAY reject activities that do not include fields with the proper casing. + +`A2004`: Unless otherwise noted, senders SHOULD NOT include empty string values for string fields. + +`A2005`: Unless otherwise noted, senders MAY include additional fields within the activity or any nested complex objects. Receivers MUST accept fields they do not understand. + +`A2006`: Receivers SHOULD accept events of types they do not understand. + +This document defines data types for fields used within the Activity object. These type definitions include a syntactic type (e.g. `string` or `complex type`) and in the case of strings, an optional format (e.g. [ISO 8601 date time format](https://www.iso.org/iso-8601-date-and-time-format.html) [[2](#references)]). + +`A2007`: Senders MUST adhere to data type definitions contained in this document. + +`A2003`: Receivers SHOULD reject activities that contain field values whose types do not match the data types described in this specification. + +### Type + +The `type` field controls the meaning of each activity, and are by convention short strings (e.g. "`message`"). Senders may define their own application-layer types, although they are encouraged to choose values that are unlikely to collide with future well-defined values. If senders use URIs as type values, they SHOULD NOT implement URI ladder comparisons to establish equivalence. + +`A2010`: Activities MUST include a `type` field, with string value type. + +`A2011`: Two `type` values are equivalent only if they are ordinally identical. + +`A2012`: A sender MAY generate activity `type` values not defined in this document. + +`A2013`: A channel SHOULD reject activities of type it does not understand. + +`A2014`: A bot or client SHOULD ignore activities of type it does not understand. + +### Channel ID + +The `channelId` field establishes the channel and authoritative store for the activity. The value of the `channelId` field is of type string. + +`A2020`: Channel Activities MUST include a `channelId` field, with string value type. + +`A2021`: Two `channelId` values are equivalent only if they are ordinally identical. + +`A2022`: A channel MAY ignore or reject any activity it receives without an expected `channelId` value. + +### ID + +The `id` field establishes the identity for the activity once it has been recorded in the channel. Activities in-flight that have not yet been recorded do not have identities. Not all activities are assigned identities (for example, a [typing activity](#typing-activity) may never be assigned an `id`.) The value of the `id` field is of type string. + +`A2030`: Channels SHOULD include an `id` field if it is available for that activity. + +`A2031`: Clients and bots SHOULD NOT include an `id` field in activities they generate. + +For ease of implementation, it should be assumed that other participants do not have sophisticated knowledge of activity IDs, and that they will use only ordinal comparison to establish equivalency. + +For example, a channel may use hex-encoded GUIDs for each activity ID. Even though GUIDs encoded in uppercase are logically equivalent to GUIDs encoded in lowercase, senders SHOULD NOT use these alternative encodings when possible. The normalized version of each ID is established by the authoritative store, the channel. + +`A2032`: When generating `id` values, senders SHOULD choose values whose equivalency can be established by ordinal comparison. However, senders and receivers MAY allow logical equivalence of two values that are not ordinally equivalent if they have special knowledge of the circumstances. + +The `id` field is designed to allow de-duplication, but this is prohibitive in most applications. + +`A2033`: Receivers MAY de-duplicate activities by ID, however senders SHOULD NOT rely on receivers performing this de-duplication. + +### Timestamp + +The `timestamp` field records the exact UTC time when the activity occurred. Due to the distributed nature of computing systems, the important time is when the channel (the authoritative store) records the activity. The time when a client or bot initiated an activity may be transmitted separately in the `localTimestamp` field. The value of the `timestamp` field is an [ISO 8601 date time format](https://www.iso.org/iso-8601-date-and-time-format.html) [[2](#references)] encoded datetime within a string. + +`A2040`: Channels SHOULD include a `timestamp` field if it is available for that activity. + +`A2041`: Clients and bots SHOULD NOT include a `timestamp` field in activities they generate. + +`A2042`: Clients and bots SHOULD NOT use `timestamp` to reject activities, as they may appear out-of-order. However, they MAY use `timestamp` to order activities within a UI or for downstream processing. + +`A2043`: Senders SHOULD always use encode the value of `timestamp` fields as UTC, and they SHOULD always include Z as an explicit UTC mark within the value. + +### Local timezone +The `localTimezone` field expresses the timezone where the activity was generated. The value of the `localTimezone` field is a time zone name (zone entry) per the IANA Time Zone database. [[14](#references)] + +`A2055`: Clients MAY include the `localTimezone` in their activities. + +`A2056`: Channels SHOULD preserve `localTimezone` when forwarding activities from a sender to recipient(s). + +`A2057`: A receiver MAY ignore `localTimezone` values it does not understand. + +### Local timestamp + +The `localTimestamp` field expresses the datetime and timezone offset where the activity was generated. This may be different from the UTC `timestamp` where the activity was recorded. The value of the `localTimestamp` field is an ISO 8601 [[2](#references)] encoded datetime within a string. + +When both the `localTimezone` and `localTimestamp` fields are included in an activity, the interpretation is to first convert the value of the localTimestamp to UTC and then apply a conversion to the local timezone. + +`A2050`: Clients and bots MAY include the `localTimestamp` field in their activities. They SHOULD explicitly list the timezone offset within the encoded value. + +`A2051`: Channels SHOULD preserve `localTimestamp` when forwarding activities from a sender to recipient(s). + +### From + +The `from` field describes which client, bot, or channel generated an activity. The value of the `from` field is a complex object of the [Channel account](#channel-account) type. + +The `from.id` field identifies who generated an activity. Most commonly, this is another user or bot within the system. In some cases, the `from` field identifies the channel itself. + +`A2060`: Channels MUST include the `from` and `from.id` fields when generating an activity. + +`A2061`: Bots and clients SHOULD include the `from` and `from.id` fields when generating an activity. A channel MAY reject an activity due to missing `from` and `from.id` fields. + +The `from.name` field is optional and represents the display name for the account within the channel. Channels SHOULD include this value so clients and bots can populate their UIs and backend systems. Bots and clients SHOULD NOT send this value to channels that have a central record of this store, but they MAY send this value to channels that populate the value on every activity (e.g. an email channel). + +`A2062`: Channels SHOULD include the `from.name` field if the `from` field is present and `from.name` is available. + +`A2063`: Bots and clients SHOULD NOT include the `from.name` field unless it is semantically valuable within the channel. + +### Recipient + +The `recipient` field describes which client or bot is receiving this activity. This field is only meaningful when an activity is transmitted to exactly one recipient; it is not meaningful when it is broadcast to multiple recipients (as happens when an activity is sent to a channel). The purpose of the field is to allow the recipient to identify themselves. This is helpful when a client or bot has more than one identity within the channel. The value of the `recipient` field is a complex object of the [Channel account](#channel-account) type. + +`A2070`: Channels MUST include the `recipient` and `recipient.id` fields when transmitting an activity to a single recipient. + +`A2071`: Bots and clients SHOULD NOT include the `recipient` field when generating an activity. The exception to this is when sending a [Suggestion activity](#suggestion-activity), in which case the recipient MUST identify the user that should receive the suggestion. + +The `recipient.name` field is optional and represents the display name for the account within the channel. Channels SHOULD include this value so clients and bots can populate their UIs and backend systems. + +`A2072`: Channels SHOULD include the `recipient.name` field if the `recipient` field is present and `recipient.name` is available. + +### Conversation + +The `conversation` field describes the conversation in which the activity exists. The value of the `conversation` field is a complex object of the [Conversation account](#conversation-account) type. + +`A2080`: Channels, bots, and clients MUST include the `conversation` and `conversation.id` fields when generating an activity. + +The `conversation.name` field is optional and represents the display name for the conversation if it exists and is available. + +`A2081`: Channels SHOULD include the `conversation.name` and `conversation.isGroup` fields if they are available. + +`A2082`: Bots and clients SHOULD NOT include the `conversation.name` field unless it is semantically valuable within the channel. + +`A2083`: Bots and clients SHOULD NOT include the `conversation.isGroup` and `conversation.converationType` fields in activities they generate. + +`A2084`: Channels SHOULD include the `conversation.conversationType` field if more than one value is defined for the channel. Channels SHOULD NOT include the field if there is only one possible value. + +### Reply to ID + +The `replyToId` field identifies the prior activity to which the current activity is a reply. This field allows threaded conversation and comment nesting to be communicated between participants. `replyToId` is valid only within the current conversation. (See [relatesTo](#relates-to) for references to other conversations.) The value of the `replyToId` field is a string. + +`A2090`: Senders SHOULD include `replyToId` on an activity when it is a reply to another activity. + +`A2091`: A channel MAY reject an activity if its `replyToId` does not reference a valid activity within the conversation. + +`A2092`: Bots and clients MAY omit `replyToId` if it knows the channel does not make use of the field, even if the activity being sent is a reply to another activity. + +### Entities + +The `entities` field contains a flat list of metadata objects pertaining to this activity. Unlike attachments (see the [attachments](#attachments) field), entities do not necessarily manifest as user-interactable content elements, and are intended to be ignored if not understood. Senders may include entities they think may be useful to a receiver even if they are not certain the receiver can accept them. The value of each `entities` list element is a complex object of the [Entity](#entity) type. + +`A2100`: Senders SHOULD omit the `entities` field if it contains no elements. + +`A2101`: Senders MAY send multiple entities of the same type, provided the entities have distinct meaning. + +`A2102`: Senders MUST NOT include two or more entities with identical types and contents. + +`A2103`: Senders and receivers SHOULD NOT rely on specific ordering of the entities included in an activity. + +`A2104`: Receivers MUST ignore entities whose types they do not understand. + +`A2105`: Receivers SHOULD ignore entities whose type they understand but are unable to process due to e.g. syntactic errors. + +### Channel data + +Extensibility data in the activity schema is organized principally within the `channelData` field. This simplifies plumbing in SDKs that implement the protocol. The format of the `channelData` object is defined by the channel sending or receiving the activity. + +`A2200`: Channels can define `channelData` formats that are JSON primitives (e.g., strings, ints). However, they SHOULD define `channelData` as a complex type, or leave it undefined. + +`A2201`: If the `channelData` format is undefined for the current channel, receivers SHOULD ignore the contents of `channelData`. + +### Caller ID + +In some cases, it's important to record where an activity was sent. The `callerId` field is a string containing an [IRI](https://tools.ietf.org/html/rfc3987) [[3](#references)] identifying the caller of a bot, described in more detail in [Appendix V](#appendix-v---caller-id-values). This field is not intended to be transmitted over the wire, but is instead populated by bots and clients based on cryptographically verifiable data that asserts the identity of the callers (e.g. tokens). + +`A2250`: Senders SHOULD NOT populate the `callerId` field. + +`A2251`: Receivers SHOULD discard any data included in the `callerId` field on the wire. + +`A2252`: Bots SHOULD, after receiving an Activity, populate its `callerId` field with an identifier described in [Appendix V](#appendix-v---caller-id-values) + +### Service URL + +Activities are frequently sent asynchronously, with separate transport connections for sending and receiving traffic. The `serviceUrl` field is used by channels to denote the URL where replies to the current activity may be sent. The value of the `serviceUrl` field is of type string. + +`A2300`: Channels MUST include the `serviceUrl` field in all activities they send to bots. + +`A2301`: Channels SHOULD NOT include the `serviceUrl` field to clients who demonstrate they already know the channel's endpoint. + +`A2302`: Bots and clients SHOULD NOT populate the `serviceUrl` field in activities they generate. + +`A2302`: Channels MUST ignore the value of `serviceUrl` in activities sent by bots and clients. + +`A2304`: Channels SHOULD use stable values for the `serviceUrl` field as bots may persist them for long periods. + +## Message activity + +Message activities represent content intended to be shown within a conversational interface. Message activities may contain text, speech, interactive cards, and binary or unknown attachments; typically channels require at most one of these for the message activity to be well-formed. + +Message activities are identified by a `type` value of `message`. + +### Text + +The `text` field contains text content, either in the Markdown format, XML, or as plain text. The format is controlled by the [`textFormat`](#text-Format) field as is plain if unspecified or ambiguous. The value of the `text` field is of type string. + +`A3000`: The `text` field MAY contain an empty string to indicate sending text without contents. + +`A3001`: Channels SHOULD handle `markdown`-formatted text in a way that degrades gracefully for that channel. + +### Text format + +The `textFormat` field denotes whether the [`text`](#text) field should be interpreted as [Markdown](https://daringfireball.net/projects/markdown/) [[3](#references)], plain text, or XML. The value of the `textFormat` field is of type string, with defined values of `markdown`, `plain`, and `xml`. The default value is `plain`. This field is not designed to be extended with arbitrary values. + +The `textFormat` field controls additional fields within attachments etc. This relationship is described within those fields, elsewhere in this document. + +`A3010`: If a sender includes the `textFormat` field, it SHOULD only send defined values. + +`A3011`: Senders SHOULD omit `textFormat` if the value is `plain`. + +`A3012`: Receivers SHOULD interpret undefined values as `plain`. + +`A3013`: Bots and clients SHOULD NOT send the value `xml` unless they have prior knowledge that the channel supports it, and the characteristics of the supported XML dialect. + +`A3014`: Channels SHOULD NOT send `markdown` or `xml` contents to bots. + +`A3015`: Channels SHOULD accept `textformat` values of at least `plain` and `markdown`. + +`A3016`: Channels MAY reject `textformat` of value `xml`. + +### Locale + +The `locale` field communicates the language code of the [`text`](#text) field. The value of the `locale` field is an [IETF BCP-47](https://tools.ietf.org/html/bcp47) [[18](#references)] language tag within a string. + +`A3020`: Receivers SHOULD treat missing and unknown values of the `locale` field as unknown. + +`A3021`: Receivers SHOULD NOT reject activities with unknown locale. + +### Speak + +The `speak` field indicates how the activity should be spoken via a text-to-speech system. The field is only used to customize speech rendering when the default is deemed inadequate. It replaces speech synthesis for any content within the activity, including text, attachments, and summaries. The value of the `speak` field is either plain text or [SSML](https://www.w3.org/TR/speech-synthesis/) [[6](#references)] encoded within a string. + +`A3030`: The `speak` field MAY contain an empty string to indicate no speech should be generated. + +`A3031`: Receivers unable to generate speech SHOULD ignore the `speak` field. + +`A3033`: Receivers SHOULD NOT use XML DTD or schema resolution to include remote resources from outside the communicated XML fragment. + +`A3034`: Channels SHOULD NOT send the `speak` field to bots. + +`A3035`: Receivers generating speech from an Activity with a missing or null `speak` field SHOULD render message contents such as [`text`](#text) and [`summary`](#summary) instead. + +### Input hint + +The `inputHint` field indicates whether or not the generator of the activity is anticipating a response. This field is used predominantly within channels that have modal user interfaces, and is typically not used in channels with continuous chat feeds. The value of the `inputHint` field is of type string, with defined values of `accepting`, `expecting`, and `ignoring`. The default value is `accepting`. + +`A3040`: If a sender includes the `inputHint` field, it SHOULD only send defined values. + +`A3041`: If sending an activity to a channel where `inputHint` is used, bots SHOULD include the field, even when the value is `accepting`. + +`A3042`: Receivers SHOULD interpret undefined values as `accepting`. + +### Attachments + +The `attachments` field contains a flat list of objects to be displayed as part of this activity. The value of each `attachments` list element is a complex object of the [Attachment](#attachment) type. + +`A3050`: Senders SHOULD omit the `attachments` field if it contains no elements. + +`A3051`: Senders MAY send multiple entities of the same type. + +`A3052`: Receivers MAY treat attachments of unknown types as downloadable documents. + +`A3053`: Receivers SHOULD preserve the ordering of attachments when processing content, except when rendering limitations force changes, e.g. grouping of documents after images. + +### Attachment layout + +The `attachmentLayout` field instructs user interface renderers how to present content included in the [`attachments`](#attachments) field. The value of the `attachmentLayout` field is of type string, with defined values of `list` and `carousel`. The default value is `list`. + +`A3060`: If a sender includes the `attachmentLayout` field, it SHOULD only send defined values. + +`A3061`: Receivers SHOULD interpret undefined values as `list`. + +### Summary + +The `summary` field contains text used to replace [`attachments`](#attachments) on channels that do not support them. The value of the `summary` field is of type string. + +`A3070`: Receivers SHOULD consider the `summary` field to logically follow the `text` field. + +`A3071`: Channels SHOULD NOT send the `summary` field to bots. + +`A3072`: Channels able to process all attachments within an activity SHOULD ignore the `summary` field. + +### Suggested actions + +The `suggestedActions` field contains a payload of interactive actions that may be displayed to the user. Support for `suggestedActions` and their manifestation depends heavily on the channel. The value of the `suggestedActions` field is a complex object of the [Suggested actions](#suggested-actions-2) type. + +### Value + +The `value` field contains a programmatic payload specific to the activity being sent. Its meaning and format are defined in other sections of this document that describe its use. + +`A3080`: Senders SHOULD NOT include `value` fields of primitive types (e.g. string, int). `value` fields SHOULD be complex types or omitted. + +### Expiration + +The `expiration` field contains a time at which the activity should be considered to be "expired" and should not be presented to the recipient. The value of the `expiration` field is an [ISO 8601 date time format](https://www.iso.org/iso-8601-date-and-time-format.html)[[2](#references)] encoded datetime within a string. + +`A3090`: Senders SHOULD always use encode the value of `expiration` fields as UTC, and they SHOULD always include Z as an explicit UTC mark within the value. + +### Importance + +The `importance` field contains an enumerated set of values to signal to the recipient the relative importance of the activity. It is up to the receiver to map these importance hints to the user experience. The value of the `importance` field is of type string, with defined values of `low`, `normal` and `high`. The default value is `normal`. + +`A3100`: If a sender includes the `importance` field, it SHOULD only send defined values. + +`A3101`: Receivers SHOULD interpret undefined values as `normal`. + +### Delivery mode + +The `deliveryMode` field contains any one of an enumerated set of values to signal to the recipient alternate delivery paths for the activity or response. The value of the `deliveryMode` field is of type string, with defined values of `normal`, `notification` and `expectReplies`. The default value is `normal`. + +Activities with a `deliveryMode` of `expectReplies` differ only in their requirement to return a response payload back to the caller synchronously, as a direct response to the initial request. + +`A3110`: If a sender includes the `deliveryMode` field, it SHOULD only send defined values. + +`A3111`: Receivers SHOULD interpret undefined values as `normal`. + +`A3112`: Receivers SHOULD reject activities with `deliveryMode` of `expectReplies` if they do not support synchronous responses. + +`A3113`: Receivers SHOULD NOT reply with asynchronous responses to activities with `deliveryMode` of `expectReplies`. + +`A3114`: Senders MUST NOT include `deliveryMode` of `expectReplies` on Invoke activities unless the Invoke profile explicitly allows and describes its behavior. + +`A3115`: Senders MUST establish whether a receiver understands `deliveryMode` of `expectReplies` prior to sending activities with that value. + +`A3116`: Bots SHOULD NOT send activities with `deliveryMode` of `expectReplies` to channels. + +### Listen for + +The `listenFor` field contains a list of terms or references to term sources that speech and language processing systems can listen for. The value of the `listenFor` field is an array of strings whose format is defined in [Appendix IV](#appendix-iv---priming-format). + +A missing `listenFor` field indicates default priming behavior should be used. The default is defined by the channel and may depend on variables such as the identity of the user and the bot. + +`A3120`: Channels SHOULD NOT populate the `listenFor` field. + +`A3121`: Bots SHOULD send `listenFor` contents that reflect the complete set of utterances expected from users, not just the utterances in response to the content in the message in which the `listenFor` is included. + +### Semantic action + +The `semanticAction` field contains an optional programmatic action accompanying the user request. The semantic action field is populated by the channel and bot based on some understanding of what the user is trying to accomplish; this understanding may be achieved with natural language processing, additional user interface elements tied specifically to these actions, through a process of conversational refinement, or contextually via other means. The meaning and structure of the semantic action is agreed ahead of time between the channel and the bot. + +The value of the `semanticAction` field is a complex object of the [semantic action](#semantic-action-type) type. + +`A3130`: Channels and bots MAY populate the `semanticAction` field. Other senders SHOULD NOT populate the `semanticAction` field. + +Information within the semantic action field is meant to augment, not replace, existing content within the activity. A well-formed semantic action has a defined name, corresponding well-formed entities, and matches the user's intent in generating the activity. + +`A3131`: Senders SHOULD NOT remove any content used to generate the `semanticAction` field. + +`A3132`: Receivers MAY ignore parts or all of the `semanticAction` field. + +`A3133`: Receivers MUST ignore `semanticAction` fields they cannot parse or do not understand. + +Semantic actions are sometimes used to indicate a change in which participant controls the conversation. For example, a channel may use actions during an exchange with a skill. When so defined, skills can relinquish control through the [handoff activity](#handoff-activity) after the final `semanticAction` `state` is `done`. + +`A3135`: Channels MAY define the use of [handoff activity](#handoff-activity) in conjunction with semantic actions. + +`A3136`: Bots MAY use semantic action and [handoff activity](#handoff-activity) internally to coordinate conversational focus between components of the bot. + +## Contact relation update activity + +Contact relation update activities signal a change in the relationship between the recipient and a user within the channel. Contact relation update activities generally do not contain user-generated content. The relationship update described by a contact relation update activity exists between the user in the `from` field (often, but not always, the user initiating the update) and the user or bot in the `recipient` field. + +Contact relation update activities are identified by a `type` value of `contactRelationUpdate`. + +### Action + +The `action` field describes the meaning of the contact relation update activity. The value of the `action` field is a string. Only values of `add` and `remove` are defined, which denote a relationship between the users/bots in the `from` and `recipient` fields. + +## Conversation update activity + +Conversation update activities describe a change in a conversation's members, description, existence, or otherwise. Conversation update activities generally do not contain user-generated content. The conversation being updated is described in the `conversation` field. + +Conversation update activities are identified by a `type` value of `conversationUpdate`. + +`A4100`: Senders MAY include zero or more of `membersAdded`, `membersRemoved`, `topicName`, and `historyDisclosed` fields in a conversation update activity. + +`A4101`: Each `channelAccount` (identified by `id` field) SHOULD appear at most once within the `membersAdded` and `membersRemoved` fields. An ID SHOULD NOT appear in both fields. An ID SHOULD NOT be duplicated within either field. + +`A4102`: Channels SHOULD NOT use conversation update activities to indicate changes to a channel account's fields (e.g., `name`) if the channel account was not added to or removed from the conversation. + +`A4103`: Channels SHOULD NOT send the `topicName` or `historyDisclosed` fields if the activity is not signaling a change in value for either field. + +### Members added + +The `membersAdded` field contains a list of channel participants (bots or users) added to the conversation. The value of the `membersAdded` field is an array of type [`channelAccount`](#channel-account). + +### Members removed + +The `membersRemoved` field contains a list of channel participants (bots or users) removed from the conversation. The value of the `membersRemoved` field is an array of type [`channelAccount`](#channel-account). + +### Topic name + +The `topicName` field contains the text topic or description for the conversation. The value of the `topicName` field is of type string. + +### History disclosed + +The `historyDisclosed` field is deprecated. + +`A4110`: Senders SHOULD NOT include the `historyDisclosed` field. + +## End of conversation activity + +End of conversation activities signal the end of a conversation from the recipient's perspective. This may be because the conversation has been completely ended, or because the recipient has been removed from the conversation in a way that is indistinguishable from it ending. The conversation being ended is described in the `conversation` field. + +End of conversation activities are identified by a `type` value of `endOfConversation`. + +Both the `code` and the `text` fields are optional. + +### Code + +The `code` field contains a programmatic value describing why or how the conversation was ended. The value of the `code` field is of type string and its meaning is defined by the channel sending the activity. + +### Text + +The `text` field contains optional text content to be communicated to a user. The value of the `text` field is of type string, and its format is plain text. + +## Event activity + +Event activities communicate programmatic information from a client or channel to a bot. The meaning of an event activity is defined by the `name` field, which is meaningful within the scope of a channel. Event activities are designed to carry both interactive information (such as button clicks) and non-interactive information (such as a notification of a client automatically updating an embedded speech model). + +Event activities are the asynchronous counterpart to [invoke activities](#invoke-activity). Unlike invoke, event is designed to be extended by client application extensions. + +Event activities are identified by a `type` value of `event` and specific values of the `name` field. + +`A5000`: Channels MAY allow application-defined event messages between clients and bots, if the clients allow application customization. + +### Name + +The `name` field controls the meaning of the event and the schema of the `value` field. The value of the `name` field is of type string. + +`A5001`: Event activities MUST contain a `name` field. + +`A5002`: Receivers MUST ignore event activities with `name` fields they do not understand. + +### Value + +The `value` field contains parameters specific to this event, as defined by the event name. The value of the `value` field is a complex type. + +`A5100`: The `value` field MAY be missing or empty, if defined by the event name. + +`A5101`: Extensions to the event activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` fields to understand the schema of the `value` field. + +### Relates to + +The `relatesTo` field references another conversation, and optionally a specific activity within that conversation. The value of the `relatesTo` field is a complex object of the [Conversation reference](#conversation-reference) type. + +`A5200`: `relatesTo` SHOULD NOT reference an activity within the conversation identified by the `conversation` field. + +## Invoke activity + +Invoke activities communicate programmatic information from a client or channel to a bot, and have a corresponding return payload for use within the channel. The meaning of an invoke activity is defined by the `name` field, which is meaningful within the scope of a channel. + +Invoke activities are the synchronous counterpart to [event activities](#event-activity). Event activities are designed to be extensible. Invoke activities differ only in their ability to return response payloads back to the channel; because the channel must decide where and how to process these response payloads, Invoke is useful only in cases where explicit support for each invoke name has been added to the channel. Thus, Invoke is not designed to be a generic application extensibility mechanism. + +Invoke activities are identified by a `type` value of `invoke` and specific values of the `name` field. + +The list of defined Invoke activities is included in [Appendix III](#appendix-iii---protocols-using-the-invoke-activity). + +`A5301`: Channels SHOULD NOT allow application-defined invoke messages between clients and bots. + +### Name + +The `name` field controls the meaning of the invocation and the schema of the `value` field. The value of the `name` field is of type string. + +`A5401`: Invoke activities MUST contain a `name` field. + +`A5402`: Receivers MUST ignore event activities with `name` fields they do not understand. + +### Value + +The `value` field contains parameters specific to this event, as defined by the event name. The value of the `value` field is a complex type. + +`A5500`: The `value` field MAY be missing or empty, if defined by the event name. + +`A5501`: Extensions to the event activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` fields to understand the schema of the `value` field. + +### Relates to + +The `relatesTo` field references another conversation, and optionally a specific activity within that conversation. The value of the `relatesTo` field is a complex object of the [Conversation reference](#conversation-reference) type. + +`A5600`: `relatesTo` SHOULD NOT reference an activity within the conversation identified by the `conversation` field. + +## Installation update activity + +Installation update activities represent an installation or uninstallation of a bot within an organizational unit (such as a customer tenant or "team") of a channel. Installation update activities generally do not represent adding or removing a channel. + +Installation update activities are identified by a `type` value of `installationUpdate`. + +`A5700`: Channels MAY send installation activities when a bot is added to or removed from a tenant, team, or other organization unit within the channel. + +`A5701`: Channels SHOULD NOT send installation activities when the bot is installed into or removed from a channel. + +### Action + +The `action` field describes the meaning of the installation update activity. The value of the `action` field is a string. Only values of `add` and `remove` are defined. + +## Message delete activity + +Message delete activities represent a deletion of an existing message activity within a conversation. The deleted activity is referred to by the `id` and `conversation` fields within the activity. + +Message delete activities are identified by a `type` value of `messageDelete`. + +`A5800`: Channels MAY elect to send message delete activities for all deletions within a conversation, a subset of deletions within a conversation (e.g. only deletions by certain users), or no activities within the conversation. + +`A5801`: Channels SHOULD NOT send message delete activities for conversations or activities that the bot did not observe. + +`A5802`: If a bot triggers a delete, the channel SHOULD NOT send a message delete activity back to that bot. + +`A5803`: Channels SHOULD NOT send message delete activities corresponding to activities whose type is not `message`. + +## Message update activity + +Message update activities represent an update of an existing message activity within a conversation. The updated activity is referred to by the `id` and `conversation` fields within the activity, and the message update activity contains all fields in the revised message activity. + +Message update activities are identified by a `type` value of `messageUpdate`. + +`A5900`: Channels MAY elect to send messageUpdate activities for all updates within a conversation, a subset of updates within a conversation (e.g. only updates by certain users), or no activities within the conversation. + +`A5901`: If a bot triggers an update, the channel SHOULD NOT send a message update activity back to that bot. + +`A5902`: Channels SHOULD NOT send message update activities corresponding to activities whose type is not `message`. + +## Message reaction activity + +Message reaction activities represent a social interaction on an existing message activity within a conversation. The original activity is referred to by the `id` and `conversation` fields within the activity. The `from` field represents the source of the reaction (i.e., the user that reacted to the message). + +Message reaction activities are identified by a `type` value of `messageReaction`. + +### Reactions added + +The `reactionsAdded` field contains a list of reactions added to this activity. The value of the `reactionsAdded` field is an array of type [`messageReaction`](#message-reaction). + +### Reactions removed + +The `reactionsRemoved` field contains a list of reactions removed from this activity. The value of the `reactionsRemoved` field is an array of type [`messageReaction`](#message-reaction). + +## Suggestion activity + +Suggestion activities allow a bot to send content targeting a single user in the conversation which refers to a previous activity and suggests content that augments it. The suggested content is a superset of the [message activity](#message-activity), and fields present on the message activity are schematically valid on the suggestion activity. The channel in which the suggestion activity is sent defines limitations on text or attachment content, and these limitations may differ from the channel's limitations on message activities. The suggestion activity includes the `textHighlights` property so that the suggestions can be surfaced as annotations to the original content in the source activity. + +For example: an message activity with the text "...we should meet on Monday to review this plan..." could cause a bot to send a suggestion activity which refers to that section of text and offers the user an affordance to create a meeting on their calendar. Some channels use this information to highlight and turn into a hot link the snippet of text to show the suggestion in context. + +Suggestion activities are identified by a `type` value of `suggestion`. Suggestion activities refer to another activity by using the [`replyToId`](#reply-to-ID) property. + +`A6100`: If there is no `replyToId` then the suggested content should be shown to the recipient as a normal message activity. + +Suggestion activity uses the [`recipient`](#recipient) field to signal which user the suggestion is for. + +All `textHighlight` objects are relative to the activity specified by the `replyToId` property. There can be multiple `textHighlight` provided, allowing a client the option to turn different sections of the text into links which would show the suggestion content. + +`A6101`: Bots MAY use `replyToId` and `textHighlights` to associate the suggestion with an activity. + +`A6102`: Channels MAY use `replyToId` and `textHighlights` to show the suggestion activity contextually to the recipient. + +`A6103`: Channels MUST only show the suggestion activity to the recipient. If unable to identify the intended recipient or show the content only to them, the channel MUST drop the activity. + +`A6104`: Channels SHOULD NOT send suggestion activities to bots. + +### Suggestion activity text highlights + +The `textHighlights` field contains a list of text to highlight in the `text` field of the activity referred to by `replyToId`. The value of the `textHighlights` field is an array of type [`textHighlight`](#text-highlight). + +## Trace activity + +The Trace activity is an activity which the developer inserts in to the stream of activities to represent a point in the developers bot logic. The trace activity typically is logged by transcript history components to become part of a [Transcript-format](../transcript/transcript.md) history file. In remote debugging scenarios the Trace activity can be sent to the client so that the activity can be inspected as part of the debug flow. + +Trace activities are normally not shown to the user, and are internal to transcript logging and developer debugging. + +Trace activities are identified by a `type` value of `trace`. + +`A6150`: channels SHOULD NOT display trace activities to the user, unless the user has identified itself as the developer in a secure manner. + +### Name + +The `name` field controls the name of the trace operation. The value of the `name` field is of type string. + +`A6151`: Trace activities MAY contain a `name` field. + +`A6152`: Receivers MUST ignore event activities with `name` fields they do not understand. + +### Label + +The `label` field contains optional a label which can provide contextual information about the trace. The value of the `label` field is of type string. + +`A6153`: Trace activities MAY contain a `label` field. + +### ValueType + +The `valueType` field is a string type which contains a unique value which identifies the shape of the `value` object for this trace. + +`A6154`: The `valueType` field MAY be missing or empty, if the `name` property is sufficient to understand the shape of the `value` property. + +### Value + +The `value` field contains an object for this trace, as defined by the `valueType` or `name` property if there is no `valueType`. The value of the `value` field is a complex type. + +`A6155`: The `value` field MAY be missing or empty. + +`A6156`: Extensions to the trace activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` or `valueType` field to understand the schema of the `value` field. + +### Relates to + +The `relatesTo` field references another conversation, and optionally a specific activity within that conversation. The value of the `relatesTo` field is a complex object of the [Conversation reference](#conversation-reference) type. + +`A6157`: `relatesTo` MAY reference an activity within the conversation identified by the `conversation` field. + +## Typing activity + +Typing activities represent ongoing input from a user or a bot. This activity is often sent when keystrokes are being entered by a user, although it's also used by bots to indicate they're "thinking," and could also be used to indicate e.g. collecting audio from users. + +Typing activities are intended to persist within UIs for three seconds. + +Typing activities are identified by a `type` value of `typing`. + +`A6000`: If able, clients SHOULD display typing indicators for three seconds upon receiving a typing activity. + +`A6001`: Unless otherwise known for the channel, senders SHOULD NOT send typing activities more frequently than one every three seconds. (Senders MAY send typing activities every two seconds to prevent gaps from appearing.) + +`A6002`: If a channel assigns an [`id`](#id) to a typing activity, it MAY allow bots and clients to delete the typing activity before its expiration. + +`A6003`: If able, channels SHOULD send typing activities to bots. + +## Handoff activity + +Handoff activities are used to request or signal a change in focus between elements inside a bot. They are not intended to be used in wire communication (besides internal communication that occurs between services in a distributed bot). + +Handoff activities are identified by a `type` value of `handoff`. + +`A6200`: Channels SHOULD drop handoff activities if they are not supported. + +## Command activity + +Command activities communicate a request to perform a specific action. They are identified by a `type` value of `command` and specific values of the `name` field. + +Commands look similar in structure to events but have different semantics. Commands are requests to perform an action and receivers typically respond with one or more commandResult activities. Receivers are also expected to explicitly reject unsupported command activities. + +`A6300`: Channels MAY allow application-defined command activities between clients and bots, if the clients allow application customization. + +`A6301`: Application-defined command activities MUST be declared in the `application/*` namespace. + +`A6302`: Command activities outside the `application/*` are considered reserved for Activity Protocol. + +The list of Activity Protocol command activities is included in [Appendix VI](#appendix-vi---protocols-using-the-command-activity). + +### Name + +The `name` field defines the meaning of the command activity. The value of the `name` field is of type string. + +`A6310`: Command activities MUST contain a `name` field. + +`A6311`: The `name` of a command activity MUST use a [MIME media type](https://www.iana.org/assignments/media-types/media-types.xhtml) [[8](#references)] format. + +`A6312`: Receivers MUST ignore command activities with missing or invalid `name` field. + +The recommended patterns for rejecting command activities are included in [Appendix VI](#appendix-vi---protocols-using-the-command-activity). + +### Value + +The `value` field contains the command metadata and parameters specific to a command, as defined by the command `name`. The `value` field is a complex object of the [command value](#command-value) type. + +`A6321`: Command activities MUST contain a `value` field. + +`A6322`: Receivers MUST ignore command activities with missing or invalid `value` field. + +## Command result activity + +Command result activities communicate the result of a [command activity](#command-activity). + +Command result activities are identified by a `type` value of `commandResult` and specific values of the `name` field. The `name` field of a command result is always set to the `name` of the original command activity. + +`A6400`: Senders MAY send one or more command result activities to communicate the result of the command. + +### Name + +The `name` field defines the meaning of the command result activity. The value of the `name` field is of type string. + +`A6411`: Command result activities MUST contain a `name` field. + +`A6412`: Receivers MUST ignore command activities with missing or invalid `name` field. + +`A6413`: The `name` of a command result activity MUST be the same as the `name` of the original command activity. + +### Value + +The `value` field contains the command metadata and additional information specific to a command result, as defined by the command result `name`. The value of the `value` field is a complex object of type [command result value](#command-result-value) type. + +`A6421`: Command result activities MUST contain a `value` field. + +`A6422`: Receivers MUST reject command result activities with missing or invalid `value` field. + +## Complex types + +This section defines complex types used within the activity schema, described above. + +### Attachment + +Attachments are content included within a [message activity](#message-activity): cards, binary documents, and other interactive content. They're intended to be displayed in conjunction with text content. Content may be sent via URL data URI within the `contentUrl` field, or inline in the `content` field. + +`A7100`: Senders SHOULD NOT include both `content` and `contentUrl` fields in a single attachment. + +#### Content type + +The `contentType` field describes the [MIME media type](https://www.iana.org/assignments/media-types/media-types.xhtml) [[8](#references)] of the content of the attachment. The value of the `contentType` field is of type string. + +#### Content + +When present, the `content` field contains a structured JSON object attachment. The value of the `content` field is a complex type defined by the `contentType` field. + +`A7110`: Senders SHOULD NOT include JSON primitives in the `content` field of an attachment. + +#### Content URL + +When present, the `contentUrl` field contains a URL to the content in the attachment. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)] are typically supported by channels. The value of the `contentUrl` field is of type string. + +`A7120`: Receivers SHOULD accept HTTPS URLs. + +`A7121`: Receivers MAY accept HTTP URLs. + +`A7122`: Channels SHOULD accept data URIs. + +`A7123`: Channels SHOULD NOT send data URIs to clients or bots. + +#### Name + +The `name` field contains an optional name or filename for the attachment. The value of the `name` field is of type string. + +#### Thumbnail URL + +Some clients have the ability to display custom thumbnails for non-interactive attachments or as placeholders for interactive attachments. The `thumbnailUrl` field identifies the source for this thumbnail. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)] are typically also allowed. + +`A7140`: Receivers SHOULD accept HTTPS URLs. + +`A7141`: Receivers MAY accept HTTP URLs. + +`A7142`: Channels SHOULD accept data URIs. + +`A7143`: Channels SHOULD NOT send `thumbnailUrl` fields to bots. + +### Card action + +A card action represents a clickable or interactive button for use within cards or as [suggested actions](#suggested-actions). They are used to solicit input from users. Despite their name, card actions are not limited to use solely on cards. + +Card actions are meaningful only when sent to channels. + +Channels decide how each action manifests in their user experience. In most cases, the cards are clickable. In others, they may be selected by speech input. In cases where the channel does not offer an interactive activation experience (e.g., when interacting over SMS), the channel may not support activation whatsoever. The decision about how to render actions is controlled by normative requirements elsewhere in this document (e.g. within the card format, or within the [suggested actions](#suggested-actions) definition). + +#### Type + +The `type` field describes the meaning of the button and behavior when the button is activated. Values of the `type` field are by convention short strings (e.g. "`openUrl`"). See subsequent sections for requirements specific to each action type. + +* An action of type `messageBack` represents a text response to be sent via the chat system. +* An action of type `imBack` represents a text response that is added to the chat feed. +* An action of type `postBack` represents a text response that is not added to the chat feed. +* An action of type `openUrl` represents a hyperlink to be handled by the client. +* An action of type `downloadFile` represents a hyperlink to be downloaded. +* An action of type `showImage` represents an image that may be displayed. +* An action of type `signin` represents a hyperlink to be handled by the client's signin system. +* An action of type `playAudio` represents audio media that may be played. +* An action of type `playVideo` represents video media that may be played. +* An action of type `call` represents a telephone number that may be called. +* An action of type `openApp` represents an app name to open. + +#### Title + +The `title` field includes text to be displayed on the button's face. The value of the `title` field is of type string, and does not contain markup. + +This field applies to actions of all types. + +`A7210`: Channels SHOULD NOT process markup within the `title` field (e.g. Markdown). + +#### Image + +The `image` field contains a URL referencing an image to be displayed on the button's face. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)] are typically supported by channels. The value of the `image` field is of type string. + +This field applies to actions of all types. + +`A7220`: Channels SHOULD accept HTTPS URLs. + +`A7221`: Channels MAY accept HTTP URLs. + +`A7222`: Channels SHOULD accept data URIs. + +#### Image alt text + +The `imageAltText` field contains alternate image text to be used in place of the `image` field. This field should only be used when the `text` field is inadequate as alt text. The value of the `imageAltText` field is of type string. + +`A7225`: Senders SHOULD NOT populate the `imageAltText` field if its value is identical to the `text` field. + +`A7226`: Receivers SHOULD use the value of the `imageAltText` field if it is present in the enclosing [card action](#card-action). If the `imageAltText` field is missing, receivers SHOULD use the `text` field as the alt text. + +#### Text + +The `text` field contains text content to be sent to a bot and included in the chat feed when the button is clicked. The contents of the `text` field may or may not be displayed, depending on the button type. The `text` field may contain markup, controlled by the [`textFormat`](#text-format) field in the activity root. The value of the `text` field is of type string. + +This field is only used on actions of select types. Details on each type of action are included later in this document. + +`A7230`: The `text` field MAY contain an empty string to indicate sending text without contents. + +`A7231`: Channels SHOULD process the contents of the `text` field in accordance with the [`textFormat`](#text-format) field in the activity root. + +#### Display text + +The `displayText` field contains text content to be included in the chat feed when the button is clicked. The contents of the `displayText` field SHOULD always be displayed, when technically possible within the channel. The `displayText` field may contain markup, controlled by the [`textFormat`](#text-format) field in the activity root. The value of the `displayText` field is of type string. + +This field is only used on actions of select types. Details on each type of action are included later in this document. + +`A7240`: The `displayText` field MAY contain an empty string to indicate sending text without contents. + +`A7241`: Channels SHOULD process the contents of the `displayText` field in accordance with the [`textFormat`](#text-format) field in the activity root. + +#### Value + +The `value` field contains programmatic content to be sent to a bot when the button is clicked. The contents of the `value` field are of any primitive or complex type, although certain activity types constrain this field. + +This field is only used on actions of select types. Details on each type of action are included later in this document. + +#### ChannelData + +Extensibility data in the activity schema is organized principally within the channelData field. This simplifies plumbing in SDKs that implement the protocol. The format of the channelData object is defined by the channel sending or receiving the activity. + +#### Message Back + +A `messageBack` action represents a text response to be sent via the chat system. Message Back uses the following fields: +* `type` ("`messageBack`") +* `title` +* `image` +* `text` +* `displayText` +* `value` (of any type) + +`A7350`: Senders SHOULD NOT include `value` fields of primitive types (e.g. string, int). `value` fields SHOULD be complex types or omitted. + +`A7351`: Channels MAY reject or drop `value` fields not of complex type. + +`A7352`: When activated, channels MUST send an activity of type `message` to all relevant recipients. + +`A7353`: If the channel supports storing and transmitting text, the contents of the `text` field of the action MUST be preserved and transmitted in the `text` field of the generated message activity. + +`A7355`: If the channel supports storing and transmitting additional programmatic values, the contents of the `value` field MUST be preserved and transmitted in the `value` field of the generated message activity. + +`A7356`: If the channel supports preserving a different value in the chat feed than is sent to bots, it MUST include the `displayText` field in the chat history. + +`A7354`: If the channel does not support `A7353` but does support recording text within the chat feed, it MUST include the `text` field in the chat history. + +`A7357`: If the channel supports presenting an image on the action, the contents of the `image` field of the action MUST be shown on or in connection with the action. + +`A7358`: The contents of the `title` field of the action MUST be shown on or in connection with the action. + +`A7359`: Senders SHOULD include an `image` field, a `title` field, or both. Channels MAY reject or drop `messageBack` actions which have neither an `image` field nor a `title` field. + +#### IM Back + +An `imBack` action represents a text response that is added to the chat feed. IM Back uses the following fields: +* `type` ("`imBack`") +* `title` +* `image` +* `value` (of type string) + +`A7360`: When activated, channels MUST send an activity of the type `message` to all relevant recipients. + +`A7361`: If the channel supports storing and transmitting text, the contents of the `title` field MUST be preserved and transmitted in the `text` field of the generated message activity. + +`A7362`: If the `title` field on an action is missing and the `value` field is of type string, the channel MAY transmit the contents of the `value` field in the `text` field of the generated message activity. + +`A7363`: If the channel supports recording text within the chat feed, it MUST include the contents of the `title` field in the chat history. + +#### Post Back + +A `postBack` action represents a text response that is not added to the chat feed. Post Back uses the following fields: +* `type` ("`postBack`") +* `title` +* `image` +* `value` (of type string) + +`A7370`: When activated, channels MUST send an activity of the type `message` to all relevant recipients. + +`A7371`: Channels SHOULD NOT include text within the chat history when a Post Back action is activated. + +`A7372`: Channels MUST reject or drop `value` fields not of string type. + +`A7373`: If the channel supports storing and transmitting text, the contents of the `value` field MUST be preserved and transmitted in the `text` field of the generated message activity. + +`A7374`: If the channel is unable to support transmitting to the bot without including history in the chat feed, it SHOULD use the `title` field as the display text. + +#### Open URL actions + +An `openUrl` action represents a hyperlink to be handled by the client. Open URL uses the following fields: +* `type` ("`openUrl`") +* `title` +* `image` +* `value` (of type string) + +`A7380`: Senders MUST include a URL in the `value` field of an `openUrl` action. + +`A7381`: Receivers MAY reject `openUrl` action whose `value` field is missing or not a string. + +`A7382`: Receivers SHOULD reject or drop `openUrl` actions whose `value` field contains a data URI, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)]. + +`A7383`: Receivers SHOULD NOT reject `openUrl` actions whose `value` URI is of an otherwise unexpected URI scheme or value. + +`A7384`: Clients with knowledge of particular URI schemes (e.g. HTTP) MAY handle `openUrl` actions within an embedded renderer (e.g., a browser control). + +`A7385`: When available, clients SHOULD delegate handling of `openUrl` actions not handled by `A7354` to the operating-system- or shell-level URI handler. + +#### Download File actions + +A `downloadFile` action represents a hyperlink to be downloaded. Download File uses the following fields: +* `type` ("`downloadFile`") +* `title` +* `image` +* `value` (of type string) + +`A7390`: Senders MUST include a URL in the `value` field of an `downloadFile` action. + +`A7391`: Receivers MAY reject `downloadFile` action whose `value` field is missing or not a string. + +`A7392`: Receivers SHOULD reject or drop `downloadFile` actions whose `value` field contains a data URI, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)]. + +#### Show Image File actions + +A `showImage` action represents an image that may be displayed. Show Image uses the following fields: +* `type` ("`showImage`") +* `title` +* `image` +* `value` (of type string) + +`A7400`: Senders MUST include a URL in the `value` field of an `showImage` action. + +`A7401`: Receivers MAY reject `showImage` action whose `value` field is missing or not a string. + +`A7402`: Receivers MAY reject `showImage` actions whole `value` field is a Data URI, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)]. + +#### Signin + +A `signin` action represents a hyperlink to be handled by the client's signin system. Signin uses the following fields: +* `type` ("`signin`") +* `title` +* `image` +* `value` (of type string) + +`A7410`: Senders MUST include a URL in the `value` field of an `signin` action. + +`A7411`: Receivers MAY reject `signin` action whose `value` field is missing or not a string. + +`A7412`: Receivers MUST reject or drop `signin` actions whose `value` field contains a data URI, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)]. + +#### Play Audio + +A `playAudio` action represents audio media that may be played. Play Audio uses the following fields: +* `type` ("`playAudio`") +* `title` +* `image` +* `value` (of type string) + +`A7420`: When activated, channels MAY play the audio referenced by URI in the `value` field. + +`A7421`: Channels MUST reject or drop `value` fields not of string type. + +`A7422`: Senders SHOULD NOT send data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)], without prior knowledge that the channel supports them. + +#### Play video + +A `playVideo` action represents video media that may be played. Play Video uses the following fields: +* `type` ("`playVideo`") +* `title` +* `image` +* `value` (of type string) + +`A7430`: When activated, channels MAY play the video referenced by URI in the `value` field. + +`A7431`: Channels MUST reject or drop `value` fields not of string type. + +`A7432`: Senders SHOULD NOT send data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)], without prior knowledge that the channel supports them. + +#### Call + +A `call` action represents a telephone number that may be called. Call uses the following fields: +* `type` ("`call`") +* `title` +* `image` +* `value` (of type string) + +`A7440`: Senders MUST include a URL of scheme `tel` in the `value` field of an `call` action. + +`A7441`: Receivers MUST reject `call` action whose `value` field is missing or not a string URI of the `tel` scheme. + +### Channel account + +Channel accounts represent identities within a channel. The channel account includes an ID that can be used to identify and contact the account within that channel. Sometimes these IDs exist within a single namespace (e.g. Skype IDs); sometimes, they are federated across many servers (e.g. email addresses). In addition to the ID, channel accounts include display names and Azure Active Directory (AAD) object IDs. + +#### Channel account ID + +The `id` field is the identifier and address within the channel. The value of the `id` field is a string. An example `id` within a channel that uses email addresses is "name@example.com" + +`A7510`: Channels SHOULD use the same values and conventions for account IDs regardless of their position within the schema (`from.id`, `recipient.id`, `membersAdded`, etc.). This allows bots and clients to use ordinal string comparisons to know when e.g. they are described in the `membersAdded` field of a `conversationUpdate` activity. + +#### Channel account name + +The `name` field is an optional, friendly name within the channel. The value of the `name` field is a string. An example `name` within a channel is "John Doe" + +#### Channel account AAD Object ID + +The `aadObjectId` field is an optional ID corresponding to the account's object ID within Azure Active Directory (AAD). The value of the `aadObjectId` field is a string. + +#### Channel account role + +The `role` field indicates whether entity behind the account is a user or bot. This field is intended for use in the [Transcript format](../transcript/transcript.md) [[15](#references)] to distinguish between activities sent by users and activities sent by bots. The value of the `role` field is a string. + +`A7511`: Senders SHOULD NOT include this field. Receivers SHOULD ignore this field. + +### Conversation account + +Conversation accounts represent the identity of conversations within a channel. In channels that support only a single conversation between two accounts (e.g. SMS), the conversation account is persistent and does not have a predetermined start or end. In channels that support multiple parallel conversations (e.g. email), each conversation will likely have a unique ID. + +#### Conversation account ID + +The `id` field is the identifier within the channel. The format of this ID is defined by the channel and is used as an opaque string throughout the protocol. + +Channels SHOULD choose `id` values that are stable for all participants within a conversation. (For example, a poor example for the `id` field for a 1:1 conversation is to use the other participant's ID as the `id` value. This would result in a different `id` from each participant's perspective. A better choice is to sort the IDs of both participants and concatenate them together, which would be the same for both parties.) + +#### Conversation account name + +The `name` field is an optional, friendly name for the conversation within the channel. The value of the `name` field is a string. + +#### Conversation account AAD Object ID + +The `aadObjectId` field is an optional ID corresponding to the conversation's object ID within Azure Active Directory (AAD). The value of the `aadObjectId` field is a string. + +#### Conversation account Is Group + +The `isGroup` field indicates whether the conversation contains more than two participants at the time the activity was generated. The value of the `isGroup` field is a boolean; if omitted, the default value is `false`. This field typically controls the at-mention behavior for participants in the channel, and SHOULD be set to `true` if and only if more than two participants have the ability to both send and receive activities within the conversation. + +#### Conversation account Conversation Type + +If the channel distinguishes between types of conversations (e.g. group vs. personal), the `conversationType` field indicates the type of the conversation. This field augments the lower-fidelity [`isGroup`](#conversation-account-is-group) field. The value of the `conversationType` field is a string and its meaning is defined by the channel in which the type occurs. + +#### Conversation account role + +The `role` field indicates whether entity behind the account is a user or bot. This field is intended for use in the [Transcript format](../transcript/transcript.md) [[15](#references)] to distinguish between activities sent by users and activities sent by bots. The value of the `role` field is a string. + +`A7512`:Senders SHOULD NOT include this field. Receivers SHOULD ignore this field. + +#### Conversation account tenant ID + +The `tenantId` field is an optional ID corresponding to the conversation's tenant ID within the channel. The value of the `tenantId` field is a string. + +### Conversation reference + +The `conversationReference` type contains a reference into another conversation. In its most minimal form, this reference may only contain the IDs of the target conversation. Implementers may wish to carry additional information in the `conversationReference`, such as the identity and roles of participants, and the ID of a specific [`activity`](#activity) within the conversation. Consumers of the `conversationReference` type are not provided any de facto guarantees about the validity or consistency of the IDs within the object; this is instead conferred by the sender who created the object. + +The `conversationReference` type is frequently used to store a reference to a conversation so it can be later retrieved and used to continue a conversation. + +`A7550`: Senders MUST include the `channelId` and the `conversation.id` properties within a conversation reference, even if they contain the same values as the parent Activity. + +#### Conversation reference channel ID + +The `channelId` field contains the [channel ID](#channel-id) of the conversation referenced by the conversationReference object. The value of the `channelId` field is of type string. + +#### Conversation reference activity ID + +The `activityId` field contains an optional [ID](#id) of an activity to refer to within the conversation. The value of the `activityId` field is of type string. + +#### Conversation reference conversation + +The `conversation` field contains the [Conversation account](#conversation-account) representing the conversation's identity. The value of the `conversation` field is a complex object of type [Conversation account](#conversation-account). + +#### Conversation reference user + +The `user` field contains an optional reference to the user's identity within the conversation. The value of the `user` field is of type [Channel account](#channel-account). + +#### Conversation reference bot + +The `bot` field contains an optional reference to the bot's identity within the conversation. The value of the `bot` field is of type [Channel account](#channel-account). + +#### Conversation reference serviceUrl + +The `serviceUrl` field contains an optional copy of the [`serviceUrl`](#service-url) that applies to the referenced conversation. The value of the `serviceUrl` field is of type string. + +`A7560`: Receivers SHOULD ensure the `serviceUrl` property in conversation references is accompanied by either a corresponding security endorsement (in the case of transmitted Conversation references), or a flag indicating the `serviceUrl` and its security endorsement was verified before storage (in the case of a stored Conversation reference). + +#### Conversation reference locale + +The `locale` field contains an optional copy of the [`locale`](#locale) that applies to the referenced conversation. The value of the `locale` field is an [IETF BCP-47](https://tools.ietf.org/html/bcp47) [[18](#references)] language tag within a string. + +### Entity + +Entities carry metadata about an activity or conversation. Each entity's meaning and shape is defined by the `type` field. Additional type-specific fields sit as peers to the `type` field. + +Some non-Bot-Framework entities may have a preexisting field called `type`. Parties integrating these entities into the activity entity format are advised to define field-level mapping to resolve conflicts with the `type` field name and other incompatibilities with serialization requirement `A2001` as part of the IRI defining the entity type. + +Frequently, entities used within Activity Protocol are also expressed elsewhere using [JSON-LD](https://www.w3.org/TR/json-ld/) [[17](#references)]. The entity format is designed to be compatible with JSON-LD contexts, but does not require senders or receivers to implement JSON-LD to successfully process an entity. + +`A7603`: Senders MAY include [JSON-LD](https://www.w3.org/TR/json-ld/) [[17](#references)] fields within entities. + +`A7604`: Senders MUST NOT expect or require [JSON-LD](https://www.w3.org/TR/json-ld/) [[17](#references)] processing to parse an entity. + +#### Entity type + +The `type` field is required, and defines the meaning and shape of the entity. `type` is intended to contain [IRIs](https://tools.ietf.org/html/rfc3987) [[3](#references)] although there are a small number on non-IRI entity types defined in [Appendix II](#appendix-ii---non-iri-entity-types). The value of the `type` field is a string. + +`A7610`: Senders SHOULD use non-IRI types names only for types described in [Appendix II](#appendix-ii---non-iri-entity-types). + +`A7611`: Senders MAY send IRI types for types described in [Appendix II](#appendix-ii---non-iri-entity-types) if they have knowledge that the receiver understands them. + +`A7612`: Senders SHOULD use or establish IRIs for entity types not defined in [Appendix II](#appendix-ii---non-iri-entity-types). + +`A7613`: Senders MUST NOT use relative IRIs within the `type` field, nor require JSON-LD IRI resolution to understand a type identifier. + +### Suggested actions + +Suggested actions may be sent within message content to create interactive action elements within a client UI. + +`A7700`: Clients that do not support UI capable of rendering suggested actions SHOULD ignore the `suggestedActions` field. + +`A7701`: Senders SHOULD omit the `suggestedActions` field if the `actions` field is empty. + +#### To + +The `to` field contains channel account IDs to whom the suggested actions should be displayed. This field may be used to filter actions to a subset of participants within the conversation. + +`A7710`: If the `to` field is missing or empty, the client SHOULD display the suggested actions to all conversation participants. + +`A7711`: If the `to` field contains invalid IDs, those values SHOULD be ignored. + +#### Actions + +The `actions` field contains a flat list of actions to be displayed. The value of each `actions` list element is a complex object of type `cardAction`. + +### Message reaction + +Message reactions represent a social interaction ("like", "+1", etc.). Message reactions currently only carry a single field: the `type` field. + +#### Type + +The `type` field describes the type of social interaction. The value of the `type` field is a string, and its meaning is defined by the channel in which the interaction occurs. Some common values such as `like` and `+1` although these are uniform by convention and not by rule. + +### Text highlight + +A text highlight refers to a substring of content within another field. This type is used within [suggestion activities](#suggestion-activity) to annotate text within another activity. + +`A7720`: Receivers MUST ignore a text highlight if the `text` field is missing or empty, if it contains with a `occurrence` value less than 0, or if the `occurrence` field greater than the number of occurrences of the `text` field within the referenced text. + +#### Text + +The `text` field is required, and defines the snippet of text to highlight. The contents of the `text` field MUST be ordinally identical to the content of the referenced text. The value of the `text` field is of type string. + +`A7721`: Senders MUST NOT send missing or empty strings for `text`. Receivers MUST ignore text higlights with missing or empty `text` fields. + +#### Occurrence + +The `occurrence` field is optional. It gives the sender the ability to specify which occurrence of the `text` to highlight. If it is not specified or is 0 then clients should highlight the first occurrence. The value of the `occurrence` field is of type integer. + +`A7722`: Senders SHOULD NOT include the `occurrence` field if its value is `0` or `1`. + +### Semantic action type + +The semantic action type represents a programmatic reference. It is used within the [`semanticAction`](#semantic-action) field in [message activities](#message-activity). Actions are defined and registered externally to this protocol, typically as part of the [Bot Manifest](../manifestdefinition/bot-manifest.md) [[13](#references)]. The action definition declares the ID for the action and associates it with named entities, each of which has a corresponding type. Senders are receivers of actions use these names and types to create and parse actions that conform to the action definition. + +Actions proceed through a lifecycle, described by the [`state`](#semantic-action-state) and [`id`](#semantic-action-id) fields. + +At the beginning of the lifecycle, the channel indicates the `id` of the action it wishes to invoke, and sends a `state` of `start`. + +The bot then sends and receives subsequent activities. During this time, both the bot and the channel may send additional metadata in the form of actions with `state` of `continue`. If the bot detects the user changing topic, it reflects this in a revised value of `id`. + +When complete, the bot may send `state` of `done`. Just like earlier steps, the bot can update the `id` field to reflect what was actually in the conversation. + +Example data flow for `semanticAction`. (Note that [entities](#semantic-action-entities) are abbreviated). +``` +User: Book a flight from SeaTac to NYC + Semantic action: state="start", id="bookFlight", entities="SeaTac", "NYC" + +Bot: Would you like to arrive at LaGuardia Airport or JFK International Airport? + Semantic action: state="continue", id="bookFlight", entities="KLGA", "KJFK" + +User: Hold on a second + Semantic action empty + +Bot: No problem, please reply when you'd like to continue. + Semantic action empty + +User: LaGuardia + Semantic action: state="continue", id="bookFlight", entities="KLGA" + +Bot: OK, would you like to book your flight? + Semantic action: state="continue", id="bookFlight" + +User: Yes + Semantic action empty + +Bot: OK, your flight has been booked for November 10 at 8:05am. + Semantic action: state="done", id="flightBooked", entities="Flight 81, KSEA to KLGA" +``` + +#### Semantic action state + +The `state` field describes whether the action is beginning, continuing, or ending. The value of the `state` field is of type string with defined values of `start`, `continue`, and `done`. This field is not extensible. + +**Note: the `state` field is not a mechanism to control a bot's state machine. Instead, it may be used to *request* that an action be started, or it may be used by bots to *inform* that the current action has changed or completed.** + +Because `semanticAction` is optional and the topic of a conversation may drift over time, receivers are cautioned to be flexible in accepting `semanticAction` contents, especially with states of `continue` and `done`. Specifically, channels and bots are cautioned not to create a state machine requiring specific values of `semanticAction` fields `state` and `id`. Instead, treat `semanticAction` as additional metadata that can be used to optionally enrich data sharing between actors. Receivers may always discard unexpected `semanticAction` values in accordance with `A3133`. + +The `start` state indicates an action is being started. Subsequent `start` actions indicate the sender wishes to start this action or another action (depending on the value of the `id` field). + +`A7760`: Channels MUST only send `state` of `start` on the first message of an exchange invoking an action. Others senders MUST NOT send `state` of `start`. + +The `continue` state indicates processing of an action is ongoing, and this activity contains new information within the `semanticAction` field. + +`A7761`: Channels and bots MAY send `state` of `continue` when they populate the `semanticAction` field. Other senders MUST NOT send `state` of `continue`. + +The `done` state indicates an action was successfully completed. + +`A7762`: Bots SHOULD send `state` of `done` when an action has been completed, even if `semanticAction` contains no entities. Other senders MUST NOT send `state` of `done`. + +Channels are expected to provide continuity when issuing actions to bots, but should expect changes in the `state` or `id` values received from bots. + +`A7763`: Channels SHOULD NOT send `state` of `continue` without a preceding `state` of `start`. + +`A7764`: Receivers MUST NOT require senders to include `semanticAction` fields with `state` of `continue` or `done`, nor a specific `id` value during a conversation. + +#### Semantic action ID + +The `id` field establishes the identity for the action, and is associated with a definition for the meaning and structure of the action (typically communicated via a registration system). The value of the `id` field is of type string. + +`A7730`: Senders MUST NOT generate semantic actions with missing or empty `id` fields. + +`A7731`: Two `id` values are equivalent only if they are ordinally identical. + +`A7732`: Channels SHOULD only change the value of the `id` field within a conversation when a new action with `state` of `start` is sent, or when the bot sends a `state` of `continue` with a new `id` value. + +`A7733`: Bots SHOULD make best-effort attempts to update the `id` field to reflect the topic of the conversation. Channels SHOULD make best-effort attempts to honor the bot's stated `id` values. + +#### Semantic action entities + +The `entities` field contains entities associated with this action. The value of the `entities` field is a complex object; the keys of this object are entity names and the values of each key is the corresponding entity values of type [entity](#entity). The meaning of each entity is defined by the enclosing action and the entity name. An additional field named `$instance` occurs after the named entities. The value of the `$instance` field is of type [`entityInstance`](#entity-instance). + +`A7740`: Unless otherwise specified, senders MAY omit some or all entities associated with an action definition. + +`A7742`: Senders MAY add entities with unknown keys if they have special knowledge that the bot supports them. + +Actions support dynamic typing. An implementer of an action expresses a list of types it prefers, and callers of that action can match the desired types with known entities of varying fidelity. For example, assume an action prefers to receive a destination in the form of a *city* entity. The caller may not have a city available, but is able to supply either a *string* or *geocoordinates* based on what it was able to extract from the conversation. The caller can examine the action's preferred types and send the *string* or *geocoordinates* if the action can handle it. + +`A7744`: Senders MAY send downgraded entities in accordance with the rules outlined in the action definition. + +Entities sent within the semantic action have a specific meaning, defined by their name. For example, an action may be named `findRoute` with entities named `source` and `destination`. Sometimes, additional entities are available that do not fit a specific meaning within the action. The root [`entities`](#entities) array is a suitable location to transmit these entities. + +`A7745`: Senders MAY send entities not listed in the action definition in the [`entities`](#entities) array in the activity root. Senders SHOULD NOT send these entities in the semantic action. + +The `$instance` field carries metadata about the source of each entity. The keys of this object are identical to the entity names as peers. The values of each key is the corresponding instance metadata of type [`semanticEntityInstance`](#semantic-entity-instance). + +`A7746`: Senders SHOULD include properties within `$instance` for any entities bearing instance metadata. + +`A7747`: Senders SHOULD NOT include empty fields within `$instance` or an empty `$instance` object. + +`A7748`: Senders MUST NOT include a `$instance` field within the `$instance` object. + +Example of semantic action entities +``` +"entities": { + "sourceAirport": { + "type": "http://icao.org/airport/code" + "code": "KSEA", + "name": "Seattle-Tacoma International Airport", + }, + "destinationAirport": { + "type": "http://schema.org/City", + "name": "New York", + "geo": { + "type": "http://schema.org/GeoCoordinates", + "latitude": 40.7127, + "longitude": -74.0059 + } + }, + "$instance": { + "sourceAirport": { + "text": "SeaTac", + "startIndex": 19, + "endIndex": 25 + }, + "destinationAirport": { + "text": "New York", + "startIndex": 29, + "endIndex": 37 + } + } +} +``` + +### Semantic entity instance + +The `semanticEntityInstance` type references to source information about where the entity was mentioned. This specification includes source data to refer to the `text` field although others may be added in the future. The value of the `$instance` field is a complex object with fields `text`, `startIndex`, and `endIndex`. The `text` field is a string containing a copy of the text within the [`text`](#text) field in the activity root; `startIndex` is a number containing the index of the first character where `text` is found (inclusive); `endIndex` is a number containing the index after the last character where `text` is found (exclusive). + +`A7750`: Senders MUST NOT include the `$instance` field if its `text` field is empty or null or the contents of its `text` field cannot be found within the `text` field in the activity root. + +`A7751`: The `startIndex` field MUST be an integer greater than or equal to zero and less than the length of the `text` field in the activity root. + +`A7752`: The `endIndex` field MUST be an integer greater than zero and less than or equal to the length of the `text` field in the activity root. Its value MUST be greater than the `startIndex` value. + +`A7753`: The contents of the `text` field within `$instance` MUST contain characters ordinally identical to the value of the `text` field in the activity root starting at `startIndex` characters from the beginning and ending immediately before `endIndex` characters from the beginning. + +### Command value +The `value` field of a [command activity](#command-activity) contains metadata related to a command. An optional extensible `data` payload may be included if defined by the command activity `name`. + +#### Command Id + +`A10100`: A command value MAY include the `commandId` field with the unique ID that the sender assigns to this command. + +#### Data + +The `data` field contains optional parameters specific to this command activity, as defined by the `name`. The value of the `data` field is a complex type. + +`A10200`: The `data` field MAY be missing or empty, if defined by the command activity `name`. + +`A10201`: Extensions to the command activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` fields to understand the schema of the `data` field. + +### Command result Value +The `value` field of a [command result activity](#command-result-activity) contains metadata related to a command. An optional extensible `data` payload may be included if defined by the command result activity `name`. The presence of an `error` field indicates that the original command failed to complete. + +#### Command Id + +`A11100`: If the original command includes a valid `commandId`, then the command result value MUST include the same value in `commandId` to allow the result to be correlated to the original command instance. + +#### Data + +The `data` field contains optional additional information specific to this command result activity, as defined by the `name`. The value of the `data` field is a complex type. + +`A11200`: The `data` field MAY be missing or empty, if defined by the command result activity name. + +`A11201`: Extensions to the command result activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` fields to understand the schema of the `data` field. + +#### Error + +The `error` field contains the reason the original [command activity](#command-activity) failed to complete. + +`A11300`: Senders MUST include the `error` field when the command was not successful. The value of the `error` field is of type [Error Object](../protocol-protocol/protocol-protocol.md#error-object) + +`A11301`: Senders MUST NOT include the `error` field when the command was successful. + +## References + +1. [RFC 2119](https://tools.ietf.org/html/rfc2119) -- *Key words for use in RFCs to Indicate Requirement Levels* +2. [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) -- *Date and time format* +3. [RFC 3987](https://tools.ietf.org/html/rfc3987) -- *Internationalized Resource Identifiers (IRIs)* +4. [Markdown](https://daringfireball.net/projects/markdown/) +5. [ISO 639](https://www.iso.org/iso-639-language-codes.html) -- *Language codes* +6. [SSML](https://www.w3.org/TR/speech-synthesis/) -- *Speech Synthesis Markup Language* +7. [XML](https://www.w3.org/TR/xml/) -- *Extensible Markup Language* +8. [MIME media types](https://www.iana.org/assignments/media-types/media-types.xhtml) +9. [RFC 2397](https://tools.ietf.org/html/rfc2397) -- *The "data" URL scheme* +10. [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) -- *Country codes* +11. [Activity Protocol Cards](protocol-cards.md) +12. [Adaptive Cards](https://adaptivecards.io) +13. [Bot Manifest](../manifest/bot-manifest.md) +14. [RFC 4627](http://www.ietf.org/rfc/rfc4627.txt) -- *The application/json Media Type for JavaScript Object Notation (JSON)* +15. [Transcript](../transcript/transcript.md) +16. [RFC 6557](https://tools.ietf.org/html/rfc6557) +17. [JSON-LD](https://www.w3.org/TR/json-ld/) -- *A JSON-based serialization for Linked Data* +18. [IETF BCP-47](https://tools.ietf.org/html/bcp47) -- *Language tag* + +# Appendix I - Changes + +## 2024-11-06 - trboehre@microsoft.com +* Added missing ChannelData field in Card Action + +## 2024-11-01 - trboehre@microsoft.com +* Dropped 'Bot Framework' branding +* Dropped Swagger definitions references +* Change path to Bot Manifest doc + +## 2020-07-07 - contact.me@nlchar.rocks +* Fix the broken link to the Bot Framework Manifest Spec in the References section + +## 2020-06-19 - dandris@microsoft.com +* Fix `A7420` and `A7430` text to reflect original intent of `playAudio` and `playVideo` actions +* Add [conversation reference](#conversation-reference) type definition + +## 2020-06-16 - dandris@microsoft.com +* Integrate typo and casing fixes +* Fix internal anchor links and relative file links + +## 2020-03-02 - dandris@microsoft.com +* Added [`imageAltText`](#image-alt-text) + +## 2019-07-15 - dandris@microsoft.com +* Added `A3035` to clarify behavior in the absence of a `speak` field. + +## 2019-05-09 - toddne@microsoft.com +* Removed A3032. Speak takes either plain text or valid SSML + +## 2019-01-31 - toddne@microsoft.com +* Revised specification of [locale] to reference BCP-47. + +## 2019-05-02 - dandris@microsoft.com +* Added [`callerId`](#caller-Id) and [Appendix V](#appendix-v---caller-id-values) + +## 2019-01-31 - toddne@microsoft.com +* Revised specification of [locale] to reference BCP-47. + +## 2019-01-31 - dandris@microsoft.com +* Add `tenantId` to [conversation account](#conversation-account) type + +## 2019-01-11 - dandris@microsoft.com +* Add `A7357`, `A7358`, and `A7359` to profile `image` and `title` fields of the `messageBack` action + +## 2019-01-04 - dandris@microsoft.com +* Resolved collision in [Trace activity](#trace-activity) numbering: `A610x` -> `A615x` + +## 2018-12-06 - dandris@microsoft.com +* Resolved restriction number collision by renaming duplicate `A7352` and `A7353` to `A7355` and `A7356`, respectively +* Fixed broken links + +## 2018-10-23 - dandris@microsoft.com +* Added action [`state`](#semantic-action-state) + +## 2018-09-27 - dandris@microsoft.com +* Revised reference descriptions and links +* Clarified syntactic rules, revised `A2003`, added `A2007` +* Removed `A7743` as redundant +* Removed ordering requirement for semantic action entities (`A7741`) +* Added `$instance` to semantic action entities +* Added action type downgrading +* Move `A7600` and `A7601` and re-introduce as `A2104` and `A2105` + +## 2018-09-18 - toddne@microsoft.com +* Added localTimezone property + +## 2018-08-27 - daveta@microsoft.com +* Added [Channel account role](#channel-account-role) property +* Added [Conversation account role](#conversation-account-role) property + +## 2018-07-17 - dandris@microsoft.com +* Added [`semanticAction`](#semantic-action) +* Added [handoff activity](#handoff-activity) + +## 2018-07-05 - dandris@microsoft.com +* Changed `RXXXX` (*R*equiment) to `AXXXX` (*A*ctivity) to match other Bot Framework specifications. + +## 2018-04-11 - dandris@microsoft.com +* Added [Listen for](#listen-for) field and [Appendix IV](#appendix-iv---priming-format) + +## 2018-04-08 - tomlm@microsoft.com +* Added [Suggestion activity](#suggestion-activity) and [`textHighlight`](#text-highlight) complex type. +* Amended `A2071` to allow suggestion activities to specify receipients + +## 2018-03-07 - dandris@microsoft.com +* Added [`conversationAccount.conversationType`](#conversation-account-conversation-type) and `A2084`. + +## 2018-02-07 - dandris@microsoft.com +* Initial draft + +# Appendix II - Non-IRI entity types + +Activity [entities](#entity) communicate extra metadata about the activity, such as a user's location or the version of the messaging app they're using. Activity types are intended to be IRIs, but a small list of non-IRI names are in common use. This appendix is an exhaustive list of the supported non-IRI entity types. + +| Type | IRI equivalent | Description | +| -------------- | --------------------------------------- | ------------------------- | +| GeoCoordinates | http://schema.org/GeoCoordinates/ | Schema.org GeoCoordinates | +| Mention | https://botframework.com/schema/mention | @-mention | +| Place | http://schema.org/Place | Schema.org Place | +| Thing | http://schema.org/Thing | Schema.org Thing | +| string | N/A | String | +| number | N/A | Number | +| clientInfo | N/A | Skype client info | + +### string and number + +The `string` and `number` primitive entity types contains simple values within the `value` field. The `value` field is a string or number, respectively. + +Example: +``` +{ + "type": "string", + "value": "This is the string value" +} +``` + +### clientInfo + +The `clientInfo` entity type contains extended information about the client software used to send a user's message. It contains three properties, all of which are optional. + +`A9201`: Bots SHOULD NOT send the `clientInfo` entity. + +`A9202`: Senders SHOULD include the `clientInfo` entity only when one or more fields are populated. + +#### Locale (Deprecated) + +The `locale` field contains the user's locale. This field duplicates the [`locale`](#locale) field in the Activity root. The value of the `locale` field is an [ISO 639](https://www.iso.org/iso-639-language-codes.html) [[5](#references)] code within a string. + +The `locale` field within `clientInfo` is deprecated. + +`A9211`: Receivers SHOULD NOT use the `locale` field within the `clientInfo` object. + +`A9212`: Senders MAY populate the `locale` field within `clientInfo` for compatibility reasons. If compatibility with older receivers is not required, senders SHOULD NOT send the `locale` property. + +#### Country + +The `country` field contains the user's detected location. This value may differ from any [`locale`](#locale) data as the `country` is detected whereas `locale` is typically a user or application setting. The value of the `country` field is an [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) [[10](#references)] 2- or 3-letter country code. + +`A9220`: Channels SHOULD NOT allow clients to specify arbitrary values for the `country` field. Channels SHOULD use a mechanism like GPS, location API, or IP address detection to establish the country generating a request. + +#### Platform + +The `platform` field describes the messaging client platform used to generate the activity. The value of the `platform` field is a string and the list of possible values and their meaning is defined by the channel sending them. + +Note that on channels with a persistent chat feed, `platform` is typically useful only in deciding which content to include, not the format of that content. For instance, if a user on a mobile device asks for product support help, a bot could generate help specific to their mobile device. However, the user may then re-open the chat feed on their PC so they can read it on that screen while making changes to their mobile device. In this situation, the `platform` field is intended to inform the content, but the content should be viewable on other devices. + +`A9230`: Bots SHOULD NOT use the `platform` field to control how response data is formatted unless they have specific knowledge that the content they are sending may only ever be seen on the device in question. + +# Appendix III - Protocols using the Invoke activity + +The [invoke activity](#invoke-activity) is designed for use only within protocols supported by Activity Protocol channels (i.e., it is not a generic extensibility mechanism). This appendix contains a list of all protocols using this activity. + +## Teams compose extension + +The Microsoft Teams channel uses Invoke for [compose extensions](https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/messaging-extensions). This use of Invoke is specific to Microsoft Teams. + +# Appendix IV - Priming format + +The [`listenFor`](#listen-for) field within the Activity Protocol Schema contains a list of terms and references to hint to a speech or language processor which terms to prefer when processing input. This format is referred to within this appendix as the priming format. + +The format allows: +1. Phrases, including single-term phrases (e.g. "house", "open the doors") +2. Sources of phrases (e.g., a LUIS model) + +All contents appear within a flat array of strings. + +Phrases are specified directly without markup. Sources are enclosed by `{` and `}` and their contents may be either a full URI or a shortened URI adhering to one of the conventions below. + +`A9300`: Senders SHOULD NOT include punctuation that does not affect language processing, such as enclosing parentheses or trailing periods. Senders MUST NOT enclose plain phrases with leading `{` and trailing `}`. + +`A9301`: Senders MAY include phrase sources by URI or short form. Phrase source URIs and short forms MUST be enclosed by leading `{` and trailing `}`. Senders SHOULD NOT include whitespace before or after `{` and `}` characters. + +`A9302`: Senders MUST URI-encode any `{`, `}`, and `"` characters that occur within a phrase source. + +`A9303`: Processors SHOULD ignore phrase sources they do not understand. + +Phrase source URIs may be symbolic or may be URLs. For example, `https://example.com/language/models/1234#intent0001` could identify `intent0001` within the `example.com` language model with ID `1234`. The format of these URIs and relationship to the backing phrase source data is bounded by the `example.com` hostname and is established entirely by the service supporting that name. Processors must have specific knowledge of each phrase source to determine the method of extraction. In some cases, an HTTP GET directly to the URL is adequate, in others, an entire language model may be retrieved and parsed to select individual phrases. A processor knows how to retrieve the data by inspecting the hostname. + +`A9304`: Processors MAY upgrade phrase source URIs to URLs when they have knowledge that the source supports phrase retrieval. + +`A9305`: Processors SHOULD use plain ordinal hostname comparisons when determining whether they recognize a source URI. + +`A9306`: Processors MAY ignore any resolved URLs that are not HTTPS. + +Phrase sources specified in complete URIs (e.g. `https://luis.ai/apps/12345#intent0001`) can be verbose and this spec establishes a format for shortening these URIs, and one known format specifically for [LUIS](https://luis.ai) apps. + +`A9307`: If a processor supports a phrase source, and that source has a compact representation, processors SHOULD support both the compact and the expanded format. + +`A9308`: Phrase sources SHOULD establish a well-defined mapping between compact and expanded forms of phrase source references. + +### LUIS.ai phrase source + +This section provides a definition for the [LUIS](https://luis.ai) phrase source URI and compact form. + +LUIS.ai models can be referenced with the following format: + `https://luis.ai/apps/[/intents/]` + +The short form for these IDs is: + `luis:[#intentId]` + +# Appendix V - Caller ID Values + +The Activity schema includes a ['callerId'](#caller-Id) field that identifies the caller sending an activity. The field is not populated on the wire but is used for internal routing within a bot, and for tracking this data when an Activity is committed to storage (in e.g. the [Transcript](../transcript/transcript.md) [[#15](#references)] format). + +This specification defines three IRI schemes for caller IDs. + +It is important that implementers follow the verification rules in this appendix to ensure a caller ID is set only when the caller is successfully authenticated. + +## Bot Framework + +Bot Framework services call registered bots to transmit messages sent over Bot Framework channels. The caller ID for any Bot Framework channel service is `urn:botframework:azure`. + +The authenticity of a call from Bot Framework can be established by inspecting its JSON Web Token and ensuring it is both correctly formed and is signed with a key listed in the Bot Framework Open ID Metadata Document. + +## Bot Framework (US Government Cloud) + +Bot Framework services running in the US Government Cloud are in a distinct security domain from traditional Bot Framework serivces. The caller ID for any Bot Framework channel service is `urn:botframework:azureusgov`. + +The authenticity of a call from Bot Framework US Government Cloud can be established by inspecting its JSON Web Token and ensuring it is both correctly formed and is signed with a key listed in the Bot Framework US Government Cloud Open ID Metadata Document. + +## Bot calling bot + +The Activity schema can be used when a bot initiates a request to another bot. The caller ID for these calls is the prefix `urn:botframework:aadappid:` followed by the Azure Active Directory App ID used by the bot initiating the call. + +The authenticity of a call from a bot can be established by inspecting its JSON Web Token and ensuring it is both correctly formed and is signed with a key listed in the Azure Active Directory Open ID Metadata Document. + +# Appendix VI - Protocols using the Command activity +[Command activities](#command-activity) communicate a request to perform a specific action. Command activities outside the `application` are considered reserved for Activity Protocol. This appendix contains a list of command activities used in Activity Protocol and recommended patterns for defining and using command activities. + +## Telephony Channel + +The Microsoft Telephony channel defines channel command activities in the namespace `channel/vnd.microsoft.telephony.`. + +## Patterns for rejecting commands + +### General pattern for rejecting commands +The general pattern for rejecting commands is to send an asynchronous commands result with an error. This is used in most cases when the receiver needs to process the command before rejecting it. + +Here is an example of a command result indicating that the command was not supported by the receiver: +``` + { + 'type': 'commandResult' + 'name': 'channel/vnd.microsoft.telephony.' + 'value': { + 'error' : { + 'code': 'NotSupported', + 'message' : 'Command channel/vnd.microsoft.telephony. is not supported' + } + } + } +``` + +### Channel rejecting commands +Some channels may may not support the command protocol or not allow for application customization of commands. In this case, the channel can reject commands with a transport-level response codes to allow a sender to detect the command activity was rejected. Example: When the transport is HTTP, 200 indicates acceptance and 400 indicates that the Activity name is not supported. + diff --git a/docs/ActivityDefintion/protocol-cards.md b/docs/ActivityDefintion/protocol-cards.md new file mode 100644 index 0000000..f9ebf51 --- /dev/null +++ b/docs/ActivityDefintion/protocol-cards.md @@ -0,0 +1,487 @@ +# Activity Protocol -- Cards + +## Abstract + +The Activity Protocol Cards schema is an application-level representation of interactive cards for use within chat and other applications. The schema includes provisions for controlling the content, layout, and interactive elements of a card. + +This schema is used within the Activity Protocol schema and is implemented by Microsoft chat systems and by interoperable bots and clients from many sources. + +## Table of Contents + +1. [Introduction](#Introduction) +2. [Card structure](#Card-structure) +3. [Basic cards](#Basic-cards) +4. [Media cards](#Media-cards) +5. [Animation card](#Animation-card) +6. [Audio card](#Audio-card) +7. [Video card](#Video-card) +8. [Receipt card](#Receipt-card) +9. [Signin card](#Signin-card) +10. [Complex types](#Complex-types) +11. [References](#References) + +## Introduction + +### Overview + +The Activity Protocol Card schema provides a mechanism for transmitting content, layout information, and interactive elements within an interactive card. This specification does not describe the final visual form of a card, but the structure of the card suggests a layout without prescribing particular visual styles. + +These cards are typically presented as attachments within the [Activity Protocol Schema](../ManifestDefinition/BotFramework-Activity.md) schema. + +Cards are each oriented around a particular kind of content (e.g. thumbnail images, transaction receipts) but use a shared set of features and conventions. These cards are designed to be rendered within interfaces that do not have full fidelity or interactive elements; in these cases, this specification provides guidance on how to predictably and gracefully reduce the complexity of each card to preserve the intent of the original item. + +### Relationship with Adaptive Cards + +The Card schema was developed in conjunction with the v3 Activity Protocol. After Activity Protocol v3 was released, a new effort to supplant Cards with cross-application, generic cards resulted in the [Adaptive Card](https://adaptivecards.io) [[2](#References)] schema. Adaptive Cards provide a content-neutral format for data layout, in contrast to the content-specific Activity Protocol Cards. + +Adaptive Cards are the recommended choice for new card content where supported. This is true even when a specific Activity Protocol Card exists. + +Activity Protocol Cards are available where Adaptive Cards are not supported, and will be supported for existing users of the format until further announcements are made. + +### Requirements + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119) [[3](#References)]. + +An implementation is not compliant if it fails to satisfy one or more of the MUST or REQUIRED level requirements for the protocols it implements. An implementation that satisfies all the MUST or REQUIRED level and all the SHOULD level requirements for its protocols is said to be "unconditionally compliant"; one that satisfies all the MUST level requirements but not all the SHOULD level requirements for its protocols is said to be "conditionally compliant." + +### Numbered requirements + +Lines beginning with markers of the form `CXXXX` are specific requirements designed to be referenced by number in discussion outside of this document. They do not carry any more or less weight than normative statements made outside of `CXXXX` lines. + +`C1000`: Editors of this specification MAY add new `CXXXX` requirements. They SHOULD find numeric `CXXXX` values that preserve the document's flow. + +`C1001`: Editors MUST NOT renumber existing `CXXXX` requirements. + +`C1002`: Editors MAY delete or revise `CXXXX` requirements. If revised, editors SHOULD retain the existing `CXXXX` value if the topic of the requirement remains largely intact. + +`C1003`: Editors SHOULD NOT reuse retired `CXXXX` values. A list of deleted values MAY be maintained at the end of this document. + +### Terminology + +activity +> An action expressed by a bot, a channel, or a client that conforms to the Activity schema. + +card +> A Activity Protocol Card that adheres to this specification + +channel +> Software that sends and receives activities, and transforms them to and from chat or application behaviors. Channels are the authoritative store for activity data. + +bot +> Software that sends and receives activities, and generates automated, semi-automated, or entirely manual responses. Bots have endpoints that are registered with channels. + +client +> Software that sends and receives activities, typically on behalf of human users. Clients do not have endpoints. + +sender +> Software transmitting an activity. + +receiver +> Software accepting an activity. + +field +> A named value within an activity or nested object. + +## Card structure + +This section defines the requirements for the basic structure of each card. + +Cards include a flat list of name/value pairs, called fields. Fields may be primitive types. JSON is used as the common interchange format and although not all cards must be serialized to JSON at all times, they must be serializable to it. This allows implementations to rely on a simple set of conventions for handling known and unknown activity fields. + +`C2001`: Cards MUST be serializable to the JSON format, including adherence to e.g. field uniqueness constraints. + +`C2002`: Receivers MAY allow improperly-cased field names, although this is not required. Receivers MAY reject cards that do not include fields with the proper casing. + +`C2003`: Receivers MAY reject cards that contain field values whose types do not match the value types described in this specification. + +`C2004`: Unless otherwise noted, senders SHOULD NOT include empty string values for string fields. + +`C2005`: Unless otherwise noted, senders MAY include additional fields within the card or any nested complex objects. Receivers MUST accept fields they do not understand. + +### Content-type + +Cards are identified by a MIME-compatible [[4](#References)] content-type. These content-types are not specified within the card itself; instead, these values accompany the card payload. In the [Activity Protocol Schema](../ActivityDefintion/protocol-activity.md) [[1](#References)] schema, cards are included within [attachments](../ActivityDefintion/protocol-activity.md#Attachment) alongside the corresponding [`contentType`](../ActivityDefintion/protocol-activity.md#Content-type) field. + +### Transformations and display + +Displaying a card within a client user interface frequently requires the implementer to make specific decisions about how to order and constrain content to match the visual style of the enclosing design. Further, this specification anticipates that these limitations are largely unavoidable and aims to assist implementers in choosing a path that makes graceful degradation of functionality possible. + +This section provides guidance on which transformations best achieve the goal of preserving the intent of the card. + +`C3000`: A Channel's card transformations and display MUST account for all known Activity Protocol Card types and include best-effort transformations into formats suitable for display to users. + +`C3002`: Channels SHOULD preserve the ordering of text-bearing content fields as presented within this specification. Channels SHOULD NOT change the displayed format of the card based on how the fields appear in a payload transmitted by a sender. + +`C3003`: Channels MAY alter the position of non-text multimedia content within the card in relation to text-bearing fields in order to achieve visual layout goals. Channels SHOULD preserve the order of non-text multimedia content as presented within the specification. + +The `C3003` requirement is intended to allow repositioning of e.g. an image below or above a card title to match visual style within the channel. + +`C3004`: Channels SHOULD preserve all content within the card. + +`C3005`: Channels MAY establish rules requiring specific fields within card types. + +Channels are recommended to make these rules simple. + +`C3006`: Unless otherwise noted in this specification or in accordance with `C3004`, all card fields are optional. + +### Buttons + +All cards include content (in the form of one or more fields) and an array of buttons, each of which is represented by an action. Some cards include an additional card action, the "tap action," describing the behavior when the user taps the card but not any of the buttons. + +All Activity Protocol Card types except Adaptive Cards include a `buttons` field, which contains zero or more buttons to be presented to a user. The type of the `buttons` field is an array of type [`cardAction`](../ActivityDefintion/protocol-activity.md#card-action), defined in the [Activity Protocol Schema](../ActivityDefintion/protocol-activity.md) schema [[1](#References)]. + +`C4000`: Channels MAY define a minimum and maximum number of buttons to allow on each card type. + +Channels are recommended to use simple values for the minimum and maximum number of buttons and avoid complex formulas, such as changing the total number of buttons based on whether certain kinds of content are used. + +`C4001`: Channels MUST NOT change the order of buttons on a card. + +`C4002`: If a bot sends a button with action type not supported by the channel, the channel SHOULD preserve the button but provide a degraded experience. + +The best degraded experience is an interactive dialog that, upon being clicked, tells the user that the bot sent an action that is not supported. If this is not possible, showing a disabled button is preferred. If this is not possible, the button should be dropped, taking care that the order of other buttons not be changed per `C4001`. + +`C4004`: If a bot sends fewer than the minimum or more than the maximum number of buttons allowed on a card, the channel MAY drop the card. Alternatively, the channel MAY down-render the card using rules described for that card type. + +## Basic cards + +Activity Protocol defines two cards for presenting a mix of image, text, and interactive elements: +* [Hero cards](#Hero-cards), which present included images in a large banner +* [Thumbnail cards](#Thumbnail-cards), which present included images as thumbnails + +Both basic cards support a shared set of properties and generally have card-specific layout. + +#### Basic card title + +The `title` field contains the title of the card. The value of the `title` field is of type string. + +#### Basic card subtitle + +The `subtitle` field contains the subtitle of the card. The value of the `subtitle` field is of type string. + +#### Basic card text + +The `text` field contains the text of the card. The value of the `text` field is of type string. + +#### Basic card images + +The `images` field contains one or more images to be shown within the card. The value of the `images` field is an array of type [`cardImage`](#Card-image). + +`C5400`: If a bot sends more than the maximum number of images allowed on a card, the channel SHOULD drop excess images. + +`C5401`: If a bot sends fewer than the minimum or more than the maximum number of images allowed on a card, the channel MAY drop the card. + +#### Basic card buttons + +The `buttons` field is described in detail in the above section titled [Buttons](#Buttons). + +#### Basic card tap + +The `tap` field contains an action that may be activated when a user clicks on a non-button or otherwise non-interactive part of a card. The value of the `tap` field is of type [`cardAction`](#Card-action). + +`C5500`: Channels that do not support interactive image actions SHOULD drop the `tap` field while preserving the containing card. + +## Media cards + +Activity Protocol defines three kinds of cards designed expressly to transmit rich media content: +* [Animation cards](#Animation-card), for animation or video typically without sound. +* [Audio cards](#Audio-card), for audio without video +* [Video cards](#Video-card), for video that may or may not contain audio + +All media cards support a shared set of properties and have card-specific behaviors. + +`C6000`: Channels that can display media card content SHOULD document which formats are supported and corresponding limitations (minimum/maximum bitrate, resolution, etc.). + +`C6001`: Channels SHOULD use HTTP content-type when retrieving the media to establish its actual type. + +`C6002`: A channel that receives media card content of an unsupported type MAY send a hyperlink to the media to the user. + +#### Media card title + +The `title` field contains the title of the card. The value of the `title` field is of type string. + +#### Media card subtitle + +The `subtitle` field contains the subtitle of the card. The value of the `subtitle` field is of type string. + +#### Media card image + +The `image` field contains a placeholder image to be used in place of the media. The value of the `image` field is a complex object of type [`thumbnailUrl`](#Thumbnail-URL). + +#### Media card media + +The `media` field contains one or more alternative formats of the same media to be presented. The value of the `media` field is an array of complex objects of type ['mediaUrl'](#Media-URL). + +`C6401`: If a receiver receives multiple objects within the `media` array, it MAY prefer media whose `profile` field it understands. + +`C6402`: If a receiver receives multiple objects within the `media` array and it does not understand the `profile` field of any, it SHOULD display the first object in the array. + +#### Media card buttons + +The `buttons` field is described in detail in the above section titled [Buttons](#Buttons). + +`C6500`: Senders SHOULD NOT include media transport control buttons (e.g., play/pause). These are intrinsic to the media playback window. + +#### Media card shareable + +The `shareable` field describes whether a client user experience should allow the user to share the content. The value of the `shareable` field is a boolean. If omitted, the default value is `true`. + +`C6600`: Channels that do not have configurable settings for sharing content SHOULD ignore the value of the `shareable` field. + +#### Media card autoloop + +The `autoloop` field describes whether a client should automatically restart the media when it reaches the end of its content. The value of the `autoloop` field is a boolean. If omitted, the default value is `true`. + +`C6700`: Channels that do not have configurable looping for content SHOULD ignore the value of the `autoloop` field. + +#### Media card autostart + +The `autostart` field describes whether a client should automatically start playing content when received. The value of the `autostart` field is a boolean. If omitted, the default value is `true`. + +`C6800`: Channels SHOULD honor the value of the `autostart` if able and if doing so does not degrade a user's experience. + +#### Media card aspect + +The `aspect` field describes the visual aspect ratio of the media content. The value of the `aspect` field is a string with allowed values of `16:9` and `4:3`. `16:9` corresponds to media with width-to-height ratio of 16 to 9; `4:3` corresponds to media with width-to-height ratio of 4 to 3. Any other values have undefined meaning. + +This field is advisory in nature only. The media's actual aspect ratio should be determined by inspecting the media itself. + +`C6900`: Senders SHOULD list an `aspect` value corresponding to the media linked in the [`media`](#Media-card-media) field. + +`C6901`: If media of multiple aspect ratios is included in the [`media`](#Media-card-media) field, senders SHOULD include an aspect ratio for the first object in the array. + +`C6902`: Senders MAY include `aspect` values for media that do not have visual aspect ratios (e.g., audio-only media) if the `aspect` field applies to the [`image`](#Media-card-image) field for the card. + +`C6903`: Senders SHOULD NOT include `aspect` values if the media does not have a visual aspect ration and if no [`image`](#Media-card-image) field is supplied. + +`C6904`: Senders SHOULD NOT include values other than `16:9` or `4:3` unless it has knowledge that the receiver supports it. + +#### Media card duration + +The `duration` field describes the length of the media content without requiring a receiver to open the content. The value of the `duration` field is a string in [ISO 8601 duration format]((https://www.iso.org/iso-8601-date-and-time-format.html) [[6](#References)]). + +`C6920`: Senders SHOULD only send values in the ISO 8601 Duration format. Senders SHOULD NOT send times or time intervals in the `duration` field. + +`C6930`: Receivers SHOULD ignore `duration` fields they do not understand or which are in conflict with length encoded into the media. + +#### Media card value + +The `value` field contains a programmatic payload specific to this media card. + +`C6950`: Senders SHOULD NOT include `value` fields of primitive types (e.g. string, int). `value` fields SHOULD be complex types or omitted. + +### Animation card + +Animation cards contain animated image content. Typically this content does not contain sound, and is typically presented with minimal transport controls (e.g, pause/play) or no transport controls at all. Some channels treat animation and video content the same way. + +Animation cards follow all shared rules defined for [Media cards](#Media-cards). + +Animation cards are identified by a `contentType` value of `application/vnd.microsoft.card.animation`. + +### Audio card + +Audio cards contain audio content. + +Audio cards follow all shared rules defined for [Media cards](#Media-cards). + +Audio cards are identified by a `contentType` value of `application/vnd.microsoft.card.audio`. + +`C7100`: Senders SHOULD NOT send video content within audio cards. + +`C7101`: If it receives video content within an audio card, a client MAY elect to present only the audio portion of the media. + +### Video card + +Video cards contain video content. Typically this content is presented to the user with advanced transport controls (e.g. rewind/restart/pause/play). Some channels treat animation and video content the same way. + +Video cards follow all shared rules defined for [Media cards](#Media-cards). + +Video cards are identified by a `contentType` value of `application/vnd.microsoft.card.video`. + +## Receipt card + +Receipt cards contain two tables of data (a list of receipt items, and a list of facts). They are intended to be an informative display and are not necessarily actionable on their own. For integration with payment systems suitable for conducting transactions, see the [payment action](#Payment). + +Receipt cards are identified by a `contentType` value of `application/vnd.microsoft.card.receipt`. + +`C7300`: Channels SHOULD render the `items` and `facts` fields as visual tables or approximations of tables (using e.g. fixed-width formatting). + +`C7301`: Channels SHOULD render a delimiter between the `items` and `facts` field if both are present and contain any elements. + +### Receipt card title + +The `title` field contains the title of the card. The value of the `title` field is of type string. + +### Receipt card items + +The `items` field contains receipt items to be displayed in tabular form. The value of the `items` field is an array of type [`receiptItem`](#Receipt-item). + +`C7310`: Channels MUST NOT alter the order of items within the `items` array. + +### Receipt card facts + +The `facts` field contains a flat list of key/value pairs to be displayed in tabular form. The value of the `facts` field is an array of type [`fact`](#Fact). + +`C7320`: Channels MUST NOT alter the order of items within the `facts` array. + +`C7321`: Channels SHOULD NOT reject the `facts` field or its contents if more than two items have the same [`key`](#Fact-key). + +Although `facts` contains key-value pairs, receivers should not take the key-value pairing literally, and should allow duplicates per `C7531`. + +### Receipt card tap + +The `tap` field contains an action that may be activated when a user clicks on a non-button or otherwise non-interactive part of a card. The value of the `tap` field is of type [`cardAction`](#Card-action). + +`C7330`: Channels that do not support interactive image actions SHOULD drop the `tap` field while preserving the containing card. + +### Receipt card total + +The `total` field contains the total field to be displayed on the receipt. The value of the `total` field is a string. + +### Receipt card tax + +The `tax` field contains the tax field to be displayed on the receipt. The value of the `tax` field is a string. + +### Receipt card VAT + +The `vat` field contains the value-added tax (VAT) field to be displayed on the receipt. The value of the `vat` field is a string. + +### Receipt card buttons + +The `buttons` field is described in detail in the above section titled [Buttons](#Buttons). + +## Signin card + +Signin cards are used to send a sign-in request to a user. Channels that support sign-in cards typically adorn the card with additional visual style to designate it as a sign-in card. + +Signin cards are identified by a `contentType` value of `application/vnd.microsoft.card.signin`. + +### Signin card text + +The `text` field contains the text of the card. The value of the `text` field is of type string. + +### Signin card buttons + +The `buttons` field is described in detail in the above section titled [Buttons](#Buttons). + +## Complex types + +This section defines complex types used within the activity schema, described above. + +### Thumbnail URL + +Some clients have the ability to display custom thumbnails for non-interactive attachments or as placeholders for interactive attachments. The `thumbnailUrl` field identifies the source for this thumbnail. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[5](#References)] are typically also allowed. + +`C8000`: Receivers SHOULD accept HTTPS URLs. + +`C8001`: Receivers MAY accept HTTP URLs. + +`C8002`: Channels SHOULD accept data URIs. + +`C8003`: Channels SHOULD NOT send `thumbnailUrl` fields to bots. + +### Card image + +Card images are used to display image content within [Hero cards](#Hero-cards) and [Thumbnail cards](#Thumbnail-cards). + +#### Card image URL + +The `url` field references image content to be displayed within a card. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[5](#References)] are typically supported by channels. The value of the `url` field is of type string. + +`C8100`: Channels SHOULD accept HTTPS URLs. + +`C8101`: Channels MAY accept HTTP URLs. + +`C8102`: Channels SHOULD accept data URIs. + +#### Card image Alt tag + +The `alt` field contains equivalent content for clients that cannot process images or have not yet loaded the image. The value of the `alt` field is a string. + +#### Card image tap + +The `tap` field contains an action to be activated if the user taps on an image or associated framing. The value of the `tap` field is of type [`cardAction`](#Card-action). + +`C8120`: Channels that do not support interactive image actions SHOULD drop the `tap` field while preserving the containing card image. + +### Media URL + +A media URL object contains information about a media attachment. + +#### Media URL URL + +The `url` field contains a URL to the media. Because media URL objects do not contain content type information, data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [5](#References), are not supported. + +`C8200`: Receivers SHOULD accept HTTPS URLs. + +`C8201`: Receivers MAY accept HTTP URLs. + +`C8202`: Senders SHOULD NOT send data URIs. + +#### Media URL profile + +The `profile` field contains an optional hint to the client to allow it to differentiate between media URLs. The value of the `profile` field is of type string and is defined by the channel. + +### Receipt item + +A `receiptItem` is a single row to be shown within the [`items`](#Receipt-card-items) field of a [receipt card](#Receipt-card). + +#### Receipt item title + +The `title` field contains the title for the receipt item. The value of the `title` field is a string. + +#### Receipt item subtitle + +The `subtitle` field contains the subtitle for the receipt item. The value of the `subtitle` field is a string. + +#### Receipt item text + +The `text` field contains the text for the receipt item. The value of the `text` field is a string. + +#### Receipt item image + +The `image` field contains an image to be shown within the receipt item row. The value of the `image` field is an object of type [`cardImage`](#Card-image). + +#### Receipt item price + +The `price` field contains the displayed unit price with accompanying currency symbols. The value of the `price` field is a string. + +#### Receipt item quantity + +The `quantity` field contains the quantity of units in the receipt row. The value of the `quantity` field is a string. If omitted, the implied value is `1`. + +#### Receipt item tap + +The `tap` field contains an action that may be activated when a user clicks on a non-button or otherwise non-interactive part of a card. The value of the `tap` field is of type [`cardAction`](#Card-action). + +### Fact + +A `fact` is a single row to be shown within the [`facts`](#Receipt-card-facts) field of a [receipt card](#Receipt-card). + +#### Fact key + +The `key` field contains the nominative component of the fact. The value of the `key` field is a string. + +#### Fact value + +The `value` field contains the objective component of the fact. The value of the `value` field is a string. + +## References + +1. [Activity Protocol Schema](../ActivityDefintion/protocol-activity.md) +2. [Adaptive Cards](https://adaptivecards.io) +3. [RFC 2119](https://tools.ietf.org/html/rfc2119) +4. [MIME media types](https://www.iana.org/assignments/media-types/media-types.xhtml) +5. [RFC 2397](https://tools.ietf.org/html/rfc2397) +6. [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) + +# Appendix I - Changes + +## 2024-11-01 - trboehre@microsoft.com +* Dropped 'Bot Framework' branding +* Dropped Swagger definitions references + +## 2018-10-08 - dandris@microsoft.com +* Add [`duration`](#Media-card-duration) field + +## 2018-07-05 - dandris@microsoft.com +* Initial draft diff --git a/docs/HowTo/MSALAuthConfigurationOptions.md b/docs/HowTo/MSALAuthConfigurationOptions.md new file mode 100644 index 0000000..a9ff48d --- /dev/null +++ b/docs/HowTo/MSALAuthConfigurationOptions.md @@ -0,0 +1,256 @@ +# MSAL Authentication provider + +The MSAL authentication provider is a utility aid you on creating access tokens for bot clients and external services from the Microsoft Agents Framework self hosted Agent. + +This utility has supports multiple distinct profiles that can be used to create access tokens. +Each access token can be created using one of the following auth types: + +- Client Secret +- Client Certificate using Thumbprint +- Client Certificate using Subject Name +- User Managed Identity +- System Managed Identity + +### General Configuration + +There are several shared configuration options that control general settings for acquiring tokens from Microsoft Entra Identity. + +These settings are: + +|Setting Name |Type |Default Value |Description | +|--------------|---------|----------------|----------------------------------------------| +|MSALRequestTimeout |TimeSpan |30seconds |This setting controls how long the client will wait for a response from Entra ID after a request has been made. | +|MSALRetryCount |Int |3 |This setting controls how many retry attempts the provider will make for an individual request for a token | +|MSALEnabledLogPII |Bool |False |This setting controls if the attached logger will be provided with PII data from MSAL | + +These settings are shared with all clients creating using the MSAL Authentication Provider. +These settings are intended to be read from an IConfiguration Reader, in from a configuration section a section called "MSALConfiguration". + +> MSAL Configuration is an optional configuration, if not set or provided, the default configuration for these values are used. + +#### An example of this entry in an appsettings.json file is: + +```json +{ + "MSALConfiguration": { + "MSALEnabledLogPII": "true", + "MSALRequestTimeout": "00:00:40", + "MSALRetryCount": "1" + }, +} +``` + +In this case, this settings block would instruct all MSAL clients created with the MSAL provider to enabled PII logging, set the timeout to 40 seconds, and reduce the retry count to 1. + +## Configuring a Connection + +The MSAL Authentication provider is intended to allow for multiple distinct clients to be created and used by the Agents Framework Hosting engine. As such, the MSAL Authentication provider allows for multiple configurations to be provided in the application configuration file, where each configuration can be used to create a named authentication client to support communications with external services or other Agents. + +There are several possible settings for the creating an instance of the MSAL Authentication Provider. + +These settings are: + +|Setting Name |Type |Default Value |Description | +|--------------|------|---------------|-------------| +|AuthType |AuthTypes Enum (Certificate, CertificateSubjectName, ClientSecret, UserManagedIdentity, SystemManagedIdentity) |ClientSecret |This is the type of authentication that will be created.| +|AuthorityEndpoint |String |Null |When present, used as the Authority to request a token from.| +|TenantId |String |Null |When present and AuthorityEndpoint is null, used to create an Authority to request a token from| +|Scopes |String list |Null |Default Lists of scopes to request tokens for. Is only used when no scopes are passed from the bot connection request| + +### ClientSecret +|Setting Name |Type |Default Value |Description | +|--------------|------|---------------|-------------| +|ClientId |String |Null |ClientId (AppId) to use when creating the Access token.| +|ClientSecret |string |Null |When AuthType is ClientSecret, Is Secret associated with the client, this should only be used for testing and development purposes. | + +#### Example for ClientSecret for Azure Bot Service + +```json + "Connections": { + "BotServiceConnection": { + "Assembly": "Microsoft.Agents.Authentication.Msal", + "Type": "Microsoft.Agents.Authentication.Msal.MsalAuth", + "Settings": { + "AuthType": "ClientSecret", + "ClientId": "<>", + "ClientSecret": "<>", + "AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com", + "TenantId": "<>", + "Scopes": [ + "https://api.botframework.com/.default" + ], + } + } + } +``` + +#### Example for ClientSecret for Azure Bot Service using Single Tenant + +```json + "Connections": { + "BotServiceConnection": { + "Assembly": "Microsoft.Agents.Authentication.Msal", + "Type": "Microsoft.Agents.Authentication.Msal.MsalAuth", + "Settings": { + "AuthType": "ClientSecret", + "ClientId": "<>", + "ClientSecret": "<>", + "AuthorityEndpoint": "https://login.microsoftonline.com/<>", + "TenantId": "<>", + "Scopes": [ + "https://api.botframework.com/.default" + ], + } + } + } +``` + +### UserManagedIdentity +|Setting Name |Type |Default Value |Description | +|--------------|------|---------------|-------------| +|ClientId |String |Null |Managed Identity ClientId to use when creating the Access token.| + +> When using the Managed Identity Types, your host or client must be running with an Azure Service and have set up that service with either a System Assigned Managed identity, or a User Assigned Managed identity. + +#### Example for UserManagedIdentity + +```json + "Connections": { + "BotServiceConnection": { + "Assembly": "Microsoft.Agents.Authentication.Msal", + "Type": "Microsoft.Agents.Authentication.Msal.MsalAuth", + "Settings": { + "AuthType": "UserManagedIdentity", + "ClientId": "", + "TenantId": "<>", + "Scopes": [ + "https://api.botframework.com/.default" + ] + } + } + } +``` + +### SystemManagedIdentity + +When using Auth type **SystemManagedIdentity**, Client ID is ignored and the system managed identity for the service is used. + +> When using the Managed Identity Types, your host or client must be running with an Azure Service and have set up that service with either a System Assigned Managed identity, or a User Assigned Managed identity. + +#### Example for SystemManagedIdentity + +```json + "Connections": { + "BotServiceConnection": { + "Assembly": "Microsoft.Agents.Authentication.Msal", + "Type": "Microsoft.Agents.Authentication.Msal.MsalAuth", + "Settings": { + "AuthType": "SystemManagedIdentity", + "Scopes": [ + "https://api.botframework.com/.default" + ] + } + } + } +``` + +### CertificateSubjectName +|AuthType |Type |Default Value |Description | +|--------------|------|---------------|-------------| +|ClientId |String |Null |ClientId (AppId) to use when creating the Access token.| +|CertSubjectName |String |Null |When AuthType is CertificateSubjectName, this is the subject name that is sought| +|CertStoreName |String |"My" |When AuthType is either CertificateSubjectName or Certificate, Indicates which certificate store to look in| +|ValidCertificateOnly |bool |True |Requires the certificate to have a valid chain. | +|SendX5C |bool |False |Enables certificate auto rotation with appropriate configuration. | + +#### Example for CertificateSubjectName for SN+I + +```json + "Connections": { + "BotServiceConnection": { + "Assembly": "Microsoft.Agents.Authentication.Msal", + "Type": "Microsoft.Agents.Authentication.Msal.MsalAuth", + "Settings": { + "AuthType": "CertificateSubjectName", + "ClientId": "", + "CertSubjectName": "<>", + "SendX5C": true, + "AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com", + "TenantId": "<>", + "Scopes": [ + "https://api.botframework.com/.default" + ] + } + } + }, +``` + +### Certificate +|AuthType |Type |Default Value |Description | +|--------------|------|---------------|-------------| +|ClientId |String |Null |ClientId (AppId) to use when creating the Access token.| +|CertThumbprint |String |Null |Thumbprint of the certificate to load, only valid when AuthType is set as Certificate| +|CertStoreName |String |"My" |When AuthType is either CertificateSubjectName or Certificate, Indicates which certificate store to look in| +|ValidCertificateOnly |bool |True |Requires the certificate to have a valid chain. | +|SendX5C |bool |False |Enables certificate auto rotation with appropriate configuration. | + +#### Example for CertificateSubjectName using the certificate thumbprint + +```json + "Connections": { + "BotServiceConnection": { + "Assembly": "Microsoft.Agents.Authentication.Msal", + "Type": "Microsoft.Agents.Authentication.Msal.MsalAuth", + "Settings": { + "AuthType": "CertificateSubjectName", + "ClientId": "", + "CertThumbprint": "<>", + "AuthorityEndpoint": "https://login.microsoftonline.com/botframework.com", + "TenantId": "<>", + "Scopes": [ + "https://api.botframework.com/.default" + ] + } + } + }, +``` + +#### Default Configuration Provider for MSAL + +To easy setup, we provide a service provider extension to add the default configuration settings for MSAL to your host. + +#### An example of this from an Asp.net core host: + +In a Program.cs class. +```csharp + // Add default bot MsalAuth support + builder.Services.AddDefaultMsalAuth(builder.Configuration); + + // Add Connections object to access configured token connections. + builder.Services.AddSingleton(); +``` + +This extension will look for a configuration section named "MSALConfiguration" in your IConfiguration Object and create an MSAL Configuration object from it. + +> If the MSALConfig section is **not** found, it will create the MSAL Configuration Object using default values. + +### Logging Support for Authentication + +The MSAL Authentication system allows for independent logging of authentication flows for telemetry integration should you need to troubleshoot token acquisition. + +To enable logging, you would add a entry for :::no-loc text="Microsoft.Agents.Authentication.Msal"::: to your applications app settings to setup an ILogger to report on token operations for your connections, should you have added the MSALEnabledLogPII Option, this will also include PII for your connection. + +#### An example of the logging block in this case would be: + +```json + "Logging": { + "LogLevel": { + "Default": "Warning", + "Microsoft.Agents": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "Microsoft.Agents.Authentication.Msal": "Trace" + } + } +``` + +In this case, logging is enabled for several modules include Microsoft.Agents.Authentication.Msal, where the trace level is "Trace" for MSAL. diff --git a/docs/HowTo/azurebot-create-msi.md b/docs/HowTo/azurebot-create-msi.md new file mode 100644 index 0000000..3e252fa --- /dev/null +++ b/docs/HowTo/azurebot-create-msi.md @@ -0,0 +1,49 @@ +# Register a Managed Identity bot with Azure + +This article shows how to register a bot with Azure AI Bot Service. + +Your bot identity can be managed in Azure in a few different ways. + +- As a user-assigned managed identity, so that you don't need to manage the bot's credentials yourself. +- As a single-tenant app. +- As a multi-tenant app. + +> These instructions are for User Managed Identity. If the bot is to be used for local debugging then Managed Identity will not work. It is recommended that SingleTenant is used instead. + +> For those on the Microsoft Tenant, using either MultiTenant or SingleTenant with a secret is prohibited. There are limited options for running locally in this case, with Certiciate SN+I being a viable alternative. If this does not work for you, the only alternative is to deploy the Agent code to Azure and run there. + +## Create the resource +Create the Azure Bot resource, which will allow you to register your bot with the Azure AI Bot Service. + +1. Go to the Azure portal. + +1. In the right pane, select **Create a resource**. + +1. In the search box enter `bot`, then press Enter. + +1. Select the **Azure Bot** card. + + ![Azure Bot Resource](media/azure-bot-resource.png) + +1. Select **Create**. + +1. Enter values in the required fields and review and update settings. + + a. Provide information under Project details. Select whether your bot will have global or local data residency. Currently, the local data residency feature is available for resources in the "westeurope" and "centralindia" region. For more information, see [Regionalization in Azure AI Bot Service](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization?view=azure-bot-service-4.0). + + ![Azure Bot Settings](media/azure-bot-project-details.png) + + b. Provide information under Microsoft App ID. Select how your bot identity will be managed in Azure and whether to create a new identity or use an existing one. + + ![Azure Bot Identity](media/azure-bot-ms-app-id.png) + +1. Select **Review + create**. + +1. If the validation passes, select **Create**. + +1. Once the deployment completes, select Go to resource. You should see the bot and related resources listed in the resource group you selected. + +1. If this is a Teams bot + + 1. Select **Settings** on the left sidebar, then **Channels**. + 1. Select **Microsoft Teams** from the list, and choose appropriate options. diff --git a/docs/HowTo/azurebot-create-single-secret.md b/docs/HowTo/azurebot-create-single-secret.md new file mode 100644 index 0000000..9beb7b5 --- /dev/null +++ b/docs/HowTo/azurebot-create-single-secret.md @@ -0,0 +1,62 @@ +# Register a SingleTenant bot with Azure + +This article shows how to register a bot with Azure AI Bot Service. + +Your bot identity can be managed in Azure in a few different ways. + +- As a user-assigned managed identity, so that you don't need to manage the bot's credentials yourself. +- As a single-tenant app. +- As a multi-tenant app. + +> These instructions are for SingleTenant Identity with a Client Secret. + +> For those on the Microsoft Tenant, using either MultiTenant or SingleTenant with a Client Secret is prohibited. There are limited options for running locally in this case, with Certiciate SN+I being a viable alternative. If this does not work for you, the only alternative is to use [Managed Identity](azurebot-create-msi.md) and deploy the Agent code to Azure and run there. + +## Create the resource +Create the Azure Bot resource, which will allow you to register your bot with the Azure AI Bot Service. + +1. Go to the Azure portal. + +1. In the right pane, select **Create a resource**. + +1. In the search box enter `bot`, then press Enter. + +1. Select the **Azure Bot** card. + + ![Azure Bot Resource](media/azure-bot-resource.png) + +1. Select **Create**. + +1. Enter values in the required fields and review and update settings. + + a. Provide information under Project details. Select whether your bot will have global or local data residency. Currently, the local data residency feature is available for resources in the "westeurope" and "centralindia" region. For more information, see [Regionalization in Azure AI Bot Service](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-regionalization?view=azure-bot-service-4.0). + + ![Azure Bot Settings](media/azure-bot-project-details.png) + + b. Provide information under Microsoft App ID. Select how your bot identity will be managed in Azure and whether to create a new identity or use an existing one. + + ![Azure Bot Identity](media/azure-bot-ms-app-id-single.png) + +1. Select **Review + create**. + +1. If the validation passes, select **Create**. + +1. Once the deployment completes, select **Go to resource**. You should see the bot and related resources listed in the resource group you selected. + +1. If this is a Teams bot + 1. Select **Settings** on the left sidebar, then **Channels**. + 1. Select **Microsoft Teams** from the list, and choose appropriate options. + +1. Select **Settings**, then **Configuration** + +1. Select **Manage Password** next to **Microsoft App ID** + ![Azure Bot Configuration](media/azure-bot-configuration-single.png) + +1. On the **Overview** pane, record the **Application (client) ID** and **Directory (tenant) ID** + +1. Select **Certificates & secrets** on the left then **Client secrets** + +1. Create a new secret by click **New client secret** + +1. **Very important**: Copy the new secret and store in a safe place. It is need later when configuring your Agent code. + diff --git a/docs/HowTo/azurebot-user-authentication-fic.md b/docs/HowTo/azurebot-user-authentication-fic.md new file mode 100644 index 0000000..37b147e --- /dev/null +++ b/docs/HowTo/azurebot-user-authentication-fic.md @@ -0,0 +1,166 @@ +# Add FIC Authentication to a bot + +The Azure AI Bot Service facilitates the development of bots that can access online resources that require user authentication. Your bot doesn't need to manage authentication tokens because Azure does it for you using OAuth 2.0 to generate a token based on each user's credentials. Your bot uses the token generated by Azure to access those resources. In this way, the user doesn't have to provide ID and password to the bot to access a secured resource but only to a trusted identity provider. + +> [!IMPORTANT] +> Web Chat and Direct Line considerations: You need to use Direct Line with enhanced authentication enabled to mitigate security risks when connecting to a bot using the Web Chat control. For more information, see [Direct Line enhanced authentication](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-security-enhanced?view=azure-bot-service-4.0). + +To setup OAuth on bot, [register an Azure Bot](azurebot-create.md) if you haven't done so already. + +> [!IMPORTANT] +> Whenever you register a bot in Azure, it gets assigned an Microsoft Entra ID application. However, this application secures channel-to-bot access. You need an additional Microsoft Entra ID application for each external secured resource you want the bot to access on behalf of the user. + +## Microsoft Entra ID identity service + +The Microsoft Entra ID is a cloud identity service that allows you to build applications that securely sign in users using industry standard protocols like OAuth 2.0. + +You can use one of these three identity services: + +1. Microsoft identity platform (v2.0). Also known as the **Azure Active Directory v2** endpoint, which is an evolution of the Azure AD platform (v1.0). +1. Federated Credentials. Also known as **AAD v2 with Federated Credentials**. Note that this currently only supports Single Tenant applications. +1. Certificates. Also known as **AAD v2 with Certificates**. + +> These allow you to build applications that sign in to all Microsoft identity providers and get tokens to call Microsoft APIs, such as Microsoft Graph, or other APIs that developers have built. + +## Create the Microsoft Entra ID identity provider + +This section shows how to create an Microsoft Entra ID identity provider that uses OAuth 2.0 to authenticate the bot for Graph. + +> [!TIP] +> You'll need to create and register the Microsoft Entra ID application in a tenant in which you can consent to delegate permissions requested by an application. + +1. Open the Microsoft Entra ID panel in the Azure portal. If you aren't in the correct tenant, select Switch directory to switch to the correct tenant. (For information on how to create a tenant, see Access the portal and create a tenant.) + +1. Open the **App registrations** panel. + +1. In the **App registrations** panel, select **New registration**. + +1. Fill in the required fields and create the app registration. + 1. Name your application. + + 1. Select the **Supported account types** for your application. Select Single Tenant. + + 1. For the **Redirect URI**, select **Web** and set the URL to one of the supported OAuth redirect URLs. + |Data residency |Cloud |OAuth URL |OAuth Redirect URL| + |-----------------|-------|-----------|------------------| + |None |Public |https://token.botframework.com |https://token.botframework.com/.auth/web/redirect| + |Europe |Public |https://europe.token.botframework.com |https://europe.token.botframework.com/.auth/web/redirect| + |United States |Public |https://unitedstates.token.botframework.com |https://unitedstates.token.botframework.com/.auth/web/redirect| + |India |Public |https://india.token.botframework.com |https://india.token.botframework.com/.auth/web/redirect| + |None Azure |Government |https://token.botframework.azure.us |https://token.botframework.azure.us/.auth/web/redirect| + |None |Azure operated by 21Vianet |https://token.botframework.azure.cn |https://token.botframework.azure.cn/.auth/web/redirect| + + 1. Select **Register**. + 1. Once created, Azure displays the **Overview** page for the app. + 1. Record the **Application (client) ID** value. You use this value later as the client ID when you create the connection string and register the Microsoft Entra ID provider with the bot registration. + 1. Record the **Directory (tenant) ID** value. You use this value to register this provider application with your bot. + +1. In the navigation pane, select **Certificates & secrets** to create a secret for your application. + 1. Under **Federated Credentials**, select **Add Credentials**. + ![Entra FIC Credentials](media/entra-fic-creds.png) + 1. On **Add Credentials** page, Choose the **Federated credential scenario** to **Other Issuer** + ![Entra FIC Other Scenario](media/entra-fic-creds-scenario-others.png) + + 1. Enter values in the required fields and review and update settings + 1. Provide information under **Connect your account**. + ![Entra FIC Connect](media/entra-fic-creds-scenario-others.png) +entra-fic-creds-scenario-others-account.png + 1. **Issuer** : *https://login.microsoftonline.com/{customer-tenant-ID}/v2.0* + 1. **Subject Identifier** : */eid1/c/pub/t/{base64 encoded customer tenant ID}/a/{base64 encoded 1-P app client ID}/{unique-identifier-for-projected-identity}* + + The following table contains Base64url encoded byte-array representation of supported First party application IDs. Use this value which represents our First party app. + + |Encoded Value | Description | + |-----------------|-------------| + |9ExAW52n_ky4ZiS_jhpJIQ | Base64url encoded of Bot Service Token Store | + |ND1y8_Vv60yhSNmdzSUR_A | Base64url encoded of Bot Framework Dev Portal | + + The following table contains Base64url encoded byte-array representation of some supported tenant IDs. Use the value which represents tenant of your app. + + |Encoded Value | Description | + |-----------------|-------------| + |v4j5cvGGr0GRqy180BHbRw |Base64url encoded MSIT tenant ID (aaaabbbb-0000-cccc-1111-dddd2222eeee)| + |PwFflyR_6Een06vEdSvzRg |Base64url encoded PME tenant ID (bbbbcccc-1111-dddd-2222-eeee3333ffff)| + |6q7FzcUVtk2wefyt0lBdwg |Base64url encoded Torus tenant ID (ccccdddd-2222-eeee-3333-ffff4444aaaa)| + |IRngM2RNjE-gVVva_9XjPQ |Base64url encoded AME tenant ID (ddddeeee-3333-ffff-4444-aaaa5555bbbb)| + + The Primary Identity service owners calculate it once and provide it to their consumers. + + 1. **Unique-identifier-for-projected-identity** : A Unique Identifier, of your choosing, that is used in the OAuth Connection Setting on the Azure Bot. + + 1. **Audience** : *api://AzureADTokenExchange (Use Cloud specific values)* + + 1. Provide information under **Credential details**. + ![Entra FIC Credential Details](media/entra-fic-creds-scenario-cred.png) + + 1. Select **Add** to add the credential. + +1. Expose API endpoint + - Click **Expose an API** in the left rail + - **For an Azure Bot Service Bot**: The default `api://{appid}` is expected + - **For a Teams bot**: This format is REQUIRED `api://botid-{appid}` + +1. In the navigation pane, select **API permissions** to open the **API permissions** panel. It's a best practice to explicitly set the API permissions for the app. + 1. Select **Add a permission** to show the **Request API permissions** pane. + + 1. For this sample, select **Microsoft APIs** and **Microsoft Graph**. + + 1. Choose **Delegated permissions** and make sure the permissions you need are selected. This sample requires theses permissions. + + > Note: Any permission marked as **ADMIN CONSENT REQUIRED** will require both a user and a tenant admin to login, so for your bot tend to stay away from these. + + - openid + - profile + - User.Read + - User.ReadBasic.All + + 1. Select Add permissions. (The first time a user accesses this app through the bot, they need to grant consent.) + +You now have a OAuth application configured. + +> Note: You'll assign the **Application (client) ID**, when you create the connection string and register the identity provider with the bot registration. See next section. + +## Register the OAuth identity with the Azure Bot +The next step is to register your identity provider with your bot. + +> Note: Single Tenant Entra Application is only support for AAD v2 with Federated Credentials service provider. Support for multi-tenant apps will be added in future. + +1. Open your bot's Azure Bot resource page in the Azure portal. + +1. Select **Settings**, then **Configuration**. + +1. Select the **OAuth Connection Settings** button near the bottom of the page. + +1. Fill in the form as follows: + + 1. **Name**. Enter a name for your connection. You use it in your bot code. + + 1. **Service Provider**. Select **AAD v2 with Federated Credentials** to display service provider specific fields. + + 1. **Client id**. Enter the application (client) ID you recorded for your Microsoft Entra ID identity provider(**Only Single Tenant Supported**). + + 1. **Unique Identifier**. Enter the unique identifier you recorded for your Microsoft Entra ID identity provider while creating federated credentials. + + 1. **Token Exchange URL**. Leave it blank because it's used for SSO in Microsoft Entra ID only. + + 1. **Tenant ID**. Enter the **directory (tenant) ID** that you recorded earlier for your Microsoft Entra ID app or `common` depending on the supported account types selected when you created the Azure DD app. To decide which value to assign, follow these criteria: + + - When creating the Microsoft Entra ID app, if you selected **Accounts in this organizational directory only (Microsoft only - Single tenant)**, enter the tenant ID you recorded earlier for the Microsoft Entra ID app. + - However, if you selected **Accounts in any organizational directory (Any Microsoft Entra ID directory - Multi tenant and personal Microsoft accounts e.g. Xbox, Outlook.com)** or **Accounts in any organizational directory(Microsoft Entra ID directory - Multi tenant)**, enter `common` instead of a tenant ID. Otherwise, the Microsoft Entra ID app verifies through the tenant whose ID was selected and exclude personal Microsoft accounts. + + > This is the tenant associated with the users who can be authenticated. For more information, see Tenancy in Microsoft Entra ID. + + 1. For **Scopes**, enter the names of the permission you chose from the application registration. For testing purposes, you can just enter: `openid profile User.Read User.ReadBasic.All`. + + > Note: For Microsoft Entra ID, Scopes field takes a case-sensitive, space-separated list of values. + +1. Select Save. + +### Test your connection +1. Select on the connection entry to open the connection you created. +1. Select **Test Connection** at the top of the **Service Provider Connection Setting** pane. +1. The first time, this should open a new browser tab listing the permissions your app is requesting and prompt you to accept. +1. Select **Accept**. +1. This should then redirect you to a **Test Connection to Succeeded** page. + +You can now use this connection name in your bot code to retrieve user tokens. \ No newline at end of file diff --git a/docs/HowTo/media/azure-bot-configuration-single.png b/docs/HowTo/media/azure-bot-configuration-single.png new file mode 100644 index 0000000000000000000000000000000000000000..96570c5b56484f74ad11217295bbbb23a66df501 GIT binary patch literal 107068 zcmdSBcT`k)*Cnjot+dig8xRG7R>@I7K(dN}#3B_rC^_dG&4H*yiG^gU2$D0XNEVP# zlw^=xBnbtQ=Uni4p7))#X4cI5{+Z9U)S|d`>)u~DXP>?Ixv!L!WKNx=K6&KGkyEnw z?y4R+@(1e3k>3;lJPz-yn2Vo-|BgDV%G^1U+kSZ#e)z-uw&Lw0NAg3-cOD#rpHDd4 z({?^`kt3rlq^7cE5vVPkt+t_LReMy6aIwhnOgkt3oK9u5zTtxaA2 zF)}r`v=d`qs;p)H$I?WMS(9J!x}t-msfFb|FDFwqFC}$jFKc5V6J`nVQzu0|gy9Uf zrY;Zu@vybAa~AdxyLxb9VR((a&3#o|)XBt5SoN;-uOr|mv8xs?E)K%n-0tq~T<&~a z_D<&9JVHW3+}C-zd3ibE2u^2DJC_F@oOaIFex2a1sk5<@rGty5z1=^^2_G2QySj*7 zb#=8g5jJ~Z#&2X|!p~{+fX{@JhsWdr=K~Wy9!?WJJ`+KHo}0X8JVsZ4eZ7mN*?+#@ z&iU6cz<_Wgzv1TLx{h2j@>&?>WN8XlfqbPnkLbbg|J!?_+{lIemkSd=dK+F3L+&o;@%s(S=H29$5r4-ipiV_Yc3ReEf%Y7VY&X|JrLg**ji+BlNE$6P_}@{yLK9 zyw0-WZ0@#hR`9~J%(>A-Ag=AVg9*NsI3INC;MI|z6k{h2UOhbZl=<*2fxi-laH>e zjQ%j`X?k<=OEUO}<)^W(Kjj0ECH>rYQ0?`6KZ7Cb4UAuTOTMH2jb9ERt}k+R5> zmlN-WJ$drPZJ|Hs{rl_2%`NXFUljRl@*1zwa$moG52umW`OR^BVs!LAN6N#K!Zntb zmRmC^mN0zo!La<{PcByZ(>WO#86jaIs|WX9elaV|x5@WdzG`Z2jx%WvYdGsrXJTe% zH6215AVF`>aTNKC1Nzz7#Pi$+dO149U14eREmqDT)jZx_eKtc z8`EHk_;EK(*qz8Bt5aZ-pU)txQ)Tg{Jy9fMd#TpY&8>VyKuAbijR~c(I@Nam{KcfH zwm8d{iDo$^r4nMP?LaM&ke5g7&B{soaHQCtpwSw&>(2i5%{7^|dA^QJzv_ypU7yu9 z!6+{cji|jn?{{=w?_XH`p{W@>O7xofNY`KGS(t_jX==I`Ov~3$kVm$-l#Iq{SWYw% zda{hk>OX(J7iMH+guHHh%Trgd&_c=HQ>G%h&|fU? HPzR<4|GQBP291$7m+9x9W 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

`DM#NMXHfMPcRLP(&z(!Oz6;>)cvAbj21nG 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 literal 0 HcmV?d00001 diff --git a/docs/HowTo/media/azure-bot-resource.png b/docs/HowTo/media/azure-bot-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..0a45989a9f497892f20e264b8f8add758312eed0 GIT binary patch literal 13439 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 aht%!UsyOWWGt{4k(3IqXa+NaggZ~HS6fi6R literal 0 HcmV?d00001 diff --git a/docs/HowTo/media/entra-fic-creds-scenario-cred.png b/docs/HowTo/media/entra-fic-creds-scenario-cred.png new file mode 100644 index 0000000000000000000000000000000000000000..615629be20db339c6a092858b4eb8919d0b8e3ca GIT binary patch literal 26863 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 literal 0 HcmV?d00001 diff --git a/docs/HowTo/media/entra-fic-creds-scenario-others-account.png b/docs/HowTo/media/entra-fic-creds-scenario-others-account.png new file mode 100644 index 0000000000000000000000000000000000000000..76ded816f617642b879958559acf0a683ed2ca0a GIT binary patch literal 16819 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 h_bY2ydw(3xTYa8Ci; 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 AM*si- literal 0 HcmV?d00001 diff --git a/docs/HowTo/media/entra-fic-creds.png b/docs/HowTo/media/entra-fic-creds.png new file mode 100644 index 0000000000000000000000000000000000000000..26aa3eec05cbca37d02da1506cd8d725ac05935e GIT binary patch literal 52767 zcmc$`XEa=G8wTo4B6&l|Cxi$hi4dLWT|)HUJ3(|~^gcuc(Gvut*U>vO$|xa-GI}3o zg6PIX8Eup^lDy~qIX})>=f}C%vSMdH`|10BuKT*~EmBimfsEuK2@w$ynUdmbZ6czZ zTtr0wK>xi-_@C>3-5A0@|9EIC$PiTy(QgngZrHt2dqqT46Hj_(NlduD?W$GdmJU-Rt+(m?u2%cJx5rkQ`7Wjg*>o$$Yskn$(5MyL}DSZSV( zD?WSWp8g|gqMsP)P`wfT+9VQkchwPgBLQvnXMaERR!qj>>6)7Tf3nQQ4evuA<;VWhu4Vc^?Bgi zAVNQ{%$Apgizw#~eW^_J`K^M0;N85S(_@Z@L1W|rf&(#CQs-W!K?C&XZ6__qnY|m| zndVRa`Tg8G*+>~uBG&5>c_T}^b{3QUJkk{v?f%_#lz>retNNBSs1)VDH;Q`jyEM^{ zk(`lhMExCaX^fqtuwxDAKzW`WuAQXd`3$2?_%;=2sdKsY#hBDT7D*jjF|=5do{jzZF+nn*s}y?X(nPXmUvRC?VtS=$eHbo|<^>G+0Sb$0#?dd?=MHy&x_e}sjt_o9w&`vj}J zIZ144D{^rX7;u?bWk7voE1>U``m#LC<0wAwW_ z=hBDgF2iOzPZ3o2856fPKjaoHiQ zUx$MZVZoNkmMMZlZVO%-s&*N(RW0PBU0W?;l&8a&n^P@tto52yBc8EYqXj<9*`lFB zUaVlz#LYc8mMj!p-!tmlr?&#~{o9 z3x1b~=+oFm`-N6f7W5rqU!+zBiJdB=)M3)CyAG0P>7b!E(rbI~jKa;PQs>cSU!zTM z8jNuczf5%4DDSb3f+xim@E^e&2g-b~7qV^_*NKQaZsZd-45TDG<|mK+@dY#mH+1+s z<7?1R(MYZP$u8_v@96Wx%)=0tOg9aKVxz}Lv2w^8A;`C(!Z%RW>VhwR45g<%x2Pl5 zLRj2L#s=fj4#wJenHI=t%-T!iRQMAUMbY`0?usd%Y|J(Cw z$|TiXhh@i;5`~vVy#3JiXwG{LF)D*(AlI>{-N3l_@J#32JME0v767)EtcdV8?e$t5 zT=1MFm*HCu+|S+alhg$pmDKNB^QaEA`Fecy{BdTh*M6WFkvwA~=0-UwAYaKFc38#} zlp&DV;B3IFc57JxEwoBGPt&&i?R$$9)9C}1Zdpg9EHXJuS`ZZ*&1`miBWq=-{!Lo{ z84FrSE~1-#&-V_aN_@aF(<~rbkx4&<_f{vZ2)6L2_^QV@z~gOOMK0m#n#`=^6U6Zn z6Z3s;;IGasub9FqK?=+7v}oePfT2dE?i&7-&v-*bG7xP;ntf}0>rS`Ien4RIq(zkFnNf*Aj$zT4_rV7eKo(cEn*A|ysM@}Ah z-&T2>L7jN4fwt>iCoi*A~_*5_+DYk!vHzclX!=Ui2yj-WzDHSrpDsxp^7nZQGG=*3i7g z1ns*ierJP+(IN}yD$%&9Tp}(wET8ETl*n)W!f7y|Rk8^&!Jpk5T5EGYdR$^+|W=6a8bBZg>TthZiehoaDO4MnuywFb+54MXv zabf)7GsQYv}Mwk?&iyst=3#MlVPky}E6GxrdB8Q>N z`z}5rs(wpY$pzba`AN3b3Z`b!IIHF1_DfiO&)`uYm`TX`*|=^zgUe~PaG$MzIZ60Q zq+V`Jx`Nn&+`^J7`k<+d1aiHogtbn?3zE_UZ@k@431JBJpJ}(?5!&6x7!(zaIXz4R z6l_RV;#=GMLvmnYaMZLHTG!edf}XMF{p4V-9cbt`*0LhqqmB20Te2?A3^k#nCD3c) z`dvZu`ei(D!9?=wNJcCEgzLRoJfOAtYzLM*Tw~Ir;~1fz8g2toMYu7fOVZBOIo#LNQ`?aSYq#T*E4U0-CKQ`a? zj@UscD?J}-<6FB?c%;X=&|0MAMd*LT#_@yEuJ}~x`1pd9qlxv82UF~stDsv%MB|KC z&QqvS^DQTUva4`<|_kdZS5)+nk^T7)6mnFO2=thbBXgA z+ldd$HAvN?Ho3Af6CJnaj&Dk*u%-{4Z|O^q_pz7b+(5ld`2$~FNW$&}!0e%b+afUH z!Yl>p^{nA!HE6P8KcdMfyG6t_bt-3A&6V!3sq1Yj?^$c`nS$!+krM5NcXDDGiY5t8vV!#$Jh`j|a8)UU<31cMd|vaVN7hj3 zKdz7~JU{Z>f<(6t>xWoNG5-(NX2n0_nk^b+iSilpbmEa zePq3SSN3zSchVfVQR6RKzM1sRu_%=ES_&@D4=ls=#wrAx3j)2 zAIHJoqIk8I_!}vfu#N0Me7(Kj;p{j1vL4^@u;+NOFPj5pGfo=+$Q87|KT_6OJ2vff z+iDl)c#-)Q%OQTr#Zsx`rdwF21}|Ffaxkv{3WFB}9b-P|c+e0L4boE?6LkpS`kkzI zB*j%W2Ks|KJo)d|G1{NgipRn9?QFz8Afu!!_zu$PGu|h{0e}|Zhi0|=jR+|!%&w*6 z=CGn#&Ej2~1Y1DU;3Fl;3*Q4VcXyHpr(O+4>NSG; zotEwlX~zRQ9FGkk3F$j|%bg&PaljN4{|pStcpessPPz?Dm$XQgIOLkwO?9q&d?K>D zy3;b~-Kgd!>c$5F5t?XjcHsOa1>=|s;?hJi9R<3gEC{w`|GtY zIrDhuytv8R$~5vjQh+GMc=^Oi{gu4vdxK$`b+6yluryiuBrDx+E4Do zW+M_*eQ)|aDuFz`CJXV4nx|#aV$ZPk)kY{#jYGYX`Qq9G-4=zmC?1{xZ)hZ#TDtQ+ zJ4b}i*uElh{62`Kn}-?pHUk0t3adWm{M=s$rvkV5m0fD{JN9a++SSz4F&B{V!Na7} zRWFBLZ5O|B;};I?9WSyG0DctutxC?JJh|O*nw#?7wlsdi+-V2%Q&^^MTelQgPdYs1 znY+~*4}hoi$c9cHv}h2gvdZ(Y!!O7qa77=* zwAoQ3F;!9fcv+@3=@I$LIW-XxE9vj)@Dd^Anup{DVvLGzA`dhS3@&cj;BQ)lM2uS@ zg}hOGcLa+P5=ipfZzm>*2wr=dCd2yltk50Gw1%wPK}H!NTtt8})JwKjBA5%bsc{{{ z3T?3HQs-iunnbd&eeZLNROeMy&KUvKCqu}}ru5$a2g_|{Z;${Vq{?Mp#iZsN&`Dg4 zqFjWuaxP%c(YInCr6zmWH;%dengbUfrUl4UMA%y%u6&1c4TbA5nmz#@?HI}A(7;xyvh};PD+IqNKZo*yT-{|5`dr^+;ZU&8$$fN4=zT`g6@vGHZkC@qxw*7rpk) zN)qTL!}^H3Li|M!^q)tY7Ecn!rM!Zx>-zBl8MrWh{j6q8|M%5ccUu8pfc7o%lUVZ0 zMma!)S<2CZ15)f0+iEyd5#Hn)LRMlo`oj@hzUEC8x80PgzU;n8Y1qQ$8@mSSHbi9? zAW?k2Z&L@>@Y;?gJmz^9n@_5Rv-lPL+@{!;2|!Rt6$#l{up@4 zQ{N`hYgiyNpt38>r1RR}D~!K)(A}gqJ)*zp=kHf~6?eJB3o0)y zVy|eWxPBuZOK`J02af<}mJiT1m=wGS&z_;zhq3**&+}m#TD_r7Jpd@u{O1MdEEB^i z9op|lFJM5>*R9NC#9(_Dtf4zcMpz2K)(DLbejc2))fgxAqIYv9$y@S)_30fdW9pQP zy#d1~Nv)*2k8e zd-y`1O>!b4$fMuObNU8nnyL2!i5K#&A+FN{ChG|l#qO8_?zS*Qo}wG;82U=Ph4kJ; ztoY}7v6lITG<&Hv4}e|5?|Q8t|oi2mPTZ-)zgr!0Iys3S8Dh#v>=UB)`gN8>pR z*z=$GcnDxORo5Y~Q)H$EcLhfcZEW5QrW&|)3SB;G@$_cD{#{6}wo=*RSkuwCio0)` zbI7Eub@j>oSBIcy=R&|mj5k$`bQS-C1VU3)`HT<~K|J?qc3g2haA7sI)J)jH_%79W zf`!0+MHRUo1u4<4x5*0&+@b@}Wke9E@X62Fx^ZRwE;$8ga0v;xvlmPh|a%E z@MpbpFuV~FROmSR(=0nt$b;Tm^ruDE?db8`GVukrw|(j6p{U6XY4yq^XIrpv1#96W zm8PF+PP1-@!p+PR2l1KDhhH#u7t{ssRqdOo%?{itvPlXtfYp%b{TSI}%FW|*F3(~wIk*E2!3WP^VTZee;l;8T@^rDrT0X*E*X zc(#;L{S&D+x8!tf$ekpQYX81wBk`zMof4Mg)Q~`sjCYrZh9A)qxu(K@)gD>CzY6|N zJEWy@4UPhs0@Ix0rVaGrqbFx2WS99_$J}dm=urh_>9ey9W08Nt7-tja;PoS+b)bBg zT9Rv!CcH^TOuH+D$d)~T6StXg$zI_{@jJ{X7j(Qj$h{BKZMROPMQ8E)Vt8a9TXn}z z_jLChGW&vA7Du>u=Wnip)$X@*J)-e?UW}(KT5lAsgTJVZ$eJnJ3dr`kiJ!$DTgQ*k zNaN(!V5!%fE22Cp$-G^iiej1)omHiwesN0J5dwA~B6_zgUVxBYIK)*s?RL{_CF!W| z_E14R*3=jF7qFYd-0kyp*NMi5-wNJcIr=#?ebAIugkx+UY_FB}$G@062J3ju-B$3k z{=-welU@EaRquPUl7cJI0BH|P?8gYRNSnOb1rG-r2OMti_9U^)ju+Qa_tY0W--wO8 zXHW)SD~CKYxSQ7I~HBPi!Y(-OB7(}pq941FIB4*ZlBq!i_6N!Hzy7JtW~T@xu^+&zMumD zSof5!?;~uz{QkKu#Csv#=@C)t+lV~K6}v?+%^h;TZ0dnz!L8Z>ZVyLO3EYGZY9=R= zwfbL0&tmZ%5V@kGj!*mM79AY>=LsUBAFiUD3~oiF+)}d{daf@PiK!jOCIK(V4&;-J zpWT{FvDdUtJX&}@S+DE(uh5Gx6A%_3Q#dofhBu{-`MAzTZg39F?m_K& z=b}R_=Z8OB6cN#zO)<_e>SV6Q>P#m*DYrH;HMYVJd*i-gV`-X+p7cneTCO_Bk{N@x zNtq)YOY7!!7v_jO{2+b@s*>4YL`-~}zp|eta@1F!5z};ab!}XW zo^q<(T}@>bbS&2>298)bQW&6LhE}@7ZFc9$n=Q2E#YBk-_7seM)+|vtm-i~PE7MXj zQH^Z->Y4jm&I6WwLTxcV@t8SWa0vtpV~OnG8yY*)AZNj&+XG zhBce)SRI!T+f3&Ow1ZM?oH9-!Ui#3RX)gWM#1C(G&xKz@2z}v1mHlHf zGqUA0#U|rTsloK{aC)=2Si4X=jKInM?Usd&j=h`WOdH!o+2jI~sFP7DSl7s*B})+} zVd-RUN;@l|YpypLaSjXx#y@2$lAOsxIm{TT`jQ?{LQf;86}}BS2qRio2HSg zdf0`Ko%9q}lP4?xexNrxowPuur{?o#2c`FtM@OW)Pf-1z8`d$+Yvh+yKIgNBk`jGT ztnA#FYRL^=ohzsLw@m6+TSK*Iw#TByZLd{hy{HWT_K3)qnuLqI$TvFq;8+~;v8PykomGi&FZTbH2$ifO@{TZL*a}KWk zDaJqZ=REjZ&yVWd|D4GGT?2nh{f5JTfB)0+|8F;Vw{jLiS^7cyXDX+AcNr%`uA@G_ z5L^0pBkCwSml!BA_1}CD5wUdDbJef!pdnMi_{jZ}S~;NpWM8jnc67tCPgU`n^dlcB zAB&5K=H?5|HU7T?B1)y_Cot%rhx{{7Pp1iGaf6ku{z&wJcy^IWt{j{h@@1|VupkJ= z=3|;+Fr)iJ59q1;9&wdyX|9BSXr4FwZ`Jw7Vp!{sL&woM)@$?|f!tFZRXfw6`R!g( zDaQ7nw;d*yhCUo2bh6nvMNIp1N1oCP&&lC$fGfR(VDFwXES_h2+j5C0iC_G{%n31d-H{k-V$P;f6TR_T0b%J>&z`eAAx30D!b)6JsQu;9SWmI}6n3p3wyeftF! z|E0N!x0lqcpyE<}&e5_bKD>uFs<|iB|FdtZ+LJbze}rEK~M@7 zmU|pM2mMuh4gdK5lrMXw@j;bPkikrl_G!Zy-P+l+R^ z%a{78^feST^``zYDGeV&t1#IE=#_FiR9G}SWW~6`1db*v;j*1t8J>ZGSIjR-OKdD8 z;iik+5>NF6oCd<#y{4LIG0_nw<4803hm-R!W6cw%!lkGWqAk@-;x2&P!KESgila`9 zGrIT$pnJx>t!M4n_SL(jPDs=Bv&*$X;ornQ$~kgHuIojD@R- zaZ{5(3FCoP#)|k1*AEw~^|PhvJ|8Njyr3t6^(fH%=gq)zXFbM%56RhqNpyH5XuIHNPs7)@q3{VBKYZ>RPgzY#kEC<|FVe@0Rjd8Qh^40*jBEZ^+t0-bRbDqs zakO_QU-f)SU-pEig$zz@boMw1M+cXBK`*#jOZ-n8Z?lYB`u3>Wb=&!z_M8r9bo1d$ z%v}TfwkX?*21Edk3_?oQEPj9HmUmVeLWu0(rmPlP+c7r=cG>ARze#H6{yLu}W>RlQ zz)rkb#e$%g{I;a@4U_Rs4*TQL%ISlMUWVLK(K^q)(K^o^H-*jU%Q^$B$m+kXHqe$6 z!CuBf9_c!RqI4`)`a%(d3f9DC`y>Uu2}(EDEV06XVZRWrI9I?ox^unKnC}kc0^&af zo>Nhuw@@Le^vY{ooWV0+^!$QSCf19i*bTqm11e3sSA%y2p;IC4-ZJi*pvaqo)TZ^) zbtvof%>GR}CMt!+3juBR&4~vptTPLW-e>x{;4cu8_zaorCd*w&1=J_AMCPaEa;|Cj z>KYUR2c*g>yUItGsXqB`4NqtMce1Fy7>7f;Utt0*)1?#E5!^Q3={+ZCp`@2eyA9L5;>vQAdr zLq^8}E}RFA1aS9rG**N6qRL~nE49@m!otg0I(k@Eo#r_B-#Vs>gh`dGRygP04Ev4T z3DXS;aWEZUdS{|ybs2Q-v1hZeyUo#znQb+OEi>DlRcL_S#E%@KY0<6A_wCxMBL4h&5?x*irS*#^T2DMBpJ|kpT)}}VsM>b#fjv7!;8+n_T zNO7Nmv{E&poCdj4ZJBMNGVOK5Z0TuM#-ejM{$BQOS`Ea`b&753y@`^>0HN|X9)=q% zU(Ohk({WX`AkX@nrxb2tONYWME1m^AKfMIr)T=JML`C5FMvB*X)sZi{r)Y)C!|Q}Dez)zuExy2zp8H8L z`hl|;>)&$(FCI>Q34OICtjKY`FLyB{#L-|n_v4UeQIQY`R59K_&VRxfSQqjweuRD7 z3-WngF-)7nrdopLE!f;K#tD);sI<-9%jGqK>bM9GLW%OHxD0E~Ltak`xdoxiddSo^ zO(^D}9sVBQDps8Ht3EKV0W*D%fcZQwl8ZLPhi>fUp%?01W?=Lz3qgpB|@3|^cCK~Czt#!0c>as@d zP1?H)TdAm;ULjpgE{Py#-X#2=hz^7s>`?C|IE0d(0m0R3r2lZwTV0K%ayi4M3lM%0pt?1 zD8c1abDnxw5Vm9P|Rs@TNSG0WrQBWxYpC-P;kw(48q@_?s)xt}5` z$CsD~4xZE0Gq!CFa(mpFN)>1+HyHNMuittCFxIOgg&zdI>iRNwpb2?vDx?We5;kRm&wD?cT@1s(3dP6XmxblTsJ=l;kDBp(q!>iWNkCRMK@$Wl@IPG~L`3 zb~J&(+;Xp_0g%F_L2vw6R0S92pt-NEbM&`&^l%xL>RBvn@{-L0_EtrIW?akN`0RlB z1{~_l9(!9TThw9IB#+d_yC?!SN0uf|A(~%`bI@vy+phd-4p%0r#=?(;Y){r@fUdna&EcGBGO2r5^UW z9z#IQ^OO5?;$j6u@jNOt+PYOnMezuY;ySNTR@l{e^RD)Z&L_kjvny1Dq}(K-q0$v_ zQW3NExHq$+P$689*Q9}j`Z(Q__6RX=A*?3 zRyaoEwjl09^)WDex1tH5^{JTKe8>r8`7gs1u+A&}RBuwJ!AD%WegE7Y(NBwQxb zm4%f|Y$Q)FnL9vf>hjw0J zyjH~wFw>K1S__+xJbSN({%_t@azonNczquh-FC|;ntxUQQ720z@bTkmbssoIbm6hmJ?UZa0}fZIs#5+L|!l_8SLSbkP^c0fHsi44a~L}$f7)Yh4q=o<(U z5`Wh2v8vJV1&obLRyr90J(I+N3hU;0ku z_XlxDjxS&6*)_;%7jC8|Js1)=)Y6(RFw8TMT}d_Bc2)?je53=oEu2+%TK{WIuCmc< z2}MgYr?CNPgC7`7=Y9ZjG!12D!LTv95zQM<;KQUvw>j+6V#I_37jGZ+ecF-kj3!-c zRP?m3;g=NWvI}2#Z6d6@yQXatds!#GO6JR#)!}tTv7G@i25N_C+4RZggTTzKZ>8jh2xc^KvN;h@2G6HpXX--sYK@(}GvQxNojkOB6bp6(!~fN2f2oPve*b zhNgGvl zU2}_*MIRO<9#uwo2H^SXIC3G&c;P?ydE( z(+pLH;FhD?6;-e>(phi;sH`$+s%hW3=|Tksw|x&#KoepH1UalECjjZZPvhdDcarv@ z7OY#s63Mr?%aZm#uOq*#I~wTD==l@)1){J02}w2Irl#R0OEYYjZO_ zRR1<%NE5fgu4gOPmSVJRV7aOz)8-yiOM%6tSW(W9!x4se4)!SsicNQ42bK_{FwR^U z+)NH2{)d3*w_^D(wH=<>@#}hLa>%xOn=~6@)f}D6N6!i{ zOgXQd9=Wg0(gB6{J=X*BTLgLZ%X-4)=B5L}^wAF$K|S1*=VYhHxbr!RGX4R+fiiH_ zPt6FapgymMhpWo8<}lOgJI@-1@s)3@D%&r(nb)R^zg|FtKF6UY%Yl_H?p=H>$~fDz z6VmzF%xd2)R_}#wph^-2z}P>xE-o7@z*aETV^A@B+0ww@N-`&<(!d zs9_I#ho^UkJ|>B#EqjjLlOVT_rUqXk+}&>y1URD9rmL;vFt`!?WMromfrn*sMj)Fs z6k`+Tbv5B~9DtUyQ1jJ_B8a%&_sRA!p52P>;7W&eovBs+WZ_1I->d z}#%(c^-@tN-nRHYdy&N)Q3FOKdz>IrOZ`X`?Dj09@A zzx~EJgnpYK&2=AqND5KnSep6hQ^Ic<1RF{Ta%|4*j0o8YZ15q85Faocv$UF_7i3$> zCLb5Pr!8Ar?F2NPh8;TDmCKVCZr8jj<}OnNWWLZsJEEIWB3I@G(3PctuWx>OIC2(>_abdY$CNOq)O^n4z%23*{LqF<>jf`!PeI(@&)`SE&+ZA;QQsK#`EOQnxRH< znN=o|t5pCYC2{}Vuc;-)i<{43??E5X`TcYh$I3%NJzvWj zb@SrXaIXM^7UPu3vdYy!P%)BAd#;ru$&FEaqFH4o*?D-g4OOvn75`*V@BZ8B^+} z5$W9Q#=3~RKs@AQ4K>y4hqT@#$=V>zx8W;$X@}YL&?eq0KQojpsg$3o9(ehqsl$A)U^rLG%G6uROQ#)+`($M5|{>Dc)Bdb0W;?{D;p3yhV3-a zwUJs|;@Ziup%~zkO&^cZQ7&|(Ax5vl)E;qFnn1RM$=LnQno3)(Vk^sd_>fIWUNm)F zMu&djz5DEj7p6vK``6QjzV4d#@5PAjzYn`UN+x~3OX#a!SvSI|-hs8mZ?d7;3h{6< z0O7S#U#*8W3;2JM<&{5sR32JM~4YCzaqFPHH{7S_ReM|+YU6I@` zDSn@65J<@@c8IkZR_*B2Q~G*tuDD&OKw{1a5~Tz%p3MC)ZXlNhanDPt%`|U+fP?~d zTgTgFa_=l_{v)T?VD%Z?4MqQhf8QdlP#Q?emoWsMtZJ)SNxmiOW|eM8(%mBbb34)M zsV_)D1Z4lsIrzT0-Lza`WX;q|!hG%+FiTK<4)O>SFVYk{fbz8T6&1fvEz!%Nu25c^ zm@E;J;4JNjH?=txb@~mqc(3|4wAG3Q7}*-?t_(|P;AB75n!zeJrqwCyf>HZ9LRDLu z0sG9&)pJ|UxrW{4ElGgBgbBsmxJ*PiarABNtIcSHdd;_n+q&hgOqyI`w}mmDcB@Dh zoG2CpR!~m&c}+VFOj(}04v3k#Ee2xLoyYoD1BsD4)Hl++OKSz)Vn!{Q&kCsnU`{iS zLibDcFwzY2-U&@uNxmGG8NIVa5z3Kn_sh$7X{3_UA#lK8Kbf&Bm z8yjyU?liG7vGlQ2aB-I}{5t#QTN9Z+V*|Lsbz6toOlIWSveIBZBS#faWXOGM&;YtO zvgpI<&HbXDJ{$2}=(%12Nm7&wrL|JxlwoiR7yZt^S{ow;=$_)Xml=@ef>X%0Rbs7b zMA$b+&$e@MxO!&pG|C5TJ;c_i);%1DX!aTr9!;av3i9yIP*E{I%S_{`icz^kr?xqJJ!tV1y?g$}y*xR` z;)dV|LXO-ZkAe_j;%E?kLZ-IYEbg|=z~I(t;z+4On9vT@D=|e?)Lh=KGVK~vY9T2e4UP*`*6a-+243H%#KOEr_qNtbE zcFnoRM}%Lhu5#+2^G{e{Qe0`#*uwbSte6{0 zZ0@MJ-Z%O;VcX$$IFdueeYvGk;Ip*as{ZKwrssMqAHBlr%zkeOGFXl`Q7E`E|8=3P ziT8%LXPa0n2t20@CLfLE(}?iPoG;i?ovS6jd7Xn>ccGTr42i1LQ(N0Imu2EO8%L3SJyi-(xHh*DYP|SE@{yvZUZ+sLsFkL(fZF!4NF!XFou5_QSskb${ zNRyzXC%~dADzLHE^$MJ^4Yb6|_we4CS2zENc? z58V)T(Wh4p4Iwh&@1h(tt&>{bE5qV5p!GEWpc z1;`vhW9@B<&Ccue5A0C&hjYUQrHr?LjU~;KoVnGWtL6JGXS7XWvz^HwrlyOM*T^|0 ze|}(2jNDN(VXlZ>AAicHDhIH0Z6(0xdMTie)csOGj7>YjWx65v>$F9udn}a9Mlkdz zRTS0u?y=?aPCS6Fv=*OVy!Gkf)*yYi5{~BHwrrk$m)c@nb@XSp8#M!c3vQ>1yz?CL z6GAg7Y$ELJYCkm+n`W1X3k+u8cMW2PHY@d`FC$8fwbVs)!eog%Gno~{>eW<6fo0zMg6m?)7Y)J&^@)=c4NAf0k{WeB zE|V`W^*3r`jRWKktJu?8aPcgic1}e`y*c;r&N?#P6<3JKH89rYfog>{EJ*5SrL}@w zAv>uj)r*>4)A>DRt-79XpuuuGba9*AGJ=lL)jiQ=+X&*Z3QmPB*0tDoiOFr}y*rsC z6AKQ~J_7U3xuRfoGHX00MU0g#ubWJg#SF;ESR^8Y7S^hqE#n4&cPhtwOV>m!ANaba zusb4gu`PoQEY;N&gy@=!t9bOp`r{S3|E4+pO5N3PYWLk__BwwPae*Gr9?t^Zg4fUj zMOGELB!O*}e!*d->S;;I-UJdPw!%$wx~vBd?$=6~o6s$5>)GzSlk--Gm0{-+SA`pF zL1RFqVk^>@Itpzk2$b-fC?u+|nVGJT!(VX5*w`zwHPm1eJ}E198Q$oh_MV{)FL^W? z@0cy>(zyz)x6h&_bn4xPqx?kuG5Y9Cer;Z)JS$s*&ghNh`Qgg>=`{XQ0f;^00qsg> z9rj!!vK1)8Mtl%!Q7*T>ht;;rdu5>WCM5Eu*p2?-PQB*Jpe*nCxm=V?X7(-TX)XrY zvG*&E13GW6xP!sB<832L%`L$dTWxqJZ2A^FYWct?8eMQWMr*0!xPyV9tlSkgCbxG_K`>UXYOgG>jWY7b#>S9?G+&>ib;840!u0_aF zJ}rX4Qg)~cVw{WvgLczBPw7_I$Li2I*z<1jjBC*fS*;d6XMwR7=WEkjD+UYKVxxzA zTZ4Wz`K(viqLSLTL8kb__$t-sC@b+^df-|Ep}W6LHJC6(R=eP;>E-N85Dp{;NnC42 zywuA)h&b)mIod=Ax5+#0_+^{VADP&lrK_i627SJ9u9YRU9Bw#Cvz2_F%Xu5`^6(=Y z^_BrzM42l=GFGgtL_rCQe`4q4^?}r!J*~k8|9YzSW0{wwYQ@(t_C~<>#{VfYyt0EI z;~Kl-#H^rmJk2IW?YYJpXNOPBjuz59zslj>TjRi_>TXgdCPBLyM{?$6r^mCK zY0H9cPYO>K=QZi!BF)LdRJfeU!pk30T|B%6)rd%?_F*Y_9YLMGYqXDSW8U@!{yU{x zJ-<>2i3r9DSWMpYaq=iw8<;3{g;cEzXA{&`X@n6lUx@hn@(1BM`e0v~#b49&u8!`U z)9+41syi>mef(7X-@l-`Q%2jFnE-JNr;52E&P^emdmsl+E9?#x48WV>=nj%#esyTho2L4&nJy8yFAT=?+{X_L zD<_+~)9n-iFX~LI9_K)iG02fOQiAra{E`N}Xm2y~qFGe)Jh~}CvbFTlK~K6RsMSb; zonG+wmn7-&ICDb}L2(;WEovWqKg*iX+t~HJkDb{vZvSNfunJ!(1s{zR(k@lDUgJS} z2=#F-g(9(rU-TkBK&-FeFpE;4vfZy~0YSyZ8kbzVFMnc7M8l#96Kbq!~oeA-Zc6+RZJRwuu23-@ayaaj67VB*q7n@n06&!M2#} zE*thwQij`>&Klw*PyfyI%s__t>@IEAfww9y?wmoCz6(@o7gjxf?EF?_aU$wH{M@(D2ZQMZe9lr;CA<2enAvXg0eOO@n%KCIH~)?C0;on#I^#%h)bmC z$lW65YoJf6XqhiZXo_*XC-WDa)JK9%YNoSar#-3u)=e~ZmEYpmQ%y`gy`YnSIeVV! z$bM;>jn99C;JYl3NZ{GL>vGye?pw2`k&;o_-ew3HTU-3E}o`M)sF6h~r-?_sukJn*I?|LN%^(GfE zHNVJ58nR|_8p{t_WW!FD8@Yrfj;WHk{bJ~GZ!zSk~pjv zD7Z&l`NtHH+USLi%-b;8P0v+-E%1dtt2K&)NX!2u8Qd$e?CBRqC3oNWH9%)d#Ag9| zH};@*(A{{lqOz2JUo11AsFP7|CQ)+eHumKqHiNtav{gu;(BH{c&B#O>VeX0t|D$+I zeCSY$_>cGmcATRzhHsI!k6hQ-ag%CaOl9)g>P11A*D}@vkMO4&*^^%`fx0b+J4Zc= zpltsZZjizu{6qx2nU4{55*87>CsxKsyQzLNpfvavvd^Ka!j+)~t?mfgBf0aG)J{8$f(_hB?9-x?%ezdFF1r?wy2DKDDfK=r z-i;m*3R%g1bpJwkh7g|;z1hBrz^+?pA7>1)mj3l;3g_TrM~CRT!G6kPD6zeUXDhDXWlpyhW>x5mA0n86V6y} zg;96>{3{GDP@pUb1%KPSuBhLY|Gvi9__Q%hQG4O(4o6Lzsl3JrvlG@+-v82XdMv$VcQnbXvX;Y) z=M7Cpu*449%Vq6Hi_utalW(+=x)y(NZx8%fnLBQOm}i&Jj&_!&cSi4tH|B zR|l5K+YSOqx*@|uzQXHn_cBlDhwgZ%&|Cmqvk2)o9*4{Ih~wT5AH}@SWpm$0-F`d% ztAEscp+zzm(26Mi)pPv;BVjV%^z+@lzi=MaZS`fB*HtLJieqk)}?XS_(=tf7Pw)V&o1sX zz|Yhkl+TmVR!!}<;K{eJ74GHrhE~>byjmXa2T8s+W?rjMCSC~r>QZ=DV=XKHDxb6M zSaBT%rKlKeRzN&iwV8+9qRh@8K)C0l9{FHFG8^S zvj_5bCLx%ns+h`jbNZGI+x$&L@hMpemO0!lvl=4qvHZ8^%obdw*G?*zRxE& zdtx~2Q*m?L2$eu};PI|#TKcgHV(v0en3xFi>1WRAJ+fwhvqY=wX1XVYJcEwZX91PE zMNL(v?F%W9m}0Gz#Lwv5Nt^7&%`m~KsxNZz1#BBF1Ij#|jqZ`~`LkOAUy6Y^o3WnB z<~$3+aR_iAw{6uIIC3!23cIB>ueyW7-S(>7qY0e710!&%TLb;3P}-srH^GXb3%EnS z-Qjg2Wx-_ZgzJg}#wPTxV+UF$x zJs^u)u|)-xaqGnj9Z>5v&iVLXbco=Sb#tM@3&JIQTf4(pZVxv*8D)abm-#3tok#av z7_U|}vM1ZF0Z=Gq3&{XJdkv@k0ryKYhu-#yGr(#Os1MWJc}HuPobDu^u`wX{MvA=r zm&ShktIyA~@=*5w8i2{A;o|Lm{0qy@DSjWnoMytd-*5G02R#*C-0RjLd=txP4rB=7 zl?P;-sk7dpKvK*{eVt(yBtL-8*+T-J13Hd{!wt+?MJ8|0!g!FGj_F(95>E0PcvG98R+nF z?KprE$6lifm-zjiK~JBP67=lXY<1EIhuUSaEOPYB@IRw_S+e81o3|qb*SxwG?s8;C zh?wMmXA};LUwMK_?6G}xYzffpMV64|F#hB=&!$9y4?&E3*X&RZ6R!PnM)1qsfd zgf2TDM@PcmeQ)HeouZu!HfpaKuS-dc8dn@@-p|11S5lw~0&B1#DH)k(AqfZ}rAI_ccjpzq@pTYPq-i z@@7cmnr8G)OQ-Haojm1M^XyXSeAhi3eNz7q#@;iosVr>wwu~}>iVBGIQ52LSO6XNZ zM5!WGT11+Z5PA>DD5BCtkPeX=dJzacp$JF|NPqw#L_kV_&_WVONO<%lV!4 zfe#@&J1cwbd#`n`>-yhFrq7Q3*%H0a&ABSsv1L?ob9W8FvhinWE%QG3j+RE5)Y7LS zFWq}=_beWJwBu(E{sxCm6RmC?l%4!Xyt&;oJ^P5F(2VW|e_VPYJIhKgg%4k=cMsNy z@#NW`=G@aeSokrG*gmB>5~ytc>GecrUHQ_b4-%q+D*^59LVI1wWtq^Hom#YIT#1YZ z&Mt@tM#wrVF8mzOu#AV5&FPP8q=Q(auO z`b=SLa2oO%2i0)0$9|vG2f5&;*;Bd(S{%J5yrq0b=%hHxV*L{MS@VLb7;x4Jup${* z#|7_a^Yasqn5tEp&A2_KBnJ}svkxY`5^D^8R#d1IR&hGf4LGCJrvq#_Qg_Bnk`os1 z`>X+DA6`|XjXi&x;Xv=Pq9h6X-)l8WUlb1Z%*{WXF7Mhj z)_bu}N2rmKy#?HQ-r(gcGPXMy)aH6~p-G0E>5|wt*>cXjctqIc;B#PjEhg>V-cq3q zw+F%prO#XI?&o@5u5;yTt42>Q@Tt#|5b6DWh10uGN21LN%4X4yaPk^@$Y{>-g(pUg z6-)Yqn34}!!qN|=s(3~-q)tld?E|pF+W~k43pfV^+QdAFn zUUP8=aXpW($m;zLYF21fZ=u0tVSreM64}M@!73&Y?!>HeH^WJ!# zIn}hOhsPMdBnO{=Ay2;*4iMwE-JY4uW z{OpKm?+YGvEsT5y{V;-D#7DR^HRE^#aH~qwPt5e$60z|G74my^H!YiR8U<3sWiis! zM4jR|W<7YQLKo#P5Nh}R&D;1*U*1{o@EWEMO9YHZ#VB~7?$s@^W$&;Vo*Bx7Jkf2Z z)hsjCetUKd&d$eFR&e?{lq!{Nk}dlc`8pbw*V0ho-l*<@eb#8jk7QLzB*1@&vs+%s$JkQ*2x>ZkfG#em0pQ!rWBRa_R zi)}8B&IQCGR=9{B9#=P2KIj2%7JaLAwRMnQJG3o$=$B)N=LT+G`oV&hRY@(Ze5(hXptg1sLCv>|xL+K)S?UrvRXG`7}cr z6Mn2XZsW`i>fg2lJ+hX?_it-=X+C!nDc%6DWwi{qJYD=+p2pV9pKXH9Ia87ErMIi~ zKrO@KcSXIRyvc=es@}$2J6w5#+E5h1VQTrwuMEp-jzn(65i;CAO~g zzipmU%IyB2ueE4m5U$h4yB1j!K*@uY|KQ_t@htaVXVTG8J8*48?Ld-!>zQa5m{7~)2xg=|NjrUo6G9S>%r8y znzNTUc&zTGg3?PABL$KN<4<$Hj5O#fW691m%E$BLV!D<2n{GwL%| z8t;#o-#nGjnlc(v&=eNb_(Yt$__?@eYUxExku6aCr?rYnpRWl~)DpV8ZI_F%z~SAYiw|(to^@IF>}0_kbTn>>VGLV+}I33dczF{GnG{ zpqA= zDM&N&_~_3_#~UBePHCVyhi`+P{JH?%=3ssUrVAi@`Pm0=D|9%!&!USpz5GI}dB$K8 zX_V(>O9$e!yh72)4@xZLmE`{Ni>SqK>fb=M_;yKRG^gxr+^@T)$~xl@ZanLsSB>lS zX*0eCTZ2h-?xHghK6`GNqqR}StlzJIcU`NOYMNMAy~h}K{)*ky zN4qChGYBrkjbGBp?}$&uW!jMV%nQ+%bP;ev)qzV^>GMI=nOW(4!`ok*A7vsFkxr*c z)aG`V-jkUDDF>v1z^ydL1{Y7ZM;Qt5lqva zz%!pgoXEnV1A<~X#l7U$En6s$y(*Qt8yb~;A~>-enrjPlM&Fz|9hxJof)Cb-cKxJI zyAD~)j6`#T4@`01i(2bte$*QXimbnOIESTRi2q%plwbobD_JBg{q!t6zd+;|@nqQ% zapv#@Sa|;pHs1*Oc-|>I1bjuAFBE_Zv$;YYF2*uJW@pcbnTW0n@<%ko9bY^!EASVY zfo#0qx@PfS+HO;M#A30&+Z}vfKfe0~dL(bT3Lnd zaiC&Hx=K1x+`c^B_0}QTC`Js}AsvCoS|gX2(ch9H4=ir7=wEY4-rH3xAN%za7w?F1 z$WRc>MHhW8J>5*%x*=c;6%)}|`}|16nJMCPH_R9@n;~y8LO!arz#kOu!L`sd<~>|H z^E89lfLQ}$W-B6FNiGl;U#-_C#GY%m(QssI2eG_YFQRbo$854ZM)=O-4`)aAHOO_9 zF6DE@#;DdC6qVYxxB=^t_<@9uy`Ol|(q*%lcS1B>W;I4Y36FRpG# zx~U}_{2{v6CW!e=Iet55$2rT(r;j&uQF0<&_opEng+~SEdL1%B2`&v#IXO(cucby5daz zwZp+Vp0{(4q*WOPk~RgoQe9fhsRBPw2I}o=9CkgPY&0I`*5eWqnt)QCk;1FWjbca6I{HUkk>s>D$E47 z9MU_;Ls_{ov^he%ubvw`-3P5RZXc<7vEaQhrt8)7?KOmi)6^!v5&4qOqiM7Y9l5%2 zT?+RwTTOTo3oC-UO1#3HhWyMH4cK_g6Tn)oEH#lS1+r+B^41H}|71qQF;YlpH=-o%1j?Ld!hH5oe63F~wo^nuXZy@lO>E6L~ z`Pr5(`$oX2FvXK|{428I{DX)_j0!#fN#fQiV`HC#zjS7iIv)_2%V@vv4~qNpQ87JP z{Lz>E(lX~Ay*hht>gt2F#FeuTRNXp-U_Tc=bIW4pl)}H!m#ow)WUC>MGQ*O*nhxqz zvGAT0w7mu|(nM;_Pr+~RRaM=hRzMxii&>AA=*eUoT2*jiBF8@FEY&v9N&tzK^FPVv zCUpYAW@9*j*AC*)p712rp;3Sg5L?4A)eG8R!N9VLHPW2A(%SK}e!~ys*FP7%TMwfs^uB?qlH^QH`Yfv&eR8ZlGK#fLwaZG8 z`KV!p-$y`UrcCUIYN2(%h()Z+N+sjd+}f>Obr1&lGotwhD;;>jcT>>jy!vP!YTyND zS8pg$dVUVaZW?JJ?g`fx!o)n9^KicNK{>TQNKvS0Bh1%t8xDNJ;)Z~#`v_#CmdCOoEiI_?dCF5MsHljxnkrBcdAIN zo@Gx~5&TGVAG4)t5lPBjY%@V)e8M!VRjR|$^kqjWyEaw*Y9Z1}DB&zLs4sqkyOA)W zS!+K6q*b@jGwa%ue&p^i!vYRwB*>}ymg{wV*(EEB>j8@$$)VUaEZH2U`c|gioAabm z1w$7HFYYBI-XGB@69oy5VyYQIAT{z;J3sSEqip&mJMTG9+(GG}Kgp4g(7P|tF6E9e z9T^K7nSz07D|Lh6Yetp(57OX7HItPIV3odyLGW8IG&dPI3AFo*vH$iVPF#&?HXL!Q zN;UvjDG`w8b-C@{7A{#z9kx!mkKNynr+s%tUe6)JXnPVU^!pKp0Wc9-yxyu=Hmh^K zmAt4BS>^GT@^W()G6M)ps%n{6g-A!TC+%d@ER_gvW9IT_CZJC%pLL?Ofj`%8d$Xv!?EtT9bP4t9u{Je76d{gxJS$xOKD}x-&Pd-v8);F zfI?^*>o?&LH8LZf1)|9c_Q8Q!jD7Z2Q9i=%MB19CMui%NnKj)iIv$U2vv5`C$8?`; zB+RJ63F9*scIILE%k9ods4TihrPs#j$eeFd70s;DXaX%j8z?A460L)v^B+}wm^bGn zjya1>7hFdfl72Phz1QwU{IGuDQU?hOl;(;D@b`Vs(-G(~(9VR8d1~D-dN}FCgD@z$ zy2V{w-(=0%_Q$7QAGQ=>8?lm~`man)_|^4?-eq38DT`vT!Jc0oyhr%FsCkEZf^(gq z>ulqwN|upm!TU`MV$voxi<{G!bxdNWK6x%vK*2sN=a!av=thE?HW&>oDW7R)9aIPy zI^=80p!tnVo?33)(%ABM4lur;fajM`N&cI%rmNI?>QaMJgrP?@qh!t9om{Kn6%|dc z@}RfvxbVkg)*`Y1L<@@p=Aa&GllC@O zOCJ+{@Q|UC^UMq98qmGQS+ue>nX}U_P8(|C^bF5jRr5&VHeSi`qAWXVp+|uhCDWE74q z-2jqsrZy_93sQ2QbG>MhX;h6ujMA59!iJ!PBFs?^6_mY<3ZNxSnU?s)#4H#oWM~92 zi_k(J)xsY(YJeVUGW=^o3LA4^brKcb8#fXO$0YzquW8>-{b=B&Xp&zcLP!FYh(kvj znx+aFU|$u1js69@3g4-p88r9H-@Ds)o%VCdlEBGGTqa^1woWRo?v7MV_=z$yPrqeW zSK0aJi`dZlEBA{*l4~X!o>(_ks(Q}+kZ@p>X5fL%P|J~>l%PQUi(z5fj%g{XRrKkh zCdqZAv0hbpk{XIVsLzF8mrB(5dFkpnuqsGLH+d1XlCvarH&jn6tmBqrmY3&{bR#9S zRSrNtP-l4CZkwodwlB(>0gs;9QHR-5&av1=ca3}kjPHhZzk7kFowW#R1W!fN-A=sv zYLVpL3qBkUG7zArR-^ZR_*a=fuezxd=*#uxjA8QM6T$j5qGxQ%J$!zT_a@fQ+i?M= z*Gdfox)9z$;9hU2khZzNTofQOSELC|T=@$IK^=jc4}k%$K=8|#0jWN#!O>iGD{gSL ztE;7I^}CLdMOmUB-8CDmF|&sXm5t4WQ@pkD5));MS?x4EI&>`#g7w$!b2U3ERdb5{ z>#GJVuNq&u5|E_HV7ICJ<*(omxo6o9g2F2qevq#Lm7C!+Z+0B{ZkB1j59oD8dZq4+ zw3IEIX{gj&V8S=#?5MA73>Mx{WFm{n&m4#o3M-jz;-9i#W(xA_pRz4cxG-oJ=7vzc z?z$@L)oR&@YqC~=X_n?SL>47Rc*aL$SDUf+TZdl4`x6&b^LwVI61W&3X77-8&iF%s z?Xlv^Sjqw1*URNQ9BS_g6fphBl9@b^SUOgG3|o=a%w>D$#pZEXM5nuXK#gcz?VhkQ zzl&2|v`on;iC%;m!ea`>s2X|C*zEVj6VTb#kcBbs;ay}Ag%ULj?nM$$NT8YhY$9X1 z$wp(3qa5r5O^uV+KrJ0E16m<4npkK^grw$QSPnCyxyN2@i$ME&9J-$FW;1Gf_YSrR z^I$YP+5cg;xpi2dT}y35)!vll-thN}P>B6-g2qfTs!7XEls<;pn{Ld2f)v(O8tpKX zzdp3LZ>||3JKSh%o8YR+XQB4mK&0_V(c<&+2)KmMWU~CoEx87bpmQms{1i7;x~C0w z`ASdYaDu(pE%BN#(2t>0aQ3nYTrEvHxe5WpE*!MnWP8Qm74q?VviF*wT7=Ag&8Gk4 zWBPDUjW7Wu)gopcrz4pFIJt6l=x#PkqTs_BKcrBY5}~8K`AW_~?Iu){`iekG0^f)^ zu_zWWzcP9FBP($-8Z0u1T{J~+q#>#ca_PkI0pOgf)~%egn;Yce z)n=&`ysC+-C7e6U+%UN=(gNIJV*N=oVTDx8`iALTJ~tGhPxWj!#`A~X?`vZ|(nt$` z!~oK?Xq|2PWL@xAeZ4g{V6$a`g#DL9h1?thx@+g_#gq6k+1zjg<4v_^vWLIYRCl9a z7)u>w;mVX9pb-&$WZKwC7Aay0Qr5C>N_$n8|8BdDdbPc%Ls7HA`Lo5`&R6@$UnJUa z0rllzDpc}dx0#kKb!(EpPc@310W)C$}%$zG4K11sP zzetZ6p3mD=BX3*AZ{3N~pq$BJ9_G+c#*J$zwa8*zpvwE>5CSyfOLP3zkE~BxqiI|G z6Yu%L&EgS8oyMivm7+KwXoRYNBVXgl+7C7_v>`Cker2L(7P9MmpAp2oZ>&ivq~sp{ z9q~!oWMzw%pL&QM@gHh~gf92T_^*KQV~(=fC7H(I)?4|&RqeHO$3&9me^Q`y13=yA zLeJKENeTU+c#AsQUui=4( zjp_%`(C6jsE29<~enzcKiUxKsr*eeOA(P+b_ZB5x6HljH<3SPwad*6{-$v}~w?8@1 zv?EiAv>M_&)h^abakTjMGZK+HvMMhL*%}{|hIvv(PoR9H8Y8O{`$%RU+ ztZnGaPO!}izsM(C3_^M_N+b5Q0VBq`MU9c)rzb;HIAr9vJSQ-@WljrP?M({nb8utW zxP6)ah>DKxbcj)CD{89Fd>G%y~jLnaH7h*c5HDvw=?$4~;b#G`|1>-hW;8 z=yth0Tk^l+HkRz@=VKEuvPz8N%&j)bWs;)-9BfUsw5u5Mdx;_dszk=w;5?vB1E zmCpPp&=TSR)EUQOhFp+}`gIiHyw_o_ZWL6j!g>Qfg!_LqVjc6h#XPKsn8fx>dbx$L zdhnCFb0VcU*TYzQNH@K`^w{|ahQHYvESgM00F`N^7Nph=Jzeq4_Y;-G!R3^YSCngS;#3C zs_gE;BZ|B#SLgxY@`8KLLIxvH%`ySLK1XB+t%EG0l@PbV*lz6%=NG2|NoQoySEOcn z#95>Q>FSSf(zrMlm|myDmRV@N#&uxs4#IJ)(mMQa)AFu!B>SK@=R{Ia>g1PT$ydHg zERrOP$>=NUR6Letaj-)H8r7zcE2Yz;6j(UFEk|peI(RzUw9(inJ5%kT_ks~t?xH>8ikHt&+d*R1&u()sj(W?PiK`blwd6DwNA(-fdv1jd zIh2fkox3BnwZzg>3y~n!iY6+-CO*nNRVM)$r@14c1;=Z1MMi$0SeB;5e_z&dDUq)B z^CK;-H4-L!4)H~lfyq`5S1x7(d^qwkLsxDgYWf?P!WMcfSANM$@H$XDv&1jm^ z_YBKtUa*tTF3&BGGdX%eFC$mjBPHhwBG-GTU%0aUR%LDCU8Bbk7eY38l)3|C;EzCIIM6%PT`l9VmJLx{iYf1rreoM$ffpnH-a-gx_ePy+wr}} ziqgEl)qeJ-^hjaGC%6P?!>!lkW$2@Q<$h~u64h#eZ{^`_4c-rf3lz&&0Q>{|(Y~{& zm_sQ@nh-8@vkDQFF0d{+hoBWlE@AJfjByS+DslMObl;Mnh35DW=w z{!DNQ8juKZeBR>3#>uphCl#}+(Klb4+_gW6x>cM%t#l#^K0oV92}xdk!q(!@IE4-aJOD| zU@i4*LQ_kOO?$}jPom(FkJYx7q_^nDtu`Jod$03y<8{xzYqLiwT`Df8XZ>0EZRMEX zG{hH%WeuIxC8hkR=D@o6 zpf_Il?3*{f6Mn3aC$zRF8}|ZSrjb7?DEQSr(Y-|Mg;iMhP5-GjVR`tfz> zIr<-8W`7$B&`}}BkZv9D{ZEF6d;E$E)=?0{%g7LCF5@%$r-6wZyuYS?lJ{1VRShrGaRJCdPJ$yN_Fm zM$qRF6H{Nx{WQ0on=;smEf{=NKrqfFGh{~oq_7mh{4p3lg7 zZ#?jgKz|`e)$>uZPgzkj>f??~y5EO$ z%8k@BM|SePeJ5~N0oUna2r8JqQXr-yY}q5p^UtV`uHvp5Mf?dpX?ou+f1G4%*0LJ| zzPiv-;urcM0}N7?&XZ5=YZ^1?r=HELCpx8IdqUQw7OVy$e-GXi7Rm5^vB7f)QlpKk z)#D4m4imnKYUyMr7O7~gkng8!M`Zr!zlcC#YksL<3g0aJwE{6? z$K>sV>4CITylCTu&~l}Rul5RGwgp@a*o4C`6XO9G|N`j#p@6oK5TnMM|#nnUVX>y;QkJOoe@3U zd!Mx4y73x8l#x7VE4!suQjnOv1R10(iEfVZA?P-YZ4%g5^=E|F$Z_xonR?~_ZJ-WU z=(R5`uc*I^2AJ#mCsR8vZ+!UyId5!^HR3WtbKhgekfn{pzd+Rb58*$t87j(L24~&R zXvSQo9G6|_l=~LKDJ^%nsW_?REHm|4N<>)aTO#SMBmV1fMA!sK&Y}6haK7y!&yQeI~gQeME8DT=ZApNz)G2GFmu*$*YV-yn{%o@t%V{u4Om3z5KM- zH)0r)^N77jv><=r4@tA8BuGN(Cz&wmO?69K0a36mUx1NuzbcZ)G26|>fO?j)6g$3q zxN^4Oo#V|d$lW>8C!3FpBC&ayT+ZG{rcdyn?W1%`QnfpYs7{Z8@6i6u;_}t|uUUJs zE*W`UNf+NFDy?J^gy;xwOh7v5<~3v5&ad{!@6Av>Rs@9S!=+^C>L6Zq*93y5`zMV$ zW3K5;HYMjwov+%Ag1NnVSiQUkL#c%pH1`tPD62e4|D|M8Tk&^X?R$Gf-*f_okW3H| zxd|gAyT0MHN*HYocfQ@zcQ2w5hqO_`F>DyCBygZA4zcDjvW6LHUo$*)`}1!L48T0W z0PZbbqqdK?mK<{X+GWuXH%yy~d0VU5mNo?W^Q`>Q(=QnxpDrarIbb2e*tokzY0c>< zb$PBRo9ykT;r^~a{G9F ze}NAivUWkZi1iMF&RuUq_#fX4PC#ovA6kLF|HV6dkd@?<$)lF7Hv>+N%t^n!bQ$Al z@+~mMSHp)h`_S+NuMNHIQ8Y?l0p73HdREL{JhFH@f3`YSk*?^%Osu$~{FYQ}>T%t6 zYMw{n+E=w-iiGC@O>g`Dc%-1jBXmDnPBS?-La&p7`sgUEZK(SVBIgu7JcRnvM}rP?1@+?wnO zGquBK9G;F1wG@oP5R`j2%isSYQP-{cSDHo7EFxZM21K!J)6em(7u+VflNV4ZGESm^vYSY=*%;cANb&H(ZbDWa9bm?13RHp z$Y|>`I;X=F4{I0uDvL>#c5R9K7?7QMF>?OQy~f*RUs%=iGLCJA{59V8sQJe7q4lYL=MRWsyiPU|nxYgcR&pr$tZ-NDB-exY_$+7| zMi&UMmlx>$rL|85Hn+Yy$J92huTG6*^vvoSel>MjpKTjfX#awkKN(7=&;445<)2xa zO@Qr9=oa}I52B$DI+br!Yzp_e*DwqTCpeFpVlTkQccGe3OSxB|T^+1;{!R+?U9m*A zQiG?tSET8w&66*#jx(zVHQzb$*(wibpONO${4O3gZasi)DMD>I|Mf??Q!9uqMolH5 zQ95X*c{rogL$qbsaqA^b$*19MCgYKU*h1td36zlJJ z+=Eh2Q{dXf+Gf(HxvugWVGZ&7Ip>$zVY~-|D`)#36hq&%(L>_sBNsl4h?`hs_Ftzr z`N8|>>YDI)F!s$ob07ZFyuJ0e1>OK&6E}Qu^k+CR2$=c7{ltGyRcPbv^17qbiMc)pdXdPr$v5U}{zCb@|V!Tbc4EK6c|Okc+&t z=OR^a-JlC31;p{HrtZ$M@u-z9WtH*oHYCrVTy6w|r)S%<2 z9sU_u&t^eBD#K!RUzVaN*&&UcT)RPN$x6e9KW*~c=-Xm`#`KfddDWiLmJ-skcP1Bu zw%&P)tZl0r<`_xfu_tr<@QkIE06M$hL`Gvr(Gww_z`dj~_P(djj~nm_4IjI`)WjcB z3LiFA8iY$yX`zw4jNhKxXj+n!DT+GISi2g zb>zKYd(kp`XVlHyA*G#a7O^1r(ujg8 z5!4&UBBFXjI{slHBnTPpp14nYs4Vr_&E~<(NZ5ulK`DIh>&jo%+wzR8bgwe6VNd;U zq4dm+ti8Fti_S4Wgkar<2;zue_9gyEqnJWe$V857gIE8LDArDd+R=j>s>GOd??1Yl z^jcKgv_IHUthzs5ABo@utV;*yc&9IxIV&eCTJEWVQ(VbeXt>D)uGG1izb<4^L;9*+ zQT1c)OPC&3^f0`DH5q`s_KQ1!J2z~o3}&tNheaKacL=b{({4i|rY@18=vde4#94fi&IUTax}YZ;P+2>tYxr(MQ_ux6O?0BYhHBcJ zbZyHI#n%rA_Z6$v2ddUZ>>cdYbFIDk${JObqP8VJs2NREkZZfqcqeivs71K)iO{k1 zXD-6>Z6mCV-VH}M@T`R27on`>HdPqV7rnx6U}U+9y!17AkiQ$ACB6Mj@`1>e(}V*1WG489Jl zcilRkV}38{)NS5>OvQZyNBpxZDgY%7csa;FpFPnh19vT(+BkJ6=pPYtyg{X0!#nSg8pvl zp1%*;!6V8}vK6HP)k^Rip%a2q*MZ)BTiD1a1xVaV{O7>*kc}qHxkrf_Y5czdDgQKa zzW<9mH>JQSF;&`gytt4GY4L>vitC0(1=1E|mi~!U_Pi`_^u^yQ{4@3s z!zs5eJ7wSF$tG1d}Ibm_v*|A%;(qk^#X`iibBpJM%g7IT&%__Gq5p;_jd zCMn~^#p$Vgf9Pip$Y%d{rrR0@>-S?{vvI90C~aZV@M<pOg z!V!mv=}^2|waVasM;$ws47TR89?DeESJF^2hN9h2+qkp@YVohhRyDwp%*cpe>YaI( zJIbYigOYgOvK#=8JxKW^z}J2TmQj}4#NvQtgq%Q*$m|OSsqp8KT@*q-m*$**DLKfe z>3R?#td|~{6A;)USY?*Z_}k&m`iB@Ay~ZblH`41eNQH-SbS}|Vl?PpKGD>Fdj zWq>Q!RXuXtN(J~#=KZ_oZHz3^#~3MpEXvxlcGUlEE??d7>M4~s96a=e)Sr782r;d> zjl>T>Txd93oEfM065{` z^Stj^jNw>r*QZ0+Iho-fXYcc}Jfl}wF(0z7?{EKDOX9zt{mh`SDmR=H8uh3~6f@|9 zd8M$X7B%iN{P_)RelhmanZ0t^a`nzjR^w%+tkN86$(7Izf-lFN!yHRYJzOevb>gGe zNp%)QgAhmIknwQ)cskUNC*g9x2u}Vv=f%V5KNZ$?Cxy4xo^(|xeGCDjE6L=*+PtFE zU6uu@@brt2*PZu2w>@Rm5{@;Uy7Q1+*{P``nK{8bl`38*dQm`R2fnyx+veE)5= ze&F{A{*0y0iH-U3k!p4#^2RIXp70bJ1f=djHk#POIp6C^b(Gi>Se919P`YOmh^4kZ>|5c@>o zphD8Yn3xNpEZS@So5Rie?*lx>?D14*Z_B{xIP%-O_p~X#b@8R6SLGZv#C$UzdLKTx zWbI!fCuE6IoMMWxVCwUr0UF3GJ)hEZnM0#3|96}Yg!A!Lo4u}n;9|n$S)3KfpBcRFPN4O zcUHfgOzjM;`#7^Fhq9h3T4TSV{GI1hVQQ;s6BaY-wahvM+)>!_&aadb^|F&0dt}~eW z{qe-yvF~IsK8fc< zZbPM3*1JEGvUij;cE3i*Z(SCiihKgqSTLWEO((|Tch}oz{NEg?>(ds~fIonTb9Yd| zLZSV+4`nvb1eO{`opNchjlSe`%`rb|@}FL?c0^et{n&HWD`NaH9B%&-b%f5L5yt=S zgRrEvbjL4RIu+;ky$<&OMdpLGDRh#o`lhHF(o(_8H?J3uHNABkzX7SsfYAdh*W3^h({K z8Irq{r4#HXigpw`bpGVAPgu+~cb_nvQx7U74{f;zlyz@V{WE>m{c8_`Ya4}>;-)u| z2YlAV%D!g_LoKVp|I)n-?)^^V$nSLmR@T_0BuVE))%|h-4-83MfzPhD9${N_BP+OI za?^N{gI&ee8kYGqR=ClPsNq`HK=+l|e(2V@MC)zQq9B@BpZ<__Ra)-8WrV4MP9v$; zW5%}-J|Uq5mz^A1-H;_=q5K3sXg08Jlf8Pq%)@_K3_r$|J$AbKwu>E1uI?~N72&wN zgLoF5wx~i92q@}qyc-$#d72W25Vpf!OQibKy6f(49o4W8FD9B||9xy5sQfbyXBl`} z70R<+@?-7Md@S$ANBRzMH3^`VPo;BS__|ROvPBRO?2+0Gazy~FNDDha^@Z_>@A4R@ zw_FGACL6)FiF8g!-y2QYDUApP)8_yqrVCutwnpIJx^H(wewQ7%U7Iby11A*epU9w; z=b-opklLF7$naz5x7gPT@*i%S4Bq^{KJubrvIs*W-k^iAu!KA=S2M5+G_~ z8C&hQCfr!6Fj{X?28}Uyr}FZ!9I|@wg@>9(q8FEgM3FM4{xyqmc$;R4Nkl@ZGp30|N^*GbG<#T&~59kq+fU7=RVSz&b zT?pZSE(D69RKA`BAkT9>XpBl37y_>U+LvYB_Xz#U786k;1+j^%0nw@plVPf4Q^01f zc}8(Df|1lE?4y z;mIu*gS;MaV0->Lf?7fmRW6Z|RkqWHBJOJK54G+sU0+$vFH5d>#YfoTkcN)|_&1L! ztHn|2FKQ#mOE>*X@E=Fv#JQT^bxn$Oujm*yPUp_K#8=N}aLBAH3=*n#5GT`b#Ji68 z{l}jBVmp+6KUN8qQ_zD{0%Gj^-`=XW|5A_`Y-qg21h+$&wX~QP0J+a~2%}#uGHS_O zSDKUUm1QxEA3(|{6?^4J?VJFQ6>!!-*|U338~$freY@^=NuL~9&C(w$M^YMx%RyRb zi4kliz$pAFD^q0+p;5U1zvkXNn$0zO8+JOLQk+hDYN*cInu?O5XenCrJPWGEh&eIS zR#i)@gLxi`n39+hW1^*~B4!~$s>UQj4WUB#p7tE)ecx}b@1Jk2cdg(37wbu$?B~Ak z=iYl?d+%$n5d$(m^st*i)VkzwWa3;?>*hGGMz-<8xmZ?#S72}t*u~22JwHvm2w$vm zsvB9Nzvf=_g&v>#XY0l*MNhkR#i<=&)k=hvl2Ylll7BtnS~djH&}}8J zYlBHCP}H@pi)`>fH@*B=`)Y8hKV!yamUk`SonKl*+>go@^1Goq_3L`7o!mtGWiR7F z|9{u^W3CL8OFVdY>kwvR_wMwM#KY)*JX^98?!HV;4w%RHk^O07^1&@qnu-{4kEYW* z4g)<;&&;a71bFrPax@U8ANXa5fxH(}o4B7}yj4reu2)zVgd=T6O51>X-AIO!3-nwS z#d%F~5z>#t2WeELO9`lr7QIh0h2?${cCe&}*nWsj9b=_KE7ttjT2i%IK{ z6*2d#zp;gyd+FMhnareazMEo;W&Ob}V6UCNnPZvZ>9;HsNlDKZp|NiE>V*-<1cXI3 z$ui3h*geO?`{%Fa*=)zDCyMOco%U{)LQucmrG66&m>8gVqj*x58rJc%p%LVl?KH;f z8*N^!Td`4V$W{TX(7!N3*EkZodM(o-D>nX}@?XZ*km9ggDU_ou&NIK_sNz8Lm7L^v z!sY>pK`epT{w#Hl_M)(eW_^K`TSO^Bt+iEu6;pUE-HC{yoJBQF5~GFfaCCK_j#nCw=;A3 z^x5gtqHvAQYv-1Sg+0Gsqg0o_bGQtI|GC@s|KUd4v z1mxoxq)G|-EKO{sDX%cI=h2IL^WQ#!=3}^aOl!n~jFPj)3+UG)H~RQPb+2zeUsN;30jXT59>~{@wwLI~7bw*a zjQh&O;aeb+pskqZJ*)Fp#&6tifV3F4g<+9->F?&igD=|!k-S+xm2tNpCTV0vbQC)| zq(|2m(JtBAg%rlErM>1CAp7_uS^Uw}1@dcYO$@=`#EZtV*F4%sI}5m9-tInrO6pCO zjayjJ$Ch<=xsd=)_2q>mM@1xxZtAEIiu&eTRs`)jo6J_s7Ic6gD2z%>SA)X zB+tqMDCgBbe%rI|G#O3J4Bway?!TKNB^z`0H^74^(#}m=;|kO`MS!*L_c#G*8>~(N zZQW#IU6lG+1ydwkQ7p=MXVNKZ)o&PFYl*sEV`UQ)8d>W@NC z(>5Gz05Vj{F<4`(8><+9Em6@+aes}jp_4)$_PvsLbRqn1r6v-{rrp1y%cTvvJVS{C zLN+vmJUk}f83VvbwH$?&ks%xIK;Nb?~jKpk~n5>OAmh0qx~zI%8#hf(t6@LM3Sq;$c_ zpmXo6<;gxXaC@*i30-`dV?YZvoBLQTYBu*@@zMMJ15gB} zNP)wCI^diS0ZpgBCm7$HV=rys|2Zgh#D1Cf{|tb?FX-ytKL&iiOp$+w)06+5bnt(` zg&X3RL-=9C&3=OlwL}4#vk#!|G1M{|AGhx3?;IRcC%mNQegZJ$CET&TE9+J_9>k0# z9jOALAdoIuq(dY&+mfFKzmXTMojY#gyseqzHXO~wW5zkRz( zhXVjCf?cbulEFn>{lvGc%n8!~s-+j}S=u+q-3L4{hkHjBFdpm6?dd7YBTruyK-O@5 zo9>M$ZF8|S7YzkJw~59z8xHULzx>4?m;8V8Hw>H=W=&N#*}>u7NY%2y;Fvdl_@|v} zy0If(WUY6$V3s!fz|;I;4ba)kbG&@*IOb+1#JK^iLfY|zg443NICzfy+E8%^xw>Av z=2;W(nbvS{oQsZWgTT}@qh-p-q1k5x?W<5Pfc7j&bkdG=v5#S8X1$lIgg)?iPY{P)`4M*T>PlP!f5F;#?&hXhcpKp zN`^Dh^=3$R52^keXmjyM{lv`II4e^~GNnkjM9Ph1)v>KSkoWd6w3RxrEb9p#k4K1fl zO}|_+@kPj7P_;o){k$|9TeGysS3`Oy#^(GlR@RXpX2~0^26ieDZIbJSSDGvGD5;nG zEa^I;$W4T8On~@mGh`T7rrq++r$W0$$-EF9yUwa?i?G$P8#wDbt1XW9G)0?-OyG9J z7Ikh>4w=<<`b?ewyWNmH-F14j(e&LUZKRB6DNWP3g+ogn;4%GZoLh+E$+WvCWB797 zHOaD03sh!{zz}8KcIMwIs7z!HNl_z-cEwM=@{N19Mx`}L7C#xDvFdNMsp+vpNvt+# z$t;EtCCmd#>}qUhXE)y$&;(JvPPWdYw%sLq6R06=(kaA%F-MAm9yp(*wYu@CwyvaB zBUobK`w)&a?u{HyqqoB_{Tm9&w0N+_mmg_YkP|oaf^;EcRNZ!nOF!i5BQF~W%^ky9 zXQb7*)}j0g%~R%i$Sv+g%6>31nZn#-y5n%yPE0q4ascVpVGKnUN0Xd*$iEbl$ zuf#!gyV;ZVu6HA=P#A`6npacw>$UkQSm~PVY6};+z6(}ri&?FKd<$-{ofM^-*)~;c z*O#dg#Y=~`$B%>|<+n&jI0ndqvNjc68OHJTu#PDA#lHu?-0F!8>Y*CO1kK*}9Pa0r z>FM=s&ETbd1Ua_6(n*YaEXBW&d( z3`9{duA|cMYZLuBZvuEqzf1dtNzv`hG6z9G(J84n(r{(i)E$S`5*K2WpvMqGY7DDB zC*ks0dNbS)R~8`oVopqEQqBQ`Ip30pz2=TLYEB%f)>A|aN)xA_)w?&o<1o1N>y@W~EVNEX$h~E;gDjn@mQ!z}2GVs=;~BhpjOa zsUo@e)T6Owmb7h8wRGGGJ@;Fa_|&SfDSqySvSFCDr>SZ)L8IWGvA1h}ZKN;H@Tj6xpQh1(4GAw~H{bY6FpJkbXUkU}Y2cmW8kP3+yIO8Mma~!Tv4OCL zw%(=&uBcY+@YlS2KUE6L#SM#>NL!!8nyZZq&3-k@6_w*HD&0KpH|}m`zKdj~SlZ{ zv*sSb+3kr64HXK=jw!&x&7EynP(~J4Bp+E#=NhN?EDy;NWFdyfh-cd;8mgD!es`_Q zZ7B0g!>zQ$y1DGC!!)4dE|0 zSU0F~7ns=vqBc6lwg~}VNs{hG4_vlQOibk?0u;TzUSWO1`#kJm_QXH$BtM)Iu#Qr;=PClzxJNuq~B#}Q4q zZ=tr83x}AV`ar+$($D2MNFZrRO6SdQ)oBYLWriXp+Kk$6r3BC{!9;Q26 zALLoOYE4EZ?RH#+@6;_~hD(axBj;VumR~6_UNvelePqbP@hBDOn9>xo`56E6gA(gr z&nl}kVi$>GuXELJm-bMF7bgnr7@^(iTpZ4o@dMrWVA%Dm$M9rbQsIrHQW=RMlsgfo zw4c>>ih%Snob3|zr(2Z@M4Tk@s0cnFL)#C+>)K1g2Cpi$rDyW6^!dQ*W!bc;cOR<#f~9%{rEKRj zC|>52d!R{kClvRr{=;(;5ls~9=%?JAW+vvH&sRQua`1y5eZD;1^3&b~HM#Ew8>qgH z-Ib};*56r_#bI}IcnI$&ykGfmZnjfd&xw#lx-)fT^e}ViFnBORg;}z}1+*SC>b}Pq zJL6IFaDCZxW-8a((_r^oj;Gx~5nZ^t1~p}l3r(zhNkKjt;&xvgDFfj1oh-O4n&fd7 z=)p8|bu=In1@#JeZVDJn2Vo4>1VJmT%*D7+W+7g{UwtZcR5?EBX0@yFZjOArm)S;% z2GVE6?R`D24vbU^sGHk?Db@FY!%KRG_HE65g=DI}S;Byew5@`>m~#?Pce_H<^!7m5 z-|ocr%oz`}_R2%Hj@Ac@p?#;QScTcrX4I_;Lt;QGZ1kvHz|)=%clV0Sjw}Ag@u$~! z&SK=m28i&k;V4FF2LC017=C;M16j_qlC23O#uctIJILJ+RIptTPqfxh?80j6TZMG5 zUdFl&ZcQ3S0wMBJ{8-URK>!ETKqRM%-^l8g6Q0n_xV-~Ol4@$MQ@-qp(;J^1ql{Zm zGmG->MtDlPwm{ZIw4o{8vV{d;V!K+mL1u%hd7F+6ci9TI+XmDfi~eYYz&Y&hQbR7+Oh@-_&bPBjOXXnkI!X@b7yv`qRG89ev&!&;(# z7x6G5G*j=^`k!H8qoM4Mx^_3p&i;CK6L>9LNv8YqhMl( zGjB;Bc4g8`>(`T_yW-WmZr|kK_}aJl`7MhToH_aFQKCd+p4#rxlRuD_(>;$4U2u zV64?u(Q3b(7MlnwSZ7#>=_vv7(D`BCQmeS7A!aFY9>Tk5x=;zLuc5!!N&jY5B&v{f zP0kCk*f3NE@y8xyJb?0qA8%n)l2Mfk(5B7TaLJ47KjxilC z_6rV+#-F%_h(5X6<+I3K+*DHP;jRzMR~;(mkg!1sB(>i3nhUGPz%n&v?}0C0NO38H zrOS|=o5un|OYx+$3j@t<1C`xu=k(IdD<{w(2b*!cUQ3BtaWY<>8_CkF!jFEKttTqy zXHErEJia#{SR~RJ>=USkrky^*bn+o4X^C zC5l_XYg=WvyV2gjtpDIbweFFI4TSpG#V<0TatObK3lql&bU#R4J}DG2>XQzn z*jT|zl$7Fr0tNMV@&jWDR=+wRzs274L;T4h^CVugH`Rds{8_z+@HofgN)Qxc)mXih zlSIKAU+iJ{ZJ};`V>&qOm^DsbWk)Q9;IhJen$jL_F*|7cS=r-gd0BDyaIZLU;LPLU zF}8K9CU`mNx!T3wrC>x%iE>}=VqS@und>M3-yO&C=ehrbliVklP9BCf7**(qAK|z& znhvy0mDE{90p((fLM zrubxd?(}i--*24uCqNbHJ9IClxs%|LD}`5dOjb1~YR%9}6kXj#e?;mBf0_H@UkNR5 zN@bPCd5-BCjMj8)uT~#Oeh879W{2Isp)={6A??5`Rx?tV_8rInLbe#2ry&lN;$Gt$ z?R^MjEhqMR=j^}t8{xPi(~7AGtMXj3DAXgjw{CWqAf5_w=$!f0L1w4j4$dj&A$&?i z5Gb?(`@V-a{s7>;IG`3ic9uF_r|BBl4#pv9e~Ystr!qJ7Z?FI9vJ-ZAoH9y@a3P-^ zmuhUcrX45(V*1?NTK@2$sK0*oT0D>8K3HglSneH1TR3J8+kmyD zSj;is9pFeg{;NsNiKYTbgh4>HLi5y1Y zt@Ubwq@FHQqi`H1t}IstP?U>&Zrx^E7iM~7Yf+X%@*y*aI1)YpK(o)epQruSqQ0_HIB$_2m2T9+D~5&V>H3jH+c%@cz4-DtLR{D@w;WV z8-?zdM$Y$Mt0wbCA`8lEjooEV_x^A+7Aqy)Nh}#ScmQB0)?(`7_Z`p&koC-tE{CSt zsEeYfpQrmsXYAt+u&TFrazH9Tjo$=qrsv0GsVFW)T|OM5c90inZP#Tua_s6~EAHt( zxqfv^{5_2OtAR3?t-(<${|U(^_?@1G2{c{OGKW_p1M%zBIlW$(_E_PqC+GE_O2$*) zneAOGNeWLg!vDTv9hJna*S%>9A67`+e$pK4{V4`C9lYAb=y_OIeO`76NIaYP?DMje zoD_akY=iT{m_voo>7nxhSH~K!0msenG0+11`p>RBBK`5$(-+95aCL1ja_+E~%7;?c zj%Ie<6xHCa`cBi50vk4AB%%kT)SUPBN*}B%c@bB#zgxt#sIs4UG(rDY2c|O4p|K)E z;`%eoWb~{m&}0;7iFL}xN9$LYtX9=9FP%Thf7I|-PniETDS7f*y_)C0B797c0|GaM z(v%NP!MiV4h$%k_>q^1FJv#=Uo}qbTKL!M_8i_)=kcoi2n!%S25V0~r*WRJ-QzfpR zuNR6)aOX_wHxi>v@fgGiY0hsrKthdtT(R$d85nEnsRKoVi=S?uUA&~&O_#Y~V}IOh z8MZF;jW6NSbIryjxFSj{PrkT0<7pD>ic@lw3D6WOQXKQ;*p)rm{G|ce%6f2H2iTN1 zc*FLttO6YN-1i)FgURi2;hzGsY#~JVaE;3572FQY@kJp}6Xfj8`S*8my(&$nKs`=} z#SeqJ{&~vieg*b*$)X+`J4`Lx0!K9c4Ycx*o?nlB2X5zdW3S`yL=Wy4HR^of2B-?J zGgxZTdCaxH3F#%)7dd%t^jyB-uVk2YuBT4w3W_4se$4O43(D&19iGMx`0k0iCP&Yi z49mi<3%?C#HExwhvF3ZIh!_@sUhdsgoM31I(+ zX8(`FpnuEz|3fN=;kzwcw~?Vhf@OUO89cWtCNuK7ak77k89*U1UTMp(CVZ%#M{1^T z+O4bhmwY?fsixcK|P5iMf}JCD|vt16tKK4qis3W-LpnM z%^OJhXF`DhM(zz@JFW}e%E37Y&d6?U5tRD`oW=t z51tCyaN(5j9jd;cXz)`+Gr_S-Y?&_;Q?Bl_B)WH3Km5Dh#iY#Mr%U4_VWFy&-=L7n;jYQ4{JeybytBGKEH&>i6_BiJC^4%t{y_R2(qq8f` zuwTHu^52NAl;pP?*Dj3dZJ&%u2dW4GP+!`?J+;|9OZttZOZFSt@J?pII24n$DQ#rI-Vc$05 z2DU`I?N&EOMm4X()6DH1xFovlxx{yVtbG{T`Q(UM$(!?UJq*8<-BWyvWZi!&-pZd}?&;J^QN<$FiSwr6MM>}qNj8Y#$)eK1oL;wZmAs~9?0&1%nF8Y(^por^v7Yt8m0L3_V@xk$J@ zTFKMM@;$UlJL=->_rynL`)6HHcgAk++0c69!{KbVFc?dQwSvZ8g*i8Sx-IulwP?ZC zsh?0OZO3mX9?bb{CiGRYq<1-zq`Z)D z?O4qeQ^^4*J!owA@pyWci5A1%x>E9W5xr5_d}C|D_a@6v&^DUr$^IoCG091w`i0iw z$)SQ)%_YmyzT};Ib245d*ZMuytIvi6W&3WHWmf*}ru!;?a8$?~qMxl`+>-VuMe=%~ zSh+5#JAT0VPg$sBq1e^J<2TgU#XMu?E<(H9q8kquzGE9_+^^prw{^?Bvw2~5ziUnk zYpdqEtoQDU_S`?m%i~j!(L>_bnRPTxih zjliC$)N^e~PvDFivVxp!?#>yPt)c#ol*j7r<@IAGhww1YnWOm%HzNH6Cj>dP3ohoe zXB%do1Y7w=J^es1U|+LYx;9|zNU&aIPc=#&RK^9hLe)b94($Ix2pFo)JZ2E4cxpd- zlB2{+DPT171EIl?;XAiwZF93^>~54VOLpaFBzZ;Xjlk83^BX4_YqKG9gT%^aWN9~H z>D?+srhL@4P3O&ZKYLuvbvw-{XgwOP0@rJy;mR4`eLr#f70NSD)GNmjgOr%21~dGz z)x9&XwPvcH!oEw|6|7DV`MD`#=t@@eg2}cbGfrH|xM4g5Oimm$>|xq!=dP#=eh_VJ zdNK2q_=w@?oxBmDxfyrf2JN&ZYBLoTeJ_vT)=F=@WH8G)SLphL2rpMw-GbLRDc8uN zDw=(s6N~|K|C5vIme2E;Y~J0vQln@m=2X#EMuflGtJJzFg@QhaPGWFnqYJLjV~8yKn|?&zUE0lJ*6vU4A=xSkd2WuJGk zx~u_-(p+h0)XoKl7txhA7d4+6vo8?+Ha3g54FWMg)?P>_Fglxb2ABV^;D6FXpV|b^ zg?!%KyuI@Up_(1$mHIK@J$t8kUFcy#Sn?=z6JRKz$S&^eryPdwK3U2lk$u|LI{$vN zwCqLRk|^5@vu@v^i3Zep3(2y6YR_H$ZgCN7Y$4GI{$`^&WLQ9nz7QgqTQ9Mo$O;`& zCIr)!Y})5&lqOFDf8Z46%eRQariD%ONBc`nUN8i*)cU$q*EZfNuhyLbx; z$0b*6y{Ok?w}Y`u2BWmm8pTC1V>U^`oZe`nKrw8eR-sG;=dzQ-&R(}Ud<KB<0L`7HZmy}WueuVt_^W6Tubou@y@>W`r%P8GqWjA3?HBeT9F5 zk60(nVG0{)lMr)sxRyO753+Atdi}0#Po9D0Bmmfp!qoTt$-W z=fc5tD38OvEwyg7_{gn{{b3{Kr*oz2iI0BVPOHD=L4)LSlKFYhQr4sM2$u7^$y}#y zfqa-|TS6A|7>3|(4jPQx-AdY}RI+5v{wjHMaL0Lwg?DE>IDn^rAJ;o$6i?X2pSI7P zL;gYe;*IbhEHKLD;Qu|L5XJ_tk=Pe|R7K zT#9%po#}Sk)0q_nQa%ljZ)2p83uCYI2yJC}-4=y<`kpeHGBxv4Ja|gsj}64RQE3CL zS*k{2L!qeuc5+X{q;+lI!pX)FUgOJ&s1J_~f&|Q#Jlk8N66~TrX@{H|tR=jr7CQHOaT~vXiEXKw2hn+*uB5yF4V)W!|!xS zAUi2}jHS?f5o>X1x3Eqj*6do-5U<_V^Kp{u2tsH}!~`Bmx&6Sb-8gP>042NommE^w zgn7vL(rUDW$(b>Mv&SOt*EgC86{K4aeU_aUq`yjdSKHy~ zD=PBV+3L{tiNDANk*%<<4P7N*%WKq;W_%*eS`lrT6pq9iceiKHg%CmR^&W}^J8AsR z$A}iU9g?cTlu`w9V2361fi+9q-Qj0aQgNDe*_Z^l*r!0@lI}&P<^-*Q;;zE2{cSfJh`qM&vVN;3p0Y}NBG#3#(lvomv+oTK~ zTTTvobe(JUKstI=W$w+&`2J)1(XSbQR@>ZPPeTy-mQB2ui{&ZGiNm>v*G+Y~zRRTt zeEnKg>4{k@sub4@{Zp1gT%6W~dv8Cd)&`q%+j4dUocuB?vtc-S2e~`%wxn~nk zr5?Qe_lg+p$$Qb_EC^Xy=fr)sN%lusGj-py zr94r#opP=Y`%a3l5B=GQt)6e$uo>(#-%0izZCt5q^i9nOhtalzS%Z|T>768Mzhe*Y z_4tNqlr?Ys{<;-mFjygO@MF#rFFu9E>(QUwH2`s*zagI>@-oeu}3O3JzDa zAN%W_d%oce%I)QwCYuJiR;@6hd!=KC-ygaEhMU*z;pfj{C3Z*N5e;8I2H11Q3$2eJ z?r5*Gh^3kgRtcSdb@lKMfxPX|g6PFJ_oJLx7vE|eI^1d1A-2ORVV+aBv2~j36dSf) zFh=+g;RfBSMst{HCi<9|oe6t5)S^ZC#qruJ5L?m2S|_`o`!6RBt>O%#589Gvw${#; zA1Q^sK6PtXpRqoKT(x!Ve>+5OuBC05j(Xku9H6HJ8~M08i$QUQqkuJeoag}yBcvaE7&n$fXthp!{*f27Tyeop#>D`1oJ$%}8;3+rxAPfmu_4s6pmXQSti zm2;ptLAnWHb`Sfp@&oLkSt#e55`AAyHy9q>wxRXJW+{?1P5&Ev`-c1asfD98S&VzW z`(^M@m2-?Eh!@u;?n`%$q~CdcJwPaF?Pq6oedhktzDwqu=W0Rjj7{D((4(wjVKU+g zHrTUV-9}T<6xV78O#f}FQf@e7AnCiWRG6EwT{opUM}bzF1rdAH77?nKDYl;bbl-;G zLh0PNH0TRMNBG3K-VxUz(NuLiJB)DtRTVoaXzGH5tqOMoR*iN`GM2r-7;Yg1!^59! zM(7Sj%U(b|K3cYH9zBq2!qzO|lbF@-j(@Ubk z=Zex%r8|_e>lAZ>><{}U6oXMWbET*ZF5 z`htJ=i`Vv(@FoT&lT_WRX5Ha6fG0M@dpS0^*^dnH`-g6ncFH<7wD zUQ6OON!bz8$;tbx_Gd3^XmLB@WJ8C9?aIp#A~}HToyo&<1%&;RkJay%VmCZZ-R*lV z`yGt#Ll>A6*3?{7rCY~D3U>5PbWntySHHwuV?gw`71Y{W?5VjBdO{%bE|&W;&g?v4 zTR8v=y=-KI){cIG-g_3*<5S0~Ee0-x?Jz*JaU#0ECaQtHrJrXE&Bau&3$4yDdHQ9cvkFyQb;*hAQ25a9vSWlLCrJaA73z<=H}qSR_x_ zEV<^2lZiRvrVKP)Ccj>r=Yq&FK$ zlxhvXy2fx{TAnXKnxewcX$pCrrJ{ruvC9}*MMzLxBzvgV#xBfdw32ANuDgSWXpGj_ zxqA<`3R8?OPJ!pf2I93~a7cLw#K$T)bR?7SK4@qd^|j)FBL` z3+G%dKuOcp^V9bZHv1#u^qkg+pxFc?#9SkxCi8rJ$9xF7TWhm%HTdpovNWObm2Ya9 zXFW90GmOm7z1t)cyf){uz?Uy#*I2a6YB>QfXs?B);;D*t#C(!fMnoCP*t&GHydDLl;pK zI{+T12JU<*?Ixu4>iRInobzloyhzk}pHSgaj4J=tc)71S>BEn%C-9dP0`79EjzKIh zsCxa?{K()ZgNT2M1c9Xz%LFXxpTn^(Flv9O)H%aHZElCG=biPNE$HcyA84d*1`T|_ zP@0rfHavbkGmC3BQXx2W7+1m-6m7&)l1#e9#ZQcBDn^ZVIn5H*8>c)O@mQN>H~m2S0& zG8ImcdcrDAf4^x8ADwp98h<5zmip1`HDis@)uZ zsD!%tEV1YbJ+qB`r=m_8VrQa=%@?dao*25iITW&o#fjwqbl_uAw^3~Mjl;}%BHv(5*W)`x)4P*#JJX3xy#)(r8i4$ne@1P;nGQgj?xzWTtojapdag$_Y*7;qRPPMu zE~a3)3m89TF98OjK!bnLq`H?$W+1r^4RULz$1lK!sb_tM|EH;g2+7P%5 z4%qp%F2|-0z^R?_XKDRm0*<-4=3EU*dzFYEzg9kc%I9UhOO`X3EO>Sum$dKirI8G#Ish$30u!)F$KhEd(zVA(QL4I|*bw5fgn z9zx}>kSRIp3s`-H!y%CZIWK4fdFEw;P)H_S>&0OUorIG<1e??1LDKz zuu|pCMfCkT3?K-m{L7Wxa?_>e-WLYxG|BNy7TfOXR+g9l5DS`(!sZNZg}m(YV?GCCpsp& z`CUc3Rr)E5-7gYM9#*2Ok;}OLkF%9*M26eNad>L+Z!pEv&bwvoCPlgz#g1a=Fx`9+ zevR<(%hX&4D8FQxqp|CzS4O%5Z3KbcU*NQ^v-tMq!Dj`B4ix}qK-^mULO1)<_jQ~b zX25SqVK^tBwQnZfAR;|=u^>x&ORVq+SAK$ToL?>3x?K-#b$a=kOn3F*I|T;*5Y$Z6 zPw4=C;#x~r+zXC-f!T>)_x6%`Pt2cIx0P2sCj`$ZvUip)bvr6aLv^?9O3Qqlzh8Fe&H_UGLNXOk1pKlelDB&lL zeLuojN@#m7I%cKMOVxI?#!x7{YK{8riUf_eZgCo5DCCb68s+3+L<~6-5?(@jn~=ji zu-5!kYOiiEA|on&+Bp+YZGe_vFAOw#`6NMs_fm%ZK?1ye11VVLyZDcu2|JN zMpYuDytA5|9&pNMWi5kj`5Vsbm0Yg?2*3P zw?B5{m%!e+Rf>UAByTUX9vw}}rR*$|ueYU^^r=-oRp^=Db}Y=A>t3N%%(TAtG{x+t z%AZDUxJ{g??M$>$@*VdNnIGUKhIMhYp<(mR^Fm0>hP6f*tDlL<;0?~6;|81<7# zUt1GFNY^uD?1*i{60CrfW) z*{gaT)#C;$y0{o`No{Z`SjtYp81uE{bFTCsz0B|9Rr~kRBRs8q0-o2;$EUfH4uP&8 zmTXL)R=gAulVjC=k-v>A$>R)FLa65n5sm{rbnHj++dflWBR(FWBW|J!u0tI8tz zB39{Y^?}s)QY>#x4h59b(uGu-xtuZ2IHEIpr)9*u^_-zPY*;;2 zi>MZCbMaaP4dE_PwRd>*-sx0uUH*&~hV4If#nq5MKQ?*x=4NwB_>Zn#@AlQvGT%}n zod^oQv%Asd7rg%Y4Rc;Hd)Q8SHKvjP=Qn(SRN^iDW$LfHtp`%Tt!;4E^rrZ^M`(De zGN&qA=;Ua%$|nBNOGq``Bu|Ry@;;Gkc09Rjz3g|?+!Eh`qt^yIU`An>et}eh z#k66ait{NLlSmj72Y`15A9US@<^st)0F`He`BGHdlPv%mOE!0qhrTDph#^9{;i zp&c4$o;(qXFhfc)#2=BtHmF|RpTlQ`&Qe6{*!n3q^$6w0Bo$es8Rx2?>*1>Gm4FqY zfn+&mqQb+h<(^d|6;t;I$MgkF5XM=}aCoOb4eBEC_<>Ay(*T9oR$lK8`wT=FBH4t= zbmdc=^k>EwQccVW)fJghP7nF1`1jY!+|#cqM&R`-#`XH4IDhjaSB8vFud|j}qAySF zm!E+({l*maD5Awy|2-V1)e6s6xaB6*&yi)d;^*$>_D=q@J9=)1U_Q7${Dz7$)r-1C z*UL~uj>15qb6qN1ZP%D%^;$|^4Wr~6|4tEy#qmyTfx29BA~8CO8cGg9-VC3rvKwNi z4tRcS?m2LCaojsHd{=Ma&|Xdqhgg9Vx&OP7vsv_;D{IXH#ymcPdC!mzBBBVte8J}%Jw-=LQ$Co6$ZF^*g=`}q9){1&&;htWhVbbK*n?}Ozxlc2#x9&!+hxSn(P1m17LZWgg@*Mm^DNR_R2VXPyjAiBQV>0E)u?lYc^YErQSkRvgcTQLF_IgsdmhWjr{aLGSy%Up(A6y&7)V{n z(6i0pJ?fGP71wglKK`yarC%Z8Z&Q~!GsQg}_;7>55OAzIWMt%SU!|DIclzH+c&uUJ zb2pZEJS-N^?lj+z6v4}H=6zoZt(u)ZJ(`#IbUjNM7ROC9n9mCL_0AroAXXMHzt_@P zr;eC>6#&5N{pp=gk6f|1(GN{dRVX41Dl<@j-Ew7|@u@lCx5IpsK67F*d^{YaQ4jlE zgHFvX_!yPCv>t1i67dns>Bi`rEIz_)pI#qzm^EFj*?Y+!vycE-$PF>0Zx@sat)^g4 zIa_s>XqapMN)37a>M-f9>m!fS^?MWZZy+}&xtxCa&FV>*#$p?$KQ@om4E zlk2(R>srHDK$q$`7tOzoBDR0#p+45_cr|EfU zrkjsc{6LziI9w+!v*%iJGRhkB z73x!QNr!The|Yh;f2$cELDd}+ZxlZOAFFPxRgqR2oRJBG-gi_CiFGS|wPxT|A*)^q zx+PiEShn}J*`Q9HuKr0rtw(cY)X-V7rDJA%S8NAoLp%qJB{L1%?nx%y10YANXn`j* z&ckW)r3g>S07J8x?)b2Vl_aKQa{FEX4#AMI!gQ-}sw5LRKdX3EY1CiwA0Y+>7Wc#g z9%0|Uy)ERu`LBLz(ai2ot$QWJCH)82iJTj&l3jCSJoTdDkg=UY`dZWOkNxnYdlHHP zXMg`gQ|)U9O;R2lgI!Ax*w3edc^qX3{SQdVkxGJU$BJaB6xiW>2yuy>^3j>d)i0EQ zc3sww@tP5-y?d3P1hoI2`r)v#HnY(j+q;${f9(GQ(%;v=dswL77qb%4`&-jKP}jSM JQni2j{{Rh-&3XU; literal 0 HcmV?d00001 diff --git a/docs/HowTo/running-an-agent.md b/docs/HowTo/running-an-agent.md new file mode 100644 index 0000000..868ce22 --- /dev/null +++ b/docs/HowTo/running-an-agent.md @@ -0,0 +1,44 @@ +### Local development + +Local development means running the Sample on 'your' workstation for development and debugging purposes. + +Local development begins with utilizing the Bot Framework Emulator and Visual Studio on your workstation to build and run your Agent while debugging from Visual Studio. + +If you do not wish to configure authentication at this time, Skip to "Running an Agent for the first time". + +### Authentication and Local Development + +There are two ways to support local development, depending on what your working with. + +**- Anonymous or No-Authentication** + +While this is the simplest way to get started and run your Agent, there are important limitations to consider. + +When running in Anonymous mode, your Agent will not be able to create authentication tokens to access other services, Nor can it interact with Azure Bot Services. Therefor, Anonymous Mode is there to support testing basic operational features of the Agent and to work with and test various events that your Agent can process. It should be used only during initial development. + +> [!IMPORTANT] +> A sample is configured, by default, for Anonymous Authentication. Before using this sample with Azure Bot Service, it is necessary to configure authentication. + +**- Configured Authentication with Entra ID.** + +Configuring authentication for your Agent will allow it to communicate with Azure Bot Services and create access tokens for other services. + +However there are a few key items to consider when configuring authentication for your Agent. + +1. Both Azure Bot Service's Bot registration and your Agent Must use the same ClientID for creating an authentication token. + 1. By default Azure Bot Service will create a Managed Identity when you initially configure the bot registration. **This type of identity cannot currently be used when working with Local Development**. + 1. To successfully use **Local Development** with an Azure bot Service Identity, you must utilize either **Client Secret** or **Client Certificate** based authentication. +1. Once you are ready to deploy to Azure App Services, you can use all types of Identity supported. + 1. Its often more efficient to have an Azure Bot Service Registration for Local Development and a separate one configured for your App Services Deployment. + +## Running an Agent for the first time + +To run the Bot1 Sample for the first time: + +1. Open the Bot1 Sample in Visual Studio 2022 +1. Run it in Debug Mode (F5) +1. A blank web page will open, note down the URL which should be similar too `https://localhost:65349/` +1. Open the [BotFramework Emulator](https://github.com/Microsoft/BotFramework-Emulator/releases) + 1. Click **Open Bot** + 1. In the bot URL field input the URL you noted down from the web page and add /api/messages to it. It should appear similar to `https://localhost:65349/api/messages` + 1. Click **Connect** diff --git a/docs/index.md b/docs/index.md index 64c17df..f94b7d3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,2 +1,11 @@ -# Microsoft Agents -Content coming soon! +# Microsoft 365 Agents Framework + +## Activity Protocol Specifications +- [Activity Protocol - Activity](./ActivityDefintion/protocol-activity.md) +- [Activity Protocol - Cards](./ActivityDefintion/protocol-cards.md) + +## Running and configuring an Agent +- [Running an Agent](./HowTo/running-an-agent.md) +- [Creating an Azure Bot - Single Tenant](./HowTo/azurebot-create-single-secret.md) +- [Creating an Azure Bot - Managed Identity](./HowTo/azurebot-create-msi.md) +- [Configuring OAuth for an Agent](./HowTo/azurebot-user-authentication-fic.md) \ No newline at end of file From c56942dc78b39a835fb97d6722a71e09a5d9395b Mon Sep 17 00:00:00 2001 From: Tracy Boehrer Date: Thu, 14 Nov 2024 09:44:32 -0600 Subject: [PATCH 2/7] Added MSAL config to index --- docs/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index f94b7d3..96204fd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -8,4 +8,5 @@ - [Running an Agent](./HowTo/running-an-agent.md) - [Creating an Azure Bot - Single Tenant](./HowTo/azurebot-create-single-secret.md) - [Creating an Azure Bot - Managed Identity](./HowTo/azurebot-create-msi.md) -- [Configuring OAuth for an Agent](./HowTo/azurebot-user-authentication-fic.md) \ No newline at end of file +- [Configuring OAuth for an Agent](./HowTo/azurebot-user-authentication-fic.md) +- [MSAL Configuration](/HowTo/MSALAuthConfigurationOptions.md) \ No newline at end of file From 2ff5da71f26eeb5a9686e5b4239d130dabe622ff Mon Sep 17 00:00:00 2001 From: Tracy Boehrer Date: Thu, 14 Nov 2024 09:46:14 -0600 Subject: [PATCH 3/7] Renamed Specifications header in index --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 96204fd..80a2d4a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,6 @@ # Microsoft 365 Agents Framework -## Activity Protocol Specifications +## Specifications - [Activity Protocol - Activity](./ActivityDefintion/protocol-activity.md) - [Activity Protocol - Cards](./ActivityDefintion/protocol-cards.md) From ced0864153d4ea6bd1cde3bce963ea42ca4930fd Mon Sep 17 00:00:00 2001 From: Tracy Boehrer Date: Thu, 14 Nov 2024 10:14:05 -0600 Subject: [PATCH 4/7] Corrections based on feedback --- docs/HowTo/MSALAuthConfigurationOptions.md | 2 +- docs/HowTo/azurebot-user-authentication-fic.md | 5 +---- docs/HowTo/running-an-agent.md | 1 - 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/HowTo/MSALAuthConfigurationOptions.md b/docs/HowTo/MSALAuthConfigurationOptions.md index a9ff48d..044d45b 100644 --- a/docs/HowTo/MSALAuthConfigurationOptions.md +++ b/docs/HowTo/MSALAuthConfigurationOptions.md @@ -63,7 +63,7 @@ These settings are: |ClientId |String |Null |ClientId (AppId) to use when creating the Access token.| |ClientSecret |string |Null |When AuthType is ClientSecret, Is Secret associated with the client, this should only be used for testing and development purposes. | -#### Example for ClientSecret for Azure Bot Service +#### Example for MultiTenant ClientSecret for Azure Bot Service ```json "Connections": { diff --git a/docs/HowTo/azurebot-user-authentication-fic.md b/docs/HowTo/azurebot-user-authentication-fic.md index 37b147e..bc7ac92 100644 --- a/docs/HowTo/azurebot-user-authentication-fic.md +++ b/docs/HowTo/azurebot-user-authentication-fic.md @@ -1,13 +1,11 @@ -# Add FIC Authentication to a bot +# Add Federated Credentials Authentication to a bot The Azure AI Bot Service facilitates the development of bots that can access online resources that require user authentication. Your bot doesn't need to manage authentication tokens because Azure does it for you using OAuth 2.0 to generate a token based on each user's credentials. Your bot uses the token generated by Azure to access those resources. In this way, the user doesn't have to provide ID and password to the bot to access a secured resource but only to a trusted identity provider. -> [!IMPORTANT] > Web Chat and Direct Line considerations: You need to use Direct Line with enhanced authentication enabled to mitigate security risks when connecting to a bot using the Web Chat control. For more information, see [Direct Line enhanced authentication](https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-security-enhanced?view=azure-bot-service-4.0). To setup OAuth on bot, [register an Azure Bot](azurebot-create.md) if you haven't done so already. -> [!IMPORTANT] > Whenever you register a bot in Azure, it gets assigned an Microsoft Entra ID application. However, this application secures channel-to-bot access. You need an additional Microsoft Entra ID application for each external secured resource you want the bot to access on behalf of the user. ## Microsoft Entra ID identity service @@ -26,7 +24,6 @@ You can use one of these three identity services: This section shows how to create an Microsoft Entra ID identity provider that uses OAuth 2.0 to authenticate the bot for Graph. -> [!TIP] > You'll need to create and register the Microsoft Entra ID application in a tenant in which you can consent to delegate permissions requested by an application. 1. Open the Microsoft Entra ID panel in the Azure portal. If you aren't in the correct tenant, select Switch directory to switch to the correct tenant. (For information on how to create a tenant, see Access the portal and create a tenant.) diff --git a/docs/HowTo/running-an-agent.md b/docs/HowTo/running-an-agent.md index 868ce22..b6a203e 100644 --- a/docs/HowTo/running-an-agent.md +++ b/docs/HowTo/running-an-agent.md @@ -16,7 +16,6 @@ While this is the simplest way to get started and run your Agent, there are impo When running in Anonymous mode, your Agent will not be able to create authentication tokens to access other services, Nor can it interact with Azure Bot Services. Therefor, Anonymous Mode is there to support testing basic operational features of the Agent and to work with and test various events that your Agent can process. It should be used only during initial development. -> [!IMPORTANT] > A sample is configured, by default, for Anonymous Authentication. Before using this sample with Azure Bot Service, it is necessary to configure authentication. **- Configured Authentication with Entra ID.** From 08ca8821d25f18688cf2b30e45fa2f4a4770dd0c Mon Sep 17 00:00:00 2001 From: Tracy Boehrer Date: Thu, 14 Nov 2024 10:40:19 -0600 Subject: [PATCH 5/7] More feedback changes to Pages docs --- docs/HowTo/MSALAuthConfigurationOptions.md | 8 ++++++-- docs/index.md | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/HowTo/MSALAuthConfigurationOptions.md b/docs/HowTo/MSALAuthConfigurationOptions.md index 044d45b..7d51fa4 100644 --- a/docs/HowTo/MSALAuthConfigurationOptions.md +++ b/docs/HowTo/MSALAuthConfigurationOptions.md @@ -11,6 +11,8 @@ Each access token can be created using one of the following auth types: - User Managed Identity - System Managed Identity +> Refer to [Configuration in ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-8.0) for recommendations for configuration and secrets best practices. + ### General Configuration There are several shared configuration options that control general settings for acquiring tokens from Microsoft Entra Identity. @@ -158,11 +160,13 @@ When using Auth type **SystemManagedIdentity**, Client ID is ignored and the sys |AuthType |Type |Default Value |Description | |--------------|------|---------------|-------------| |ClientId |String |Null |ClientId (AppId) to use when creating the Access token.| -|CertSubjectName |String |Null |When AuthType is CertificateSubjectName, this is the subject name that is sought| -|CertStoreName |String |"My" |When AuthType is either CertificateSubjectName or Certificate, Indicates which certificate store to look in| +|CertSubjectName |String |Null |This is the subject name that is sought| +|CertStoreName |String |"My" |Indicates which certificate store to look in| |ValidCertificateOnly |bool |True |Requires the certificate to have a valid chain. | |SendX5C |bool |False |Enables certificate auto rotation with appropriate configuration. | +> Certificates should stored in the **Current User** certificate store. + #### Example for CertificateSubjectName for SN+I ```json diff --git a/docs/index.md b/docs/index.md index 80a2d4a..07de900 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,4 +9,4 @@ - [Creating an Azure Bot - Single Tenant](./HowTo/azurebot-create-single-secret.md) - [Creating an Azure Bot - Managed Identity](./HowTo/azurebot-create-msi.md) - [Configuring OAuth for an Agent](./HowTo/azurebot-user-authentication-fic.md) -- [MSAL Configuration](/HowTo/MSALAuthConfigurationOptions.md) \ No newline at end of file +- [DotNet Agents SDK - MSAL Configuration](/HowTo/MSALAuthConfigurationOptions.md) \ No newline at end of file From 38231752e0b76e47498d130cef6aac9609bf5c0d Mon Sep 17 00:00:00 2001 From: Tracy Boehrer Date: Thu, 14 Nov 2024 11:41:24 -0600 Subject: [PATCH 6/7] More Pages docs feedback changes --- docs/ActivityDefintion/protocol-activity.md | 2 ++ docs/ActivityDefintion/protocol-cards.md | 2 ++ docs/HowTo/MSALAuthConfigurationOptions.md | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/ActivityDefintion/protocol-activity.md b/docs/ActivityDefintion/protocol-activity.md index fd09e3a..22947f6 100644 --- a/docs/ActivityDefintion/protocol-activity.md +++ b/docs/ActivityDefintion/protocol-activity.md @@ -1,5 +1,7 @@ # Activity Protocol -- Activity +Version: 3.1.13 + ## Abstract The Activity Protocol schema is an application-level representation of conversational actions made by humans and automated software. The schema includes provisions for communicating text, multimedia, and non-content actions like social interactions and typing indicators. diff --git a/docs/ActivityDefintion/protocol-cards.md b/docs/ActivityDefintion/protocol-cards.md index f9ebf51..d68da12 100644 --- a/docs/ActivityDefintion/protocol-cards.md +++ b/docs/ActivityDefintion/protocol-cards.md @@ -1,5 +1,7 @@ # Activity Protocol -- Cards +Version: 3.1.13 + ## Abstract The Activity Protocol Cards schema is an application-level representation of interactive cards for use within chat and other applications. The schema includes provisions for controlling the content, layout, and interactive elements of a card. diff --git a/docs/HowTo/MSALAuthConfigurationOptions.md b/docs/HowTo/MSALAuthConfigurationOptions.md index 7d51fa4..f354a42 100644 --- a/docs/HowTo/MSALAuthConfigurationOptions.md +++ b/docs/HowTo/MSALAuthConfigurationOptions.md @@ -1,4 +1,4 @@ -# MSAL Authentication provider +# DotNet MSAL Authentication provider The MSAL authentication provider is a utility aid you on creating access tokens for bot clients and external services from the Microsoft Agents Framework self hosted Agent. @@ -15,7 +15,7 @@ Each access token can be created using one of the following auth types: ### General Configuration -There are several shared configuration options that control general settings for acquiring tokens from Microsoft Entra Identity. +There are several shared configuration options that control general settings for acquiring tokens from Microsoft Entra ID. These settings are: From 86763506d0a14ecc2e717749b6535061fc5146d3 Mon Sep 17 00:00:00 2001 From: Tracy Boehrer Date: Thu, 14 Nov 2024 12:08:26 -0600 Subject: [PATCH 7/7] Removed Activity specs until we resolve location and version information --- docs/ActivityDefintion/protocol-activity.md | 1739 ------------------- docs/ActivityDefintion/protocol-cards.md | 489 ------ docs/index.md | 4 - 3 files changed, 2232 deletions(-) delete mode 100644 docs/ActivityDefintion/protocol-activity.md delete mode 100644 docs/ActivityDefintion/protocol-cards.md diff --git a/docs/ActivityDefintion/protocol-activity.md b/docs/ActivityDefintion/protocol-activity.md deleted file mode 100644 index 22947f6..0000000 --- a/docs/ActivityDefintion/protocol-activity.md +++ /dev/null @@ -1,1739 +0,0 @@ -# Activity Protocol -- Activity - -Version: 3.1.13 - -## Abstract - -The Activity Protocol schema is an application-level representation of conversational actions made by humans and automated software. The schema includes provisions for communicating text, multimedia, and non-content actions like social interactions and typing indicators. - -This schema is used within the Azure Bot Service and is implemented by Microsoft chat systems and by interoperable bots and clients from many sources. - -## Table of Contents - -1. [Introduction](#introduction) -2. [Basic activity structure](#basic-activity-structure) -3. [Message activity](#message-activity) -4. [Contact relation update activity](#contact-relation-update-activity) -5. [Conversation update activity](#conversation-update-activity) -6. [End of conversation activity](#end-of-conversation-activity) -7. [Event activity](#event-activity) -8. [Invoke activity](#invoke-activity) -9. [Installation update activity](#installation-update-activity) -10. [Message delete activity](#message-delete-activity) -11. [Message update activity](#message-update-activity) -12. [Message reaction activity](#message-reaction-activity) -13. [Suggestion activity](#suggestion-activity) -13. [Trace activity](#trace-activity) -14. [Typing activity](#typing-activity) -15. [Handoff activity](#handoff-activity) -16. [Command activity](#command-activity) -17. [Command result activity](#command-result-activity) -18. [Complex types](#complex-types) -19. [References](#references) -20. [Appendix I - Changes](#appendix-i---changes) -21. [Appendix II - Non-IRI entity types](#appendix-ii---non-iri-entity-types) -22. [Appendix III - Protocols using the Invoke activity](#appendix-iii---protocols-using-the-invoke-activity) -23. [Appendix IV - Priming format](#appendix-iv---priming-format) -24. [Appendix V - Caller ID values](#appendix-v---caller-id-values) -25. [Appendix VI - Protocols using the Command activity](#appendix-vi---protocols-using-the-command-activity) - -## Introduction - -### Overview - -The Activity Protocol schema represents conversational behaviors made by humans and automated software within chat applications, email, and other text interaction programs. Each activity object includes a type field and represents a single action: most commonly, sending text content, but also including multimedia attachments and non-content behaviors like a "like" button or a typing indicator. - -This document provides meanings for each type of activity, and describes the required and optional fields that may be included. It also defines the roles of the client and server, and provides guidance on which fields are mastered by each participant, and which may be ignored. - -There are three roles of consequence in this specification: clients, which send and receive activities on behalf of users; bots, which send and receive activities and are typically automated; and the channel, which stores and forwards activities between clients and bots. - -Although this specification requires activities to be transmitted between roles, the exact nature of that transmission is not described here. - -For compactness, visual interactive cards are not defined in this specification. Instead, these are defined within the [Activity Protocol Cards](protocol-cards.md) [[9](#references)] and [Adaptive Cards](https://adaptivecards.io) [[10](#references)] specifications. These cards, and other undefined card types, may be included as attachments within Activity Protocol activities. - -### Requirements - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119) [[1](#references)]. - -An implementation is not compliant if it fails to satisfy one or more of the MUST or REQUIRED level requirements for the protocols it implements. An implementation that satisfies all the MUST or REQUIRED level and all the SHOULD level requirements for its protocols is said to be "unconditionally compliant"; one that satisfies all the MUST level requirements but not all the SHOULD level requirements for its protocols is said to be "conditionally compliant." - -Explanatory text describes the intent. Editors are encouraged to omit normative statements from explanatory text. All [numbered requirements](#numbered-requirements) are normative. All examples are non-normative. - -### Numbered requirements - -Lines beginning with markers of the form `AXXXX` are specific requirements designed to be referenced by number in discussion outside of this document. They do not carry any more or less weight than normative statements made outside of `AXXXX` lines. - -`A1000`: Editors of this specification MAY add new `AXXXX` requirements. They SHOULD find numeric `AXXXX` values that preserve the document's flow. - -`A1001`: Editors MUST NOT renumber existing `AXXXX` requirements. - -`A1002`: Editors MAY delete or revise `AXXXX` requirements. If revised, editors SHOULD retain the existing `AXXXX` value if the topic of the requirement remains largely intact. - -`A1003`: Editors SHOULD NOT reuse retired `AXXXX` values. A list of deleted values MAY be maintained at the end of this document. - -### Terminology - -activity -> An action expressed by a bot, a channel, or a client that conforms to the Activity schema. - -channel -> Software that sends and receives activities, and transforms them to and from chat or application behaviors. Channels are the authoritative store for activity data. - -bot -> Software that sends and receives activities, and generates automated, semi-automated, or entirely manual responses. Bots have endpoints that are registered with channels. - -client -> Software that sends and receives activities, typically on behalf of human users. Clients do not have endpoints. - -sender -> Software transmitting an activity. - -receiver -> Software accepting an activity. - -endpoint -> A programmatically addressable location where a bot or channel can receive activities. - -address -> An identifier or address where a user or bot can be contacted. - -field -> A named value within an activity or nested object. - -### Overall organization - -The activity object is a flat list of name/value pairs, some of which are primitive objects, and some of which are complex (nested). The activity object is commonly expressed in the JSON format, but can also be projected into in-memory data structures in .Net or JavaScript. - -The activity `type` field controls the meaning of the activity and the fields contained within it. Depending on the role that a participant is playing (client, bot, or channel), each field is mandatory, optional, or ignored. For example, the `id` field is mastered by the channel, and is mandatory in some circumstances, but ignored if it is sent by a bot. - -Fields that describe the identity of the activity and any participants, such as the `type` and `from` fields, are shared across all activities. In many programming languages, it is convenient to organize these fields on a core base type from which other, more specific, activity types derive. - -When storing or transmitting activities, some fields may be duplicated within the transport mechanism. For example, if an activity is transmitted via HTTP POST to a URL that includes the conversation ID, the receiver may infer its value without requiring it to be present within the activity body. This document merely describes the abstract requirements for these fields, and it is up to the controlling protocol to establish whether the values must be explicitly declared or if implicit or inferred values are allowed. - -When a bot or client sends an activity to a channel, it is typically a request for the activity to be recorded. When a channel sends an activity to a bot or client, it is typically a notification that the activity has already been recorded. - -## Basic activity structure - -This section defines the requirements for the basic structure of the activity object. - -Activity objects include a flat list of name/value pairs, called fields. Fields may be primitive types. JSON is used as the common interchange format and although not all activities must be serialized to JSON at all times, they must be serializable to it. This allows implementations to rely on a simple set of conventions for handling known and unknown activity fields. - -`A2001`: Activities MUST be serializable to the JSON format defined in [RFC 4627](http://www.ietf.org/rfc/rfc4627.txt) [[14](#references)], including adherence to e.g. field uniqueness constraints. - -`A2002`: Receivers MAY allow improperly-cased field names, although this is not required. Receivers MAY reject activities that do not include fields with the proper casing. - -`A2004`: Unless otherwise noted, senders SHOULD NOT include empty string values for string fields. - -`A2005`: Unless otherwise noted, senders MAY include additional fields within the activity or any nested complex objects. Receivers MUST accept fields they do not understand. - -`A2006`: Receivers SHOULD accept events of types they do not understand. - -This document defines data types for fields used within the Activity object. These type definitions include a syntactic type (e.g. `string` or `complex type`) and in the case of strings, an optional format (e.g. [ISO 8601 date time format](https://www.iso.org/iso-8601-date-and-time-format.html) [[2](#references)]). - -`A2007`: Senders MUST adhere to data type definitions contained in this document. - -`A2003`: Receivers SHOULD reject activities that contain field values whose types do not match the data types described in this specification. - -### Type - -The `type` field controls the meaning of each activity, and are by convention short strings (e.g. "`message`"). Senders may define their own application-layer types, although they are encouraged to choose values that are unlikely to collide with future well-defined values. If senders use URIs as type values, they SHOULD NOT implement URI ladder comparisons to establish equivalence. - -`A2010`: Activities MUST include a `type` field, with string value type. - -`A2011`: Two `type` values are equivalent only if they are ordinally identical. - -`A2012`: A sender MAY generate activity `type` values not defined in this document. - -`A2013`: A channel SHOULD reject activities of type it does not understand. - -`A2014`: A bot or client SHOULD ignore activities of type it does not understand. - -### Channel ID - -The `channelId` field establishes the channel and authoritative store for the activity. The value of the `channelId` field is of type string. - -`A2020`: Channel Activities MUST include a `channelId` field, with string value type. - -`A2021`: Two `channelId` values are equivalent only if they are ordinally identical. - -`A2022`: A channel MAY ignore or reject any activity it receives without an expected `channelId` value. - -### ID - -The `id` field establishes the identity for the activity once it has been recorded in the channel. Activities in-flight that have not yet been recorded do not have identities. Not all activities are assigned identities (for example, a [typing activity](#typing-activity) may never be assigned an `id`.) The value of the `id` field is of type string. - -`A2030`: Channels SHOULD include an `id` field if it is available for that activity. - -`A2031`: Clients and bots SHOULD NOT include an `id` field in activities they generate. - -For ease of implementation, it should be assumed that other participants do not have sophisticated knowledge of activity IDs, and that they will use only ordinal comparison to establish equivalency. - -For example, a channel may use hex-encoded GUIDs for each activity ID. Even though GUIDs encoded in uppercase are logically equivalent to GUIDs encoded in lowercase, senders SHOULD NOT use these alternative encodings when possible. The normalized version of each ID is established by the authoritative store, the channel. - -`A2032`: When generating `id` values, senders SHOULD choose values whose equivalency can be established by ordinal comparison. However, senders and receivers MAY allow logical equivalence of two values that are not ordinally equivalent if they have special knowledge of the circumstances. - -The `id` field is designed to allow de-duplication, but this is prohibitive in most applications. - -`A2033`: Receivers MAY de-duplicate activities by ID, however senders SHOULD NOT rely on receivers performing this de-duplication. - -### Timestamp - -The `timestamp` field records the exact UTC time when the activity occurred. Due to the distributed nature of computing systems, the important time is when the channel (the authoritative store) records the activity. The time when a client or bot initiated an activity may be transmitted separately in the `localTimestamp` field. The value of the `timestamp` field is an [ISO 8601 date time format](https://www.iso.org/iso-8601-date-and-time-format.html) [[2](#references)] encoded datetime within a string. - -`A2040`: Channels SHOULD include a `timestamp` field if it is available for that activity. - -`A2041`: Clients and bots SHOULD NOT include a `timestamp` field in activities they generate. - -`A2042`: Clients and bots SHOULD NOT use `timestamp` to reject activities, as they may appear out-of-order. However, they MAY use `timestamp` to order activities within a UI or for downstream processing. - -`A2043`: Senders SHOULD always use encode the value of `timestamp` fields as UTC, and they SHOULD always include Z as an explicit UTC mark within the value. - -### Local timezone -The `localTimezone` field expresses the timezone where the activity was generated. The value of the `localTimezone` field is a time zone name (zone entry) per the IANA Time Zone database. [[14](#references)] - -`A2055`: Clients MAY include the `localTimezone` in their activities. - -`A2056`: Channels SHOULD preserve `localTimezone` when forwarding activities from a sender to recipient(s). - -`A2057`: A receiver MAY ignore `localTimezone` values it does not understand. - -### Local timestamp - -The `localTimestamp` field expresses the datetime and timezone offset where the activity was generated. This may be different from the UTC `timestamp` where the activity was recorded. The value of the `localTimestamp` field is an ISO 8601 [[2](#references)] encoded datetime within a string. - -When both the `localTimezone` and `localTimestamp` fields are included in an activity, the interpretation is to first convert the value of the localTimestamp to UTC and then apply a conversion to the local timezone. - -`A2050`: Clients and bots MAY include the `localTimestamp` field in their activities. They SHOULD explicitly list the timezone offset within the encoded value. - -`A2051`: Channels SHOULD preserve `localTimestamp` when forwarding activities from a sender to recipient(s). - -### From - -The `from` field describes which client, bot, or channel generated an activity. The value of the `from` field is a complex object of the [Channel account](#channel-account) type. - -The `from.id` field identifies who generated an activity. Most commonly, this is another user or bot within the system. In some cases, the `from` field identifies the channel itself. - -`A2060`: Channels MUST include the `from` and `from.id` fields when generating an activity. - -`A2061`: Bots and clients SHOULD include the `from` and `from.id` fields when generating an activity. A channel MAY reject an activity due to missing `from` and `from.id` fields. - -The `from.name` field is optional and represents the display name for the account within the channel. Channels SHOULD include this value so clients and bots can populate their UIs and backend systems. Bots and clients SHOULD NOT send this value to channels that have a central record of this store, but they MAY send this value to channels that populate the value on every activity (e.g. an email channel). - -`A2062`: Channels SHOULD include the `from.name` field if the `from` field is present and `from.name` is available. - -`A2063`: Bots and clients SHOULD NOT include the `from.name` field unless it is semantically valuable within the channel. - -### Recipient - -The `recipient` field describes which client or bot is receiving this activity. This field is only meaningful when an activity is transmitted to exactly one recipient; it is not meaningful when it is broadcast to multiple recipients (as happens when an activity is sent to a channel). The purpose of the field is to allow the recipient to identify themselves. This is helpful when a client or bot has more than one identity within the channel. The value of the `recipient` field is a complex object of the [Channel account](#channel-account) type. - -`A2070`: Channels MUST include the `recipient` and `recipient.id` fields when transmitting an activity to a single recipient. - -`A2071`: Bots and clients SHOULD NOT include the `recipient` field when generating an activity. The exception to this is when sending a [Suggestion activity](#suggestion-activity), in which case the recipient MUST identify the user that should receive the suggestion. - -The `recipient.name` field is optional and represents the display name for the account within the channel. Channels SHOULD include this value so clients and bots can populate their UIs and backend systems. - -`A2072`: Channels SHOULD include the `recipient.name` field if the `recipient` field is present and `recipient.name` is available. - -### Conversation - -The `conversation` field describes the conversation in which the activity exists. The value of the `conversation` field is a complex object of the [Conversation account](#conversation-account) type. - -`A2080`: Channels, bots, and clients MUST include the `conversation` and `conversation.id` fields when generating an activity. - -The `conversation.name` field is optional and represents the display name for the conversation if it exists and is available. - -`A2081`: Channels SHOULD include the `conversation.name` and `conversation.isGroup` fields if they are available. - -`A2082`: Bots and clients SHOULD NOT include the `conversation.name` field unless it is semantically valuable within the channel. - -`A2083`: Bots and clients SHOULD NOT include the `conversation.isGroup` and `conversation.converationType` fields in activities they generate. - -`A2084`: Channels SHOULD include the `conversation.conversationType` field if more than one value is defined for the channel. Channels SHOULD NOT include the field if there is only one possible value. - -### Reply to ID - -The `replyToId` field identifies the prior activity to which the current activity is a reply. This field allows threaded conversation and comment nesting to be communicated between participants. `replyToId` is valid only within the current conversation. (See [relatesTo](#relates-to) for references to other conversations.) The value of the `replyToId` field is a string. - -`A2090`: Senders SHOULD include `replyToId` on an activity when it is a reply to another activity. - -`A2091`: A channel MAY reject an activity if its `replyToId` does not reference a valid activity within the conversation. - -`A2092`: Bots and clients MAY omit `replyToId` if it knows the channel does not make use of the field, even if the activity being sent is a reply to another activity. - -### Entities - -The `entities` field contains a flat list of metadata objects pertaining to this activity. Unlike attachments (see the [attachments](#attachments) field), entities do not necessarily manifest as user-interactable content elements, and are intended to be ignored if not understood. Senders may include entities they think may be useful to a receiver even if they are not certain the receiver can accept them. The value of each `entities` list element is a complex object of the [Entity](#entity) type. - -`A2100`: Senders SHOULD omit the `entities` field if it contains no elements. - -`A2101`: Senders MAY send multiple entities of the same type, provided the entities have distinct meaning. - -`A2102`: Senders MUST NOT include two or more entities with identical types and contents. - -`A2103`: Senders and receivers SHOULD NOT rely on specific ordering of the entities included in an activity. - -`A2104`: Receivers MUST ignore entities whose types they do not understand. - -`A2105`: Receivers SHOULD ignore entities whose type they understand but are unable to process due to e.g. syntactic errors. - -### Channel data - -Extensibility data in the activity schema is organized principally within the `channelData` field. This simplifies plumbing in SDKs that implement the protocol. The format of the `channelData` object is defined by the channel sending or receiving the activity. - -`A2200`: Channels can define `channelData` formats that are JSON primitives (e.g., strings, ints). However, they SHOULD define `channelData` as a complex type, or leave it undefined. - -`A2201`: If the `channelData` format is undefined for the current channel, receivers SHOULD ignore the contents of `channelData`. - -### Caller ID - -In some cases, it's important to record where an activity was sent. The `callerId` field is a string containing an [IRI](https://tools.ietf.org/html/rfc3987) [[3](#references)] identifying the caller of a bot, described in more detail in [Appendix V](#appendix-v---caller-id-values). This field is not intended to be transmitted over the wire, but is instead populated by bots and clients based on cryptographically verifiable data that asserts the identity of the callers (e.g. tokens). - -`A2250`: Senders SHOULD NOT populate the `callerId` field. - -`A2251`: Receivers SHOULD discard any data included in the `callerId` field on the wire. - -`A2252`: Bots SHOULD, after receiving an Activity, populate its `callerId` field with an identifier described in [Appendix V](#appendix-v---caller-id-values) - -### Service URL - -Activities are frequently sent asynchronously, with separate transport connections for sending and receiving traffic. The `serviceUrl` field is used by channels to denote the URL where replies to the current activity may be sent. The value of the `serviceUrl` field is of type string. - -`A2300`: Channels MUST include the `serviceUrl` field in all activities they send to bots. - -`A2301`: Channels SHOULD NOT include the `serviceUrl` field to clients who demonstrate they already know the channel's endpoint. - -`A2302`: Bots and clients SHOULD NOT populate the `serviceUrl` field in activities they generate. - -`A2302`: Channels MUST ignore the value of `serviceUrl` in activities sent by bots and clients. - -`A2304`: Channels SHOULD use stable values for the `serviceUrl` field as bots may persist them for long periods. - -## Message activity - -Message activities represent content intended to be shown within a conversational interface. Message activities may contain text, speech, interactive cards, and binary or unknown attachments; typically channels require at most one of these for the message activity to be well-formed. - -Message activities are identified by a `type` value of `message`. - -### Text - -The `text` field contains text content, either in the Markdown format, XML, or as plain text. The format is controlled by the [`textFormat`](#text-Format) field as is plain if unspecified or ambiguous. The value of the `text` field is of type string. - -`A3000`: The `text` field MAY contain an empty string to indicate sending text without contents. - -`A3001`: Channels SHOULD handle `markdown`-formatted text in a way that degrades gracefully for that channel. - -### Text format - -The `textFormat` field denotes whether the [`text`](#text) field should be interpreted as [Markdown](https://daringfireball.net/projects/markdown/) [[3](#references)], plain text, or XML. The value of the `textFormat` field is of type string, with defined values of `markdown`, `plain`, and `xml`. The default value is `plain`. This field is not designed to be extended with arbitrary values. - -The `textFormat` field controls additional fields within attachments etc. This relationship is described within those fields, elsewhere in this document. - -`A3010`: If a sender includes the `textFormat` field, it SHOULD only send defined values. - -`A3011`: Senders SHOULD omit `textFormat` if the value is `plain`. - -`A3012`: Receivers SHOULD interpret undefined values as `plain`. - -`A3013`: Bots and clients SHOULD NOT send the value `xml` unless they have prior knowledge that the channel supports it, and the characteristics of the supported XML dialect. - -`A3014`: Channels SHOULD NOT send `markdown` or `xml` contents to bots. - -`A3015`: Channels SHOULD accept `textformat` values of at least `plain` and `markdown`. - -`A3016`: Channels MAY reject `textformat` of value `xml`. - -### Locale - -The `locale` field communicates the language code of the [`text`](#text) field. The value of the `locale` field is an [IETF BCP-47](https://tools.ietf.org/html/bcp47) [[18](#references)] language tag within a string. - -`A3020`: Receivers SHOULD treat missing and unknown values of the `locale` field as unknown. - -`A3021`: Receivers SHOULD NOT reject activities with unknown locale. - -### Speak - -The `speak` field indicates how the activity should be spoken via a text-to-speech system. The field is only used to customize speech rendering when the default is deemed inadequate. It replaces speech synthesis for any content within the activity, including text, attachments, and summaries. The value of the `speak` field is either plain text or [SSML](https://www.w3.org/TR/speech-synthesis/) [[6](#references)] encoded within a string. - -`A3030`: The `speak` field MAY contain an empty string to indicate no speech should be generated. - -`A3031`: Receivers unable to generate speech SHOULD ignore the `speak` field. - -`A3033`: Receivers SHOULD NOT use XML DTD or schema resolution to include remote resources from outside the communicated XML fragment. - -`A3034`: Channels SHOULD NOT send the `speak` field to bots. - -`A3035`: Receivers generating speech from an Activity with a missing or null `speak` field SHOULD render message contents such as [`text`](#text) and [`summary`](#summary) instead. - -### Input hint - -The `inputHint` field indicates whether or not the generator of the activity is anticipating a response. This field is used predominantly within channels that have modal user interfaces, and is typically not used in channels with continuous chat feeds. The value of the `inputHint` field is of type string, with defined values of `accepting`, `expecting`, and `ignoring`. The default value is `accepting`. - -`A3040`: If a sender includes the `inputHint` field, it SHOULD only send defined values. - -`A3041`: If sending an activity to a channel where `inputHint` is used, bots SHOULD include the field, even when the value is `accepting`. - -`A3042`: Receivers SHOULD interpret undefined values as `accepting`. - -### Attachments - -The `attachments` field contains a flat list of objects to be displayed as part of this activity. The value of each `attachments` list element is a complex object of the [Attachment](#attachment) type. - -`A3050`: Senders SHOULD omit the `attachments` field if it contains no elements. - -`A3051`: Senders MAY send multiple entities of the same type. - -`A3052`: Receivers MAY treat attachments of unknown types as downloadable documents. - -`A3053`: Receivers SHOULD preserve the ordering of attachments when processing content, except when rendering limitations force changes, e.g. grouping of documents after images. - -### Attachment layout - -The `attachmentLayout` field instructs user interface renderers how to present content included in the [`attachments`](#attachments) field. The value of the `attachmentLayout` field is of type string, with defined values of `list` and `carousel`. The default value is `list`. - -`A3060`: If a sender includes the `attachmentLayout` field, it SHOULD only send defined values. - -`A3061`: Receivers SHOULD interpret undefined values as `list`. - -### Summary - -The `summary` field contains text used to replace [`attachments`](#attachments) on channels that do not support them. The value of the `summary` field is of type string. - -`A3070`: Receivers SHOULD consider the `summary` field to logically follow the `text` field. - -`A3071`: Channels SHOULD NOT send the `summary` field to bots. - -`A3072`: Channels able to process all attachments within an activity SHOULD ignore the `summary` field. - -### Suggested actions - -The `suggestedActions` field contains a payload of interactive actions that may be displayed to the user. Support for `suggestedActions` and their manifestation depends heavily on the channel. The value of the `suggestedActions` field is a complex object of the [Suggested actions](#suggested-actions-2) type. - -### Value - -The `value` field contains a programmatic payload specific to the activity being sent. Its meaning and format are defined in other sections of this document that describe its use. - -`A3080`: Senders SHOULD NOT include `value` fields of primitive types (e.g. string, int). `value` fields SHOULD be complex types or omitted. - -### Expiration - -The `expiration` field contains a time at which the activity should be considered to be "expired" and should not be presented to the recipient. The value of the `expiration` field is an [ISO 8601 date time format](https://www.iso.org/iso-8601-date-and-time-format.html)[[2](#references)] encoded datetime within a string. - -`A3090`: Senders SHOULD always use encode the value of `expiration` fields as UTC, and they SHOULD always include Z as an explicit UTC mark within the value. - -### Importance - -The `importance` field contains an enumerated set of values to signal to the recipient the relative importance of the activity. It is up to the receiver to map these importance hints to the user experience. The value of the `importance` field is of type string, with defined values of `low`, `normal` and `high`. The default value is `normal`. - -`A3100`: If a sender includes the `importance` field, it SHOULD only send defined values. - -`A3101`: Receivers SHOULD interpret undefined values as `normal`. - -### Delivery mode - -The `deliveryMode` field contains any one of an enumerated set of values to signal to the recipient alternate delivery paths for the activity or response. The value of the `deliveryMode` field is of type string, with defined values of `normal`, `notification` and `expectReplies`. The default value is `normal`. - -Activities with a `deliveryMode` of `expectReplies` differ only in their requirement to return a response payload back to the caller synchronously, as a direct response to the initial request. - -`A3110`: If a sender includes the `deliveryMode` field, it SHOULD only send defined values. - -`A3111`: Receivers SHOULD interpret undefined values as `normal`. - -`A3112`: Receivers SHOULD reject activities with `deliveryMode` of `expectReplies` if they do not support synchronous responses. - -`A3113`: Receivers SHOULD NOT reply with asynchronous responses to activities with `deliveryMode` of `expectReplies`. - -`A3114`: Senders MUST NOT include `deliveryMode` of `expectReplies` on Invoke activities unless the Invoke profile explicitly allows and describes its behavior. - -`A3115`: Senders MUST establish whether a receiver understands `deliveryMode` of `expectReplies` prior to sending activities with that value. - -`A3116`: Bots SHOULD NOT send activities with `deliveryMode` of `expectReplies` to channels. - -### Listen for - -The `listenFor` field contains a list of terms or references to term sources that speech and language processing systems can listen for. The value of the `listenFor` field is an array of strings whose format is defined in [Appendix IV](#appendix-iv---priming-format). - -A missing `listenFor` field indicates default priming behavior should be used. The default is defined by the channel and may depend on variables such as the identity of the user and the bot. - -`A3120`: Channels SHOULD NOT populate the `listenFor` field. - -`A3121`: Bots SHOULD send `listenFor` contents that reflect the complete set of utterances expected from users, not just the utterances in response to the content in the message in which the `listenFor` is included. - -### Semantic action - -The `semanticAction` field contains an optional programmatic action accompanying the user request. The semantic action field is populated by the channel and bot based on some understanding of what the user is trying to accomplish; this understanding may be achieved with natural language processing, additional user interface elements tied specifically to these actions, through a process of conversational refinement, or contextually via other means. The meaning and structure of the semantic action is agreed ahead of time between the channel and the bot. - -The value of the `semanticAction` field is a complex object of the [semantic action](#semantic-action-type) type. - -`A3130`: Channels and bots MAY populate the `semanticAction` field. Other senders SHOULD NOT populate the `semanticAction` field. - -Information within the semantic action field is meant to augment, not replace, existing content within the activity. A well-formed semantic action has a defined name, corresponding well-formed entities, and matches the user's intent in generating the activity. - -`A3131`: Senders SHOULD NOT remove any content used to generate the `semanticAction` field. - -`A3132`: Receivers MAY ignore parts or all of the `semanticAction` field. - -`A3133`: Receivers MUST ignore `semanticAction` fields they cannot parse or do not understand. - -Semantic actions are sometimes used to indicate a change in which participant controls the conversation. For example, a channel may use actions during an exchange with a skill. When so defined, skills can relinquish control through the [handoff activity](#handoff-activity) after the final `semanticAction` `state` is `done`. - -`A3135`: Channels MAY define the use of [handoff activity](#handoff-activity) in conjunction with semantic actions. - -`A3136`: Bots MAY use semantic action and [handoff activity](#handoff-activity) internally to coordinate conversational focus between components of the bot. - -## Contact relation update activity - -Contact relation update activities signal a change in the relationship between the recipient and a user within the channel. Contact relation update activities generally do not contain user-generated content. The relationship update described by a contact relation update activity exists between the user in the `from` field (often, but not always, the user initiating the update) and the user or bot in the `recipient` field. - -Contact relation update activities are identified by a `type` value of `contactRelationUpdate`. - -### Action - -The `action` field describes the meaning of the contact relation update activity. The value of the `action` field is a string. Only values of `add` and `remove` are defined, which denote a relationship between the users/bots in the `from` and `recipient` fields. - -## Conversation update activity - -Conversation update activities describe a change in a conversation's members, description, existence, or otherwise. Conversation update activities generally do not contain user-generated content. The conversation being updated is described in the `conversation` field. - -Conversation update activities are identified by a `type` value of `conversationUpdate`. - -`A4100`: Senders MAY include zero or more of `membersAdded`, `membersRemoved`, `topicName`, and `historyDisclosed` fields in a conversation update activity. - -`A4101`: Each `channelAccount` (identified by `id` field) SHOULD appear at most once within the `membersAdded` and `membersRemoved` fields. An ID SHOULD NOT appear in both fields. An ID SHOULD NOT be duplicated within either field. - -`A4102`: Channels SHOULD NOT use conversation update activities to indicate changes to a channel account's fields (e.g., `name`) if the channel account was not added to or removed from the conversation. - -`A4103`: Channels SHOULD NOT send the `topicName` or `historyDisclosed` fields if the activity is not signaling a change in value for either field. - -### Members added - -The `membersAdded` field contains a list of channel participants (bots or users) added to the conversation. The value of the `membersAdded` field is an array of type [`channelAccount`](#channel-account). - -### Members removed - -The `membersRemoved` field contains a list of channel participants (bots or users) removed from the conversation. The value of the `membersRemoved` field is an array of type [`channelAccount`](#channel-account). - -### Topic name - -The `topicName` field contains the text topic or description for the conversation. The value of the `topicName` field is of type string. - -### History disclosed - -The `historyDisclosed` field is deprecated. - -`A4110`: Senders SHOULD NOT include the `historyDisclosed` field. - -## End of conversation activity - -End of conversation activities signal the end of a conversation from the recipient's perspective. This may be because the conversation has been completely ended, or because the recipient has been removed from the conversation in a way that is indistinguishable from it ending. The conversation being ended is described in the `conversation` field. - -End of conversation activities are identified by a `type` value of `endOfConversation`. - -Both the `code` and the `text` fields are optional. - -### Code - -The `code` field contains a programmatic value describing why or how the conversation was ended. The value of the `code` field is of type string and its meaning is defined by the channel sending the activity. - -### Text - -The `text` field contains optional text content to be communicated to a user. The value of the `text` field is of type string, and its format is plain text. - -## Event activity - -Event activities communicate programmatic information from a client or channel to a bot. The meaning of an event activity is defined by the `name` field, which is meaningful within the scope of a channel. Event activities are designed to carry both interactive information (such as button clicks) and non-interactive information (such as a notification of a client automatically updating an embedded speech model). - -Event activities are the asynchronous counterpart to [invoke activities](#invoke-activity). Unlike invoke, event is designed to be extended by client application extensions. - -Event activities are identified by a `type` value of `event` and specific values of the `name` field. - -`A5000`: Channels MAY allow application-defined event messages between clients and bots, if the clients allow application customization. - -### Name - -The `name` field controls the meaning of the event and the schema of the `value` field. The value of the `name` field is of type string. - -`A5001`: Event activities MUST contain a `name` field. - -`A5002`: Receivers MUST ignore event activities with `name` fields they do not understand. - -### Value - -The `value` field contains parameters specific to this event, as defined by the event name. The value of the `value` field is a complex type. - -`A5100`: The `value` field MAY be missing or empty, if defined by the event name. - -`A5101`: Extensions to the event activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` fields to understand the schema of the `value` field. - -### Relates to - -The `relatesTo` field references another conversation, and optionally a specific activity within that conversation. The value of the `relatesTo` field is a complex object of the [Conversation reference](#conversation-reference) type. - -`A5200`: `relatesTo` SHOULD NOT reference an activity within the conversation identified by the `conversation` field. - -## Invoke activity - -Invoke activities communicate programmatic information from a client or channel to a bot, and have a corresponding return payload for use within the channel. The meaning of an invoke activity is defined by the `name` field, which is meaningful within the scope of a channel. - -Invoke activities are the synchronous counterpart to [event activities](#event-activity). Event activities are designed to be extensible. Invoke activities differ only in their ability to return response payloads back to the channel; because the channel must decide where and how to process these response payloads, Invoke is useful only in cases where explicit support for each invoke name has been added to the channel. Thus, Invoke is not designed to be a generic application extensibility mechanism. - -Invoke activities are identified by a `type` value of `invoke` and specific values of the `name` field. - -The list of defined Invoke activities is included in [Appendix III](#appendix-iii---protocols-using-the-invoke-activity). - -`A5301`: Channels SHOULD NOT allow application-defined invoke messages between clients and bots. - -### Name - -The `name` field controls the meaning of the invocation and the schema of the `value` field. The value of the `name` field is of type string. - -`A5401`: Invoke activities MUST contain a `name` field. - -`A5402`: Receivers MUST ignore event activities with `name` fields they do not understand. - -### Value - -The `value` field contains parameters specific to this event, as defined by the event name. The value of the `value` field is a complex type. - -`A5500`: The `value` field MAY be missing or empty, if defined by the event name. - -`A5501`: Extensions to the event activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` fields to understand the schema of the `value` field. - -### Relates to - -The `relatesTo` field references another conversation, and optionally a specific activity within that conversation. The value of the `relatesTo` field is a complex object of the [Conversation reference](#conversation-reference) type. - -`A5600`: `relatesTo` SHOULD NOT reference an activity within the conversation identified by the `conversation` field. - -## Installation update activity - -Installation update activities represent an installation or uninstallation of a bot within an organizational unit (such as a customer tenant or "team") of a channel. Installation update activities generally do not represent adding or removing a channel. - -Installation update activities are identified by a `type` value of `installationUpdate`. - -`A5700`: Channels MAY send installation activities when a bot is added to or removed from a tenant, team, or other organization unit within the channel. - -`A5701`: Channels SHOULD NOT send installation activities when the bot is installed into or removed from a channel. - -### Action - -The `action` field describes the meaning of the installation update activity. The value of the `action` field is a string. Only values of `add` and `remove` are defined. - -## Message delete activity - -Message delete activities represent a deletion of an existing message activity within a conversation. The deleted activity is referred to by the `id` and `conversation` fields within the activity. - -Message delete activities are identified by a `type` value of `messageDelete`. - -`A5800`: Channels MAY elect to send message delete activities for all deletions within a conversation, a subset of deletions within a conversation (e.g. only deletions by certain users), or no activities within the conversation. - -`A5801`: Channels SHOULD NOT send message delete activities for conversations or activities that the bot did not observe. - -`A5802`: If a bot triggers a delete, the channel SHOULD NOT send a message delete activity back to that bot. - -`A5803`: Channels SHOULD NOT send message delete activities corresponding to activities whose type is not `message`. - -## Message update activity - -Message update activities represent an update of an existing message activity within a conversation. The updated activity is referred to by the `id` and `conversation` fields within the activity, and the message update activity contains all fields in the revised message activity. - -Message update activities are identified by a `type` value of `messageUpdate`. - -`A5900`: Channels MAY elect to send messageUpdate activities for all updates within a conversation, a subset of updates within a conversation (e.g. only updates by certain users), or no activities within the conversation. - -`A5901`: If a bot triggers an update, the channel SHOULD NOT send a message update activity back to that bot. - -`A5902`: Channels SHOULD NOT send message update activities corresponding to activities whose type is not `message`. - -## Message reaction activity - -Message reaction activities represent a social interaction on an existing message activity within a conversation. The original activity is referred to by the `id` and `conversation` fields within the activity. The `from` field represents the source of the reaction (i.e., the user that reacted to the message). - -Message reaction activities are identified by a `type` value of `messageReaction`. - -### Reactions added - -The `reactionsAdded` field contains a list of reactions added to this activity. The value of the `reactionsAdded` field is an array of type [`messageReaction`](#message-reaction). - -### Reactions removed - -The `reactionsRemoved` field contains a list of reactions removed from this activity. The value of the `reactionsRemoved` field is an array of type [`messageReaction`](#message-reaction). - -## Suggestion activity - -Suggestion activities allow a bot to send content targeting a single user in the conversation which refers to a previous activity and suggests content that augments it. The suggested content is a superset of the [message activity](#message-activity), and fields present on the message activity are schematically valid on the suggestion activity. The channel in which the suggestion activity is sent defines limitations on text or attachment content, and these limitations may differ from the channel's limitations on message activities. The suggestion activity includes the `textHighlights` property so that the suggestions can be surfaced as annotations to the original content in the source activity. - -For example: an message activity with the text "...we should meet on Monday to review this plan..." could cause a bot to send a suggestion activity which refers to that section of text and offers the user an affordance to create a meeting on their calendar. Some channels use this information to highlight and turn into a hot link the snippet of text to show the suggestion in context. - -Suggestion activities are identified by a `type` value of `suggestion`. Suggestion activities refer to another activity by using the [`replyToId`](#reply-to-ID) property. - -`A6100`: If there is no `replyToId` then the suggested content should be shown to the recipient as a normal message activity. - -Suggestion activity uses the [`recipient`](#recipient) field to signal which user the suggestion is for. - -All `textHighlight` objects are relative to the activity specified by the `replyToId` property. There can be multiple `textHighlight` provided, allowing a client the option to turn different sections of the text into links which would show the suggestion content. - -`A6101`: Bots MAY use `replyToId` and `textHighlights` to associate the suggestion with an activity. - -`A6102`: Channels MAY use `replyToId` and `textHighlights` to show the suggestion activity contextually to the recipient. - -`A6103`: Channels MUST only show the suggestion activity to the recipient. If unable to identify the intended recipient or show the content only to them, the channel MUST drop the activity. - -`A6104`: Channels SHOULD NOT send suggestion activities to bots. - -### Suggestion activity text highlights - -The `textHighlights` field contains a list of text to highlight in the `text` field of the activity referred to by `replyToId`. The value of the `textHighlights` field is an array of type [`textHighlight`](#text-highlight). - -## Trace activity - -The Trace activity is an activity which the developer inserts in to the stream of activities to represent a point in the developers bot logic. The trace activity typically is logged by transcript history components to become part of a [Transcript-format](../transcript/transcript.md) history file. In remote debugging scenarios the Trace activity can be sent to the client so that the activity can be inspected as part of the debug flow. - -Trace activities are normally not shown to the user, and are internal to transcript logging and developer debugging. - -Trace activities are identified by a `type` value of `trace`. - -`A6150`: channels SHOULD NOT display trace activities to the user, unless the user has identified itself as the developer in a secure manner. - -### Name - -The `name` field controls the name of the trace operation. The value of the `name` field is of type string. - -`A6151`: Trace activities MAY contain a `name` field. - -`A6152`: Receivers MUST ignore event activities with `name` fields they do not understand. - -### Label - -The `label` field contains optional a label which can provide contextual information about the trace. The value of the `label` field is of type string. - -`A6153`: Trace activities MAY contain a `label` field. - -### ValueType - -The `valueType` field is a string type which contains a unique value which identifies the shape of the `value` object for this trace. - -`A6154`: The `valueType` field MAY be missing or empty, if the `name` property is sufficient to understand the shape of the `value` property. - -### Value - -The `value` field contains an object for this trace, as defined by the `valueType` or `name` property if there is no `valueType`. The value of the `value` field is a complex type. - -`A6155`: The `value` field MAY be missing or empty. - -`A6156`: Extensions to the trace activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` or `valueType` field to understand the schema of the `value` field. - -### Relates to - -The `relatesTo` field references another conversation, and optionally a specific activity within that conversation. The value of the `relatesTo` field is a complex object of the [Conversation reference](#conversation-reference) type. - -`A6157`: `relatesTo` MAY reference an activity within the conversation identified by the `conversation` field. - -## Typing activity - -Typing activities represent ongoing input from a user or a bot. This activity is often sent when keystrokes are being entered by a user, although it's also used by bots to indicate they're "thinking," and could also be used to indicate e.g. collecting audio from users. - -Typing activities are intended to persist within UIs for three seconds. - -Typing activities are identified by a `type` value of `typing`. - -`A6000`: If able, clients SHOULD display typing indicators for three seconds upon receiving a typing activity. - -`A6001`: Unless otherwise known for the channel, senders SHOULD NOT send typing activities more frequently than one every three seconds. (Senders MAY send typing activities every two seconds to prevent gaps from appearing.) - -`A6002`: If a channel assigns an [`id`](#id) to a typing activity, it MAY allow bots and clients to delete the typing activity before its expiration. - -`A6003`: If able, channels SHOULD send typing activities to bots. - -## Handoff activity - -Handoff activities are used to request or signal a change in focus between elements inside a bot. They are not intended to be used in wire communication (besides internal communication that occurs between services in a distributed bot). - -Handoff activities are identified by a `type` value of `handoff`. - -`A6200`: Channels SHOULD drop handoff activities if they are not supported. - -## Command activity - -Command activities communicate a request to perform a specific action. They are identified by a `type` value of `command` and specific values of the `name` field. - -Commands look similar in structure to events but have different semantics. Commands are requests to perform an action and receivers typically respond with one or more commandResult activities. Receivers are also expected to explicitly reject unsupported command activities. - -`A6300`: Channels MAY allow application-defined command activities between clients and bots, if the clients allow application customization. - -`A6301`: Application-defined command activities MUST be declared in the `application/*` namespace. - -`A6302`: Command activities outside the `application/*` are considered reserved for Activity Protocol. - -The list of Activity Protocol command activities is included in [Appendix VI](#appendix-vi---protocols-using-the-command-activity). - -### Name - -The `name` field defines the meaning of the command activity. The value of the `name` field is of type string. - -`A6310`: Command activities MUST contain a `name` field. - -`A6311`: The `name` of a command activity MUST use a [MIME media type](https://www.iana.org/assignments/media-types/media-types.xhtml) [[8](#references)] format. - -`A6312`: Receivers MUST ignore command activities with missing or invalid `name` field. - -The recommended patterns for rejecting command activities are included in [Appendix VI](#appendix-vi---protocols-using-the-command-activity). - -### Value - -The `value` field contains the command metadata and parameters specific to a command, as defined by the command `name`. The `value` field is a complex object of the [command value](#command-value) type. - -`A6321`: Command activities MUST contain a `value` field. - -`A6322`: Receivers MUST ignore command activities with missing or invalid `value` field. - -## Command result activity - -Command result activities communicate the result of a [command activity](#command-activity). - -Command result activities are identified by a `type` value of `commandResult` and specific values of the `name` field. The `name` field of a command result is always set to the `name` of the original command activity. - -`A6400`: Senders MAY send one or more command result activities to communicate the result of the command. - -### Name - -The `name` field defines the meaning of the command result activity. The value of the `name` field is of type string. - -`A6411`: Command result activities MUST contain a `name` field. - -`A6412`: Receivers MUST ignore command activities with missing or invalid `name` field. - -`A6413`: The `name` of a command result activity MUST be the same as the `name` of the original command activity. - -### Value - -The `value` field contains the command metadata and additional information specific to a command result, as defined by the command result `name`. The value of the `value` field is a complex object of type [command result value](#command-result-value) type. - -`A6421`: Command result activities MUST contain a `value` field. - -`A6422`: Receivers MUST reject command result activities with missing or invalid `value` field. - -## Complex types - -This section defines complex types used within the activity schema, described above. - -### Attachment - -Attachments are content included within a [message activity](#message-activity): cards, binary documents, and other interactive content. They're intended to be displayed in conjunction with text content. Content may be sent via URL data URI within the `contentUrl` field, or inline in the `content` field. - -`A7100`: Senders SHOULD NOT include both `content` and `contentUrl` fields in a single attachment. - -#### Content type - -The `contentType` field describes the [MIME media type](https://www.iana.org/assignments/media-types/media-types.xhtml) [[8](#references)] of the content of the attachment. The value of the `contentType` field is of type string. - -#### Content - -When present, the `content` field contains a structured JSON object attachment. The value of the `content` field is a complex type defined by the `contentType` field. - -`A7110`: Senders SHOULD NOT include JSON primitives in the `content` field of an attachment. - -#### Content URL - -When present, the `contentUrl` field contains a URL to the content in the attachment. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)] are typically supported by channels. The value of the `contentUrl` field is of type string. - -`A7120`: Receivers SHOULD accept HTTPS URLs. - -`A7121`: Receivers MAY accept HTTP URLs. - -`A7122`: Channels SHOULD accept data URIs. - -`A7123`: Channels SHOULD NOT send data URIs to clients or bots. - -#### Name - -The `name` field contains an optional name or filename for the attachment. The value of the `name` field is of type string. - -#### Thumbnail URL - -Some clients have the ability to display custom thumbnails for non-interactive attachments or as placeholders for interactive attachments. The `thumbnailUrl` field identifies the source for this thumbnail. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)] are typically also allowed. - -`A7140`: Receivers SHOULD accept HTTPS URLs. - -`A7141`: Receivers MAY accept HTTP URLs. - -`A7142`: Channels SHOULD accept data URIs. - -`A7143`: Channels SHOULD NOT send `thumbnailUrl` fields to bots. - -### Card action - -A card action represents a clickable or interactive button for use within cards or as [suggested actions](#suggested-actions). They are used to solicit input from users. Despite their name, card actions are not limited to use solely on cards. - -Card actions are meaningful only when sent to channels. - -Channels decide how each action manifests in their user experience. In most cases, the cards are clickable. In others, they may be selected by speech input. In cases where the channel does not offer an interactive activation experience (e.g., when interacting over SMS), the channel may not support activation whatsoever. The decision about how to render actions is controlled by normative requirements elsewhere in this document (e.g. within the card format, or within the [suggested actions](#suggested-actions) definition). - -#### Type - -The `type` field describes the meaning of the button and behavior when the button is activated. Values of the `type` field are by convention short strings (e.g. "`openUrl`"). See subsequent sections for requirements specific to each action type. - -* An action of type `messageBack` represents a text response to be sent via the chat system. -* An action of type `imBack` represents a text response that is added to the chat feed. -* An action of type `postBack` represents a text response that is not added to the chat feed. -* An action of type `openUrl` represents a hyperlink to be handled by the client. -* An action of type `downloadFile` represents a hyperlink to be downloaded. -* An action of type `showImage` represents an image that may be displayed. -* An action of type `signin` represents a hyperlink to be handled by the client's signin system. -* An action of type `playAudio` represents audio media that may be played. -* An action of type `playVideo` represents video media that may be played. -* An action of type `call` represents a telephone number that may be called. -* An action of type `openApp` represents an app name to open. - -#### Title - -The `title` field includes text to be displayed on the button's face. The value of the `title` field is of type string, and does not contain markup. - -This field applies to actions of all types. - -`A7210`: Channels SHOULD NOT process markup within the `title` field (e.g. Markdown). - -#### Image - -The `image` field contains a URL referencing an image to be displayed on the button's face. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)] are typically supported by channels. The value of the `image` field is of type string. - -This field applies to actions of all types. - -`A7220`: Channels SHOULD accept HTTPS URLs. - -`A7221`: Channels MAY accept HTTP URLs. - -`A7222`: Channels SHOULD accept data URIs. - -#### Image alt text - -The `imageAltText` field contains alternate image text to be used in place of the `image` field. This field should only be used when the `text` field is inadequate as alt text. The value of the `imageAltText` field is of type string. - -`A7225`: Senders SHOULD NOT populate the `imageAltText` field if its value is identical to the `text` field. - -`A7226`: Receivers SHOULD use the value of the `imageAltText` field if it is present in the enclosing [card action](#card-action). If the `imageAltText` field is missing, receivers SHOULD use the `text` field as the alt text. - -#### Text - -The `text` field contains text content to be sent to a bot and included in the chat feed when the button is clicked. The contents of the `text` field may or may not be displayed, depending on the button type. The `text` field may contain markup, controlled by the [`textFormat`](#text-format) field in the activity root. The value of the `text` field is of type string. - -This field is only used on actions of select types. Details on each type of action are included later in this document. - -`A7230`: The `text` field MAY contain an empty string to indicate sending text without contents. - -`A7231`: Channels SHOULD process the contents of the `text` field in accordance with the [`textFormat`](#text-format) field in the activity root. - -#### Display text - -The `displayText` field contains text content to be included in the chat feed when the button is clicked. The contents of the `displayText` field SHOULD always be displayed, when technically possible within the channel. The `displayText` field may contain markup, controlled by the [`textFormat`](#text-format) field in the activity root. The value of the `displayText` field is of type string. - -This field is only used on actions of select types. Details on each type of action are included later in this document. - -`A7240`: The `displayText` field MAY contain an empty string to indicate sending text without contents. - -`A7241`: Channels SHOULD process the contents of the `displayText` field in accordance with the [`textFormat`](#text-format) field in the activity root. - -#### Value - -The `value` field contains programmatic content to be sent to a bot when the button is clicked. The contents of the `value` field are of any primitive or complex type, although certain activity types constrain this field. - -This field is only used on actions of select types. Details on each type of action are included later in this document. - -#### ChannelData - -Extensibility data in the activity schema is organized principally within the channelData field. This simplifies plumbing in SDKs that implement the protocol. The format of the channelData object is defined by the channel sending or receiving the activity. - -#### Message Back - -A `messageBack` action represents a text response to be sent via the chat system. Message Back uses the following fields: -* `type` ("`messageBack`") -* `title` -* `image` -* `text` -* `displayText` -* `value` (of any type) - -`A7350`: Senders SHOULD NOT include `value` fields of primitive types (e.g. string, int). `value` fields SHOULD be complex types or omitted. - -`A7351`: Channels MAY reject or drop `value` fields not of complex type. - -`A7352`: When activated, channels MUST send an activity of type `message` to all relevant recipients. - -`A7353`: If the channel supports storing and transmitting text, the contents of the `text` field of the action MUST be preserved and transmitted in the `text` field of the generated message activity. - -`A7355`: If the channel supports storing and transmitting additional programmatic values, the contents of the `value` field MUST be preserved and transmitted in the `value` field of the generated message activity. - -`A7356`: If the channel supports preserving a different value in the chat feed than is sent to bots, it MUST include the `displayText` field in the chat history. - -`A7354`: If the channel does not support `A7353` but does support recording text within the chat feed, it MUST include the `text` field in the chat history. - -`A7357`: If the channel supports presenting an image on the action, the contents of the `image` field of the action MUST be shown on or in connection with the action. - -`A7358`: The contents of the `title` field of the action MUST be shown on or in connection with the action. - -`A7359`: Senders SHOULD include an `image` field, a `title` field, or both. Channels MAY reject or drop `messageBack` actions which have neither an `image` field nor a `title` field. - -#### IM Back - -An `imBack` action represents a text response that is added to the chat feed. IM Back uses the following fields: -* `type` ("`imBack`") -* `title` -* `image` -* `value` (of type string) - -`A7360`: When activated, channels MUST send an activity of the type `message` to all relevant recipients. - -`A7361`: If the channel supports storing and transmitting text, the contents of the `title` field MUST be preserved and transmitted in the `text` field of the generated message activity. - -`A7362`: If the `title` field on an action is missing and the `value` field is of type string, the channel MAY transmit the contents of the `value` field in the `text` field of the generated message activity. - -`A7363`: If the channel supports recording text within the chat feed, it MUST include the contents of the `title` field in the chat history. - -#### Post Back - -A `postBack` action represents a text response that is not added to the chat feed. Post Back uses the following fields: -* `type` ("`postBack`") -* `title` -* `image` -* `value` (of type string) - -`A7370`: When activated, channels MUST send an activity of the type `message` to all relevant recipients. - -`A7371`: Channels SHOULD NOT include text within the chat history when a Post Back action is activated. - -`A7372`: Channels MUST reject or drop `value` fields not of string type. - -`A7373`: If the channel supports storing and transmitting text, the contents of the `value` field MUST be preserved and transmitted in the `text` field of the generated message activity. - -`A7374`: If the channel is unable to support transmitting to the bot without including history in the chat feed, it SHOULD use the `title` field as the display text. - -#### Open URL actions - -An `openUrl` action represents a hyperlink to be handled by the client. Open URL uses the following fields: -* `type` ("`openUrl`") -* `title` -* `image` -* `value` (of type string) - -`A7380`: Senders MUST include a URL in the `value` field of an `openUrl` action. - -`A7381`: Receivers MAY reject `openUrl` action whose `value` field is missing or not a string. - -`A7382`: Receivers SHOULD reject or drop `openUrl` actions whose `value` field contains a data URI, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)]. - -`A7383`: Receivers SHOULD NOT reject `openUrl` actions whose `value` URI is of an otherwise unexpected URI scheme or value. - -`A7384`: Clients with knowledge of particular URI schemes (e.g. HTTP) MAY handle `openUrl` actions within an embedded renderer (e.g., a browser control). - -`A7385`: When available, clients SHOULD delegate handling of `openUrl` actions not handled by `A7354` to the operating-system- or shell-level URI handler. - -#### Download File actions - -A `downloadFile` action represents a hyperlink to be downloaded. Download File uses the following fields: -* `type` ("`downloadFile`") -* `title` -* `image` -* `value` (of type string) - -`A7390`: Senders MUST include a URL in the `value` field of an `downloadFile` action. - -`A7391`: Receivers MAY reject `downloadFile` action whose `value` field is missing or not a string. - -`A7392`: Receivers SHOULD reject or drop `downloadFile` actions whose `value` field contains a data URI, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)]. - -#### Show Image File actions - -A `showImage` action represents an image that may be displayed. Show Image uses the following fields: -* `type` ("`showImage`") -* `title` -* `image` -* `value` (of type string) - -`A7400`: Senders MUST include a URL in the `value` field of an `showImage` action. - -`A7401`: Receivers MAY reject `showImage` action whose `value` field is missing or not a string. - -`A7402`: Receivers MAY reject `showImage` actions whole `value` field is a Data URI, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)]. - -#### Signin - -A `signin` action represents a hyperlink to be handled by the client's signin system. Signin uses the following fields: -* `type` ("`signin`") -* `title` -* `image` -* `value` (of type string) - -`A7410`: Senders MUST include a URL in the `value` field of an `signin` action. - -`A7411`: Receivers MAY reject `signin` action whose `value` field is missing or not a string. - -`A7412`: Receivers MUST reject or drop `signin` actions whose `value` field contains a data URI, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)]. - -#### Play Audio - -A `playAudio` action represents audio media that may be played. Play Audio uses the following fields: -* `type` ("`playAudio`") -* `title` -* `image` -* `value` (of type string) - -`A7420`: When activated, channels MAY play the audio referenced by URI in the `value` field. - -`A7421`: Channels MUST reject or drop `value` fields not of string type. - -`A7422`: Senders SHOULD NOT send data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)], without prior knowledge that the channel supports them. - -#### Play video - -A `playVideo` action represents video media that may be played. Play Video uses the following fields: -* `type` ("`playVideo`") -* `title` -* `image` -* `value` (of type string) - -`A7430`: When activated, channels MAY play the video referenced by URI in the `value` field. - -`A7431`: Channels MUST reject or drop `value` fields not of string type. - -`A7432`: Senders SHOULD NOT send data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[9](#references)], without prior knowledge that the channel supports them. - -#### Call - -A `call` action represents a telephone number that may be called. Call uses the following fields: -* `type` ("`call`") -* `title` -* `image` -* `value` (of type string) - -`A7440`: Senders MUST include a URL of scheme `tel` in the `value` field of an `call` action. - -`A7441`: Receivers MUST reject `call` action whose `value` field is missing or not a string URI of the `tel` scheme. - -### Channel account - -Channel accounts represent identities within a channel. The channel account includes an ID that can be used to identify and contact the account within that channel. Sometimes these IDs exist within a single namespace (e.g. Skype IDs); sometimes, they are federated across many servers (e.g. email addresses). In addition to the ID, channel accounts include display names and Azure Active Directory (AAD) object IDs. - -#### Channel account ID - -The `id` field is the identifier and address within the channel. The value of the `id` field is a string. An example `id` within a channel that uses email addresses is "name@example.com" - -`A7510`: Channels SHOULD use the same values and conventions for account IDs regardless of their position within the schema (`from.id`, `recipient.id`, `membersAdded`, etc.). This allows bots and clients to use ordinal string comparisons to know when e.g. they are described in the `membersAdded` field of a `conversationUpdate` activity. - -#### Channel account name - -The `name` field is an optional, friendly name within the channel. The value of the `name` field is a string. An example `name` within a channel is "John Doe" - -#### Channel account AAD Object ID - -The `aadObjectId` field is an optional ID corresponding to the account's object ID within Azure Active Directory (AAD). The value of the `aadObjectId` field is a string. - -#### Channel account role - -The `role` field indicates whether entity behind the account is a user or bot. This field is intended for use in the [Transcript format](../transcript/transcript.md) [[15](#references)] to distinguish between activities sent by users and activities sent by bots. The value of the `role` field is a string. - -`A7511`: Senders SHOULD NOT include this field. Receivers SHOULD ignore this field. - -### Conversation account - -Conversation accounts represent the identity of conversations within a channel. In channels that support only a single conversation between two accounts (e.g. SMS), the conversation account is persistent and does not have a predetermined start or end. In channels that support multiple parallel conversations (e.g. email), each conversation will likely have a unique ID. - -#### Conversation account ID - -The `id` field is the identifier within the channel. The format of this ID is defined by the channel and is used as an opaque string throughout the protocol. - -Channels SHOULD choose `id` values that are stable for all participants within a conversation. (For example, a poor example for the `id` field for a 1:1 conversation is to use the other participant's ID as the `id` value. This would result in a different `id` from each participant's perspective. A better choice is to sort the IDs of both participants and concatenate them together, which would be the same for both parties.) - -#### Conversation account name - -The `name` field is an optional, friendly name for the conversation within the channel. The value of the `name` field is a string. - -#### Conversation account AAD Object ID - -The `aadObjectId` field is an optional ID corresponding to the conversation's object ID within Azure Active Directory (AAD). The value of the `aadObjectId` field is a string. - -#### Conversation account Is Group - -The `isGroup` field indicates whether the conversation contains more than two participants at the time the activity was generated. The value of the `isGroup` field is a boolean; if omitted, the default value is `false`. This field typically controls the at-mention behavior for participants in the channel, and SHOULD be set to `true` if and only if more than two participants have the ability to both send and receive activities within the conversation. - -#### Conversation account Conversation Type - -If the channel distinguishes between types of conversations (e.g. group vs. personal), the `conversationType` field indicates the type of the conversation. This field augments the lower-fidelity [`isGroup`](#conversation-account-is-group) field. The value of the `conversationType` field is a string and its meaning is defined by the channel in which the type occurs. - -#### Conversation account role - -The `role` field indicates whether entity behind the account is a user or bot. This field is intended for use in the [Transcript format](../transcript/transcript.md) [[15](#references)] to distinguish between activities sent by users and activities sent by bots. The value of the `role` field is a string. - -`A7512`:Senders SHOULD NOT include this field. Receivers SHOULD ignore this field. - -#### Conversation account tenant ID - -The `tenantId` field is an optional ID corresponding to the conversation's tenant ID within the channel. The value of the `tenantId` field is a string. - -### Conversation reference - -The `conversationReference` type contains a reference into another conversation. In its most minimal form, this reference may only contain the IDs of the target conversation. Implementers may wish to carry additional information in the `conversationReference`, such as the identity and roles of participants, and the ID of a specific [`activity`](#activity) within the conversation. Consumers of the `conversationReference` type are not provided any de facto guarantees about the validity or consistency of the IDs within the object; this is instead conferred by the sender who created the object. - -The `conversationReference` type is frequently used to store a reference to a conversation so it can be later retrieved and used to continue a conversation. - -`A7550`: Senders MUST include the `channelId` and the `conversation.id` properties within a conversation reference, even if they contain the same values as the parent Activity. - -#### Conversation reference channel ID - -The `channelId` field contains the [channel ID](#channel-id) of the conversation referenced by the conversationReference object. The value of the `channelId` field is of type string. - -#### Conversation reference activity ID - -The `activityId` field contains an optional [ID](#id) of an activity to refer to within the conversation. The value of the `activityId` field is of type string. - -#### Conversation reference conversation - -The `conversation` field contains the [Conversation account](#conversation-account) representing the conversation's identity. The value of the `conversation` field is a complex object of type [Conversation account](#conversation-account). - -#### Conversation reference user - -The `user` field contains an optional reference to the user's identity within the conversation. The value of the `user` field is of type [Channel account](#channel-account). - -#### Conversation reference bot - -The `bot` field contains an optional reference to the bot's identity within the conversation. The value of the `bot` field is of type [Channel account](#channel-account). - -#### Conversation reference serviceUrl - -The `serviceUrl` field contains an optional copy of the [`serviceUrl`](#service-url) that applies to the referenced conversation. The value of the `serviceUrl` field is of type string. - -`A7560`: Receivers SHOULD ensure the `serviceUrl` property in conversation references is accompanied by either a corresponding security endorsement (in the case of transmitted Conversation references), or a flag indicating the `serviceUrl` and its security endorsement was verified before storage (in the case of a stored Conversation reference). - -#### Conversation reference locale - -The `locale` field contains an optional copy of the [`locale`](#locale) that applies to the referenced conversation. The value of the `locale` field is an [IETF BCP-47](https://tools.ietf.org/html/bcp47) [[18](#references)] language tag within a string. - -### Entity - -Entities carry metadata about an activity or conversation. Each entity's meaning and shape is defined by the `type` field. Additional type-specific fields sit as peers to the `type` field. - -Some non-Bot-Framework entities may have a preexisting field called `type`. Parties integrating these entities into the activity entity format are advised to define field-level mapping to resolve conflicts with the `type` field name and other incompatibilities with serialization requirement `A2001` as part of the IRI defining the entity type. - -Frequently, entities used within Activity Protocol are also expressed elsewhere using [JSON-LD](https://www.w3.org/TR/json-ld/) [[17](#references)]. The entity format is designed to be compatible with JSON-LD contexts, but does not require senders or receivers to implement JSON-LD to successfully process an entity. - -`A7603`: Senders MAY include [JSON-LD](https://www.w3.org/TR/json-ld/) [[17](#references)] fields within entities. - -`A7604`: Senders MUST NOT expect or require [JSON-LD](https://www.w3.org/TR/json-ld/) [[17](#references)] processing to parse an entity. - -#### Entity type - -The `type` field is required, and defines the meaning and shape of the entity. `type` is intended to contain [IRIs](https://tools.ietf.org/html/rfc3987) [[3](#references)] although there are a small number on non-IRI entity types defined in [Appendix II](#appendix-ii---non-iri-entity-types). The value of the `type` field is a string. - -`A7610`: Senders SHOULD use non-IRI types names only for types described in [Appendix II](#appendix-ii---non-iri-entity-types). - -`A7611`: Senders MAY send IRI types for types described in [Appendix II](#appendix-ii---non-iri-entity-types) if they have knowledge that the receiver understands them. - -`A7612`: Senders SHOULD use or establish IRIs for entity types not defined in [Appendix II](#appendix-ii---non-iri-entity-types). - -`A7613`: Senders MUST NOT use relative IRIs within the `type` field, nor require JSON-LD IRI resolution to understand a type identifier. - -### Suggested actions - -Suggested actions may be sent within message content to create interactive action elements within a client UI. - -`A7700`: Clients that do not support UI capable of rendering suggested actions SHOULD ignore the `suggestedActions` field. - -`A7701`: Senders SHOULD omit the `suggestedActions` field if the `actions` field is empty. - -#### To - -The `to` field contains channel account IDs to whom the suggested actions should be displayed. This field may be used to filter actions to a subset of participants within the conversation. - -`A7710`: If the `to` field is missing or empty, the client SHOULD display the suggested actions to all conversation participants. - -`A7711`: If the `to` field contains invalid IDs, those values SHOULD be ignored. - -#### Actions - -The `actions` field contains a flat list of actions to be displayed. The value of each `actions` list element is a complex object of type `cardAction`. - -### Message reaction - -Message reactions represent a social interaction ("like", "+1", etc.). Message reactions currently only carry a single field: the `type` field. - -#### Type - -The `type` field describes the type of social interaction. The value of the `type` field is a string, and its meaning is defined by the channel in which the interaction occurs. Some common values such as `like` and `+1` although these are uniform by convention and not by rule. - -### Text highlight - -A text highlight refers to a substring of content within another field. This type is used within [suggestion activities](#suggestion-activity) to annotate text within another activity. - -`A7720`: Receivers MUST ignore a text highlight if the `text` field is missing or empty, if it contains with a `occurrence` value less than 0, or if the `occurrence` field greater than the number of occurrences of the `text` field within the referenced text. - -#### Text - -The `text` field is required, and defines the snippet of text to highlight. The contents of the `text` field MUST be ordinally identical to the content of the referenced text. The value of the `text` field is of type string. - -`A7721`: Senders MUST NOT send missing or empty strings for `text`. Receivers MUST ignore text higlights with missing or empty `text` fields. - -#### Occurrence - -The `occurrence` field is optional. It gives the sender the ability to specify which occurrence of the `text` to highlight. If it is not specified or is 0 then clients should highlight the first occurrence. The value of the `occurrence` field is of type integer. - -`A7722`: Senders SHOULD NOT include the `occurrence` field if its value is `0` or `1`. - -### Semantic action type - -The semantic action type represents a programmatic reference. It is used within the [`semanticAction`](#semantic-action) field in [message activities](#message-activity). Actions are defined and registered externally to this protocol, typically as part of the [Bot Manifest](../manifestdefinition/bot-manifest.md) [[13](#references)]. The action definition declares the ID for the action and associates it with named entities, each of which has a corresponding type. Senders are receivers of actions use these names and types to create and parse actions that conform to the action definition. - -Actions proceed through a lifecycle, described by the [`state`](#semantic-action-state) and [`id`](#semantic-action-id) fields. - -At the beginning of the lifecycle, the channel indicates the `id` of the action it wishes to invoke, and sends a `state` of `start`. - -The bot then sends and receives subsequent activities. During this time, both the bot and the channel may send additional metadata in the form of actions with `state` of `continue`. If the bot detects the user changing topic, it reflects this in a revised value of `id`. - -When complete, the bot may send `state` of `done`. Just like earlier steps, the bot can update the `id` field to reflect what was actually in the conversation. - -Example data flow for `semanticAction`. (Note that [entities](#semantic-action-entities) are abbreviated). -``` -User: Book a flight from SeaTac to NYC - Semantic action: state="start", id="bookFlight", entities="SeaTac", "NYC" - -Bot: Would you like to arrive at LaGuardia Airport or JFK International Airport? - Semantic action: state="continue", id="bookFlight", entities="KLGA", "KJFK" - -User: Hold on a second - Semantic action empty - -Bot: No problem, please reply when you'd like to continue. - Semantic action empty - -User: LaGuardia - Semantic action: state="continue", id="bookFlight", entities="KLGA" - -Bot: OK, would you like to book your flight? - Semantic action: state="continue", id="bookFlight" - -User: Yes - Semantic action empty - -Bot: OK, your flight has been booked for November 10 at 8:05am. - Semantic action: state="done", id="flightBooked", entities="Flight 81, KSEA to KLGA" -``` - -#### Semantic action state - -The `state` field describes whether the action is beginning, continuing, or ending. The value of the `state` field is of type string with defined values of `start`, `continue`, and `done`. This field is not extensible. - -**Note: the `state` field is not a mechanism to control a bot's state machine. Instead, it may be used to *request* that an action be started, or it may be used by bots to *inform* that the current action has changed or completed.** - -Because `semanticAction` is optional and the topic of a conversation may drift over time, receivers are cautioned to be flexible in accepting `semanticAction` contents, especially with states of `continue` and `done`. Specifically, channels and bots are cautioned not to create a state machine requiring specific values of `semanticAction` fields `state` and `id`. Instead, treat `semanticAction` as additional metadata that can be used to optionally enrich data sharing between actors. Receivers may always discard unexpected `semanticAction` values in accordance with `A3133`. - -The `start` state indicates an action is being started. Subsequent `start` actions indicate the sender wishes to start this action or another action (depending on the value of the `id` field). - -`A7760`: Channels MUST only send `state` of `start` on the first message of an exchange invoking an action. Others senders MUST NOT send `state` of `start`. - -The `continue` state indicates processing of an action is ongoing, and this activity contains new information within the `semanticAction` field. - -`A7761`: Channels and bots MAY send `state` of `continue` when they populate the `semanticAction` field. Other senders MUST NOT send `state` of `continue`. - -The `done` state indicates an action was successfully completed. - -`A7762`: Bots SHOULD send `state` of `done` when an action has been completed, even if `semanticAction` contains no entities. Other senders MUST NOT send `state` of `done`. - -Channels are expected to provide continuity when issuing actions to bots, but should expect changes in the `state` or `id` values received from bots. - -`A7763`: Channels SHOULD NOT send `state` of `continue` without a preceding `state` of `start`. - -`A7764`: Receivers MUST NOT require senders to include `semanticAction` fields with `state` of `continue` or `done`, nor a specific `id` value during a conversation. - -#### Semantic action ID - -The `id` field establishes the identity for the action, and is associated with a definition for the meaning and structure of the action (typically communicated via a registration system). The value of the `id` field is of type string. - -`A7730`: Senders MUST NOT generate semantic actions with missing or empty `id` fields. - -`A7731`: Two `id` values are equivalent only if they are ordinally identical. - -`A7732`: Channels SHOULD only change the value of the `id` field within a conversation when a new action with `state` of `start` is sent, or when the bot sends a `state` of `continue` with a new `id` value. - -`A7733`: Bots SHOULD make best-effort attempts to update the `id` field to reflect the topic of the conversation. Channels SHOULD make best-effort attempts to honor the bot's stated `id` values. - -#### Semantic action entities - -The `entities` field contains entities associated with this action. The value of the `entities` field is a complex object; the keys of this object are entity names and the values of each key is the corresponding entity values of type [entity](#entity). The meaning of each entity is defined by the enclosing action and the entity name. An additional field named `$instance` occurs after the named entities. The value of the `$instance` field is of type [`entityInstance`](#entity-instance). - -`A7740`: Unless otherwise specified, senders MAY omit some or all entities associated with an action definition. - -`A7742`: Senders MAY add entities with unknown keys if they have special knowledge that the bot supports them. - -Actions support dynamic typing. An implementer of an action expresses a list of types it prefers, and callers of that action can match the desired types with known entities of varying fidelity. For example, assume an action prefers to receive a destination in the form of a *city* entity. The caller may not have a city available, but is able to supply either a *string* or *geocoordinates* based on what it was able to extract from the conversation. The caller can examine the action's preferred types and send the *string* or *geocoordinates* if the action can handle it. - -`A7744`: Senders MAY send downgraded entities in accordance with the rules outlined in the action definition. - -Entities sent within the semantic action have a specific meaning, defined by their name. For example, an action may be named `findRoute` with entities named `source` and `destination`. Sometimes, additional entities are available that do not fit a specific meaning within the action. The root [`entities`](#entities) array is a suitable location to transmit these entities. - -`A7745`: Senders MAY send entities not listed in the action definition in the [`entities`](#entities) array in the activity root. Senders SHOULD NOT send these entities in the semantic action. - -The `$instance` field carries metadata about the source of each entity. The keys of this object are identical to the entity names as peers. The values of each key is the corresponding instance metadata of type [`semanticEntityInstance`](#semantic-entity-instance). - -`A7746`: Senders SHOULD include properties within `$instance` for any entities bearing instance metadata. - -`A7747`: Senders SHOULD NOT include empty fields within `$instance` or an empty `$instance` object. - -`A7748`: Senders MUST NOT include a `$instance` field within the `$instance` object. - -Example of semantic action entities -``` -"entities": { - "sourceAirport": { - "type": "http://icao.org/airport/code" - "code": "KSEA", - "name": "Seattle-Tacoma International Airport", - }, - "destinationAirport": { - "type": "http://schema.org/City", - "name": "New York", - "geo": { - "type": "http://schema.org/GeoCoordinates", - "latitude": 40.7127, - "longitude": -74.0059 - } - }, - "$instance": { - "sourceAirport": { - "text": "SeaTac", - "startIndex": 19, - "endIndex": 25 - }, - "destinationAirport": { - "text": "New York", - "startIndex": 29, - "endIndex": 37 - } - } -} -``` - -### Semantic entity instance - -The `semanticEntityInstance` type references to source information about where the entity was mentioned. This specification includes source data to refer to the `text` field although others may be added in the future. The value of the `$instance` field is a complex object with fields `text`, `startIndex`, and `endIndex`. The `text` field is a string containing a copy of the text within the [`text`](#text) field in the activity root; `startIndex` is a number containing the index of the first character where `text` is found (inclusive); `endIndex` is a number containing the index after the last character where `text` is found (exclusive). - -`A7750`: Senders MUST NOT include the `$instance` field if its `text` field is empty or null or the contents of its `text` field cannot be found within the `text` field in the activity root. - -`A7751`: The `startIndex` field MUST be an integer greater than or equal to zero and less than the length of the `text` field in the activity root. - -`A7752`: The `endIndex` field MUST be an integer greater than zero and less than or equal to the length of the `text` field in the activity root. Its value MUST be greater than the `startIndex` value. - -`A7753`: The contents of the `text` field within `$instance` MUST contain characters ordinally identical to the value of the `text` field in the activity root starting at `startIndex` characters from the beginning and ending immediately before `endIndex` characters from the beginning. - -### Command value -The `value` field of a [command activity](#command-activity) contains metadata related to a command. An optional extensible `data` payload may be included if defined by the command activity `name`. - -#### Command Id - -`A10100`: A command value MAY include the `commandId` field with the unique ID that the sender assigns to this command. - -#### Data - -The `data` field contains optional parameters specific to this command activity, as defined by the `name`. The value of the `data` field is a complex type. - -`A10200`: The `data` field MAY be missing or empty, if defined by the command activity `name`. - -`A10201`: Extensions to the command activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` fields to understand the schema of the `data` field. - -### Command result Value -The `value` field of a [command result activity](#command-result-activity) contains metadata related to a command. An optional extensible `data` payload may be included if defined by the command result activity `name`. The presence of an `error` field indicates that the original command failed to complete. - -#### Command Id - -`A11100`: If the original command includes a valid `commandId`, then the command result value MUST include the same value in `commandId` to allow the result to be correlated to the original command instance. - -#### Data - -The `data` field contains optional additional information specific to this command result activity, as defined by the `name`. The value of the `data` field is a complex type. - -`A11200`: The `data` field MAY be missing or empty, if defined by the command result activity name. - -`A11201`: Extensions to the command result activity SHOULD NOT require receivers to use any information other than the activity `type` and `name` fields to understand the schema of the `data` field. - -#### Error - -The `error` field contains the reason the original [command activity](#command-activity) failed to complete. - -`A11300`: Senders MUST include the `error` field when the command was not successful. The value of the `error` field is of type [Error Object](../protocol-protocol/protocol-protocol.md#error-object) - -`A11301`: Senders MUST NOT include the `error` field when the command was successful. - -## References - -1. [RFC 2119](https://tools.ietf.org/html/rfc2119) -- *Key words for use in RFCs to Indicate Requirement Levels* -2. [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) -- *Date and time format* -3. [RFC 3987](https://tools.ietf.org/html/rfc3987) -- *Internationalized Resource Identifiers (IRIs)* -4. [Markdown](https://daringfireball.net/projects/markdown/) -5. [ISO 639](https://www.iso.org/iso-639-language-codes.html) -- *Language codes* -6. [SSML](https://www.w3.org/TR/speech-synthesis/) -- *Speech Synthesis Markup Language* -7. [XML](https://www.w3.org/TR/xml/) -- *Extensible Markup Language* -8. [MIME media types](https://www.iana.org/assignments/media-types/media-types.xhtml) -9. [RFC 2397](https://tools.ietf.org/html/rfc2397) -- *The "data" URL scheme* -10. [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) -- *Country codes* -11. [Activity Protocol Cards](protocol-cards.md) -12. [Adaptive Cards](https://adaptivecards.io) -13. [Bot Manifest](../manifest/bot-manifest.md) -14. [RFC 4627](http://www.ietf.org/rfc/rfc4627.txt) -- *The application/json Media Type for JavaScript Object Notation (JSON)* -15. [Transcript](../transcript/transcript.md) -16. [RFC 6557](https://tools.ietf.org/html/rfc6557) -17. [JSON-LD](https://www.w3.org/TR/json-ld/) -- *A JSON-based serialization for Linked Data* -18. [IETF BCP-47](https://tools.ietf.org/html/bcp47) -- *Language tag* - -# Appendix I - Changes - -## 2024-11-06 - trboehre@microsoft.com -* Added missing ChannelData field in Card Action - -## 2024-11-01 - trboehre@microsoft.com -* Dropped 'Bot Framework' branding -* Dropped Swagger definitions references -* Change path to Bot Manifest doc - -## 2020-07-07 - contact.me@nlchar.rocks -* Fix the broken link to the Bot Framework Manifest Spec in the References section - -## 2020-06-19 - dandris@microsoft.com -* Fix `A7420` and `A7430` text to reflect original intent of `playAudio` and `playVideo` actions -* Add [conversation reference](#conversation-reference) type definition - -## 2020-06-16 - dandris@microsoft.com -* Integrate typo and casing fixes -* Fix internal anchor links and relative file links - -## 2020-03-02 - dandris@microsoft.com -* Added [`imageAltText`](#image-alt-text) - -## 2019-07-15 - dandris@microsoft.com -* Added `A3035` to clarify behavior in the absence of a `speak` field. - -## 2019-05-09 - toddne@microsoft.com -* Removed A3032. Speak takes either plain text or valid SSML - -## 2019-01-31 - toddne@microsoft.com -* Revised specification of [locale] to reference BCP-47. - -## 2019-05-02 - dandris@microsoft.com -* Added [`callerId`](#caller-Id) and [Appendix V](#appendix-v---caller-id-values) - -## 2019-01-31 - toddne@microsoft.com -* Revised specification of [locale] to reference BCP-47. - -## 2019-01-31 - dandris@microsoft.com -* Add `tenantId` to [conversation account](#conversation-account) type - -## 2019-01-11 - dandris@microsoft.com -* Add `A7357`, `A7358`, and `A7359` to profile `image` and `title` fields of the `messageBack` action - -## 2019-01-04 - dandris@microsoft.com -* Resolved collision in [Trace activity](#trace-activity) numbering: `A610x` -> `A615x` - -## 2018-12-06 - dandris@microsoft.com -* Resolved restriction number collision by renaming duplicate `A7352` and `A7353` to `A7355` and `A7356`, respectively -* Fixed broken links - -## 2018-10-23 - dandris@microsoft.com -* Added action [`state`](#semantic-action-state) - -## 2018-09-27 - dandris@microsoft.com -* Revised reference descriptions and links -* Clarified syntactic rules, revised `A2003`, added `A2007` -* Removed `A7743` as redundant -* Removed ordering requirement for semantic action entities (`A7741`) -* Added `$instance` to semantic action entities -* Added action type downgrading -* Move `A7600` and `A7601` and re-introduce as `A2104` and `A2105` - -## 2018-09-18 - toddne@microsoft.com -* Added localTimezone property - -## 2018-08-27 - daveta@microsoft.com -* Added [Channel account role](#channel-account-role) property -* Added [Conversation account role](#conversation-account-role) property - -## 2018-07-17 - dandris@microsoft.com -* Added [`semanticAction`](#semantic-action) -* Added [handoff activity](#handoff-activity) - -## 2018-07-05 - dandris@microsoft.com -* Changed `RXXXX` (*R*equiment) to `AXXXX` (*A*ctivity) to match other Bot Framework specifications. - -## 2018-04-11 - dandris@microsoft.com -* Added [Listen for](#listen-for) field and [Appendix IV](#appendix-iv---priming-format) - -## 2018-04-08 - tomlm@microsoft.com -* Added [Suggestion activity](#suggestion-activity) and [`textHighlight`](#text-highlight) complex type. -* Amended `A2071` to allow suggestion activities to specify receipients - -## 2018-03-07 - dandris@microsoft.com -* Added [`conversationAccount.conversationType`](#conversation-account-conversation-type) and `A2084`. - -## 2018-02-07 - dandris@microsoft.com -* Initial draft - -# Appendix II - Non-IRI entity types - -Activity [entities](#entity) communicate extra metadata about the activity, such as a user's location or the version of the messaging app they're using. Activity types are intended to be IRIs, but a small list of non-IRI names are in common use. This appendix is an exhaustive list of the supported non-IRI entity types. - -| Type | IRI equivalent | Description | -| -------------- | --------------------------------------- | ------------------------- | -| GeoCoordinates | http://schema.org/GeoCoordinates/ | Schema.org GeoCoordinates | -| Mention | https://botframework.com/schema/mention | @-mention | -| Place | http://schema.org/Place | Schema.org Place | -| Thing | http://schema.org/Thing | Schema.org Thing | -| string | N/A | String | -| number | N/A | Number | -| clientInfo | N/A | Skype client info | - -### string and number - -The `string` and `number` primitive entity types contains simple values within the `value` field. The `value` field is a string or number, respectively. - -Example: -``` -{ - "type": "string", - "value": "This is the string value" -} -``` - -### clientInfo - -The `clientInfo` entity type contains extended information about the client software used to send a user's message. It contains three properties, all of which are optional. - -`A9201`: Bots SHOULD NOT send the `clientInfo` entity. - -`A9202`: Senders SHOULD include the `clientInfo` entity only when one or more fields are populated. - -#### Locale (Deprecated) - -The `locale` field contains the user's locale. This field duplicates the [`locale`](#locale) field in the Activity root. The value of the `locale` field is an [ISO 639](https://www.iso.org/iso-639-language-codes.html) [[5](#references)] code within a string. - -The `locale` field within `clientInfo` is deprecated. - -`A9211`: Receivers SHOULD NOT use the `locale` field within the `clientInfo` object. - -`A9212`: Senders MAY populate the `locale` field within `clientInfo` for compatibility reasons. If compatibility with older receivers is not required, senders SHOULD NOT send the `locale` property. - -#### Country - -The `country` field contains the user's detected location. This value may differ from any [`locale`](#locale) data as the `country` is detected whereas `locale` is typically a user or application setting. The value of the `country` field is an [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) [[10](#references)] 2- or 3-letter country code. - -`A9220`: Channels SHOULD NOT allow clients to specify arbitrary values for the `country` field. Channels SHOULD use a mechanism like GPS, location API, or IP address detection to establish the country generating a request. - -#### Platform - -The `platform` field describes the messaging client platform used to generate the activity. The value of the `platform` field is a string and the list of possible values and their meaning is defined by the channel sending them. - -Note that on channels with a persistent chat feed, `platform` is typically useful only in deciding which content to include, not the format of that content. For instance, if a user on a mobile device asks for product support help, a bot could generate help specific to their mobile device. However, the user may then re-open the chat feed on their PC so they can read it on that screen while making changes to their mobile device. In this situation, the `platform` field is intended to inform the content, but the content should be viewable on other devices. - -`A9230`: Bots SHOULD NOT use the `platform` field to control how response data is formatted unless they have specific knowledge that the content they are sending may only ever be seen on the device in question. - -# Appendix III - Protocols using the Invoke activity - -The [invoke activity](#invoke-activity) is designed for use only within protocols supported by Activity Protocol channels (i.e., it is not a generic extensibility mechanism). This appendix contains a list of all protocols using this activity. - -## Teams compose extension - -The Microsoft Teams channel uses Invoke for [compose extensions](https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/messaging-extensions). This use of Invoke is specific to Microsoft Teams. - -# Appendix IV - Priming format - -The [`listenFor`](#listen-for) field within the Activity Protocol Schema contains a list of terms and references to hint to a speech or language processor which terms to prefer when processing input. This format is referred to within this appendix as the priming format. - -The format allows: -1. Phrases, including single-term phrases (e.g. "house", "open the doors") -2. Sources of phrases (e.g., a LUIS model) - -All contents appear within a flat array of strings. - -Phrases are specified directly without markup. Sources are enclosed by `{` and `}` and their contents may be either a full URI or a shortened URI adhering to one of the conventions below. - -`A9300`: Senders SHOULD NOT include punctuation that does not affect language processing, such as enclosing parentheses or trailing periods. Senders MUST NOT enclose plain phrases with leading `{` and trailing `}`. - -`A9301`: Senders MAY include phrase sources by URI or short form. Phrase source URIs and short forms MUST be enclosed by leading `{` and trailing `}`. Senders SHOULD NOT include whitespace before or after `{` and `}` characters. - -`A9302`: Senders MUST URI-encode any `{`, `}`, and `"` characters that occur within a phrase source. - -`A9303`: Processors SHOULD ignore phrase sources they do not understand. - -Phrase source URIs may be symbolic or may be URLs. For example, `https://example.com/language/models/1234#intent0001` could identify `intent0001` within the `example.com` language model with ID `1234`. The format of these URIs and relationship to the backing phrase source data is bounded by the `example.com` hostname and is established entirely by the service supporting that name. Processors must have specific knowledge of each phrase source to determine the method of extraction. In some cases, an HTTP GET directly to the URL is adequate, in others, an entire language model may be retrieved and parsed to select individual phrases. A processor knows how to retrieve the data by inspecting the hostname. - -`A9304`: Processors MAY upgrade phrase source URIs to URLs when they have knowledge that the source supports phrase retrieval. - -`A9305`: Processors SHOULD use plain ordinal hostname comparisons when determining whether they recognize a source URI. - -`A9306`: Processors MAY ignore any resolved URLs that are not HTTPS. - -Phrase sources specified in complete URIs (e.g. `https://luis.ai/apps/12345#intent0001`) can be verbose and this spec establishes a format for shortening these URIs, and one known format specifically for [LUIS](https://luis.ai) apps. - -`A9307`: If a processor supports a phrase source, and that source has a compact representation, processors SHOULD support both the compact and the expanded format. - -`A9308`: Phrase sources SHOULD establish a well-defined mapping between compact and expanded forms of phrase source references. - -### LUIS.ai phrase source - -This section provides a definition for the [LUIS](https://luis.ai) phrase source URI and compact form. - -LUIS.ai models can be referenced with the following format: - `https://luis.ai/apps/[/intents/]` - -The short form for these IDs is: - `luis:[#intentId]` - -# Appendix V - Caller ID Values - -The Activity schema includes a ['callerId'](#caller-Id) field that identifies the caller sending an activity. The field is not populated on the wire but is used for internal routing within a bot, and for tracking this data when an Activity is committed to storage (in e.g. the [Transcript](../transcript/transcript.md) [[#15](#references)] format). - -This specification defines three IRI schemes for caller IDs. - -It is important that implementers follow the verification rules in this appendix to ensure a caller ID is set only when the caller is successfully authenticated. - -## Bot Framework - -Bot Framework services call registered bots to transmit messages sent over Bot Framework channels. The caller ID for any Bot Framework channel service is `urn:botframework:azure`. - -The authenticity of a call from Bot Framework can be established by inspecting its JSON Web Token and ensuring it is both correctly formed and is signed with a key listed in the Bot Framework Open ID Metadata Document. - -## Bot Framework (US Government Cloud) - -Bot Framework services running in the US Government Cloud are in a distinct security domain from traditional Bot Framework serivces. The caller ID for any Bot Framework channel service is `urn:botframework:azureusgov`. - -The authenticity of a call from Bot Framework US Government Cloud can be established by inspecting its JSON Web Token and ensuring it is both correctly formed and is signed with a key listed in the Bot Framework US Government Cloud Open ID Metadata Document. - -## Bot calling bot - -The Activity schema can be used when a bot initiates a request to another bot. The caller ID for these calls is the prefix `urn:botframework:aadappid:` followed by the Azure Active Directory App ID used by the bot initiating the call. - -The authenticity of a call from a bot can be established by inspecting its JSON Web Token and ensuring it is both correctly formed and is signed with a key listed in the Azure Active Directory Open ID Metadata Document. - -# Appendix VI - Protocols using the Command activity -[Command activities](#command-activity) communicate a request to perform a specific action. Command activities outside the `application` are considered reserved for Activity Protocol. This appendix contains a list of command activities used in Activity Protocol and recommended patterns for defining and using command activities. - -## Telephony Channel - -The Microsoft Telephony channel defines channel command activities in the namespace `channel/vnd.microsoft.telephony.`. - -## Patterns for rejecting commands - -### General pattern for rejecting commands -The general pattern for rejecting commands is to send an asynchronous commands result with an error. This is used in most cases when the receiver needs to process the command before rejecting it. - -Here is an example of a command result indicating that the command was not supported by the receiver: -``` - { - 'type': 'commandResult' - 'name': 'channel/vnd.microsoft.telephony.' - 'value': { - 'error' : { - 'code': 'NotSupported', - 'message' : 'Command channel/vnd.microsoft.telephony. is not supported' - } - } - } -``` - -### Channel rejecting commands -Some channels may may not support the command protocol or not allow for application customization of commands. In this case, the channel can reject commands with a transport-level response codes to allow a sender to detect the command activity was rejected. Example: When the transport is HTTP, 200 indicates acceptance and 400 indicates that the Activity name is not supported. - diff --git a/docs/ActivityDefintion/protocol-cards.md b/docs/ActivityDefintion/protocol-cards.md deleted file mode 100644 index d68da12..0000000 --- a/docs/ActivityDefintion/protocol-cards.md +++ /dev/null @@ -1,489 +0,0 @@ -# Activity Protocol -- Cards - -Version: 3.1.13 - -## Abstract - -The Activity Protocol Cards schema is an application-level representation of interactive cards for use within chat and other applications. The schema includes provisions for controlling the content, layout, and interactive elements of a card. - -This schema is used within the Activity Protocol schema and is implemented by Microsoft chat systems and by interoperable bots and clients from many sources. - -## Table of Contents - -1. [Introduction](#Introduction) -2. [Card structure](#Card-structure) -3. [Basic cards](#Basic-cards) -4. [Media cards](#Media-cards) -5. [Animation card](#Animation-card) -6. [Audio card](#Audio-card) -7. [Video card](#Video-card) -8. [Receipt card](#Receipt-card) -9. [Signin card](#Signin-card) -10. [Complex types](#Complex-types) -11. [References](#References) - -## Introduction - -### Overview - -The Activity Protocol Card schema provides a mechanism for transmitting content, layout information, and interactive elements within an interactive card. This specification does not describe the final visual form of a card, but the structure of the card suggests a layout without prescribing particular visual styles. - -These cards are typically presented as attachments within the [Activity Protocol Schema](../ManifestDefinition/BotFramework-Activity.md) schema. - -Cards are each oriented around a particular kind of content (e.g. thumbnail images, transaction receipts) but use a shared set of features and conventions. These cards are designed to be rendered within interfaces that do not have full fidelity or interactive elements; in these cases, this specification provides guidance on how to predictably and gracefully reduce the complexity of each card to preserve the intent of the original item. - -### Relationship with Adaptive Cards - -The Card schema was developed in conjunction with the v3 Activity Protocol. After Activity Protocol v3 was released, a new effort to supplant Cards with cross-application, generic cards resulted in the [Adaptive Card](https://adaptivecards.io) [[2](#References)] schema. Adaptive Cards provide a content-neutral format for data layout, in contrast to the content-specific Activity Protocol Cards. - -Adaptive Cards are the recommended choice for new card content where supported. This is true even when a specific Activity Protocol Card exists. - -Activity Protocol Cards are available where Adaptive Cards are not supported, and will be supported for existing users of the format until further announcements are made. - -### Requirements - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119) [[3](#References)]. - -An implementation is not compliant if it fails to satisfy one or more of the MUST or REQUIRED level requirements for the protocols it implements. An implementation that satisfies all the MUST or REQUIRED level and all the SHOULD level requirements for its protocols is said to be "unconditionally compliant"; one that satisfies all the MUST level requirements but not all the SHOULD level requirements for its protocols is said to be "conditionally compliant." - -### Numbered requirements - -Lines beginning with markers of the form `CXXXX` are specific requirements designed to be referenced by number in discussion outside of this document. They do not carry any more or less weight than normative statements made outside of `CXXXX` lines. - -`C1000`: Editors of this specification MAY add new `CXXXX` requirements. They SHOULD find numeric `CXXXX` values that preserve the document's flow. - -`C1001`: Editors MUST NOT renumber existing `CXXXX` requirements. - -`C1002`: Editors MAY delete or revise `CXXXX` requirements. If revised, editors SHOULD retain the existing `CXXXX` value if the topic of the requirement remains largely intact. - -`C1003`: Editors SHOULD NOT reuse retired `CXXXX` values. A list of deleted values MAY be maintained at the end of this document. - -### Terminology - -activity -> An action expressed by a bot, a channel, or a client that conforms to the Activity schema. - -card -> A Activity Protocol Card that adheres to this specification - -channel -> Software that sends and receives activities, and transforms them to and from chat or application behaviors. Channels are the authoritative store for activity data. - -bot -> Software that sends and receives activities, and generates automated, semi-automated, or entirely manual responses. Bots have endpoints that are registered with channels. - -client -> Software that sends and receives activities, typically on behalf of human users. Clients do not have endpoints. - -sender -> Software transmitting an activity. - -receiver -> Software accepting an activity. - -field -> A named value within an activity or nested object. - -## Card structure - -This section defines the requirements for the basic structure of each card. - -Cards include a flat list of name/value pairs, called fields. Fields may be primitive types. JSON is used as the common interchange format and although not all cards must be serialized to JSON at all times, they must be serializable to it. This allows implementations to rely on a simple set of conventions for handling known and unknown activity fields. - -`C2001`: Cards MUST be serializable to the JSON format, including adherence to e.g. field uniqueness constraints. - -`C2002`: Receivers MAY allow improperly-cased field names, although this is not required. Receivers MAY reject cards that do not include fields with the proper casing. - -`C2003`: Receivers MAY reject cards that contain field values whose types do not match the value types described in this specification. - -`C2004`: Unless otherwise noted, senders SHOULD NOT include empty string values for string fields. - -`C2005`: Unless otherwise noted, senders MAY include additional fields within the card or any nested complex objects. Receivers MUST accept fields they do not understand. - -### Content-type - -Cards are identified by a MIME-compatible [[4](#References)] content-type. These content-types are not specified within the card itself; instead, these values accompany the card payload. In the [Activity Protocol Schema](../ActivityDefintion/protocol-activity.md) [[1](#References)] schema, cards are included within [attachments](../ActivityDefintion/protocol-activity.md#Attachment) alongside the corresponding [`contentType`](../ActivityDefintion/protocol-activity.md#Content-type) field. - -### Transformations and display - -Displaying a card within a client user interface frequently requires the implementer to make specific decisions about how to order and constrain content to match the visual style of the enclosing design. Further, this specification anticipates that these limitations are largely unavoidable and aims to assist implementers in choosing a path that makes graceful degradation of functionality possible. - -This section provides guidance on which transformations best achieve the goal of preserving the intent of the card. - -`C3000`: A Channel's card transformations and display MUST account for all known Activity Protocol Card types and include best-effort transformations into formats suitable for display to users. - -`C3002`: Channels SHOULD preserve the ordering of text-bearing content fields as presented within this specification. Channels SHOULD NOT change the displayed format of the card based on how the fields appear in a payload transmitted by a sender. - -`C3003`: Channels MAY alter the position of non-text multimedia content within the card in relation to text-bearing fields in order to achieve visual layout goals. Channels SHOULD preserve the order of non-text multimedia content as presented within the specification. - -The `C3003` requirement is intended to allow repositioning of e.g. an image below or above a card title to match visual style within the channel. - -`C3004`: Channels SHOULD preserve all content within the card. - -`C3005`: Channels MAY establish rules requiring specific fields within card types. - -Channels are recommended to make these rules simple. - -`C3006`: Unless otherwise noted in this specification or in accordance with `C3004`, all card fields are optional. - -### Buttons - -All cards include content (in the form of one or more fields) and an array of buttons, each of which is represented by an action. Some cards include an additional card action, the "tap action," describing the behavior when the user taps the card but not any of the buttons. - -All Activity Protocol Card types except Adaptive Cards include a `buttons` field, which contains zero or more buttons to be presented to a user. The type of the `buttons` field is an array of type [`cardAction`](../ActivityDefintion/protocol-activity.md#card-action), defined in the [Activity Protocol Schema](../ActivityDefintion/protocol-activity.md) schema [[1](#References)]. - -`C4000`: Channels MAY define a minimum and maximum number of buttons to allow on each card type. - -Channels are recommended to use simple values for the minimum and maximum number of buttons and avoid complex formulas, such as changing the total number of buttons based on whether certain kinds of content are used. - -`C4001`: Channels MUST NOT change the order of buttons on a card. - -`C4002`: If a bot sends a button with action type not supported by the channel, the channel SHOULD preserve the button but provide a degraded experience. - -The best degraded experience is an interactive dialog that, upon being clicked, tells the user that the bot sent an action that is not supported. If this is not possible, showing a disabled button is preferred. If this is not possible, the button should be dropped, taking care that the order of other buttons not be changed per `C4001`. - -`C4004`: If a bot sends fewer than the minimum or more than the maximum number of buttons allowed on a card, the channel MAY drop the card. Alternatively, the channel MAY down-render the card using rules described for that card type. - -## Basic cards - -Activity Protocol defines two cards for presenting a mix of image, text, and interactive elements: -* [Hero cards](#Hero-cards), which present included images in a large banner -* [Thumbnail cards](#Thumbnail-cards), which present included images as thumbnails - -Both basic cards support a shared set of properties and generally have card-specific layout. - -#### Basic card title - -The `title` field contains the title of the card. The value of the `title` field is of type string. - -#### Basic card subtitle - -The `subtitle` field contains the subtitle of the card. The value of the `subtitle` field is of type string. - -#### Basic card text - -The `text` field contains the text of the card. The value of the `text` field is of type string. - -#### Basic card images - -The `images` field contains one or more images to be shown within the card. The value of the `images` field is an array of type [`cardImage`](#Card-image). - -`C5400`: If a bot sends more than the maximum number of images allowed on a card, the channel SHOULD drop excess images. - -`C5401`: If a bot sends fewer than the minimum or more than the maximum number of images allowed on a card, the channel MAY drop the card. - -#### Basic card buttons - -The `buttons` field is described in detail in the above section titled [Buttons](#Buttons). - -#### Basic card tap - -The `tap` field contains an action that may be activated when a user clicks on a non-button or otherwise non-interactive part of a card. The value of the `tap` field is of type [`cardAction`](#Card-action). - -`C5500`: Channels that do not support interactive image actions SHOULD drop the `tap` field while preserving the containing card. - -## Media cards - -Activity Protocol defines three kinds of cards designed expressly to transmit rich media content: -* [Animation cards](#Animation-card), for animation or video typically without sound. -* [Audio cards](#Audio-card), for audio without video -* [Video cards](#Video-card), for video that may or may not contain audio - -All media cards support a shared set of properties and have card-specific behaviors. - -`C6000`: Channels that can display media card content SHOULD document which formats are supported and corresponding limitations (minimum/maximum bitrate, resolution, etc.). - -`C6001`: Channels SHOULD use HTTP content-type when retrieving the media to establish its actual type. - -`C6002`: A channel that receives media card content of an unsupported type MAY send a hyperlink to the media to the user. - -#### Media card title - -The `title` field contains the title of the card. The value of the `title` field is of type string. - -#### Media card subtitle - -The `subtitle` field contains the subtitle of the card. The value of the `subtitle` field is of type string. - -#### Media card image - -The `image` field contains a placeholder image to be used in place of the media. The value of the `image` field is a complex object of type [`thumbnailUrl`](#Thumbnail-URL). - -#### Media card media - -The `media` field contains one or more alternative formats of the same media to be presented. The value of the `media` field is an array of complex objects of type ['mediaUrl'](#Media-URL). - -`C6401`: If a receiver receives multiple objects within the `media` array, it MAY prefer media whose `profile` field it understands. - -`C6402`: If a receiver receives multiple objects within the `media` array and it does not understand the `profile` field of any, it SHOULD display the first object in the array. - -#### Media card buttons - -The `buttons` field is described in detail in the above section titled [Buttons](#Buttons). - -`C6500`: Senders SHOULD NOT include media transport control buttons (e.g., play/pause). These are intrinsic to the media playback window. - -#### Media card shareable - -The `shareable` field describes whether a client user experience should allow the user to share the content. The value of the `shareable` field is a boolean. If omitted, the default value is `true`. - -`C6600`: Channels that do not have configurable settings for sharing content SHOULD ignore the value of the `shareable` field. - -#### Media card autoloop - -The `autoloop` field describes whether a client should automatically restart the media when it reaches the end of its content. The value of the `autoloop` field is a boolean. If omitted, the default value is `true`. - -`C6700`: Channels that do not have configurable looping for content SHOULD ignore the value of the `autoloop` field. - -#### Media card autostart - -The `autostart` field describes whether a client should automatically start playing content when received. The value of the `autostart` field is a boolean. If omitted, the default value is `true`. - -`C6800`: Channels SHOULD honor the value of the `autostart` if able and if doing so does not degrade a user's experience. - -#### Media card aspect - -The `aspect` field describes the visual aspect ratio of the media content. The value of the `aspect` field is a string with allowed values of `16:9` and `4:3`. `16:9` corresponds to media with width-to-height ratio of 16 to 9; `4:3` corresponds to media with width-to-height ratio of 4 to 3. Any other values have undefined meaning. - -This field is advisory in nature only. The media's actual aspect ratio should be determined by inspecting the media itself. - -`C6900`: Senders SHOULD list an `aspect` value corresponding to the media linked in the [`media`](#Media-card-media) field. - -`C6901`: If media of multiple aspect ratios is included in the [`media`](#Media-card-media) field, senders SHOULD include an aspect ratio for the first object in the array. - -`C6902`: Senders MAY include `aspect` values for media that do not have visual aspect ratios (e.g., audio-only media) if the `aspect` field applies to the [`image`](#Media-card-image) field for the card. - -`C6903`: Senders SHOULD NOT include `aspect` values if the media does not have a visual aspect ration and if no [`image`](#Media-card-image) field is supplied. - -`C6904`: Senders SHOULD NOT include values other than `16:9` or `4:3` unless it has knowledge that the receiver supports it. - -#### Media card duration - -The `duration` field describes the length of the media content without requiring a receiver to open the content. The value of the `duration` field is a string in [ISO 8601 duration format]((https://www.iso.org/iso-8601-date-and-time-format.html) [[6](#References)]). - -`C6920`: Senders SHOULD only send values in the ISO 8601 Duration format. Senders SHOULD NOT send times or time intervals in the `duration` field. - -`C6930`: Receivers SHOULD ignore `duration` fields they do not understand or which are in conflict with length encoded into the media. - -#### Media card value - -The `value` field contains a programmatic payload specific to this media card. - -`C6950`: Senders SHOULD NOT include `value` fields of primitive types (e.g. string, int). `value` fields SHOULD be complex types or omitted. - -### Animation card - -Animation cards contain animated image content. Typically this content does not contain sound, and is typically presented with minimal transport controls (e.g, pause/play) or no transport controls at all. Some channels treat animation and video content the same way. - -Animation cards follow all shared rules defined for [Media cards](#Media-cards). - -Animation cards are identified by a `contentType` value of `application/vnd.microsoft.card.animation`. - -### Audio card - -Audio cards contain audio content. - -Audio cards follow all shared rules defined for [Media cards](#Media-cards). - -Audio cards are identified by a `contentType` value of `application/vnd.microsoft.card.audio`. - -`C7100`: Senders SHOULD NOT send video content within audio cards. - -`C7101`: If it receives video content within an audio card, a client MAY elect to present only the audio portion of the media. - -### Video card - -Video cards contain video content. Typically this content is presented to the user with advanced transport controls (e.g. rewind/restart/pause/play). Some channels treat animation and video content the same way. - -Video cards follow all shared rules defined for [Media cards](#Media-cards). - -Video cards are identified by a `contentType` value of `application/vnd.microsoft.card.video`. - -## Receipt card - -Receipt cards contain two tables of data (a list of receipt items, and a list of facts). They are intended to be an informative display and are not necessarily actionable on their own. For integration with payment systems suitable for conducting transactions, see the [payment action](#Payment). - -Receipt cards are identified by a `contentType` value of `application/vnd.microsoft.card.receipt`. - -`C7300`: Channels SHOULD render the `items` and `facts` fields as visual tables or approximations of tables (using e.g. fixed-width formatting). - -`C7301`: Channels SHOULD render a delimiter between the `items` and `facts` field if both are present and contain any elements. - -### Receipt card title - -The `title` field contains the title of the card. The value of the `title` field is of type string. - -### Receipt card items - -The `items` field contains receipt items to be displayed in tabular form. The value of the `items` field is an array of type [`receiptItem`](#Receipt-item). - -`C7310`: Channels MUST NOT alter the order of items within the `items` array. - -### Receipt card facts - -The `facts` field contains a flat list of key/value pairs to be displayed in tabular form. The value of the `facts` field is an array of type [`fact`](#Fact). - -`C7320`: Channels MUST NOT alter the order of items within the `facts` array. - -`C7321`: Channels SHOULD NOT reject the `facts` field or its contents if more than two items have the same [`key`](#Fact-key). - -Although `facts` contains key-value pairs, receivers should not take the key-value pairing literally, and should allow duplicates per `C7531`. - -### Receipt card tap - -The `tap` field contains an action that may be activated when a user clicks on a non-button or otherwise non-interactive part of a card. The value of the `tap` field is of type [`cardAction`](#Card-action). - -`C7330`: Channels that do not support interactive image actions SHOULD drop the `tap` field while preserving the containing card. - -### Receipt card total - -The `total` field contains the total field to be displayed on the receipt. The value of the `total` field is a string. - -### Receipt card tax - -The `tax` field contains the tax field to be displayed on the receipt. The value of the `tax` field is a string. - -### Receipt card VAT - -The `vat` field contains the value-added tax (VAT) field to be displayed on the receipt. The value of the `vat` field is a string. - -### Receipt card buttons - -The `buttons` field is described in detail in the above section titled [Buttons](#Buttons). - -## Signin card - -Signin cards are used to send a sign-in request to a user. Channels that support sign-in cards typically adorn the card with additional visual style to designate it as a sign-in card. - -Signin cards are identified by a `contentType` value of `application/vnd.microsoft.card.signin`. - -### Signin card text - -The `text` field contains the text of the card. The value of the `text` field is of type string. - -### Signin card buttons - -The `buttons` field is described in detail in the above section titled [Buttons](#Buttons). - -## Complex types - -This section defines complex types used within the activity schema, described above. - -### Thumbnail URL - -Some clients have the ability to display custom thumbnails for non-interactive attachments or as placeholders for interactive attachments. The `thumbnailUrl` field identifies the source for this thumbnail. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[5](#References)] are typically also allowed. - -`C8000`: Receivers SHOULD accept HTTPS URLs. - -`C8001`: Receivers MAY accept HTTP URLs. - -`C8002`: Channels SHOULD accept data URIs. - -`C8003`: Channels SHOULD NOT send `thumbnailUrl` fields to bots. - -### Card image - -Card images are used to display image content within [Hero cards](#Hero-cards) and [Thumbnail cards](#Thumbnail-cards). - -#### Card image URL - -The `url` field references image content to be displayed within a card. Data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [[5](#References)] are typically supported by channels. The value of the `url` field is of type string. - -`C8100`: Channels SHOULD accept HTTPS URLs. - -`C8101`: Channels MAY accept HTTP URLs. - -`C8102`: Channels SHOULD accept data URIs. - -#### Card image Alt tag - -The `alt` field contains equivalent content for clients that cannot process images or have not yet loaded the image. The value of the `alt` field is a string. - -#### Card image tap - -The `tap` field contains an action to be activated if the user taps on an image or associated framing. The value of the `tap` field is of type [`cardAction`](#Card-action). - -`C8120`: Channels that do not support interactive image actions SHOULD drop the `tap` field while preserving the containing card image. - -### Media URL - -A media URL object contains information about a media attachment. - -#### Media URL URL - -The `url` field contains a URL to the media. Because media URL objects do not contain content type information, data URIs, as defined in [RFC 2397](https://tools.ietf.org/html/rfc2397) [5](#References), are not supported. - -`C8200`: Receivers SHOULD accept HTTPS URLs. - -`C8201`: Receivers MAY accept HTTP URLs. - -`C8202`: Senders SHOULD NOT send data URIs. - -#### Media URL profile - -The `profile` field contains an optional hint to the client to allow it to differentiate between media URLs. The value of the `profile` field is of type string and is defined by the channel. - -### Receipt item - -A `receiptItem` is a single row to be shown within the [`items`](#Receipt-card-items) field of a [receipt card](#Receipt-card). - -#### Receipt item title - -The `title` field contains the title for the receipt item. The value of the `title` field is a string. - -#### Receipt item subtitle - -The `subtitle` field contains the subtitle for the receipt item. The value of the `subtitle` field is a string. - -#### Receipt item text - -The `text` field contains the text for the receipt item. The value of the `text` field is a string. - -#### Receipt item image - -The `image` field contains an image to be shown within the receipt item row. The value of the `image` field is an object of type [`cardImage`](#Card-image). - -#### Receipt item price - -The `price` field contains the displayed unit price with accompanying currency symbols. The value of the `price` field is a string. - -#### Receipt item quantity - -The `quantity` field contains the quantity of units in the receipt row. The value of the `quantity` field is a string. If omitted, the implied value is `1`. - -#### Receipt item tap - -The `tap` field contains an action that may be activated when a user clicks on a non-button or otherwise non-interactive part of a card. The value of the `tap` field is of type [`cardAction`](#Card-action). - -### Fact - -A `fact` is a single row to be shown within the [`facts`](#Receipt-card-facts) field of a [receipt card](#Receipt-card). - -#### Fact key - -The `key` field contains the nominative component of the fact. The value of the `key` field is a string. - -#### Fact value - -The `value` field contains the objective component of the fact. The value of the `value` field is a string. - -## References - -1. [Activity Protocol Schema](../ActivityDefintion/protocol-activity.md) -2. [Adaptive Cards](https://adaptivecards.io) -3. [RFC 2119](https://tools.ietf.org/html/rfc2119) -4. [MIME media types](https://www.iana.org/assignments/media-types/media-types.xhtml) -5. [RFC 2397](https://tools.ietf.org/html/rfc2397) -6. [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) - -# Appendix I - Changes - -## 2024-11-01 - trboehre@microsoft.com -* Dropped 'Bot Framework' branding -* Dropped Swagger definitions references - -## 2018-10-08 - dandris@microsoft.com -* Add [`duration`](#Media-card-duration) field - -## 2018-07-05 - dandris@microsoft.com -* Initial draft diff --git a/docs/index.md b/docs/index.md index 07de900..23acfa3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,9 +1,5 @@ # Microsoft 365 Agents Framework -## Specifications -- [Activity Protocol - Activity](./ActivityDefintion/protocol-activity.md) -- [Activity Protocol - Cards](./ActivityDefintion/protocol-cards.md) - ## Running and configuring an Agent - [Running an Agent](./HowTo/running-an-agent.md) - [Creating an Azure Bot - Single Tenant](./HowTo/azurebot-create-single-secret.md)