LoginSignup
3
2

Twilio Functionsで、AITalkを組み合わせたTwiMLを生成する

Last updated at Posted at 2018-02-24

2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。

はじめに

この記事は、中京テレビハッカソン(Hack-Chu)2018で要望があったため作成したサンプルです。
実行するためには、Twilioのアカウントと、AITalkのアカウントが必要です。

Twilio Functionsとは

Twilio Functionsは、Node.jsで書かれたコードを、Twilioのサーバー上で実行するためサーバーレスアーキテクチャです。
Twilioの管理コンソールのRuntimeメニューの中に、Functionsというメニューがあるので、その中から作成します。

AITalkとは

WEBサービスなどから、高品質音声合成エンジンAITalk®をSaaS型で利用できるサービスです。感情も表現することができるため、単調な音声合成のイメージを覆す表情豊かな音声読み上げが実現できます。
TwilioのTTS(Text to Speech)は日本語がイケてないので、AITalkさんのサービスを使うケースは有効です。

今回ご紹介するのは、話したいメッセージをAITalkを通じて流暢な音声にしてTwiMLを生成するものになります。
生成したFunctionsのPATHを呼び出すことで、TwiMLを返すことができます。

サンプルコード

Functions
exports.handler = function(context, event, callback) {
    const text = event.text || "とても残念なお知らせです。"; // 話させたいメッセージ
    const emotion_j = event.j || "0.0"; 	// 喜び(0.0〜1.0)
    const emotion_s = event.s || "1.0"; 	// 悲しみ(0.0〜1.0)
    const emotion_a = event.a || "0.0"; 	// 怒り(0.0〜1.0)
    const username = "XXXXXXXX";  // AITalkのユーザID
    const password = "XXXXXXXX";  // AITalkのパスワード

    let mp3Url = "http://webapi.aitalk.jp/webapi/v2/ttsget.php?username="+username+"&password="+password
    mp3Url += "&speaker_name=maki_emo&ext=mp3&text=" +encodeURIComponent(text)
    mp3Url += "&style="+encodeURIComponent('{"j":'+emotion_j+', "s":'+emotion_s+', "a":'+emotion_a+'}');
  
    const twiml = new Twilio.twiml.VoiceResponse();
    let playParams = {};
    playParams.loop = 1;    // 再生回数(デフォルトは1、0なら無限ループ)
    twiml.play(playParams, mp3Url);
  
    callback(null, twiml);
};

Functionsの実行は、Functionsを生成したときのPATH欄で指定したURLを実行します。
今回のサンプルでは、以下のパラメータを指定することも可能になっています。

パラメータ 内容
text 再生させたいメッセージ
j 感情(喜び) 0.0〜1.0の範囲で指定
s 感情(悲しみ) 0.0〜1.0の範囲で指定
a 感情(怒り) 0.0〜1.0の範囲で指定

生成されるTwiMLはこんな感じになります。

TwiML
<Response>
<Play loop="1">
http://webapi.aitalk.jp/webapi/v2/ttsget.php?username=XXXXXXXX&password=XXXXXXXX&speaker_name=maki_emo&ext=mp3&text=%E3%81%A8%E3%81%A6%E3%82%82%E6%AE%8B%E5%BF%B5%E3%81%AA%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B%E3%81%A7%E3%81%99%E3%80%82&style=%7B%22j%22%3A0.0%2C%20%22s%22%3A1.0%2C%20%22a%22%3A0.0%7D
</Play>
</Response>

こんな感じです。
Happy Hacking!

3
2
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
3
2