Bot Framework - co je nového

Microsoft Bot Framework si dává za cíl zjednodušit tvorbu konverzačních agentů (pro které se vžilo označení chatbot nebo zkráceně bot) a jejich napojení na populární služby pro posílání zpráv. Díky Bot Connectoru můžete svého bota napojit na Skype, Slack, Facebook Messenger, e-mail, Telegram a další, Bot Builder vám pomůže ho naprogramovat pomocí SDK pro .NET a Node.js. V praxi vytvoříte REST API obsahující logiku vašeho bota, zaregistrujete jej na vývojářském portále Bot Frameworku, zaregistrujete jej u jednotlivých služeb (Skype, Messenger apod.) a Framework se postará o propojení.

Bot Framework se neustále vyvíjí a poslední aktualizace ukazuje, že můžeme směle říct "bouřlivě" - na základě zpětné vazby došlo k úpravě SDK a je potřeba upravit stávající kód. Co je nového?

Nové funkce

Konfigurace napojení na Skype se nyní propíše automaticky a není potřeba ručně kopírovat hodnoty mezi portály.

Nový Bot Framework Emulátor, který umí pracovat s API v3. Jmenuje se nyní Bot Framework Channel Emulator a je ke stažení na webu.

Nová šablona projektu pro Visual Studio, která reflektuje změny v novém API.

Přibyla podpora karet v klientech, které je podporují (tedy v současnosti Skype a Facebook Messenger), v ostatních se zobrazí jako prostý text s možností interakce. Kartu může tvořit obrázek, nadpis, text a tlačítka:

image

Případně můžete poslat tzv. carousel, tedy pás karet, s nímž se dá posouvat:

image

Další variantou je karta "Sign in", díky které se mohou uživatelé přihlásit k vaší službě a vystupovat pod svým účtem:

image

Další novinkou je možnost zahrnout bota do skupinové konverzace na Skype. V takovém případě obdrží pouze zprávy adresované přímo jemu ( @MujBot Ahoj, jak je? ).

image

Hodně zajímavou novinkou je Preview hlasových hovorů pro Skype. Můžete tak botem zavolat uživateli, případně přijmout jeho hovor a třeba zaznamenat zprávu do hlasové schránky. Zatím funguje jenom 1:1 s konkrétním uživatelem a nedá se použít pro skupinové hovory.

Změny v API

Bot Framework nabízí REST API a korespondující SDK pro .NET a Node.js. Následníkem verze 1 je API v3, které zavádí několik optimalizací, nové funkce a také změny v názvosloví. Proto je potřeba upravit stávající aplikace.

  1. Vytvořte novou větev zdrojového kódu.
  2. Odeberte NuGet balíčky Microsoft.Bot.Builder a Microsoft.Bot.Connector.
  3. Přidejte znovu Microsoft.Bot.Builder, tentokrát ve verzi 3.0.1.
    • Builder a Connector jsou nyní v jednom, takže samostatný balíček pro Connector už neexistuje.
    • Dejte pozor na správné verze závislostí, hlavně balíček System.IdentityModel.Tokens.Jwt, který musí být ve verzi 4.0.2.206221351, přestože je k dispozici novější.
  4. Proveďte změny v kódu.
    1. Autentizace ve web.config se mění:
      • AppID = MicrosoftAppID
      • AppSecret = MicrosoftAppPassword
    2. Třída Message se nyní jmenuje Activity.
    3. Pro rozpoznání typu aktivity (message.Type) je možné použít novou enumeraci ActivityType.
    4. BotAdded, UserAdded, BotRemoved, UserRemoved To/From Conversation jsou nyní jediná událost: ConversationUpdated.
    5. Address má jiné property: To => Recipient, ChannelConversationID => Conversation.
    6. Odpovědi se posílají asynchronně, nikoliv jako návratová hodnota (viz příklad níže).
    7. BotState už není součástí Messaging API, ale stojí zvlášť.
  5. Otestujte, že vše funguje v novém emulátoru.
    • Abyste předešli chybě 401 Unauthorized, ponechte při testování v emulátoru prázdné hodnoty MicrosoftAppID a MicrosoftAppPassword (jak ve web.config, tak v emulátoru).
  6. Vygenerujte si na portále v sekci konfigurace vašeho bota nové App ID a Password pro v3 a vložte je do web.config.
  7. Publikujte aplikaci na internet.
    • Pokud se chcete vyhnout přerušení fungování bota, nepřepisujte stávající web, ale použijte jiný endpoint.
  8. Přepněte na portál Version 1.0 na Version 3.0. Uložte.
    • Pokud z nějakého důvodu nebude bot fungovat, můžete se vrátit zpět na 1.0.

Změna v posílání odpovědí

Zásadní změna se odehrává v MessageController a jeho metodě Post. Původní verze:

[csharp]
public async Task<Message> Post([FromBody]Message message)
{
if (message.Type == "Message")
{
return await Conversation.SendAsync(message, () => new SimpleDialog());
}
else
{
return HandleSystemMessage(message);
}
}
[/csharp]

Nově může vypadat takto:

[csharp]
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
await Conversation.SendAsync(activity, () => new SimpleDialog());
}
else
{
HandleSystemMessage(activity);
}

return new HttpResponseMessage(HttpStatusCode.Accepted);
}
[/csharp]

Budete-li tápat, podívejte se do dokumentace, která byla aktualizována a obsahuje ukázky správného používání dialogů a komunikace s uživatelem v novém modelu.

Martin