3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Power Automate でTeamsカスタム絵文字付きメッセージを投稿する

Posted at

はじめに

組織独自で登録して使用できるカスタム絵文字をPower Automate から投稿するフローです。
応用してPower Appsからも投稿できると思います。

ここで説明する方法は、公式ドキュメントなどから参照した情報ではなく、筆者独自に調査したものです。
運用環境で使用される場合は、十分配慮の上ご検討ください。

カスタム絵文字を調べる

カスタム絵文字を投稿するには、カスタム絵文字を特定する2つの情報が必要です。
ここでは便宜上、NameIdとしておきます。

Nameは絵文字を登録するときの名前です。これとは別に識別子っぽいIdの情報が必要となります。
image.png

まずはこの2つの情報を調べるフローを作成します。

メッセージの詳細を取得

カスタム絵文字を含むメッセージの詳細を取得します。
image.png

選択したメッセージに対して(V2)トリガーを使用します。
image.png

続いてメッセージ詳細を取得するを使用して、カスタム絵文字がどんな風に表現されているか調べてみます。
image.png

カスタム絵文字の表現

本文(body/content)は以下のようになっていました。

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属性excelNamesource属性の中の0-wus-d5-7d466947b6c0e546d21189773d1fbf95Idとなります。

また、ZXhjZWw7MC13dXMtZDUtN2Q0NjY5NDdiNmMwZTU0NmQyMTE4OTc3M2QxZmJmOTU=をbase64でデコードすると、以下のようになります。

デコードしたテキスト
excel;0-wus-d5-7d466947b6c0e546d21189773d1fbf95

どちらからとっても良いのですが、両方含まれてお得なデコードしたテキストから取得することにしました。

本文から情報を取り出す

カスタム絵文字のタグが複数あってもいいように、本文を<customemoji id="で区切って配列を作成します。
<customemoji id="より前の最初のテキストは不要なので、skip関数で省いています。

image.png

作成
skip(
    split(
        outputs('メッセージ詳細を取得する')?['body/body/content'],
        '<customemoji id="'
    ),
    1
)

それぞれの絵文字のタグから、<customemoji id="より後ろ、次の"より前のテキストを抽出するため、選択アクションでそれぞれの配列要素をさらにsplitし、base64でデコードして、;でさらに区切って前の方をName後ろの方をIdとします。
image.png

選択/Name
split(
    decodeBase64(
        split(
            item(),
            '"'
        )?[0]
    ),
    ';'
)?[0]
選択/Id
split(
    decodeBase64(
        split(
            item(),
            '"'
        )?[0]
    ),
    ';'
)?[1]

確認のためTeamsチャットで送りました。
一度調べたカスタム絵文字の情報は、SharePointリストなどに保管しておくと使いやすいと思います。
image.png

とりあえず、この情報があれば投稿もできるので、次に進みましょう。
image.png

カスタム絵文字を投稿する

カスタム絵文字を表現するHTMLが必要です。
NameIdを使って以下のように作成します。
image.png

customEmoji
<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;">

あとはこのタグを使って投稿するだけです。
メッセージ内に埋め込んで投稿しましょう。
image.png

投稿できました!
image.png

おわりに

とりあえず投稿はできましたが、あらかじめ情報を調べておかないといけないのが大変ですね。
一覧取得できるアクションやAPIがあればいいのですが…

ちなみに私は組織の絵文字の管理者権限で、すべての絵文字の情報をあらかじめ取得して公開するようにしておきました。(強権)

よりよい方法があれば教えてください!

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?