First of all, its even possible? I have been trying Microsoft.Graph and Microsoft.Bot.Connector I dont want to send message on channel, i want it as private chat Some code example:
private readonly string appId = "id";
private readonly string appPassword = "pass";
public async Task<IActionResult> SendMessage(string userId ="id-test", string message ="test")
{
var connector = new ConnectorClient(new Uri("https://smba.trafficmanager.net/pl-pl/"), new MicrosoftAppCredentials(appId, appPassword));
var conversationParameters = new ConversationParameters
{
Bot = new ChannelAccount(appId),
Members = new List<ChannelAccount>
{
new ChannelAccount(userId)
},
ChannelData = new TeamsChannelData
{
Tenant = new TenantInfo
{
Id = "tent-id"
}
}
};
var conversationResource = await connector.Conversations.CreateConversationAsync(conversationParameters);
var conversationId = conversationResource.Id;
var messageActivity = new Microsoft.Bot.Schema.Activity
{
Type = ActivityTypes.Message,
From = new ChannelAccount(appId),
Text = message,
ChannelData = new TeamsChannelData
{
Tenant = new TenantInfo
{
Id = "tent-id"
}
}
};
await connector.Conversations.SendToConversationAsync(conversationId, messageActivity);
return Ok();
}
Or
private const string ClientId = "id";
private const string ClientSecret = "cs";
private const string TenantId = "id";
[HttpPost]
public async Task<ActionResult> SendMessage(string recipientId = "id", string message = "test")
{
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(ClientId)
.WithClientSecret(ClientSecret)
.WithRedirectUri("https://localhost:44333/Test/SignInComplete")
.WithAuthority($"https://login.microsoftonline.com/{TenantId}")
.Build();
string[] scopes = new string[] { "User.Read", "Chat.ReadWrite" };
var authResult = await confidentialClientApplication.AcquireTokenByAuthorizationCode(scopes, "WSTAW_KOD_AUTORYZACJI").ExecuteAsync();
GraphServiceClient graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
return Task.CompletedTask;
}));
var chatMessage = new ChatMessage
{
Body = new ItemBody
{
Content = message
}
};
try
{
await graphClient.Users[recipientId].Chats["id_chat"].Messages
.Request()
.AddAsync(chatMessage);
return Content(" ");
}
catch (ServiceException ex)
{
return Content($" : {ex.Message}");
}
}
Any Ideas or other sugestions? /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters /extra letters