CData Software Blog

クラウド連携のCData Software の技術ブログです。

Microsoft Teamsドライバを使って指定したチャネルにメッセージを送信する

こんにちは、CData Software Japanエンジニアの浦邊です。 本記事ではCData Microsoft Teams Driversを使ってTeamsのチャネルにメッセージを送信する方法を紹介します。

CData Microsoft Teams Drivers

CData Microsoft Teams DriversはJavaや.NETアプリケーションからTeamsのAPIを扱うことができるドライバです。 JDBCODBC, ADO.NETのデータソースをサポートするアプリケーションであれば、ドライバを組み込むだけでノーコードでTeamsのデータにアクセス可能です。 30日の無料評価版をお使いいただけますのでお気軽にお試しください。 https://www.cdata.com/jp/drivers/msteams/

基本的な使い方

CData Microsoft Teams DriversはTeams APIへのアクセスをSQLに置き換えるインタフェースを提供します。 例えばチャネルを取得するAPIへのGETリクエストは以下のようにChannelsテーブルへのSELECT文によって実行できます。

select * from Channels;

その他接続方法やサポートするテーブル等はドライバのヘルプをご覧ください。

ODBC: CData ODBC Driver for Microsoft Teams - CData ODBC Driver for Microsoft Teams JDBC: CData JDBC Driver for Microsoft Teams - CData JDBC Driver for Microsoft Teams ADO: CData ADO.NET Provider for Microsoft Teams - CData ADO.NET Provider for Microsoft Teams

ドライバを使ったメッセージの送信方法

ドライバでメッセージを送信するにはSendMessageストアドプロシージャを使用します。 例えば指定したチャネルに「こんにちは」というメッセージを送信する場合、以下のようなストアドプロシージャを実行します。

exec SendMessage
@Content = 'こんにちは', -- 送信するメッセージ
@TeamId = 'fab218d1-ae5d-4aa4-b217-4b269159fc50' -- 送信先チャネルのチームID, 
@ChannelId = '19:954aee14863d4031aa532313695e975b@thread.tacv2' -- 送信先チャネルのID;

実行結果

f:id:urabe_shintaro:20210617130102p:plain

SendMessageストアドプロシージャの実行にはメッセージ送信先のチームIDとチャネルIDが必要です。 以下ではTeams画面またはドライバでアクセスできるデータから、チームIDとチャネルIDを取得する方法を説明します。

チームIDとチャネルIDの取得方法

Teams画面のリンクから取得

チャネルのメニューから、[チャネルへのリンクを取得]をクリックします。

f:id:urabe_shintaro:20210617132724p:plain

ここで表示されるリンクの文字列にチームIDとチャネルIDが含まれています。

f:id:urabe_shintaro:20210617132741p:plain

リンクの文字列の中で、channel/の後に続く文字列がチャネルID、groupId=の後に続く文字列がチームIDです。 チャネルIDは:や@の記号を含むため、リンク中ではURLエンコードされていることにご注意ください。

f:id:urabe_shintaro:20210617140521p:plain

データから取得

ドライバを利用する場合、チームのリストはTeamsテーブル、チャネルのリストはChannelsテーブルから取得できます。 例えば以下のSQLを実行することで、チーム名、チームID、チャネル名、チャネルIDを含む一覧を取得できます。

select teams.displayName as teamName, channels.displayName as channelName, teams.id as teamId, channels.id as channelId from channels join teams on channels.teamId = teams.id;

実行結果

f:id:urabe_shintaro:20210617133736p:plain

SendMessageの実行例

ここからはSendMessageストアドプロシージャの実行例を示します。

テキストメッセージを送信する

シンプルなテキストメッセージを送信するSQLは以下の通りです。 送信するメッセージと、送信先のチームID、チャネルIDを指定します。

exec SendMessage
@Content = <メッセージ>,
@TeamId = <チームID>,
@ChannelId = <チャネルID>;

exec SendMessage
@Content = 'こんにちは',
@TeamId = 'fab218d1-ae5d-4aa4-b217-4b269159fc50',
@ChannelId = '19:954aee14863d4031aa532313695e975b@thread.tacv2';

実行結果

f:id:urabe_shintaro:20210617130102p:plain

HTMLメッセージを送信する

HTML形式のメッセージを送信するには@ContentTypeパラメータを追加し「html」を設定します。

exec SendMessage
@Content = <メッセージ>,
@ContentType = 'html',
@TeamId = <チームID>,
@ChannelId = <チャネルID>;

exec SendMessage
@Content = '<h1><font color="blue">こんにちは</font></h1>',
@ContentType = 'html',
@TeamId = 'fab218d1-ae5d-4aa4-b217-4b269159fc50',
@ChannelId = '19:954aee14863d4031aa532313695e975b@thread.tacv2';

実行結果

f:id:urabe_shintaro:20210617130051p:plain

重要度が高いメッセージを送信する

メッセージの重要度を指定するには@Importanceパラメータを追加し、重要度に応じてhigh(重要)またはurgent(緊急)を設定します。

exec SendMessage
@Content = <メッセージ>,
@Importance = <重要度>,
@TeamId = <チームID>,
@ChannelId = <チャネルID>;

exec SendMessage
@Content = 'こんにちは',
@Importance = 'urgent',
@TeamId = 'fab218d1-ae5d-4aa4-b217-4b269159fc50',
@ChannelId = '19:954aee14863d4031aa532313695e975b@thread.tacv2';

実行結果

f:id:urabe_shintaro:20210617130039p:plain

ユーザにメンションする

ユーザへのメンションではメッセージ中にメンションを示すテキスト「メンションテキスト」と、メンション先の「宛先ユーザID」の二つの値を指定します。 ユーザIDの取得方法については本章末尾に記載しています。

f:id:urabe_shintaro:20210617152102p:plain

ユーザにメンションする際は@Mentionパラメータを追加し、値にメンションテキストと宛先ユーザIDをカンマ区切りで指定します。 ちなみにメンションを指定するとContentTypeには自動的にhtmlが設定されます。

exec SendMessage
@Content = <メッセージ>,
@TeamId = <チームID>,
@ChannelId = <チャネルID>;
@Mention = <メンションテキスト,宛先ユーザID>

exec SendMessage
@Content = 'こんにちは',
@TeamId = 'fab218d1-ae5d-4aa4-b217-4b269159fc50',
@ChannelId = '19:954aee14863d4031aa532313695e975b@thread.tacv2',
@Mention = 'テスト太郎,5047eef8-613b-45d3-aa4a-6b9053df3e12';

実行結果

f:id:urabe_shintaro:20210617130016p:plain

複数のユーザにメンションする際はメンションテキストと宛先ユーザIDのセットをセミコロンで区切ります。

exec SendMessage
@Content = <メッセージ>,
@TeamId = <チームID>,
@ChannelId = <チャネルID>;
@Mention = <メンションテキスト1,宛先ユーザ1ID>;<メンションテキスト2,宛先ユーザ2ID>;...

exec SendMessage
@Content = 'こんにちは',
@TeamId = 'fab218d1-ae5d-4aa4-b217-4b269159fc50',
@ChannelId = '19:954aee14863d4031aa532313695e975b@thread.tacv2',
@Mention = 'テスト太郎,5047eef8-613b-45d3-aa4a-6b9053df3e12;テスト二郎,896bdf2c-7a8b-4db1-bc27-369d0d31996d;テスト三郎,00cdf4d7-f13e-49db-a64a-9510869c5d32';

実行結果

f:id:urabe_shintaro:20210617130005p:plain

ユーザIDの取得方法

ここではメンションに必要なユーザIDの取得方法を説明します。

Microsoft 365管理センターから取得

Microsoft 365の管理者アカウントでMicrosoft 365管理センターにアクセスし、メニューの[ユーザー]から[アクティブなユーザー]を開きます。 [ユーザーのエクスポート]をクリックすると、ユーザIDを含んだユーザ情報のリストがダウンロードできます。

f:id:urabe_shintaro:20210617135531p:plain

データから確認

ドライバからユーザIDを取得する場合はUsersテーブルにアクセスします。 以下のSQLでユーザ名、メールアドレス、IDの一覧が取得できます。

select displayName, mail, id from Users;

おわりに

今回はCData Microsoft Teams DriversのSendMessageストアドプロシージャを使ってチャネルにメッセージを送信する方法を説明しました。 ドライバは他にもグループやチーム、チャネルの取得、作成、変更などが可能です。 CData Microsoft Teams Driversは30日間無料でお使いいただけますので、Microsoft Teams APIとの連携をご検討の方はぜひお試しください。