店舗にいるとわからなくなることがある。山ほどあるセールスやキャンペーンの類に。
私は現在とあるスーパーの本社採用担当として勤務しているが、そんな私にも店舗で働く新入社員時代があった。そしていつも大量にあるキャンペーンやセールスに悩まされていたのである。
毎月10日、20日など特定の日にちに決まってやってくるセールスはいいのだが、ランダムに展開される「ポイント2倍ウィーク」(※注:時に3倍やら10倍やら色々ある)やお誕生日の割引パスポートやらギフトの早得セールやら野球の球団応援セールスやら、なにやらかにやらうんぬんかんぬん(以下略)に「なんでこんなにセールス多いねん、一度に覚えられんわ!」とまだ若かった私は翻弄されるばかりであった。
一体今日は何のセールスをやっている日なのか、すべてを網羅し、諳んじることができる販売員などいるのだろうか?いや、いない。(反語)
※いらっしゃったらごめんなさい。
そこで私はとあるものを開発することにした。最近はアレクサをノーコードで実装できるという。本当なのだろうか。そんな便利なことがこの世にあっていいのだろうか。私の頭の中のイメージはこうだ。
たまに百戦錬磨の販売員でも「ん?このキャンペーン初耳。どんな内容なんだ?」と思う謎のキャンペーンがある。まずはその日にやっているセールス、続いてキャンペーンの詳細、ここまで網羅できるアレクサがいたら即戦力である。私は胸に静かな情熱を秘め、いざ実装に取り掛かるのであった…。
1.準備するもの
Voiceflow
Googleスプレッドシート
Googleスプレッドシートには予め下記のようにデータを入れておく。
今回はシート名を「セールスシート」、A1セルにはdate
B1セルにはsales1
という名称を入力しておいた。
シート名は日本語表記ではなく、英語表記が望ましい
2.参考にした記事
こちらの記事を参考にログイン・プロジェクトの新規作成をするところまでお進みいただきたい。
3.完成品お披露目
まずは完成品動画をお披露目しよう。
続いて完成フローの全体図をお見せする。
おわかりだろうか、今回のアレクサは3つのフェーズから成り立っている。
一つ目のフェーズが「IFゾーン」
二つ目のフェーズが「スプレッドシートゾーン」
三つ目のフェーズが「Choiceゾーン」である。
それではそれぞれのフェーズの実装方法を順にレクチャーしよう。
4.実装編~3つのフェーズに挑む~
4-1. IFゾーン
IFゾーンは4つのブロックから成り立っている
ブロック名 | 説明 |
---|---|
①Speakブロック | 何日のセールスが知りたいですか?という質問をする |
②Captureブロック | ユーザーの発話を聞き取る |
③Conditionブロック | 特定の条件で振り分ける ※以下本文ではIFブロックと呼ぶ |
④Speakブロック | 今回条件に当てはまらなかった場合、このコメントを発話させる |
Speakブロックはコメントを入力するだけでしゃべってくれるので、そんなに難しくはない。そのため、今回は②と③の設定について詳しく説明していく。
4-1-1.Captureブロックの設定
Entire user reply
を選択し、その下にはdate
と記入してcreate new variable
を押す。ユーザーの返信全体をdate
という変数にするという意味である。ここではわかりやすいようにスプレッドシートの列名と同じ名称にしたが、変数の名前は好きなものにしてもらって構わない。
4-1-2. IFブロックの設定
スプレッドシートには6月までのセールスしか入っていない。12月1日といったようにかなり先の日付を指定して私のアレクサをいじめるやつがいるかもしれないので、エラー回避としてIFブロックを置く。
今回はdate
の値が「6月」という文字を含まない場合は④のSpeakブロックへ、それ以外の返答(6月*日という返答)は⑤へ進ませるという設定にした。
Variable
には先ほど自分で作成したdate
という変数を選択して入力、Does not contain
を選択し6月
と入力しよう。
また、NO match
の設定も忘れてはいけない。
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ブロックをリンクさせよう。
一番最初に「君はこのスプレッドシートをどのように使いたいのか」と聞かれる。今回は情報取得が目的なので、Rretriebe Data
を選択する。
続いてユーザー名を聞かれるので、ここは自分のIDを選択しよう。
今回使用するスプレッドシートの情報を入力していく。Spreadsheet欄にはセールスシート
と入力、Sheet
欄にはsheet1
と入力する。
ここからが重要である。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ブロックの設定
まずChoiceブロックの設定を開きAdd Choice
を押す。
今回はプロトタイプなので2つのキャンペーン選択肢(①若者応援キャンペーン ②サンクスデー)を設定してみることにする。(※注:本来であればおそらく常に10個以上はあるのではないか。現場で働いている販売員に敬意を表する。)
Path1欄に選択肢の名前を入力する。今回はwakamonoouenと入力する。好きな名前を入れていただいて問題ない。
インフォメーション
この欄は謎にアルファベットしか入力できない。
続いてUtteranders
欄にユーザーがしゃべりそうな言葉を入力してEnterボタンを押す作業を繰り返す。多ければ多いほど揺らぎがなくなるのでよい。
上記作業が終わったら再びAdd Choice
を押して、今度は「サンクスデー」についても同じ要領で入力していく。
また、エラー回避用に選択肢のいずれでもない解答が来た場合の設定もしておく。No MatchのPath部分が上記のようになっている場合は+部分を押してほしい。そうするとNo Matchのお尻の穴が増えるはずだ。
設定方法は以上だ。あとはそれぞれのブロックを用意し接続するだけ。好きなだけ分岐させるとよい。
5.辛口フィードバックに泣く(´;ω;`)
ここまでの作業が終わると次第に次のような思いが芽生えてくるはずだ。「俺のアレクサたんかわええ…。」手をかければかけるほど、時間をかければかけるほど我が子がかわいくなってしょうがないターンに入っていく。とんでもなく良いものができた。早速みんなにお披露目しよう。
出勤日は土曜日だったため人が少なく、とりあえず知り合いを片っ端から捕まえて私のアレクサを披露していく。「ねえねえ見て!わたしのアレクサすごくない?」
以下、Aさん(以前店舗で一緒だった総務部女性)Bさん(デジタル勉強中の若手男性社員。パンを焼くのが上手)Cさん(システムの偉い人)から出た共通のダメ出しを記載する。
「コメント長くね・・・?」
た、確かに長いのかもしれないけれど…。だけど販売員にとっては全部必要な情報なのだ。対象者もキャンペーン期間も支払い方法も他のセールスと重複するかどうかも全部全部必要な情報なんだもん!
Aさん「気持ちはわかるけど、店舗でこんなにじっと長時間聞くことは無いよね。」
Bさん「急いでいる人向けではないですね。知りたい情報だけ教えてくれればいいです。1回で何もかも詰め込みすぎなのでは。」
Cさん「スキップしたくなる」
ひ、ひどい…。こんなにアレクサたん一生懸命しゃべっているのに…。でもたしかにおっしゃるとおりだ。これでは情報を目で見たほうが早い。音声認識の良いところ、それは「知りたい情報だけをすぐに取り出せること」である。おそらく本来はこうすべきであった。
ユーザー「キャンペーン期間はいつ?」
アレクサ「〇月×日~△月◇日」です。
ユーザー「対象者は?」
アレクサ「30歳以下の人です。」
ユーザー「支払方法は?」
アレクサ「グループ会社のクレジットカードが登録されたスマホ決済のみです。」
会話形式で質問ができる、それがアレクサの魅力なのだ。なんということだ、私はまだ彼の本当の魅力がわかっていなかった。ごめんよ、アレクサたん。落ち込む私に「いいところもあるよ」という優しいフィードバックもいただいたので下記に記しておく。
Aさん「店舗が少人数で運営している場合、聞きたくても聞けないことがあるから安心感はあるよね。」
Cさん「最後のブロックの「励まし」からの着想で、回答をしたあとに、一言くすっと出来るようなのをランダムで話し始めたら、ほっとひとときの「癒し」が醸し出されるかもなんて思ったりもしました。アレクサの中に見え隠れする人格・・・あれ?これってもしかして?みたいな。プログラムって、無機質なようで、結構人のクセだったり、人柄(?)みたいなものも見えてくるので、私が作ったんだよ!みたいなものが潜むと、機械的じゃなくなって、親しみも出てくるのかなーなんて思いました。実用的に店の人に使ってもらう!っていう意味でね。」
みんな、ありがとう。そしてCさん、随分いいこと言う。そうだ、これで終わりじゃない。私ならもっとアレクサたんの魅力を存分に引き出せるはずだ!ということで次回に続く、かもしれない。