Microsoft Teams’e bir Worker Üzerinden Mesaj Atmak

Selamlar,

Bugün .Net 9 ile yazılmış bir worker üzerinden nasıl Teams’deki bir user’a mesaj atabileceğimizi göreceğiz.

Öncelikle aşağıdaki gibi bir akış şeması bize en azından bir ön fikir verecektir:

1-) İlk yapılması gereken iş, Azure üzerinde App Registrations’ın yapılmasıdır. İlgili app yaratıldıktan sonra, mesajlaşma için gerekli izinlerin verilmesi gerekmektedir. Gerekli mesajlar belki biraz daha fazlası :) yazının devamında gösterilecektir.

2-) İlgili App yaratıldıktan sonra ClientID ve TenantID Overview tabından aşağıdaki gibi alınarak kaydedilmelidir.

 

3-) Son olarak Certificates & Secrets kısmında sadece ilk sefer görünen, “Secret Value” değeri not alınmalıdır.

4-) API permissions olarak ihtiyacıma göre aşağıdaki yetkileri verdim. Sizin hepsine ihtiyacınız olmayabilir. Daha öz halleri için, bu makaleyi ileride güncelleyebilirim.

Yetki Verme işlemi:

  • Add a Permission tıklanıp aşağıda görüldüğü gibi Microsoft Graph menüsüne girilir.

  • Aşağıda görüldüğü gibi alınması gereken yetkiye göre hem Delegated hem de Application permissions alanlarına gerekli izinler verilir.

Öncelikle .Net 9 Console Application oluşturuyoruz. Sonrasında kaydedilen TenantID, ClientID ve Client Secret aşağıdaki gibi değişkenlere atanır.

Teams üzerinden mesajlaşma için aşağıdaki kütüphaneler Nuget’den indirilir. Ben, tüm Teams işlemlerini Graph Library ile çözerek değişmesi muhtemel, tüm servis yollarından kurtuldum. Bir değişim olması durumunda, ilgili kütüphaneyi güncelleyerek siz de bu sorunu kolaylıkla aşabilirsiniz.

Create User:

Öncelikle ilk sefer için bir BotUser’in yaratılması gerekmektedir. Graph kütüphanesi üzerinde, birden fazla Credential yöntemi bulunmaktadır. Biz bu örnekte Azure Identity Credential kullanacağız. Aşağıdaki örnekte yaratılacak BOTUseri’ın mail adresi ve görünecek Nick’i parametrik olarak verilmiştir.

CreateUser():

Aşağıda görüldüğü gibi ilgi botUser için gerekli ayarlamalar yapılmıştır. Bu şekilde bir Guest user yaratımında mesaj atmak için, ayrıca bir sertifika tanımlamasına gerek duyulmamaktadır.

  • UserType= Guest olarak ayarlanmiştır.
  • “ShowInAddressList = false” olara kayarlanmış ve böylece Outlook, Teams gibi hiçbir User listesinde gelmemesi sağlanmıştır.
  • “PasswordPolicies” ayarı ile atanan şifrenin hiçbir zaman expire olmaması sağlanmıştır.

İlgili user’ı bir seferlik yarattığımıza göre, test amaçlı bütün Userları listeletip yeni eklenen BotUser’ı hep beraber görelim.

Find UserID:

Premium Vector | Personal profile data info file icon or employee credential account information document flat

GetAllUsersList(): Aşağıda görüldüğü gibi tüm kullanıcı listesi “Azure Identity: ClientSecretCredential” ile, sayfalama da göz önüne alınarak listelenmektedir. Burada önemli olan UserID alanıdır. Graph Api üzerinde çoğu mesajlaşma işlemleri, UserIDler üzerinden yapılmaktadır.

Yeni yaratılan BotUser da ilgili listede görüldüğüne göre, sırada mesaj gönderilecek Userın ve mesajı gönderecek BotUserın, IDlerinin bulunacağı methodu yazmaya geldi.

FindUserIdByEmail(): Bu method, mesajlaşma için kullanılacak UserIDleri, userların Mailleri ile bulunmasını sağlar. Aşağıda görüldüğü gibi filitreleme amacı ile “requestConfiguration.QueryParameters.Filter” kullanılmaştır.

Örnek kullanım şekli ve çıktı: Aşağıda görüldüğü gibi “from” ve “to” userlarin UserIDleri ilgili listede görülmektedir.

Create Chat:

How to Achieve AI-like Group Chat Service

Artık userlarin IDlerini mailler ile bulduğumuz göre, şimdi One To One bir chat yaratabiliriz. Aşağıda görüldüğü gibi esas amacımız, bir chat yaratıp bunun da ChatID’sini alabilmektir. Chat yaratmak için burda da, gene “ClientSecretCredential” kullanılmıştır.

CreateOneOnOneChat(): Mesajın, kimden kime gönderileceğinin tanımlandığı kısımdır. Bot ile kullanıcılara mesaj atma işinde from kısmı, her zaman yeni yarattığımız Userdır ve ona ait UserID kullanılır. Gönderilecek olan userın da mailinden UserID’si bulunup, ilgili Chat create edilir ve karşılığında yeni bir ChatID aşağıdaki gibi alınır.

 Send Message:

Artık Chat’imizi üretip chatID’yi de aldığımıza göre, bunu ilgili kişiye gönderebiliriz.

Yukarıdaki düz text mesaj yerine, aşağıda görüldüğü gibi HTML bir sayfa da Teams’den mesaj olarak gönderilebilir. Yukarıda dikkat edildi ise “ClientSecretCredential()” yerine “UsernamePasswordCredential()” ile mesaj atma operasyonunu, yetki hatasına takılmadan başarabildim. Burada girilen username ve şifre, yeni yaratılan BotUser’a aittir. Bu şifre ve passwordün cloud üzerinde tutulması, güvenlik açısından çok daha iyi olacaktır. Makalenin ana konusundan uzaklaşılmaması adına, bu şekilde yani doğrudan bir giriş yapılmıştır. İlgili makaleye buradan erişebilirsiniz.

SendMessageToChat():

Aşağıda görüldüğü gibi Html bir mesaj tipi gönderildiği için, Body içerisinde “ContentType = BodyType.Html” olarak tanımlanmıştır. Ayrıca “graphClient.Chats[chatId]” ile yukarıda yaratılan chat bulunmuş ve aşağıda oluşturulan “ChatMessage” ile ilgili kişiye gönderilmiştir.

Örnek Teams’den Giden Mesaj: Aşağıda görüldüğü gibi, Teams üzerinden bir botdan gerçek bir user’a Html bir mesaj başarı ile gönderilmiştir.

Geldik bir makalenin daha sonuna. Bu makalede bir Console Application ya da daha gerçekçi bir senaryo ile bir .Net Microservisden nasıl Teams üzerinde bir User’a mesaj gönderebileceğimiz konusu detaylıca inceledik.

Yeni bir makalede görüşmek üzere hepinize hoşçakalın.

Github: https://github.com/borakasmer/SendMessageToTeams/tree/main

Source:

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.