0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WorkatoでSlack等の複数メンションを動的に生成する

Last updated at Posted at 2024-12-19

はじめに

Workatoを使ってSlackやMicrosoft Teamsにメッセージを送信する際、メンションを付けることがあります。通常のUIでチャット欄に「@誰々...」と入力するのとは異なり、APIを利用する場合は、メンションとして認識される記法に従った文字列を生成し、メッセージに含める必要があります。

例えば、Slackの場合は<@ユーザーID>という記法を用いることで、特定のユーザーへメンションを送信できます。

固定の相手や1名宛てのメンションであれば、レシピの実装は比較的簡単です。しかし、処理内でリストアップされた複数名のユーザーに対して同時にメンションを送る必要がある場合は、少し複雑に思えるかもしれません。

image.png

実は、Workatoのformulaを活用することで、この複数メンションの実装をシンプルに行うことができます。

2つのformulaを併用します

format_map

format_mapというformulaを使うと、リストの各行にフォーマットを適用できます。
(テキストのフォーマットとは、データを特定の構造や見た目に整えることです)
各行のフィールドの値を使用しながら、任意の文字列を作り出せるんですね。
フィールドは %{ field_name } という形式で表現します。

使用例
image.png

join

これは皆さんもよく使っているformulaだと思います。
リスト内のすべての項目を、区切り文字で繋ぎながら1つの文字列に結合します。

どのように使うか

Slackを例とした場合の、メンション文字列の生成における各formulaの役割は以下です。

  • format_mapの役割:リストの各行のSlackユーザーIDフィールドを抜き出して、<@と>で装飾
  • joinの役割:フォーマット済みの文字列を半角スペースで結合

与えられたデータがハッシュなのか文字列のリストなのかに応じて、微妙にパラメータが異なるためそれぞれ解説します。

ハッシュのリストの場合

ハッシュ(連想配列)は、「キー」と「値」をセットでデータを管理する仕組みです。たとえば、名前と年齢をセットで保存するとき、{"name" => "田中", "age" => 25}のように、キー(name、age)を使って値(田中、25)にアクセスできます。
この形式は、APIのレスポンスでJSON形式のデータを受け取る際によく使われます。また、スプレッドシートのデータを読み込んだり、何らかのデータセットを取得した場合にも見られる形です。

image.png

実装内容

image.png

formula記述(コピペ用)
ハッシュのリスト.format_map('<@%{col_社員SlackID}>').join(" ")

中括弧{ }内で、対象リストのフィールド名を指定します。

上記の例ではフィールド名を指定する際に「col_」を先頭に付けていますが、これはスプレッドシートのデータ操作における固有の仕様です。
他アプリケーションのデータについては、フィールド名のみの指定で問題ありません。

実行結果

<余談(こんな加工もできます)>

社員氏名に「さん」を付けて、句点で区切る こともできます。

formula記述(コピペ用)
ハッシュのリスト.format_map('%{col_社員氏名}さん').join("、")
実行結果
{
	"message": "デモ太郎さん、デモ花子さん、デモ二郎さん"
}

文字列のリストの場合

特定のフィールドやエンティティに関する複数の値を含むデータが返されるケースでは、ハッシュではなく、単純な配列で返されることがあります。

具体例として、SlackWorkbotのモーダル画面でユーザーを複数選択した場合は、次のようなデータが返却されます。

実装方法

上記を例として、メンション文字列を作成します。
image.png

ハッシュのリストとの違いとしては、keyが無いことです。
この場合、「%s」を使用して値にアクセスします。

formula記述(コピペ用)
文字列のリスト.format_map('<@%s>').join(" ")

実行結果

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?