はじめに
4年前に、当社のBlogで以下の記事を書いていました。
上記レシピはステップ(タスク)が多く、かつスケジュールをトリガーに走るため、チェックだけでもタスクを消費する欠点がありました。
Workatoも4年前に比べてだいぶ機能改良が進んでおり、現在ではよりシンプルな実装が可能になっています。そこで、今回は現在のWorkatoで改めてレシピを再実装してみました。
レシピ
コネクション
HTTPコネクタとWorkbot for Slackの2つのコネクションを予め用意(設定)しておきます。
HTTPコネクタは、認証無し、かつBaseURLを指定しない、汎用的なコネクションを用意します。
Workbot for Slackコネクタのコネクションは、お使いのSlackワークスペースで利用可能な状態で用意しておきます。
トリガー
HTTPコネクタをトリガーとします。
(アクションは「New event via polling」のみ選択可能)
Connectionは、先に準備したものを指定します。
設定は以下を参考に進めます。
Trigger poll intercal
5 minutes
を選択
Event name
任意の名称を入力
URL
気象庁防災情報XMLフォーマット形式電文の公開(PULL型) で公開されている『地震火山』の「高頻度フィード」(https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml) を指定します。
Request headers
application/xml
を入力
Response content type
Parse response as XML
を選択
Response body example
上記高頻度フィードのXMLを貼付する
Array path
feed entry
を選択
ID column
id
を選択
Trigger condition
以上を設定後、Set trigger condition を有効化し、次の通り設定します。
Trigger data
Step1の Title
をセット
Condition
equals
を選択
Value
震源・震度に関する情報
と入力
アクション
Step2
HTTPコネクタを選択します。
(アクションは「Send request」のみ選択可能)
Connectionは、先に準備したものを指定します。
設定は以下を参考に進めます。(以下に記載のない項目はデフォルトのままとします)
Requuest name
任意の名称を入力
Request
Method
GET
を選択
Request URL
Step1の ID
をセット
Response
Response content type
XML
を選択
Encoding
UTF-8
を選択
Response schema
以下のxmlをもとにスキーマを生成する
(「詳細」をクリックすると展開されます)
<?xml version="1.0" encoding="UTF-8"?>
<Report xmlns="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx="http://xml.kishou.go.jp/jmaxml1/">
<Control>
<Title>震源・震度に関する情報</Title>
<DateTime>2024-05-29T09:15:39Z</DateTime>
<Status>通常</Status>
<EditorialOffice>気象庁本庁</EditorialOffice>
<PublishingOffice>気象庁</PublishingOffice>
</Control>
<Head xmlns="http://xml.kishou.go.jp/jmaxml1/informationBasis1/">
<Title>震源・震度情報</Title>
<ReportDateTime>2024-05-29T18:15:00+09:00</ReportDateTime>
<TargetDateTime>2024-05-29T18:15:00+09:00</TargetDateTime>
<EventID>20240529181237</EventID>
<InfoType>発表</InfoType>
<Serial>1</Serial>
<InfoKind>地震情報</InfoKind>
<InfoKindVersion>1.0_1</InfoKindVersion>
<Headline>
<Text>29日18時12分ころ、地震がありました。</Text>
</Headline>
</Head>
<Body xmlns="http://xml.kishou.go.jp/jmaxml1/body/seismology1/" xmlns:jmx_eb="http://xml.kishou.go.jp/jmaxml1/elementBasis1/">
<Earthquake>
<OriginTime>2024-05-29T18:12:00+09:00</OriginTime>
<ArrivalTime>2024-05-29T18:12:00+09:00</ArrivalTime>
<Hypocenter>
<Area>
<Name>茨城県南部</Name>
<Code type="震央地名">301</Code>
<jmx_eb:Coordinate description="北緯35.9度 東経140.3度 深さ 40km" datum="日本測地系">+35.9+140.3-40000/</jmx_eb:Coordinate>
</Area>
</Hypocenter>
<jmx_eb:Magnitude type="Mj" description="M3.1">3.1</jmx_eb:Magnitude>
</Earthquake>
<Intensity>
<Observation>
<CodeDefine>
<Type xpath="Pref/Code">地震情報/都道府県等</Type>
<Type xpath="Pref/Area/Code">地震情報/細分区域</Type>
<Type xpath="Pref/Area/City/Code">気象・地震・火山情報/市町村等</Type>
<Type xpath="Pref/Area/City/IntensityStation/Code">震度観測点</Type>
</CodeDefine>
<MaxInt>1</MaxInt>
<Pref><Name>茨城県</Name><Code>08</Code><MaxInt>1</MaxInt>
<Area><Name>茨城県南部</Name><Code>301</Code><MaxInt>1</MaxInt>
<City><Name>茨城鹿嶋市</Name><Code>0822200</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>茨城鹿嶋市鉢形</Name><Code>0822201</Code><Int>1</Int></IntensityStation>
</City>
<City><Name>稲敷市</Name><Code>0822900</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>稲敷市江戸崎甲*</Name><Code>0822920</Code><Int>1</Int></IntensityStation>
</City>
<City><Name>かすみがうら市</Name><Code>0823000</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>かすみがうら市大和田*</Name><Code>0823032</Code><Int>1</Int></IntensityStation>
</City>
<City><Name>鉾田市</Name><Code>0823400</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>鉾田市汲上*</Name><Code>0823432</Code><Int>1</Int></IntensityStation>
</City>
</Area>
</Pref>
<Pref><Name>千葉県</Name><Code>12</Code><MaxInt>1</MaxInt>
<Area><Name>千葉県北東部</Name><Code>340</Code><MaxInt>1</MaxInt>
<City><Name>香取市</Name><Code>1223600</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>香取市役所*</Name><Code>1223630</Code><Int>1</Int></IntensityStation>
<IntensityStation><Name>香取市仁良*</Name><Code>1223632</Code><Int>1</Int></IntensityStation>
</City>
</Area>
<Area><Name>千葉県北西部</Name><Code>341</Code><MaxInt>1</MaxInt>
<City><Name>成田市</Name><Code>1221100</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>成田市名古屋</Name><Code>1221102</Code><Int>1</Int></IntensityStation>
</City>
</Area>
</Pref>
</Observation>
</Intensity>
<Comments>
<ForecastComment codeType="固定付加文">
<Text>この地震による津波の心配はありません。</Text>
<Code>0215</Code>
</ForecastComment>
<VarComment codeType="固定付加文">
<Text>*印は気象庁以外の震度観測点についての情報です。</Text>
<Code>0262</Code>
</VarComment>
</Comments>
</Body>
</Report>
Step 3
Variables by Workatoコネクタを選択し、「Create variable」アクションを選択します。
次に、date, max_sindo, hypocenter_area, mj, forecast_comment という変数(variable)を追加し、それぞれ値をセットします。
date
Response/Report/Body/Earthquake/Arrival time/Content
のデータピルをセットしたうえで、次のformulaを入力する ( <Content>
は、セットされたデータピルを示しています)
<Content>.in_time_zone("Asia/Tokyo").strftime("%Y年%m月%d日 %H時%M分")
max_sindo
Response/Report/Body/Intensity/Max int/Content
をセット
hypocenter_area
Response/Report/Body/Earthquake/Hypocenter/Area/Name/Content
をセット
mj
Response/Report/Body/Earthquake/Jmx eb: magnitude
をセット
forecast_comment
Response/Report/Body/Comment/Forecast comment/Text/Content
をセット
Step 4
Workbot for Slackコネクタを選択し、「Post message」アクションを選択します。
Connectionは、先に準備したものを指定します。
設定は以下を参考に進めます。
Reply channel
メッセージ送信先のチャンネルあるいはDMを指定
Message attachments
以下を参考に進めます。
Title
「最大震度 <max_sindo>
の地震が発生」と入力します。
<max_sindo>
は、Step 3の max_sindoを指定します。
Attachment text
次の通り入力します。
<date>
頃、<hypocenter_area>
で最大震度<max_sindo>
(M<mj>
)の地震が発生しました。
<forecast_comment>
<date>
<hypocenter_area>
<max_sindo>
<mj>
<forecast_comment>
は、Step 3の 対応するVariableを指定します。
Attachment color
Danger
を選択
実行結果
このレシピを実行すると、「震源・震度に関する情報」が新たに発表された際に、次のようなメッセージがSlackに投稿されます。
まとめ
今回は、現在のWorkatoの機能をもとに、過去に作成したレシピの改善を行ってみました。Workatoは新機能の追加だけでなく既存機能の改善も進められており、使い勝手やレシピの生産性が向上しています。
また、皆さんが過去に作成されたレシピも見直す(&新たなWorkatoの機能に置き換える、現在のWorkatoスキルに合わせて最適化する)ことで、冗長なレシピがシンプルになり見通しが良くなる、タスク数の削減に繋がるなど、色々と改善が進むこともあるかもしれませんので、機会がありましたらレシピを見直していただくことをお勧めいたします。