質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

Teamsに自動でメッセージを投稿する方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 339

ot2os

score 23

 やりたい事 

ExcelのVBAで抽出した値をTeamsの任意のチーム内に自動でメッセージ送信したいと思います。
VBAで目的の値を出すところまではできたのですが、それをTeamsで送信する方法が分かりません。

 試したこと 

何分初めてのことなのでもしかしたら見当はずれな事をしているかもしれませんが、下記のようなコードを試してみました。

また、
https://docs.microsoft.com/ja-jp/graph/api/channel-post-messages?view=graph-rest-1.0&tabs=http
を参考にしました。

ちなみに、検証に使用しているPCではTeamsのアプリをインストール済みです。

●.htmlファイルで下記のコードを記載してファイルを実行する。

<html lang="ja">
<head>
<title>test</title>

<SCRIPT LANGUAGE="JavaScript">
<!--

//-->
</SCRIPT>

</head>
<body bgcolor="#FFFFF0">

<noscript>Javaを有効にしてください<BR>ActivXコントロール有効化ボタンが出ている場合は[ブロックされているコンテンツを許可]をクリックしてください。<BR></noscript>

<script type="text/javascript">
<!--

const options = {
    authProvider,
};

const client = Client.init(options);

const chatMessage = {
    body: {
        contentType: "html",
        content: "Here's the latest budget. <attachment id=¥"153fa47d-18c9-4179-be08-9879815a9f90¥"></attachment>"
    },
    attachments: [
        {
            id: "153fa47d-18c9-4179-be08-9879815a9f90",
            contentType: "reference",
            contentUrl: "https://m365x987948.sharepoint.com/sites/test/Shared%20Documents/General/test%20doc.docx",
            name: "Budget.docx"
        }
    ]
};

let res = await client.api('/teams/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/channels/YY:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY@thread.skype/messages')
    .post(chatMessage);

-->
</script>


</body>
</html>

結果、Internet Explorer 11だと下記のエラー
SCRIPT1003: ':' がありません。 postTeams.html (19,34)

Google Chromeだと下記のエラーが出ました。
Uncaught SyntaxError: await is only valid in async function postTeams.mthl:40

エラーメッセージはそれぞれ「開発者ツール」の「コンソール」で確認したものです。

●JScript(.jsファイル)で作成した場合

const options = {
    authProvider,
};

const client = Client.init(options);

const chatMessage = {
    body: {
        contentType: "html",
        content: "Here's the latest budget. <attachment id=¥"153fa47d-18c9-4179-be08-9879815a9f90¥"></attachment>"
    },
    attachments: [
        {
            id: "153fa47d-18c9-4179-be08-9879815a9f90",
            contentType: "reference",
            contentUrl: "https://m365x987948.sharepoint.com/sites/test/Shared%20Documents/General/test%20doc.docx",
            name: "Budget.docx"
        }
    ]
};

let res = await client.api('/teams/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/channels/YY:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY@thread.skype/messages')
    .post(chatMessage);

実行時、下記のエラーが表示されました。
行: 1 文字: 1 エラー: 構文エラーです。 コード: 800A03EA ソース: MicrosoftJScriptコンパイルエラー

●Excel(.xlsm)内のVBAに直接記載した場合

Sub POST()
  Dim req As Object
  Dim dat As Variant

  Set req = Nothing '初期化
  Set req = CreateObject("Msxml2.XMLHTTP") 'CreateHttpRequest()

    req.Open "POST", "https://graph.microsoft.com/v1.0/teams/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/channels/YY:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY@thread.skype/messages", False

    dat = "Content-type: application/json" & _
    "{  ""body"": {    ""content"": ""Hello World""  }}"

  req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  req.Send dat

    Debug.Print "Status:" & req.Status
    Debug.Print "responseText:" & req.responseText

End Sub

「イミディエイト」ウィンドウに出力された結果。

Status:401 responseText:{   "error": {     "code": "InvalidAuthenticationToken",     "message": "Access token is empty.",     "innerError": {       "date": "2020-07-09T05:13:00",       "request-id": "ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ"     }   } }

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

VBAのエラー内容だけみての回答となってしまいますが
ヘッダーにAuthorizationを追加して、アクセスキーを送ってあげる必要がありますが
入れていますでしょうか?

認証トークンの取得は下記サイトに記載されております
https://docs.microsoft.com/ja-jp/graph/auth/?context=graph%2Fapi%2F1.0&view=graph-rest-1.0

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/16 14:51

    ありがとうございます。

    頂いた情報をいろいろ読んでみましたが、どうやら「Azureポータル」とやらにサインインしてから環境を設定しないといけないようですね。
    そして、試してみたところ「これに対するアクセス権がありません」表示でした。

    おそらく、上に許可してもらわないと使えないようですね。

    他にも方法が無いかと思い調べてみましたが、当方の環境だと上からの許可が下りていないのか、あるはずのメニューが無かったりとどれも使えないものばかりでした。

    キャンセル

  • 2020/07/16 14:57 編集

    下記の「管理者の同意」が必要です。
    https://qiita.com/massie_g/items/fe7540161aa4a5f86bf5

    グローバル管理者ロールを持っている方しか許可できないので、
    必要なアクセス追加後に依頼してみてください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る