8000 Merge branch 'master' into trboehre/custom-adapter-continue_conversation · microsoft/botbuilder-python@c1fc63e · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c1fc63e

Browse files
authored
Merge branch 'master' into trboehre/custom-adapter-continue_conversation
2 parents 0f32eef + 61fe14f commit c1fc63e

File tree

11 files changed

+61
-25
lines changed

11 files changed

+61
-25
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ This repository contains code for the Python version of the [Microsoft Bot Frame
1212

1313
This repo is part the [Microsoft Bot Framework](https://github.com/Microsoft/botframework) - a comprehensive framework for building enterprise-grade conversational AI experiences.
1414

15-
In addition to the Python SDK, Bot Builder supports creating bots in other popular programming languages like [.Net SDK](https://github.com/Microsoft/botbuilder-dotnet), [JavaScript](https://github.com/Microsoft/botbuilder-js), and [Java](https://github.com/Microsoft/botbuilder-java). Production bots should be developed using the JavaScript or .Net SDKs.
15+
In addition to the Python SDK, Bot Builder supports creating bots in other popular programming languages like [.Net SDK](https://github.com/Microsoft/botbuilder-dotnet), [JavaScript](https://github.com/Microsoft/botbuilder-js), and [Java](https://github.com/Microsoft/botbuilder-java).
1616

1717
To get started see the [Azure Bot Service Documentation](https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0) for the v4 SDK.
1818

libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
ConversationAccount,
3838
ConversationParameters,
3939
ConversationReference,
40+
ExpectedReplies,
4041
TokenResponse,
4142
ResourceResponse,
4243
DeliveryModes,
@@ -459,12 +460,12 @@ async def process_activity_with_identity(
459460

460461
# Return the buffered activities in the response. In this case, the invoker
461462
# should deserialize accordingly:
462-
# activities = [Activity().deserialize(activity) for activity in response.body]
463-
if context.activity.delivery_mode == DeliveryModes.buffered_replies:
464-
serialized_activities = [
465-
activity.serialize() for activity in context.buffered_replies
466-
]
467-
return InvokeResponse(status=200, body=serialized_activities)
463+
# activities = ExpectedReplies().deserialize(response.body).activities
464+
if context.activity.delivery_mode == DeliveryModes.expect_replies:
465+
expected_replies = ExpectedReplies(
466+
activities=context.buffered_reply_activities
467+
).serialize()
468+
return InvokeResponse(status=200, body=expected_replies)
468469

469470
return None
470471

libraries/botbuilder-core/botbuilder/core/bot_framework_http_client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from logging import Logger
77
import aiohttp
88

9-
from botbuilder.schema import Activity
9+
from botbuilder.schema import Activity, ExpectedReplies
1010
from botframework.connector.auth import (
1111
ChannelProvider,
1212
CredentialProvider,
@@ -110,14 +110,14 @@ async def post_buffered_activity(
110110
) -> [Activity]:
111111
"""
112112
Helper method to return a list of activities when an Activity is being
113-
sent with DeliveryMode == bufferedReplies.
113+
sent with DeliveryMode == expectReplies.
114114
"""
115115
response = await self.post_activity(
116116
from_bot_id, to_bot_id, to_url, service_url, conversation_id, activity
117117
)
118118
if not response or (response.status / 100) != 2:
119119
return []
120-
return [Activity().deserialize(activity) for activity in response.body]
120+
return ExpectedReplies().deserialize(response.body).activities
121121

122122
async def _get_app_credentials(
123123
self, app_id: str, oauth_scope: str

libraries/botbuilder-core/botbuilder/core/turn_context.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ def __init__(self, adapter_or_context, request: Activity = None):
5151

5252
self._turn_state = {}
5353

54-
# A list of activities to send when `context.Activity.DeliveryMode == 'bufferedReplies'`
55-
self.buffered_replies = []
54+
# A list of activities to send when `context.Activity.DeliveryMode == 'expectReplies'`
55+
self.buffered_reply_activities = []
5656

5757
@property
5858
def turn_state(self) -> Dict[str, object]:
@@ -198,10 +198,10 @@ def activity_validator(activity: Activity) -> Activity:
198198
async def logic():
199199
nonlocal sent_non_trace_activity
200200

201-
if self.activity.delivery_mode == DeliveryModes.buffered_replies:
201+
if self.activity.delivery_mode == DeliveryModes.expect_replies:
202202
responses = []
203203
for activity in output:
204-
self.buffered_replies.append(activity)
204+
self.buffered_reply_activities.append(activity)
205205
responses.append(ResourceResponse())
206206

207207
if sent_non_trace_activity:

libraries/botbuilder-core/tests/test_bot_framework_adapter.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
ConversationResourceResponse,
2121
ChannelAccount,
2222
DeliveryModes,
23+
ExpectedReplies,
2324
)
2425
from botframework.connector.aio import ConnectorClient
2526
from botframework.connector.auth import (
@@ -578,7 +579,7 @@ async def callback(context: TurnContext):
578579
refs, callback, claims_identity=skills_identity, audience=skill_2_app_id
579580
)
580581

581-
async def test_delivery_mode_buffered_replies(self):
582+
async def test_delivery_mode_expect_replies(self):
582583
mock_credential_provider = unittest.mock.create_autospec(CredentialProvider)
583584

584585
settings = BotFrameworkAdapterSettings(
@@ -595,7 +596,7 @@ async def callback(context: TurnContext):
595596
type=ActivityTypes.message,
596597
channel_id="emulator",
597598
service_url="http://tempuri.org/whatever",
598-
delivery_mode=DeliveryModes.buffered_replies,
599+
delivery_mode=DeliveryModes.expect_replies,
599600
text="hello world",
600601
)
601602

@@ -613,11 +614,11 @@ async def callback(context: TurnContext):
613614
)
614615
assert invoke_response
615616
assert invoke_response.status == 200
616-
activities = invoke_response.body
617+
activities = ExpectedReplies().deserialize(invoke_response.body).activities
617618
assert len(activities) == 3
618-
assert activities[0]["text"] == "activity 1"
619-
assert activities[1]["text"] == "activity 2"
620-
assert activities[2]["text"] == "activity 3"
619+
assert activities[0].text == "activity 1"
620+
assert activities[1].text == "activity 2"
621+
assert activities[2].text == "activity 3"
621622
assert (
622623
adapter.connector_client_mock.conversations.send_to_conversation.call_count
623624
== 0

libraries/botbuilder-schema/botbuilder/schema/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from ._models_py3 import ConversationReference
2828
from ._models_py3 import ConversationResourceResponse
2929
from ._models_py3 import ConversationsResult
30+
from ._models_py3 import ExpectedReplies
3031
from ._models_py3 import Entity
3132
from ._models_py3 import Error
3233
from ._models_py3 import ErrorResponse, ErrorResponseException
@@ -74,6 +75,7 @@
7475
from ._models import ConversationReference
7576
from ._models import ConversationResourceResponse
7677
from ._models import ConversationsResult
78+
from ._models import ExpectedReplies
7779
from ._models import Entity
7880
from ._models import Error
7981
from ._models import ErrorResponse, ErrorResponseException
@@ -136,6 +138,7 @@
136138
"ConversationReference",
137139
"ConversationResourceResponse",
138140
"ConversationsResult",
141+
"ExpectedReplies",
139142
"Entity",
140143
"Error",
141144
"ErrorResponse",

libraries/botbuilder-schema/botbuilder/schema/_connector_client_enums.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class DeliveryModes(str, Enum):
9999

100100
normal = "normal"
101101
notification = "notification"
102-
buffered_replies = "bufferedReplies"
102+
expect_replies = "expectReplies"
103103

104104

105105
class ContactRelationUpdateActionTypes(str, Enum):

libraries/botbuilder-schema/botbuilder/schema/_models.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class Activity(Model):
133133
:param delivery_mode: A delivery hint to signal to the recipient alternate
134134
delivery paths for the activity.
135135
The default delivery mode is "default". Possible values include: 'normal',
136-
'notification'
136+
'notification', 'expectReplies'
137137
:type delivery_mode: str or ~botframework.connector.models.DeliveryModes
138138
:param listen_for: List of phrases and references that speech and language
139139
priming systems should listen for
@@ -806,6 +806,21 @@ def __init__(self, **kwargs):
806806
self.conversations = kwargs.get("conversations", None)
807807

808808

809+
class ExpectedReplies(Model):
810+
"""ExpectedReplies.
811+
812+
:param activities: A collection of Activities that conforms to the
813+
ExpectedReplies schema.
814+
:type activities: list[~botframework.connector.models.Activity]
815+
"""
816+
817+
_attribute_map = {"activities": {"key": "activities", "type": "[Activity]"}}
818+
819+
def __init__(self, **kwargs):
820+
super(ExpectedReplies, self).__init__(**kwargs)
821+
self.activities = kwargs.get("activities", None)
822+
823+
809824
class Entity(Model):
810825
"""Metadata object pertaining to an activity.
811826

libraries/botbuilder-schema/botbuilder/schema/_models_py3.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class Activity(Model):
133133
:param delivery_mode: A delivery hint to signal to the recipient alternate
134134
delivery paths for the activity.
135135
The default delivery mode is "default". Possible values include: 'normal',
136-
'notification'
136+
'notification', 'expectReplies'
137137
:type delivery_mode: str or ~botframework.connector.models.DeliveryModes
138138
:param listen_for: List of phrases and references that speech and language
139139
priming systems should listen for
@@ -978,6 +978,21 @@ def __init__(
978978
self.conversations = conversations
979979

980980

981+
class ExpectedReplies(Model):
982+
"""ExpectedReplies.
983+
984+
:param activities: A collection of Activities that conforms to the
985+
ExpectedReplies schema.
986+
:type activities: list[~botframework.connector.models.Activity]
987+
"""
988+
989+
_attribute_map = {"activities": {"key": "activities", "type": "[Activity]"}}
990+
991+
def __init__(self, *, activities=None, **kwargs) -> None:
992+
super(ExpectedReplies, self).__init__(**kwargs)
993+
self.activities = activities
994+
995+
981996
class Entity(Model):
982997
"""Metadata object pertaining to an activity.
983998

libraries/swagger/ConnectorAPI.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2293,7 +2293,8 @@
22932293
"description": "Values for deliveryMode field",
22942294
"enum": [
22952295
"normal",
2296-
"notification"
2296+
"notification",
2297+
"expectReplies"
22972298
],
22982299
"type": "string",
22992300
"properties": {},

samples/experimental/skills-buffered/parent/bots/parent_bot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ async def on_message_activity(self, turn_context: TurnContext):
2626
TurnContext.apply_conversation_reference(
2727
activity, TurnContext.get_conversation_reference(turn_context.activity)
2828
)
29-
activity.delivery_mode = DeliveryModes.buffered_replies
29+
activity.delivery_mode = DeliveryModes.expect_replies
3030

3131
activities = await self.client.post_buffered_activity(
3232
None,

0 commit comments

Comments
 (0)
0