仕事の備忘録

IT系技術とか、カスタマーサービスとか

Web App Bot でSkype公開申請向けの修正を実施する その2

QnA Maker を使ったボットがSkypeからRejectされた。その修正対応の続きを書く。

testedquality-tech.hatenadiary.jp

先に結論からいうと正式にSkypeボットとして認証を得た状態で公開できた。以下の説明よりボットを見てもらったほうが早いかもしれない。単純に水産高校&商船専門高等学校を探すボットだ。インストール先は以下に掲載した。

botsuisangogo.hatenablog.jp

続きを読む

https化道半ば

Chromeがhttps以外のURLを警告出すように変更されることもあり、思い切ってはてなブログのhttps化を始めた。まずはこの技術ブログを実施。こちらはもともとhttpsをリンク先に極力選んでいたこともあり問題なさそうだ。

一方数年前から実施している水産高校ブログは、リンク先がhttpしかないものも多い。変更は当面難しいかもしれないがどこかで行う必要はあるだろう。

 

Web App Bot でSkype公開申請向けの修正を実施する その1

前回RejectされたSkype側からの指摘点修正を実施する。再度内容を確認。

f:id:testedquality:20180530220003p:plain

訳すとこのような意味と認識した。

  1. 非黒と非白の背景色を持つボットのアバターのイメージにすること。
  2. ユーザーが連絡先としてボットを追加すると、ボットは自動的にウェルカムメッセージを表示する必要があります。これにより、ユーザーエンゲージメントが向上し、ユーザーへ正しくガイドできます。
  3. 不明なコマンドの受信時にヘルプ画面を表示します。

1.はアイコンを全般色を変えるかデザインを変える必要がある。

2.についてはBot Framework の初期動作では返答しないので全く気付いてなかった点。これの修正を実施する。できればFrameworkを変えてほしい(pull request しろということだろうが)

3.はヘルプメッセージというか使い方の説明はしていたのだが、改めてヘルプページを作成する。

 

それぞれ対応を実施した。

1.は最近話題のおすすめデザインを提案するPowerPointを使ってみることに。元の

f:id:testedquality:20180602223817p:plain

 をアイコンに入る様にレイアウト変更ののち、パワポに貼ってみた。色々提案してくれたのから色味とかアイコンを使って以下のようなアイコンを作成。

f:id:testedquality:20180602224312p:plain

2.は1日難航。実はAzure Bot Service で提供される QnA Maker 向けテンプレートはそのまま利用するとユーザが何か入力するまで待機する仕様になっている。もともと詳しくソースを見ていなかったので、何をどうしたらよいものかわからないので、一日Bot Framework のSDKを見て対応策を考えることになった。ドキュメントの中で以下の記述をみつけて愚痴ったりした。

最終的に単純にActivityTypes.ConversationUpdateの値が取れたら挨拶用のテキストをセットして、メッセージを受け取ったように見せかけた。

f:id:testedquality:20180602225150p:plain

3.はヘルプページを作成。はてなブログデフォルトでは日付番号になるため、エイリアス名をわかりやすくした。まだ機能がほぼないので書くのが恥ずかしかった。

https://botsuisangogo.hatenablog.jp/entry/help

 

ここまで準備して最終的に1.のアイコンを登録して最終確認をしようとした。が、今日完成しなかった。

f:id:testedquality:20180602225408p:plain

ボットプロファイルのアイコンをSkypeのアイコンとして利用するため、先ほどのアイコンをアップロードしようとしたが、画面を閉じて戻ってくると元のアイコンに戻ってしまうのだ。どうやらアップロードがエラーになっている模様。

f:id:testedquality:20180602225854p:plain

理由が全く分からないので、対応しようがない・・・もう少し調べることが必要そうだ。再申請はもう少しかかるかもしれない。

ボットの公開申請をしてRejectされる

前回で自分で使うボットを作った。が、目的は公開でもあるため機能追加より先に安心して公開できるのを優先することにした。Skypeは100人以上利用する場合レビューを受けて公開の許可を得る必要がある。得ない場合、検索メニューから名称検索で出てこない状態となる。(今回名称表示しているので検索してもらうとわかる)

 ということで、よく分からないままAzureのチャネルメニューを確認すると「公開」というメニューがある。

f:id:testedquality:20180530213309p:plain

公開時の設定画面があるので一通り設定してみた。ちなみに後で後悔することになるのであるが「レビューガイドライン」のリンクをクリックせずに入力した。ここでプライバシーポリシー&使用条件についてのページが必要なため、はてなブログを一つ専用に作って対応することにした。メールアドレスも専用のアドレスを作って対応する。

個人情報に当たるものは取得しないし会話ログも取得しないが、ポリシーはきちんと提示する。今後デバッグ時に不明になった文言を取得するなども考えられるからだ。(画像で値が入ってない箇所もすべて値を入れた)

f:id:testedquality:20180530213417p:plain

f:id:testedquality:20180530213510p:plain

f:id:testedquality:20180530214408p:plain

最後のボタンをクリックすると、ボタンが上記のように「送信しました」に変更される。初めてのレビューだ。

そして翌日自分が舞い上がっていたことを気づいた。「レビューガイドライン」のリンクをみつけクリックしたら以下の文章がでてきた。ちなみに※以下は読んだ感想。 

https://github.com/Microsoft/skype-dev-bots/blob/master/certification/CHECKLIST.md

Number Requirement Notes
100 Bot Profile Information  
101 Bot Name and Publisher Name

Your bot needs to have a clear and descriptive Bot Name and Publisher Name. Do not suffix ‘Bot’ to your bot name unless it is unavoidable and use spacing. E.g.: FooBot should ideally be Foo, or if unavoidable, Foo Bot.

『Bot という名前を付けるな。つけるならブランク入れなさい。』といわれたのでいま名付けている『botsuisangogo』は『Bot Suisangogo』とかに変更しないとダメそう。

102 Privacy Policy and Terms of Use documents published online and referenced by the bot

Your bot must have links to a valid Privacy Policy and Terms of Use.

プライバシーポリシー&使用規約のはてなブログあり。

103 Bot avatar image with non-black and non-white background color

Your bot must have an avatar image. You must not use the standard bot framework avatar. You must not infringe any copyrighted images.

※ここでのアバターは、アイコンを指している?文字アイコン作成。カタカタだとダメか?<白ではなくクリームにした/span>

 

104 Bot description explains the purpose of the bot

Your bot must have a clear and comprehensive description to help users understand its purpose.

※目的は書いていて、県名高校名からしか検索できない点は記載済み

200 Bot Functionality  
201 Automatically display a Welcome message

When a user adds the bot as a contact, the bot must automatically display a welcome message. This increases user engagement and guides the user to success.

※挨拶を表示する。これ対応できてない。いまメッセージがなんらか送られない限りメッセージ送信しない。Bot Framework そのまま使ってたらダメだ。

202 Display a Help screen when receiving unknown commands

Whenever a user sends any message / command to the bot that the bot doesn’t understand, the bot must respond with a help message, providing usage guidance.

※わからない文字の場合には必ず使い方をメッセージとして返信しているのでここは大丈夫か。

 

203 Bot functionality works correctly

Your bot must function correctly. Bots with obvious broken functionality will be rejected and / or removed from the directory.

※正しく動いているはず。こう書かれると心配になる。

204 Bot must be fast

The bot must respond to user commands without extensive delays.

※遅延する要素はないけど、region が米国中部なのはバグ回避で全部同一 region じゃないと新規作成できなかったのだ。せめてアジア系で作成したかった。

205 Bot must be mobile-friendly

The bot must be designed in a way that enables users to be able to interact with it on a mobile device. For example, the bot should not send excessively long individual messages (instead it can send a sequence of several messages). To ensure the bot is mobile friendly, please test on a mobile device (Android or iOS) with the latest versions of Skype.

※これは大丈夫なはず。Andriodでテストは済ませた。

300 Compliance  
301 Your Bot Submission must PASS Azure Online Service Terms See Azure Online Service Terms
302 Your Bot Submission must PASS Microsoft Channel Publication Terms See Microsoft Channel Publication Terms

 

正直速攻修正したくなったが、レビューを受けている最中に変更されたらもっと失礼に当たるので恥ずかしい気持ちを堪え数日。見事に「拒否」の返答がAzure Portal に戻ってきた。(ちなみに申請中になると「InReview」となる)

f:id:testedquality:20180530220907p:plain

詳細メッセージが確認できるので反省していた点と一致するか確認。

f:id:testedquality:20180530220003p:plain

想定していたことと違うのは

  1. アイコンの白い背景への修正
  2. 不明な時にヘルプへのリンクが必要(ヘルプページを作成するか・・・)

あとポイントは先に挨拶する点。これはBot Framework のデフォルト仕様部分を変更しないとできない。ということできちんと仕様書を読めという反省で修正に入る。

de:code 2018 参加記録

2018/5/29追記  Women in Technology での登壇者名が誤っておりました。松本さん→大森彩子さんです!大変失礼いたしました! そして指摘していただいたhayashih さんありがとうございました!

 

de:code2018の参加記録を書く。昨年は申し込み記入中に満員になるという悲劇が起きたが今年は無事参観。このブログでは詳細に記載したいもののみ書いておく。

★基調講演

すでにWeb記事が多数出ているが、先月の米国MSで開催されたbuild 2018の内容を基にした3時間にわたるものだった。出来れば配信されているので見てほしい。

microsoft-japan-events.azurewebsites.net

以下が全体まとめとして詳しかったので紹介する。

sy0690.hateblo.jp

基調講演終わった最初の感想は「マイクロソフトの当たり前はレベルが高い」であった。単純にかっこよかった。女性をずらっと並べても別に特別でもない。例年通りの最高レベルのスムースな基調講演を見ることができた。つまりマイクロソフトにとって女性が仕事することは普通だということで、その普通がどれだけ多くの女性にとって難しいことかわかっているからこそ、非常に多くの人に思いが伝わったと思っている。このブログはその伝わっている一例だと思う。

hayashih.hateblo.jp

毎年マイクロソフト社のダイバーシティセッションであるWomen In Technology はランチ時間の開催を行っているが、今年は加えてオープン会場でのトーク形式でも開催された。2日目参加した際には千代田まどかさん大森彩子さんが登壇されていた。そこで聞いたところによると基調講演は1週間前にしか指名が来ないとのこと。さらに台本は数日前で当日深夜0:30からのリハーサルが普通に招集されたとのこと。皆さんタフでかっこいいのであった。

★セッション

今回はあまりセッションに参加できなかった。特にCognitive ServisesとかBot系は満室が多かった。皆業務適用を狙っている時期か?そこで個人的興味に切り替えて以下参加したセッションの感想を記載。

Windows Mixed Reality ヘッドセットを使ったビジネスアプリ開発

自宅でちょこちょこ自習しているので参加。ビジネス適用を積極的に行っている人たちが一定数いて数年後を見据えて手がけていることが分かった。

開発者におくる Power BI を使う時に考えるべきアーキテクチャ ~ データを溜めるのは誰だ? ~

Power BI の画面にアンケートから回答するとリアルタイムで表示されるデモで、会場全体が参加者となった。機能の使い分けについて表で解説などがあり、実利用しやすい資料だった。早く公開されたものが読みたい。できれば週末のこちらに参加がいいと思う。

 SQL Server 管理者におくる SQL Server on Linux Tips

最初に資料のQRコードを写真撮影するように案内があった。これで写真を途中でとる人はいなかったはず。Linux版 SQL Server は基本Windows 版と同じということを言われているが、それが本当であることの解説が最初にあり、そのうえで差分がどこかを説明してくれた。毎回この方のセッションはよくできてるなあと感動する。ただ思った以上に参加者が少なく驚いた。SQL Server に興味がある会社が減っている?弊社も新しいバージョンを使うパターンは少ないが。こんなに面白いDBなのになあと思ったが積極的に宣伝はしてもらいたい所存。

Mixed Reality フリートーク&QA ~なんでも聞いて、答えます~ [AC18 と同一内容]

http://hololab.co.jp/

実は今月UnityのイベントUniteにも少しだけ参加、トヨタ自動車さんのHoloLens事例セッションを聴講した(セッション内容非公開で資料なし)その際プレゼンターの室長さんが「自分からいろいろ試して部下にやらせたのです」というお話をされていた。

「VRやMRでカイゼン」、トヨタが活用事例を紹介 | 日経 xTECH(クロステック)

当日のデモも面白かった。でもプレゼンされてた室長自身でHoloLens使って企画して開発させているとの話が一番印象的でした。上が技術を理解して現場が必要なものを皆でつくる。ビジョン共有が完璧。

2018/05/17 12:27

ただこの記事にもそのセリフはなく資料もないため、私の勘違いかもと思いブログを書くのをやめていた。今回、セッションはフリートークで、かつ前日にかなりの「ガチ勢」と呼ばれる熱心な開発者が参加した反動らしく非常に人数が少なかった。回答者が6名で受講者もそれくらいだったおかげで、自分が数か月WinMR利用&開発での疑問などを質問することができて幸運だった。ちなみに上記トヨタの事例はやはり室長さんが自前でHoloLens買って、実際に部下や上層部に体験させて開発を進めたのだそうだ。業務で利用されている方は数年後を見越して、本格活用前に適用できるところから実施しているとのこと。そして日本は世界に負けないくらい事例も多く、かつ現場が必要として利用しているとの話がホロラボ中村さんから説明があった。皆さん導入には「実際に試してもらって納得させるしかない。そのためには自分で作るか依頼するか」と言われていたので、ここは、自分で開発して認めさせるしかいないとケツイした。

EXPO会場とHoloLens体験

HoloLens体験コーナーでは2つのアプリを体験できた。一つは

f:id:testedquality:20180522141559j:plain

船舶の自動航行システムでニュースになっていたJRCSさん。水産高校を応援している関係で船員さんのツイートを集めているのだが、特に内航船については人手不足&平均年齢60歳といわれる人手不足な業界である。それを陸から航行サポートすることで人手不足解消の一端を担うことを目標とされていた。もともと船内部の自動航行システムを提供している会社さんだ。その高い目標は、自動車の自動運転が見えてきている今、夢ではないと私も思った。本社は山口県は下関で開発の方々の目的がはっきりしており問題解決のためのHoloLens という点が明確だった。

もう一つは体験後に見学していたら親切だったハニカムラボさん。昨年秋にTech Summit でバーチャル洋服体験システムを提供されたが、今回はハニカAIちゃんの出展。こちら結構話題になっていた。

f:id:testedquality:20180523173146j:plain

なんといってもかわいい。このハニカAIちゃんはAIによるサポートを目的としているが、今回はお話をする設定だった。非常に動作が柔らかいのがよかった。あとストーリーがあるのだが、途中のギミックがとても大好きだったのでまた体験したいと思う。こちらはアミューズメント要素もある形であったがHoloLens であることを十二分に生かしてたと思う。

あと会場でPower BI画面が素敵だったのがEBILABさん。業務でかなりPowerBI 作りこんでますがデザインと見せ方が、タブレットで使いやすく作りこまれていて、かつ触って楽しいギミック。ちょっと衝撃だった。業務たくさんやってますが、データだけじゃだめだと本当に反省した。

全体感想

今回運営が例年より良かった。が、会場が多すぎ&参加希望時間が重複しすぎて泣きそうになってたし、人気セッションのあふれ具合が想定以上であきらめる場合も多かった。もう少しセッション数減らしてもらえるとありがたい。じゃないと部屋がこれ以上広げられないと思われる。でも休憩所&電源については満点。

f:id:testedquality:20180522155713j:plain

例年つらかったが今年は最高に良かった。こんな水の眺めを見ながらのぞき見を避けることが可能な机が多数。1Fのわかりづらい場所であったが良かった。それからアプリが毎年着実にバージョンアップされていて、今年初めてアプリだけで丸一日過ごせた。トラブルもなかったし満足している。

 ということで、本当に2日間勉強しっぱなしだったので、早くアウトプットせねば。実は今回参加企業からのデモを使ったサンプルソースコード提供も別途実施されており、それを動かすとボットが作れるものが出ていたりする。早速週末のボットづくりに生かそうと考えている。

QnA Maker で全国の水産高校情報を返すBotを作成 その2改善とSkype連携

 Bot Framework による bot 作成の続き。先日QnA Maker との接続テストで使い勝手の悪い点があったので外部システムとの接続をする前に対応する。

機能改善

testedquality-tech.hatenadiary.jp

  1. 水産高校がない県を入力したときには、存在しない文言と地区の一覧を表示する。
  2. マッチしないときのメッセージを変更する。

まず1.から。QnA Maker にログイン

f:id:testedquality:20180513212013p:plain

昨日作ったKnowleged base が存在する。SuisanKokoのリンクをクリックするとEdit画面になるのでそこでデータ追加を行う。 

f:id:testedquality:20180513212128p:plain

現在水産高校が存在しない県は11存在する。この県を指定した場合には、ユーザーに近隣の県を知らせるようにした。ついでに瀬戸内と入れた場合も想定。海に面した県で水産高校がないのは、広島、岡山、和歌山、大阪と瀬戸内に面したところだけなのだ。

データ追加をしたらテストして問題なければ再度Publish をする。上部メニューをPUBLISHに切り替えて「Publish」ボタンをクリックする。

f:id:testedquality:20180513212919p:plain

f:id:testedquality:20180513212344p:plain

Publish していないとAzure Portal 側の「Webチャットでのテスト」メニューで利用できない。これに気づかず数回再起動してしまった。実施したらAzure Portal側で再テストしたほうがよい。瀬戸内が表示されたからOK。

f:id:testedquality:20180513213029p:plain

2.のメッセージはApp Service側で修正となる。昨日作成した際にQnA Maker 利用を選択するとApp ServiceにQnA Maker用の基本ソースコードが設定されるらしい。

そしてWeb アプリ ボットにはソースコードが存在していて修正できる。Visual Studio でソース修正かと思っていたが、Azure上には「オンラインエディターを開く」にて操作ができるとあるんで押してみた。

f:id:testedquality:20180513213748p:plain

 クリックすると以下のようにエディタが開く。「Aure App service editor」でソースの修正とビルドができるらしい。ステップは2つしかない。ソースの修正とコンソールでのビルドコマンド実施。f:id:testedquality:20180513221358p:plain

まずソースコードの修正、とあるがどこを修正すればよいのか?構成がよく分かってないので一つづつソースコードを開いて内容確認をした。wwwroot/Dialogs/以下にBasicQnAMakerDialog.cs がありそこに見慣れた文字を見つけた。すでにGAしているが互換性を考慮しているのかpreview用のコードもある。とりあえず内容からclass BasicQnAMakerDialog 内を修正してみる。

f:id:testedquality:20180513222101p:plain

f:id:testedquality:20180513222454p:plain

自動セーブらしい。左上でSAVEDと出ているので安心する。手順からこれをビルドするためにコンソールに移動するのだと思うが、どこにコンソールがあるかわからない。

色々探した末、Azure Portal からQnA Maker のドキュメントページに記載があった。ここのドキュメントはわかりやすいので、もうこちらを見ることにしようと思った。

Build a bot with the Azure online code editor - Bot Service | Microsoft Docs

f:id:testedquality:20180513223152p:plain

 画面左側の〇の中にコンソールボタンがある。これをクリックすると右側がコンソールに切り替わる。ここに画面のように「build.com 」と入力、Enterキーにてビルドが実行される。

f:id:testedquality:20180513223354p:plain

 ビルドが成功したら再度テスト。

f:id:testedquality:20180513223430p:plain

メッセージが変更できたことを確認したので、App Serviceを再起動する。これでbotサービスとしては準備完了である。

システム連携

これでシステム連携できるようになったので、slackやLINEのシステム連携を調べはじめたが、手続きおよびセキュリティ設定、およびプライバシーポリシーの提示などが必要。プライバシーポリシーの作成はきちんとすべきなので、今は無理。ということで、少人数ならOKなSkypeでの連携を実施した。

beachside.hatenablog.com

設定画面が実はコピーできなかったのだが上記ブログを参考にして対応できた。ただ、自分の環境の問題でSkypeのストア版がインストールできず、サポートに確認する羽目になったが治らず昔のSkypeでの動作確認となった。接続確認で時間がかかったのはまさかのSkypeをインストールする部分だった・・・

インストールが完了したらボットがすでに一覧に表示されている。メッセージのやり取りをしてみる。

f:id:testedquality:20180513225132p:plain

想定の動作をしていることを確認。これでほしいボットが利用可能になった。

 

ここまでの作成は実はすべて無料で実現可能。ただし、Azure Portal にてbotサービスを新規作成するとき、一緒にApp Service が作成されるが、初期設定は有料プランである。無料に切り替え忘れると見事に課金されるので注意が必要。初日の操作で150円くらい。

QnA Maker で全国の水産高校情報を返すBotを作成 その1サービス作成まで

はてなブログの片付けをしているとき、自分の昔の記事をみて「QnA Maker がGA(一般提供開始)したのを忘れていた」ことを思い出した。前回はまだまだというブログを残している。

testedquality-tech.hatenadiary.jp

実は別ブログにて全国各地の水産高校サイトを巡回し記録するということをしている。URL一覧があってもなかなか面倒だし、高校名など固有名詞がもう年で覚えられない。ということで、こういう時は自分以外の外部記憶を増やすしかない、すなわちクラウドを利用することにした。GAしているQnA Maker を使いさらにBot に答えてもらうように作成することにした。

Bot の作成方法を検討する

QnA Maker を利用する場合、通常はFAQ サイトなどから自動作成を行うのが多いと思う。今回のBot作成には以下を参考にしたが、ここでも仙台市のFAQ サイトを利用していた。

qiita.com

最初はFAQを作ることを検討し、「福岡県の水産高校は?」というような質問を複数考えた。がしかし、今回答えてほしいのは水産高校の名称とURLなので、事実上県名や名称だけ部分一致すればよい。「福岡」とか「福岡県」だけで水産高校は絞り込めるし、水産高校は県に最大4つなので回答可能であるはず。実際にテストしていると日本語表記が短いと単語とみなされるのかマッチしないことが多いことも判明した。

ここで選択肢としては

  1. Azure Bot Framework にてコードを書いてよしなに分岐する
  2. LUISを利用して定型質問を作ってみる

    LUIS: Language Understanding Intelligent Service

  3. QnA Maker 向けの単語を並べて、単一回答に結び付くようにする

1.は都道府県別で47個それぞれ対応するのかという面倒くさいことになるので最終手段。2.が常套手段かと思いながらLUIS画面を使いだしたが

「XXX県の水産高校は?」「◇◇水産高校のURLは?」

くらいしか思いつかず。これなら、県名や高校名だけ入力するほうが質問する自分が楽なのでは?ということで、3.のQnA Maker での登録に決定した。

QnA Maker 作成

各高校ごとに表示させたい回答を高校単位に1つにした。高校名、住所とURLを一つに。追加で地区別の項目も作った。これらをExcelにまとめた。

f:id:testedquality:20180512011903p:plain

QnA Maker への登録は以下のように高校名、県名、高校の略称がHPにある場合にはそれも追加した。f:id:testedquality:20180512011537p:plain

県名や略称をいれると情報が戻るようになる。力業であるが目的は達成できている。

f:id:testedquality:20180512011716p:plain

これをPublishして外部呼出し可能にしたら、Bot Frameworkに移動して連携処理を作成する。最初の記事では、Bot Framework がまだプレビューのころで今は新規作成方法が異なる。以下の記事が最新に近いので、参考にしながらテンプレートで【Question and Answer】 を選択して作成してみた。

チャットボット 作成ツール Web App Bot とは?

Bot Frameworkを使うときWeb App Bot についての記事は少ないのでありがたい。

2018/05/12 01:26

 

f:id:testedquality:20180512015535p:plain

 作成したbot サービスを開いてアプリケーション設定 というメニューをクリック、開いた画面下 QnAKnowledgebaseId 、QnAAuthKey などが空である。ここに QnA Maker から値を設定。

設定方法はQnA Maker マニュアル に記載あり。以下のように対応しているらしいがなんで一覧表ではないのか?マニュアルないとわからないよ。

Create a QnA bot with Azure Bot Service - Azure Cognitive Services | Microsoft Docs

f:id:testedquality:20180512022012p:plain

これを保存したら、ブレードの上にある「Webチャットでテスト」画面で接続を確認する。正しければQnA Maker での回答が得られる。よかった!

f:id:testedquality:20180512022623p:plain

 

これでbotサービスとしては完成。次回外部連携で使えるようにする。SkypeとLINEを予定している。一番時間がかかったのはImport Formatで前回ひっかかったからと、手動で1つづつ登録した点。あとQnA Maker はタグが利用可能なのでGoogle Map向けURLで所在地確認をできるようにしておきたい。でも1日で作成できたのでよしとする。