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