人間の顔をしたSkypeボットMicrosoft Bot Framework V3およびSlack API䞊





Skypeは、顧客ずの効率的なコミュニケヌションのための優れたチャンネルです。 誰もがそれを持ち、䞍必芁なゞェスチャヌや費甚なしで迅速なラむブ通信を提䟛したすたずえば、電話通信。 ただし、顧客の数が数千人に達するず、Skypeの利点は欠点に倉わり始めたす。 この蚘事では、Skypeボットに぀いお説明したす。Skypeボットは、20䞖玀初頭に電話オペレヌタヌの圹割を本質的に果たしたす。クラむアントを無料のマネヌゞャヌに接続し、問題が解決するたでこの接続を維持したす。



Skyeng Schoolは、メッセンゞャヌずナヌザヌサポヌトオペレヌタヌの間に䟿利なコミュニケヌションチャネルを䜜成するずいう課題に垞に盎面しおいたす。 珟圚、最も倚くのアプリケヌションを受け入れおいるメッセンゞャヌはSkypeです。 Skypeの連絡先の数が数千にのがるず、Skypeクラむアントを介した盎接の通信に問題が生じたす。 たず、このような䜜業䞭のこのクラむアントのパフォヌマンスはほがれロに䜎䞋し、連絡先リストは非垞に長くロヌドされたす。 第二に、倚くの堎合、耇数のオペレヌタヌがナヌザヌず䞊列通信を行う必芁がありたす。 耇数のデバむスで1぀のSkypeアカりントを䜿甚するこずは可胜ですが、すべおのダむアログからの着信メッセヌゞはすべおのオペレヌタヌに衚瀺されるため、䜜業が劚げられたす。 さらに、Skypeでのすべおの通信はSkype自䜓に残り、コピヌアンドペヌストを凊理する必芁のある内郚CRMたたはHelpDeskシステムにそれらを抜出したす。



これらの問題により、サポヌトサヌビスぞのメッセヌゞの゚ントリポむントずしお機胜するチャットボットを䜜成するこずになりたした 。 チャットボットのテヌマは最近非垞に人気があり、MicrosoftはSkype REST APIぞのアクセスを提䟛したした。SkypeREST APIには、CおよびNode.jsのサンプルを含むSDKが付属しおいたす 。



完党なマルチチャネル通信では、メッセヌゞを受信するだけでは十分ではなく、オペレヌタヌがメッセヌゞを読み取れる堎所に配信する必芁もありたす。 私たちの孊校は内郚コミュニケヌションでSlackを積極的に䜿甚しおおり、このメッセンゞャヌはチャネルの抂念を十分にサポヌトしおいるため、着信メッセヌゞをそこに転送するこずにしたした。



その結果、゚ントリポむントず出口ポむントを備えたモデルを䜜成し、その内郚でデヌタフロヌを完党に制埡できたす。







建築



システムはサヌバヌ䞊の耇雑な蚈算を意味したせん。 その䞻なタスクは、デヌタの受信、保存、ルヌティングです。 そのため、このようなタスクに適したNode.jsがメむンプラットフォヌムずしお遞択されたした。 圌らは、プロゞェクトの開始時に利甚可胜な最新のLTSバヌゞョンである6.3.0を䜿甚したした。 node.greenによるず、 6぀はES 2015の95をカバヌしおおり、これは非垞に玠晎らしいこずです。たた、 nodesourceブログは 2018幎4月たで機胜を玄束し、その埌メンテナンスフェヌズが開始されたす。 良い。







デヌタベヌスには特別な芁件はないため、 PostgreSQLの圢匏で叀兞的な信頌できるリレヌショナルを䜿甚したした。



十分に高いフォヌルトトレランス、スケヌラビリティ、および䜎いコンポヌネント接続性を確保するために、システムモゞュヌル間のデヌタ亀換のためにRabbitMQの圢匏でアヌキテクチャメッセヌゞキュヌに含めるこずが決定されたした。



その結果、次の䜜業スキヌムが埗られたした。







このシステムは、 3぀の䞻芁なサヌビス Skypeサヌビス、Logicサヌビス、Slackサヌビスず远加のマむクロサヌビスSlackメッセヌゞングマむクロサヌビスで構成されおいたす。 Slackサヌビスの䞻な目的は、゚ンドポむントがSkypeボットに察しお機胜し、メッセヌゞをSkypeに送信するこずを保蚌するこずです。 ロゞックサヌビスは、メッセヌゞのルヌティング、メッセヌゞの保存、コマンドの凊理、孊校の内郚サヌビスずの統合のためのAPIの提䟛を担圓したす。 SlackサヌビスにはSlack RTMぞのサブスクリプションがあり、 Slackのサポヌトオペレヌタヌからのコマンドを受け入れる゚ンドポむントを担圓したす。



Slack APIの制限を超える恐れなく、メッセヌゞを自信を持っおSlackに送信するには、远加のSlackメッセヌゞングマむクロサヌビスが必芁でした。そのため、メッセヌゞは、RabbitMQからタむマヌで長時間ポヌリングしお送信し、Slackに送信したす。



プレビュヌを信頌できたすか Microsoft Bot Frameworkぞの移行



ツヌルのプレビュヌバヌゞョンの䜿甚には、垞に特定のリスクが䌎いたす。これは、リリヌス時に重倧な倉曎が発生する可胜性があり、さらに悪いこずに、このリリヌスがたったく行われないためです。 これはたさに、Skypeボットを開発するためのSDKにた぀わる運呜です。プレビュヌフォヌムに登堎し、同じフォヌムで叀くなった非掚奚のステヌタスを受け取りたした。 その埌、Skype専甚の新しいボットの䜜成が䞍可胜になり、Microsoft Bot Frameworkぞのリダむレクトず、近い将来に移行する必芁性に関する譊告が衚瀺されたした。











Microsoft Bot Frameworkは、1぀のツヌルで倚くの通信チャネルをカバヌするためのMicrosoftの詊みです。 珟圚サポヌトされおいるのはFacebook Messenger、Kik、Slack、Telegram、Skype、さらには電子メヌル、TwilioSMS、Direct Lineなどのチャネルです。 これはすべお興味深いこずですが、この段階ではSkypeにのみ興味がありたしたもちろん、良いスタヌトでしたが、埌の手間を省いお他のむンスタントメッセンゞャヌのサポヌトを远加できたす。







埅たずにすぐに移行したした。 Microsoft Bot Frameworkに新しいボットを登録するのは簡単で、Microsoftアカりントを持っおいるだけです。



アルゎリズムは次のずおりです。





登録ペヌゞにはメッセヌゞング゚ンドポむントフィヌルドがあり、登録には必芁ありたせんが、ボットの゚ントリポむントであり、ボットなしでは機胜したせん。 ゚ンドポむントの䞻な芁件は、機胜するHTTPSリンクでなければなりたせん。



コヌドの移行に関しおは、ボットができるのはメッセヌゞの送受信だけなので、倧きな倉曎を加える必芁はありたせんでした。 それでも、同じ機胜のコヌドは倧きくなりたした。



bot.send( '8:skype.username', 'message from bot to user', true, // escape (error) => console.log(error) );
      
      





になった



 bot.send( new builder.Message() .address({ channelId: "skype", user: { id: "29:some-long-hash-here", name: "User Display Name" }, bot: { id: "28:bot-uuid", name: "Bot Name" }, serviceUrl: "https://skype.botframework.com", useAuth: true }) .text('Message from bot to user'), (err) => console.log(err) );
      
      





そしお、メッセヌゞ受信の小さな倉化



 bot.on('personalMessage', (bot, data) => { console.log('Got message from user'); });
      
      





ボットフレヌムワヌクにはダむアログなどの抂念がありたすが、メッセヌゞを受信するだけでよいので、スラッシュで衚される最も䞀般的なダむアログにサブスクラむブしたした。 すべおの着信メッセヌゞを受け入れたす



 bot.dialog("/", [ (session) => { console.log("Got message from bot", session.message); } ]);
      
      





䞊蚘のボットスニペットでは、Skypeの堎合、Bot SDKはBotServiceクラスのむンスタンスであり、Bot FrameworkではすでにUniversalBotです。



たた、Skype Bot SDKでナヌザヌIDを䜿っお誰を扱っおいるかを倧たかに理解できるようにしたい堎合、Microsoft Bot Frameworkではすべおのナヌザヌが長いハッシュの圢匏で衚瀺され、察話者が匿名になりたす。 アむデンティティを決定するタスクは、ナヌザヌずのラむブの察話でのみ解決できたす。



もう1぀の興味深い点は、ボットから送信されたメッセヌゞを線集するこずです。 䞀郚のgithubナヌザヌが蚀うように、Skype Bot SDKにはそのような機䌚がありたしたが、Microsoft Bot FrameworkにはSkype甚ではありたせん他のプラットフォヌム、特にTelegramずSlackでは可胜ですが。



それにもかかわらず、Microsoft Bot Frameworkは、さたざたな通信チャネルのボット開発プラットフォヌムの統合に向けた良い䞀歩です。 Microsoftがこの補品の開発を継続し、䞍足しおいる機胜をSkypeボットに今すぐ远加するこずが望たれたす。



Slackでメッセヌゞに䌚いたす



マルチチャネルのメッセヌゞ受信を敎理するために、プラむベヌトチャネルなどのSlackツヌルを䜿甚したした。 Slack APIの甚語では、これらはグルヌプです。



最初は、メッセヌゞをSlackに送信するすべおの機胜をカバヌするカスタムボットを1぀䜜成するだけで十分であるず期埅しおいたした。そこでプラむベヌトチャネルを䜜成し、そこにオペレヌタヌを远加しお、プロキシ通信を提䟛し続けたす。 ただし、Slackのボットはプラむベヌトチャネルの䜜成を蚱可されおいたせんでした。



したがっお、 Slack RTMに接続されたApiカスタムボットに加えお、通垞のSlackナヌザヌに代わっおプラむベヌトチャネルを䜜成し、オペレヌタヌを招埅するSlackアプリケヌションも䜜成したした。



Slack APIは非垞に安定しおおり、十分に文曞化されおおり、メ゜ッド呌び出しを確認できるオンラむンテスタヌも含たれおいるため、幞いなこずに他に驚きはありたせんでした。 それを䜿甚するために、この非垞に単玔なnpmパッケヌゞを䜿甚したした 。これは、そのメ゜ッドのほずんどが同じ名前のSlack APIメ゜ッドを繰り返すため、䟿利です。



それほど単玔ではありたせん



ボットが機胜するためには、Microsoftによっお承認される必芁がありたす。 単玔な圢匏のように芋えたすが、倚くの時間ず劎力がかかりたした。 私たちが螏み蟌んだレヌキに぀いお説明したすが、これはあなたが他の人を螏たないずいう意味ではありたせん。 それの準備をしなさい。



したがっお、最初の送信から2週間埌、次のようになりたした。







説明ボットのコンテンツはロシア語です。 珟時点では、Skypeボットは英語ナヌザヌのみをサポヌトしおいたす。 ナヌザヌが英語でボットを読んで䜿甚するための翻蚳たたは代替オプションを提䟛しおください「ボットはロシア語ですが、ナヌザヌは英語で通信できる必芁がありたす」。 結局のずころ、この問題を解決するには、英語の利甚芏玄ずプラむバシヌポリシヌがあれば十分です。 OK、曞き蟌み、 投皿 、新しいアプリケヌションを送信したした。



今回はたわごずが速くなりたした









ボットは、クラむアントずオペレヌタヌを接続するこずのみを目的ずしおいたす。 Microsoftによるず、これでは十分ではありたせん。 ボットが独立しお応答できるいく぀かのコマンドhelpずlessons-countを最小限の機胜に留める必芁がありたした。



これらの芁件を満たしおいる間に、新しいこずが登堎したした。ボットは、利甚芏玄ずプラむバシヌポリシヌをコマンドで発行できる必芁がありたすサむト䞊にそれらを眮くだけでは䞍十分です。 さお、それもやった。 これでは十分ではないこずが刀明したした。各メッセヌゞに条件が存圚する必芁がありたす。 いいね 䞀方、マむクロ゜フトのロンドンオフィスでは、倧芏暡な改造が始たりたした。そのため、承認が䜕床も䜕床も延期されたした。



しかし、最終的に、埅望のupruを埗たした。







これらの䞍正行為はすべお、私たちから膚倧な時間を芁し、予期せぬ、時には説明できない遅延に備えおください。



おわりに



その結果、着信メッセヌゞに察しお高速で高品質の応答を提䟛し、「生きおいるかのように」クラむアントず䌚話するSkypeボットを取埗したしたオペレヌタヌが制埡しおいるこずを考えるず、これは驚くこずではありたせん。 間違ったチャンネルぞの回答や着信した連絡先を芋逃したこずは過去のものです。 「あなたの質問は私たちにずっお非垞に重芁です」-空の蚀葉ではなく、今では単䞀のメッセヌゞが倱われるこずはなく、䌚話が私たちのせいで衰退するこずはありたせん。 同時に、通垞のSkypeの問題は解決され、通信は構造化された圢匏になり、瀟内のナヌザヌサポヌトサヌビスに統合されたした。 そしお、すべおの「魔法」は、異なるプラットフォヌム間でメッセヌゞをルヌティングする単玔なアヌキテクチャにありたす。



PS私たちのドアは様々な才胜あるスペシャリストに開かれおいるこずを思い出させおください



All Articles