[Twilio+Slack] Slack に SMS 送信コマンドを実装する: SQS+Lambda での非同期処理構成 [3/3]

[Twilio+Slack] Slack に SMS 送信コマンドを実装する: SQS+Lambda での非同期処理構成 [3/3]

Twilio API を使って、SMS を送信できるコマンド /sms を Slack に実装する方法を紹介します。署名検証によるセキュリティ対策を Lambda で実装し、Slack アプリにおける 3 秒のタイムアウト制限を回避するため SQS で非同期的に処理します。第 3 回では、Slack アプリの作成とスラッシュコマンドの設定、署名検証に必要な Signing Secret の取得、そして実際の動作確認を行います。

対象読者

  • Slack のスラッシュコマンドを使って外部サービスと連携したい方
  • Twilio を使って SMS を送信したい方
  • AWS Lambda を使ったサーバーレス構成に興味がある方
  • Slack の 3 秒タイムアウト制限を回避する方法を知りたい方
  • SQS を使った非同期処理の実装例を探している方

参考記事

開発環境

バージョン

node: 22.13.1
npm: 10.9.2
node_modules/twilio: 5.5.1 
node_modules/aws-sdk: 2.1692.0

概要

本記事では、Slack のスラッシュコマンド /sms を使って、Twilio 経由で SMS を送信する仕組みを構築する方法を紹介します。ユーザーは Slack 上で以下のようにコマンドを入力するだけで、指定した電話番号に SMS を送信できます。第 3 回では、Slack アプリの作成とスラッシュコマンドの設定、署名検証に必要な Signing Secret の取得、そして実際に Slack 上でコマンドを実行して Twilio 経由で SMS を送信する動作確認を行います。これにより、Slack からの入力が安全に処理され、非同期で SMS を送信する一連の仕組みが完成します。

本記事では全体構成図のうち、Slack 側の設定 (赤枠部分) を中心に解説します。

40

Slack アプリの設定

Slack のスラッシュコマンド /sms を使用するには、Slack アプリを作成し、コマンドの設定と署名検証に必要な情報を取得する必要があります。

Signing Secret の取得

Slack から送信されるリクエストが正規のものであることを検証するために、署名検証 (HMAC-SHA256) を行います。この検証に必要な Signing Secret は、Slack アプリの管理画面から取得できます。 Slack API にアクセスし、 Create New App ボタンをクリックします。
12

From scratch を選択し、アプリ名と対象のワークスペースを入力して作成します。作成後、左メニューから Basic Information を選択します。ページ下部の App Credentials セクションにある Signing Secret を SQS 送信関数の環境変数に設定します。
13

スラッシュコマンドの作成

次に、Slack 上で /sms コマンドを使えるようにするため、スラッシュコマンドを作成します。

Slack アプリの管理画面で、左メニューから Slash Commands を選択し Create New Command をクリックします。
14

以下のように設定し、 Save ボタンをクリックして保存します。

項目
Command sms
Request URL API Gateway のエンドポイント (例: https://abc123.execute-api.ap-northeast-1.amazonaws.com/sms)
Short Description Twilio API を使用して SMS を送信します
Usage Hint +81XXXXXXXXXX メッセージ本文

15

アプリのインストール

スラッシュコマンドを使用するには、作成した Slack アプリをワークスペースにインストールする必要があります。左メニューから Install App を選択し、 Install to Workspace ボタンをクリックします。権限の確認画面が表示されるので、許可してください。
16

動作確認

ターミナルで次のコマンドを実行し、 Server Error が返ってこないことを確認します。

$ curl -X POST https://****.amazonaws.com/default/test-twilio-slack-sms \
    -H "X-Slack-Request-Timestamp: 1234567890" \
    -H "X-Slack-Signature: v0=fake" \
    -d "text=%2B819012345678+テストメッセージ"

❌ リクエストが古すぎます。

Slack 上で /sms +819012345678 テストメッセージ のように入力し、SMS が送信されることを確認します。送信結果は、Slack 上にメッセージとして表示され、Twilio 経由で指定した電話番号に SMS が届きます。

35

正常に送信されると次のようなメッセージが表示されます。

36

実際に、宛先番号に SMS が届くことを確認します。

Screenshot_20250408-142422

補足: トラブルシューティング方法について

想定した結果にならないとき、どこで問題が起こっているのか切り分けるためのヒントを紹介します。

Lambda のデバッグ

CloudWatch コンソール 左メニュー ログ > ロググループ から、今回作成した Lambda 関数を検索し、ログを閲覧可能です。

17

ログイベントから、 index.js の何行目で失敗したのか調査することができます。

18

意図した結果にならないとき、変数を console.log() で出力するようにしておいて、こちらで想定した数値になっているか確認するなどの方法がとれます。

SQS のデバッグ

SQS の モニタリング タブで、キューの状態が確認できます。

43

また、キューの可視化については CloudWatch コンソール でカスタマイズすることができます。左メニュー ダッシュボード から、 ダッシュボードの作成 をクリックして作成します。今回は下記のメトリクスを線グラフで表示する例を紹介します。

メトリクス名 説明
ApproximateNumberOfMessagesVisible キュー内の処理待ちメッセージ数
ApproximateNumberOfMessagesNotVisible 現在処理中のメッセージ数
ApproximateAgeOfOldestMessage 最も古いメッセージがキューに入ってからの時間

これらのメトリクスを CloudWatch ダッシュボードに追加し、キューの状態を視覚的に確認できるようにします。

44

例えばこのようにして、ダッシュボードを自分好みにカスタマイズできます。

45

まとめ

第 1 回 ~ 第 3 回を通して、Slack のスラッシュコマンド /sms を使って、Twilio 経由で SMS を送信する仕組みを、AWS のサーバーレス構成で実装する方法を紹介しました。

  • Slack のスラッシュコマンドで外部 API を呼び出す方法
  • Twilio API を使った SMS 送信の実装
  • AWS Lambda + API Gateway によるサーバーレス構成
  • Slack の署名検証によるセキュリティ対策
  • Amazon SQS を使った非同期処理の設計

この構成を応用することで、他の外部サービスとの連携や、より複雑なワークフローの自動化にも対応可能です。ぜひご自身のユースケースに合わせてカスタマイズしてみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.