Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Sending the status to citizen
/// <summary>
/// The bot is obviously stateless. When we get the message from D365, we need to parse the data to find out which citizen should receive what message on which channel.
/// </summary>
/// <param name="activity"></param>
private void CommunicateMessageToUser(Activity activity)
{
var message = JsonConvert.DeserializeObject<QueueMessage>(((JObject)activity.Value).GetValue("Message").ToString());
//Conversation ID is generally the key in order to reply to the same conversation in the channel.
if(!string.IsNullOrEmpty(message.ConversationID))
{
var recipient = new ChannelAccount(message.RecipientID, message.RecipientName);
var from = new ChannelAccount(message.FromID, message.FromName);
//These couple of lines are important to estabilish the trust that we are authorized to send the message in this channel.
var connector = new ConnectorClient(new Uri(message.ServiceURL), new MicrosoftAppCredentials(ApiKey, ApiEndpoint));
MicrosoftAppCredentials.TrustServiceUrl(message.ServiceURL);
var alertMessage = Activity.CreateMessageActivity();
if (!string.IsNullOrEmpty(message.ConversationID) && !string.IsNullOrEmpty(message.ChannelID))
{
alertMessage.ChannelId = message.ChannelID;
}
else
{
message.ConversationID = (connector.Conversations.CreateDirectConversationAsync(from, recipient)).Id.ToString();
}
//I know I am flipping the "recipient" and "from" objects. The reason is that when we originally received the message from the citizen,
//the citizen related attributes is present in the from object and bot related attributes are present in the recipient object and it makes sense as,
//the citizen sends the message and the bot receives it. But, now the table has turned. The Bot sends the message and the citizen receives it,
// which is why i flip it.
alertMessage.Recipient = from;
alertMessage.From = recipient;
alertMessage.Conversation = new ConversationAccount(id: message.ConversationID);
alertMessage.Text = message.Alert;
alertMessage.Locale = "en-Us";
//Once the connection is established to the channel and the conversation, the bot can reply with the text.
connector.Conversations.SendToConversationAsync((Activity)alertMessage);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment