はじめに
組織独自で登録して使用できるカスタム絵文字
をPower Automate から投稿するフローです。
応用してPower Appsからも投稿できると思います。
ここで説明する方法は、公式ドキュメントなどから参照した情報ではなく、筆者独自に調査したものです。
運用環境で使用される場合は、十分配慮の上ご検討ください。
カスタム絵文字を調べる
カスタム絵文字を投稿するには、カスタム絵文字を特定する2つの情報が必要です。
ここでは便宜上、Name
とId
としておきます。
Name
は絵文字を登録するときの名前です。これとは別に識別子っぽいId
の情報が必要となります。
まずはこの2つの情報を調べるフローを作成します。
メッセージの詳細を取得
続いてメッセージ詳細を取得する
を使用して、カスタム絵文字がどんな風に表現されているか調べてみます。
カスタム絵文字の表現
本文(body/content
)は以下のようになっていました。
<p>絵文字だよ<customemoji
id="ZXhjZWw7MC13dXMtZDUtN2Q0NjY5NDdiNmMwZTU0NmQyMTE4OTc3M2QxZmJmOTU="
alt="excel"
source="https://us-prod.asyncgw.teams.microsoft.com/v1/objects/0-wus-d5-7d466947b6c0e546d21189773d1fbf95/views/imgt2_anim">
</customemoji>
</p>
上記の例ではcustomemoji
タグのalt
属性excel
がName
、source
属性の中の0-wus-d5-7d466947b6c0e546d21189773d1fbf95
がId
となります。
また、ZXhjZWw7MC13dXMtZDUtN2Q0NjY5NDdiNmMwZTU0NmQyMTE4OTc3M2QxZmJmOTU=
をbase64でデコードすると、以下のようになります。
excel;0-wus-d5-7d466947b6c0e546d21189773d1fbf95
どちらからとっても良いのですが、両方含まれてお得なデコードしたテキストから取得することにしました。
本文から情報を取り出す
カスタム絵文字のタグが複数あってもいいように、本文を<customemoji id="
で区切って配列を作成します。
<customemoji id="
より前の最初のテキストは不要なので、skip
関数で省いています。
skip(
split(
outputs('メッセージ詳細を取得する')?['body/body/content'],
'<customemoji id="'
),
1
)
それぞれの絵文字のタグから、<customemoji id="
より後ろ、次の"
より前のテキストを抽出するため、選択アクションでそれぞれの配列要素をさらにsplit
し、base64でデコードして、;
でさらに区切って前の方をName
後ろの方をId
とします。
split(
decodeBase64(
split(
item(),
'"'
)?[0]
),
';'
)?[0]
split(
decodeBase64(
split(
item(),
'"'
)?[0]
),
';'
)?[1]
確認のためTeamsチャットで送りました。
一度調べたカスタム絵文字の情報は、SharePointリストなどに保管しておくと使いやすいと思います。
とりあえず、この情報があれば投稿もできるので、次に進みましょう。
カスタム絵文字を投稿する
カスタム絵文字を表現するHTMLが必要です。
Name
とId
を使って以下のように作成します。
<img alt="@{variables('Name')}" itemid="@{variables('Name')};@{variables('Id')}" itemtype="http://schema.skype.com/CustomEmoji" src="https://us-prod.asyncgw.teams.microsoft.com/v1/objects/@{variables('Id')}/views/imgt2_anim" style="width:20px;height:20px;">
あとはこのタグを使って投稿するだけです。
メッセージ内に埋め込んで投稿しましょう。
おわりに
とりあえず投稿はできましたが、あらかじめ情報を調べておかないといけないのが大変ですね。
一覧取得できるアクションやAPIがあればいいのですが…
ちなみに私は組織の絵文字の管理者権限で、すべての絵文字の情報をあらかじめ取得して公開するようにしておきました。(強権)
よりよい方法があれば教えてください!