2017-11-16 2 views
3

Ich habe einen kleinen Chat-Bot mit dem MS-Bot-Framework geschrieben. Ich habe die Skype- und Web-Kanäle hinzugefügt und hosten den Bot auf Azure mit dem kleinsten Umlage-Plan. Der Bot selbst funktioniert sowohl im Webchat als auch in Skype-Konversationen sowohl direkt (1-zu-1-Chat) als auch in Gruppen, wenn ich die Skype-Desktop-App verwende.Bot kann Anfrage von Skype-Desktop-App, aber nicht von Skype-Store-App behandeln

Leider funktioniert bei Verwendung der Skype-App, die vom Microsoft Store installiert wurde, nichts mehr ... Das Senden einer Nachricht an den Bot (in direkten Chats und Gruppen) erzeugt immer HTTP 500-Antworten von meinem Bot. hinein Graben etwas releaved eine einfache Nullreferenceexception geworfen, offenbar in der ersten Zeile in meinem Dialog-Handler (siehe unten): Der Call-Stack an dieser Linie zeigte, aber der Fehler später passiert ist, siehe unten:

namespace MyBot.Dialogs { 
    [Serializable] 
    public class RootDialog: IDialog<IMessageActivity> { 
     public Task StartAsync(IDialogContext context) { 
      context.Wait(MessageReceivedAsync); 
      return Task.CompletedTask; 
     } 

     private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result) { 
      // call stack pointed to next line 
      Activity activity = await result as Activity; 

      //... some unproblematic stuff 

      string username = activity.From.Name; 
      // the next line was the actual problem: 
      if(username.Contains(" ")) 
       //... 
     } 
    } 
} 

Dieser Teil des Codes, sowie der komplette MessagesController werden ohne Änderungen von den Bot-Framework-Beispielen übernommen, und wie bereits erwähnt funktioniert der Bot gut mit dem Web-Chat und der "normalen" Skype-Desktop-App. Selbst in einem Gruppenchat mit einigen Benutzern in der Desktop-App und einigen in der Store-App können die Benutzer mit der Desktop-App wie erwartet mit dem Bot interagieren, während die Benutzer der Store-App nur Fehler auslösen.

Die offensichtlichen Fragen hier sind natürlich: wie (und warum) unterscheiden sich die beiden Skype-Apps von einer Bot-Perspektive, und wie kann ich damit umgehen?

Edit: Wie sich herausstellt, die Skype Desktop-App die activity.From.Name Eigenschaft auf den Benutzernamen setzt, während die Skype Store App nicht der Fall ist. Der mittlere Teil ist, die Kanaliden sind für beide gleich ("skype", offensichtlich).

+0

Zwei Dinge zu versuchen: - was passiert, wenn Sie die aus der IDialog-Vererbung entfernen. Ich vermute, nichts wird sich ändern - was passiert, wenn Sie '' 'var activity = erwarten Ergebnis;' ''? –

+1

Definitiv ein seltsames Problem. Haben Sie lokal debugged, um zu sehen, was sich zwischen den Nachrichten unterscheidet? https://blog.botframework.com/2017/10/19/debug-channel-locally-using-ngrok/ –

+0

@EzequielJadib Ich konnte leider keinen Unterschied feststellen, wenn ich eine dieser Sachen mache. –

Antwort

1

Dank des Kommentars von @EricDahlvang, bemerkte ich, dass der Fehler nicht die oben erwähnte Zeile war, obwohl der Call Stack speziell diese Zeilennummer angegeben hat. Der Fehler ist später passiert, als ich versucht habe mit "activity.From.Name" zu arbeiten. Es stellt sich heraus, dass das reguläre Skype diese Eigenschaft so einstellt, dass sie mit dem Anzeigenamen des Benutzers übereinstimmt, während die Skype Store-App dies nicht tut und null zurückgibt.

Verwandte Themen