Railsで通話内容を音声認識する

# 概要
TwilioとGoogleCloudSpeechAPIを使用し、Railsで通話内容を音声認識する

# 手順
## GoogleCloudSpeechAPIを有効にする
https://console.cloud.google.com/
<img width="1272" alt="API_ライブラリ_-_autok_and_iharakenji_s_notebook_—_Evernote.png" src="https://qiita-image-store.s3.amazonaws.com/0/109450/8921ff49-8b9c-9ad8-d8c6-d99dac40e2f9.png">
<img width="1267" alt="APIs___services_-_autok.png" src="https://qiita-image-store.s3.amazonaws.com/0/109450/eaec3f8e-4203-aa0e-4fea-8414a02f70fd.png">

## Googleサービスアカウントキーを作成する
<img width="1271" alt="認証情報_-_autok_and_iharakenji_s_notebook_—_Evernote_and_Google_翻訳.png" src="https://qiita-image-store.s3.amazonaws.com/0/109450/0f50a6e4-1f76-2d4e-ff68-540ab6ea7090.png">
<img width="1270" alt="サービス_アカウント_キーの作成_-_autok_and_iharakenji_s_notebook_—_Evernote.png" src="https://qiita-image-store.s3.amazonaws.com/0/109450/ac0b15ee-1a5f-b277-3122-2f7097813e0a.png">
ファイルがダウンロードされるので保存する

## Gemをインスールする
```Gemfile
gem 'twilio-ruby'
gem 'google-cloud-speech'
```

## Railsアプリを作成する
```rb:call_controller.rb
require 'google/cloud/speech'
class CallController < ApplicationController
  def transcription
    recording_url = params[:RecordingUrl]
    voice = 'man'
    language = 'ja-JP'
    response = Twilio::TwiML::VoiceResponse.new
    if recording_url.blank?
      response.say('お名前をフルネームで教えてください。', voice: voice, language: language)
      response.record(timeout: 5, max_length: 5)
    else
      project = 'プロジェクトID'
      keyfile = 'サービスアカウントキーのファイルのパス'
      speech = Google::Cloud::Speech.new project: project, keyfile: keyfile
      audio = speech.audio open(recording_url),
                   encoding: :linear16,
                   language: 'ja-JP',
                   sample_rate: 8000
      results = audio.recognize
      result = results.first

      if result.present?
        transcript = result.transcript
        response.say('あなたの名前は、', voice: voice, language: language)
        response.say(transcript, voice: voice, language: language)
        response.say('です。', voice: voice, language: language)
      else
        response.say('すみませんが、もう一度お願いします。', voice: voice, language: language)
        response.record(timeout: 5, max_length: 5)
      end
    end

    render :xml => response.to_s
  end
end
```

## Railsアプリを起動
```
bundle exec rails s
```

## ngrokを起動する
```
ngrok http 3000
```
<img width="579" alt="google_speech_service_rb_-_recruiting-bot_-____workspace_regulus-technologies_recruiting-bot_.png" src="https://qiita-image-store.s3.amazonaws.com/0/109450/33706cf8-493d-a156-4567-b03f3f2fe61c.png">

## TwiML Appを作成する
https://www.twilio.com/
https://jp.twilio.com/docs/api/twiml
<img width="1271" alt="Twilio_Console_-_Phone_Numbers_Dev_Tools_TwiML_Apps_Add_and_iharakenji_s_notebook_—_Evernote_and_Google_翻訳.png" src="https://qiita-image-store.s3.amazonaws.com/0/109450/aa040577-e4c8-af1e-60c4-63ace7cddf0f.png">

## TwiML Appを確認する
<img width="1289" alt="Twilio_Console_-_Phone_Numbers_Dev_Tools_TwiML_Apps.png" src="https://qiita-image-store.s3.amazonaws.com/0/109450/d69d41c2-a096-7e64-cd0f-b3e5c1d986d4.png">
<img width="1267" alt="Twilio_Console_-_Phone_Numbers_Dev_Tools_TwiML_Apps.png" src="https://qiita-image-store.s3.amazonaws.com/0/109450/8e09df92-0bc8-8464-b79f-2f22c18e7dcf.png">