
シェア:
アーロンはNexmoの開発者支持者だった。ベテランのソフトウェア・エンジニアであり、デジタル・アーティスト志望でもあるアーロンは、コードや電子機器、時にはその両方を使って何かを作っているところをよく見かける。彼が何か新しいことに取り組んでいるときは、空気中の部品が燃える匂いでわかるのが通例だ。
音声合成とNexmo Voice APIによるTwitter IVRの構築
所要時間:1 分
私はちょっとしたツイッター中毒だ。他の多くの技術者と同様、2007年のSXSWでTwitterが爆発的な人気を博したときに私も参加した。
しかし、カンファレンスのインターネット環境はたいてい良くない。SMSでツイートすることはできるが、データ接続がなければカンファレンスのハッシュタグをフォローしたり、近くのツイートを検索して最高のアフターパーティーの場所を探したりすることはできない。しかし、データ通信ができなくても、電話をかけることはできるだろう。電話で操作できるTwitterボットをセットアップして、ツイートを読み上げてもらおう!
始める前に
始める前に必要なものがいくつかある。
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
TwitterアカウントとTwitterアプリケーションPythonのTwitterライブラリには PythonのTwitterライブラリには、Twitterアプリケーションを作成するための良いドキュメントがあります。
ローカルでこれを実行する場合、サーバーを公開する方法が必要になる。 ngrokを使うことをお勧めする。.
DTMFでボットを制御する
フォローしたいハッシュタグがいくつかあるかもしれないし、いくつかの異なるアカウントからの最新のツイートをチェックできるようにしたいかもしれない。そのため、どのストリームを読んでくれるかをボットに伝える方法が必要だ。
これには、DTMF(Dual-tone multi-frequency signalling)を使用します。電話で番号をダイヤルするときに聞こえる音はDTMFです。Nexmoでは inputアクションでは、ユーザーに特定の番号を押してもらい、入力された番号に応じてアクションを変化させます。もしあなたがカスタマーサポートに電話したことがあるなら、おそらく次のようなものに遭遇したことがあるでしょう。 対話型音声応答(IVR)システムに遭遇したことがあるでしょう。
ユーザーが電話をかけてきたら、利用可能な入力のリストを読み上げ、選択を促し、Twitter APIと音声合成を使って関連するツイートを読み上げる。
PythonとFlaskで対話型音声応答システムを作る
ユーザが当社のバーチャル番号に電話をかけると、Nexmoは当社の Nexmoコールコントロールオブジェクト(NCCO).NCCOはJSONファイルで、誰かが私たちの番号に電話したときにNexmoが実行すべきアクションのリストを含んでいます。例を見てみましょう。
[
{
"action": "talk",
"bargeIn": "true",
"text": "Welcome to Nexmo's talking Twitter. Please select from the following options. To hear the latest breaking news press 1. For showbiz gossip press 2. If you'd like to hear the latest #API tweets press 3. Or for tweets by Aaron Bassett press 4.",
"voice_name": "Amy"
},
{
"action": "input",
"eventUrl": [
"https://example.com/ivr/"
],
"maxDigits": 1
}
]上記のNCCOには2つのアクションがある:まず、音声合成を使って、発信者にどのオプションがあるかを知らせる。 bargeInをtrueに設定することで、発信者は、どのオプショ ンを選択したいかをすでに知っている場合、メッセージ全体を聞かなくても、 いつでも番号を押すことができる。次のアクションは、ユーザーが押した番号をキャプチャし、それを私たちの eventUrl.これは eventUrlは別のNCCOを返し、Nexmoに次の動作を指示する。
ツイートを音声に変換する
呼び出し元が番号を入力すると、それはPOSTリクエストの一部としてエンドポイントに送信されます。 /ivr/エンドポイントに送信されます。いくつかの条件を使って (さあ、ギド もうswitch文を持たせてくれ!)を使えば、ユーザーの入力をツイート候補のリストと比較して、それぞれのツイートを新しいNCCOのアクションとして返すことができる。 talkアクションとして返すことができる。私たちは 音声合成を使ってツイートを読み上げます。.
もしユーザーが認識できない値を入力した場合は、入力が理解されなかったことを伝える短いメッセージを流し、もう一度処理をやり直す。
自分で試してみる

サンプルコードではPythonとFlaskを使用しているので、新しいPython仮想環境を作成し、コードをクローンして依存関係をインストールすることをお勧めする。
git clone git@github.com:nexmo-community/nexmo-call-twitter.git
cd nexmo-call-twitter/
pip install -r requirements.txt少し設定が必要です。 app.py に event_urlをあなたのngrok URLに設定し /ivr/を設定し 必要なTwitter変数を設定してください。新しいTwitterアプリケーションを作成する方法の詳細は python-twitterドキュメントを参照してください。.
export TWITTER_CONSUMER_KEY=
export TWITTER_CONSUMER_SECRET=
export TWITTER_ACCESS_KEY=
export TWITTER_ACCESS_SECRET=必要な変数をすべて設定したら、次のことができる。 Flaskアプリケーションを実行する.開発モードで起動してみましょう。こうすることで、何か問題が発生したときにデバッグ出力を得ることができます。さらにFlaskの環境変数をいくつか作成する必要があります。
export FLASK_APP=app.py
export FLASK_DEBUG=1そして一旦設定したら、アプリケーションを実行することができる:
flask runをご覧ください。 http://127.0.0.1:5000にアクセスしてみてください。すべてが正しく実行されていれば、私たちのNCCOが表示されるはずです。しかし、このサーバーに Nexmo Voice APIでアクセスできるようにするには、このサーバーを公開する必要があります。そのため、ngrokが実行されていて、正しいポートを指していることを確認してください。
また、Nexmo音声アプリケーションを設定する必要があります。これを行う最も簡単な方法は Nexmoダッシュボードのボイスアプリケーション管理セクションで行います。.イベントURLは、ウェブフックを使用しないので、この例では重要ではありません。
screenshot of Nexmo voice application screen
Voiceアプリケーションを作成/設定したら、電話番号をリンクすることを忘れないでください!
試してみる
Nexmoのバーチャル番号に電話をかけるだけです。さまざまなオプションの紹介メッセージが聞こえるはずです。違う番号を入力したり、認識されない番号を入力したりして、返ってくるメッセージに耳を傾けてみてください。
独自のデータソースを使用する
例を編集し、ツイートを取得したいTwitterアカウントやハッシュタグを変更します。変更を反映させるために、紹介メッセージを更新することを忘れないでください。
もちろん、ツイッターからメッセージを引き出す必要はない。好きなデータソースを使い、自分の銘柄がどのようなパフォーマンスをしているかを知ることができる。 自分の銘柄がどのようなパフォーマンス常に パパジョークのトップをチェックすることもできる。 ハッカーニュース.
ncco = []
topstories = requests.get('https://hacker-news.firebaseio.com/v0/topstories.json').json()
for x in range(0, 5):
story = requests.get(
'https://hacker-news.firebaseio.com/v0/item/{id}.json'.format(
id=topstories[x]
)
).json()
ncco.append({
'action': 'talk',
'text': story['title']
})実際、好きなコードを実行することができる。ChatOpsは聞いたことがあるが、IVROpsはどうだろう?
1を押すと電源がオフになり、再びオンになります。
IT Crowd: Have you tried switching it off and back on again?
しかし、その際には認証が必要かもしれないが...。
[
{
"action": "talk",
"text": "Please enter your PIN followed by the hash key"
},
{
"action": "input",
"submitOnHash": "true",
"eventUrl": ["https://example.com/verifypin/"]
}
]