ReplayTranscript.cs
1 //
2 // Copyright (c) Microsoft. All rights reserved.
3 // Licensed under the MIT license.
4 //
5 // Microsoft Bot Framework: http://botframework.com
6 //
7 // Bot Builder SDK GitHub:
8 // https://github.com/Microsoft/BotBuilder
9 //
10 // Copyright (c) Microsoft Corporation
11 // All rights reserved.
12 //
13 // MIT License:
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
21 //
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
24 //
25 // THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 //
33 
34 using Microsoft.Bot.Connector;
36 using System;
37 using System.Collections.Generic;
38 using System.Linq;
39 using System.Threading.Tasks;
40 using Newtonsoft.Json;
41 
42 namespace Microsoft.Bot.Builder.History
43 {
47  public sealed class ReplayTranscript
48  {
49  private IBotToUser _botToUser;
50  private Func<IActivity, string> _header;
51 
57  public ReplayTranscript(IBotToUser botToUser, Func<IActivity, string> header = null)
58  {
59  _botToUser = botToUser;
60  if (_header == null)
61  {
62  _header = (activity) => $"({activity.From.Name} {activity.Timestamp:g})";
63  }
64  }
65 
71  public async Task Replay(IActivity activity)
72  {
73  if (activity is IMessageActivity)
74  {
75  var msg = _botToUser.MakeMessage();
76  msg.Text = _header(activity);
77  await _botToUser.PostAsync(msg);
78 
79  var act = JsonConvert.DeserializeObject<Activity>(JsonConvert.SerializeObject(activity));
80  if (act.ChannelId != msg.ChannelId)
81  {
82  act.ChannelData = null;
83  }
84  act.From = msg.From;
85  act.Recipient = msg.Recipient;
86  act.ReplyToId = msg.ReplyToId;
87  act.ChannelId = msg.ChannelId;
88  act.Conversation = msg.Conversation;
89  await _botToUser.PostAsync(act);
90  }
91  }
92  }
93 }
Namespace for the Microsoft Bot Connector SDK.
async Task Replay(IActivity activity)
Replay activity to IBotToUser.
ReplayTranscript(IBotToUser botToUser, Func< IActivity, string > header=null)
Constructor.
object ChannelData
Channel-specific payload
Definition: Activity.cs:211
Class to collect and then replay activities as a transcript.
An Activity is the basic communication type for the Bot Framework 3.0 protocol
Definition: ActivityEx.cs:18
Namespace for internal Dialogs machinery that is not useful for most developers and may change in the...
Shared properties for all activities
Definition: IActivity.cs:9
Core namespace for Dialogs and associated infrastructure.
Methods to send a message from the bot to the user.
Definition: BotToUser.cs:51
Root namespace for the Microsoft Bot Builder SDK.