![[Twilio+Slack] Slack コマンドで音声読み上げ通話を自動発信する: SQS+Lambda での非同期処理構成 [1/3]](https://images.ctfassets.net/ct0aopd36mqt/wp-thumbnail-3f316c20ff5f4f46d1a005e2ad976882/c71162912c717bb0ca7c9b4196a40df5/twilio.png)
[Twilio+Slack] Slack コマンドで音声読み上げ通話を自動発信する: SQS+Lambda での非同期処理構成 [1/3]
- 第 2 回:Lambda 関数と SQS を使った非同期処理の実装
- 第 3 回:Slack アプリの設定と動作確認
対象読者
- Slack スラッシュコマンドから電話発信を行いたい方
- Twilio の音声読み上げ通話機能(TwiML
Say
)を試したい方 - AWS Lambda + SQS + API Gateway の連携例を学びたい方
- Slack の 3 秒タイムアウト制限を回避したい方
- Twilio 利用時の課金リスク回避設計にも関心がある方
参考記事
検証環境
バージョン
node: 22.13.1
npm: 10.9.2
node_modules/twilio: 5.5.1
node_modules/aws-sdk: 2.1692.0
概要
Slack のスラッシュコマンド /voice
を使って、Twilio 経由で自動音声通話を発信し、指定した内容を読み上げる仕組みを実装します。ユーザーは以下のように入力するだけで、リアルタイムで電話による音声読み上げが行われます。
/voice +819012345678 認証コードは1234です。10分以内に入力してください。
このコマンドをトリガーにして、Slack → API Gateway → Lambda → SQS → Lambda → Twilio の順で処理が実行され、指定した電話番号宛に音声通話が発信され、内容が合成音声で読み上げられます。
ユースケース例
このような音声通話コマンドは、以下のようなシーンで活用できます:
- 本人認証コードの自動読み上げ
二要素認証の一環として、Slack 上で /voice コマンドを発行し、ユーザーの登録番号に確認コードを読み上げる - 社内緊急連絡の自動化
緊急時にテンプレートメッセージを登録番号へ即時発信(例:「○○ビルで火災が発生しました。すぐに避難してください」) - サービス業務での自動案内
コールセンターを介さず、指定の内容(例:「ご予約の時間が近づいています」など)を自動で通話発信
Slack から手軽に音声通話を起動できるこの仕組みは、開発・運用コストを抑えながら、システム連携の柔軟性を高められる点が魅力です。
特に高齢者向けや音声案内が求められる業務では、SMS よりも通話での即時伝達が有効です。Slack に慣れたチームであれば、チャットからそのまま通話発信ができることで、運用効率が飛躍的に向上します。
全体構成図
本構成は以下のようなステップで動作します。
- Slack から
/voice
コマンドが送信される - API Gateway 経由で Lambda に渡され、署名検証と構文チェックを実行
- メッセージを SQS に送信(Slack のタイムアウトを回避)
- SQS トリガーで別の Lambda 関数が起動し、Twilio に音声通話発信リクエスト
- Twilio 側で発話内容を読み上げる TwiML を生成・呼び出し
上記構成図のうち、第 1 回では Twilio 側の設定 (赤枠で示した部分) を行います。具体的には、 Voice API に対応した電話番号の取得と、API 認証情報 (SID・トークン) の確認を行います。
Twilio Programmable Voice とは?
Twilio の Programmable Voice は、API 経由で電話発信・着信処理を行えるサービスです。通話の内容は XML ベースのスクリプト「TwiML (Twilio Markup Language)」で制御されます。
Slack コマンドで指定された内容は、TwiML の <Say>
要素に変換され、自動音声で再生されます。
例:
<Response>
<Say language="ja-JP" voice="Polly.Mizuki">認証コードは1234です。</Say>
</Response>
TwiML は Lambda 内で動的に生成するか、外部 URL にホストして Twilio に参照させる形が一般的です(第 2 回で詳細に解説します)。
初期設定:Twilio 側の準備
1. 音声通話に対応した電話番号の取得
Twilio コンソールで Phone Numbers > Buy a Number
を開き、Voice
にチェックを入れて検索・購入します。番号は発信元番号として使用されます(例:+813xxxxxxxx)。
2. API 認証情報(SID・トークン)の取得
Twilio コンソールの Account Dashboard
から以下を控えます:
- Account SID
- Auth Token
これらは Lambda 関数の環境変数として使用します。漏洩すると不正利用される可能性があるため、厳重に管理してください。
注意点:課金リスクと非同期構成の採用理由
Twilio の音声通話は 1 通話ごとに秒単位の課金が発生します。また、Slack 側の 3 秒タイムアウト制限もあるため、外部 API 呼び出しは非同期的に実行する必要があります。
そのため本構成では Amazon SQS を仲介させて、Slack へのレスポンスは即時返却し、音声発信処理はバックグラウンドで行う形に設計しています。
加えて、参考記事で紹介されているような課金インシデント(リトライによる多重発信)を防ぐための方法についても第 2 回以降で触れる予定です。
まとめ
第 1 回では、Slack スラッシュコマンドで Twilio を使った音声読み上げ通話を自動発信する仕組みの全体像と、Twilio 側の初期設定(音声通話番号と API 認証情報)を解説しました。
次回は、AWS Lambda・SQS・Twilio を組み合わせた非同期実行の仕組みを実装していきます。
- 第 2 回:Lambda 関数と SQS を使った非同期処理の実装
- 第 3 回:Slack アプリの設定と動作確認