13
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?

OutSystemsでSlack翻訳Botを作ろう(REST API とOAuth /HMAC の実践例)

Last updated at Posted at 2025-12-23

スクリーンショット 2025-12-23 5.51.06.png
ベトナム語話者と日本語話者がSlack翻訳Botを介しておしゃべりしている様子

OutSystems で Slack翻訳Bot

こんにちは、ローコード系PJでスクラムマスターをしているDaigorianです。
チームのメンバーが言語を気にせずチャットできたら素敵ですよね!
この記事ではそれを実現する翻訳BotをOutSystemで作るポイントをお伝えします。

  • チャット言語障壁をなんとかしたい!
  • OutSystems の REST API 連携系を習得したい!

という多言語OutSytemsチームの課題が一気に解決するのでおすすめです。
(ちなみに今回OutSystems技術を習得したかったのは他でもないスクラムマスターの私本人でした💦)

主な機能

  • 国旗リアクションをつけるとその国の言葉に翻訳される (↑Top画像)
  • Botをメンションすると 英語とベトナム語に言語に翻訳される(↑Top画像)
  • Google Translate API をどれだけ使ったか確認と、API Keyのメンテができる。
    スクリーンショット 2025-12-22 17.23.08.png

ざっくりとしたしくみの理解

  1. Slack Appを作成してEvent購読をOnにすると、イベント発生時にSlackがOutSystemsのAPIを叩いてくれます。
  2. OutSystemsはチャット本文を取得してそれをGoogle Translateに渡します。
  3. 戻ってきた翻訳文をスレッドに chat.postMessage すれば翻訳文が表示されます
    image.png

このアプリを作ると学べる技術要素

OutSystemsのAPI連携周りで頻出する要素が出てきます。
リンクはそれぞれの公式ドキュメントです。「つまづいたら公式」はどの界隈でも同じですね。

ではつくっていきましょう!

作り方(Step by Step)

1) Slack App を作る

https://api.slack.com/apps から 新規 App(From scratch)を作成します。
この時点ではまだ動かないので、次の「Event API」と「Web API」で必要な権限と設定を入れていきます。
スクリーンショット 2025-12-23 10.11.02.png

Event API

2) Event Subscriptions を有効化する

Event Subscriptions を On にします。
ここで Request URL を設定すると Slack が疎通確認(URL verification)を行うため、OutSystems側に受信用エンドポイントを用意します。
スクリーンショット 2025-12-23 13.26.10.png

3) OutSystems にイベント受信用エンドポイントを作る

OutSystems で REST API(例:/v1/SlackEvent)を作り、Slack からの POST を受け取れるようにします。
まずは URL verification の challenge を返せる最小実装にして、Slack 側の Verified を通すのが近道です。
Slack は最初に { "type":"url_verification", "challenge":"..." } をURL verificationのchallengeとして送ってきます。
受信した challenge をそのままレスポンス本文に返し、HTTP 200 を返すようにします。

image.png

検証が成功すれば Verified! の表示が出ます。
スクリーンショット 2025-12-23 13.27.37.png

5) HMAC署名検証(Slack Signing Secret)を実装する

このままだとSlack以外からもAPIを利用されてしまうので、送信元がSlackであることを確認する実装を加えます。

Slack の X-Slack-Signature と X-Slack-Request-Timestamp を使って署名検証を行います。
v0:{timestamp}:{rawBody} を Signing Secret で HMAC-SHA256 し、ヘッダの署名と一致することを確認します。
また、リプレイ防止に timestamp の許容範囲も設けます。
スクリーンショット 2025-12-23 13.05.09.png

HMAC-SHA256計算には、 CryptoAPI の ComputeMac を使いました。
https://www.outsystems.com/forge/component-overview/437/cryptoapi-o11

スクリーンショット 2025-12-23 13.09.37.png

引数
Input "v0:" + GetXSlackRequestTimestampHeader.Value+":"+GetRequestContent.RawContent
Key TextToBinaryData("YourSlackSigningSecret",Encoding:"ascii")
Algorithm "HMACSHA256"

6) 受信イベントの種類を絞る(Event Subscriptions)

Subscribe to bot events に必要なイベントだけ追加します
スクリーンショット 2025-12-23 13.24.36.png

そしてそのイベントに対応した処理を実装すれば完了です!
スクリーンショット 2025-12-23 13.22.45.png

Web API(投稿側)

8) Bot Token と権限(Scopes)を設定する

Slack の OAuth & Permissions から Bot Token Scopes を設定します。
投稿するなら最低限 chat:write、メンションを受けるなら app_mentions:read など、使うAPI・イベントに合わせて付与します。
スクリーンショット 2025-12-23 13.33.54.png

9) OAuth用のRedirect URLsを作成して、セットする。

Oauth のざっくりとした流れはこちらです
os_translator wb (1).png

ユーザがOAuthで許可操作をしてくれると、SlackはOutSystems へ Code を伝えるためにリダイレクトしてくれます。
まずはそのリダイレクトを受け取れるようにScreenを作ります。
スクリーンのInputパラメータに codeを作っておきます。

スクリーンショット 2025-12-23 13.48.44.png

そしてそのスクリーンのURLをSlack側に設定します。

スクリーンショット 2025-12-23 13.35.06.png

そのスクリーンが呼ばれたら、Code から BotTokenを受け取る処理をOnReadyに書いておきます
スクリーンショット 2025-12-23 14.10.37.png

これで無事BotTokenが得られます。

10) Slack にチャットを POST する(chat.postMessage)

OutSystems の REST API Client で chat.postMessage を呼び出し、channel と text を指定して投稿します。
前のステップで得たBotトークンは Authorization パラメータに”Bearer ”を頭にくっつけて渡します。
スクリーンショット 2025-12-23 14.12.50.png

API側ではそれをヘッダにくっつけてSlackに送ります。
スクリーンショット 2025-12-23 14.35.52.png

ちなみに、OutSystems公式の OAuth 機能を使わないのは、OutSystemsの方は「標準OAuthサーバ」向けの実装で、 Slack OAuthはアプリ主導で実装するタイプのOAuthでこのフローと噛み合わないので、OutSystems上では Authentication Type は No authentication としています。
スクリーンショット 2025-12-23 14.27.27.png

こんな感じで、

  • Slackのイベントを受け取る
  • SlackへAPIを送る

ができるようになるので、あとはこの組み合わせで思いついたアイディアを実装できます!。

SlackをOutsystemsでもっと面白くして、チームとのコラボレーションを楽しみましょう!

13
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
13
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?