見出し画像

Teamsのbotに○○さんと言わせたい。


単なるユーザの名前の表示

Bot Framework Composerを使えば簡単です。
turn.activity.from.name
この変数に入っています。

メールアドレスを取得して表示

ちょっとマニアックですが、システム連携を考えると、表示名は全然使えません。ですので、turn.activity.from.aadObjectIdを使います。
このaadObjectIdがAzure Active Direcotry(AAD)のIDと合致しているので、AADからuserPrincipalNameを取得するとメールアドレスが取れるということです。例によってteamsから呼び出すサービスはpythonでapp serviceアプリを作りましたが、サンプルはchatGPTに書いてもらいました。

以下、chatGPTの回答です。まま引用します。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Azure ADのObject IDからユーザー情報を取得するには、ユーザーオブジェクトの読み取りに必要な最小限のアクセス許可をアプリケーションに付与する方法があります。以下の手順を参考にしてください。

  1. Azure Portalにログインし、Azure ADテナントのページに移動します。

  2. 左側のメニューから「App registrations」または「アプリの登録」を選択します。

  3. アプリケーションの一覧から、対象のアプリケーションを選択します。

  4. 「API permissions」または「API アクセス」セクションに移動します。

  5. 「Add a permission」または「アクセス許可の追加」をクリックします。

  6. 「Microsoft Graph」を選択します。

  7. 「Application permissions」または「アプリケーションのアクセス許可」をクリックします。

  8. 検索ボックスに「User.Read.All」を入力し、検索結果から「User.Read.All」を選択します。もしくは、「User.ReadBasic.All」を選択します。

  9. 「Add permissions」または「アクセス許可の追加」をクリックして、アクセス許可をアプリケーションに追加します。

  10. 追加されたアクセス許可を保存します。

これでアプリケーションがユーザーオブジェクトの読み取りに必要なアクセス許可を持つようになりました。

以下は、PythonでObject IDを使用してユーザー情報を取得するコードの例です。

import requests
import json

# Azure AD authentication details
tenant_id = '<your-tenant-id>'
client_id = '<your-client-id>'
client_secret = '<your-client-secret>'

# Retrieve access token for authentication
token_url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/token'
data = {
    'grant_type': 'client_credentials',
    'client_id': client_id,
    'client_secret': client_secret,
    'resource': 'https://graph.microsoft.com'
}
response = requests.post(token_url, data=data)
access_token = response.json()['access_token']

# Object ID of the user
object_id = '<user-object-id>'

# Retrieve user information
user_url = f'https://graph.microsoft.com/v1.0/users/{object_id}'
headers = {
    'Authorization': f'Bearer {access_token}',
    'Content-Type': 'application/json'
}
response = requests.get(user_url, headers=headers)
user_info = response.json()

# Print user information
print(json.dumps(user_info, indent=4))

上記のコードでは、tenant_idclient_idclient_secretを適切な値に置き換えてください。また、object_idには取得したいユーザーのオブジェクトIDを指定します。

これにより、アプリケーションが必要なアクセス許可を持つことなく、Azure ADのObject IDからユーザー情報を取得できるようになります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

これはすごい(笑)と喜んで使いました。
ちなみにですが、client_idはAzure Active Directoryのアプリの登録にあるアプリのIDです。client_secretはそこに登録されているシークレットです。最初のシークレットはBot Framework Composerから見ることができます。追加しても全然問題はないですけれども。

この記事が気に入ったらサポートをしてみませんか?