ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

PowerAutomate クラウドフロー で Vivaエンゲージ(Yammer)にメッセージの種類(ディスカッション・質問・称賛・投票)を指定して投稿する

Viva エンゲージ(Yammer)のコミュニティにメッセージを投稿するとき通常はメッセージの種類(ディスカッション・質問・称賛・投票)を選ぶことができますが、PowerAutomate で投稿する場合に使用するYammer コネクタの「投稿メッセージ」アクションは"ディスカッション"でしか投稿できません。

私の運営しているコミュニティでは匿名で投稿したいという根強い要望があり、Formsで受け付けて管理人が代理投稿する運用をしているのですが、Yammer コネクタの「投稿メッセージ」アクション ではメッセージの種類が指定できないので自動化ができないという課題がありました。
今回はこの課題に対する解決策を調べてみました。

解決したいこと

Yammer コネクタの「投稿メッセージ」アクション ではメッセージの種類を指定できない。 質問形式で Power Automate クラウドフローから投稿したい! (できれば称賛・投票も)

解決方法 - Yammer REST API をつかう

困ったときは idea.toString();

いつも 参考にさせていただいいている OTA Hirofumi さんの idea.toString(); からヒントを得て調べてみました。 idea.tostring.jp

Yammer REST API

SharePoint コネクタの「SharePoint に HTTP 要求を送信します」アクションを使って、Yammer REST APIでメッセージを投稿すれば実現できそうです。
SharePoint コネクタ「SharePoint に HTTP 要求を送信します」アクションでYammer REST APIを使う事はアクションの想定外の使い方と思われます。ある日突然使えなくなる可能性がありますのでその点は注意。

Microsoft learn ページにはメッセージの種類に関する説明は見当たりませんが、今回は最低限下記の2つは必要そうな事がわかりました。

パラメーター 説明
body メッセージ本文
group_id コミュニティのID

learn.microsoft.com

group_id を取得する

コミュニティのIDを調べるには Yammerコネクタの「グループを取得します」アクションがお手軽です。 Power Automate クラウドフロー で実行すれば、出力としてコミュニティのリストが返ってきますので投稿するコミュニティのidをメモしておきます。

[
  {
    "full_name": "All Company",
    "id": 135625498624,
    "type": "group"
  },
  {
    "full_name": "テストコミュニティ",
    "id": 135627767808,
    "type": "group"
  },

(中略)

  {
    "full_name": "テストc7",
    "id": 137066881024,
    "type": "group"
  }
]

メッセージの種類を分ける値を特定する

Yammer コネクタ 「グループ内のメッセージを取得する (V2)」で実際の投稿データを確認しメッセージの種類は下記の値で変わることがわかりました。

メッセージの種類 message_type attachments/type
ディスカッション update -
質問 question -
賞賛 update praise
投票 update poll

困ったときはchatGPT

困ったときは…charGPTに聞いてみました。 中略

称賛(praise)

投票

結果的には多少間違っている個所もありましたが大きなヒントになりました。
これらを参考にPower Automate フローに実装してみます。

Power Automate フローで実装してみる

SharePoint コネクタの「SharePoint に HTTP 要求を送信します」アクションをフローに追加し設定していきます。

パラメーター 説明
サイトのアドレス https://www.yammer.com/
方法 POST
URL /api/v1/messages.json
ヘッダー 未設定でOK
ボディ メッセージの種類ごとに異なるjsonを設定する

ディスカッションの場合

この形式はYammer コネクタの「投稿メッセージ」アクションで送信できますが、敢えてAPIで送信するのであればこちらのjsonでできます。

{
    "body": "テスト",
    "group_id": "ここにgroup_Id"
}

質問 の場合

質問を投稿する場合は、message_type:"question"を指定します。

{
    "body": "テスト",
    "group_id": "ここにgroup_id",
    "message_type":"question"
}

投票 の場合

投票を投稿する場合は下記の2つが最低限必要です。

  • message_type : poll
  • poll_options

poll_option には、最低限選択肢の文字列のみの配列で投稿可能でした。

{
    "body": "テスト",
    "group_id": "ここにgroup_id",
    "message_type":"poll",
    "poll_options": ["答えA","答えB","答えC"]
}

称賛 の場合

これだけ少し手間がかかります。

Yammer REST API でユーザーIDを取得する

まず、賞賛するユーザーのIDが必要です。ここでのIDはYammer独自の内部的なIDになります。 その為、Yammer REST API をつかってメールアドレスからユーザーIDを検索します。

パラメーター 説明
サイトのアドレス https://www.yammer.com/
方法 GET
URL /api/v1/users/by_email.json?email=ここにメールアドレス
ヘッダー 未設定
ボディ 未設定

アクションの出力はアレイになっているのでfirst関数で1つめのidを取得します。

first(body('SharePoint_に_HTTP_要求を送信します-userId取得'))?['id']

称賛を投稿するJSON

最低限のjson はこちらです。

{
  "message_type": "praise",
  "group_id": "ここにgroup_id",
  "skip_body_notifications": true,
  "praise": "{\"comment\":\"よくできました\",\"icon\":\"thumbsup\",\"praised_user_ids\":[称賛するユーザーID]}"
}
パラメーター 説明
message_type praise
group_id コミュニティのID
skip_body_notifications true
praise ※↓の3つを文字列として指定
 comments メッセージ
 icon 表示するアイコンを指定
 praised_user_ids 称賛するユーザーID(複数指定可能)
icon に設定できる値
アイコン 設定する値
thumbsup
trophy
glasses
star
doublerainbow
gift
pie
ninja
monocle
lightbulb
heart
graduationcap
diamond
coffee
money
ace
checkeredflag
【重要】praise に設定する値は文字列

praise に設定する値は 文字列として設定しないとエラー となってしまいます。
このあたりもっと良い手段がないか引き続き調査中です。

実行してみる

ばっちりメッセージの種類を指定して投稿する事が出来ました!

ディスカッション

質問

投票

称賛

最後に

今回は chatGPT の答えから試してみるアプローチをとってみました。
ゼロから調べるよりも大幅に時間短縮できた感があります。とはいえ、一部正しくない答えもありましたので裏取りが必須ですね。
試行錯誤をしている際に、メッセージの投稿フローは正常に完了するけれどコミュニティにメッセージが表示されなくなるという状況に陥り、どうやっても回復できずこのコミュニティは削除しました。
かならずテスト環境でテストする。これ絶対必要です。