[Twilio+Slack] Slack コマンドで音声読み上げ通話を自動発信する: SQS+Lambda での非同期処理構成 [1/3]

[Twilio+Slack] Slack コマンドで音声読み上げ通話を自動発信する: SQS+Lambda での非同期処理構成 [1/3]

Slack 上で /voice [電話番号] [読み上げ内容] のようにコマンドを入力すると、Twilio の音声 API を使って自動で通話を発信し、指定した内容を読み上げる仕組みを構築します。本シリーズでは、Twilio Programmable Voice・AWS Lambda・Amazon SQS・API Gateway を活用し、Slack からの指示を安全かつ非同期に処理する構成を解説します。第 1 回では、システム全体の構成と Twilio 側の初期設定(発信元番号の取得・API 認証情報の確認)を中心に説明します。

対象読者

  • 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 に慣れたチームであれば、チャットからそのまま通話発信ができることで、運用効率が飛躍的に向上します。


全体構成図

本構成は以下のようなステップで動作します。

  1. Slack から /voice コマンドが送信される
  2. API Gateway 経由で Lambda に渡され、署名検証と構文チェックを実行
  3. メッセージを SQS に送信(Slack のタイムアウトを回避)
  4. SQS トリガーで別の Lambda 関数が起動し、Twilio に音声通話発信リクエスト
  5. Twilio 側で発話内容を読み上げる TwiML を生成・呼び出し

1

上記構成図のうち、第 1 回では Twilio 側の設定 (赤枠で示した部分) を行います。具体的には、 Voice API に対応した電話番号の取得と、API 認証情報 (SID・トークン) の確認を行います。

2


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)。

3

2. API 認証情報(SID・トークン)の取得

Twilio コンソールの Account Dashboard から以下を控えます:

  • Account SID
  • Auth Token

これらは Lambda 関数の環境変数として使用します。漏洩すると不正利用される可能性があるため、厳重に管理してください。

3


注意点:課金リスクと非同期構成の採用理由

Twilio の音声通話は 1 通話ごとに秒単位の課金が発生します。また、Slack 側の 3 秒タイムアウト制限もあるため、外部 API 呼び出しは非同期的に実行する必要があります。

そのため本構成では Amazon SQS を仲介させて、Slack へのレスポンスは即時返却し、音声発信処理はバックグラウンドで行う形に設計しています。

加えて、参考記事で紹介されているような課金インシデント(リトライによる多重発信)を防ぐための方法についても第 2 回以降で触れる予定です。


まとめ

第 1 回では、Slack スラッシュコマンドで Twilio を使った音声読み上げ通話を自動発信する仕組みの全体像と、Twilio 側の初期設定(音声通話番号と API 認証情報)を解説しました。

次回は、AWS Lambda・SQS・Twilio を組み合わせた非同期実行の仕組みを実装していきます。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.