10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

今日は何のセールスの日?Voiceflowで即答してくれるアレクサたんを作ってみる

Last updated at Posted at 2022-06-19

店舗にいるとわからなくなることがある。山ほどあるセールスやキャンペーンの類に。

私は現在とあるスーパーの本社採用担当として勤務しているが、そんな私にも店舗で働く新入社員時代があった。そしていつも大量にあるキャンペーンやセールスに悩まされていたのである。
毎月10日、20日など特定の日にちに決まってやってくるセールスはいいのだが、ランダムに展開される「ポイント2倍ウィーク」(※注:時に3倍やら10倍やら色々ある)やお誕生日の割引パスポートやらギフトの早得セールやら野球の球団応援セールスやら、なにやらかにやらうんぬんかんぬん(以下略)に「なんでこんなにセールス多いねん、一度に覚えられんわ!」とまだ若かった私は翻弄されるばかりであった。
一体今日は何のセールスをやっている日なのか、すべてを網羅し、諳んじることができる販売員などいるのだろうか?いや、いない。(反語)
※いらっしゃったらごめんなさい。

そこで私はとあるものを開発することにした。最近はアレクサをノーコードで実装できるという。本当なのだろうか。そんな便利なことがこの世にあっていいのだろうか。私の頭の中のイメージはこうだ。
アレクサ最初.JPG
たまに百戦錬磨の販売員でも「ん?このキャンペーン初耳。どんな内容なんだ?」と思う謎のキャンペーンがある。まずはその日にやっているセールス、続いてキャンペーンの詳細、ここまで網羅できるアレクサがいたら即戦力である。私は胸に静かな情熱を秘め、いざ実装に取り掛かるのであった…。

1.準備するもの

  :point_up_2_tone1:Voiceflow
  :point_up_2_tone1:Googleスプレッドシート
    Googleスプレッドシートには予め下記のようにデータを入れておく。
スプレッドシート.JPG
今回はシート名を「セールスシート」、A1セルにはdate B1セルにはsales1という名称を入力しておいた。

シート名は日本語表記ではなく、英語表記が望ましい

2.参考にした記事

こちらの記事を参考にログイン・プロジェクトの新規作成をするところまでお進みいただきたい。

3.完成品お披露目

まずは完成品動画をお披露目しよう。

続いて完成フローの全体図をお見せする。
全体フロー図.JPG
おわかりだろうか、今回のアレクサは3つのフェーズから成り立っている。
一つ目のフェーズが「IFゾーン」
二つ目のフェーズが「スプレッドシートゾーン」
三つ目のフェーズが「Choiceゾーン」である。
それではそれぞれのフェーズの実装方法を順にレクチャーしよう。

4.実装編~3つのフェーズに挑む~

4-1. IFゾーン

IFゾーンは4つのブロックから成り立っている

ブロック名 説明
①Speakブロック 何日のセールスが知りたいですか?という質問をする
②Captureブロック ユーザーの発話を聞き取る
③Conditionブロック 特定の条件で振り分ける ※以下本文ではIFブロックと呼ぶ
④Speakブロック 今回条件に当てはまらなかった場合、このコメントを発話させる

Speakブロックはコメントを入力するだけでしゃべってくれるので、そんなに難しくはない。そのため、今回は②と③の設定について詳しく説明していく。

4-1-1.Captureブロックの設定

キャプチャの設定.JPG
Entire user replyを選択し、その下にはdateと記入してcreate new variableを押す。ユーザーの返信全体をdateという変数にするという意味である。ここではわかりやすいようにスプレッドシートの列名と同じ名称にしたが、変数の名前は好きなものにしてもらって構わない。

4-1-2. IFブロックの設定

スプレッドシートには6月までのセールスしか入っていない。12月1日といったようにかなり先の日付を指定して私のアレクサをいじめるやつがいるかもしれないので、エラー回避としてIFブロックを置く。
今回はdateの値が「6月」という文字を含まない場合は④のSpeakブロックへ、それ以外の返答(6月*日という返答)は⑤へ進ませるという設定にした。
ifブロック.JPG
Variableには先ほど自分で作成したdateという変数を選択して入力、Does not containを選択し6月と入力しよう。
また、NO matchの設定も忘れてはいけない。
ノーマッチ.JPG
pathのところにぼっちをつけると、ブロックにお尻の穴が増える。
Ifの選択肢は④のSpeakブロックにつなげ、さらに④のSpeakブロックから①のSpeakブロックへ戻るように線をつないでおく。またNo Matchの選択肢は⑤のブロックに接続しよう。
ちなみに12月1日とユーザーが答えると、アレクサはこのように答える。

4-2. スプレッドシートゾーン

いよいよ今回の最大難関であるスプレッドシートゾーンについて説明する。このゾーンは2つのブロックで構成される。

ブロック名 説明
⑤Google Sheetsブロック スプレットシートとVoice Flowを接続するブロック
⑥Speakブロック セールス名を答えるブロック

4-2-1. Google Sheetsブロックの設定

まずは一番最初に準備しておいたGoogleスプレッドシートとGoogle Sheetsブロックをリンクさせよう。
スプシ1.JPG
一番最初に「君はこのスプレッドシートをどのように使いたいのか」と聞かれる。今回は情報取得が目的なので、Rretriebe Dataを選択する。
スプシ2.JPG
続いてユーザー名を聞かれるので、ここは自分のIDを選択しよう。
スプシ3.JPG
今回使用するスプレッドシートの情報を入力していく。Spreadsheet欄にはセールスシートと入力、Sheet欄にはsheet1と入力する。
スプシ4.JPG
ここからが重要である。With Settingsの欄の左側はdate(0)列を選択する。右側には{date}を入力する。Mapping Outputの欄の左側はsales1(1)列を選択、右側には新たにfactと入力する。
スプレッドシートのdate列の値と変数{date}の値がイコールであれば、Sales1列の値を拾ってきてそれを{fact}という変数に設定するという意味である。

4-2-2. Speakブロックの設定

それではSpeakブロックに「この日は{fact}の日ですよ」と打ち込んで、きちんと値を返すか実験してみよう。

ユーザーが入力した情報{date}とスプレッドシートdate行の値が完全に一致していないと、アレクサは値を返すことができない。うまくいかない場合は入力の値が間違っていないか確認してみよう。

4-3. Choiceゾーン

Choiceゾーンは9個のブロックから構成される。ブロック数は非常に多いが、Choiceブロックの使い方さえわかれば楽しくなってくるところである。

ブロック名 説明
⑦Speakブロック キャンペーンの詳細について知りたいですか?という質問をする
⑧Choiceブロック キャンペーン名ごとに振り分けるブロック
⑨-Aブロック ⑧への答えその1
⑨-Bブロック ⑧への答えその2
⑨-Cブロック 聞き取れなかった時用のエラー回避ブロック
⑩Speakブロック 他のキャンペーンについての質問はないか聞く
⑪Choiceブロック はい・いいえを振り分けるブロック
⑫Speakブロック 聞き取れなかった時用のエラー回避ブロック
⑬Speakブロック 終了時のメッセージを告げるブロック

4-3-1 Choiceブロックの設定

チョイス1.JPG
まずChoiceブロックの設定を開きAdd Choiceを押す。
今回はプロトタイプなので2つのキャンペーン選択肢(①若者応援キャンペーン ②サンクスデー)を設定してみることにする。(※注:本来であればおそらく常に10個以上はあるのではないか。現場で働いている販売員に敬意を表する。)
チョイス2.JPG
Path1欄に選択肢の名前を入力する。今回はwakamonoouenと入力する。好きな名前を入れていただいて問題ない。

インフォメーション
この欄は謎にアルファベットしか入力できない。

チョイス3.JPG
続いてUtteranders欄にユーザーがしゃべりそうな言葉を入力してEnterボタンを押す作業を繰り返す。多ければ多いほど揺らぎがなくなるのでよい。
チョイス4.JPG
上記作業が終わったら再びAdd Choiceを押して、今度は「サンクスデー」についても同じ要領で入力していく。
チョイス5.JPG
また、エラー回避用に選択肢のいずれでもない解答が来た場合の設定もしておく。No MatchのPath部分が上記のようになっている場合は+部分を押してほしい。そうするとNo Matchのお尻の穴が増えるはずだ。

設定方法は以上だ。あとはそれぞれのブロックを用意し接続するだけ。好きなだけ分岐させるとよい。

5.辛口フィードバックに泣く(´;ω;`)

ここまでの作業が終わると次第に次のような思いが芽生えてくるはずだ。「俺のアレクサたんかわええ…。」手をかければかけるほど、時間をかければかけるほど我が子がかわいくなってしょうがないターンに入っていく。とんでもなく良いものができた。早速みんなにお披露目しよう。

出勤日は土曜日だったため人が少なく、とりあえず知り合いを片っ端から捕まえて私のアレクサを披露していく。「ねえねえ見て!わたしのアレクサすごくない?」
以下、Aさん(以前店舗で一緒だった総務部女性)Bさん(デジタル勉強中の若手男性社員。パンを焼くのが上手)Cさん(システムの偉い人)から出た共通のダメ出しを記載する。

「コメント長くね・・・?」

た、確かに長いのかもしれないけれど…。だけど販売員にとっては全部必要な情報なのだ。対象者もキャンペーン期間も支払い方法も他のセールスと重複するかどうかも全部全部必要な情報なんだもん!

Aさん「気持ちはわかるけど、店舗でこんなにじっと長時間聞くことは無いよね。」
Bさん「急いでいる人向けではないですね。知りたい情報だけ教えてくれればいいです。1回で何もかも詰め込みすぎなのでは。」
Cさん「スキップしたくなる」

ひ、ひどい…。こんなにアレクサたん一生懸命しゃべっているのに…。でもたしかにおっしゃるとおりだ。これでは情報を目で見たほうが早い。音声認識の良いところ、それは「知りたい情報だけをすぐに取り出せること」である。おそらく本来はこうすべきであった。

ユーザー「キャンペーン期間はいつ?」
アレクサ「〇月×日~△月◇日」です。
ユーザー「対象者は?」
アレクサ「30歳以下の人です。」
ユーザー「支払方法は?」
アレクサ「グループ会社のクレジットカードが登録されたスマホ決済のみです。」

会話形式で質問ができる、それがアレクサの魅力なのだ。なんということだ、私はまだ彼の本当の魅力がわかっていなかった。ごめんよ、アレクサたん。落ち込む私に「いいところもあるよ」という優しいフィードバックもいただいたので下記に記しておく。

Aさん「店舗が少人数で運営している場合、聞きたくても聞けないことがあるから安心感はあるよね。」
Cさん「最後のブロックの「励まし」からの着想で、回答をしたあとに、一言くすっと出来るようなのをランダムで話し始めたら、ほっとひとときの「癒し」が醸し出されるかもなんて思ったりもしました。アレクサの中に見え隠れする人格・・・あれ?これってもしかして?みたいな。プログラムって、無機質なようで、結構人のクセだったり、人柄(?)みたいなものも見えてくるので、私が作ったんだよ!みたいなものが潜むと、機械的じゃなくなって、親しみも出てくるのかなーなんて思いました。実用的に店の人に使ってもらう!っていう意味でね。」

みんな、ありがとう。そしてCさん、随分いいこと言う。そうだ、これで終わりじゃない。私ならもっとアレクサたんの魅力を存分に引き出せるはずだ!ということで次回に続く、かもしれない。

10
4
1

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
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?