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

Twilio Conversational Intelligenceで電話の文字起こし&メール自動送信:リアルタイム活用デモ

Last updated at Posted at 2025-05-23

概要

今回紹介するのは、AIによる電話での自動対応を、Twilioの新機能「Conversational Intelligence」を使って通話の自動文字起こしとデータ保存、文字起こしデータ内容を数秒後にメール送信するデモを作りました。

営業やサポートなど、通話後にすぐ内容を確認したい場面で役立つソリューションとなります。


Twilio Conversational Intelligenceとは?

Twilio Conversational Intelligence(会話インテリジェンス)は、Twilioの音声通話機能に対して高度な音声認識・解析機能を追加できる新しいサービスです。具体的には、以下のような機能を提供しています:

  • 発話者の識別(スピーカータグ)
  • 通話の内容をセンテンス単位で構造化
  • 通話データをTwilio側で保存・取得可能
  • 会話に対するインサイトの抽出(例:感情・トピック分析など)※将来的に拡張予定

従来のTwilio Programmable Voiceでは、通話音声を録音した後に音声ファイルを別の音声認識エンジン(Google Cloud Speech-to-Textなど)で処理する必要がありました。一方、Conversational IntelligenceはTwilioの中で完結できるため、構成がシンプルかつリアルタイム性の高い実装が可能です。

特に大きな特徴は、ConversationRelayと組み合わせて利用できる点です。これにより、音声通話中にTwilioから直接WebSocket経由で音声を送信しながら、同時に会話の文字起こしデータをConversational Intelligenceサービスに保存できます。

ただし、今日時点(2025年5月22日時点)で、日本語での利用は限定的です。
現時点ではIntelligence Serviceの言語設定が日本語を設定できません。
そのため、今回の利用方法では、Conversational Intelligenceをリアルタイム文字起こしのデータの保管場所としてのみ利用しています。


サポート状況(2025年5月22日時点)

現時点では英語などの10言語では完全な機能を利用できますが、日本語では一部の機能のみ利用となります。

チャネル 機能 日本語可否  説明 
Voice Twilio Recordings NG 録音ファイルから日本語の文字起こしができない。
Voice 外部 Recordings NG 録音ファイルから日本語の文字起こしができない。
Voice Call OK 文字起こし・要約・感情分析はできるが、文字起こし以外は全て英語で表示される
Voice ConversationRelay OK 文字起こしのみ対応可能

ConversationRelay × Conversational Intelligence のメリット

従来の方法 Conversational Intelligence
音声録音後に外部処理が必要 通話中にTwilio内で文字起こし・保存
構成が複雑になりがち Functions & ConversationRelayで簡潔に実装
外部APIへの接続が必須 Twilio内で完結可能
スピーカータグは自前で構築 発話者識別が自動で付与される

デモの作成

構成図

[User]
  ↓ 通話
[Twilio Voice]
  ↓
[ConversationRelay]
  ↓ transcribe & store
[Conversational Intelligence]
  ↓
[通話終了イベント (StatusCallback)]
  ↓
[Twilio Function]
  ↓
[メール送信 (SendGrid)]

事前準備


ステップ 1:Conversational IntelligenceのService作成

まずTwilio Consoleから Intelligence Service を作成します。
このServiceが、通話中の発話を解析・保存してくれる基盤になります。

作成手順

  1. ConsoleでConversationa Intelligenceにアクセス

    SCR-20250523-ighd.png

  2. Intelligence Servicesにアクセスし"Create new Service"ボタンを押す

    SCR-20250523-igzc.png

  3. 任意の名前をつけ、言語選択を行う

    SCR-20250523-ihpb.png

  4. Language Operatorsで任意のOperatorを選択します
    今回のデモコードを動かすためには選択する必要はないですが、Conversation SummaryやSentiment Analysisなどは、Callの機能での利用であれば限定的に利用可能です。

    SCR-20250523-iilt.png

  5. 後ほど、デモコード内でService SIDを使うので、控えておきます
    SCR-20250523-ikpc.png


ステップ 2:ConversationRelayにパラメーター追加

次にTwiMLで ConversationRelay を使って通話を接続する際、以下のように intelligenceService パラメータを追加します。

<ConversationRelay
  url="wss://halapolo.jp.ngrok.io"
  intelligenceService="GAxxxxxxxxxxx"
  language="ja-JP"
  welcomeGreeting="もしもし。こちらは。保険アシスタントです。ご要件をお話ください。"
  ttsProvider="Google"
  voice="ja-JP-Chirp3-HD-Aoede" />

ステップ 3:通話終了イベントをトリガーに処理を開始

通話終了時に自動的に処理を走らせるには StatusCallback を活用します。
今回は、電話番号の設定で指定できる、Call Status Changeを利用してステップ4で作成するFunctionsのURLにデータを送信することにしました。

image.png

このイベントを受けたTwilio Functionでは、以下のような処理を実行します:

  • 該当するTranscriptを検索
  • 数秒待機(Transcriptの生成を待つため)
  • 発話データ(Sentences)を取得
  • フォーマットしてメール送信(SendGrid利用)

ステップ 4:Functionのコード例

const sgMail = require('@sendgrid/mail');

exports.handler = async function(context, event, callback) {
  const twilioClient = require('twilio')(context.ACCOUNT_SID, context.AUTH_TOKEN);
  const callSid = event.CallSid;

  if (!callSid) return callback(null, "No CallSid provided.");

  sgMail.setApiKey(context.SENDGRID_API_KEY);

  try {
    const transcripts = await twilioClient.intelligence.v2.transcripts.list({ limit: 20 });
    const matched = transcripts.find(t => t.channel?.media_properties?.reference_sids?.call_sid === callSid);
    if (!matched) return callback(null, 'Transcript not found.');

    await new Promise(resolve => setTimeout(resolve, 2000)); // 2秒待機

    const sentences = await twilioClient.intelligence.v2
      .transcripts(matched.sid)
      .sentences
      .list({ limit: 100 });

    const sentenceText = sentences
      .filter(s => s.transcript)
      .map(s => `[${s.mediaChannel === 1 ? 'Agent' : 'Customer'}] ${s.transcript}`)
      .join('\n');

    const msg = {
      to: context.TO_EMAIL,
      from: context.FROM_EMAIL,
      subject: `Transcript for CallSid: ${callSid}`,
      text: sentenceText,
    };
    await sgMail.send(msg);
    return callback(null, "ok");

  } catch (err) {
    console.error(err);
    return callback(null, "error");
  }
};

実行結果

電話をかけてAIと会話し通話を切ると指定したメールアドレスに下記のような結果が送られてきます。

SCR-20250523-noxp.png


応用例・今後の展開

この仕組みを応用すれば、下記のようなユースケースにも対応できます:

  • 通話内容の自動要約(OpenAI APIなどと連携)
  • CRMとの自動連携
  • 会話のトピックや感情分析
  • 通話品質の評価

まとめ

Twilio Conversational Intelligenceは、単なる録音ではなく**「構造化された会話データ」**として活用できる点が大きな魅力です。

今回のように、リアルタイムに通話内容を取得・分析・活用できる環境を簡単に構築できるのは、Twilioならではの強みです。

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