![[Twilio+Slack] Slack に SMS 送信コマンドを実装する: SQS+Lambda での非同期処理構成 [3/3]](https://images.ctfassets.net/ct0aopd36mqt/wp-thumbnail-3f316c20ff5f4f46d1a005e2ad976882/c71162912c717bb0ca7c9b4196a40df5/twilio.png)
[Twilio+Slack] Slack に SMS 送信コマンドを実装する: SQS+Lambda での非同期処理構成 [3/3]
- 第 1 回: 構成と Twilio 初期設定
- 第 2 回: Lambda 関数と SQS を使った非同期処理の実装
対象読者
- 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 側の設定 (赤枠部分) を中心に解説します。
Slack アプリの設定
Slack のスラッシュコマンド /sms
を使用するには、Slack アプリを作成し、コマンドの設定と署名検証に必要な情報を取得する必要があります。
Signing Secret の取得
Slack から送信されるリクエストが正規のものであることを検証するために、署名検証 (HMAC-SHA256) を行います。この検証に必要な Signing Secret
は、Slack アプリの管理画面から取得できます。 Slack API にアクセスし、 Create New App
ボタンをクリックします。
From scratch
を選択し、アプリ名と対象のワークスペースを入力して作成します。作成後、左メニューから Basic Information
を選択します。ページ下部の App Credentials
セクションにある Signing Secret
を SQS 送信関数の環境変数に設定します。
スラッシュコマンドの作成
次に、Slack 上で /sms
コマンドを使えるようにするため、スラッシュコマンドを作成します。
Slack アプリの管理画面で、左メニューから Slash Commands
を選択し Create New Command
をクリックします。
以下のように設定し、 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 メッセージ本文 |
アプリのインストール
スラッシュコマンドを使用するには、作成した Slack アプリをワークスペースにインストールする必要があります。左メニューから Install App
を選択し、 Install to Workspace
ボタンをクリックします。権限の確認画面が表示されるので、許可してください。
動作確認
ターミナルで次のコマンドを実行し、 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 が届きます。
正常に送信されると次のようなメッセージが表示されます。
実際に、宛先番号に SMS が届くことを確認します。
補足: トラブルシューティング方法について
想定した結果にならないとき、どこで問題が起こっているのか切り分けるためのヒントを紹介します。
Lambda のデバッグ
CloudWatch コンソール 左メニュー ログ > ロググループ
から、今回作成した Lambda 関数を検索し、ログを閲覧可能です。
ログイベントから、 index.js の何行目で失敗したのか調査することができます。
意図した結果にならないとき、変数を console.log() で出力するようにしておいて、こちらで想定した数値になっているか確認するなどの方法がとれます。
SQS のデバッグ
SQS の モニタリング
タブで、キューの状態が確認できます。
また、キューの可視化については CloudWatch コンソール でカスタマイズすることができます。左メニュー ダッシュボード
から、 ダッシュボードの作成
をクリックして作成します。今回は下記のメトリクスを線グラフで表示する例を紹介します。
メトリクス名 | 説明 |
---|---|
ApproximateNumberOfMessagesVisible | キュー内の処理待ちメッセージ数 |
ApproximateNumberOfMessagesNotVisible | 現在処理中のメッセージ数 |
ApproximateAgeOfOldestMessage | 最も古いメッセージがキューに入ってからの時間 |
これらのメトリクスを CloudWatch ダッシュボードに追加し、キューの状態を視覚的に確認できるようにします。
例えばこのようにして、ダッシュボードを自分好みにカスタマイズできます。
まとめ
第 1 回 ~ 第 3 回を通して、Slack のスラッシュコマンド /sms を使って、Twilio 経由で SMS を送信する仕組みを、AWS のサーバーレス構成で実装する方法を紹介しました。
- Slack のスラッシュコマンドで外部 API を呼び出す方法
- Twilio API を使った SMS 送信の実装
- AWS Lambda + API Gateway によるサーバーレス構成
- Slack の署名検証によるセキュリティ対策
- Amazon SQS を使った非同期処理の設計
この構成を応用することで、他の外部サービスとの連携や、より複雑なワークフローの自動化にも対応可能です。ぜひご自身のユースケースに合わせてカスタマイズしてみてください。
- 第 1 回: 構成と Twilio 初期設定
- 第 2 回: Lambda 関数と SQS を使った非同期処理の実装